summaryrefslogtreecommitdiff
path: root/bin/cloud-init-cfg.py
diff options
context:
space:
mode:
authorJoshua Harlow <harlowja@getlookcrowd.corp.yahoo.com>2012-06-07 12:31:49 -0700
committerJoshua Harlow <harlowja@getlookcrowd.corp.yahoo.com>2012-06-07 12:31:49 -0700
commit87ebd91af8c230b8f1deed8e734297e40397eea0 (patch)
tree96ee31da17a767f018458c4ffcac7ac21b449e3a /bin/cloud-init-cfg.py
parenta0d7802c3164727abac9cb1066e5248aa5b1adf4 (diff)
downloadvyos-cloud-init-87ebd91af8c230b8f1deed8e734297e40397eea0.tar.gz
vyos-cloud-init-87ebd91af8c230b8f1deed8e734297e40397eea0.zip
Move binaries to an actual binary dir.
Diffstat (limited to 'bin/cloud-init-cfg.py')
-rwxr-xr-xbin/cloud-init-cfg.py115
1 files changed, 115 insertions, 0 deletions
diff --git a/bin/cloud-init-cfg.py b/bin/cloud-init-cfg.py
new file mode 100755
index 00000000..3a475c1c
--- /dev/null
+++ b/bin/cloud-init-cfg.py
@@ -0,0 +1,115 @@
+#!/usr/bin/python
+# vi: ts=4 expandtab
+#
+# Copyright (C) 2009-2010 Canonical Ltd.
+# Copyright (C) 2012 Hewlett-Packard Development Company, L.P.
+#
+# Author: Scott Moser <scott.moser@canonical.com>
+# Author: Juerg Haefliger <juerg.haefliger@hp.com>
+#
+# This program is free software: you can redistribute it and/or modify
+# it under the terms of the GNU General Public License version 3, as
+# published by the Free Software Foundation.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+import sys
+import cloudinit
+import cloudinit.util as util
+import cloudinit.CloudConfig as CC
+import logging
+import os
+
+
+def Usage(out=sys.stdout):
+ out.write("Usage: %s name\n" % sys.argv[0])
+
+
+def main():
+ # expect to be called with
+ # name [ freq [ args ]
+ # run the cloud-config job 'name' at with given args
+ # or
+ # read cloud config jobs from config (builtin -> system)
+ # and run all in order
+
+ util.close_stdin()
+
+ modename = "config"
+
+ if len(sys.argv) < 2:
+ Usage(sys.stderr)
+ sys.exit(1)
+ if sys.argv[1] == "all":
+ name = "all"
+ if len(sys.argv) > 2:
+ modename = sys.argv[2]
+ else:
+ freq = None
+ run_args = []
+ name = sys.argv[1]
+ if len(sys.argv) > 2:
+ freq = sys.argv[2]
+ if freq == "None":
+ freq = None
+ if len(sys.argv) > 3:
+ run_args = sys.argv[3:]
+
+ cfg_path = cloudinit.get_ipath_cur("cloud_config")
+ cfg_env_name = cloudinit.cfg_env_name
+ if cfg_env_name in os.environ:
+ cfg_path = os.environ[cfg_env_name]
+
+ cloud = cloudinit.CloudInit(ds_deps=[]) # ds_deps=[], get only cached
+ try:
+ cloud.get_data_source()
+ except cloudinit.DataSourceNotFoundException as e:
+ # there was no datasource found, theres nothing to do
+ sys.exit(0)
+
+ cc = CC.CloudConfig(cfg_path, cloud)
+
+ try:
+ (outfmt, errfmt) = CC.get_output_cfg(cc.cfg, modename)
+ CC.redirect_output(outfmt, errfmt)
+ except Exception as e:
+ err("Failed to get and set output config: %s\n" % e)
+
+ cloudinit.logging_set_from_cfg(cc.cfg)
+ log = logging.getLogger()
+ log.info("cloud-init-cfg %s" % sys.argv[1:])
+
+ module_list = []
+ if name == "all":
+ modlist_cfg_name = "cloud_%s_modules" % modename
+ module_list = CC.read_cc_modules(cc.cfg, modlist_cfg_name)
+ if not len(module_list):
+ err("no modules to run in cloud_config [%s]" % modename, log)
+ sys.exit(0)
+ else:
+ module_list.append([name, freq] + run_args)
+
+ failures = CC.run_cc_modules(cc, module_list, log)
+ if len(failures):
+ err("errors running cloud_config [%s]: %s" % (modename, failures), log)
+ sys.exit(len(failures))
+
+
+def err(msg, log=None):
+ if log:
+ log.error(msg)
+ sys.stderr.write(msg + "\n")
+
+
+def fail(msg, log=None):
+ err(msg, log)
+ sys.exit(1)
+
+if __name__ == '__main__':
+ main()