Skip to content

Commit

Permalink
Add variable for global flags to runlabel
Browse files Browse the repository at this point in the history
use $GLOBAL_OPTS padd global flags to the runlabel command.

Signed-off-by: Qi Wang <qiwan@redhat.com>
  • Loading branch information
QiWang19 committed Apr 12, 2019
1 parent 745993b commit 5637c15
Show file tree
Hide file tree
Showing 4 changed files with 73 additions and 5 deletions.
66 changes: 65 additions & 1 deletion cmd/podman/runlabel.go
Expand Up @@ -144,7 +144,8 @@ func runlabelCmd(c *cliconfig.RunlabelValues) error {
return errors.Errorf("%s does not have a label of %s", runlabelImage, label)
}

cmd, env, err := shared.GenerateRunlabelCommand(runLabel, imageName, c.Name, opts, extraArgs)
globalOpts := getGlobalOpts(c)
cmd, env, err := shared.GenerateRunlabelCommand(runLabel, imageName, c.Name, opts, extraArgs, globalOpts)
if err != nil {
return err
}
Expand Down Expand Up @@ -179,3 +180,66 @@ func runlabelCmd(c *cliconfig.RunlabelValues) error {

return utils.ExecCmdWithStdStreams(stdIn, stdOut, stdErr, env, cmd[0], cmd[1:]...)
}

func getGlobalOpts(c *cliconfig.RunlabelValues) string {
var optsCommand []string
if c.Flag("cgroup-manager").Changed {
optsCommand = append(optsCommand, fmt.Sprintf("--cgroup-manager %s", c.GlobalFlags.CGroupManager))
}
if c.Flag("cni-config-dir").Changed {
optsCommand = append(optsCommand, fmt.Sprintf("--cni-config-dir %s", c.GlobalFlags.CniConfigDir))
}
if c.Flag("conmon").Changed {
optsCommand = append(optsCommand, fmt.Sprintf("--conmon %s", c.GlobalFlags.ConmonPath))
}
if c.Flag("default-mounts-file").Changed {
optsCommand = append(optsCommand, fmt.Sprintf("--default-mounts-file %s", c.GlobalFlags.DefaultMountsFile))
}
if c.Flag("hooks-dir").Changed {
for _, dir := range c.GlobalFlags.HooksDir {
optsCommand = append(optsCommand, fmt.Sprintf("--hooks-dir %s", dir))
}
}
if c.Flag("namespace").Changed {
optsCommand = append(optsCommand, fmt.Sprintf("--namespace %s", c.GlobalFlags.Namespace))
}
if c.Flag("root").Changed {
optsCommand = append(optsCommand, fmt.Sprintf("--root %s", c.GlobalFlags.Root))
}
if c.Flag("runroot").Changed {
optsCommand = append(optsCommand, fmt.Sprintf("--runroot %s", c.GlobalFlags.Runroot))
}
if c.Flag("runtime").Changed {
optsCommand = append(optsCommand, fmt.Sprintf("--runtime %s", c.GlobalFlags.Runtime))
}
if c.Flag("storage-driver").Changed {
optsCommand = append(optsCommand, fmt.Sprintf("--storage-driver %s", c.GlobalFlags.StorageDriver))
}
if c.Flag("storage-opt").Changed {
for _, opt := range c.GlobalFlags.StorageOpts {
optsCommand = append(optsCommand, fmt.Sprintf("--storage-opt %s", opt))
}
}
if c.Flag("syslog").Changed {
optsCommand = append(optsCommand, fmt.Sprintf("--syslog %t", c.GlobalFlags.Syslog))
}
if c.Flag("trace").Changed {
optsCommand = append(optsCommand, fmt.Sprintf("--trace %t", c.GlobalFlags.Trace))
}
if c.Flag("network-cmd-path").Changed {
optsCommand = append(optsCommand, fmt.Sprintf("--network-cmd-path %s", c.GlobalFlags.NetworkCmdPath))
}
if c.Flag("config").Changed {
optsCommand = append(optsCommand, fmt.Sprintf("--config %s", c.GlobalFlags.Config))
}
if c.Flag("cpu-profile").Changed {
optsCommand = append(optsCommand, fmt.Sprintf("--cpu-profile %s", c.GlobalFlags.CpuProfile))
}
if c.Flag("log-level").Changed {
optsCommand = append(optsCommand, fmt.Sprintf("--log-level %s", c.GlobalFlags.LogLevel))
}
if c.Flag("tmpdir").Changed {
optsCommand = append(optsCommand, fmt.Sprintf("--tmpdir %s", c.GlobalFlags.TmpDir))
}
return strings.Join(optsCommand, " ")
}
4 changes: 2 additions & 2 deletions cmd/podman/shared/container.go
Expand Up @@ -881,7 +881,7 @@ func GetRunlabel(label string, runlabelImage string, ctx context.Context, runtim
}

