#!/usr/bin/python3
"""
Create group accounts
Create group accounts, optionally assigning them static GIDs.
Runs `groupadd` from the buildhost to create the groups listed in `groups`.
If no `gid` is given, `groupadd` will choose one.
If the specified group name or GID is already in use, this stage will fail.
"""
import json
import subprocess
import sys
SCHEMA = """
"additionalProperties": false,
"properties": {
"groups": {
"type": "object",
"description": "Keys are group names, values are objects with group info",
"propertyNames": {
"pattern": "^[A-Za-z0-9_][A-Za-z0-9_-]{0,31}$"
},
"additionalProperties": {
"type": "object",
"properties": {
"gid": {
"type": "number",
"description": "GID for this group"
}
}
}
}
}
"""
def groupadd(root, name, gid=None):
arguments = []
if gid:
arguments += ["--gid", str(gid)]
subprocess.run(["groupadd", "--root", root, *arguments, name], check=True)
def main(tree, options):
groups = options["groups"]
for name, group_options in groups.items():
gid = group_options.get("gid")
groupadd(tree, name, gid)
return 0
if __name__ == '__main__':
args = json.load(sys.stdin)
r = main(args["tree"], args["options"])
sys.exit(r)