WIP create kpod bud

Signed-off-by: TomSweeneyRedHat <tsweeney@redhat.com>
This commit is contained in:
TomSweeneyRedHat 2017-10-05 16:49:01 -04:00
parent e838611fdd
commit cb9fad2e23
2 changed files with 118 additions and 0 deletions

117
cmd/kpod/bud.go Normal file
View file

@ -0,0 +1,117 @@
package main
import (
"fmt"
"os"
"os/exec"
"github.com/kubernetes-incubator/cri-o/libkpod"
"github.com/pkg/errors"
"github.com/urfave/cli"
)
var (
budFlags = []cli.Flag{
cli.StringSliceFlag{
Name: "build-arg",
Usage: "`argument=value` to supply to the builder",
},
cli.StringSliceFlag{
Name: "file, f",
Usage: "`pathname or URL` of a Dockerfile",
},
cli.StringFlag{
Name: "format",
Usage: "`format` of the built image's manifest and metadata",
},
cli.BoolTFlag{
Name: "pull",
Usage: "pull the image if not present",
},
cli.BoolFlag{
Name: "pull-always",
Usage: "pull the image, even if a version is present",
},
cli.BoolFlag{
Name: "quiet, q",
Usage: "refrain from announcing build instructions and image read/write progress",
},
cli.StringFlag{
Name: "runtime",
Usage: "`path` to an alternate runtime",
},
cli.StringSliceFlag{
Name: "runtime-flag",
Usage: "add global flags for the container runtime",
},
cli.StringFlag{
Name: "signature-policy",
Usage: "`pathname` of signature policy file (not usually used)",
},
cli.StringSliceFlag{
Name: "tag, t",
Usage: "`tag` to apply to the built image",
},
}
budDescription = "This creates an OCI image using the 'buildah bud' command. Buildah must be installed for this command to work."
budCommand = cli.Command{
Name: "bud",
Usage: "Builds a container using the buildah bud command",
Description: budDescription,
Flags: budFlags,
Action: budCmd,
ArgsUsage: "CONTEXT-DIRECTORY | URL",
}
)
func budCmd(c *cli.Context) error {
//args := c.Args()
config, err := getConfig(c)
if err != nil {
return errors.Wrapf(err, "Could not get config")
}
server, err := libkpod.New(config)
if err != nil {
return errors.Wrapf(err, "could not get container server")
}
defer server.Shutdown()
if err = server.Update(); err != nil {
return errors.Wrapf(err, "could not update list of containers")
}
buildah := "buildah"
_, err = exec.Command(buildah).Output()
if err != nil {
return errors.Wrapf(err, "buildah is not installed on this server")
}
budCmdArgs := []string{"bud"}
if c.BoolT("pull") {
budCmdArgs = append(budCmdArgs, "--pull")
}
if c.BoolT("pull-always") {
budCmdArgs = append(budCmdArgs, "--pull-always")
}
fmt.Fprintln(os.Stdout, "Tom's args: ", budCmdArgs)
budCmdArgs = append(budCmdArgs, ".")
cmd := exec.Command(buildah, budCmdArgs...)
cmd.Stdout = os.Stdout
cmd.Stderr = os.Stderr
err = cmd.Run()
if err != nil {
fmt.Fprintln(os.Stderr, "There was an error running the buildah bud command: ", err)
}
return nil
}

View file

@ -31,6 +31,7 @@ func main() {
app.Version = v
app.Commands = []cli.Command{
budCommand,
diffCommand,
exportCommand,
historyCommand,