diff options
-rw-r--r-- | cloudinit/CloudConfig/cc_mcollective.py | 37 | ||||
-rw-r--r-- | doc/examples/cloud-config-mcollective.txt | 15 |
2 files changed, 39 insertions, 13 deletions
diff --git a/cloudinit/CloudConfig/cc_mcollective.py b/cloudinit/CloudConfig/cc_mcollective.py index ce86a2aa..9aae2d64 100644 --- a/cloudinit/CloudConfig/cc_mcollective.py +++ b/cloudinit/CloudConfig/cc_mcollective.py @@ -20,20 +20,21 @@ import os import pwd import socket import subprocess +import fileinput import StringIO import ConfigParser import cloudinit.CloudConfig as cc # Our fake header section class FakeSecHead(object): - def __init__(self, fp): - self.fp = fp - self.sechead = '[nullsection]\n' - def readline(self): - if self.sechead: - try: return self.sechead - finally: self.sechead = None - else: return self.fp.readline() + def __init__(self, fp): + self.fp = fp + self.sechead = '[nullsection]\n' + def readline(self): + if self.sechead: + try: return self.sechead + finally: self.sechead = None + else: return self.fp.readline() def handle(name,cfg,cloud,log,args): # If there isn't a mcollective key in the configuration don't do anything @@ -53,11 +54,21 @@ def handle(name,cfg,cloud,log,args): # to overwrite or create new items as needed for o, v in cfg.iteritems(): mcollective_config.set(cfg_name,o,v) - # We got all our config as wanted we'll rename - # the previous server.cfg and create our new one - os.rename('/etc/mcollective/server.cfg','/etc/mcollective/server.cfg.old') - with open('/etc/mcollective/server.cfg', 'wb') as configfile: - mcollective_config.write(configfile) + # We got all our config as wanted we'll rename + # the previous server.cfg and create our new one + os.rename('/etc/mcollective/server.cfg','/etc/mcollective/server.cfg.old') + outputfile = StringIO.StringIO() + mcollective_config.write(outputfile) + # Now we got the whole file, write to disk except first line + final_configfile = open('/etc/mcollective/server.cfg', 'wb') + # Note below, that we've just used ConfigParser because it generally + # works. Below, we remove the initial 'nullsection' header + # and then change 'key = value' to 'key: value'. The global + # search and replace of '=' with ':' could be problematic though. + # this most likely needs fixing. + final_configfile.write(outputfile.getvalue().replace('[nullsection]\n','').replace(' =',':')) + final_configfile.close() + # Start mcollective subprocess.check_call(['service', 'mcollective', 'start']) diff --git a/doc/examples/cloud-config-mcollective.txt b/doc/examples/cloud-config-mcollective.txt new file mode 100644 index 00000000..ca7ba03e --- /dev/null +++ b/doc/examples/cloud-config-mcollective.txt @@ -0,0 +1,15 @@ +#cloud-config +# +# This is an example file to automatically setup and run mcollective +# when the instance boots for the first time. +# Make sure that this file is valid yaml before starting instances. +# It should be passed as user-data when starting the instance. +mcollective: + # Every key present in the conf object will be added to server.cfg: + # key: value + # + # For example the configuration below will have the following key + # added to server.cfg: + # plugin.stomp.host: dbhost + conf: + plugin.stomp.host: dbhost |