15
15
16
16
17
17
class ImagePuller (ABC ):
18
- def __init__ (self , req : str , save_directory : str ) -> None :
18
+ def __init__ (self , req : str , save_directory : str , cmd : str ) -> None :
19
19
"""Create an ImagePuller."""
20
20
self .req = req
21
21
self .save_directory = save_directory
22
+ self .cmd = cmd
22
23
23
24
@abstractmethod
24
25
def get_image_name (self ) -> str :
@@ -45,7 +46,11 @@ class DockerImagePuller(ImagePuller):
45
46
46
47
def get_image_name (self ) -> str :
47
48
"""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
49
54
50
55
def generate_udocker_loading_command (self ) -> str :
51
56
"""Generate the udocker loading command."""
@@ -54,10 +59,10 @@ def generate_udocker_loading_command(self) -> str:
54
59
def save_docker_image (self ) -> None :
55
60
"""Download and save the software container image to disk as a docker tarball."""
56
61
_LOGGER .info (f"Pulling { self .req } with Docker..." )
57
- cmd_pull = ["docker" , "pull" , self .req ]
62
+ cmd_pull = [self . cmd , "pull" , self .req ]
58
63
ImagePuller ._run_command_pull (cmd_pull )
59
64
cmd_save = [
60
- "docker" ,
65
+ self . cmd ,
61
66
"save" ,
62
67
"-o" ,
63
68
os .path .join (self .save_directory , self .get_image_name ()),
@@ -76,9 +81,9 @@ class SingularityImagePuller(ImagePuller):
76
81
CHARS_TO_REPLACE = ["/" ]
77
82
NEW_CHAR = "_"
78
83
79
- def __init__ (self , req : str , save_directory : str ) -> None :
84
+ def __init__ (self , req : str , save_directory : str , cmd : str ) -> None :
80
85
"""Create a Singularity-based software container image downloader."""
81
- super ().__init__ (req , save_directory )
86
+ super ().__init__ (req , save_directory , cmd )
82
87
83
88
def get_image_name (self ) -> str :
84
89
"""Determine the file name appropriate to the installed version of Singularity."""
@@ -99,7 +104,7 @@ def save_docker_image(self) -> None:
99
104
"""Pull down the Docker container image in the Singularity image format."""
100
105
_LOGGER .info (f"Pulling { self .req } with Singularity..." )
101
106
cmd_pull = [
102
- "singularity" ,
107
+ self . cmd ,
103
108
"pull" ,
104
109
"--name" ,
105
110
os .path .join (self .save_directory , self .get_image_name ()),
0 commit comments