|
3 | 3 | ansible.builtin.package: |
4 | 4 | name: "{{ _common + _specific[ansible_os_family] }}" |
5 | 5 | vars: |
6 | | - _common: [genisoimage, python3-libvirt, python3-lxml] |
| 6 | + _common: [acl, genisoimage, python3-libvirt, python3-lxml] |
7 | 7 | _specific: |
8 | 8 | Debian: [qemu-utils] |
9 | 9 | RedHat: [qemu-img] |
|
39 | 39 | _frontend_group: >- |
40 | 40 | {{ frontend_group | d('frontend') }} |
41 | 41 |
|
42 | | -- when: |
| 42 | +- ansible.builtin.include_tasks: |
| 43 | + file: "{{ role_path }}/tasks/deploy.yml" |
| 44 | + when: |
43 | 45 | - infra_to_frontends[inventory_hostname] is defined |
44 | 46 | - infra_to_frontends[inventory_hostname] is truthy |
45 | | - block: |
46 | | - - name: Create missing dirs |
47 | | - ansible.builtin.file: |
48 | | - path: "{{ item }}" |
49 | | - state: directory |
50 | | - owner: 9869 |
51 | | - group: 9869 |
52 | | - mode: u=rwx,go= |
53 | | - loop: >- |
54 | | - {{ [runtime_dir, '/var/lib/one'] + (passthrough_fs | map(attribute='source_dir')) }} |
55 | | -
|
56 | | - - block: |
57 | | - - name: Create temporary dirs |
58 | | - ansible.builtin.tempfile: |
59 | | - prefix: "one-deploy.{{ frontend }}." |
60 | | - state: directory |
61 | | - loop_control: { loop_var: frontend } |
62 | | - loop: "{{ infra_to_frontends[inventory_hostname] }}" |
63 | | - register: tempfile |
64 | | - |
65 | | - - name: Create context.sh files |
66 | | - ansible.builtin.template: |
67 | | - dest: "{{ tempfile.results[item].path }}/context.sh" |
68 | | - src: context.sh.j2 |
69 | | - owner: 0 |
70 | | - group: 0 |
71 | | - mode: u=rw,go= |
72 | | - vars: |
73 | | - frontend: "{{ tempfile.results[item].frontend }}" |
74 | | - context: "{{ hostvars[tempfile.results[item].frontend].context }}" |
75 | | - loop: "{{ range(tempfile.results | count) }}" |
76 | | - register: template_context_sh |
77 | | - |
78 | | - - when: template_context_sh is changed |
79 | | - block: |
80 | | - - name: Create context ISO images |
81 | | - ansible.builtin.shell: |
82 | | - cmd: genisoimage -Jr -V CONTEXT -o '{{ runtime_dir }}/{{ frontend }}.iso' '{{ tempfile.results[item].path }}/context.sh' |
83 | | - vars: |
84 | | - frontend: "{{ tempfile.results[item].frontend }}" |
85 | | - loop: "{{ range(tempfile.results | count) }}" |
86 | | - |
87 | | - - name: Update context ISO image permissions |
88 | | - ansible.builtin.file: |
89 | | - path: "{{ runtime_dir }}/{{ frontend }}.iso" |
90 | | - owner: 9869 |
91 | | - group: 9869 |
92 | | - mode: u=r,go= |
93 | | - vars: |
94 | | - frontend: "{{ tempfile.results[item].frontend }}" |
95 | | - loop: "{{ range(tempfile.results | count) }}" |
96 | | - |
97 | | - always: |
98 | | - - name: Delete temporary dirs |
99 | | - ansible.builtin.file: |
100 | | - path: "{{ item }}" |
101 | | - state: absent |
102 | | - loop: "{{ tempfile.results | map(attribute='path') }}" |
103 | | - |
104 | | - - name: Download OS image |
105 | | - ansible.builtin.get_url: |
106 | | - url: "{{ os_image_url }}" |
107 | | - dest: "{{ runtime_dir }}/{{ os_image_url | basename }}" |
108 | | - |
109 | | - - name: Clone OS image |
110 | | - ansible.builtin.copy: |
111 | | - dest: "{{ runtime_dir }}/{{ frontend }}.qcow2" |
112 | | - src: "{{ runtime_dir }}/{{ os_image_url | basename }}" |
113 | | - remote_src: true |
114 | | - owner: 9869 |
115 | | - group: 9869 |
116 | | - mode: u=rw,go= |
117 | | - force: false |
118 | | - loop_control: { loop_var: frontend } |
119 | | - loop: "{{ infra_to_frontends[inventory_hostname] }}" |
120 | | - |
121 | | - - name: Try to resize cloned OS images |
122 | | - ansible.builtin.shell: |
123 | | - cmd: qemu-img resize '{{ runtime_dir }}/{{ frontend }}.qcow2' '{{ os_image_size }}' |
124 | | - loop_control: { loop_var: frontend } |
125 | | - loop: "{{ infra_to_frontends[inventory_hostname] }}" |
126 | | - ignore_errors: true # NOTE: This is a best effort operation. |
127 | | - |
128 | | - - name: Compute VNC ports |
129 | | - ansible.builtin.set_fact: |
130 | | - frontends_to_vnc_ports: >- |
131 | | - {{ dict(_frontends | zip(_ports)) }} |
132 | | - vars: |
133 | | - _ports: >- |
134 | | - {{ range(vnc_max_port, vnc_max_port - (_frontends | count), -1) }} |
135 | | - _frontends: >- |
136 | | - {{ groups[_frontend_group] }} |
137 | | - _frontend_group: >- |
138 | | - {{ frontend_group | d('frontend') }} |
139 | | -
|
140 | | - - name: Define Front-end VMs |
141 | | - community.libvirt.virt: |
142 | | - command: define |
143 | | - xml: "{{ lookup('template', 'frontend.xml.j2') }}" |
144 | | - autostart: true |
145 | | - vars: |
146 | | - context: "{{ hostvars[frontend].context }}" |
147 | | - loop_control: { loop_var: frontend } |
148 | | - loop: "{{ infra_to_frontends[inventory_hostname] }}" |
149 | | - |
150 | | - - name: Start Front-end VMs |
151 | | - community.libvirt.virt: |
152 | | - name: "{{ frontend }}" |
153 | | - state: running |
154 | | - loop_control: { loop_var: frontend } |
155 | | - loop: "{{ infra_to_frontends[inventory_hostname] }}" |
0 commit comments