summaryrefslogtreecommitdiff
path: root/cloudinit/config/cc_write_files_deferred.py
diff options
context:
space:
mode:
Diffstat (limited to 'cloudinit/config/cc_write_files_deferred.py')
-rw-r--r--cloudinit/config/cc_write_files_deferred.py55
1 files changed, 55 insertions, 0 deletions
diff --git a/cloudinit/config/cc_write_files_deferred.py b/cloudinit/config/cc_write_files_deferred.py
new file mode 100644
index 00000000..0c75aa22
--- /dev/null
+++ b/cloudinit/config/cc_write_files_deferred.py
@@ -0,0 +1,55 @@
+# Copyright (C) 2021 Canonical Ltd.
+#
+# This file is part of cloud-init. See LICENSE file for license information.
+
+"""Defer writing certain files"""
+
+from textwrap import dedent
+
+from cloudinit.config.schema import validate_cloudconfig_schema
+from cloudinit import util
+from cloudinit.config.cc_write_files import (
+ schema as write_files_schema, write_files, DEFAULT_DEFER)
+
+
+schema = util.mergemanydict([
+ {
+ 'id': 'cc_write_files_deferred',
+ 'name': 'Write Deferred Files',
+ 'title': dedent("""\
+ write certain files, whose creation as been deferred, during
+ final stage
+ """),
+ 'description': dedent("""\
+ This module is based on `'Write Files' <write-files>`__, and
+ will handle all files from the write_files list, that have been
+ marked as deferred and thus are not being processed by the
+ write-files module.
+
+ *Please note that his module is not exposed to the user through
+ its own dedicated top-level directive.*
+ """)
+ },
+ write_files_schema
+])
+
+# Not exposed, because related modules should document this behaviour
+__doc__ = None
+
+
+def handle(name, cfg, _cloud, log, _args):
+ validate_cloudconfig_schema(cfg, schema)
+ file_list = cfg.get('write_files', [])
+ filtered_files = [
+ f for f in file_list if util.get_cfg_option_bool(f,
+ 'defer',
+ DEFAULT_DEFER)
+ ]
+ if not filtered_files:
+ log.debug(("Skipping module named %s,"
+ " no deferred file defined in configuration"), name)
+ return
+ write_files(name, filtered_files)
+
+
+# vi: ts=4 expandtab