1515
1616
1717class ImagePuller (ABC ):
18- def __init__ (self , req : str , save_directory : str ) -> None :
18+ def __init__ (self , req : str , save_directory : str , cmd : str ) -> None :
1919 """Create an ImagePuller."""
2020 self .req = req
2121 self .save_directory = save_directory
22+ self .cmd = cmd
2223
2324 @abstractmethod
2425 def get_image_name (self ) -> str :
@@ -45,7 +46,11 @@ class DockerImagePuller(ImagePuller):
4546
4647 def get_image_name (self ) -> str :
4748 """Get the name of the tarball."""
48- return "" .join (self .req .split ("/" )) + ".tar"
49+ name = "" .join (self .req .split ("/" )) + ".tar"
50+ # Replace colons with underscores in the name.
51+ # See https://github.com/containers/podman/issues/489
52+ name = name .replace (":" , "_" )
53+ return name
4954
5055 def generate_udocker_loading_command (self ) -> str :
5156 """Generate the udocker loading command."""
@@ -54,10 +59,10 @@ def generate_udocker_loading_command(self) -> str:
5459 def save_docker_image (self ) -> None :
5560 """Download and save the software container image to disk as a docker tarball."""
5661 _LOGGER .info (f"Pulling { self .req } with Docker..." )
57- cmd_pull = ["docker" , "pull" , self .req ]
62+ cmd_pull = [self . cmd , "pull" , self .req ]
5863 ImagePuller ._run_command_pull (cmd_pull )
5964 cmd_save = [
60- "docker" ,
65+ self . cmd ,
6166 "save" ,
6267 "-o" ,
6368 os .path .join (self .save_directory , self .get_image_name ()),
@@ -76,9 +81,9 @@ class SingularityImagePuller(ImagePuller):
7681 CHARS_TO_REPLACE = ["/" ]
7782 NEW_CHAR = "_"
7883
79- def __init__ (self , req : str , save_directory : str ) -> None :
84+ def __init__ (self , req : str , save_directory : str , cmd : str ) -> None :
8085 """Create a Singularity-based software container image downloader."""
81- super ().__init__ (req , save_directory )
86+ super ().__init__ (req , save_directory , cmd )
8287
8388 def get_image_name (self ) -> str :
8489 """Determine the file name appropriate to the installed version of Singularity."""
@@ -99,7 +104,7 @@ def save_docker_image(self) -> None:
99104 """Pull down the Docker container image in the Singularity image format."""
100105 _LOGGER .info (f"Pulling { self .req } with Singularity..." )
101106 cmd_pull = [
102- "singularity" ,
107+ self . cmd ,
103108 "pull" ,
104109 "--name" ,
105110 os .path .join (self .save_directory , self .get_image_name ()),
0 commit comments