summaryrefslogtreecommitdiffstats
path: root/tools/posixusers_baseline.py
diff options
context:
space:
mode:
authorChris St. Pierre <chris.a.st.pierre@gmail.com>2012-12-03 10:51:34 -0600
committerChris St. Pierre <chris.a.st.pierre@gmail.com>2012-12-03 10:52:13 -0600
commit33234d5dae565e6520bbdb65d67fbaed03df4d43 (patch)
tree232ec275370a5d186095bf289897395d329c7232 /tools/posixusers_baseline.py
parent1d4b0118ced1b198587fd75c549e2b394ff71531 (diff)
downloadbcfg2-33234d5dae565e6520bbdb65d67fbaed03df4d43.tar.gz
bcfg2-33234d5dae565e6520bbdb65d67fbaed03df4d43.tar.bz2
bcfg2-33234d5dae565e6520bbdb65d67fbaed03df4d43.zip
added builtin support for creating users and groups
Diffstat (limited to 'tools/posixusers_baseline.py')
-rwxr-xr-xtools/posixusers_baseline.py73
1 files changed, 73 insertions, 0 deletions
diff --git a/tools/posixusers_baseline.py b/tools/posixusers_baseline.py
new file mode 100755
index 000000000..a4abca42d
--- /dev/null
+++ b/tools/posixusers_baseline.py
@@ -0,0 +1,73 @@
+#!/usr/bin/env python
+
+import grp
+import sys
+import logging
+import lxml.etree
+import Bcfg2.Logger
+from Bcfg2.Client.Tools.POSIXUsers import POSIXUsers
+from Bcfg2.Options import OptionParser, Option, get_bool, CLIENT_COMMON_OPTIONS
+
+
+def get_setup():
+ optinfo = CLIENT_COMMON_OPTIONS
+ optinfo['nouids'] = Option("Do not include UID numbers for users",
+ default=False,
+ cmd='--no-uids',
+ long_arg=True,
+ cook=get_bool)
+ optinfo['nogids'] = Option("Do not include GID numbers for groups",
+ default=False,
+ cmd='--no-gids',
+ long_arg=True,
+ cook=get_bool)
+ setup = OptionParser(optinfo)
+ setup.parse(sys.argv[1:])
+
+ if setup['args']:
+ print("posixuser_[baseline.py takes no arguments, only options")
+ print(setup.buildHelpMessage())
+ raise SystemExit(1)
+ level = 30
+ if setup['verbose']:
+ level = 20
+ if setup['debug']:
+ level = 0
+ Bcfg2.Logger.setup_logging('posixusers_baseline.py',
+ to_syslog=False,
+ level=level,
+ to_file=setup['logging'])
+ return setup
+
+
+def main():
+ setup = get_setup()
+ if setup['file']:
+ config = lxml.etree.parse(setup['file']).getroot()
+ else:
+ config = lxml.etree.Element("Configuration")
+ users = POSIXUsers(logging.getLogger('posixusers_baseline.py'),
+ setup, config)
+
+ baseline = lxml.etree.Element("Bundle", name="posixusers_baseline")
+ for entry in users.FindExtra():
+ data = users.existing[entry.tag][entry.get("name")]
+ for attr, idx in users.attr_mapping[entry.tag].items():
+ if (entry.get(attr) or
+ (attr == 'uid' and setup['nouids']) or
+ (attr == 'gid' and setup['nogids'])):
+ continue
+ entry.set(attr, str(data[idx]))
+ if entry.tag == 'POSIXUser':
+ entry.set("group", grp.getgrgid(data[3])[0])
+ for group in users.user_supplementary_groups(entry):
+ memberof = lxml.etree.SubElement(entry, "MemberOf")
+ memberof.text = group[0]
+
+ entry.tag = "Bound" + entry.tag
+ baseline.append(entry)
+
+ print(lxml.etree.tostring(baseline, pretty_print=True))
+
+if __name__ == "__main__":
+ sys.exit(main())