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) |