ansible/vm/install: Wait slightly longer for Debian installer
[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: generate authorized_keys file
23       authorized_key:
24         user: root
25         path: "{{ tmpdir }}/authorized_keys"
26         key: "{{ hostvars[vmname].ssh_keys | default(noc_ssh_keys) | join('\n') }}"
27
28     - name: Inject files into initramfs
29       shell: cpio -H newc -o | gzip -9 >> {{ initramfs }}
30       args:
31         chdir: "{{ tmpdir }}"
32         stdin: |
33           preseed.cfg
34           authorized_keys
35
36   always:
37     - name: Delete temporary directory
38       file:
39         path: "{{ tmpdir }}"
40         state: absent
41
42 - name: create disks for vm
43   with_dict: "{{ hostvars[vmname].vm_install_cooked.disks.virtio | default({}) | combine(hostvars[vmname].vm_install_cooked.disks.scsi | default({})) }}"
44   lvol:
45     vg: "{{ item.value.vg }}"
46     lv: "{{ item.value.lv }}"
47     size: "{{ item.value.size }}"
48
49 - name: check if vm already exists
50   virt:
51     name: "{{ vmname }}"
52     command: info
53   register: vmhost_info
54
55 - block:
56     - name: destroy exisiting vm
57       virt:
58         name: "{{ vmname }}"
59         state: destroyed
60
61     - name: wait for vm to be destroyed
62       wait_for_virt:
63         name: "{{ vmname }}"
64         states: shutdown,crashed
65         timeout: 5
66
67     - name: undefining exisiting vm
68       virt:
69         name: "{{ vmname }}"
70         command: undefine
71
72   when: vmname in vmhost_info
73
74 - name: enable installer in VM config
75   set_fact:
76     run_installer: True
77
78 - name: define new installer vm
79   virt:
80     name: "{{ vmname }}"
81     command: define
82     xml: "{{ lookup('template', 'libvirt-domain.xml.j2') }}"
83
84 - name: start vm
85   virt:
86     name: "{{ vmname }}"
87     state: running
88
89 - name: wait for installer to start
90   wait_for_virt:
91     name: "{{ vmname }}"
92     states: running
93     timeout: 10
94
95 - debug:
96     msg: "you can check on the status of the installer running this command 'virsh console {{ vmname }}' on host {{ inventory_hostname }}."
97
98 - name: wait for installer to finish or crash
99   wait_for_virt:
100     name: "{{ vmname }}"
101     states: shutdown,crashed
102     timeout: 1800
103   register: installer_result
104   failed_when: installer_result.failed or installer_result.state == "crashed"
105
106 - name: undefining installer vm
107   virt:
108     name: "{{ vmname }}"
109     command: undefine
110
111 - name: disable installer in VM config
112   set_fact:
113     run_installer: False
114
115 - name: define new production vm
116   virt:
117     name: "{{ vmname }}"
118     command: define
119     xml: "{{ lookup('template', 'libvirt-domain.xml.j2') }}"
120
121 - name: start vm
122   virt:
123     name: "{{ vmname }}"
124     state: running
125
126 - name: mark vm as autostarted
127   virt:
128     name: "{{ vmname }}"
129     autostart: "{{ hostvars[vmname].vm_install_cooked.autostart }}"
130     command: info ## virt module needs either command or state
131   when: hostvars[vmname].vm_install_cooked.autostart is defined