74
76
'dns_nameservers': ['10.0.1.1']}],
79
# Examples (and expected outputs for various renderers).
83
"services": [{"type": "dns", "address": "172.19.0.12"}],
85
"network_id": "dacd568d-5be6-4786-91fe-750c374b78b4",
86
"type": "ipv4", "netmask": "255.255.252.0",
87
"link": "tap1a81968a-79",
91
"gateway": "172.19.3.254",
93
"ip_address": "172.19.1.34", "id": "network0"
97
"ethernet_mac_address": "fa:16:3e:ed:9a:59",
98
"mtu": None, "type": "bridge", "id":
100
"vif_id": "1a81968a-797a-400f-8a80-567f997eb93f"
105
'fa:16:3e:ed:9a:59': 'eth0',
108
('etc/sysconfig/network-scripts/ifcfg-eth0',
110
# Created by cloud-init on instance boot automatically, do not edit.
116
HWADDR=fa:16:3e:ed:9a:59
118
NETMASK=255.255.252.0
124
('etc/sysconfig/network-scripts/route-eth0',
126
# Created by cloud-init on instance boot automatically, do not edit.
129
GATEWAY0=172.19.3.254
134
; Created by cloud-init on instance boot automatically, do not edit.
136
nameserver 172.19.0.12
138
('etc/udev/rules.d/70-persistent-net.rules',
139
"".join(['SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", ',
140
'ATTR{address}=="fa:16:3e:ed:9a:59", NAME="eth0"\n']))]
145
def _setup_test(tmp_dir, mock_get_devicelist, mock_sys_netdev_info,
147
mock_get_devicelist.return_value = ['eth1000']
148
dev_characteristics = {
154
"address": "07-1C-C6-75-A4-BE",
158
def netdev_info(name, field):
159
return dev_characteristics[name][field]
161
mock_sys_netdev_info.side_effect = netdev_info
163
def sys_dev_path(devname, path=""):
164
return tmp_dir + devname + "/" + path
166
for dev in dev_characteristics:
167
os.makedirs(os.path.join(tmp_dir, dev))
168
with open(os.path.join(tmp_dir, dev, 'operstate'), 'w') as fh:
171
mock_sys_dev_path.side_effect = sys_dev_path
174
class TestSysConfigRendering(TestCase):
176
@mock.patch("cloudinit.net.sys_dev_path")
177
@mock.patch("cloudinit.net.sys_netdev_info")
178
@mock.patch("cloudinit.net.get_devicelist")
179
def test_default_generation(self, mock_get_devicelist,
180
mock_sys_netdev_info,
182
tmp_dir = tempfile.mkdtemp()
183
self.addCleanup(shutil.rmtree, tmp_dir)
184
_setup_test(tmp_dir, mock_get_devicelist,
185
mock_sys_netdev_info, mock_sys_dev_path)
187
network_cfg = net.generate_fallback_config()
188
ns = network_state.parse_net_config_data(network_cfg,
191
render_dir = os.path.join(tmp_dir, "render")
192
os.makedirs(render_dir)
194
renderer = sysconfig.Renderer()
195
renderer.render_network_state(render_dir, ns)
197
render_file = 'etc/sysconfig/network-scripts/ifcfg-eth1000'
198
with open(os.path.join(render_dir, render_file)) as fh:
200
expected_content = """
201
# Created by cloud-init on instance boot automatically, do not edit.
205
HWADDR=07-1C-C6-75-A4-BE
211
self.assertEqual(expected_content, content)
213
def test_openstack_rendering_samples(self):
214
tmp_dir = tempfile.mkdtemp()
215
self.addCleanup(shutil.rmtree, tmp_dir)
216
render_dir = os.path.join(tmp_dir, "render")
217
for os_sample in OS_SAMPLES:
218
ex_input = os_sample['in_data']
219
ex_mac_addrs = os_sample['in_macs']
220
network_cfg = openstack.convert_net_json(
221
ex_input, known_macs=ex_mac_addrs)
222
ns = network_state.parse_net_config_data(network_cfg,
224
renderer = sysconfig.Renderer()
225
renderer.render_network_state(render_dir, ns)
226
for fn, expected_content in os_sample.get('out_sysconfig', []):
227
with open(os.path.join(render_dir, fn)) as fh:
228
self.assertEqual(expected_content, fh.read())
78
231
class TestEniNetRendering(TestCase):
83
236
def test_default_generation(self, mock_get_devicelist,
84
237
mock_sys_netdev_info,
85
238
mock_sys_dev_path):
86
mock_get_devicelist.return_value = ['eth1000', 'lo']
88
dev_characteristics = {
94
"address": "07-1C-C6-75-A4-BE",
98
def netdev_info(name, field):
99
return dev_characteristics[name][field]
101
mock_sys_netdev_info.side_effect = netdev_info
103
239
tmp_dir = tempfile.mkdtemp()
104
240
self.addCleanup(shutil.rmtree, tmp_dir)
106
def sys_dev_path(devname, path=""):
107
return tmp_dir + devname + "/" + path
109
for dev in dev_characteristics:
110
os.makedirs(os.path.join(tmp_dir, dev))
111
with open(os.path.join(tmp_dir, dev, 'operstate'), 'w') as fh:
114
mock_sys_dev_path.side_effect = sys_dev_path
241
_setup_test(tmp_dir, mock_get_devicelist,
242
mock_sys_netdev_info, mock_sys_dev_path)
116
244
network_cfg = net.generate_fallback_config()
117
245
ns = network_state.parse_net_config_data(network_cfg,