@@ -680,6 +680,51 @@ def norm_ports(ports_in):
680680 return ports_out
681681
682682
683+ def get_network_create_args (net_desc , proj_name , net_name ):
684+ args = [
685+ "create" ,
686+ "--label" ,
687+ f"io.podman.compose.project={ proj_name } " ,
688+ "--label" ,
689+ f"com.docker.compose.project={ proj_name } " ,
690+ ]
691+ # TODO: add more options here, like dns, ipv6, etc.
692+ labels = net_desc .get ("labels" , None ) or []
693+ for item in norm_as_list (labels ):
694+ args .extend (["--label" , item ])
695+ if net_desc .get ("internal" , None ):
696+ args .append ("--internal" )
697+ driver = net_desc .get ("driver" , None )
698+ if driver :
699+ args .extend (("--driver" , driver ))
700+ driver_opts = net_desc .get ("driver_opts" , None ) or {}
701+ for key , value in driver_opts .items ():
702+ args .extend (("--opt" , f"{ key } ={ value } " ))
703+ ipam = net_desc .get ("ipam" , None ) or {}
704+ ipam_driver = ipam .get ("driver" , None )
705+ if ipam_driver :
706+ args .extend (("--ipam-driver" , ipam_driver ))
707+ ipam_config_ls = ipam .get ("config" , None ) or []
708+ if net_desc .get ("enable_ipv6" , None ):
709+ args .append ("--ipv6" )
710+
711+ if is_dict (ipam_config_ls ):
712+ ipam_config_ls = [ipam_config_ls ]
713+ for ipam_config in ipam_config_ls :
714+ subnet = ipam_config .get ("subnet" , None )
715+ ip_range = ipam_config .get ("ip_range" , None )
716+ gateway = ipam_config .get ("gateway" , None )
717+ if subnet :
718+ args .extend (("--subnet" , subnet ))
719+ if ip_range :
720+ args .extend (("--ip-range" , ip_range ))
721+ if gateway :
722+ args .extend (("--gateway" , gateway ))
723+ args .append (net_name )
724+
725+ return args
726+
727+
683728async def assert_cnt_nets (compose , cnt ):
684729 """
685730 create missing networks
@@ -705,43 +750,7 @@ async def assert_cnt_nets(compose, cnt):
705750 except subprocess .CalledProcessError as e :
706751 if is_ext :
707752 raise RuntimeError (f"External network [{ net_name } ] does not exists" ) from e
708- args = [
709- "create" ,
710- "--label" ,
711- f"io.podman.compose.project={ proj_name } " ,
712- "--label" ,
713- f"com.docker.compose.project={ proj_name } " ,
714- ]
715- # TODO: add more options here, like dns, ipv6, etc.
716- labels = net_desc .get ("labels" , None ) or []
717- for item in norm_as_list (labels ):
718- args .extend (["--label" , item ])
719- if net_desc .get ("internal" , None ):
720- args .append ("--internal" )
721- driver = net_desc .get ("driver" , None )
722- if driver :
723- args .extend (("--driver" , driver ))
724- driver_opts = net_desc .get ("driver_opts" , None ) or {}
725- for key , value in driver_opts .items ():
726- args .extend (("--opt" , f"{ key } ={ value } " ))
727- ipam = net_desc .get ("ipam" , None ) or {}
728- ipam_driver = ipam .get ("driver" , None )
729- if ipam_driver :
730- args .extend (("--ipam-driver" , ipam_driver ))
731- ipam_config_ls = ipam .get ("config" , None ) or []
732- if is_dict (ipam_config_ls ):
733- ipam_config_ls = [ipam_config_ls ]
734- for ipam_config in ipam_config_ls :
735- subnet = ipam_config .get ("subnet" , None )
736- ip_range = ipam_config .get ("ip_range" , None )
737- gateway = ipam_config .get ("gateway" , None )
738- if subnet :
739- args .extend (("--subnet" , subnet ))
740- if ip_range :
741- args .extend (("--ip-range" , ip_range ))
742- if gateway :
743- args .extend (("--gateway" , gateway ))
744- args .append (net_name )
753+ args = get_network_create_args (net_desc , proj_name , net_name )
745754 await compose .podman .output ([], "network" , args )
746755 await compose .podman .output ([], "network" , ["exists" , net_name ])
747756
0 commit comments