diff options
author | Scott Moser <smoser@ubuntu.com> | 2011-12-20 16:35:24 -0500 |
---|---|---|
committer | Scott Moser <smoser@ubuntu.com> | 2011-12-20 16:35:24 -0500 |
commit | 6bc6ab24d6ef11c068c609519d0a8fd4b1b6be07 (patch) | |
tree | 7025f99815b1251a2639955235d5992262275004 /cloudinit | |
parent | b17a271da699230be8dad5d8c0227a5c7c238503 (diff) | |
download | vyos-cloud-init-6bc6ab24d6ef11c068c609519d0a8fd4b1b6be07.tar.gz vyos-cloud-init-6bc6ab24d6ef11c068c609519d0a8fd4b1b6be07.zip |
support configuration of landscape-client via cloud-config (LP: #857366)
This adds the ability to configure landscape client code from
cloud-config. The fields available are those that were populated to
/etc/landscape/client.conf when I ran landscape-config on precise
('11.07.1.1-0ubuntu2')
Diffstat (limited to 'cloudinit')
-rw-r--r-- | cloudinit/CloudConfig/cc_landscape.py | 67 |
1 files changed, 67 insertions, 0 deletions
diff --git a/cloudinit/CloudConfig/cc_landscape.py b/cloudinit/CloudConfig/cc_landscape.py new file mode 100644 index 00000000..6849b732 --- /dev/null +++ b/cloudinit/CloudConfig/cc_landscape.py @@ -0,0 +1,67 @@ +# vi: ts=4 expandtab +# +# Copyright (C) 2011 Canonical Ltd. +# +# Author: Scott Moser <scott.moser@canonical.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/>. +from cloudinit.CloudConfig import per_instance +from configobj import ConfigObj + +frequency = per_instance + +lsc_client_cfg_file = "/etc/landscape/client.conf" + +# defaults taken from stock client.conf in landscape-client 11.07.1.1-0ubuntu2 +lsc_builtincfg = { + 'client': { + 'log_level': "info", + 'url': "https://landscape.canonical.com/message-system", + 'ping_url': "http://landscape.canonical.com/ping", + 'data_path': "/var/lib/landscape/client", + } +} + +def handle(name,cfg,cloud,log,args): + """ + Basically turn a top level 'landscape' entry with a 'client' dict + and render it to ConfigObj format under '[client]' section in + /etc/landscape/client.conf + """ + + ls_cloudcfg = cfg.get("landscape", { }) + + if not isinstance(ls_cloudcfg, dict): + raise(Exception("'landscape' existed in config, but not a dict")) + + merged = mergeTogether([lsc_builtincfg, lsc_client_cfg_file, ls_cloudcfg]) + + with open(lsc_client_cfg_file, "w") as fp: + merged.write(fp) + + log.debug("updated %s" % lsc_client_cfg_file) + +def mergeTogether(objs): + """ + merge together ConfigObj objects or things that ConfigObj() will take in + later entries override earlier + """ + if len(objs) == 0: + return { } + cfg = ConfigObj(objs[1]) + for obj in objs[1:]: + if isinstance(obj, ConfigObj): + cfg.merge(obj) + else: + cfg.merge(ConfigObj(obj)) + return cfg |