Skip to content

Commit

Permalink
Add destroy implementation for kubevirt platform
Browse files Browse the repository at this point in the history
  • Loading branch information
nirarg committed Nov 10, 2020
1 parent a871af2 commit 69b999d
Show file tree
Hide file tree
Showing 5 changed files with 109 additions and 0 deletions.
1 change: 1 addition & 0 deletions cmd/openshift-install/destroy.go
Expand Up @@ -15,6 +15,7 @@ import (
_ "github.com/openshift/installer/pkg/destroy/baremetal"
"github.com/openshift/installer/pkg/destroy/bootstrap"
_ "github.com/openshift/installer/pkg/destroy/gcp"
_ "github.com/openshift/installer/pkg/destroy/kubevirt"
_ "github.com/openshift/installer/pkg/destroy/libvirt"
_ "github.com/openshift/installer/pkg/destroy/openstack"
_ "github.com/openshift/installer/pkg/destroy/ovirt"
Expand Down
7 changes: 7 additions & 0 deletions pkg/destroy/kubevirt/OWNERS
@@ -0,0 +1,7 @@
# See the OWNERS docs: https://git.k8s.io/community/contributors/guide/owners.md
# This file just uses aliases defined in OWNERS_ALIASES.

approvers:
- kubevirt-approvers
reviewers:
- kubevirt-reviewers
92 changes: 92 additions & 0 deletions pkg/destroy/kubevirt/destroyer.go
@@ -0,0 +1,92 @@
package kubevirt

import (
"github.com/sirupsen/logrus"

ickubevirt "github.com/openshift/installer/pkg/asset/installconfig/kubevirt"
"github.com/openshift/installer/pkg/destroy/providers"
"github.com/openshift/installer/pkg/types"
)

// ClusterUninstaller holds the various options for the cluster we want to delete.
type ClusterUninstaller struct {
Metadata types.ClusterMetadata
Logger logrus.FieldLogger
}

// Run is the entrypoint to start the uninstall process.
func (uninstaller *ClusterUninstaller) Run() error {
namespace := uninstaller.Metadata.Kubevirt.Namespace
labels := uninstaller.Metadata.Kubevirt.Labels

kubevirtClient, err := ickubevirt.NewClient()
if err != nil {
return err
}
if err := uninstaller.deleteAllVMs(namespace, labels, kubevirtClient); err != nil {
return err
}
if err := uninstaller.deleteAllDVs(namespace, labels, kubevirtClient); err != nil {
return err
}
if err := uninstaller.deleteAllSecrets(namespace, labels, kubevirtClient); err != nil {
return err
}
return nil
}

func (uninstaller *ClusterUninstaller) deleteAllVMs(namespace string, labels map[string]string, kubevirtClient ickubevirt.Client) error {
list, err := kubevirtClient.ListVirtualMachineNames(namespace, labels)
if err != nil {
return err
}
uninstaller.Logger.Infof("List tenant cluster's VMs (in namespace %s) return: %s", namespace, list)
for _, vmName := range list {
uninstaller.Logger.Infof("Delete VM %s", vmName)
if err := kubevirtClient.DeleteVirtualMachine(namespace, vmName, true); err != nil {
// TODO Do we want to continue to other resources?
return err
}
}
return nil
}

func (uninstaller *ClusterUninstaller) deleteAllDVs(namespace string, labels map[string]string, kubevirtClient ickubevirt.Client) error {
list, err := kubevirtClient.ListDataVolumeNames(namespace, labels)
if err != nil {
return err
}
uninstaller.Logger.Infof("List tenant cluster's DVs (in namespace %s) return: %s", namespace, list)
for _, dvName := range list {
uninstaller.Logger.Infof("Delete DV %s", dvName)
if err := kubevirtClient.DeleteDataVolume(namespace, dvName, true); err != nil {
// TODO Do we want to continue to other resources?
return err
}
}
return nil
}

func (uninstaller *ClusterUninstaller) deleteAllSecrets(namespace string, labels map[string]string, kubevirtClient ickubevirt.Client) error {
list, err := kubevirtClient.ListSecretNames(namespace, labels)
if err != nil {
return err
}
uninstaller.Logger.Infof("List tenant cluster's secrets (in namespace %s) return: %s", namespace, list)
for _, secretName := range list {
uninstaller.Logger.Infof("Delete secret %s", secretName)
if err := kubevirtClient.DeleteSecret(namespace, secretName, true); err != nil {
// TODO Do we want to continue to other resources?
return err
}
}
return nil
}

// New returns oVirt Uninstaller from ClusterMetadata.
func New(logger logrus.FieldLogger, metadata *types.ClusterMetadata) (providers.Destroyer, error) {
return &ClusterUninstaller{
Metadata: *metadata,
Logger: logger,
}, nil
}
2 changes: 2 additions & 0 deletions pkg/destroy/kubevirt/doc.go
@@ -0,0 +1,2 @@
// Package kubevirt provides a cluster-destroyer for kubevirt clusters.
package kubevirt
7 changes: 7 additions & 0 deletions pkg/destroy/kubevirt/register.go
@@ -0,0 +1,7 @@
package kubevirt

import "github.com/openshift/installer/pkg/destroy/providers"

func init() {
providers.Registry["kubevirt"] = New
}

0 comments on commit 69b999d

Please sign in to comment.