Make DigitalOcean data sources handle DNS servers similar to OpenStack
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
This commit is contained in:
parent
4c7b74f907
commit
78a0f3861c
158
cloud-init-0.7.9-digitalocean-loopback.patch
Normal file
158
cloud-init-0.7.9-digitalocean-loopback.patch
Normal file
@ -0,0 +1,158 @@
|
|||||||
|
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:
|
@ -1,6 +1,6 @@
|
|||||||
Name: cloud-init
|
Name: cloud-init
|
||||||
Version: 0.7.9
|
Version: 0.7.9
|
||||||
Release: 4%{?dist}
|
Release: 5%{?dist}
|
||||||
Summary: Cloud instance init scripts
|
Summary: Cloud instance init scripts
|
||||||
License: GPLv3
|
License: GPLv3
|
||||||
URL: http://launchpad.net/cloud-init
|
URL: http://launchpad.net/cloud-init
|
||||||
@ -78,6 +78,13 @@ Patch18: cloud-init-0.7.9-before-network-target.patch
|
|||||||
# https://git.launchpad.net/cloud-init/commit/?id=b71592ce0e0a9f9f9f225315015ca57b312ad30d
|
# https://git.launchpad.net/cloud-init/commit/?id=b71592ce0e0a9f9f9f225315015ca57b312ad30d
|
||||||
Patch19: cloud-init-0.7.9-credcache.patch
|
Patch19: cloud-init-0.7.9-credcache.patch
|
||||||
|
|
||||||
|
# Make DigitalOcean data sources handle DNS servers similar to OpenStack
|
||||||
|
# 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=5442b517ebe5508159a46d11d500fbc6ad854ba0
|
||||||
|
# https://git.launchpad.net/cloud-init/commit/?id=493f6c3e923902d5d4f3d87e1cc4c726ea90ada4
|
||||||
|
Patch20: cloud-init-0.7.9-digitalocean-loopback.patch
|
||||||
|
|
||||||
BuildArch: noarch
|
BuildArch: noarch
|
||||||
|
|
||||||
BuildRequires: pkgconfig(systemd)
|
BuildRequires: pkgconfig(systemd)
|
||||||
@ -210,6 +217,9 @@ nosetests-%{python3_version} tests/unittests/
|
|||||||
|
|
||||||
|
|
||||||
%changelog
|
%changelog
|
||||||
|
* Fri Apr 14 2017 Garrett Holmstrom <gholms@fedoraproject.org> - 0.7.9-5
|
||||||
|
- Made DigitalOcean DNS server handling consistent with OpenStack [RH:1442463, LP:1675571]
|
||||||
|
|
||||||
* Tue Mar 14 2017 Garrett Holmstrom <gholms@fedoraproject.org> - 0.7.9-4
|
* Tue Mar 14 2017 Garrett Holmstrom <gholms@fedoraproject.org> - 0.7.9-4
|
||||||
- Fixed systemd dependency cycle with cloud-final and os-collect-config [RH:1420946, RH:1428492]
|
- Fixed systemd dependency cycle with cloud-final and os-collect-config [RH:1420946, RH:1428492]
|
||||||
- Fixed systemd dependency cycle with cloud-init and multi-user.target [RH:1428492, RH:1430511]
|
- Fixed systemd dependency cycle with cloud-init and multi-user.target [RH:1428492, RH:1430511]
|
||||||
|
Loading…
Reference in New Issue
Block a user