diff options
author | harlowja <harlowja@virtualbox.rhel> | 2012-06-22 08:48:18 -0700 |
---|---|---|
committer | harlowja <harlowja@virtualbox.rhel> | 2012-06-22 08:48:18 -0700 |
commit | 3ca68402b5d9fbfeceebe39c92501dc773a335f4 (patch) | |
tree | e57f3a17219715b38ebc808f93544eaa085a78f5 /cloudinit/config/cc_mcollective.py | |
parent | 9bc45d35160717ff6ea5ba5289979202ca35bce5 (diff) | |
download | vyos-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.py | 65 |
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) |