5043fccfebc50ab17ecd67d7a90cf7e9a0b0a6ff
[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       tempfile:
37         state: directory
38       register: tmpdir
39
40     - import_role:
41         name: preseed
42       vars:
43         ssh_users_root: "{{ hostvars[hostname].ssh_users_root }}"
44         install_interface: enp1s1
45         preseed_tmpdir: "{{ tmpdir.path }}"
46
47     - name: Make preseed workdir readable by qemu
48       acl:
49         path: "{{ tmpdir.path }}"
50         state: present
51         entity: libvirt-qemu
52         etype: user
53         permissions: rx
54
55     - name: define new installer vm
56       virt:
57         name: "{{ hostname }}"
58         command: define
59         xml: "{{ lookup('template', 'libvirt-domain.xml.j2') }}"
60       vars:
61         run_installer: yes
62         preseed_tmpdir: "{{ tmpdir.path }}"
63
64     - name: start vm
65       virt:
66         name: "{{ hostname }}"
67         state: running
68
69     - name: wait for installer to start
70       wait_for_virt:
71         name: "{{ hostname }}"
72         states: running
73         timeout: 10
74
75     - debug:
76         msg: "you can check on the status of the installer running this command 'virsh console {{ hostname }}' on host {{ inventory_hostname }}."
77
78     - name: wait for installer to finish or crash
79       wait_for_virt:
80         name: "{{ hostname }}"
81         states: shutdown,crashed
82         timeout: 900
83       register: installer_result
84       failed_when: installer_result.failed or installer_result.state == "crashed"
85
86     - name: undefining installer vm
87       virt:
88         name: "{{ hostname }}"
89         command: undefine
90
91   always:
92     - name: cleanup temporary workdir
93       file:
94         path: "{{ tmpdir.path }}"
95         state: absent
96
97 - name: define new production vm
98   virt:
99     name: "{{ hostname }}"
100     command: define
101     xml: "{{ lookup('template', 'libvirt-domain.xml.j2') }}"
102   vars:
103     run_installer: no
104
105 - name: start vm
106   virt:
107     name: "{{ hostname }}"
108     state: running
109
110 - name: mark vm as autostarted
111   virt:
112     name: "{{ hostname }}"
113     autostart: "{{ hostvars[hostname].install_cooked.autostart }}"
114     command: info ## virt module needs either command or state
115   when: hostvars[hostname].install_cooked.autostart is defined