spiegel_podman/cmd/podman/shared/funcs.go
baude 4f825f2e07 Add container runlabel command
Execute the command as described by a container image.  The value of the label is processed
into a command by:

1. Ensuring the first argument of the command is podman.
2. Substituting any variables with those defined by the environment or otherwise.

If no label exists in the container image, nothing is done.

podman container runlabel LABEL IMAGE extra_args
Signed-off-by: baude <bbaude@redhat.com>
2018-09-28 14:14:13 -05:00

57 lines
1.4 KiB
Go

package shared
import (
"fmt"
"os"
"strings"
)
// GenerateCommand takes a label (string) and converts it to an executable command
func GenerateCommand(command, imageName, name string) []string {
var (
newCommand []string
)
if name == "" {
name = imageName
}
cmd := strings.Split(command, " ")
// Replace the first position of cmd with podman whether
// it is docker, /usr/bin/docker, or podman
newCommand = append(newCommand, "podman")
for _, arg := range cmd[1:] {
var newArg string
switch arg {
case "IMAGE":
newArg = imageName
case "IMAGE=IMAGE":
newArg = fmt.Sprintf("IMAGE=%s", imageName)
case "NAME":
newArg = name
case "NAME=NAME":
newArg = fmt.Sprintf("NAME=%s", name)
default:
newArg = arg
}
newCommand = append(newCommand, newArg)
}
return newCommand
}
// GenerateRunEnvironment merges the current environment variables with optional
// environment variables provided by the user
func GenerateRunEnvironment(name, imageName string, opts map[string]string) []string {
newEnv := os.Environ()
newEnv = append(newEnv, fmt.Sprintf("NAME=%s", name))
newEnv = append(newEnv, fmt.Sprintf("IMAGE=%s", imageName))
if opts["opt1"] != "" {
newEnv = append(newEnv, fmt.Sprintf("OPT1=%s", opts["opt1"]))
}
if opts["opt2"] != "" {
newEnv = append(newEnv, fmt.Sprintf("OPT2=%s", opts["opt2"]))
}
if opts["opt3"] != "" {
newEnv = append(newEnv, fmt.Sprintf("OPT3=%s", opts["opt3"]))
}
return newEnv
}