@@ -376,34 +376,22 @@ def default_network_name_for_project(compose: PodmanCompose, net: str, is_ext: A
376
376
return compose .join_name_parts (compose .project_name .replace ('-' , '' ), net )
377
377
return compose .format_name (net )
378
378
379
- # def tr_identity(project_name, given_containers):
380
- # pod_name = f'pod_{project_name}'
381
- # pod = dict(name=pod_name)
382
- # containers = []
383
- # for cnt in given_containers:
384
- # containers.append(dict(cnt, pod=pod_name))
385
- # return [pod], containers
386
379
387
-
388
- def transform (
389
- args : Any , project_name : str , given_containers : list [Any ]
390
- ) -> tuple [list [dict ], list [dict ]]:
391
- in_pod = str (args .in_pod ).lower ()
392
- pod_name = None
393
- pods = []
394
-
395
- if in_pod in ('true' , '1' , 'none' , '' ):
396
- pod_name = f"pod_{ project_name } "
397
- elif in_pod not in ('false' , '0' ):
398
- pod_name = args .in_pod
399
-
400
- if pod_name :
401
- pods = [{"name" : pod_name }]
402
-
403
- containers = []
404
- for cnt in given_containers :
405
- containers .append (dict (cnt , pod = pod_name ))
406
- return pods , containers
380
+ def try_parse_bool (value : Any ) -> bool | None :
381
+ if isinstance (value , bool ):
382
+ return value
383
+ if isinstance (value , str ):
384
+ value = value .lower ()
385
+ if value in ('true' , '1' ):
386
+ return True
387
+ if value in ('false' , '0' ):
388
+ return False
389
+ if isinstance (value , int ):
390
+ if value == 1 :
391
+ return True
392
+ if value == 0 :
393
+ return False
394
+ return None
407
395
408
396
409
397
async def assert_volume (compose : PodmanCompose , mount_dict : dict [str , Any ]) -> None :
@@ -2064,11 +2052,23 @@ async def run(self, argv: list[str] | None = None) -> None:
2064
2052
if isinstance (retcode , int ):
2065
2053
sys .exit (retcode )
2066
2054
2067
- def resolve_in_pod (self ) -> bool :
2068
- if self .global_args .in_pod in (None , '' ):
2069
- self .global_args .in_pod = self .x_podman .get (PodmanCompose .XPodmanSettingKey .IN_POD , "1" )
2070
- # otherwise use `in_pod` value provided by command line
2071
- return self .global_args .in_pod
2055
+ def resolve_pod_name (self ) -> str | None :
2056
+ # Priorities:
2057
+ # - Command line --in-pod
2058
+ # - docker-compose.yml x-podman.in_pod
2059
+ # - Default value of true
2060
+ in_pod_arg = self .global_args .in_pod or self .x_podman .get (
2061
+ PodmanCompose .XPodmanSettingKey .IN_POD , True
2062
+ )
2063
+
2064
+ in_pod_arg_parsed = try_parse_bool (in_pod_arg )
2065
+ if in_pod_arg_parsed is True :
2066
+ return f"pod_{ self .project_name } "
2067
+ if in_pod_arg_parsed is False :
2068
+ return None
2069
+
2070
+ assert isinstance (in_pod_arg , str ) and in_pod_arg
2071
+ return in_pod_arg
2072
2072
2073
2073
def resolve_pod_args (self ) -> list [str ]:
2074
2074
# Priorities:
@@ -2082,14 +2082,15 @@ def resolve_pod_args(self) -> list[str]:
2082
2082
)
2083
2083
2084
2084
def join_name_parts (self , * parts : str ) -> str :
2085
- if self .x_podman .get (PodmanCompose .XPodmanSettingKey .NAME_SEPARATOR_COMPAT , False ):
2085
+ setting = self .x_podman .get (PodmanCompose .XPodmanSettingKey .NAME_SEPARATOR_COMPAT , False )
2086
+ if try_parse_bool (setting ):
2086
2087
sep = "-"
2087
2088
else :
2088
2089
sep = "_"
2089
-
2090
2090
return sep .join (parts )
2091
2091
2092
2092
def format_name (self , * parts : str ) -> str :
2093
+ assert self .project_name is not None
2093
2094
return self .join_name_parts (self .project_name , * parts )
2094
2095
2095
2096
def _parse_x_podman_settings (self , compose : dict [str , Any ], environ : dict [str , str ]) -> None :
@@ -2275,6 +2276,8 @@ def _parse_compose_file(self) -> None:
2275
2276
2276
2277
self ._parse_x_podman_settings (compose , self .environ )
2277
2278
2279
+ pod_name = self .resolve_pod_name ()
2280
+
2278
2281
services : dict | None = compose .get ("services" )
2279
2282
if services is None :
2280
2283
services = {}
@@ -2370,6 +2373,7 @@ def _parse_compose_file(self) -> None:
2370
2373
container_names_by_service [service_name ].append (name )
2371
2374
# log(service_name,service_desc)
2372
2375
cnt = {
2376
+ "pod" : pod_name ,
2373
2377
"name" : name ,
2374
2378
"num" : num ,
2375
2379
"service_name" : service_name ,
@@ -2409,12 +2413,9 @@ def _parse_compose_file(self) -> None:
2409
2413
given_containers .sort (key = lambda c : len (c .get ("_deps" , [])))
2410
2414
# log("sorted:", [c["name"] for c in given_containers])
2411
2415
2412
- args .in_pod = self .resolve_in_pod ()
2413
- args .pod_arg_list = self .resolve_pod_args ()
2414
- pods , containers = transform (args , project_name , given_containers )
2415
- self .pods = pods
2416
- self .containers = containers
2417
- self .container_by_name = {c ["name" ]: c for c in containers }
2416
+ self .pods = [{"name" : pod_name }] if pod_name else []
2417
+ self .containers = given_containers
2418
+ self .container_by_name = {c ["name" ]: c for c in given_containers }
2418
2419
2419
2420
def _resolve_profiles (
2420
2421
self , defined_services : dict [str , Any ], requested_profiles : set [str ] | None = None
@@ -2941,17 +2942,16 @@ async def pod_exists(compose: PodmanCompose, name: str) -> bool:
2941
2942
return exit_code == 0
2942
2943
2943
2944
2944
- async def create_pods (compose : PodmanCompose , args : argparse . Namespace ) -> None :
2945
+ async def create_pods (compose : PodmanCompose ) -> None :
2945
2946
for pod in compose .pods :
2946
2947
if await pod_exists (compose , pod ["name" ]):
2947
2948
continue
2948
2949
2949
2950
podman_args = [
2950
2951
"create" ,
2951
2952
"--name=" + pod ["name" ],
2952
- ] + args .pod_arg_list
2953
- # if compose.podman_version and not strverscmp_lt(compose.podman_version, "3.4.0"):
2954
- # podman_args.append("--infra-name={}_infra".format(pod["name"]))
2953
+ ] + compose .resolve_pod_args ()
2954
+
2955
2955
ports = pod .get ("ports" , [])
2956
2956
if isinstance (ports , str ):
2957
2957
ports = [ports ]
@@ -3084,7 +3084,7 @@ async def compose_up(compose: PodmanCompose, args: argparse.Namespace) -> int |
3084
3084
log .info ("recreating: done\n \n " )
3085
3085
# args.no_recreate disables check for changes (which is not implemented)
3086
3086
3087
- await create_pods (compose , args )
3087
+ await create_pods (compose )
3088
3088
exit_code = 0
3089
3089
for cnt in compose .containers :
3090
3090
if cnt ["_service" ] in excluded :
@@ -3328,7 +3328,7 @@ async def compose_ps(compose: PodmanCompose, args: argparse.Namespace) -> None:
3328
3328
"create a container similar to a service to run a one-off command" ,
3329
3329
)
3330
3330
async def compose_run (compose : PodmanCompose , args : argparse .Namespace ) -> None :
3331
- await create_pods (compose , args )
3331
+ await create_pods (compose )
3332
3332
compose .assert_services (args .service )
3333
3333
container_names = compose .container_names_by_service [args .service ]
3334
3334
container_name = container_names [0 ]
@@ -3373,7 +3373,7 @@ def compose_run_update_container_from_args(
3373
3373
compose : PodmanCompose , cnt : dict , args : argparse .Namespace
3374
3374
) -> None :
3375
3375
# adjust one-off container options
3376
- name0 = compose .format_name (args .service , str ( random .randrange (0 , 65536 )) )
3376
+ name0 = compose .format_name (args .service , f'tmp { random .randrange (0 , 65536 )} ' )
3377
3377
cnt ["name" ] = args .name or name0
3378
3378
if args .entrypoint :
3379
3379
cnt ["entrypoint" ] = args .entrypoint
0 commit comments