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