summaryrefslogtreecommitdiff
path: root/cloudinit/config/cc_mcollective.py
diff options
context:
space:
mode:
authorharlowja <harlowja@virtualbox.rhel>2012-06-22 08:48:18 -0700
committerharlowja <harlowja@virtualbox.rhel>2012-06-22 08:48:18 -0700
commit3ca68402b5d9fbfeceebe39c92501dc773a335f4 (patch)
treee57f3a17219715b38ebc808f93544eaa085a78f5 /cloudinit/config/cc_mcollective.py
parent9bc45d35160717ff6ea5ba5289979202ca35bce5 (diff)
downloadvyos-cloud-init-3ca68402b5d9fbfeceebe39c92501dc773a335f4.tar.gz
vyos-cloud-init-3ca68402b5d9fbfeceebe39c92501dc773a335f4.zip
1. Use configobj instead of configparser
a. This allows us to not have to add a fake section in b. It will also preserver the files initial comments 2. Adjust how the new sections are being added and values are being written due to this change
Diffstat (limited to 'cloudinit/config/cc_mcollective.py')
-rw-r--r--cloudinit/config/cc_mcollective.py65
1 files changed, 29 insertions, 36 deletions
diff --git a/cloudinit/config/cc_mcollective.py b/cloudinit/config/cc_mcollective.py
index 36a4cade..2acdbc6f 100644
--- a/cloudinit/config/cc_mcollective.py
+++ b/cloudinit/config/cc_mcollective.py
@@ -21,7 +21,10 @@
from StringIO import StringIO
-from cloudinit import helpers
+# Used since this can maintain comments
+# and doesn't need a top level section
+from configobj import ConfigObj
+
from cloudinit import util
PUBCERT_FILE = "/etc/mcollective/ssl/server-public.pem"
@@ -43,54 +46,44 @@ def handle(name, cfg, cloud, log, _args):
# ... and then update the mcollective configuration
if 'conf' in mcollective_cfg:
- # Create object for reading server.cfg values
- mcollective_config = helpers.DefaultingConfigParser()
- # Read server.cfg values from original file in order to be able to mix
- # the rest up
+ # Read server.cfg values from the
+ # original file in order to be able to mix the rest up
server_cfg_fn = cloud.paths.join(True, '/etc/mcollective/server.cfg')
- old_contents = util.load_file(server_cfg_fn)
- # It doesn't contain any sections so just add one temporarily
- # Use a hash id based off the contents,
- # just incase of conflicts... (try to not have any...)
- # This is so that an error won't occur when reading (and no
- # sections exist in the file)
- section_tpl = "[nullsection_%s]"
- attempts = 0
- section_head = section_tpl % (attempts)
- while old_contents.find(section_head) != -1:
- attempts += 1
- section_head = section_tpl % (attempts)
- sectioned_contents = "%s\n%s" % (section_head, old_contents)
- mcollective_config.readfp(StringIO(sectioned_contents),
- filename=server_cfg_fn)
+ mcollective_config = ConfigObj(server_cfg_fn)
+ # See: http://tiny.cc/jh9agw
for (cfg_name, cfg) in mcollective_cfg['conf'].iteritems():
if cfg_name == 'public-cert':
pubcert_fn = cloud.paths.join(True, PUBCERT_FILE)
util.write_file(pubcert_fn, cfg, mode=0644)
- mcollective_config.set(cfg_name,
- 'plugin.ssl_server_public', pubcert_fn)
- mcollective_config.set(cfg_name, 'securityprovider', 'ssl')
+ mcollective_config['plugin.ssl_server_public'] = pubcert_fn
+ mcollective_config['securityprovider'] = 'ssl'
elif cfg_name == 'private-cert':
pricert_fn = cloud.paths.join(True, PRICERT_FILE)
util.write_file(pricert_fn, cfg, mode=0600)
- mcollective_config.set(cfg_name,
- 'plugin.ssl_server_private', pricert_fn)
- mcollective_config.set(cfg_name, 'securityprovider', 'ssl')
+ mcollective_config['plugin.ssl_server_private'] = pricert_fn
+ mcollective_config['securityprovider'] = 'ssl'
else:
- # Iterate throug the config items, we'll use ConfigParser.set
- # to overwrite or create new items as needed
- for (o, v) in cfg.iteritems():
- mcollective_config.set(cfg_name, o, v)
+ if isinstance(cfg, (basestring, str)):
+ # Just set it in the 'main' section
+ mcollective_config[cfg_name] = cfg
+ elif isinstance(cfg, (dict)):
+ # Iterate throug the config items, create a section
+ # if it is needed and then add/or create items as needed
+ if cfg_name not in mcollective_config.sections:
+ mcollective_config[cfg_name] = {}
+ for (o, v) in cfg.iteritems():
+ mcollective_config[cfg_name][o] = v
+ else:
+ # Otherwise just try to convert it to a string
+ mcollective_config[cfg_name] = str(cfg)
# We got all our config as wanted we'll rename
# the previous server.cfg and create our new one
old_fn = cloud.paths.join(False, '/etc/mcollective/server.cfg.old')
util.rename(server_cfg_fn, old_fn)
- # Now we got the whole file, write to disk except the section
- # we added so that config parser won't error out when trying to read.
- # Note below, that we've just used ConfigParser because it generally
- # works. Below, we remove the initial 'nullsection' header.
- contents = mcollective_config.stringify()
- contents = contents.replace("%s\n" % (section_head), "")
+ # Now we got the whole file, write to disk...
+ contents = StringIO()
+ mcollective_config.write(contents)
+ contents = contents.getvalue()
server_cfg_rw = cloud.paths.join(False, '/etc/mcollective/server.cfg')
util.write_file(server_cfg_rw, contents, mode=0644)