@@ -637,6 +637,22 @@ 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+
655+
640656func (a * API ) listServersWithMetadata (metadata map [string ]string ) ([]servers.Server , error ) {
641657 pager := servers .List (a .computeClient , servers.ListOpts {})
642658
@@ -667,7 +683,7 @@ func (a *API) listServersWithMetadata(metadata map[string]string) ([]servers.Ser
667683
668684func (a * API ) GC (gracePeriod time.Duration ) error {
669685 threshold := time .Now ().Add (- gracePeriod )
670-
686+ // Clean up servers
671687 servers , err := a .listServersWithMetadata (map [string ]string {
672688 "CreatedBy" : "mantle" ,
673689 })
@@ -683,5 +699,17 @@ func (a *API) GC(gracePeriod time.Duration) error {
683699 return fmt .Errorf ("couldn't delete server %s: %v" , server .ID , err )
684700 }
685701 }
702+ // Clean up keypairs
703+ keypairs , err := a .ListKeyPairs ()
704+ if err != nil {
705+ return err
706+ }
707+ for _ , keypair := range keypairs {
708+ if strings .HasPrefix (keypair .Name , "kola-" ) {
709+ if err := a .DeleteKey (keypair .Name ); err != nil {
710+ return fmt .Errorf ("couldn't delete keypair %s: %v" , keypair .Name , err )
711+ }
712+ }
713+ }
686714 return nil
687715}
0 commit comments