@@ -401,7 +401,7 @@ async def assert_volume(compose, mount_dict):
401
401
log .debug ("podman volume inspect %s || podman volume create %s" , vol_name , vol_name )
402
402
# TODO: might move to using "volume list"
403
403
# podman volume list --format '{{.Name}}\t{{.MountPoint}}' \
404
- # -f ' label=io.podman .compose.project=HERE'
404
+ # -f f" label={compose.label_domain} .compose.project=HERE"
405
405
try :
406
406
_ = (await compose .podman .output ([], "volume" , ["inspect" , vol_name ])).decode ("utf-8" )
407
407
except subprocess .CalledProcessError as e :
@@ -411,7 +411,7 @@ async def assert_volume(compose, mount_dict):
411
411
args = [
412
412
"create" ,
413
413
"--label" ,
414
- f"io.podman .compose.project={ compose .project_name } " ,
414
+ f"{ compose . label_domain } .compose.project={ compose .project_name } " ,
415
415
"--label" ,
416
416
f"com.docker.compose.project={ compose .project_name } " ,
417
417
]
@@ -804,11 +804,11 @@ def norm_ports(ports_in):
804
804
return ports_out
805
805
806
806
807
- def get_network_create_args (net_desc , proj_name , net_name ):
807
+ def get_network_create_args (net_desc , proj_name , net_name , label_domain = 'io.podman' ):
808
808
args = [
809
809
"create" ,
810
810
"--label" ,
811
- f"io.podman .compose.project={ proj_name } " ,
811
+ f"{ label_domain } .compose.project={ proj_name } " ,
812
812
"--label" ,
813
813
f"com.docker.compose.project={ proj_name } " ,
814
814
]
@@ -871,7 +871,9 @@ async def assert_cnt_nets(compose, cnt):
871
871
except subprocess .CalledProcessError as e :
872
872
if is_ext :
873
873
raise RuntimeError (f"External network [{ net_name } ] does not exists" ) from e
874
- args = get_network_create_args (net_desc , compose .project_name , net_name )
874
+ args = get_network_create_args (
875
+ net_desc , compose .project_name , net_name , compose .label_domain
876
+ )
875
877
await compose .podman .output ([], "network" , args )
876
878
await compose .podman .output ([], "network" , ["exists" , net_name ])
877
879
@@ -1459,7 +1461,7 @@ async def volume_ls(self):
1459
1461
"ls" ,
1460
1462
"--noheading" ,
1461
1463
"--filter" ,
1462
- f"label=io.podman .compose.project={ self .compose .project_name } " ,
1464
+ f"label={ self . compose . label_domain } .compose.project={ self .compose .project_name } " ,
1463
1465
"--format" ,
1464
1466
"{{.Name}}" ,
1465
1467
],
@@ -1675,6 +1677,7 @@ def __init__(self):
1675
1677
self .commands = {}
1676
1678
self .global_args = argparse .Namespace ()
1677
1679
self .project_name = None
1680
+ self .label_domain = None
1678
1681
self .dirname = None
1679
1682
self .pods = None
1680
1683
self .containers = []
@@ -1792,6 +1795,10 @@ def _parse_compose_file(self):
1792
1795
relative_files = files
1793
1796
filename = files [0 ]
1794
1797
project_name = args .project_name
1798
+ label_domain = os .environ .get ("COMPOSE_LABEL_DOMAIN" , "io.podman" )
1799
+ if label_domain in args :
1800
+ label_domain = args .label_domain
1801
+
1795
1802
# no_ansi = args.no_ansi
1796
1803
# no_cleanup = args.no_cleanup
1797
1804
# dry_run = args.dry_run
@@ -1832,7 +1839,9 @@ def _parse_compose_file(self):
1832
1839
env_vars = norm_as_dict (args .env )
1833
1840
self .environ .update (env_vars )
1834
1841
1835
- compose = {}
1842
+ compose = {
1843
+ label_domain : label_domain ,
1844
+ }
1836
1845
# Iterate over files primitively to allow appending to files in-loop
1837
1846
files_iter = iter (files )
1838
1847
@@ -1893,6 +1902,7 @@ def _parse_compose_file(self):
1893
1902
raise RuntimeError (f"Project name [{ dir_basename } ] normalized to empty" )
1894
1903
1895
1904
self .project_name = project_name
1905
+ self .label_domain = label_domain
1896
1906
self .environ .update ({"COMPOSE_PROJECT_NAME" : self .project_name })
1897
1907
1898
1908
services = compose .get ("services" , None )
@@ -1939,9 +1949,9 @@ def _parse_compose_file(self):
1939
1949
# volumes: [...]
1940
1950
self .vols = compose .get ("volumes" , {})
1941
1951
podman_compose_labels = [
1942
- "io.podman .compose.config-hash=" + self .yaml_hash ,
1943
- "io.podman .compose.project=" + project_name ,
1944
- "io.podman .compose.version=" + __version__ ,
1952
+ label_domain + " .compose.config-hash=" + self .yaml_hash ,
1953
+ label_domain + " .compose.project=" + project_name ,
1954
+ label_domain + " .compose.version=" + __version__ ,
1945
1955
f"PODMAN_SYSTEMD_UNIT=podman-compose@{ project_name } .service" ,
1946
1956
"com.docker.compose.project=" + project_name ,
1947
1957
"com.docker.compose.project.working_dir=" + dirname ,
@@ -2117,6 +2127,12 @@ def _init_global_parser(parser):
2117
2127
type = str ,
2118
2128
default = None ,
2119
2129
)
2130
+ parser .add_argument (
2131
+ "--label-domain" ,
2132
+ help = "Specify an alternate root domain for resource labels (default: io.podman)" ,
2133
+ type = str ,
2134
+ default = "io.podman" ,
2135
+ )
2120
2136
parser .add_argument (
2121
2137
"--podman-path" ,
2122
2138
help = "Specify an alternate path to podman (default: use location in $PATH variable)" ,
@@ -2500,10 +2516,10 @@ async def compose_up(compose: PodmanCompose, args):
2500
2516
"ps" ,
2501
2517
[
2502
2518
"--filter" ,
2503
- f"label=io.podman .compose.project={ compose .project_name } " ,
2519
+ f"label={ args . label_domain } .compose.project={ compose .project_name } " ,
2504
2520
"-a" ,
2505
2521
"--format" ,
2506
- '{{ index .Labels "io.podman .compose.config-hash"}}' ,
2522
+ '{{ index .Labels "' + args . label_domain + ' .compose.config-hash"}}' ,
2507
2523
],
2508
2524
)
2509
2525
)
@@ -2648,7 +2664,7 @@ async def compose_down(compose, args):
2648
2664
"ps" ,
2649
2665
[
2650
2666
"--filter" ,
2651
- f"label=io.podman .compose.project={ compose .project_name } " ,
2667
+ f"label={ args . label_domain } .compose.project={ compose .project_name } " ,
2652
2668
"-a" ,
2653
2669
"--format" ,
2654
2670
"{{ .Names }}" ,
@@ -2682,7 +2698,11 @@ async def compose_down(compose, args):
2682
2698
2683
2699
@cmd_run (podman_compose , "ps" , "show status of containers" )
2684
2700
async def compose_ps (compose , args ):
2685
- ps_args = ["-a" , "--filter" , f"label=io.podman.compose.project={ compose .project_name } " ]
2701
+ ps_args = [
2702
+ "-a" ,
2703
+ "--filter" ,
2704
+ f"label={ args .label_domain } .compose.project={ compose .project_name } " ,
2705
+ ]
2686
2706
if args .quiet is True :
2687
2707
ps_args .extend (["--format" , "{{.ID}}" ])
2688
2708
elif args .format :
0 commit comments