collection of ansible roles
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 

126 lines
3.6 KiB

---
- name: ensure upobsd is installed
community.general.openbsd_pkg:
name: upobsd
state: present
snapshot: "{{ force_openbsd_snapshot | default(false) }}"
- name: network configuration
template:
src: "hostname.if"
dest: "/etc/hostname.{{ item.name }}"
owner: root
group: wheel
mode: "0640"
with_items:
- "{{ vm_interfaces }}"
when: interfaces is defined
notify: reload network
- name: vm directory
file:
path: "{{ vm_dir }}"
state: directory
mode: 0700
owner: _vmd
- name: vm specific site package on mirror
copy:
src: site.tgz
dest: "{{ mirror_root }}/{{ item.0 }}/site{{ item.1.os_version | replace('.','') }}.tgz"
when: item.1.os_version in item.0
with_nested:
- "{{ mirror_targets }}"
- "{{ vms }}"
- name: update OpenBSD mirror index.txt
shell: "cd {{ mirror_root }}/{{ item.0 }}/ && ls -ln > index.txt"
when: item.1.os_version in item.0
with_nested:
- "{{ mirror_targets }}"
- "{{ vms }}"
- name: calculate vm mac addresses
shell: echo {{ item.0.name }} {{ item.1.network }}|md5|sed 's/^\(..\)\(..\)\(..\)\(..\)\(..\).*$/02:\1:\2:\3:\4:\5/'
with_subelements:
- "{{ vms }}"
- interfaces
register: vm_lladdr
tags: vm.conf,lladdr
- name: prepare dhcpd lease
set_fact:
static: "{{ static|default([]) + [{ 'host': item.item.0.name, 'lladdr': item.stdout, 'ip': item.item.1.ip, 'network': item.item.1.network }] }}"
with_items:
- "{{ vm_lladdr.results }}"
tags: lladdr
changed_when: True
notify: update dhcpd.conf
- name: debug
debug: "msg={{ static }}"
tags: lladdr
- name: vm disks
stat:
path: "{{ vm_dir }}/{{ item.1.name }}"
get_checksum: False
get_md5: False
get_mime: False
get_attributes: False
with_subelements:
- "{{ vms }}"
- disks
register: st_disks
- name: create vm disks
command: "doas -u _vmd vmctl create {{ vm_dir }}/{{ item.item.1.name }} -s {{ item.item.1.size }}"
when: not item.stat.exists
with_items:
- "{{ st_disks.results }}"
- name: create auto_intall.conf from template
template:
src: auto_install.conf
dest: /tmp/auto_install.conf-{{ item.item.0.name }}
when: not item.stat.exists
with_items:
- "{{ st_disks.results }}"
- name: gather vms to create
find:
paths: /tmp/
patterns: auto_install.conf-*
register: auto_install_vms
- name: create custom ramdisk for vm bootstrap
command: "upobsd -V {{ item.0.os_version }} -i {{ item.1.path }} -o /home/vm/bsd.rd-{{ item.0.name }}"
when: item.0.name in item.1.path
with_nested:
- "{{ vms }}"
- "{{ auto_install_vms.files }}"
- name: vm.conf
template:
src: vm.conf
dest: /etc/vm.conf
owner: root
group: wheel
mode: '0640'
tags: vm.conf
notify: reload vmd
- name: reload vmd
service:
name: vmd
state: reloaded
enabled: true
when: auto_install_vms is defined
- name: bootstrap vm
shell: "vmctl start {{ item.0.name }}-bootstrap -b /home/vm/bsd.rd-{{ item.0.name }} -d {{ vm_dir }}/{{ item.0.disks.0.name }} -n {{ item.0.interfaces.0.network }} && while ps auxww |grep \"vmd: {{ item.0.name }}-bootstrap\" | grep -v grep; do sleep 1; done"
when: item.0.name in item.1.path
with_nested:
- "{{ vms }}"
- "{{ auto_install_vms.files }}"
notify: bootstrap done
- name: delete temporary files
shell: rm -rf /tmp/auto_*
tags: delete
- name: "pf rules: pass all on vm bridge interfaces"
lineinfile:
path: /etc/anchors/ansible
line: "pass on {{ item.interface }}"
with_items:
- "{{ vm_network }}"
notify: reload pf
- name: "pf rules: pass all on tap interfaces"
lineinfile:
path: /etc/anchors/ansible
line: "pass on tap"
notify: reload pf