// GenerateRunlabelCommand generates the command that will eventually be execucted by podman
func GenerateRunlabelCommand(runLabel, imageName, name string, opts map[string]string, extraArgs []string) ([]string, []string, error) {
func GenerateRunlabelCommand(runLabel, imageName, name string, opts map[string]string, extraArgs []string, globalOpts string) ([]string, []string, error) {
// If no name is provided, we use the image's basename instead
if name == "" {
baseName, err := image.GetImageBaseName(imageName)
Expand All @@ -894,7 +894,7 @@ func GenerateRunlabelCommand(runLabel, imageName, name string, opts map[string]s
if len(extraArgs) > 0 {
runLabel = fmt.Sprintf("%s %s", runLabel, strings.Join(extraArgs, " "))
}
cmd, err := GenerateCommand(runLabel, imageName, name)
cmd, err := GenerateCommand(runLabel, imageName, name, globalOpts)
if err != nil {
return nil, nil, errors.Wrapf(err, "unable to generate command")
}
Expand Down
6 changes: 5 additions & 1 deletion cmd/podman/shared/funcs.go
Expand Up @@ -41,7 +41,7 @@ func substituteCommand(cmd string) (string, error) {
}

// GenerateCommand takes a label (string) and converts it to an executable command
func GenerateCommand(command, imageName, name string) ([]string, error) {
func GenerateCommand(command, imageName, name, globalOpts string) ([]string, error) {
var (
newCommand []string
)
Expand All @@ -60,6 +60,8 @@ func GenerateCommand(command, imageName, name string) ([]string, error) {
}
newCommand = append(newCommand, prog)

fmt.Println(strings.Join(cmd, ","))

for _, arg := range cmd[1:] {
var newArg string
switch arg {
Expand All @@ -79,6 +81,8 @@ func GenerateCommand(command, imageName, name string) ([]string, error) {
newArg = fmt.Sprintf("NAME=%s", name)
case "$NAME":
newArg = name
case "$GLOBAL_OPTS":
newArg = globalOpts
default:
newArg = arg
}
Expand Down
2 changes: 1 addition & 1 deletion pkg/varlinkapi/images.go
Expand Up @@ -727,7 +727,7 @@ func (i *LibpodAPI) ContainerRunlabel(call iopodman.VarlinkCall, input iopodman.
return call.ReplyErrorOccurred(fmt.Sprintf("%s does not contain the label %s", input.Image, input.Label))
}

cmd, env, err := shared.GenerateRunlabelCommand(runLabel, imageName, input.Name, input.Opts, input.ExtraArgs)
cmd, env, err := shared.GenerateRunlabelCommand(runLabel, imageName, input.Name, input.Opts, input.ExtraArgs, "")
if err != nil {
return call.ReplyErrorOccurred(err.Error())
}
Expand Down

0 comments on commit 5637c15

Please sign in to comment.