Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Add destroy implementation for kubevirt platform
- Loading branch information
Showing
5 changed files
with
109 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -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 |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -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 | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,2 @@ | ||
// Package kubevirt provides a cluster-destroyer for kubevirt clusters. | ||
package kubevirt |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,7 @@ | ||
package kubevirt | ||
|
||
import "github.com/openshift/installer/pkg/destroy/providers" | ||
|
||
func init() { | ||
providers.Registry["kubevirt"] = New | ||
} |