From ba6d04bc4bd2c3cd9cded7213610f96c37661db0 Mon Sep 17 00:00:00 2001 From: JoshVanL Date: Fri, 26 Oct 2018 09:22:26 +0100 Subject: [PATCH 1/3] Adds `cluster images destroy` Signed-off-by: JoshVanL --- cmd/tarmak/cmd/cluster_images_destroy.go | 29 +++++++++++ docs/cmd-docs.rst | 5 ++ .../cmd/tarmak/tarmak_clusters_images.rst | 1 + .../tarmak/tarmak_clusters_images_destroy.rst | 41 +++++++++++++++ pkg/tarmak/cmd.go | 4 ++ pkg/tarmak/interfaces/interfaces.go | 1 + pkg/tarmak/provider/amazon/amazon.go | 1 + pkg/tarmak/provider/amazon/image.go | 50 +++++++++++++++++++ 8 files changed, 132 insertions(+) create mode 100644 cmd/tarmak/cmd/cluster_images_destroy.go create mode 100644 docs/generated/cmd/tarmak/tarmak_clusters_images_destroy.rst diff --git a/cmd/tarmak/cmd/cluster_images_destroy.go b/cmd/tarmak/cmd/cluster_images_destroy.go new file mode 100644 index 0000000000..d6e35c47f5 --- /dev/null +++ b/cmd/tarmak/cmd/cluster_images_destroy.go @@ -0,0 +1,29 @@ +// Copyright Jetstack Ltd. See LICENSE for details. +package cmd + +import ( + "errors" + + "github.com/spf13/cobra" + + "github.com/jetstack/tarmak/pkg/tarmak" +) + +var clusterImagesDestroyCmd = &cobra.Command{ + Use: "destroy [image ids]", + Short: "destroy images", + PreRunE: func(cmd *cobra.Command, args []string) error { + if len(args) == 0 { + return errors.New("expecting at least a single image ID argument") + } + return nil + }, + Run: func(cmd *cobra.Command, args []string) { + t := tarmak.New(globalFlags) + t.CancellationContext().WaitOrCancel(t.NewCmdTarmak(args).ImagesDestroy) + }, +} + +func init() { + clusterImagesCmd.AddCommand(clusterImagesDestroyCmd) +} diff --git a/docs/cmd-docs.rst b/docs/cmd-docs.rst index bd1d9ef050..d2331caa49 100644 --- a/docs/cmd-docs.rst +++ b/docs/cmd-docs.rst @@ -64,6 +64,11 @@ Command line documentation for both tarmak and wing commands generated/cmd/tarmak/tarmak_clusters_images_build +.. toctree:: + :maxdepth: 1 + + generated/cmd/tarmak/tarmak_clusters_images_destroy + .. toctree:: :maxdepth: 1 diff --git a/docs/generated/cmd/tarmak/tarmak_clusters_images.rst b/docs/generated/cmd/tarmak/tarmak_clusters_images.rst index e22d86f668..7d909ba97a 100644 --- a/docs/generated/cmd/tarmak/tarmak_clusters_images.rst +++ b/docs/generated/cmd/tarmak/tarmak_clusters_images.rst @@ -36,5 +36,6 @@ SEE ALSO * `tarmak clusters `_ - Operations on clusters * `tarmak clusters images build `_ - build specific or all images missing +* `tarmak clusters images destroy `_ - destroy images * `tarmak clusters images list `_ - list images diff --git a/docs/generated/cmd/tarmak/tarmak_clusters_images_destroy.rst b/docs/generated/cmd/tarmak/tarmak_clusters_images_destroy.rst new file mode 100644 index 0000000000..a0a3e98408 --- /dev/null +++ b/docs/generated/cmd/tarmak/tarmak_clusters_images_destroy.rst @@ -0,0 +1,41 @@ +.. _tarmak_clusters_images_destroy: + +tarmak clusters images destroy +------------------------------ + +destroy images + +Synopsis +~~~~~~~~ + + +destroy images + +:: + + tarmak clusters images destroy [image ids] [flags] + +Options +~~~~~~~ + +:: + + -h, --help help for destroy + +Options inherited from parent commands +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +:: + + -c, --config-directory string config directory for tarmak's configuration (default "~/.tarmak") + --current-cluster string override the current cluster set in the config + --keep-containers do not clean-up terraform/packer containers after running them + --log-flush-frequency duration Maximum number of seconds between log flushes (default 5s) + -v, --verbose enable verbose logging + --wing-dev-mode use a bundled wing version rather than a tagged release from GitHub + +SEE ALSO +~~~~~~~~ + +* `tarmak clusters images `_ - Operations on images + diff --git a/pkg/tarmak/cmd.go b/pkg/tarmak/cmd.go index 78d6399324..55aa43dc11 100644 --- a/pkg/tarmak/cmd.go +++ b/pkg/tarmak/cmd.go @@ -233,6 +233,10 @@ Are you sure you want to re-build them?`, alreadyBuilt) return c.packer.Build(c.args) } +func (c *CmdTarmak) ImagesDestroy() error { + return c.Provider().DestroyImages(c.args) +} + func (c *CmdTarmak) Kubectl() error { if err := c.writeSSHConfigForClusterHosts(); err != nil { return err diff --git a/pkg/tarmak/interfaces/interfaces.go b/pkg/tarmak/interfaces/interfaces.go index 13a9a1d370..e83b866a7e 100644 --- a/pkg/tarmak/interfaces/interfaces.go +++ b/pkg/tarmak/interfaces/interfaces.go @@ -121,6 +121,7 @@ type Provider interface { Environment() ([]string, error) Variables() map[string]interface{} QueryImages(tags map[string]string) ([]tarmakv1alpha1.Image, error) + DestroyImages(ids []string) error VaultKV() (kv.Service, error) VaultKVWithParams(kmsKeyID, unsealKeyName string) (kv.Service, error) ListHosts(Cluster) ([]Host, error) diff --git a/pkg/tarmak/provider/amazon/amazon.go b/pkg/tarmak/provider/amazon/amazon.go index 8d6a27b6a6..fef28bdcca 100644 --- a/pkg/tarmak/provider/amazon/amazon.go +++ b/pkg/tarmak/provider/amazon/amazon.go @@ -70,6 +70,7 @@ type EC2 interface { DescribeRegions(input *ec2.DescribeRegionsInput) (*ec2.DescribeRegionsOutput, error) DescribeReservedInstancesOfferings(input *ec2.DescribeReservedInstancesOfferingsInput) (*ec2.DescribeReservedInstancesOfferingsOutput, error) DescribeImages(input *ec2.DescribeImagesInput) (*ec2.DescribeImagesOutput, error) + DeregisterImage(input *ec2.DeregisterImageInput) (*ec2.DeregisterImageOutput, error) } type DynamoDB interface { diff --git a/pkg/tarmak/provider/amazon/image.go b/pkg/tarmak/provider/amazon/image.go index 9ee4de96da..9bffad2704 100644 --- a/pkg/tarmak/provider/amazon/image.go +++ b/pkg/tarmak/provider/amazon/image.go @@ -7,6 +7,7 @@ import ( "github.com/aws/aws-sdk-go/aws" "github.com/aws/aws-sdk-go/service/ec2" + "github.com/hashicorp/go-multierror" tarmakv1alpha1 "github.com/jetstack/tarmak/pkg/apis/tarmak/v1alpha1" ) @@ -88,3 +89,52 @@ func (a *Amazon) QueryImages(tags map[string]string) (images []tarmakv1alpha1.Im return images, nil } + +func (a *Amazon) DestroyImages(ids []string) error { + var result *multierror.Error + + images, err := a.tarmak.Packer().List() + if err != nil { + return err + } + + for _, id := range ids { + found := false + for _, image := range images { + if id == image.Name { + found = true + break + } + } + + if !found { + result = multierror.Append(result, + fmt.Errorf("failed to find tarmak image with id %s", id)) + } + } + + if result != nil { + return result + } + + svc, err := a.EC2() + if err != nil { + return err + } + + for _, id := range ids { + _, err := svc.DeregisterImage(&ec2.DeregisterImageInput{ + DryRun: aws.Bool(false), + ImageId: aws.String(id), + }) + + if err != nil { + result = multierror.Append(result, err) + continue + } + + a.log.Infof("deregistered image %s", id) + } + + return result.ErrorOrNil() +} From ff74905bdf434a592cce3d7494dbf88315466906 Mon Sep 17 00:00:00 2001 From: JoshVanL Date: Fri, 26 Oct 2018 15:09:47 +0100 Subject: [PATCH 2/3] Includes --all flag to cluster images destroy Signed-off-by: JoshVanL --- cmd/tarmak/cmd/cluster.go | 12 +++++ cmd/tarmak/cmd/cluster_images_destroy.go | 7 +-- .../cmd/tarmak/tarmak_clusters_images.rst | 2 +- .../tarmak/tarmak_clusters_images_destroy.rst | 5 ++- docs/generated/reference/output/api-docs.html | 45 ++++++++++++++++++- docs/generated/reference/output/navData.js | 2 +- pkg/apis/tarmak/v1alpha1/types.go | 8 +++- .../tarmak/v1alpha1/zz_generated.deepcopy.go | 17 +++++++ pkg/tarmak/cmd.go | 17 ++++++- 9 files changed, 105 insertions(+), 10 deletions(-) diff --git a/cmd/tarmak/cmd/cluster.go b/cmd/tarmak/cmd/cluster.go index e237b3b788..08777fcde1 100644 --- a/cmd/tarmak/cmd/cluster.go +++ b/cmd/tarmak/cmd/cluster.go @@ -94,6 +94,18 @@ func clusterPlanFlags(fs *flag.FlagSet) { ) } +func clusterImagesDestroyFlags(fs *flag.FlagSet) { + store := &globalFlags.Cluster.Images.Destroy + + fs.BoolVarP( + &store.All, + "all", + "A", + false, + "destroy all tarmak images for this cluster", + ) +} + func clusterFlagDryRun(fs *flag.FlagSet, store *bool) { fs.BoolVar( store, diff --git a/cmd/tarmak/cmd/cluster_images_destroy.go b/cmd/tarmak/cmd/cluster_images_destroy.go index d6e35c47f5..1da953cc51 100644 --- a/cmd/tarmak/cmd/cluster_images_destroy.go +++ b/cmd/tarmak/cmd/cluster_images_destroy.go @@ -11,10 +11,10 @@ import ( var clusterImagesDestroyCmd = &cobra.Command{ Use: "destroy [image ids]", - Short: "destroy images", + Short: "destroy remote tarmak images", PreRunE: func(cmd *cobra.Command, args []string) error { - if len(args) == 0 { - return errors.New("expecting at least a single image ID argument") + if len(args) == 0 && !globalFlags.Cluster.Images.Destroy.All { + return errors.New("expecting at least a single image ID argument or --all") } return nil }, @@ -25,5 +25,6 @@ var clusterImagesDestroyCmd = &cobra.Command{ } func init() { + clusterImagesDestroyFlags(clusterImagesDestroyCmd.PersistentFlags()) clusterImagesCmd.AddCommand(clusterImagesDestroyCmd) } diff --git a/docs/generated/cmd/tarmak/tarmak_clusters_images.rst b/docs/generated/cmd/tarmak/tarmak_clusters_images.rst index 7d909ba97a..d35aa83fab 100644 --- a/docs/generated/cmd/tarmak/tarmak_clusters_images.rst +++ b/docs/generated/cmd/tarmak/tarmak_clusters_images.rst @@ -36,6 +36,6 @@ SEE ALSO * `tarmak clusters `_ - Operations on clusters * `tarmak clusters images build `_ - build specific or all images missing -* `tarmak clusters images destroy `_ - destroy images +* `tarmak clusters images destroy `_ - destroy remote tarmak images * `tarmak clusters images list `_ - list images diff --git a/docs/generated/cmd/tarmak/tarmak_clusters_images_destroy.rst b/docs/generated/cmd/tarmak/tarmak_clusters_images_destroy.rst index a0a3e98408..ead2dc1b52 100644 --- a/docs/generated/cmd/tarmak/tarmak_clusters_images_destroy.rst +++ b/docs/generated/cmd/tarmak/tarmak_clusters_images_destroy.rst @@ -3,13 +3,13 @@ tarmak clusters images destroy ------------------------------ -destroy images +destroy remote tarmak images Synopsis ~~~~~~~~ -destroy images +destroy remote tarmak images :: @@ -20,6 +20,7 @@ Options :: + -A, --all destroy all tarmak images for this cluster -h, --help help for destroy Options inherited from parent commands diff --git a/docs/generated/reference/output/api-docs.html b/docs/generated/reference/output/api-docs.html index 1ba5b8dc0f..119bbbf4e9 100644 --- a/docs/generated/reference/output/api-docs.html +++ b/docs/generated/reference/output/api-docs.html @@ -11,7 +11,7 @@ - +

    Tarmak

    @@ -681,6 +681,45 @@

    ClusterImagesBuildFlags v1alpha1

    +

    ClusterImagesDestroyFlags v1alpha1

    + + + + + + + + + + + + + + + +
    GroupVersionKind
    tarmakv1alpha1ClusterImagesDestroyFlags
    +

    Contains the cluster images destroy flags

    + + + + + + + + + + + + + + + +
    FieldDescription
    all
    boolean

    ClusterImagesFlags v1alpha1

    @@ -718,6 +757,10 @@

    ClusterImagesFlags v1alpha1

    + + + +
    build
    ClusterImagesBuildFlags
    destroy
    ClusterImagesDestroyFlags
    flags for handling building images

    ClusterKubeconfigFlags v1alpha1

    diff --git a/docs/generated/reference/output/navData.js b/docs/generated/reference/output/navData.js index 3d0d480511..cf20bd4bf0 100644 --- a/docs/generated/reference/output/navData.js +++ b/docs/generated/reference/output/navData.js @@ -1 +1 @@ -(function(){navData = {"toc":[{"section":"-strong-field-definitions-strong-","subsections":[{"section":"volume-v1alpha1"},{"section":"values-v1alpha1"},{"section":"taint-v1alpha1"},{"section":"subnet-v1alpha1"},{"section":"ssh-v1alpha1"},{"section":"providergcp-v1alpha1"},{"section":"providerazure-v1alpha1"},{"section":"provideramazon-v1alpha1"},{"section":"provider-v1alpha1"},{"section":"network-v1alpha1"},{"section":"loggingsinkelasticsearch-v1alpha1"},{"section":"loggingsink-v1alpha1"},{"section":"label-v1alpha1"},{"section":"kubernetesapi-v1alpha1"},{"section":"internetgw-v1alpha1"},{"section":"instancestatusmanifest-v1alpha1"},{"section":"instancespecmanifest-v1alpha1"},{"section":"instancepoolkubernetes-v1alpha1"},{"section":"instancepoolamazon-v1alpha1"},{"section":"instancepool-v1alpha1"},{"section":"ingressrule-v1alpha1"},{"section":"httpbasicauth-v1alpha1"},{"section":"firewall-v1alpha1"},{"section":"environment-v1alpha1"},{"section":"egressrule-v1alpha1"},{"section":"clusterpodsecuritypolicy-v1alpha1"},{"section":"clusterplanflags-v1alpha1"},{"section":"clusterkubernetestiller-v1alpha1"},{"section":"clusterkubernetesprometheus-v1alpha1"},{"section":"clusterkubernetesdashboard-v1alpha1"},{"section":"clusterkubernetesclusterautoscaleroverprovisioning-v1alpha1"},{"section":"clusterkubernetesclusterautoscaler-v1alpha1"},{"section":"clusterkubernetesapiserveroidc-v1alpha1"},{"section":"clusterkubernetesapiserveramazonaccesslogs-v1alpha1"},{"section":"clusterkubernetesapiserveramazon-v1alpha1"},{"section":"clusterkubernetesapiserver-v1alpha1"},{"section":"clusterkubernetes-v1alpha1"},{"section":"clusterkubeconfigflags-v1alpha1"},{"section":"clusterimagesflags-v1alpha1"},{"section":"clusterimagesbuildflags-v1alpha1"},{"section":"clusterflags-v1alpha1"},{"section":"clusterdestroyflags-v1alpha1"},{"section":"clusterapplyflags-v1alpha1"},{"section":"clusteramazon-v1alpha1"},{"section":"amazonesproxy-v1alpha1"}]},{"section":"-strong-old-api-versions-strong-","subsections":[]},{"section":"instance-v1alpha1","subsections":[]},{"section":"cluster-v1alpha1","subsections":[]},{"section":"flags-v1alpha1","subsections":[]},{"section":"image-v1alpha1","subsections":[]},{"section":"config-v1alpha1","subsections":[]},{"section":"-strong-tarmak-strong-","subsections":[]}],"flatToc":["volume-v1alpha1","values-v1alpha1","taint-v1alpha1","subnet-v1alpha1","ssh-v1alpha1","providergcp-v1alpha1","providerazure-v1alpha1","provideramazon-v1alpha1","provider-v1alpha1","network-v1alpha1","loggingsinkelasticsearch-v1alpha1","loggingsink-v1alpha1","label-v1alpha1","kubernetesapi-v1alpha1","internetgw-v1alpha1","instancestatusmanifest-v1alpha1","instancespecmanifest-v1alpha1","instancepoolkubernetes-v1alpha1","instancepoolamazon-v1alpha1","instancepool-v1alpha1","ingressrule-v1alpha1","httpbasicauth-v1alpha1","firewall-v1alpha1","environment-v1alpha1","egressrule-v1alpha1","clusterpodsecuritypolicy-v1alpha1","clusterplanflags-v1alpha1","clusterkubernetestiller-v1alpha1","clusterkubernetesprometheus-v1alpha1","clusterkubernetesdashboard-v1alpha1","clusterkubernetesclusterautoscaleroverprovisioning-v1alpha1","clusterkubernetesclusterautoscaler-v1alpha1","clusterkubernetesapiserveroidc-v1alpha1","clusterkubernetesapiserveramazonaccesslogs-v1alpha1","clusterkubernetesapiserveramazon-v1alpha1","clusterkubernetesapiserver-v1alpha1","clusterkubernetes-v1alpha1","clusterkubeconfigflags-v1alpha1","clusterimagesflags-v1alpha1","clusterimagesbuildflags-v1alpha1","clusterflags-v1alpha1","clusterdestroyflags-v1alpha1","clusterapplyflags-v1alpha1","clusteramazon-v1alpha1","amazonesproxy-v1alpha1","-strong-field-definitions-strong-","-strong-old-api-versions-strong-","instance-v1alpha1","cluster-v1alpha1","flags-v1alpha1","image-v1alpha1","config-v1alpha1","-strong-tarmak-strong-"]};})(); \ No newline at end of file +(function(){navData = {"toc":[{"section":"-strong-field-definitions-strong-","subsections":[{"section":"volume-v1alpha1"},{"section":"values-v1alpha1"},{"section":"taint-v1alpha1"},{"section":"subnet-v1alpha1"},{"section":"ssh-v1alpha1"},{"section":"providergcp-v1alpha1"},{"section":"providerazure-v1alpha1"},{"section":"provideramazon-v1alpha1"},{"section":"provider-v1alpha1"},{"section":"network-v1alpha1"},{"section":"loggingsinkelasticsearch-v1alpha1"},{"section":"loggingsink-v1alpha1"},{"section":"label-v1alpha1"},{"section":"kubernetesapi-v1alpha1"},{"section":"internetgw-v1alpha1"},{"section":"instancestatusmanifest-v1alpha1"},{"section":"instancespecmanifest-v1alpha1"},{"section":"instancepoolkubernetes-v1alpha1"},{"section":"instancepoolamazon-v1alpha1"},{"section":"instancepool-v1alpha1"},{"section":"ingressrule-v1alpha1"},{"section":"httpbasicauth-v1alpha1"},{"section":"firewall-v1alpha1"},{"section":"environment-v1alpha1"},{"section":"egressrule-v1alpha1"},{"section":"clusterpodsecuritypolicy-v1alpha1"},{"section":"clusterplanflags-v1alpha1"},{"section":"clusterkubernetestiller-v1alpha1"},{"section":"clusterkubernetesprometheus-v1alpha1"},{"section":"clusterkubernetesdashboard-v1alpha1"},{"section":"clusterkubernetesclusterautoscaleroverprovisioning-v1alpha1"},{"section":"clusterkubernetesclusterautoscaler-v1alpha1"},{"section":"clusterkubernetesapiserveroidc-v1alpha1"},{"section":"clusterkubernetesapiserveramazonaccesslogs-v1alpha1"},{"section":"clusterkubernetesapiserveramazon-v1alpha1"},{"section":"clusterkubernetesapiserver-v1alpha1"},{"section":"clusterkubernetes-v1alpha1"},{"section":"clusterkubeconfigflags-v1alpha1"},{"section":"clusterimagesflags-v1alpha1"},{"section":"clusterimagesdestroyflags-v1alpha1"},{"section":"clusterimagesbuildflags-v1alpha1"},{"section":"clusterflags-v1alpha1"},{"section":"clusterdestroyflags-v1alpha1"},{"section":"clusterapplyflags-v1alpha1"},{"section":"clusteramazon-v1alpha1"},{"section":"amazonesproxy-v1alpha1"}]},{"section":"-strong-old-api-versions-strong-","subsections":[]},{"section":"instance-v1alpha1","subsections":[]},{"section":"cluster-v1alpha1","subsections":[]},{"section":"flags-v1alpha1","subsections":[]},{"section":"image-v1alpha1","subsections":[]},{"section":"config-v1alpha1","subsections":[]},{"section":"-strong-tarmak-strong-","subsections":[]}],"flatToc":["volume-v1alpha1","values-v1alpha1","taint-v1alpha1","subnet-v1alpha1","ssh-v1alpha1","providergcp-v1alpha1","providerazure-v1alpha1","provideramazon-v1alpha1","provider-v1alpha1","network-v1alpha1","loggingsinkelasticsearch-v1alpha1","loggingsink-v1alpha1","label-v1alpha1","kubernetesapi-v1alpha1","internetgw-v1alpha1","instancestatusmanifest-v1alpha1","instancespecmanifest-v1alpha1","instancepoolkubernetes-v1alpha1","instancepoolamazon-v1alpha1","instancepool-v1alpha1","ingressrule-v1alpha1","httpbasicauth-v1alpha1","firewall-v1alpha1","environment-v1alpha1","egressrule-v1alpha1","clusterpodsecuritypolicy-v1alpha1","clusterplanflags-v1alpha1","clusterkubernetestiller-v1alpha1","clusterkubernetesprometheus-v1alpha1","clusterkubernetesdashboard-v1alpha1","clusterkubernetesclusterautoscaleroverprovisioning-v1alpha1","clusterkubernetesclusterautoscaler-v1alpha1","clusterkubernetesapiserveroidc-v1alpha1","clusterkubernetesapiserveramazonaccesslogs-v1alpha1","clusterkubernetesapiserveramazon-v1alpha1","clusterkubernetesapiserver-v1alpha1","clusterkubernetes-v1alpha1","clusterkubeconfigflags-v1alpha1","clusterimagesflags-v1alpha1","clusterimagesdestroyflags-v1alpha1","clusterimagesbuildflags-v1alpha1","clusterflags-v1alpha1","clusterdestroyflags-v1alpha1","clusterapplyflags-v1alpha1","clusteramazon-v1alpha1","amazonesproxy-v1alpha1","-strong-field-definitions-strong-","-strong-old-api-versions-strong-","instance-v1alpha1","cluster-v1alpha1","flags-v1alpha1","image-v1alpha1","config-v1alpha1","-strong-tarmak-strong-"]};})(); \ No newline at end of file diff --git a/pkg/apis/tarmak/v1alpha1/types.go b/pkg/apis/tarmak/v1alpha1/types.go index 7bc0683d78..0bbe75c145 100644 --- a/pkg/apis/tarmak/v1alpha1/types.go +++ b/pkg/apis/tarmak/v1alpha1/types.go @@ -175,7 +175,8 @@ type ClusterDestroyFlags struct { // Contains the cluster images flags type ClusterImagesFlags struct { - Build ClusterImagesBuildFlags `json:"build,omitempty"` // flags for handling building images + Build ClusterImagesBuildFlags `json:"build,omitempty"` // flags for handling building images + Destroy ClusterImagesDestroyFlags `json:"destroy,omitempty"` // just show what would be done } // Contains the cluster images build flags @@ -183,6 +184,11 @@ type ClusterImagesBuildFlags struct { RebuildExisting bool `json:"rebuildExisting,omitempty"` // build all images regardless whether they already exist } +// Contains the cluster images destroy flags +type ClusterImagesDestroyFlags struct { + All bool `json:"all,omitempty"` // destroy all images +} + // Contains the cluster kubeconfig flags type ClusterKubeconfigFlags struct { Path string `json:"path,omitempty"` // Path to save kubeconfig to diff --git a/pkg/apis/tarmak/v1alpha1/zz_generated.deepcopy.go b/pkg/apis/tarmak/v1alpha1/zz_generated.deepcopy.go index aee63e81cd..2bc3d2d4e7 100644 --- a/pkg/apis/tarmak/v1alpha1/zz_generated.deepcopy.go +++ b/pkg/apis/tarmak/v1alpha1/zz_generated.deepcopy.go @@ -80,10 +80,27 @@ func (in *ClusterImagesBuildFlags) DeepCopy() *ClusterImagesBuildFlags { return out } +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *ClusterImagesDestroyFlags) DeepCopyInto(out *ClusterImagesDestroyFlags) { + *out = *in + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ClusterImagesDestroyFlags. +func (in *ClusterImagesDestroyFlags) DeepCopy() *ClusterImagesDestroyFlags { + if in == nil { + return nil + } + out := new(ClusterImagesDestroyFlags) + in.DeepCopyInto(out) + return out +} + // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. func (in *ClusterImagesFlags) DeepCopyInto(out *ClusterImagesFlags) { *out = *in out.Build = in.Build + out.Destroy = in.Destroy return } diff --git a/pkg/tarmak/cmd.go b/pkg/tarmak/cmd.go index 55aa43dc11..a3ac9b9fd2 100644 --- a/pkg/tarmak/cmd.go +++ b/pkg/tarmak/cmd.go @@ -234,7 +234,22 @@ Are you sure you want to re-build them?`, alreadyBuilt) } func (c *CmdTarmak) ImagesDestroy() error { - return c.Provider().DestroyImages(c.args) + if c.flags.Cluster.Images.Destroy.All { + images, err := c.packer.List() + if err != nil { + return err + } + + var ids []string + for _, i := range images { + ids = append(ids, i.Name) + } + + return c.Provider().DestroyImages(ids) + + } else { + return c.Provider().DestroyImages(c.args) + } } func (c *CmdTarmak) Kubectl() error { From 4fb485782332f6af5925738f735cb5701888c115 Mon Sep 17 00:00:00 2001 From: JoshVanL Date: Wed, 28 Nov 2018 10:00:53 +0000 Subject: [PATCH 3/3] Updates cmd call with flags Signed-off-by: JoshVanL --- cmd/tarmak/cmd/cluster_images_destroy.go | 2 +- docs/generated/cmd/tarmak/tarmak_clusters_images_destroy.rst | 1 + 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/cmd/tarmak/cmd/cluster_images_destroy.go b/cmd/tarmak/cmd/cluster_images_destroy.go index 1da953cc51..52c0e1a8da 100644 --- a/cmd/tarmak/cmd/cluster_images_destroy.go +++ b/cmd/tarmak/cmd/cluster_images_destroy.go @@ -20,7 +20,7 @@ var clusterImagesDestroyCmd = &cobra.Command{ }, Run: func(cmd *cobra.Command, args []string) { t := tarmak.New(globalFlags) - t.CancellationContext().WaitOrCancel(t.NewCmdTarmak(args).ImagesDestroy) + t.CancellationContext().WaitOrCancel(t.NewCmdTarmak(cmd.Flags(), args).ImagesDestroy) }, } diff --git a/docs/generated/cmd/tarmak/tarmak_clusters_images_destroy.rst b/docs/generated/cmd/tarmak/tarmak_clusters_images_destroy.rst index ead2dc1b52..056467e18f 100644 --- a/docs/generated/cmd/tarmak/tarmak_clusters_images_destroy.rst +++ b/docs/generated/cmd/tarmak/tarmak_clusters_images_destroy.rst @@ -32,6 +32,7 @@ Options inherited from parent commands --current-cluster string override the current cluster set in the config --keep-containers do not clean-up terraform/packer containers after running them --log-flush-frequency duration Maximum number of seconds between log flushes (default 5s) + --public-api-endpoint Override kubeconfig to point to cluster's public API endpoint -v, --verbose enable verbose logging --wing-dev-mode use a bundled wing version rather than a tagged release from GitHub