~cloud-init-dev/cloud-init/trunk

« back to all changes in this revision

Viewing changes to cloudinit/config/cc_mcollective.py

  • Committer: Scott Moser
  • Date: 2016-07-19 18:46:14 UTC
  • Revision ID: smoser@ubuntu.com-20160719184614-tv2d9mvn1rbb3d2i
mcollective: add tests, cleanups and bug fix when no config in /etc.

Things here:
 - restart rather than 'start' the service, to pick up a config change
   that we would have written.
 - update the config and write cert files whether or not the file
   existed on the system.  Previously it would only write the cert
   files if /etc/mcollective/server.cfg already existed.
 - improve test coverage

Show diffs side-by-side

added added

removed removed

Lines of Context:
36
36
LOG = logging.getLogger(__name__)
37
37
 
38
38
 
39
 
def configure(config):
 
39
def configure(config, server_cfg=SERVER_CFG,
 
40
              pubcert_file=PUBCERT_FILE, pricert_file=PRICERT_FILE):
40
41
    # Read server.cfg values from the
41
42
    # original file in order to be able to mix the rest up
42
43
    try:
43
 
        mcollective_config = ConfigObj(SERVER_CFG, file_error=True)
 
44
        mcollective_config = ConfigObj(server_cfg, file_error=True)
 
45
        existed = True
44
46
    except IOError:
45
 
        LOG.warn("Did not find file %s", SERVER_CFG)
46
 
        mcollective_config = ConfigObj(config)
47
 
    else:
48
 
        for (cfg_name, cfg) in config.items():
49
 
            if cfg_name == 'public-cert':
50
 
                util.write_file(PUBCERT_FILE, cfg, mode=0o644)
51
 
                mcollective_config[
52
 
                    'plugin.ssl_server_public'] = PUBCERT_FILE
53
 
                mcollective_config['securityprovider'] = 'ssl'
54
 
            elif cfg_name == 'private-cert':
55
 
                util.write_file(PRICERT_FILE, cfg, mode=0o600)
56
 
                mcollective_config[
57
 
                    'plugin.ssl_server_private'] = PRICERT_FILE
58
 
                mcollective_config['securityprovider'] = 'ssl'
 
47
        LOG.debug("Did not find file %s", server_cfg)
 
48
        mcollective_config = ConfigObj()
 
49
        existed = False
 
50
 
 
51
    for (cfg_name, cfg) in config.items():
 
52
        if cfg_name == 'public-cert':
 
53
            util.write_file(pubcert_file, cfg, mode=0o644)
 
54
            mcollective_config[
 
55
                'plugin.ssl_server_public'] = pubcert_file
 
56
            mcollective_config['securityprovider'] = 'ssl'
 
57
        elif cfg_name == 'private-cert':
 
58
            util.write_file(pricert_file, cfg, mode=0o600)
 
59
            mcollective_config[
 
60
                'plugin.ssl_server_private'] = pricert_file
 
61
            mcollective_config['securityprovider'] = 'ssl'
 
62
        else:
 
63
            if isinstance(cfg, six.string_types):
 
64
                # Just set it in the 'main' section
 
65
                mcollective_config[cfg_name] = cfg
 
66
            elif isinstance(cfg, (dict)):
 
67
                # Iterate through the config items, create a section if
 
68
                # it is needed and then add/or create items as needed
 
69
                if cfg_name not in mcollective_config.sections:
 
70
                    mcollective_config[cfg_name] = {}
 
71
                for (o, v) in cfg.items():
 
72
                    mcollective_config[cfg_name][o] = v
59
73
            else:
60
 
                if isinstance(cfg, six.string_types):
61
 
                    # Just set it in the 'main' section
62
 
                    mcollective_config[cfg_name] = cfg
63
 
                elif isinstance(cfg, (dict)):
64
 
                    # Iterate through the config items, create a section if
65
 
                    # it is needed and then add/or create items as needed
66
 
                    if cfg_name not in mcollective_config.sections:
67
 
                        mcollective_config[cfg_name] = {}
68
 
                    for (o, v) in cfg.items():
69
 
                        mcollective_config[cfg_name][o] = v
70
 
                else:
71
 
                    # Otherwise just try to convert it to a string
72
 
                    mcollective_config[cfg_name] = str(cfg)
 
74
                # Otherwise just try to convert it to a string
 
75
                mcollective_config[cfg_name] = str(cfg)
 
76
 
 
77
    if existed:
73
78
        # We got all our config as wanted we'll rename
74
79
        # the previous server.cfg and create our new one
75
 
        util.rename(SERVER_CFG, "%s.old" % (SERVER_CFG))
 
80
        util.rename(server_cfg, "%s.old" % (server_cfg))
76
81
 
77
82
    # Now we got the whole file, write to disk...
78
83
    contents = BytesIO()
79
84
    mcollective_config.write(contents)
80
 
    contents = contents.getvalue()
81
 
    util.write_file(SERVER_CFG, contents, mode=0o644)
 
85
    util.write_file(server_cfg, contents.getvalue(), mode=0o644)
82
86
 
83
87
 
84
88
def handle(name, cfg, cloud, log, _args):
98
102
    if 'conf' in mcollective_cfg:
99
103
        configure(config=mcollective_cfg['conf'])
100
104
 
101
 
    # Start mcollective
102
 
    util.subp(['service', 'mcollective', 'start'], capture=False)
 
105
    # restart mcollective to handle updated config
 
106
    util.subp(['service', 'mcollective', 'restart'], capture=False)