Skip to content
This repository has been archived by the owner on May 7, 2021. It is now read-only.

Commit

Permalink
platform/api/azure: update GC to delete old bootdiagnostics
Browse files Browse the repository at this point in the history
Currently a bootdiagnostic container is generated for every instance,
this extends the current Azure GC command to also delete these from
the kola storage account.
  • Loading branch information
arithx committed Dec 13, 2017
1 parent 08178d5 commit 6081da4
Show file tree
Hide file tree
Showing 2 changed files with 56 additions and 8 deletions.
40 changes: 32 additions & 8 deletions platform/api/azure/api.go
Expand Up @@ -100,29 +100,53 @@ func randomName(prefix string) string {
}

func (a *API) GC(gracePeriod time.Duration) error {
list, err := a.ListResourceGroups("")
durationAgo := time.Now().Add(-1 * gracePeriod)

listGroups, err := a.ListResourceGroups("")
if err != nil {
return err
return fmt.Errorf("listing resource groups: %v", err)
}

durationAgo := time.Now().Add(-1 * gracePeriod)

for _, l := range *list.Value {
for _, l := range *listGroups.Value {
if strings.HasPrefix(*l.Name, "kola-cluster") {
createdAt := *(*l.Tags)["createdAt"]
timeCreated, err := time.Parse(time.RFC3339, createdAt)
if err != nil {
return fmt.Errorf("error parsing time: %v", err)
}
if timeCreated.After(durationAgo) {
return fmt.Errorf("skipping resource group %s due to being too new", *l.Name)
} else {
if !timeCreated.After(durationAgo) {
if err = a.TerminateResourceGroup(*l.Name); err != nil {
return err
}
}
}
}

kr, err := a.GetStorageServiceKeysARM("kola")
if err != nil {
return fmt.Errorf("fetching storage service keys: %v", err)
}

for _, k := range *kr.Keys {
listContainers, err := a.ListStorageContainers("kola", *k.Value, "bootdiagnostics-kola")
if err != nil {
return fmt.Errorf("listing storage containers: %v", err)
}

for _, l := range listContainers.Containers {
timeModified, err := time.Parse(time.RFC1123, l.Properties.LastModified)
if err != nil {
return fmt.Errorf("error parsing time: %v", err)
}
if !timeModified.After(durationAgo) {
if err = a.TerminateStorageContainer("kola", *k.Value, l.Name); err != nil {
return err
}
}
}

break
}

return nil
}
24 changes: 24 additions & 0 deletions platform/api/azure/storage_mit.go
Expand Up @@ -42,6 +42,30 @@ const pageBlobPageSize int64 = 2 * 1024 * 1024

type BlobExistsError string

func (a *API) ListStorageContainers(storageaccount, storagekey, prefix string) (storage.ContainerListResponse, error) {
sc, err := storage.NewClient(storageaccount, storagekey, a.opts.StorageEndpointSuffix, storage.DefaultAPIVersion, true)
if err != nil {
return storage.ContainerListResponse{}, err
}

bsc := sc.GetBlobService()

return bsc.ListContainers(storage.ListContainersParameters{
Prefix: prefix,
})
}

func (a *API) TerminateStorageContainer(storageaccount, storagekey, name string) error {
sc, err := storage.NewClient(storageaccount, storagekey, a.opts.StorageEndpointSuffix, storage.DefaultAPIVersion, true)
if err != nil {
return err
}

bsc := sc.GetBlobService()

return bsc.DeleteContainer(name)
}

func (be BlobExistsError) Error() string {
return fmt.Sprintf("blob %q already exists", string(be))
}
Expand Down

0 comments on commit 6081da4

Please sign in to comment.