Bump new upstream version
[ganeti-local] / debian / genscript.py
1 #!/usr/bin/python
2
3 # Generate postinst/postrm for ganeti using doc/users/*
4
5 import os
6 import sys
7
8
9 def read_list(fname):
10     with open(fname, "r") as f:
11         return [ l.strip() for l in f ]
12
13 def read_pairs(fname):
14     with open(fname, "r") as f:
15         return [ l.strip().split(None, 1) for l in f ]
16
17 if len(sys.argv) != 3 or sys.argv[1] not in ('postinst', 'postrm'):
18     sys.stderr.write("Usage: %s postinst|postrm DIR\n" % sys.argv[0])
19     sys.exit(1)
20
21 root = os.path.join(sys.argv[2], 'doc/users')
22 debian_root = os.path.dirname(__file__)
23
24 out = ""
25 if sys.argv[1] == "postinst":
26     out += "\t# Groups\n"
27     for group in read_list(os.path.join(root, "groups")):
28         out += "\taddgroup --quiet --system \"%s\"\n" % group
29     out += "\n"
30
31     out += "\t# Users\n"
32     for user, group in read_pairs(os.path.join(root, "users")):
33         out += "\tadduser --quiet --system --ingroup \"%s\" --no-create-home" \
34                " --disabled-password --disabled-login" \
35                " --home /var/lib/ganeti \"%s\"\n" % (group, user)
36     out += "\n"
37
38     out += "\t# Group memberships\n"
39     for user, group in read_pairs(os.path.join(root, "groupmemberships")):
40         out += "\tadduser --quiet \"%s\" \"%s\"\n" % (user, group)
41
42 elif sys.argv[1] == "postrm":
43     out += "\t# Users\n"
44     for user, _ in read_pairs(os.path.join(root, "users")):
45         out += "\tdeluser --quiet --system \"%s\" || true\n" % user
46     out += "\n"
47
48     out += "\t# Groups\n"
49     for group in read_list(os.path.join(root, "groups")):
50         out += "\tdelgroup --quiet --system \"%s\" || true\n" % group
51     out += "\n"
52
53
54 with open(os.path.join(debian_root, "snf-ganeti.%s.in" % sys.argv[1])) as script:
55     done = False
56     for line in script:
57         if line.strip() == "#GANETI_USERS#" and not done:
58             sys.stdout.write(out)
59             done = True
60         else:
61             sys.stdout.write(line)