diff --git a/podman/domain/containers_create.py b/podman/domain/containers_create.py index b2d5b824..5b710b33 100644 --- a/podman/domain/containers_create.py +++ b/podman/domain/containers_create.py @@ -739,6 +739,33 @@ def parse_host_port(_container_port, _protocol, _host): if "userns_mode" in args: params["userns"] = {"nsmode": args.pop("userns_mode")} + # proof-of-concept + def merge_dicts(d1, d2): + for dk in d2: + if dk in d1: + if not isinstance(d1[dk], dict) or not isinstance(d2[dk], dict): + d1[dk] = d2[dk] + else: + d1[dk] = merge_dicts(d1[dk], d2[dk]) + else: + d1[dk] = d2[dk] + return d1 + + default_idmappings = { + "AutoUserNs": False if params["userns"]["nsmode"] != "auto" else True, + "AutoUserNsOpts": None if params["userns"]["nsmode"] != "auto" else { + "AdditionalUIDMappings": None, + "AdditionalGIDMappings": None, + "PasswdFile": "", + "GroupFile": "", + "InitialSize": 0, + "Size": 0, + }, + } + + old_idmappings = params.get("idmappings") or {} + params.update(idmappings=merge_dicts(default_idmappings, old_idmappings)) + if "uts_mode" in args: params["utsns"] = {"nsmode": args.pop("uts_mode")}