/
Generate_interfaces.yml
259 lines (236 loc) · 6.33 KB
/
Generate_interfaces.yml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
---
- name: Check interface veno0 exists
shell: /sbin/ifconfig | grep veno0 | wc -l
register: iface_veno0
- debug:
msg: "veno0 is {{ iface_veno0.stdout }}"
- name: Backup interfaces file
become: yes
command: mv /etc/network/interfaces /etc/network/interfaces.bck
when:
- ansible_os_family == "Debian"
- iface_veno0.stdout == '0'
- name: Create a new interfaces file
become: yes
when:
- ansible_os_family == "Debian"
- iface_veno0.stdout == '0'
file:
path: /etc/network/interfaces
state: touch
mode: 0644
owner: root
group: root
- name: Inject code into new interfaces file (Generating IP for Br0) - control group
become: yes
when:
- ansible_os_family == "Debian"
- iface_veno0.stdout == '0'
- inventory_hostname in groups['control']
ignore_errors: true
blockinfile:
mode: 0644
path: /etc/network/interfaces
state: present
block: |
auto lo
iface lo inet loopback
dns-search maas
dns-nameservers {{ DNS_NAMESERVER }}
auto eno1
iface eno1 inet static
dns-nameservers {{ DNS_NAMESERVER }}
address {{ ansible_eno1.ipv4.address }}
netmask 255.255.255.0
auto br0
iface br0 inet static
dns-nameservers {{ DNS_NAMESERVER }}
pre-up ip link add veno0 type veth peer name veno1
pre-up ifconfig veno0 up
pre-up ifconfig veno1 up
bridge_ports eno2 veno0
bridge_fd 0
bridge_maxwait 0
address {{ CIDR }}{{ ansible_eno1.ipv4.address.split('.')[3] }}
netmask 255.255.255.0
gateway {{ CIDR }}{{ gateway_Oct }}
up route add -net {{ CIDR }}{{ network_Oct }} netmask 255.255.255.0 gw {{ CIDR }}{{ gateway_Oct }} br0
- name: Inject code into new interfaces file (Generating IP for Br0) - private group
become: yes
when:
- ansible_os_family == "Debian"
- inventory_hostname not in groups['control']
ignore_errors: true
blockinfile:
mode: 0644
path: /etc/network/interfaces
state: present
block: |
auto lo
iface lo inet loopback
dns-search maas
dns-nameservers {{ DNS_NAMESERVER }}
auto eno1
iface eno1 inet static
dns-nameservers {{ DNS_NAMESERVER }}
address {{ ansible_eno1.ipv4.address }}
netmask 255.255.255.0
auto eno2
iface eno2 inet static
dns-nameservers {{ DNS_NAMESERVER }}
address {{ CIDR }}{{ ansible_eno1.ipv4.address.split('.')[3] }}
netmask 255.255.255.0
gateway {{ CIDR }}{{ gateway_Oct }}
- name: Create a new public interfaces file
become: yes
when:
- ansible_os_family == "RedHat"
- iface_veno0.stdout == '0'
file:
path: /etc/sysconfig/network-scripts/ifcfg-eno2
state: touch
mode: 0644
owner: root
group: root
- name: Inject code into new interfaces file (Generating IP for eno2)
become: yes
when:
- ansible_os_family == "RedHat"
- iface_veno0.stdout == '0'
ignore_errors: true
blockinfile:
mode: 0644
path: /etc/sysconfig/network-scripts/ifcfg-eno2
state: present
block: |
DEVICE="eno2"
BOOTPROTO="static"
ONBOOT="yes"
TYPE="Ethernet"
USERCTL="yes"
PEERDNS="yes"
IPV6INIT="no"
PERSISTENT_DHCLIENT="1"
BRIDGE=br0
IPADDR="{{ CIDR }}{{ ansible_eno1.ipv4.address.split('.')[3] }}"
NETMASK="255.255.255.0"
GATEWAY="{{ CIDR }}{{ gateway_Oct }}"
DNS1=10.245.0.10
NM_CONTROLLED="no"
- name: Bring up eno2
become: yes
command: bash -c "ifup eno2"
when:
- ansible_os_family == "RedHat"
- iface_veno0.stdout == '0'
- name: Install bridge-utils
become: yes
yum:
name: bridge-utils
state: present
when:
- ansible_os_family == "RedHat"
- name: Delete IP in eno2
become: yes
when:
- ansible_os_family == "RedHat"
- iface_veno0.stdout == '0'
lineinfile:
path: /etc/sysconfig/network-scripts/ifcfg-eno2
state: absent
regexp: "{{ item }}"
with_items:
- '^IPADDR'
- '^NETMASK'
- '^GATEWAY'
- name: Create a br0 file
become: yes
when:
- ansible_os_family == "RedHat"
- iface_veno0.stdout == '0'
file:
path: /etc/sysconfig/network-scripts/ifcfg-br0
state: touch
mode: 0644
owner: root
group: root
- name: Inject code into new br0 file (Generating IP for Br0)
become: yes
when:
- ansible_os_family == "RedHat"
- iface_veno0.stdout == '0'
ignore_errors: true
blockinfile:
mode: 0644
path: /etc/sysconfig/network-scripts/ifcfg-br0
state: present
block: |
DEVICE="br0"
BOOTPROTO="static"
ONBOOT="yes"
TYPE="Bridge"
NM_CONTROLLED="no"
IPADDR="{{ CIDR }}{{ ansible_eno1.ipv4.address.split('.')[3] }}"
NETMASK="255.255.255.0"
GATEWAY="{{ CIDR }}{{ gateway_Oct }}"
- name: Copy ifup/ifdown files for veno0/veno1
become: yes
copy:
src: "{{ item }}"
dest: /etc/sysconfig/network-scripts
owner: root
group: root
mode: 0755
when:
- ansible_os_family == "RedHat"
- iface_veno0.stdout == '0'
with_items:
- ../templates/ifdown-veth
- ../templates/ifup-veth
- name: Create veno0/veno1
become: yes
copy:
src: "{{ item }}"
dest: /etc/sysconfig/network-scripts
owner: root
group: root
mode: 0644
when:
- ansible_os_family == "RedHat"
- iface_veno0.stdout == '0'
with_items:
- ../templates/ifcfg-veth0
- ../templates/ifcfg-veth1
- name: Bring up br0
become: yes
command: bash -c "ifdown eno2 && ifup eno2 && ifup br0"
when:
- ansible_os_family == "RedHat"
- iface_veno0.stdout == '0'
- name: Bring up veth0 & veth1
become: yes
command: bash -c "ifup veth0 && ifup veth1"
when:
- ansible_os_family == "RedHat"
- iface_veno0.stdout == '0'
- name: Restart server
become: yes
shell: sleep 2 && shutdown -r now
async: 1
poll: 0
when:
- ansible_os_family == "Debian"
- iface_veno0.stdout == '0'
ignore_errors: true
- name: Wait for server to restart
local_action:
module: wait_for
host={{ inventory_hostname }}
state=started
port=22
delay=1
timeout=600
connect_timeout=15
when:
- ansible_os_family == "Debian"
- iface_veno0.stdout == '0'