Files
warewulf/internal/app/wwctl/container/exec/root.go
Christian Goll dc263425e2 Added cow option to bind
The option cow can now be set for files which are then
mounted during exec, but copied into the image and removed
if not modified.

Signed-off-by: Christian Goll <cgoll@suse.com>
2024-09-09 11:09:04 +02:00

48 lines
1.8 KiB
Go

package exec
import (
"github.com/spf13/cobra"
"github.com/warewulf/warewulf/internal/app/wwctl/container/exec/child"
"github.com/warewulf/warewulf/internal/pkg/container"
)
var (
baseCmd = &cobra.Command{
DisableFlagsInUseLine: true,
Use: "exec [OPTIONS] CONTAINER COMMAND",
Short: "Run a command inside of a Warewulf container",
Long: "Run a COMMAND inside of a warewulf CONTAINER.\n" +
"This is commonly used with an interactive shell such as /bin/bash\n" +
"to run a virtual environment within the container.",
RunE: CobraRunE,
Args: cobra.MinimumNArgs(2),
ValidArgsFunction: func(cmd *cobra.Command, args []string, toComplete string) ([]string, cobra.ShellCompDirective) {
if len(args) != 0 {
return nil, cobra.ShellCompDirectiveNoFileComp
}
list, _ := container.ListSources()
return list, cobra.ShellCompDirectiveNoFileComp
},
FParseErrWhitelist: cobra.FParseErrWhitelist{UnknownFlags: true},
}
SyncUser bool
binds []string
nodeName string
)
func init() {
baseCmd.AddCommand(child.GetCommand())
baseCmd.PersistentFlags().StringArrayVarP(&binds, "bind", "b", []string{}, `Bind a local path which must exist into the container. Syntax is
source[:destination[:{ro|cow}]] If destination is not set,
it will the same path as source.The additional parameter is
ro for read only and cow, which means the file is copied into
the container and removed if not modified.`)
baseCmd.PersistentFlags().BoolVar(&SyncUser, "syncuser", false, "Synchronize UIDs/GIDs from host to container")
baseCmd.PersistentFlags().StringVarP(&nodeName, "node", "n", "", "Create a read only view of the container for the given node")
}
// GetRootCommand returns the root cobra.Command for the application.
func GetCommand() *cobra.Command {
return baseCmd
}