@@ -22,14 +22,53 @@ type CommandRunner interface {
2222type ContainerCommandRunner struct {
2323 logger * logrus.Entry
2424 containerTool ContainerTool
25+ config * RunnerConfig
26+ }
27+
28+ type RunnerConfig struct {
29+ SkipTLS bool
30+ }
31+
32+ type RunnerOption func (config * RunnerConfig )
33+
34+ func SkipTLS (skip bool ) RunnerOption {
35+ return func (config * RunnerConfig ) {
36+ config .SkipTLS = skip
37+ }
38+ }
39+
40+ func (r * RunnerConfig ) apply (options []RunnerOption ) {
41+ for _ , option := range options {
42+ option (r )
43+ }
44+ }
45+
46+ func (r * ContainerCommandRunner ) argsForCmd (cmd string , args ... string ) []string {
47+ cmdArgs := []string {cmd }
48+ switch r .containerTool {
49+ case PodmanTool :
50+ switch cmd {
51+ case "pull" , "push" , "login" , "search" :
52+ // --tls-verify is a valid flag for these podman subcommands
53+ if r .config .SkipTLS {
54+ cmdArgs = append (cmdArgs , "--tls-verify=false" )
55+ }
56+ }
57+ default :
58+ }
59+ cmdArgs = append (cmdArgs , args ... )
60+ return cmdArgs
2561}
2662
2763// NewCommandRunner takes the containerTool as an input string and returns a
2864// CommandRunner to run commands with that cli tool
29- func NewCommandRunner (containerTool ContainerTool , logger * logrus.Entry ) * ContainerCommandRunner {
65+ func NewCommandRunner (containerTool ContainerTool , logger * logrus.Entry , opts ... RunnerOption ) * ContainerCommandRunner {
66+ var config RunnerConfig
67+ config .apply (opts )
3068 r := & ContainerCommandRunner {
3169 logger : logger ,
3270 containerTool : containerTool ,
71+ config : & config ,
3372 }
3473 return r
3574}
@@ -42,7 +81,7 @@ func (r *ContainerCommandRunner) GetToolName() string {
4281// Pull takes a container image path hosted on a container registry and runs the
4382// pull command to download it onto the local environment
4483func (r * ContainerCommandRunner ) Pull (image string ) error {
45- args := [] string { "pull" , image }
84+ args := r . argsForCmd ( "pull" , image )
4685
4786 command := exec .Command (r .containerTool .String (), args ... )
4887
@@ -84,7 +123,7 @@ func (r *ContainerCommandRunner) Build(dockerfile, tag string) error {
84123
85124// Unpack copies a directory from a local container image to a directory in the local filesystem.
86125func (r * ContainerCommandRunner ) Unpack (image , src , dst string ) error {
87- args := [] string { "create" , image , "" }
126+ args := r . argsForCmd ( "create" , image , "" )
88127
89128 command := exec .Command (r .containerTool .String (), args ... )
90129
@@ -98,7 +137,7 @@ func (r *ContainerCommandRunner) Unpack(image, src, dst string) error {
98137 }
99138
100139 id := strings .TrimSuffix (string (out ), "\n " )
101- args = [] string { "cp" , id + ":" + src , dst }
140+ args = r . argsForCmd ( "cp" , id + ":" + src , dst )
102141 command = exec .Command (r .containerTool .String (), args ... )
103142
104143 r .logger .Infof ("running %s cp" , r .containerTool )
@@ -110,7 +149,7 @@ func (r *ContainerCommandRunner) Unpack(image, src, dst string) error {
110149 return fmt .Errorf ("error copying container directory %s: %v" , string (out ), err )
111150 }
112151
113- args = [] string { "rm" , id }
152+ args = r . argsForCmd ( "rm" , id )
114153 command = exec .Command (r .containerTool .String (), args ... )
115154
116155 r .logger .Infof ("running %s rm" , r .containerTool )
@@ -128,7 +167,7 @@ func (r *ContainerCommandRunner) Unpack(image, src, dst string) error {
128167// Inspect runs the 'inspect' command to get image metadata of a local container
129168// image and returns a byte array of the command's output
130169func (r * ContainerCommandRunner ) Inspect (image string ) ([]byte , error ) {
131- args := [] string { "inspect" , image }
170+ args := r . argsForCmd ( "inspect" , image )
132171
133172 command := exec .Command (r .containerTool .String (), args ... )
134173
0 commit comments