summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorScott Moser <smoser@ubuntu.com>2014-09-10 15:37:09 -0400
committerScott Moser <smoser@ubuntu.com>2014-09-10 15:37:09 -0400
commitc4b09a27239bc88bcf6b4ec536410bcc02cdf11c (patch)
tree72a637f7a20ccc0d11e8ccd313e1745f15d66238
parent0ea631a556522060f5075496adbac5f5637e7597 (diff)
downloadvyos-cloud-init-c4b09a27239bc88bcf6b4ec536410bcc02cdf11c.tar.gz
vyos-cloud-init-c4b09a27239bc88bcf6b4ec536410bcc02cdf11c.zip
make BaseReader select latest supported version
-rw-r--r--cloudinit/sources/DataSourceConfigDrive.py16
-rw-r--r--cloudinit/sources/DataSourceOpenStack.py3
-rw-r--r--cloudinit/sources/helpers/openstack.py19
3 files changed, 20 insertions, 18 deletions
diff --git a/cloudinit/sources/DataSourceConfigDrive.py b/cloudinit/sources/DataSourceConfigDrive.py
index 83cc6b25..b8c16361 100644
--- a/cloudinit/sources/DataSourceConfigDrive.py
+++ b/cloudinit/sources/DataSourceConfigDrive.py
@@ -167,17 +167,13 @@ def get_ds_mode(cfgdrv_ver, ds_cfg=None, user=None):
return "net"
-def read_config_drive(source_dir):
- excps = []
- finders = []
+def read_config_drive(source_dir, version=None):
reader = openstack.ConfigDriveReader(source_dir)
-
- # openstack.OS_VERSIONS is stored in chronological order, so to check the
- # newest first, use reversed()
- for version in reversed(openstack.OS_VERSIONS):
- finders.append((reader.read_v2, [], {'version': version}))
- finders.append((reader.read_v1, [], {}))
-
+ finders = [
+ (reader.read_v2, [], {'version': version}),
+ (reader.read_v1, [], {}),
+ ]
+ excps = []
for (functor, args, kwargs) in finders:
try:
return functor(*args, **kwargs)
diff --git a/cloudinit/sources/DataSourceOpenStack.py b/cloudinit/sources/DataSourceOpenStack.py
index 0970d07b..ce8e8364 100644
--- a/cloudinit/sources/DataSourceOpenStack.py
+++ b/cloudinit/sources/DataSourceOpenStack.py
@@ -119,8 +119,7 @@ class DataSourceOpenStack(openstack.SourceMixin, sources.DataSource):
'Crawl of openstack metadata service',
read_metadata_service,
args=[self.metadata_address],
- kwargs={'ssl_details': self.ssl_details,
- 'version': openstack.OS_HAVANA})
+ kwargs={'ssl_details': self.ssl_details})
except openstack.NonReadable:
return False
except (openstack.BrokenMetadata, IOError):
diff --git a/cloudinit/sources/helpers/openstack.py b/cloudinit/sources/helpers/openstack.py
index ed91a55c..ed9cdbaa 100644
--- a/cloudinit/sources/helpers/openstack.py
+++ b/cloudinit/sources/helpers/openstack.py
@@ -48,7 +48,7 @@ OS_LATEST = 'latest'
OS_FOLSOM = '2012-08-10'
OS_GRIZZLY = '2013-04-04'
OS_HAVANA = '2013-10-17'
-# keep this in chronological order by time: add new entries to the end
+# keep this in chronological order. new supported versions go at the end.
OS_VERSIONS = (
OS_FOLSOM,
OS_GRIZZLY,
@@ -162,7 +162,7 @@ class BaseReader(object):
def _read_ec2_metadata(self):
pass
- def _find_working_version(self, version):
+ def _find_working_version(self, version=None):
try:
versions_available = self._fetch_available_versions()
except Exception as e:
@@ -170,7 +170,14 @@ class BaseReader(object):
self.base_path, e)
versions_available = []
- search_versions = [version] + list(OS_VERSIONS)
+ # openstack.OS_VERSIONS is stored in chronological order, so
+ # reverse it to check newest first.
+ supported = [v for v in reversed(list(OS_VERSIONS))]
+ if version is not None:
+ search_versions = [version] + supported
+ else:
+ search_versions = supported
+
selected_version = OS_LATEST
for potential_version in search_versions:
if potential_version not in versions_available:
@@ -178,11 +185,12 @@ class BaseReader(object):
selected_version = potential_version
break
- if selected_version != version:
+ if version is not None and selected_version != version:
LOG.warn("Version '%s' not available, attempting to use "
"version '%s' instead", version, selected_version)
else:
- LOG.debug("Version '%s' was available.", version)
+ LOG.debug("Selected version '%s' from %s", version,
+ versions_available)
return selected_version
def _read_content_path(self, item):
@@ -434,7 +442,6 @@ class MetadataReader(BaseReader):
self._versions = found
return self._versions
-
def _path_read(self, path):
def should_retry_cb(_request_args, cause):