diff options
author | Scott Moser <smoser@ubuntu.com> | 2014-02-10 15:05:41 -0500 |
---|---|---|
committer | Scott Moser <smoser@ubuntu.com> | 2014-02-10 15:05:41 -0500 |
commit | c09e8cd6e81e478dd5276275418b70d5d946f479 (patch) | |
tree | aa886a5d746b9619d61edfaa952b2bc2f56fa19c /cloudinit/sources/DataSourceAzure.py | |
parent | ceffb35a2ddfb5f309417aaa68e7ff70199690fa (diff) | |
download | vyos-cloud-init-c09e8cd6e81e478dd5276275418b70d5d946f479.tar.gz vyos-cloud-init-c09e8cd6e81e478dd5276275418b70d5d946f479.zip |
change behavior to only delete SharedConfig.xml.
Diffstat (limited to 'cloudinit/sources/DataSourceAzure.py')
-rw-r--r-- | cloudinit/sources/DataSourceAzure.py | 33 |
1 files changed, 20 insertions, 13 deletions
diff --git a/cloudinit/sources/DataSourceAzure.py b/cloudinit/sources/DataSourceAzure.py index eee36d22..6b48a340 100644 --- a/cloudinit/sources/DataSourceAzure.py +++ b/cloudinit/sources/DataSourceAzure.py @@ -84,14 +84,9 @@ class DataSourceAzureNet(sources.DataSource): candidates = [self.seed_dir] candidates.extend(list_possible_azure_ds_devs()) - previous_ovf_cfg = None if ddir: candidates.append(ddir) - previous_ovf_cfg = None - if os.path.exists("%s/ovf-env.xml" % ddir): - previous_ovf_cfg = load_azure_ds_dir(ddir) - found = None for cdev in candidates: @@ -109,11 +104,6 @@ class DataSourceAzureNet(sources.DataSource): LOG.warn("%s was not mountable" % cdev) continue - if ret != previous_ovf_cfg: - LOG.info(("instance configuration has changed, " - "removing old agent directory")) - util.del_dir(ddir) - (md, self.userdata_raw, cfg, files) = ret self.seed = cdev self.metadata = util.mergemanydict([md, DEFAULT_METADATA]) @@ -138,10 +128,27 @@ class DataSourceAzureNet(sources.DataSource): user_ds_cfg = util.get_cfg_by_path(self.cfg, DS_CFG_PATH, {}) self.ds_cfg = util.mergemanydict([user_ds_cfg, self.ds_cfg]) mycfg = self.ds_cfg + ddir = mycfg['data_dir'] + + if found != ddir: + cached_ovfenv = util.load_file( + os.path.join(ddir, 'ovf-env.xml'), quiet=True) + if cached_ovfenv != files['ovf-env.xml']: + # source was not walinux-agent's datadir, so we have to clean + # up so 'wait_for_files' doesn't return early due to stale data + toclean = ['SharedConfig.xml'] + cleaned = [] + for f in [os.path.join(ddir, f) for f in toclean]: + if os.path.exists(f): + util.del_file(f) + cleaned.append(f) + if cleaned: + LOG.info("removed stale file(s) in '%s': %s", + ddir, str(cleaned)) # walinux agent writes files world readable, but expects # the directory to be protected. - write_files(mycfg['data_dir'], files, dirmode=0700) + write_files(ddir, files, dirmode=0700) # handle the hostname 'publishing' try: @@ -159,13 +166,13 @@ class DataSourceAzureNet(sources.DataSource): util.logexc(LOG, "agent command '%s' failed.", mycfg['agent_command']) - shcfgxml = os.path.join(mycfg['data_dir'], "SharedConfig.xml") + shcfgxml = os.path.join(ddir, "SharedConfig.xml") wait_for = [shcfgxml] fp_files = [] for pk in self.cfg.get('_pubkeys', []): bname = str(pk['fingerprint'] + ".crt") - fp_files += [os.path.join(mycfg['data_dir'], bname)] + fp_files += [os.path.join(ddir, bname)] missing = util.log_time(logfunc=LOG.debug, msg="waiting for files", func=wait_for_files, |