mirror of https://github.com/containers/podman.git
Merge pull request #19769 from vrothberg/fix-19711
kube down/play --replace: handle absent objects
This commit is contained in:
commit
009ff3af69
|
@ -30,6 +30,7 @@ type VolumeConfigResponse struct {
|
|||
type VolumeRmOptions struct {
|
||||
All bool
|
||||
Force bool
|
||||
Ignore bool
|
||||
Timeout *uint
|
||||
}
|
||||
|
||||
|
|
|
@ -1450,6 +1450,9 @@ func (ic *ContainerEngine) PlayKubeDown(ctx context.Context, body io.Reader, opt
|
|||
for _, name := range podNames {
|
||||
pod, err := ic.Libpod.LookupPod(name)
|
||||
if err != nil {
|
||||
if errors.Is(err, define.ErrNoSuchPod) {
|
||||
continue
|
||||
}
|
||||
return nil, err
|
||||
}
|
||||
ctr, err := pod.ServiceContainer()
|
||||
|
@ -1463,23 +1466,23 @@ func (ic *ContainerEngine) PlayKubeDown(ctx context.Context, body io.Reader, opt
|
|||
}
|
||||
|
||||
// Add the reports
|
||||
reports.StopReport, err = ic.PodStop(ctx, podNames, entities.PodStopOptions{})
|
||||
reports.StopReport, err = ic.PodStop(ctx, podNames, entities.PodStopOptions{Ignore: true})
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
reports.RmReport, err = ic.PodRm(ctx, podNames, entities.PodRmOptions{})
|
||||
reports.RmReport, err = ic.PodRm(ctx, podNames, entities.PodRmOptions{Ignore: true})
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
reports.SecretRmReport, err = ic.SecretRm(ctx, secretNames, entities.SecretRmOptions{})
|
||||
reports.SecretRmReport, err = ic.SecretRm(ctx, secretNames, entities.SecretRmOptions{Ignore: true})
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
if options.Force {
|
||||
reports.VolumeRmReport, err = ic.VolumeRm(ctx, volumeNames, entities.VolumeRmOptions{})
|
||||
reports.VolumeRmReport, err = ic.VolumeRm(ctx, volumeNames, entities.VolumeRmOptions{Ignore: true})
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
|
|
@ -166,17 +166,10 @@ func (ic *ContainerEngine) SecretRm(ctx context.Context, nameOrIDs []string, opt
|
|||
}
|
||||
for _, nameOrID := range toRemove {
|
||||
deletedID, err := manager.Delete(nameOrID)
|
||||
if err == nil || strings.Contains(err.Error(), "no such secret") {
|
||||
if !options.Ignore {
|
||||
reports = append(reports, &entities.SecretRmReport{
|
||||
Err: err,
|
||||
ID: deletedID,
|
||||
})
|
||||
}
|
||||
if options.Ignore && errors.Is(err, secrets.ErrNoSuchSecret) {
|
||||
continue
|
||||
} else {
|
||||
return nil, err
|
||||
}
|
||||
reports = append(reports, &entities.SecretRmReport{Err: err, ID: deletedID})
|
||||
}
|
||||
|
||||
return reports, nil
|
||||
|
|
|
@ -61,6 +61,9 @@ func (ic *ContainerEngine) VolumeRm(ctx context.Context, namesOrIds []string, op
|
|||
for _, id := range namesOrIds {
|
||||
vol, err := ic.Libpod.LookupVolume(id)
|
||||
if err != nil {
|
||||
if opts.Ignore && errors.Is(err, define.ErrNoSuchVolume) {
|
||||
continue
|
||||
}
|
||||
reports = append(reports, &entities.VolumeRmReport{
|
||||
Err: err,
|
||||
Id: id,
|
||||
|
|
|
@ -4148,11 +4148,15 @@ invalid kube kind
|
|||
Expect(ls).Should(Exit(0))
|
||||
Expect(ls.OutputToStringArray()).To(HaveLen(1))
|
||||
|
||||
// teardown
|
||||
teardown := podmanTest.Podman([]string{"play", "kube", "--down", kubeYaml})
|
||||
teardown.WaitWithDefaultTimeout()
|
||||
Expect(teardown).Should(Exit(0))
|
||||
|
||||
// Removing a 2nd time to make sure no "no such error" is returned (see #19711)
|
||||
teardown = podmanTest.Podman([]string{"play", "kube", "--down", kubeYaml})
|
||||
teardown.WaitWithDefaultTimeout()
|
||||
Expect(teardown).Should(Exit(0))
|
||||
|
||||
checkls := podmanTest.Podman([]string{"pod", "ps", "--format", "'{{.ID}}'"})
|
||||
checkls.WaitWithDefaultTimeout()
|
||||
Expect(checkls).Should(Exit(0))
|
||||
|
@ -4172,12 +4176,16 @@ invalid kube kind
|
|||
Expect(ls).Should(Exit(0))
|
||||
Expect(ls.OutputToStringArray()).To(HaveLen(1))
|
||||
|
||||
// teardown
|
||||
teardown := podmanTest.Podman([]string{"kube", "down", kubeYaml})
|
||||
teardown.WaitWithDefaultTimeout()
|
||||
Expect(teardown).Should(Exit(0))
|
||||
Expect(teardown.OutputToString()).Should(ContainSubstring(ls.OutputToString()))
|
||||
|
||||
// Removing a 2nd time to make sure no "no such error" is returned (see #19711)
|
||||
teardown = podmanTest.Podman([]string{"kube", "down", kubeYaml})
|
||||
teardown.WaitWithDefaultTimeout()
|
||||
Expect(teardown).Should(Exit(0))
|
||||
|
||||
checkls := podmanTest.Podman([]string{"secret", "ls", "--format", "'{{.ID}}'"})
|
||||
checkls.WaitWithDefaultTimeout()
|
||||
Expect(checkls).Should(Exit(0))
|
||||
|
@ -4185,13 +4193,15 @@ invalid kube kind
|
|||
})
|
||||
|
||||
It("podman play kube teardown pod does not exist", func() {
|
||||
// teardown
|
||||
err := writeYaml(simplePodYaml, kubeYaml)
|
||||
Expect(err).ToNot(HaveOccurred())
|
||||
|
||||
teardown := podmanTest.Podman([]string{"play", "kube", "--down", kubeYaml})
|
||||
teardown.WaitWithDefaultTimeout()
|
||||
Expect(teardown).Should(Exit(125))
|
||||
Expect(teardown).Should(Exit(0))
|
||||
})
|
||||
|
||||
It("podman play kube teardown with volume without force delete", func() {
|
||||
It("podman play kube teardown volume --force", func() {
|
||||
|
||||
volName := RandomString(12)
|
||||
volDevice := define.TypeTmpfs
|
||||
|
@ -4217,35 +4227,18 @@ invalid kube kind
|
|||
teardown.WaitWithDefaultTimeout()
|
||||
Expect(teardown).To(Exit(0))
|
||||
|
||||
// volume should not be deleted on teardown
|
||||
// volume should not be deleted on teardown without --force
|
||||
exists = podmanTest.Podman([]string{"volume", "exists", volName})
|
||||
exists.WaitWithDefaultTimeout()
|
||||
Expect(exists).To(Exit(0))
|
||||
})
|
||||
|
||||
It("podman play kube teardown with volume force delete", func() {
|
||||
// volume gets deleted with --force
|
||||
teardown = podmanTest.Podman([]string{"play", "kube", "--down", "--force", kubeYaml})
|
||||
teardown.WaitWithDefaultTimeout()
|
||||
Expect(teardown).To(Exit(0))
|
||||
|
||||
volName := RandomString(12)
|
||||
volDevice := define.TypeTmpfs
|
||||
volType := define.TypeTmpfs
|
||||
volOpts := "nodev,noexec"
|
||||
|
||||
pvc := getPVC(withPVCName(volName),
|
||||
withPVCAnnotations(util.VolumeDeviceAnnotation, volDevice),
|
||||
withPVCAnnotations(util.VolumeTypeAnnotation, volType),
|
||||
withPVCAnnotations(util.VolumeMountOptsAnnotation, volOpts))
|
||||
err = generateKubeYaml("persistentVolumeClaim", pvc, kubeYaml)
|
||||
Expect(err).ToNot(HaveOccurred())
|
||||
|
||||
kube := podmanTest.Podman([]string{"play", "kube", kubeYaml})
|
||||
kube.WaitWithDefaultTimeout()
|
||||
Expect(kube).Should(Exit(0))
|
||||
|
||||
exists := podmanTest.Podman([]string{"volume", "exists", volName})
|
||||
exists.WaitWithDefaultTimeout()
|
||||
Expect(exists).To(Exit(0))
|
||||
|
||||
teardown := podmanTest.Podman([]string{"play", "kube", "--down", "--force", kubeYaml})
|
||||
// Removing a 2nd should succeed as well even if no volume matches
|
||||
teardown = podmanTest.Podman([]string{"play", "kube", "--down", "--force", kubeYaml})
|
||||
teardown.WaitWithDefaultTimeout()
|
||||
Expect(teardown).To(Exit(0))
|
||||
|
||||
|
|
Loading…
Reference in New Issue