summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorScott Moser <smoser@ubuntu.com>2018-09-12 18:44:19 +0000
committerServer Team CI Bot <josh.powers+server-team-bot@canonical.com>2018-09-12 18:44:19 +0000
commitc75c582ed1824dc3ff39cefdbddccfc2924b868c (patch)
tree18c6243665e28d029fde5b143cf28010cf6db92e
parentc7555762f3a30190ce7726b4d013bc3e83c7e4b6 (diff)
downloadvyos-cloud-init-c75c582ed1824dc3ff39cefdbddccfc2924b868c.tar.gz
vyos-cloud-init-c75c582ed1824dc3ff39cefdbddccfc2924b868c.zip
OpenStack: fix bug causing 'latest' version to be used from network.
Cloud-init was reading a list of versions from the OpenStack metadata service (http://169.254.169.254/openstack/) and attempt to select the newest known supported version. The problem was that the list of versions was not being decoded, so we were comparing a list of bytes (found versions) to a list of strings (known versions). LP: #1792157
-rw-r--r--cloudinit/sources/helpers/openstack.py2
-rw-r--r--tests/unittests/test_datasource/test_openstack.py30
2 files changed, 31 insertions, 1 deletions
diff --git a/cloudinit/sources/helpers/openstack.py b/cloudinit/sources/helpers/openstack.py
index 8f9c1441..e3d372b6 100644
--- a/cloudinit/sources/helpers/openstack.py
+++ b/cloudinit/sources/helpers/openstack.py
@@ -439,7 +439,7 @@ class MetadataReader(BaseReader):
return self._versions
found = []
version_path = self._path_join(self.base_path, "openstack")
- content = self._path_read(version_path)
+ content = self._path_read(version_path, decode=True)
for line in content.splitlines():
line = line.strip()
if not line:
diff --git a/tests/unittests/test_datasource/test_openstack.py b/tests/unittests/test_datasource/test_openstack.py
index 6e1e971b..ab5d3adc 100644
--- a/tests/unittests/test_datasource/test_openstack.py
+++ b/tests/unittests/test_datasource/test_openstack.py
@@ -555,4 +555,34 @@ class TestDetectOpenStack(test_helpers.CiTestCase):
m_proc_env.assert_called_with(1)
+class TestMetadataReader(test_helpers.HttprettyTestCase):
+ """Test the MetadataReader."""
+ burl = 'http://169.254.169.254/'
+
+ def register(self, path, body=None, status=200):
+ hp.register_uri(
+ hp.GET, self.burl + "openstack" + path, status=status, body=body)
+
+ def register_versions(self, versions):
+ self.register("", '\n'.join(versions).encode('utf-8'))
+
+ def test__find_working_version(self):
+ """Test a working version ignores unsupported."""
+ unsup = "2016-11-09"
+ self.register_versions(
+ [openstack.OS_FOLSOM, openstack.OS_LIBERTY, unsup,
+ openstack.OS_LATEST])
+ self.assertEqual(
+ openstack.OS_LIBERTY,
+ openstack.MetadataReader(self.burl)._find_working_version())
+
+ def test__find_working_version_uses_latest(self):
+ """'latest' should be used if no supported versions."""
+ unsup1, unsup2 = ("2016-11-09", '2017-06-06')
+ self.register_versions([unsup1, unsup2, openstack.OS_LATEST])
+ self.assertEqual(
+ openstack.OS_LATEST,
+ openstack.MetadataReader(self.burl)._find_working_version())
+
+
# vi: ts=4 expandtab