From 4b4b32df285fbb0d43068d63ce26d2c8b6f42cd7 Mon Sep 17 00:00:00 2001 From: gursewak1997 Date: Wed, 4 Dec 2024 22:13:44 -0800 Subject: [PATCH] mantle: Expand openstack gc to keypairs --- mantle/cmd/ore/openstack/gc.go | 2 +- mantle/platform/api/openstack/api.go | 29 +++++++++++++++++++++++++++- 2 files changed, 29 insertions(+), 2 deletions(-) diff --git a/mantle/cmd/ore/openstack/gc.go b/mantle/cmd/ore/openstack/gc.go index 6439a4df91..39a51cecb1 100644 --- a/mantle/cmd/ore/openstack/gc.go +++ b/mantle/cmd/ore/openstack/gc.go @@ -26,7 +26,7 @@ var ( cmdGC = &cobra.Command{ Use: "gc", Short: "GC resources in OpenStack", - Long: `Delete instances created over the given duration ago`, + Long: `Delete instances and keypairs created over the given duration ago`, RunE: runGC, SilenceUsage: true, diff --git a/mantle/platform/api/openstack/api.go b/mantle/platform/api/openstack/api.go index c2b1cfff5d..7b4f0352ea 100644 --- a/mantle/platform/api/openstack/api.go +++ b/mantle/platform/api/openstack/api.go @@ -637,6 +637,21 @@ func (a *API) DeleteKey(name string) error { return keypairs.Delete(a.computeClient, name, nil).ExtractErr() } +func (a *API) ListKeyPairs() ([]keypairs.KeyPair, error) { + opts := keypairs.ListOpts{} + // Retrieve all pages of keypairs + allPages, err := keypairs.List(a.computeClient, opts).AllPages() + if err != nil { + return nil, fmt.Errorf("failed to fetch keypair pages: %w", err) + } + // Extract keypairs from the pages + allKeyPairs, err := keypairs.ExtractKeyPairs(allPages) + if err != nil { + return nil, fmt.Errorf("failed to extract keypairs: %w", err) + } + return allKeyPairs, nil +} + func (a *API) listServersWithMetadata(metadata map[string]string) ([]servers.Server, error) { pager := servers.List(a.computeClient, servers.ListOpts{}) @@ -667,7 +682,7 @@ func (a *API) listServersWithMetadata(metadata map[string]string) ([]servers.Ser func (a *API) GC(gracePeriod time.Duration) error { threshold := time.Now().Add(-gracePeriod) - + // Clean up servers servers, err := a.listServersWithMetadata(map[string]string{ "CreatedBy": "mantle", }) @@ -683,5 +698,17 @@ func (a *API) GC(gracePeriod time.Duration) error { return fmt.Errorf("couldn't delete server %s: %v", server.ID, err) } } + // Clean up keypairs + keypairs, err := a.ListKeyPairs() + if err != nil { + return err + } + for _, keypair := range keypairs { + if strings.HasPrefix(keypair.Name, "kola-") { + if err := a.DeleteKey(keypair.Name); err != nil { + return fmt.Errorf("couldn't delete keypair %s: %v", keypair.Name, err) + } + } + } return nil }