summaryrefslogtreecommitdiff
path: root/tests/unittests/test_datasource/test_azure.py
diff options
context:
space:
mode:
authorChad Smith <chad.smith@canonical.com>2019-11-13 13:00:12 -0700
committerRyan Harper <ryan.harper@canonical.com>2019-11-13 12:00:12 -0800
commit9478f0f2fa6935d685092f344b23f34b883149a5 (patch)
tree08d971da0836a97281ddbebdefa99e9876fa1186 /tests/unittests/test_datasource/test_azure.py
parent0469f70c8fde69cfbcbc7181a69964aafba50bbc (diff)
downloadvyos-cloud-init-9478f0f2fa6935d685092f344b23f34b883149a5.tar.gz
vyos-cloud-init-9478f0f2fa6935d685092f344b23f34b883149a5.zip
azure: support secondary ipv6 addresses (#33)
Azure's Instance Metadata Service (IMDS) reports multiple IPv6 addresses, via the http://169.254.169.254/metadata/instance/network route. Any additional values after the first in 'ipAddresses' under the 'ipv6' interface key are extracted and configured as static IPs on the interface.
Diffstat (limited to 'tests/unittests/test_datasource/test_azure.py')
-rw-r--r--tests/unittests/test_datasource/test_azure.py34
1 files changed, 32 insertions, 2 deletions
diff --git a/tests/unittests/test_datasource/test_azure.py b/tests/unittests/test_datasource/test_azure.py
index d92d7b2f..59e351de 100644
--- a/tests/unittests/test_datasource/test_azure.py
+++ b/tests/unittests/test_datasource/test_azure.py
@@ -197,9 +197,11 @@ class TestParseNetworkConfig(CiTestCase):
def test_ipv4_and_ipv6_route_metrics_match_for_nics(self):
"""parse_network_config emits matching ipv4 and ipv6 route-metrics."""
expected = {'ethernets': {
- 'eth0': {'dhcp4': True,
+ 'eth0': {'addresses': ['10.0.0.5/24', '2001:dead:beef::2/128'],
+ 'dhcp4': True,
'dhcp4-overrides': {'route-metric': 100},
- 'dhcp6': False,
+ 'dhcp6': True,
+ 'dhcp6-overrides': {'route-metric': 100},
'match': {'macaddress': '00:0d:3a:04:75:98'},
'set-name': 'eth0'},
'eth1': {'set-name': 'eth1',
@@ -214,6 +216,14 @@ class TestParseNetworkConfig(CiTestCase):
'dhcp6': True,
'dhcp6-overrides': {'route-metric': 300}}}, 'version': 2}
imds_data = copy.deepcopy(NETWORK_METADATA)
+ nic1 = imds_data['network']['interface'][0]
+ nic1['ipv4']['ipAddress'].append({'privateIpAddress': '10.0.0.5'})
+
+ nic1['ipv6'] = {
+ "subnet": [{"address": "2001:dead:beef::16"}],
+ "ipAddress": [{"privateIpAddress": "2001:dead:beef::1"},
+ {"privateIpAddress": "2001:dead:beef::2"}]
+ }
imds_data['network']['interface'].append(SECONDARY_INTERFACE)
third_intf = copy.deepcopy(SECONDARY_INTERFACE)
third_intf['macAddress'] = third_intf['macAddress'].replace('22', '33')
@@ -240,6 +250,26 @@ class TestParseNetworkConfig(CiTestCase):
nic1 = imds_data['network']['interface'][0]
nic1['ipv4']['ipAddress'].append({'privateIpAddress': '10.0.0.5'})
+ nic1['ipv6'] = {
+ "subnet": [{"prefix": "10", "address": "2001:dead:beef::16"}],
+ "ipAddress": [{"privateIpAddress": "2001:dead:beef::1"}]
+ }
+ self.assertEqual(expected, dsaz.parse_network_config(imds_data))
+
+ def test_ipv6_secondary_ips_will_be_static_cidrs(self):
+ """parse_network_config emits primary ipv6 as dhcp others are static"""
+ expected = {'ethernets': {
+ 'eth0': {'addresses': ['10.0.0.5/24', '2001:dead:beef::2/10'],
+ 'dhcp4': True,
+ 'dhcp4-overrides': {'route-metric': 100},
+ 'dhcp6': True,
+ 'dhcp6-overrides': {'route-metric': 100},
+ 'match': {'macaddress': '00:0d:3a:04:75:98'},
+ 'set-name': 'eth0'}}, 'version': 2}
+ imds_data = copy.deepcopy(NETWORK_METADATA)
+ nic1 = imds_data['network']['interface'][0]
+ nic1['ipv4']['ipAddress'].append({'privateIpAddress': '10.0.0.5'})
+
# Secondary ipv6 addresses currently ignored/unconfigured
nic1['ipv6'] = {
"subnet": [{"prefix": "10", "address": "2001:dead:beef::16"}],