summaryrefslogtreecommitdiffstats
path: root/tools/upgrade/1.3/migrate_configs.py
blob: c6e6cd2c3933f3abb8c8790f47c4ac8fc8560422 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
#!/usr/bin/env python

import os
import sys
from Bcfg2.Bcfg2Py3k import ConfigParser
import Bcfg2.Options

def copy_section(src_file, tgt_cfg, section, newsection=None):
    if newsection is None:
        newsection = section

    cfg = ConfigParser.ConfigParser()
    if len(cfg.read(src_file)) == 1:
        if cfg.has_section(section):
            try:
                tgt_cfg.add_section(newsection)
            except ConfigParser.DuplicateSectionError:
                print("[%s] section already exists in %s, adding options" %
                      (newsection, setup['cfile']))
            for opt in cfg.options(section):
                val = cfg.get(section, opt)
                if tgt_cfg.has_option(newsection, opt):
                    print("%s in [%s] already populated in %s, skipping" %
                          (opt, newsection, setup['cfile']))
                    print("  %s: %s" % (setup['cfile'],
                                        tgt_cfg.get(newsection, opt)))
                    print("  %s: %s" % (src_file, val))
                else:
                    print("Set %s in [%s] to %s" % (opt, newsection, val))
                    tgt_cfg.set(newsection, opt, val)

def main():
    opts = dict(repo=Bcfg2.Options.SERVER_REPOSITORY,
                configfile=Bcfg2.Options.CFILE)
    setup = Bcfg2.Options.OptionParser(opts)
    setup.parse(sys.argv[1:])

    copy_section(os.path.join(setup['repo'], 'Rules', 'rules.conf'), setup.cfp,
                 "rules")
    pkgs_conf = os.path.join(setup['repo'], 'Packages', 'packages.conf')
    copy_section(pkgs_conf, setup.cfp, "global", newsection="packages")
    for section in ["apt", "yum", "pulp"]:
        copy_section(pkgs_conf, setup.cfp, section,
                     newsection="packages:" + section)

    print("Writing %s" % setup['configfile'])
    try:
        setup.cfp.write(open(setup['configfile'], "w"))
    except IOError:
        err = sys.exc_info()[1]
        print("Could not write %s: %s" % (setup['configfile'], err))

if __name__ == '__main__':
    sys.exit(main())