Ansible role to provision a zone on OpenIndiana
Olaf Bohlen
2021-05-21 eaa3b17739df88f2daab02382e43d5e77877ba93
commit | author | age
9cdfbb 1 ---
3ada41 2 # tasks file for oi-zone
4b5fae 3 - name: creating zone for you
OB 4   block:
e7b69f 5     # jump into rescue if we want to uninstall
OB 6     - name: check for uninstall
7       fail:
8         msg: "uninstall is set to true, deleting resources"
9       when:
10         - oizone['uninstall'] is defined
11         - oizone['uninstall']
12         
4b5fae 13     - name: create VNICs with VLAN
OB 14       dladm_vnic:
15         name: "{{ item['logical'] }}"
16         link: "{{ item['physical'] }}"
17         vlan: "{{ item['vlan'] }}"
18       loop: "{{ oizone['nics'] }}"
19       when: item['vlan'] is defined
3ada41 20
4b5fae 21     - name: create VNICs without VLAN
OB 22       dladm_vnic:
23         name: "{{ item['logical'] }}"
24         link: "{{ item['physical'] }}"
25       loop: "{{ oizone['nics'] }}"
26       when: item['vlan'] is not defined
27
28     - name: create filesystems
29       zfs:
30         name: "{{ item['path'] }}"
31         state: present
32         extra_zfs_properties: "{{ item['extra_zfs_properties'] }}"
33       loop: "{{ oizone['filesystems'] }}"
34       when: item['zfscreate']
a9c6b8 35
OB 36     - name: is the zone already there?
37       shell: zoneadm -z {{ oizone['name'] }} list
38       register: zoneout
39       changed_when: false
40       ignore_errors: true
41       
43c2ae 42     - name: set up zone
4b5fae 43       solaris_zone:
OB 44         name: "{{ oizone['name'] }}"
45         state: installed
46         path: "{{ oizone['zoneroot'] }}/{{ oizone['name'] }}"
eaa3b1 47         install_options: "{% if oizone['brand'] == 'kvm' %}{% else %}-e pkg:/security/sudo -e runtime/python-27{% endif %}"
4b5fae 48         config: >
OB 49           set brand={{ oizone['brand'] }};
50           set autoboot={{ oizone['autoboot'] }};
51           {% if oizone['bootargs'] is defined and oizone['bootargs'] | length %}
52           set bootargs={{ oizone['bootargs'] }};
53           {% endif %}
54           set ip-type={{ oizone['iptype'] }};
55           {% for nic in oizone['nics'] %}
56           add net;
57           set physical={{ nic['logical'] }};
58           {% if oizone['iptype'] == "shared" %}
59           set address={{ nic['address'] }};
60           {% endif %}
61           end;
62           {% endfor %}
63           {% if oizone['cpus'] is defined and oizone['cpus'] == "dedicated" %}
64           add dedicated-cpu;
65           set ncpus={{ oizone['ncpus'] }};
66           end;
67           {% endif %}
68           {% if oizone['cpus'] is defined and oizone['cpus'] == "capped-cpu" %}
69           add capped-cpu;
70           set ncpus={{ oizone['ncpus'] }};
71           end;
72           {% endif %}
73           {% if oizone['mem'] is defined and oizone['mem'] == "capped-memory" %}
74           add capped-memory;
75           set physical={{ oizone['ram'] }};
76           set swap={{ oizone['swap'] }};
77           set locked={{ oizone['locked'] }};
78           end;
79           {% endif %}
80           {% for dataset in oizone['filesystems'] %}
81           {% if dataset['type'] == "dataset" %}
82           add dataset;
83           set name={{ dataset['path'] }};
84           end;
85           {% endif %}
86           {% if dataset['type'] == "lofs" %}
87           add fs;
88           set special={{ dataset['path'] }};
89           set dir={{ dataset['mountpoint'] }};
90           set type="lofs";
eaa3b1 91           {% for option in dataset['options'] %}
4b5fae 92           add options {{ option }};
OB 93           {% endfor %}
94           end;
95           {% endif %}
96           {% if dataset['type'] == "volume" %}
97           add device;
98           set match=/dev/zvol/rdsk/{{ dataset['path'] }};
99           end;
100           {% endif %}
101           {% endfor %}
102           {% if oizone['brand'] == "kvm" %}
103           add attr;
104           set name="bootorder";
105           set type="string";
106           set value="{{ oizone['kvm']['bootorder'] }}";
eaa3b1 107           end;
4b5fae 108           add attr;
OB 109           set name="vnc";
110           set type="string";
111           set value="{{ oizone['kvm']['vnc'] }}";
112           end;
113           add attr;
114           set name="vcpus";
115           set type="string";
116           set value="{{ oizone['ncpus'] }}";
117           end;
118           add attr;
119           set name="ram";
120           set type="string";
121           set value="{{ oizone['ram'] }}";
122           end;
eaa3b1 123           {% for dataset in oizone['filesystems'] %}
OB 124           {% if dataset['kvmlabel'] is defined %}
125           add attr;
126           set name="{{ dataset['kvmlabel'] }}";
127           set type="string";
128           set value="{{ dataset['path'] }}";
129           end;
130           {% endif %}
131           {% endfor %}
4b5fae 132           {% endif %}
a9c6b8 133       when: zoneout.rc == 1
eaa3b1 134
4b5fae 135     - name: create a sysding.conf
OB 136       template:
137         dest: "{{ oizone['zoneroot'] }}/{{ oizone['name'] }}/root/etc/sysding.conf"
138         src: sysding.j2
139         mode: 0400
eaa3b1 140       when: oizone['sysding'] is defined
4b5fae 141
OB 142     - name: boot zone
143       solaris_zone:
144         name: "{{ oizone['name'] }}"
145         state: running
146         path: "{{ oizone['zoneroot'] }}/{{ oizone['name'] }}"
147
148     - name: add zone to inventory
149       local_action:
150         module: lineinfile
151         path: "{{ inventory_file }}"
152         insertbefore: "BOF"
153         line: "{{ oizone['name'] }}.{{ oizone['sysding']['ip']['dns']['domain'] }}"
154       when:
155         - oizone['updateinventory'] is defined
156         - oizone['updateinventory']
157       
158   rescue:   # in case something wents wrong above, we do housekeeping here
159     - name: ATTENTION
160       debug:
161         msg: "failed to install {{ oizone['name'] }}, rolling back"
162     - name: delete zone
163       solaris_zone:
164         name: "{{ oizone['name'] }}"
165         state: absent
166         path: "{{ oizone['zoneroot'] }}/{{ oizone['name'] }}"
167
168     - name: delete VNICs
169       dladm_vnic:
170         name: "{{ item['logical'] }}"
171         link: "{{ item['physical'] }}"
172         state: absent
173       loop: "{{ oizone['nics'] }}"
174         
175     - name: delete filesystems
176       zfs:
177         name: "{{ item['path'] }}"
178         state: absent
179         extra_zfs_properties: "{{ item['extra_zfs_properties'] }}"
180       loop: "{{ oizone['filesystems'] }}"
181       when: item['zfscreate']
182