diff options
author | Rob Austein <sra@hactrn.net> | 2010-03-15 22:39:03 +0000 |
---|---|---|
committer | Rob Austein <sra@hactrn.net> | 2010-03-15 22:39:03 +0000 |
commit | 0409c9b0ed19a149467690e5192c3228a3fc40f3 (patch) | |
tree | 435ce79a194585d3ddfdcc60c9e1312f2fa4f4a1 /myrpki.rototill/convert-from-csv-to-entitydb.py | |
parent | 4d619ff254efff5f2d98b70a63e6b8eaf53029bb (diff) |
Preserve comments and ordering from template file, so result has some
chance of being readable.
svn path=/myrpki.rototill/convert-from-csv-to-entitydb.py; revision=3098
Diffstat (limited to 'myrpki.rototill/convert-from-csv-to-entitydb.py')
-rw-r--r-- | myrpki.rototill/convert-from-csv-to-entitydb.py | 80 |
1 files changed, 42 insertions, 38 deletions
diff --git a/myrpki.rototill/convert-from-csv-to-entitydb.py b/myrpki.rototill/convert-from-csv-to-entitydb.py index 00148a02..3c25ba55 100644 --- a/myrpki.rototill/convert-from-csv-to-entitydb.py +++ b/myrpki.rototill/convert-from-csv-to-entitydb.py @@ -23,6 +23,9 @@ import rpki.sundial, myrpki from lxml.etree import Element, SubElement, ElementTree +section_regexp = re.compile("\s*\[\s*(.+?)\s*\]\s*$") +variable_regexp = re.compile("\s*([-a-zA-Z0-9_]+)(\s*=\s*)(.+?)\s*$") + cfg_file = "myrpki.conf" template_file = os.path.join(os.path.dirname(sys.argv[0]), "examples", "myrpki.conf") new_cfg_file = None @@ -50,9 +53,6 @@ if os.path.exists(new_cfg_file): cfg = ConfigParser.RawConfigParser() cfg.readfp(open(cfg_file)) -newcfg = ConfigParser.RawConfigParser() -newcfg.readfp(open(template_file)) - # These two have no counterpart in new config file, just read them from old repository_bpki_certificate = cfg.get("myrpki", "repository_bpki_certificate") @@ -66,51 +66,70 @@ repository_handle = cfg.get("myrpki", "repository_handle") # stuff that is automated via macro expansions in the new config file # should be ok without modification. +r = {} + if cfg.has_section("myrpki"): for i in ("handle", "roa_csv", "prefix_csv", "asn_csv", "xml_filename"): - newcfg.set("myrpki", i, cfg.get("myrpki", i)) - newcfg.set("myrpki", "bpki_resources_directory", cfg.get("myrpki", "bpki_directory")) + r["myrpki", i] = cfg.get("myrpki", i) + r["myrpki", "bpki_resources_directory"] = cfg.get("myrpki", "bpki_directory") if cfg.has_section("myirbe"): - newcfg.set("myrpki", "bpki_servers_directory", cfg.get("myirbe", "bpki_directory")) - newcfg.set("myrpki", "run_rpkid", True) - newcfg.set("myrpki", "run_pubd", cfg.getboolean("myirbe", "want_pubd")) - newcfg.set("myrpki", "run_rootd", cfg.getboolean("myirbe", "want_rootd")) + r["myrpki", "bpki_servers_directory"] = cfg.get("myirbe", "bpki_directory") + r["myrpki", "run_rpkid"] = True + r["myrpki", "run_pubd"] = cfg.getboolean("myirbe", "want_pubd") + r["myrpki", "run_rootd"] = cfg.getboolean("myirbe", "want_rootd") else: for i in ("run_rpkid", "run_pubd", "run_rootd"): - newcfg.set("myrpki", i, False) + r["myrpki", i] = False if cfg.has_section("rpkid"): - newcfg.set("myrpki", "rpkid_server_host", cfg.get("rpkid", "server-host")) - newcfg.set("myrpki", "rpkid_server_port", cfg.get("rpkid", "server-port")) + r["myrpki", "rpkid_server_host"] = cfg.get("rpkid", "server-host") + r["myrpki", "rpkid_server_port"] = cfg.get("rpkid", "server-port") if cfg.has_section("irdbd"): u = urlparse.urlparse(cfg.get("irdbd", "https-url")) - newcfg.set("myrpki", "irdbd_server_host", u.hostname or "localhost") - newcfg.set("myrpki", "irdbd_server_port", u.port or 443) + r["myrpki", "irdbd_server_host"] = u.hostname or "localhost" + r["myrpki", "irdbd_server_port"] = u.port or 443 if cfg.has_section("pubd"): - newcfg.set("myrpki", "pubd_server_host", cfg.get("pubd", "server-host")) - newcfg.set("myrpki", "pubd_server_port", cfg.get("pubd", "server-port")) - newcfg.set("myrpki", "publication_base_directory", cfg.get("pubd", "publication-base")) + r["myrpki", "pubd_server_host"] = cfg.get("pubd", "server-host") + r["myrpki", "pubd_server_port"] = cfg.get("pubd", "server-port") + r["myrpki", "publication_base_directory"] = cfg.get("pubd", "publication-base") if cfg.has_section("rootd"): - newcfg.set("myrpki", "rootd_server_port", cfg.get("rootd", "server-port")) + r["myrpki", "rootd_server_port"] = cfg.get("rootd", "server-port") u = urlparse.urlparse(cfg.get("rootd", "rpki-base-uri")) - if (newcfg.get("myrpki", "publication_rsync_server") == "${myrpki::pubd_server_host}" and - u.netloc not in ("rpki.example.org", newcfg.get("myrpki", "pubd_server_host"))): - newcfg.set("myrpki", "publication_rsync_server", u.netloc) + r["myrpki", "publication_rsync_server"] = u.netloc for i in ("rpkid", "irdbd", "pubd"): if cfg.has_section(i): for j in ("sql-database", "sql-username", "sql-password"): - newcfg.set(i, j, cfg.get(i, j)) + r[i, j] = cfg.get(i, j) -# Done constructing new config file +f = open(new_cfg_file, "w") +f.write("# Automatically converted from %s using %s as a template.\n\n" % (cfg_file, template_file)) +section = None +for line in open(template_file): + m = section_regexp.match(line) + if m: + section = m.group(1) + m = variable_regexp.match(line) + if m: + option, whitespace = m.group(1, 2) + else: + option = None + if (section, option) in r: + line = "%s%s%s\n" % (option, whitespace, r[section, option]) + f.write(line) +f.close() +print "Wrote", new_cfg_file # Get all of these from the new config file; in theory we just set all # of them, but we want to use values matching new config in any case. +newcfg = ConfigParser.RawConfigParser() +newcfg.readfp(open(new_cfg_file)) + handle = newcfg.get("myrpki", "handle") bpki_resources_directory = newcfg.get("myrpki", "bpki_resources_directory") bpki_servers_directory = newcfg.get("myrpki", "bpki_servers_directory") @@ -123,21 +142,6 @@ rpkid_server_port = newcfg.get("myrpki", "rpkid_server_port") bpki_resources_pemfile = bpki_resources_directory + "/ca.cer" bpki_servers_pemfile = bpki_servers_directory + "/ca.cer" -# If we got this far, it should be ok to write the new config file. - -f = open(new_cfg_file, "w") -f.write("""\ -# Automatically converted from -# %s -# using -# %s -# as a template. Sorry about the lack of comments, ConfigParser -# doesn't preserve them.\n -""" % (cfg_file, template_file)) -newcfg.write(f) -f.close() -print "Wrote", new_cfg_file - try: entitydb_dir = newcfg.get("myrpki", "entitydb_dir") except ConfigParser.NoOptionError: |