Statistics
| Branch: | Tag: | Revision:

root / debian / genscript.py @ c5faeefb

History | View | Annotate | Download (1.8 kB)

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