aboutsummaryrefslogtreecommitdiff
path: root/myrpki.rototill/convert-from-csv-to-entitydb.py
diff options
context:
space:
mode:
authorRob Austein <sra@hactrn.net>2010-03-15 22:39:03 +0000
committerRob Austein <sra@hactrn.net>2010-03-15 22:39:03 +0000
commit0409c9b0ed19a149467690e5192c3228a3fc40f3 (patch)
tree435ce79a194585d3ddfdcc60c9e1312f2fa4f4a1 /myrpki.rototill/convert-from-csv-to-entitydb.py
parent4d619ff254efff5f2d98b70a63e6b8eaf53029bb (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.py80
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: