Compare commits
4 Commits
cdfa480479
...
a7ecc354a9
Author | SHA1 | Date | |
---|---|---|---|
a7ecc354a9 | |||
cba1abc7f4 | |||
3f0c28014c | |||
c3c97c3828 |
@ -19,6 +19,7 @@ type ContainerCmd struct {
|
||||
Filter string `help:"filter by name"`
|
||||
|
||||
List ContainerListCmd `cmd:"" help:"list containers"`
|
||||
Update ContainerUpdateCmd `cmd:"" help:"update containers"`
|
||||
Save ContainerSaveCmd `cmd:"" help:"save containers"`
|
||||
Cleanup ContainerCleanupCmd `cmd:"" help:"cleanup containers"`
|
||||
}
|
||||
@ -47,6 +48,39 @@ func (cmd ContainerListCmd) Run(containerCmd *ContainerCmd) (err error) {
|
||||
return
|
||||
}
|
||||
|
||||
type ContainerUpdateCmd struct{}
|
||||
|
||||
func (cmd ContainerUpdateCmd) Run(g *Globals, containerCmd *ContainerCmd) (err error) {
|
||||
images, err := container.Images()
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
|
||||
container.UseCache = false
|
||||
container.UsePrebuilt = false
|
||||
|
||||
// TODO move from all commands to main command line handler
|
||||
container.Commands = g.Config.Docker.Commands
|
||||
container.Registry = g.Config.Docker.Registry
|
||||
container.Timeout = g.Config.Docker.Timeout.Duration
|
||||
|
||||
for _, img := range images {
|
||||
if containerCmd.Filter != "" {
|
||||
if !strings.Contains(img.Name, containerCmd.Filter) {
|
||||
log.Debug().Msgf("skip %s", img.Name)
|
||||
continue
|
||||
}
|
||||
}
|
||||
|
||||
_, err = img.Distro.Packages()
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
}
|
||||
|
||||
return
|
||||
}
|
||||
|
||||
type ContainerSaveCmd struct {
|
||||
OutDir string `help:"directory to save containers" default:"./" type:"existingdir"`
|
||||
}
|
||||
|
@ -35,9 +35,12 @@ type OutOfTree struct {
|
||||
Timeout artifact.Duration
|
||||
Registry string
|
||||
|
||||
// Commands that will be executed before
|
||||
// the base layer of Dockerfile
|
||||
Commands []distro.Command
|
||||
// Commands that are executed before (prepend) and after (append) the
|
||||
// base layer of the Dockerfile.
|
||||
Commands struct {
|
||||
Prepend []distro.Command
|
||||
Append []distro.Command
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -32,7 +32,12 @@ var Registry = ""
|
||||
|
||||
var Timeout time.Duration
|
||||
|
||||
var Commands []distro.Command
|
||||
// Commands that are executed before (prepend) and after (append) the
|
||||
// base layer of the Dockerfile.
|
||||
var Commands struct {
|
||||
Prepend []distro.Command
|
||||
Append []distro.Command
|
||||
}
|
||||
|
||||
var UseCache = true
|
||||
|
||||
@ -97,13 +102,23 @@ func Load(localpath string, name string) (err error) {
|
||||
return
|
||||
}
|
||||
|
||||
cmd = exec.Command(Runtime, "tag", "localhost/"+name, name)
|
||||
log.Debug().Msgf("%v", cmd)
|
||||
if strings.Contains(Runtime, "docker") {
|
||||
var err2 error
|
||||
cmd = exec.Command(Runtime, "tag", "localhost/"+name, name)
|
||||
log.Debug().Msgf("%v", cmd)
|
||||
|
||||
raw, err = cmd.CombinedOutput()
|
||||
if err != nil {
|
||||
log.Debug().Err(err).Msg(string(raw))
|
||||
return
|
||||
raw, err2 = cmd.CombinedOutput()
|
||||
if err2 != nil {
|
||||
log.Debug().Err(err2).Msg(string(raw))
|
||||
}
|
||||
|
||||
cmd = exec.Command(Runtime, "rmi", "localhost/"+name)
|
||||
log.Debug().Msgf("%v", cmd)
|
||||
|
||||
raw, err2 = cmd.CombinedOutput()
|
||||
if err2 != nil {
|
||||
log.Debug().Err(err2).Msg(string(raw))
|
||||
}
|
||||
}
|
||||
|
||||
return
|
||||
@ -286,9 +301,15 @@ func (c Container) Build(image string, envs, runs []string) (err error) {
|
||||
}
|
||||
cf += image + "\n"
|
||||
|
||||
for _, c := range Commands {
|
||||
// TODO check for distro type
|
||||
cf += "RUN " + c.Command + "\n"
|
||||
for _, cmd := range Commands.Prepend {
|
||||
if cmd.Distro.ID != distro.None && cmd.Distro.ID != c.dist.ID {
|
||||
continue
|
||||
}
|
||||
if cmd.Distro.Release != "" && cmd.Distro.Release != c.dist.Release {
|
||||
continue
|
||||
}
|
||||
|
||||
cf += "RUN " + cmd.Command + "\n"
|
||||
}
|
||||
|
||||
for _, e := range envs {
|
||||
@ -299,6 +320,17 @@ func (c Container) Build(image string, envs, runs []string) (err error) {
|
||||
cf += "RUN " + c + "\n"
|
||||
}
|
||||
|
||||
for _, cmd := range Commands.Append {
|
||||
if cmd.Distro.ID != distro.None && cmd.Distro.ID != c.dist.ID {
|
||||
continue
|
||||
}
|
||||
if cmd.Distro.Release != "" && cmd.Distro.Release != c.dist.Release {
|
||||
continue
|
||||
}
|
||||
|
||||
cf += "RUN " + cmd.Command + "\n"
|
||||
}
|
||||
|
||||
buf, err := os.ReadFile(cfile)
|
||||
if err != nil {
|
||||
err = os.WriteFile(cfile, []byte(cf), os.ModePerm)
|
||||
|
6
main.go
6
main.go
@ -35,13 +35,13 @@ type CLI struct {
|
||||
cmd.Globals
|
||||
|
||||
Pew cmd.PewCmd `cmd:"" help:"build, run, and test module/exploit"`
|
||||
Kernel cmd.KernelCmd `cmd:"" help:"manipulate kernels"`
|
||||
Kernel cmd.KernelCmd `cmd:"" aliases:"kernels" help:"manipulate kernels"`
|
||||
Debug cmd.DebugCmd `cmd:"" help:"debug environment"`
|
||||
Log cmd.LogCmd `cmd:"" help:"query logs"`
|
||||
Pack cmd.PackCmd `cmd:"" help:"exploit pack test"`
|
||||
Gen cmd.GenCmd `cmd:"" help:"generate .out-of-tree.toml skeleton"`
|
||||
Image cmd.ImageCmd `cmd:"" help:"manage images"`
|
||||
Container cmd.ContainerCmd `cmd:"" help:"manage containers"`
|
||||
Image cmd.ImageCmd `cmd:"" aliases:"images" help:"manage images"`
|
||||
Container cmd.ContainerCmd `cmd:"" aliases:"containers" help:"manage containers"`
|
||||
Distro cmd.DistroCmd `cmd:"" help:"distro-related helpers"`
|
||||
|
||||
Daemon cmd.DaemonCmd `cmd:"" help:"run daemon"`
|
||||
|
Loading…
Reference in New Issue
Block a user