Skip to content

Commit bbcc79a

Browse files
committed
feat: allow changing resource label-domain from default io.podman
1 parent 80b6170 commit bbcc79a

File tree

2 files changed

+37
-13
lines changed

2 files changed

+37
-13
lines changed

newsfragments/label_domain.feature

+1
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
Added support to change default resource label prefix from io.podman via --label-domain cli arg

podman_compose.py

+36-13
Original file line numberDiff line numberDiff line change
@@ -402,7 +402,7 @@ async def assert_volume(compose, mount_dict):
402402
log.debug("podman volume inspect %s || podman volume create %s", vol_name, vol_name)
403403
# TODO: might move to using "volume list"
404404
# podman volume list --format '{{.Name}}\t{{.MountPoint}}' \
405-
# -f 'label=io.podman.compose.project=HERE'
405+
# -f f"label={compose.label_domain}.project=HERE"
406406
try:
407407
_ = (await compose.podman.output([], "volume", ["inspect", vol_name])).decode("utf-8")
408408
except subprocess.CalledProcessError as e:
@@ -412,7 +412,7 @@ async def assert_volume(compose, mount_dict):
412412
args = [
413413
"create",
414414
"--label",
415-
f"io.podman.compose.project={compose.project_name}",
415+
f"{compose.label_domain}.compose.project={compose.project_name}",
416416
"--label",
417417
f"com.docker.compose.project={compose.project_name}",
418418
]
@@ -799,11 +799,11 @@ def norm_ports(ports_in):
799799
return ports_out
800800

801801

802-
def get_network_create_args(net_desc, proj_name, net_name):
802+
def get_network_create_args(net_desc, proj_name, net_name, label_domain='io.podman'):
803803
args = [
804804
"create",
805805
"--label",
806-
f"io.podman.compose.project={proj_name}",
806+
f"{label_domain}.compose.project={proj_name}",
807807
"--label",
808808
f"com.docker.compose.project={proj_name}",
809809
]
@@ -866,7 +866,9 @@ async def assert_cnt_nets(compose, cnt):
866866
except subprocess.CalledProcessError as e:
867867
if is_ext:
868868
raise RuntimeError(f"External network [{net_name}] does not exists") from e
869-
args = get_network_create_args(net_desc, compose.project_name, net_name)
869+
args = get_network_create_args(
870+
net_desc, compose.project_name, net_name, compose.label_domain
871+
)
870872
await compose.podman.output([], "network", args)
871873
await compose.podman.output([], "network", ["exists", net_name])
872874

@@ -1456,7 +1458,7 @@ async def volume_ls(self, proj_name=None):
14561458
"ls",
14571459
"--noheading",
14581460
"--filter",
1459-
f"label=io.podman.compose.project={proj_name}",
1461+
f"label={self.compose.label_domain}.compose.project={proj_name}",
14601462
"--format",
14611463
"{{.Name}}",
14621464
],
@@ -1672,6 +1674,7 @@ def __init__(self):
16721674
self.commands = {}
16731675
self.global_args = None
16741676
self.project_name = None
1677+
self.label_domain = None
16751678
self.dirname = None
16761679
self.pods = None
16771680
self.containers = None
@@ -1789,6 +1792,14 @@ def _parse_compose_file(self):
17891792
relative_files = files
17901793
filename = files[0]
17911794
project_name = args.project_name
1795+
label_domain = os.environ.get("COMPOSE_LABEL_DOMAIN", "io.podman")
1796+
if label_domain in args:
1797+
label_domain = args.label_domain
1798+
1799+
#if args.label_domain:
1800+
# label_domain = args.label_domain
1801+
#else:
1802+
# label_domain = os.eviron.get("COMPOSE_LABEL_DOMAIN", "io.podman")
17921803
# no_ansi = args.no_ansi
17931804
# no_cleanup = args.no_cleanup
17941805
# dry_run = args.dry_run
@@ -1890,6 +1901,7 @@ def _parse_compose_file(self):
18901901
raise RuntimeError(f"Project name [{dir_basename}] normalized to empty")
18911902

18921903
self.project_name = project_name
1904+
self.label_domain = label_domain
18931905
self.environ.update({"COMPOSE_PROJECT_NAME": self.project_name})
18941906

18951907
services = compose.get("services", None)
@@ -1934,9 +1946,9 @@ def _parse_compose_file(self):
19341946
# volumes: [...]
19351947
self.vols = compose.get("volumes", {})
19361948
podman_compose_labels = [
1937-
"io.podman.compose.config-hash=" + self.yaml_hash,
1938-
"io.podman.compose.project=" + project_name,
1939-
"io.podman.compose.version=" + __version__,
1949+
label_domain + ".compose.config-hash=" + self.yaml_hash,
1950+
label_domain + ".compose.project=" + project_name,
1951+
label_domain + ".compose.version=" + __version__,
19401952
f"PODMAN_SYSTEMD_UNIT=podman-compose@{project_name}.service",
19411953
"com.docker.compose.project=" + project_name,
19421954
"com.docker.compose.project.working_dir=" + dirname,
@@ -2039,6 +2051,7 @@ def _parse_args(self, argv=None):
20392051
for cmd_parser in cmd._parse_args: # pylint: disable=protected-access
20402052
cmd_parser(subparser)
20412053
self.global_args = parser.parse_args(argv)
2054+
print(self.global_args)
20422055
if self.global_args.in_pod is not None and self.global_args.in_pod.lower() not in (
20432056
'',
20442057
'true',
@@ -2111,6 +2124,12 @@ def _init_global_parser(parser):
21112124
type=str,
21122125
default=None,
21132126
)
2127+
parser.add_argument(
2128+
"--label-domain",
2129+
help="Specify an alternate root domain for resource labels (default: io.podman)",
2130+
type=str,
2131+
default="io.podman",
2132+
)
21142133
parser.add_argument(
21152134
"--podman-path",
21162135
help="Specify an alternate path to podman (default: use location in $PATH variable)",
@@ -2494,10 +2513,10 @@ async def compose_up(compose: PodmanCompose, args):
24942513
"ps",
24952514
[
24962515
"--filter",
2497-
f"label=io.podman.compose.project={compose.project_name}",
2516+
f"label={compose.label_domain}.compose.project={compose.project_name}",
24982517
"-a",
24992518
"--format",
2500-
'{{ index .Labels "io.podman.compose.config-hash"}}',
2519+
'{{ index .Labels "' + compose.label_domain + '.compose.config-hash"}}',
25012520
],
25022521
)
25032522
)
@@ -2642,7 +2661,7 @@ async def compose_down(compose, args):
26422661
"ps",
26432662
[
26442663
"--filter",
2645-
f"label=io.podman.compose.project={compose.project_name}",
2664+
f"label={compose.label_domain}.compose.project={compose.project_name}",
26462665
"-a",
26472666
"--format",
26482667
"{{ .Names }}",
@@ -2676,7 +2695,11 @@ async def compose_down(compose, args):
26762695

26772696
@cmd_run(podman_compose, "ps", "show status of containers")
26782697
async def compose_ps(compose, args):
2679-
ps_args = ["-a", "--filter", f"label=io.podman.compose.project={compose.project_name}"]
2698+
ps_args = [
2699+
"-a",
2700+
"--filter",
2701+
f"label={compose.label_domain}.compose.project={compose.project_name}",
2702+
]
26802703
if args.quiet is True:
26812704
ps_args.extend(["--format", "{{.ID}}"])
26822705
elif args.format:

0 commit comments

Comments
 (0)