@@ -376,34 +376,22 @@ def default_network_name_for_project(compose: PodmanCompose, net: str, is_ext: A
376376 return compose .join_name_parts (compose .project_name .replace ('-' , '' ), net )
377377 return compose .format_name (net )
378378
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
386379
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
407395
408396
409397async 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:
20642052 if isinstance (retcode , int ):
20652053 sys .exit (retcode )
20662054
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
20722072
20732073 def resolve_pod_args (self ) -> list [str ]:
20742074 # Priorities:
@@ -2082,14 +2082,15 @@ def resolve_pod_args(self) -> list[str]:
20822082 )
20832083
20842084 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 ):
20862087 sep = "-"
20872088 else :
20882089 sep = "_"
2089-
20902090 return sep .join (parts )
20912091
20922092 def format_name (self , * parts : str ) -> str :
2093+ assert self .project_name is not None
20932094 return self .join_name_parts (self .project_name , * parts )
20942095
20952096 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:
22752276
22762277 self ._parse_x_podman_settings (compose , self .environ )
22772278
2279+ pod_name = self .resolve_pod_name ()
2280+
22782281 services : dict | None = compose .get ("services" )
22792282 if services is None :
22802283 services = {}
@@ -2370,6 +2373,7 @@ def _parse_compose_file(self) -> None:
23702373 container_names_by_service [service_name ].append (name )
23712374 # log(service_name,service_desc)
23722375 cnt = {
2376+ "pod" : pod_name ,
23732377 "name" : name ,
23742378 "num" : num ,
23752379 "service_name" : service_name ,
@@ -2409,12 +2413,9 @@ def _parse_compose_file(self) -> None:
24092413 given_containers .sort (key = lambda c : len (c .get ("_deps" , [])))
24102414 # log("sorted:", [c["name"] for c in given_containers])
24112415
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 }
24182419
24192420 def _resolve_profiles (
24202421 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:
29412942 return exit_code == 0
29422943
29432944
2944- async def create_pods (compose : PodmanCompose , args : argparse . Namespace ) -> None :
2945+ async def create_pods (compose : PodmanCompose ) -> None :
29452946 for pod in compose .pods :
29462947 if await pod_exists (compose , pod ["name" ]):
29472948 continue
29482949
29492950 podman_args = [
29502951 "create" ,
29512952 "--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+
29552955 ports = pod .get ("ports" , [])
29562956 if isinstance (ports , str ):
29572957 ports = [ports ]
@@ -3084,7 +3084,7 @@ async def compose_up(compose: PodmanCompose, args: argparse.Namespace) -> int |
30843084 log .info ("recreating: done\n \n " )
30853085 # args.no_recreate disables check for changes (which is not implemented)
30863086
3087- await create_pods (compose , args )
3087+ await create_pods (compose )
30883088 exit_code = 0
30893089 for cnt in compose .containers :
30903090 if cnt ["_service" ] in excluded :
@@ -3328,7 +3328,7 @@ async def compose_ps(compose: PodmanCompose, args: argparse.Namespace) -> None:
33283328 "create a container similar to a service to run a one-off command" ,
33293329)
33303330async def compose_run (compose : PodmanCompose , args : argparse .Namespace ) -> None :
3331- await create_pods (compose , args )
3331+ await create_pods (compose )
33323332 compose .assert_services (args .service )
33333333 container_names = compose .container_names_by_service [args .service ]
33343334 container_name = container_names [0 ]
@@ -3373,7 +3373,7 @@ def compose_run_update_container_from_args(
33733373 compose : PodmanCompose , cnt : dict , args : argparse .Namespace
33743374) -> None :
33753375 # 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 )} ' )
33773377 cnt ["name" ] = args .name or name0
33783378 if args .entrypoint :
33793379 cnt ["entrypoint" ] = args .entrypoint
0 commit comments