diff options
Diffstat (limited to 'roles/vm/install')
-rw-r--r-- | roles/vm/install/tasks/main.yml | 69 | ||||
-rw-r--r-- | roles/vm/install/templates/libvirt-domain.xml.j2 | 28 | ||||
-rw-r--r-- | roles/vm/install/templates/preseed_debian-stretch.cfg.j2 | 28 |
3 files changed, 49 insertions, 76 deletions
diff --git a/roles/vm/install/tasks/main.yml b/roles/vm/install/tasks/main.yml index 22a6a351..36693125 100644 --- a/roles/vm/install/tasks/main.yml +++ b/roles/vm/install/tasks/main.yml @@ -2,45 +2,39 @@ - name: generate preseed file template: src: "preseed_{{ vmdistro }}-{{ vmdistcodename }}.cfg.j2" - dest: "{{ hostvars[vm_install.host].vm_host.installer.preseed_path }}/vm-{{ inventory_hostname }}-{{ vmdistro }}-{{ vmdistcodename }}.cfg" - delegate_to: "{{ vm_install.host }}" + dest: "{{ vm_host.installer.preseed_path }}/vm-{{ vmname }}-{{ vmdistro }}-{{ vmdistcodename }}.cfg" - name: create disks for vm - with_dict: "{{ vm_install.disks.virtio | default({}) | combine(vm_install.disks.scsi | default({})) }}" + with_dict: "{{ hostvars[vmname].vm_install_cooked.disks.virtio | default({}) | combine(hostvars[vmname].vm_install_cooked.disks.scsi | default({})) }}" lvol: vg: "{{ item.value.vg }}" lv: "{{ item.value.lv }}" size: "{{ item.value.size }}" - delegate_to: "{{ vm_install.host }}" - name: check if vm already exists virt: - name: "{{ inventory_hostname }}" + name: "{{ vmname }}" command: info - delegate_to: "{{ vm_install.host }}" register: vmhost_info - name: destroy exisiting vm virt: - name: "{{ inventory_hostname }}" + name: "{{ vmname }}" state: destroyed - delegate_to: "{{ vm_install.host }}" - when: inventory_hostname in vmhost_info + when: vmname in vmhost_info - name: wait for vm to be destroyed wait_for_virt: - name: "{{ inventory_hostname }}" + name: "{{ vmname }}" states: shutdown,crashed timeout: 5 - delegate_to: "{{ vm_install.host }}" - when: inventory_hostname in vmhost_info + when: vmname in vmhost_info - name: undefining exisiting vm virt: - name: "{{ inventory_hostname }}" + name: "{{ vmname }}" command: undefine - delegate_to: "{{ vm_install.host }}" - when: inventory_hostname in vmhost_info + when: vmname in vmhost_info - name: enable installer in VM config set_fact: @@ -48,41 +42,36 @@ - name: define new installer vm virt: - name: "{{ inventory_hostname }}" + name: "{{ vmname }}" command: define xml: "{{ lookup('template', 'libvirt-domain.xml.j2') }}" - delegate_to: "{{ vm_install.host }}" - name: start vm virt: - name: "{{ inventory_hostname }}" + name: "{{ vmname }}" state: running - delegate_to: "{{ vm_install.host }}" - name: wait for installer to start wait_for_virt: - name: "{{ inventory_hostname }}" + name: "{{ vmname }}" states: running timeout: 10 - delegate_to: "{{ vm_install.host }}" - debug: - msg: "you can check on the status of the installer running this command 'virsh console {{ inventory_hostname }}' on host {{ vm_install.host }}." + msg: "you can check on the status of the installer running this command 'virsh console {{ vmname }}' on host {{ inventory_hostname }}." - name: wait for installer to finish or crash wait_for_virt: - name: "{{ inventory_hostname }}" + name: "{{ vmname }}" states: shutdown,crashed - timeout: 900 - delegate_to: "{{ vm_install.host }}" + timeout: 1500 register: installer_result failed_when: installer_result.failed or installer_result.state == "crashed" - name: undefining installer vm virt: - name: "{{ inventory_hostname }}" + name: "{{ vmname }}" command: undefine - delegate_to: "{{ vm_install.host }}" - name: disable installer in VM config set_fact: @@ -90,34 +79,18 @@ - name: define new production vm virt: - name: "{{ inventory_hostname }}" + name: "{{ vmname }}" command: define xml: "{{ lookup('template', 'libvirt-domain.xml.j2') }}" - delegate_to: "{{ vm_install.host }}" - name: start vm virt: - name: "{{ inventory_hostname }}" + name: "{{ vmname }}" state: running - delegate_to: "{{ vm_install.host }}" - name: mark vm as autostarted virt: - name: "{{ inventory_hostname }}" - autostart: "{{ vm_install.autostart }}" + name: "{{ vmname }}" + autostart: "{{ hostvars[vmname].vm_install_cooked.autostart }}" command: info ## virt module needs either command or state - delegate_to: "{{ vm_install.host }}" - when: vm_install.autostart is defined - -- name: disable ssh StrictHostKeyChecking for the next step - set_fact: - ansible_ssh_extra_args: -o StrictHostKeyChecking=no - -- name: wait for vm to start up - wait_for_connection: - delay: 5 - timeout: 120 - -- name: reenable StrictHostKeyChecking - set_fact: - ansible_ssh_extra_args: "" + when: hostvars[vmname].vm_install_cooked.autostart is defined diff --git a/roles/vm/install/templates/libvirt-domain.xml.j2 b/roles/vm/install/templates/libvirt-domain.xml.j2 index c84b1045..2bf4b57b 100644 --- a/roles/vm/install/templates/libvirt-domain.xml.j2 +++ b/roles/vm/install/templates/libvirt-domain.xml.j2 @@ -1,14 +1,14 @@ <domain type='kvm'> - <name>{{ inventory_hostname }}</name> - <memory>{{ vm_install.mem * 1024 }}</memory> - <currentMemory>{{ vm_install.mem * 1024 }}</currentMemory> - <vcpu>{{ vm_install.numcpu }}</vcpu> + <name>{{ vmname }}</name> + <memory>{{ hostvars[vmname].vm_install_cooked.mem * 1024 }}</memory> + <currentMemory>{{ hostvars[vmname].vm_install_cooked.mem * 1024 }}</currentMemory> + <vcpu>{{ hostvars[vmname].vm_install_cooked.numcpu }}</vcpu> <os> <type arch='x86_64' machine='pc-0.12'>hvm</type> {% if run_installer %} - <kernel>{{ hostvars[vm_install.host].vm_host.installer.path }}/{{ vmdistro }}-{{ vmdistcodename }}/{{ vm_install.arch | default('amd64') }}/linux</kernel> - <initrd>{{ hostvars[vm_install.host].vm_host.installer.path }}/{{ vmdistro }}-{{ vmdistcodename }}/{{ vm_install.arch | default('amd64') }}/initrd.gz</initrd> - <cmdline>console=ttyS0,115200n8 auto=true interface=auto url=tftp://{{ hostvars[vm_install.host]['ansible_' + hostvars[vm_install.host].vm_host.installer.net_if].ipv4.address }}/vm-{{ inventory_hostname }}-{{ vmdistro }}-{{ vmdistcodename }}.cfg netcfg/choose_interface=enp1s1 netcfg/disable_autoconfig=true netcfg/get_ipaddress={{ vm_network.primary.ip }} netcfg/get_netmask={{ vm_network.primary.mask }} netcfg/get_gateway={{ vm_network.primary.gateway }} netcfg/get_nameservers="{{ vm_network.primary.nameservers | join(' ') }}" netcfg/confirm_static=true netcfg/get_hostname={{ inventory_hostname }} netcfg/get_domain={{ vm_network.primary.domain }}</cmdline> + <kernel>{{ vm_host.installer.path }}/{{ vmdistro }}-{{ vmdistcodename }}/{{ hostvars[vmname].vm_install_cooked.arch | default('amd64') }}/linux</kernel> + <initrd>{{ vm_host.installer.path }}/{{ vmdistro }}-{{ vmdistcodename }}/{{ hostvars[vmname].vm_install_cooked.arch | default('amd64') }}/initrd.gz</initrd> + <cmdline>console=ttyS0,115200n8 auto=true interface=auto url=tftp://{{ hostvars[inventory_hostname]['ansible_' + (vm_host.installer.net_if | replace('-', '_'))].ipv4.address }}/vm-{{ vmname }}-{{ vmdistro }}-{{ vmdistcodename }}.cfg netcfg/choose_interface=enp1s1 netcfg/disable_autoconfig=true netcfg/get_ipaddress={{ hostvars[vmname].vm_network_cooked.primary.ip }} netcfg/get_netmask={{ hostvars[vmname].vm_network_cooked.primary.mask }} netcfg/get_gateway={{ hostvars[vmname].vm_network_cooked.primary.gateway }} netcfg/get_nameservers="{{ hostvars[vmname].vm_network_cooked.nameservers | join(' ') }}" netcfg/confirm_static=true netcfg/get_hostname={{ vmname }} netcfg/get_domain={{ hostvars[vmname].vm_network_cooked.domain }}</cmdline> {% endif %} <boot dev='hd'/> </os> @@ -29,8 +29,8 @@ <devices> <emulator>/usr/bin/kvm</emulator> -{% if 'virtio' in vm_install.disks %} -{% for device, lv in vm_install.disks.virtio.items() %} +{% if 'virtio' in hostvars[vmname].vm_install_cooked.disks %} +{% for device, lv in hostvars[vmname].vm_install_cooked.disks.virtio.items() %} <disk type='block' device='disk'> <driver name='qemu' type='raw' cache='none' discard='unmap'/> <source dev='/dev/mapper/{{ lv.vg | replace('-', '--') }}-{{ lv.lv | replace('-', '--') }}'/> @@ -39,9 +39,9 @@ {% endfor %} {% endif %} -{% if 'scsi' in vm_install.disks %} +{% if 'scsi' in hostvars[vmname].vm_install_cooked.disks %} <controller type='scsi' index='0' model='virtio-scsi'/> -{% for device, lv in vm_install.disks.scsi.items() %} +{% for device, lv in hostvars[vmname].vm_install_cooked.disks.scsi.items() %} <disk type='block' device='disk'> <driver name='qemu' type='raw' cache='none' discard='unmap'/> <source dev='/dev/mapper/{{ lv.vg | replace('-', '--') }}-{{ lv.lv | replace('-', '--') }}'/> @@ -50,12 +50,12 @@ {% endfor %} {% endif %} -{% if vm_install.interfaces %} -{% for if in vm_install.interfaces %} +{% if hostvars[vmname].vm_install_cooked.interfaces %} +{% for if in hostvars[vmname].vm_install_cooked.interfaces %} <interface type='bridge'> <source bridge='{{ if.bridge }}'/> <model type='virtio'/> - <address type='pci' domain='0x0000' bus='0x01' slot='0x0{{ if.idx }}' function='0x0'/> + <address type='pci' domain='0x0000' bus='0x01' slot='0x0{{ loop.index }}' function='0x0'/> </interface> {% endfor %} {% endif %} diff --git a/roles/vm/install/templates/preseed_debian-stretch.cfg.j2 b/roles/vm/install/templates/preseed_debian-stretch.cfg.j2 index 55ddbfc2..8e221671 100644 --- a/roles/vm/install/templates/preseed_debian-stretch.cfg.j2 +++ b/roles/vm/install/templates/preseed_debian-stretch.cfg.j2 @@ -10,14 +10,14 @@ d-i keyboard-configuration/xkb-keymap select de #d-i netcfg/choose_interface select enp1s1 #d-i netcfg/disable_autoconfig boolean false -#d-i netcfg/get_ipaddress string {{ vm_network.primary.ip }} -#d-i netcfg/get_netmask string {{ vm_network.primary.mask }} -#d-i netcfg/get_gateway string {{ vm_network.primary.gateway }} -#d-i netcfg/get_nameservers string {{ vm_network.primary.nameservers | join(' ') }} +#d-i netcfg/get_ipaddress string {{ hostvars[vmname].vm_network_cooked.primary.ip }} +#d-i netcfg/get_netmask string {{ hostvars[vmname].vm_network_cooked.primary.mask }} +#d-i netcfg/get_gateway string {{ hostvars[vmname].vm_network_cooked.primary.gateway }} +#d-i netcfg/get_nameservers string {{ hostvars[vmname].vm_network_cooked.nameservers | join(' ') }} #d-i netcfg/confirm_static boolean true -d-i netcfg/get_hostname string {{ inventory_hostname }} -d-i netcfg/get_domain string {{ vm_network.primary.domain }} +d-i netcfg/get_hostname string {{ vmname }} +d-i netcfg/get_domain string {{ hostvars[vmname].vm_network_cooked.domain }} d-i netcfg/wireless_wep string @@ -37,7 +37,7 @@ d-i time/zone string Europe/Vienna d-i clock-setup/ntp boolean false -d-i partman-auto/disk string /dev/{{ vm_install.disks.primary }} +d-i partman-auto/disk string /dev/{{ hostvars[vmname].vm_install_cooked.disks.primary }} d-i partman-auto/method string lvm d-i partman-lvm/device_remove_lvm boolean true d-i partman-md/device_remove_md boolean true @@ -49,22 +49,22 @@ d-i partman-auto/expert_recipe string \ boot-root :: \ 1000 10000 -1 ext4 \ $defaultignore{ } $primary{ } $bootable{ } \ - method{ lvm } vg_name{ {{ inventory_hostname }} } \ + method{ lvm } vg_name{ {{ vmname }} } \ . \ 2048 10000 2560 ext4 \ - $lvmok{ } in_vg{ {{ inventory_hostname }} } \ + $lvmok{ } in_vg{ {{ vmname }} } \ method{ format } format{ } \ use_filesystem{ } filesystem{ ext4 } \ mountpoint{ / } \ . \ 1024 11000 1280 ext4 \ - $lvmok{ } in_vg{ {{ inventory_hostname }} } \ + $lvmok{ } in_vg{ {{ vmname }} } \ method{ format } format{ } \ use_filesystem{ } filesystem{ ext4 } \ mountpoint{ /var } \ . \ 768 10000 768 ext4 \ - $lvmok{ } in_vg{ {{ inventory_hostname }} } \ + $lvmok{ } in_vg{ {{ vmname }} } \ method{ format } format{ } \ use_filesystem{ } filesystem{ ext4 } \ mountpoint{ /var/log } \ @@ -72,7 +72,7 @@ d-i partman-auto/expert_recipe string \ options/noexec{ noexec } \ . \ 16 20000 -1 ext4 \ - $lvmok{ } in_vg{ {{ inventory_hostname }} } \ + $lvmok{ } in_vg{ {{ vmname }} } \ method( keep } lv_name{ dummy } \ . @@ -92,7 +92,7 @@ d-i pkgsel/include string openssh-server python d-i pkgsel/upgrade select safe-upgrade popularity-contest popularity-contest/participate boolean false -d-i grub-installer/choose_bootdev string /dev/{{ vm_install.disks.primary }} +d-i grub-installer/choose_bootdev string /dev/{{ hostvars[vmname].vm_install_cooked.disks.primary }} d-i grub-installer/only_debian boolean true d-i grub-installer/with_other_os boolean false @@ -100,6 +100,6 @@ d-i finish-install/reboot_in_progress note d-i preseed/late_command string \ - lvremove -f {{ inventory_hostname }}/dummy; \ + lvremove -f {{ vmname }}/dummy; \ in-target bash -c "apt-get update -q && apt-get full-upgrade -y -q"; \ in-target bash -c "passwd -d root; passwd -l root; umask 077; mkdir -p /root/.ssh/; echo -e '{{ sshserver_root_keys }}' > /root/.ssh/authorized_keys" |