summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--cloudinit/cmd/main.py9
-rw-r--r--cloudinit/helpers.py1
-rw-r--r--cloudinit/stages.py6
3 files changed, 15 insertions, 1 deletions
diff --git a/cloudinit/cmd/main.py b/cloudinit/cmd/main.py
index 65b15edc..7c652574 100644
--- a/cloudinit/cmd/main.py
+++ b/cloudinit/cmd/main.py
@@ -312,8 +312,15 @@ def main_init(name, args):
" would allow us to stop early.")
else:
existing = "check"
- if util.get_cfg_option_bool(init.cfg, 'manual_cache_clean', False):
+ mcfg = util.get_cfg_option_bool(init.cfg, 'manual_cache_clean', False)
+ if mcfg:
+ LOG.debug("manual cache clean set from config")
existing = "trust"
+ else:
+ mfile = path_helper.get_ipath_cur("manual_clean_marker")
+ if os.path.exists(mfile):
+ LOG.debug("manual cache clean found from marker: %s", mfile)
+ existing = "trust"
init.purge_cache()
# Delete the non-net file as well
diff --git a/cloudinit/helpers.py b/cloudinit/helpers.py
index 4528fb01..38f5f899 100644
--- a/cloudinit/helpers.py
+++ b/cloudinit/helpers.py
@@ -339,6 +339,7 @@ class Paths(object):
"vendordata_raw": "vendor-data.txt",
"vendordata": "vendor-data.txt.i",
"instance_id": ".instance-id",
+ "manual_clean_marker": "manual-clean",
}
# Set when a datasource becomes active
self.datasource = ds
diff --git a/cloudinit/stages.py b/cloudinit/stages.py
index b0552dde..21763810 100644
--- a/cloudinit/stages.py
+++ b/cloudinit/stages.py
@@ -188,6 +188,12 @@ class Init(object):
def _write_to_cache(self):
if self.datasource is NULL_DATA_SOURCE:
return False
+ if util.get_cfg_option_bool(self.cfg, 'manual_cache_clean', False):
+ # The empty file in instance/ dir indicates manual cleaning,
+ # and can be read by ds-identify.
+ util.write_file(
+ self.paths.get_ipath_cur("manual_clean_marker"),
+ omode="w", content="")
return _pkl_store(self.datasource, self.paths.get_ipath_cur("obj_pkl"))
def _get_datasources(self):