@@ -637,6 +637,21 @@ func (a *API) DeleteKey(name string) error {
637637 return keypairs .Delete (a .computeClient , name , nil ).ExtractErr ()
638638}
639639
640+ func (a * API ) ListKeyPairs () ([]keypairs.KeyPair , error ) {
641+ opts := keypairs.ListOpts {}
642+ // Retrieve all pages of keypairs
643+ allPages , err := keypairs .List (a .computeClient , opts ).AllPages ()
644+ if err != nil {
645+ return nil , fmt .Errorf ("failed to fetch keypair pages: %w" , err )
646+ }
647+ // Extract keypairs from the pages
648+ allKeyPairs , err := keypairs .ExtractKeyPairs (allPages )
649+ if err != nil {
650+ return nil , fmt .Errorf ("failed to extract keypairs: %w" , err )
651+ }
652+ return allKeyPairs , nil
653+ }
654+
640655func (a * API ) listServersWithMetadata (metadata map [string ]string ) ([]servers.Server , error ) {
641656 pager := servers .List (a .computeClient , servers.ListOpts {})
642657
@@ -667,7 +682,7 @@ func (a *API) listServersWithMetadata(metadata map[string]string) ([]servers.Ser
667682
668683func (a * API ) GC (gracePeriod time.Duration ) error {
669684 threshold := time .Now ().Add (- gracePeriod )
670-
685+ // Clean up servers
671686 servers , err := a .listServersWithMetadata (map [string ]string {
672687 "CreatedBy" : "mantle" ,
673688 })
@@ -683,5 +698,17 @@ func (a *API) GC(gracePeriod time.Duration) error {
683698 return fmt .Errorf ("couldn't delete server %s: %v" , server .ID , err )
684699 }
685700 }
701+ // Clean up keypairs
702+ keypairs , err := a .ListKeyPairs ()
703+ if err != nil {
704+ return err
705+ }
706+ for _ , keypair := range keypairs {
707+ if strings .HasPrefix (keypair .Name , "kola-" ) {
708+ if err := a .DeleteKey (keypair .Name ); err != nil {
709+ return fmt .Errorf ("couldn't delete keypair %s: %v" , keypair .Name , err )
710+ }
711+ }
712+ }
686713 return nil
687714}
0 commit comments