vm/install: Group conditional when destroying existing VMs
[noc.git] / ansible / roles / vm / install / tasks / main.yml
1 ---
2 - block:
3     - name: Make a temporary directory
4       command: mktemp -d
5       register: tmpdir
6
7     - set_fact:
8         tmpdir: "{{ tmpdir.stdout }}"
9         initramfs: "{{ vm_host.installer.preseed_path }}/vm-{{ vmname }}-{{ vmdistro }}-{{ vmdistcodename }}.initrd.gz"
10
11     - name: Copy initramfs into position
12       copy:
13         remote_src: yes
14         src: "{{ vm_host.installer.path }}/{{ vmdistro }}-{{ vmdistcodename }}/{{ hostvars[vmname].vm_install_cooked.arch | default('amd64') }}/initrd.gz"
15         dest: "{{ initramfs }}"
16
17     - name: generate preseed file
18       template:
19         src: "preseed_{{ vmdistro }}-{{ vmdistcodename }}.cfg.j2"
20         dest: "{{ tmpdir }}/preseed.cfg"
21
22     - name: Inject files into initramfs
23       shell: cpio -H newc -o | gzip -9 >> {{ initramfs }}
24       args:
25         chdir: "{{ tmpdir }}"
26         stdin: |
27           preseed.cfg
28
29   always:
30     - name: Delete temporary directory
31       file:
32         path: "{{ tmpdir }}"
33         state: absent
34
35 - name: create disks for vm
36   with_dict: "{{ hostvars[vmname].vm_install_cooked.disks.virtio | default({}) | combine(hostvars[vmname].vm_install_cooked.disks.scsi | default({})) }}"
37   lvol:
38     vg: "{{ item.value.vg }}"
39     lv: "{{ item.value.lv }}"
40     size: "{{ item.value.size }}"
41
42 - name: check if vm already exists
43   virt:
44     name: "{{ vmname }}"
45     command: info
46   register: vmhost_info
47
48 - block:
49     - name: destroy exisiting vm
50       virt:
51         name: "{{ vmname }}"
52         state: destroyed
53
54     - name: wait for vm to be destroyed
55       wait_for_virt:
56         name: "{{ vmname }}"
57         states: shutdown,crashed
58         timeout: 5
59
60     - name: undefining exisiting vm
61       virt:
62         name: "{{ vmname }}"
63         command: undefine
64
65   when: vmname in vmhost_info
66
67 - name: enable installer in VM config
68   set_fact:
69     run_installer: True
70
71 - name: define new installer vm
72   virt:
73     name: "{{ vmname }}"
74     command: define
75     xml: "{{ lookup('template', 'libvirt-domain.xml.j2') }}"
76
77 - name: start vm
78   virt:
79     name: "{{ vmname }}"
80     state: running
81
82 - name: wait for installer to start
83   wait_for_virt:
84     name: "{{ vmname }}"
85     states: running
86     timeout: 10
87
88 - debug:
89     msg: "you can check on the status of the installer running this command 'virsh console {{ vmname }}' on host {{ inventory_hostname }}."
90
91 - name: wait for installer to finish or crash
92   wait_for_virt:
93     name: "{{ vmname }}"
94     states: shutdown,crashed
95     timeout: 900
96   register: installer_result
97   failed_when: installer_result.failed or installer_result.state == "crashed"
98
99 - name: undefining installer vm
100   virt:
101     name: "{{ vmname }}"
102     command: undefine
103
104 - name: disable installer in VM config
105   set_fact:
106     run_installer: False
107
108 - name: define new production vm
109   virt:
110     name: "{{ vmname }}"
111     command: define
112     xml: "{{ lookup('template', 'libvirt-domain.xml.j2') }}"
113
114 - name: start vm
115   virt:
116     name: "{{ vmname }}"
117     state: running
118
119 - name: mark vm as autostarted
120   virt:
121     name: "{{ vmname }}"
122     autostart: "{{ hostvars[vmname].vm_install_cooked.autostart }}"
123     command: info ## virt module needs either command or state
124   when: hostvars[vmname].vm_install_cooked.autostart is defined