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