Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Reinstate aws-janitor #14755

Merged
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
35 changes: 35 additions & 0 deletions config/jobs/kubernetes/test-infra/janitors.yaml
Original file line number Diff line number Diff line change
@@ -1,4 +1,39 @@
periodics:
- interval: 1h
name: maintenance-ci-aws-janitor
labels:
preset-service-account: "true"
spec:
containers:
- args:
- --bare
- --timeout=60
- --service-account=/etc/service-account/service-account.json
- --upload=gs://kubernetes-jenkins/logs
- --scenario=execute
- --
- /aws-janitor
- --
- --ttl=2h30m
- --path=s3://k8s-kops-prow/objs.json
env:
- name: AWS_SHARED_CREDENTIALS_FILE
value: /workspace/.aws/credentials
image: gcr.io/k8s-test-infra-aws/aws-janitor:v20190114-57d0fe238
volumeMounts:
- mountPath: /workspace/.aws
name: aws-cred
readOnly: true
volumes:
- name: aws-cred
secret:
defaultMode: 256
secretName: aws-cred-new
annotations:
testgrid-dashboards: sig-testing-maintenance
testgrid-tab-name: ci-aws-janitor
description: Deletes old AWS resources

- interval: 24h
name: maintenance-ci-janitor
labels:
Expand Down
25 changes: 12 additions & 13 deletions maintenance/aws-janitor/main.go
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,6 @@ package main

import (
"flag"
"os"
"time"

"github.com/aws/aws-sdk-go/aws"
Expand Down Expand Up @@ -54,30 +53,28 @@ func main() {
if err := resources.CleanAll(sess, *region); err != nil {
klog.Fatalf("Error cleaning all resources: %v", err)
}
} else if ok, err := markAndSweep(sess, *region); err != nil {
} else if err := markAndSweep(sess, *region); err != nil {
klog.Fatalf("Error marking and sweeping resources: %v", err)
} else if !ok {
os.Exit(1)
}
}

func markAndSweep(sess *session.Session, region string) (bool, error) {
func markAndSweep(sess *session.Session, region string) error {
s3p, err := s3path.GetPath(sess, *path)
if err != nil {
return false, errors.Wrapf(err, "-path %q isn't a valid S3 path", *path)
return errors.Wrapf(err, "-path %q isn't a valid S3 path", *path)
}

acct, err := account.GetAccount(sess, regions.Default)
if err != nil {
return false, errors.Wrap(err, "Error getting current user")
return errors.Wrap(err, "Error getting current user")
}
klog.V(1).Infof("account: %s", acct)

var regionList []string
if region == "" {
regionList, err = regions.GetAll(sess)
if err != nil {
return false, errors.Wrap(err, "Error getting available regions")
return errors.Wrap(err, "Error getting available regions")
}
} else {
regionList = []string{region}
Expand All @@ -86,27 +83,29 @@ func markAndSweep(sess *session.Session, region string) (bool, error) {

res, err := resources.LoadSet(sess, s3p, *maxTTL)
if err != nil {
return false, errors.Wrapf(err, "Error loading %q", *path)
return errors.Wrapf(err, "Error loading %q", *path)
}

for _, region := range regionList {
for _, typ := range resources.RegionalTypeList {
if err := typ.MarkAndSweep(sess, acct, region, res); err != nil {
return false, errors.Wrapf(err, "Error sweeping %T", typ)
return errors.Wrapf(err, "Error sweeping %T", typ)
}
}
}

for _, typ := range resources.GlobalTypeList {
if err := typ.MarkAndSweep(sess, acct, regions.Default, res); err != nil {
return false, errors.Wrapf(err, "Error sweeping %T", typ)
return errors.Wrapf(err, "Error sweeping %T", typ)
}
}

swept := res.MarkComplete()
if err := res.Save(sess, s3p); err != nil {
return false, errors.Wrapf(err, "Error saving %q", *path)
return errors.Wrapf(err, "Error saving %q", *path)
}

return swept == 0, nil
klog.Infof("swept %d resources", swept)

return nil
}