78a0f3861c
https://bugzilla.redhat.com/show_bug.cgi?id=1442463 https://bugs.launchpad.net/cloud-init/+bug/1675571 https://git.launchpad.net/cloud-init/commit/?id=493f6c3e923902d5d4f3d87e1cc4c726ea90ada4
159 lines
6.5 KiB
Diff
159 lines
6.5 KiB
Diff
Index: cloud-init-0.7.9/cloudinit/sources/helpers/digitalocean.py
|
|
===================================================================
|
|
--- cloud-init-0.7.9.orig/cloudinit/sources/helpers/digitalocean.py
|
|
+++ cloud-init-0.7.9/cloudinit/sources/helpers/digitalocean.py
|
|
@@ -107,15 +107,12 @@ def convert_network_configuration(config
|
|
}
|
|
"""
|
|
|
|
- def _get_subnet_part(pcfg, nameservers=None):
|
|
+ def _get_subnet_part(pcfg):
|
|
subpart = {'type': 'static',
|
|
'control': 'auto',
|
|
'address': pcfg.get('ip_address'),
|
|
'gateway': pcfg.get('gateway')}
|
|
|
|
- if nameservers:
|
|
- subpart['dns_nameservers'] = nameservers
|
|
-
|
|
if ":" in pcfg.get('ip_address'):
|
|
subpart['address'] = "{0}/{1}".format(pcfg.get('ip_address'),
|
|
pcfg.get('cidr'))
|
|
@@ -157,13 +154,8 @@ def convert_network_configuration(config
|
|
continue
|
|
|
|
sub_part = _get_subnet_part(raw_subnet)
|
|
- if nic_type == 'public' and 'anchor' not in netdef:
|
|
- # add DNS resolvers to the public interfaces only
|
|
- sub_part = _get_subnet_part(raw_subnet, dns_servers)
|
|
- else:
|
|
- # remove the gateway any non-public interfaces
|
|
- if 'gateway' in sub_part:
|
|
- del sub_part['gateway']
|
|
+ if netdef in ('private', 'anchor_ipv4', 'anchor_ipv6'):
|
|
+ del sub_part['gateway']
|
|
|
|
subnets.append(sub_part)
|
|
|
|
@@ -171,6 +163,10 @@ def convert_network_configuration(config
|
|
nic_configs.append(ncfg)
|
|
LOG.debug("nic '%s' configuration: %s", if_name, ncfg)
|
|
|
|
+ if dns_servers:
|
|
+ LOG.debug("added dns servers: %s", dns_servers)
|
|
+ nic_configs.append({'type': 'nameserver', 'address': dns_servers})
|
|
+
|
|
return {'version': 1, 'config': nic_configs}
|
|
|
|
|
|
Index: cloud-init-0.7.9/tests/unittests/test_datasource/test_digitalocean.py
|
|
===================================================================
|
|
--- cloud-init-0.7.9.orig/tests/unittests/test_datasource/test_digitalocean.py
|
|
+++ cloud-init-0.7.9/tests/unittests/test_datasource/test_digitalocean.py
|
|
@@ -194,7 +194,13 @@ class TestDataSourceDigitalOcean(TestCas
|
|
|
|
class TestNetworkConvert(TestCase):
|
|
|
|
- def _get_networking(self):
|
|
+ @mock.patch('cloudinit.net.get_interfaces_by_mac')
|
|
+ def _get_networking(self, m_get_by_mac):
|
|
+ m_get_by_mac.return_value = {
|
|
+ '04:01:57:d1:9e:01': 'ens1',
|
|
+ '04:01:57:d1:9e:02': 'ens2',
|
|
+ 'b8:ae:ed:75:5f:9a': 'enp0s25',
|
|
+ 'ae:cc:08:7c:88:00': 'meta2p1'}
|
|
netcfg = digitalocean.convert_network_configuration(
|
|
DO_META['interfaces'], DO_META['dns']['nameservers'])
|
|
self.assertIn('config', netcfg)
|
|
@@ -203,18 +209,33 @@ class TestNetworkConvert(TestCase):
|
|
def test_networking_defined(self):
|
|
netcfg = self._get_networking()
|
|
self.assertIsNotNone(netcfg)
|
|
+ dns_defined = False
|
|
|
|
- for nic_def in netcfg.get('config'):
|
|
- print(json.dumps(nic_def, indent=3))
|
|
- n_type = nic_def.get('type')
|
|
- n_subnets = nic_def.get('type')
|
|
- n_name = nic_def.get('name')
|
|
- n_mac = nic_def.get('mac_address')
|
|
-
|
|
- self.assertIsNotNone(n_type)
|
|
- self.assertIsNotNone(n_subnets)
|
|
- self.assertIsNotNone(n_name)
|
|
- self.assertIsNotNone(n_mac)
|
|
+ for part in netcfg.get('config'):
|
|
+ n_type = part.get('type')
|
|
+ print("testing part ", n_type, "\n", json.dumps(part, indent=3))
|
|
+
|
|
+ if n_type == 'nameserver':
|
|
+ n_address = part.get('address')
|
|
+ self.assertIsNotNone(n_address)
|
|
+ self.assertEqual(len(n_address), 3)
|
|
+
|
|
+ dns_resolvers = DO_META["dns"]["nameservers"]
|
|
+ for x in n_address:
|
|
+ self.assertIn(x, dns_resolvers)
|
|
+ dns_defined = True
|
|
+
|
|
+ else:
|
|
+ n_subnets = part.get('type')
|
|
+ n_name = part.get('name')
|
|
+ n_mac = part.get('mac_address')
|
|
+
|
|
+ self.assertIsNotNone(n_type)
|
|
+ self.assertIsNotNone(n_subnets)
|
|
+ self.assertIsNotNone(n_name)
|
|
+ self.assertIsNotNone(n_mac)
|
|
+
|
|
+ self.assertTrue(dns_defined)
|
|
|
|
def _get_nic_definition(self, int_type, expected_name):
|
|
"""helper function to return if_type (i.e. public) and the expected
|
|
@@ -255,12 +276,6 @@ class TestNetworkConvert(TestCase):
|
|
self.assertEqual(meta_def.get('mac'), nic_def.get('mac_address'))
|
|
self.assertEqual('physical', nic_def.get('type'))
|
|
|
|
- def _check_dns_nameservers(self, subn_def):
|
|
- self.assertIn('dns_nameservers', subn_def)
|
|
- expected_nameservers = DO_META['dns']['nameservers']
|
|
- nic_nameservers = subn_def.get('dns_nameservers')
|
|
- self.assertEqual(expected_nameservers, nic_nameservers)
|
|
-
|
|
def test_public_interface_ipv6(self):
|
|
"""test public ipv6 addressing"""
|
|
(nic_def, meta_def) = self._get_nic_definition('public', 'eth0')
|
|
@@ -275,7 +290,6 @@ class TestNetworkConvert(TestCase):
|
|
|
|
self.assertEqual(cidr_notated_address, subn_def.get('address'))
|
|
self.assertEqual(ipv6_def.get('gateway'), subn_def.get('gateway'))
|
|
- self._check_dns_nameservers(subn_def)
|
|
|
|
def test_public_interface_ipv4(self):
|
|
"""test public ipv4 addressing"""
|
|
@@ -288,7 +302,6 @@ class TestNetworkConvert(TestCase):
|
|
|
|
self.assertEqual(ipv4_def.get('netmask'), subn_def.get('netmask'))
|
|
self.assertEqual(ipv4_def.get('gateway'), subn_def.get('gateway'))
|
|
- self._check_dns_nameservers(subn_def)
|
|
|
|
def test_public_interface_anchor_ipv4(self):
|
|
"""test public ipv4 addressing"""
|
|
@@ -302,10 +315,15 @@ class TestNetworkConvert(TestCase):
|
|
self.assertEqual(ipv4_def.get('netmask'), subn_def.get('netmask'))
|
|
self.assertNotIn('gateway', subn_def)
|
|
|
|
- def test_convert_without_private(self):
|
|
+ @mock.patch('cloudinit.net.get_interfaces_by_mac')
|
|
+ def test_convert_without_private(self, m_get_by_mac):
|
|
+ m_get_by_mac.return_value = {
|
|
+ 'b8:ae:ed:75:5f:9a': 'enp0s25',
|
|
+ 'ae:cc:08:7c:88:00': 'meta2p1'}
|
|
netcfg = digitalocean.convert_network_configuration(
|
|
DO_META_2['interfaces'], DO_META_2['dns']['nameservers'])
|
|
|
|
+ # print(netcfg)
|
|
byname = {}
|
|
for i in netcfg['config']:
|
|
if 'name' in i:
|