f14ea50fdd95d6b3a43c034bf23511904362cb7f
[noc.git] / ansible / roles / vm / install / tasks / main.yml
1 ---
2 - name: create disks for vm
3   with_dict: "{{ hostvars[hostname].install_cooked.disks.virtio | default({}) | combine(hostvars[hostname].install_cooked.disks.scsi | default({})) }}"
4   lvol:
5     vg: "{{ item.value.vg }}"
6     lv: "{{ item.value.lv }}"
7     size: "{{ item.value.size }}"
8
9 - name: check if vm already exists
10   virt:
11     name: "{{ hostname }}"
12     command: info
13   register: vmhost_info
14
15 - block:
16     - name: destroy exisiting vm
17       virt:
18         name: "{{ hostname }}"
19         state: destroyed
20
21     - name: wait for vm to be destroyed
22       wait_for_virt:
23         name: "{{ hostname }}"
24         states: shutdown,crashed
25         timeout: 5
26
27     - name: undefining exisiting vm
28       virt:
29         name: "{{ hostname }}"
30         command: undefine
31
32   when: hostname in vmhost_info
33
34 - block:
35     - name: create a temporary workdir
36       command: mktemp -d
37       register: tmpdir
38
39     - import_role:
40         name: preseed
41       vars:
42         ssh_keys: "{{ hostvars[hostname].ssh_keys }}"
43         install_interface: enp1s1
44         preseed_tmpdir: "{{ tmpdir.stdout }}"
45
46     - name: Make preseed workdir readable by qemu
47       acl:
48         path: "{{ tmpdir.stdout }}"
49         state: present
50         entity: libvirt-qemu
51         etype: user
52         permissions: rx
53
54     - name: define new installer vm
55       virt:
56         name: "{{ hostname }}"
57         command: define
58         xml: "{{ lookup('template', 'libvirt-domain.xml.j2') }}"
59       vars:
60         run_installer: yes
61         preseed_tmpdir: "{{ tmpdir.stdout }}"
62
63     - name: start vm
64       virt:
65         name: "{{ hostname }}"
66         state: running
67
68     - name: wait for installer to start
69       wait_for_virt:
70         name: "{{ hostname }}"
71         states: running
72         timeout: 10
73
74     - debug:
75         msg: "you can check on the status of the installer running this command 'virsh console {{ hostname }}' on host {{ inventory_hostname }}."
76
77     - name: wait for installer to finish or crash
78       wait_for_virt:
79         name: "{{ hostname }}"
80         states: shutdown,crashed
81         timeout: 900
82       register: installer_result
83       failed_when: installer_result.failed or installer_result.state == "crashed"
84
85     - name: undefining installer vm
86       virt:
87         name: "{{ hostname }}"
88         command: undefine
89
90   always:
91     - name: cleanup temporary workdir
92       file:
93         path: "{{ tmpdir.stdout }}"
94         state: absent
95
96 - name: define new production vm
97   virt:
98     name: "{{ hostname }}"
99     command: define
100     xml: "{{ lookup('template', 'libvirt-domain.xml.j2') }}"
101   vars:
102     run_installer: no
103
104 - name: start vm
105   virt:
106     name: "{{ hostname }}"
107     state: running
108
109 - name: mark vm as autostarted
110   virt:
111     name: "{{ hostname }}"
112     autostart: "{{ hostvars[hostname].install_cooked.autostart }}"
113     command: info ## virt module needs either command or state
114   when: hostvars[hostname].install_cooked.autostart is defined