diff options
author | Scott Moser <smoser@ubuntu.com> | 2016-04-12 11:54:31 -0400 |
---|---|---|
committer | Scott Moser <smoser@ubuntu.com> | 2016-04-12 11:54:31 -0400 |
commit | cc549350c6010908add773a8b74e5d1ac840bbf1 (patch) | |
tree | 60eabad58e4a125b0c003c4153ebc7d915b5d90f | |
parent | 763be4ecccca0c0ccb62466699cc9cd22f79adc7 (diff) | |
download | vyos-cloud-init-cc549350c6010908add773a8b74e5d1ac840bbf1.tar.gz vyos-cloud-init-cc549350c6010908add773a8b74e5d1ac840bbf1.zip |
DataSourceNoCloud: fix check_instance_id when upgraded
A system that had booted, upgraded, and then rebooted would show
a cloud-init stack trace as it attempted to run new code
with the old pickled object. The old object would not have the
seed_dirs attribute. So we check and fallback correctly if that
is not present.
LP: #1568150
-rw-r--r-- | cloudinit/sources/DataSourceNoCloud.py | 7 |
1 files changed, 6 insertions, 1 deletions
diff --git a/cloudinit/sources/DataSourceNoCloud.py b/cloudinit/sources/DataSourceNoCloud.py index c2fba4d2..74d0e5ec 100644 --- a/cloudinit/sources/DataSourceNoCloud.py +++ b/cloudinit/sources/DataSourceNoCloud.py @@ -216,8 +216,11 @@ class DataSourceNoCloud(sources.DataSource): if not current: return None + # LP: #1568150 need getattr in the case that an old class object + # has been loaded from a pickled file and now executing new source. + dirs = getattr(self, 'seed_dirs', [self.seed_dir]) quick_id = _quick_read_instance_id(cmdline_id=self.cmdline_id, - dirs=self.seed_dirs) + dirs=dirs) if not quick_id: return None return quick_id == current @@ -238,6 +241,8 @@ def _quick_read_instance_id(cmdline_id, dirs=None): return fill[iid_key] for d in dirs: + if d is None: + continue try: data = util.pathprefix2dict(d, required=['meta-data']) md = util.load_yaml(data['meta-data']) |