mirror of
https://github.com/containers/podman.git
synced 2025-08-06 19:44:14 +08:00
Merge pull request #13286 from flouthoc/kube-build-false-default
kube: honor `--build=false` if specified.
This commit is contained in:
@ -27,6 +27,7 @@ type playKubeOptionsWrapper struct {
|
||||
TLSVerifyCLI bool
|
||||
CredentialsCLI string
|
||||
StartCLI bool
|
||||
BuildCLI bool
|
||||
}
|
||||
|
||||
var (
|
||||
@ -117,7 +118,7 @@ func init() {
|
||||
_ = kubeCmd.RegisterFlagCompletionFunc(configmapFlagName, completion.AutocompleteDefault)
|
||||
|
||||
buildFlagName := "build"
|
||||
flags.BoolVar(&kubeOptions.Build, buildFlagName, false, "Build all images in a YAML (given Containerfiles exist)")
|
||||
flags.BoolVar(&kubeOptions.BuildCLI, buildFlagName, false, "Build all images in a YAML (given Containerfiles exist)")
|
||||
}
|
||||
|
||||
if !registry.IsRemote() {
|
||||
@ -138,6 +139,9 @@ func kube(cmd *cobra.Command, args []string) error {
|
||||
if cmd.Flags().Changed("start") {
|
||||
kubeOptions.Start = types.NewOptionalBool(kubeOptions.StartCLI)
|
||||
}
|
||||
if cmd.Flags().Changed("build") {
|
||||
kubeOptions.Build = types.NewOptionalBool(kubeOptions.BuildCLI)
|
||||
}
|
||||
if kubeOptions.Authfile != "" {
|
||||
if _, err := os.Stat(kubeOptions.Authfile); err != nil {
|
||||
return err
|
||||
|
@ -67,7 +67,8 @@ like:
|
||||
```
|
||||
|
||||
The build will consider `foobar` to be the context directory for the build. If there is an image in local storage
|
||||
called `foobar`, the image will not be built unless the `--build` flag is used.
|
||||
called `foobar`, the image will not be built unless the `--build` flag is used. Use `--build=false` to completely
|
||||
disable builds.
|
||||
|
||||
`Kubernetes ConfigMap`
|
||||
|
||||
@ -115,7 +116,7 @@ environment variable. `export REGISTRY_AUTH_FILE=path`
|
||||
|
||||
#### **--build**
|
||||
|
||||
Build images even if they are found in the local storage.
|
||||
Build images even if they are found in the local storage. Use `--build=false` to completely disable builds.
|
||||
|
||||
#### **--cert-dir**=*path*
|
||||
|
||||
|
@ -11,7 +11,7 @@ type PlayKubeOptions struct {
|
||||
// Authfile - path to an authentication file.
|
||||
Authfile string
|
||||
// Indicator to build all images with Containerfile or Dockerfile
|
||||
Build bool
|
||||
Build types.OptionalBool
|
||||
// CertDir - to a directory containing TLS certifications and keys.
|
||||
CertDir string
|
||||
// Down indicates whether to bring contents of a yaml file "down"
|
||||
|
@ -486,7 +486,7 @@ func (ic *ContainerEngine) getImageAndLabelInfo(ctx context.Context, cwd string,
|
||||
if err != nil {
|
||||
return nil, nil, err
|
||||
}
|
||||
if (len(buildFile) > 0 && !existsLocally) || (len(buildFile) > 0 && options.Build) {
|
||||
if (len(buildFile) > 0) && ((!existsLocally && options.Build != types.OptionalBoolFalse) || (options.Build == types.OptionalBoolTrue)) {
|
||||
buildOpts := new(buildahDefine.BuildOptions)
|
||||
commonOpts := new(buildahDefine.CommonBuildOptions)
|
||||
buildOpts.ConfigureNetwork = buildahDefine.NetworkDefault
|
||||
|
@ -212,6 +212,53 @@ LABEL marge=mom
|
||||
Expect(inspectData[0].Config.Labels).To(HaveKeyWithValue("marge", "mom"))
|
||||
})
|
||||
|
||||
It("Do not build image at all if --build=false", func() {
|
||||
// Setup
|
||||
yamlDir := filepath.Join(tempdir, RandomString(12))
|
||||
err := os.Mkdir(yamlDir, 0755)
|
||||
Expect(err).To(BeNil(), "mkdir "+yamlDir)
|
||||
err = writeYaml(testYAML, filepath.Join(yamlDir, "top.yaml"))
|
||||
Expect(err).To(BeNil())
|
||||
|
||||
// build an image called foobar but make sure it doesn't have
|
||||
// the same label as the yaml buildfile, so we can check that
|
||||
// the image is NOT rebuilt.
|
||||
err = writeYaml(prebuiltImage, filepath.Join(yamlDir, "Containerfile"))
|
||||
Expect(err).To(BeNil())
|
||||
|
||||
app1Dir := filepath.Join(yamlDir, "foobar")
|
||||
err = os.Mkdir(app1Dir, 0755)
|
||||
Expect(err).To(BeNil())
|
||||
err = writeYaml(playBuildFile, filepath.Join(app1Dir, "Containerfile"))
|
||||
Expect(err).To(BeNil())
|
||||
// Write a file to be copied
|
||||
err = writeYaml(copyFile, filepath.Join(app1Dir, "copyfile"))
|
||||
Expect(err).To(BeNil())
|
||||
|
||||
// Switch to temp dir and restore it afterwards
|
||||
cwd, err := os.Getwd()
|
||||
Expect(err).To(BeNil())
|
||||
Expect(os.Chdir(yamlDir)).To(BeNil())
|
||||
defer func() { (Expect(os.Chdir(cwd)).To(BeNil())) }()
|
||||
|
||||
// Build the image into the local store
|
||||
build := podmanTest.Podman([]string{"build", "-t", "foobar", "-f", "Containerfile"})
|
||||
build.WaitWithDefaultTimeout()
|
||||
Expect(build).Should(Exit(0))
|
||||
|
||||
session := podmanTest.Podman([]string{"play", "kube", "--build=false", "top.yaml"})
|
||||
session.WaitWithDefaultTimeout()
|
||||
Expect(session).Should(Exit(0))
|
||||
|
||||
inspect := podmanTest.Podman([]string{"container", "inspect", "top_pod-foobar"})
|
||||
inspect.WaitWithDefaultTimeout()
|
||||
Expect(inspect).Should(Exit(0))
|
||||
inspectData := inspect.InspectContainerToJSON()
|
||||
Expect(len(inspectData)).To(BeNumerically(">", 0))
|
||||
Expect(inspectData[0].Config.Labels).To(Not(HaveKey("homer")))
|
||||
Expect(inspectData[0].Config.Labels).To(HaveKeyWithValue("marge", "mom"))
|
||||
})
|
||||
|
||||
It("--build should override image in store", func() {
|
||||
// Setup
|
||||
yamlDir := filepath.Join(tempdir, RandomString(12))
|
||||
|
Reference in New Issue
Block a user