Skip to content

Commit 96336ce

Browse files
authored
ES-3323: gcp-nuke now only supports access tokens + Improved error handling + Added possibility to build release-candidates using -rc[0-9]+ + Bumping goreleaser (#193)
* Test * Lets see * New regex for releases * Added missing package * Woop * This? * More saying fatals * This is a bearer * Fixing token pasing * Forgot to save this * Cleaning up errors * Bump versions * Bumping goreleaser
1 parent 3c5e84c commit 96336ce

27 files changed

+323
-388
lines changed

.circleci/config.yml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,7 @@ jobs:
4141
enum: ["test", "release"]
4242
default: "test"
4343
docker:
44-
- image: goreleaser/goreleaser:v2.0.0
44+
- image: goreleaser/goreleaser:v2.3.1
4545
resource_class: xlarge
4646
steps:
4747
- checkout
@@ -60,7 +60,7 @@ release_filter: &release_filter
6060
branches:
6161
ignore: /.*/
6262
tags:
63-
only: /v[0-9]+.[0-9]+.[0-9]+/
63+
only: /v([0-9]+\.){2}[0-9](-rc[0-9]+)?/
6464
context: &context
6565
context:
6666
- es02-prod

README.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,7 @@ GLOBAL OPTIONS:
4242
--exclusionsconfig value, --ec value Path to exclusions config file [$EXCLUSIONS_CONFIG]
4343
--help, -h show help
4444
--version, -v print the version
45+
--gcpaccesstoken Access token to use
4546
```
4647

4748
### Example dryrun

cmd/cli.go

Lines changed: 16 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ package cmd
22

33
import (
44
"encoding/json"
5+
"fmt"
56
"log"
67
"os"
78

@@ -12,7 +13,6 @@ import (
1213

1314
// Command -
1415
func Command() {
15-
1616
app := &cli.App{
1717
Usage: "The GCP project cleanup tool with added radiation",
1818
Version: "v0.1.0",
@@ -43,19 +43,30 @@ func Command() {
4343
EnvVars: []string{"EXCLUSIONS_CONFIG"},
4444
Aliases: []string{"ec"},
4545
},
46+
&cli.StringFlag{
47+
Name: "gcpaccesstoken",
48+
Usage: "GCP token for authentication",
49+
EnvVars: []string{"GCP_ACCESS_TOKEN"},
50+
},
4651
},
4752
Action: func(c *cli.Context) error {
48-
53+
if c.String("gcpaccesstoken") == "" {
54+
return fmt.Errorf("GCP Access Token not provided")
55+
}
56+
token := config.ConvertStringToTokenSource(c.String("gcpaccesstoken"))
4957
// Behaviour to delete all resource in parallel in one project at a time - will be made into loop / concurrenct project nuke if required
5058
config := config.Config{
5159
Project: c.String("project"),
5260
DryRun: c.Bool("dryrun"),
5361
Timeout: c.Int("timeout"),
5462
PollTime: c.Int("polltime"),
5563
Context: gcp.Ctx,
56-
Zones: gcp.GetZones(gcp.Ctx, c.String("project")),
57-
Regions: gcp.GetRegions(gcp.Ctx, c.String("project")),
64+
// Zones: gcp.GetZones(gcp.Ctx, c.String("project")),
65+
// Regions: gcp.GetRegions(gcp.Ctx, c.String("project")),
66+
GCPToken: token,
5867
}
68+
gcp.AddZonesToConfig(gcp.Ctx, c.String("project"), config)
69+
gcp.AddRegionsToConfig(gcp.Ctx, c.String("project"), config)
5970

6071
if c.String("exclusionsconfig") != "" {
6172
// Read exclusions config file and marshall into Config.Exclusions struct
@@ -83,6 +94,6 @@ func Command() {
8394

8495
err := app.Run(os.Args)
8596
if err != nil {
86-
log.Fatal(err)
97+
log.Fatalf("app.Run: %s", err)
8798
}
8899
}

config/config.go

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,8 @@ package config
22

33
import (
44
"context"
5+
6+
"golang.org/x/oauth2"
57
)
68

79
// Config -
@@ -14,6 +16,7 @@ type Config struct {
1416
Context context.Context
1517
DryRun bool
1618
Exclusions Exclusions
19+
GCPToken oauth2.TokenSource
1720
}
1821

1922
type Exclusions struct {
@@ -35,3 +38,7 @@ type Exclusions struct {
3538
GoogleComputeNetwork []string `json:"google_compute_network"`
3639
IAMServiceAccount []string `json:"iam_service_account"`
3740
}
41+
42+
func ConvertStringToTokenSource(token string) oauth2.TokenSource {
43+
return oauth2.StaticTokenSource(&oauth2.Token{AccessToken: token, TokenType: "Bearer"})
44+
}

gcp/bigquery_dataset.go

Lines changed: 12 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ import (
1212
"golang.org/x/sync/errgroup"
1313
"golang.org/x/sync/syncmap"
1414
"google.golang.org/api/bigquery/v2"
15+
"google.golang.org/api/option"
1516
)
1617

1718
type BigQueryDataset struct {
@@ -21,30 +22,26 @@ type BigQueryDataset struct {
2122
DatasetIDs []string
2223
}
2324

24-
func init() {
25-
26-
bigqueryService, err := bigquery.NewService(Ctx)
27-
if err != nil {
28-
log.Fatal(err)
29-
}
30-
31-
bigqueryResource := BigQueryDataset{
32-
serviceClient: bigqueryService,
33-
}
34-
register(&bigqueryResource)
35-
}
36-
3725
func (c *BigQueryDataset) Name() string {
3826
return "BigQueryDataset"
3927
}
4028

4129
func (c *BigQueryDataset) ToSlice() (slice []string) {
4230
return helpers.SortedSyncMapKeys(&c.resourceMap)
43-
4431
}
4532

4633
func (c *BigQueryDataset) Setup(config config.Config) {
4734
c.base.config = config
35+
36+
bigqueryService, err := bigquery.NewService(Ctx, option.WithTokenSource(config.GCPToken))
37+
if err != nil {
38+
log.Fatalf("BigQueryDataset.Setup.NewService: %s", err)
39+
}
40+
41+
bigqueryResource := BigQueryDataset{
42+
serviceClient: bigqueryService,
43+
}
44+
register(&bigqueryResource)
4845
}
4946

5047
func (c *BigQueryDataset) List(refreshCache bool) []string {
@@ -56,13 +53,11 @@ func (c *BigQueryDataset) List(refreshCache bool) []string {
5653

5754
datasetList, err := c.serviceClient.Datasets.List(c.base.config.Project).Context(Ctx).Do()
5855
if err != nil {
59-
log.Fatal(err)
56+
log.Fatalf("BigQueryDataset.List: %s", err)
6057
}
6158

6259
for _, dataset := range datasetList.Datasets {
63-
6460
c.resourceMap.Store(dataset.Id, dataset.DatasetReference.DatasetId)
65-
6661
}
6762

6863
return c.ToSlice()
@@ -74,7 +69,6 @@ func (c *BigQueryDataset) Dependencies() []string {
7469
}
7570

7671
func (c *BigQueryDataset) Remove() error {
77-
7872
client, err := bq.NewClient(Ctx, c.base.config.Project)
7973
if err != nil {
8074
return fmt.Errorf("bigquery.NewClient: %v", err)
@@ -105,7 +99,6 @@ func (c *BigQueryDataset) Remove() error {
10599
log.Printf("[Info] Resource currently being deleted %v [type: %v project: %v ] (%v seconds)", datasetID, c.Name(), c.base.config.Project, seconds)
106100
tableList, _ := c.serviceClient.Tables.List(c.base.config.Project, datasetID).Context(Ctx).Do()
107101
if tableList == nil {
108-
109102
deletedTables = true
110103
}
111104

gcp/compute_disks.go

Lines changed: 10 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ import (
1212
"golang.org/x/sync/errgroup"
1313
"golang.org/x/sync/syncmap"
1414
"google.golang.org/api/compute/v1"
15+
"google.golang.org/api/option"
1516
)
1617

1718
// ComputeDisks -
@@ -21,17 +22,6 @@ type ComputeDisks struct {
2122
resourceMap syncmap.Map
2223
}
2324

24-
func init() {
25-
computeService, err := compute.NewService(Ctx)
26-
if err != nil {
27-
log.Fatal(err)
28-
}
29-
computeResource := ComputeDisks{
30-
serviceClient: computeService,
31-
}
32-
register(&computeResource)
33-
}
34-
3525
// Name - Name of the resourceLister for ComputeDisks
3626
func (c *ComputeDisks) Name() string {
3727
return "ComputeDisks"
@@ -40,13 +30,20 @@ func (c *ComputeDisks) Name() string {
4030
// ToSlice - Name of the resourceLister for ComputeDisks
4131
func (c *ComputeDisks) ToSlice() (slice []string) {
4232
return helpers.SortedSyncMapKeys(&c.resourceMap)
43-
4433
}
4534

4635
// Setup - populates the struct
4736
func (c *ComputeDisks) Setup(config config.Config) {
4837
c.base.config = config
4938

39+
computeService, err := compute.NewService(Ctx, option.WithTokenSource(config.GCPToken))
40+
if err != nil {
41+
log.Fatalf("ComputeDisks.Setup.NewService: %s", err)
42+
}
43+
computeResource := ComputeDisks{
44+
serviceClient: computeService,
45+
}
46+
register(&computeResource)
5047
}
5148

5249
// List - Returns a list of all ComputeDisks
@@ -61,7 +58,7 @@ func (c *ComputeDisks) List(refreshCache bool) []string {
6158
instanceListCall := c.serviceClient.Disks.List(c.base.config.Project, zone)
6259
instanceList, err := instanceListCall.Do()
6360
if err != nil {
64-
log.Fatal(err)
61+
log.Fatalf("ComputeDisks.List: %s", err)
6562
}
6663

6764
for _, instance := range instanceList.Items {
@@ -85,7 +82,6 @@ func (c *ComputeDisks) Dependencies() []string {
8582

8683
// Remove -
8784
func (c *ComputeDisks) Remove() error {
88-
8985
// Removal logic
9086
errs, _ := errgroup.WithContext(c.base.config.Context)
9187

gcp/compute_firewalls.go

Lines changed: 10 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ import (
1212
"golang.org/x/sync/errgroup"
1313
"golang.org/x/sync/syncmap"
1414
"google.golang.org/api/compute/v1"
15+
"google.golang.org/api/option"
1516
)
1617

1718
// ComputeFirewalls -
@@ -21,17 +22,6 @@ type ComputeFirewalls struct {
2122
resourceMap syncmap.Map
2223
}
2324

24-
func init() {
25-
computeService, err := compute.NewService(Ctx)
26-
if err != nil {
27-
log.Fatal(err)
28-
}
29-
computeResource := ComputeFirewalls{
30-
serviceClient: computeService,
31-
}
32-
register(&computeResource)
33-
}
34-
3525
// Name - Name of the resourceLister for ComputeFirewalls
3626
func (c *ComputeFirewalls) Name() string {
3727
return "ComputeFirewalls"
@@ -40,13 +30,20 @@ func (c *ComputeFirewalls) Name() string {
4030
// ToSlice - Name of the resourceLister for ComputeFirewalls
4131
func (c *ComputeFirewalls) ToSlice() (slice []string) {
4232
return helpers.SortedSyncMapKeys(&c.resourceMap)
43-
4433
}
4534

4635
// Setup - populates the struct
4736
func (c *ComputeFirewalls) Setup(config config.Config) {
4837
c.base.config = config
4938

39+
computeService, err := compute.NewService(Ctx, option.WithTokenSource(config.GCPToken))
40+
if err != nil {
41+
log.Fatalf("ComputeFirewalls.Setup.NewService: %s", err)
42+
}
43+
computeResource := ComputeFirewalls{
44+
serviceClient: computeService,
45+
}
46+
register(&computeResource)
5047
}
5148

5249
// List - Returns a list of all ComputeFirewalls
@@ -60,7 +57,7 @@ func (c *ComputeFirewalls) List(refreshCache bool) []string {
6057
firewallListCall := c.serviceClient.Firewalls.List(c.base.config.Project)
6158
firewallList, err := firewallListCall.Do()
6259
if err != nil {
63-
log.Fatal(err)
60+
log.Fatalf("ComputeFirewalls.List: %s", err)
6461
}
6562

6663
for _, firewall := range firewallList.Items {
@@ -79,7 +76,6 @@ func (c *ComputeFirewalls) Dependencies() []string {
7976

8077
// Remove -
8178
func (c *ComputeFirewalls) Remove() error {
82-
8379
// Removal logic
8480
errs, _ := errgroup.WithContext(c.base.config.Context)
8581

gcp/compute_instance_groups_region.go

Lines changed: 10 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ import (
1212
"golang.org/x/sync/errgroup"
1313
"golang.org/x/sync/syncmap"
1414
"google.golang.org/api/compute/v1"
15+
"google.golang.org/api/option"
1516
)
1617

1718
// ComputeInstanceGroupsRegion -
@@ -21,17 +22,6 @@ type ComputeInstanceGroupsRegion struct {
2122
resourceMap syncmap.Map
2223
}
2324

24-
func init() {
25-
computeService, err := compute.NewService(Ctx)
26-
if err != nil {
27-
log.Fatal(err)
28-
}
29-
computeResource := ComputeInstanceGroupsRegion{
30-
serviceClient: computeService,
31-
}
32-
register(&computeResource)
33-
}
34-
3525
// Name - Name of the resourceLister for ComputeInstanceGroupsRegion
3626
func (c *ComputeInstanceGroupsRegion) Name() string {
3727
return "ComputeInstanceGroupsRegion"
@@ -40,13 +30,20 @@ func (c *ComputeInstanceGroupsRegion) Name() string {
4030
// ToSlice - Name of the resourceLister for ComputeInstanceGroupsRegion
4131
func (c *ComputeInstanceGroupsRegion) ToSlice() (slice []string) {
4232
return helpers.SortedSyncMapKeys(&c.resourceMap)
43-
4433
}
4534

4635
// Setup - populates the struct
4736
func (c *ComputeInstanceGroupsRegion) Setup(config config.Config) {
4837
c.base.config = config
4938

39+
computeService, err := compute.NewService(Ctx, option.WithTokenSource(config.GCPToken))
40+
if err != nil {
41+
log.Fatalf("ComputeInstanceGroupsRegion.Setup.NewService: %s", err)
42+
}
43+
computeResource := ComputeInstanceGroupsRegion{
44+
serviceClient: computeService,
45+
}
46+
register(&computeResource)
5047
}
5148

5249
// List - Returns a list of all ComputeInstanceGroupsRegion
@@ -61,7 +58,7 @@ func (c *ComputeInstanceGroupsRegion) List(refreshCache bool) []string {
6158
instanceListCall := c.serviceClient.RegionInstanceGroupManagers.List(c.base.config.Project, region)
6259
instanceList, err := instanceListCall.Do()
6360
if err != nil {
64-
log.Fatal(err)
61+
log.Fatalf("ComputeInstanceGroupsRegion.List: %s", err)
6562
}
6663

6764
for _, instance := range instanceList.Items {
@@ -82,7 +79,6 @@ func (c *ComputeInstanceGroupsRegion) Dependencies() []string {
8279

8380
// Remove -
8481
func (c *ComputeInstanceGroupsRegion) Remove() error {
85-
8682
// Removal logic
8783
errs, _ := errgroup.WithContext(c.base.config.Context)
8884

0 commit comments

Comments
 (0)