Blame stages/org.osbuild.groups

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