Skip to content

Commit 2552f37

Browse files
authored
Massive overhaul (#181)
* massive overhaul
1 parent f7f20ec commit 2552f37

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

66 files changed

+1894
-5662
lines changed

cli/cmd/apply.go

+28-27
Original file line numberDiff line numberDiff line change
@@ -30,22 +30,30 @@ var applyCmd = &cobra.Command{
3030
Use: "apply",
3131
Short: "Create or Update GKE Demo Environment",
3232
Example: ` gkekitctl apply
33-
gkekitctl apply --config <file.yaml>`,
33+
gkekitctl apply --config <file.yaml>
34+
gkekitctl apply --config <file.yaml> -g <cluster-tfstate-clusters> -v <cluster-tfstate-network> -f <cluster-tfstate-fleet>`,
3435
Run: func(cmd *cobra.Command, args []string) {
36+
bucketNameNetwork, err := cmd.Flags().GetString("vpcstate")
37+
if err != nil {
38+
log.Errorf("🚨Failed to get bucketNameSharedVPC value from flag: %s", err)
39+
}
40+
if bucketNameNetwork != "" {
41+
log.Infof("✅ Terraform state storage bucket for shared VPC is %s", bucketNameNetwork)
42+
}
43+
bucketNameFleet, err := cmd.Flags().GetString("fleetstate")
44+
if err != nil {
45+
log.Errorf("🚨Failed to get bucketNameFleet value from flag: %s", err)
46+
}
47+
if bucketNameFleet != "" {
48+
log.Infof("✅ Terraform state storage bucket for Fleet is %s", bucketNameFleet)
49+
}
3550
bucketNameClusters, err := cmd.Flags().GetString("gkestate")
3651
if err != nil {
3752
log.Errorf("🚨Failed to get bucketNameClusters value from flag: %s", err)
3853
}
3954
if bucketNameClusters != "" {
4055
log.Infof("✅ Terraform state storage bucket for clusters is %s", bucketNameClusters)
4156
}
42-
bucketNameSharedVPC, err := cmd.Flags().GetString("vpcstate")
43-
if err != nil {
44-
log.Errorf("🚨Failed to get bucketNameSharedVPC value from flag: %s", err)
45-
}
46-
if bucketNameSharedVPC != "" {
47-
log.Infof("✅ Terraform state storage bucket for shared VPC is %s", bucketNameSharedVPC)
48-
}
4957

5058
log.Info("👟 Started config validation...")
5159
conf := config.InitConf(cfgFile)
@@ -59,46 +67,39 @@ var applyCmd = &cobra.Command{
5967
config.GenerateTfvars(conf)
6068

6169
log.Info("👟 Started configuring TF State...")
62-
err = config.CheckTfStateType(conf, bucketNameClusters, bucketNameSharedVPC)
70+
err = config.CheckTfStateType(conf, bucketNameNetwork, bucketNameFleet, bucketNameClusters)
6371

6472
if err != nil {
6573
log.Errorf("🚨 Failed setting up TF state: %s", err)
6674
} else {
6775
log.Info("✅ TF state configured successfully.")
6876
}
6977

70-
if conf.VpcConfig.VpcType == "shared" {
71-
lifecycle.InitTF("shared_vpc")
72-
lifecycle.ApplyTF("shared_vpc")
73-
}
74-
lifecycle.InitTF("cluster_build")
75-
lifecycle.ApplyTF("cluster_build")
78+
lifecycle.InitTF("network")
79+
lifecycle.ApplyTF("network")
80+
lifecycle.InitTF("fleet")
81+
lifecycle.ApplyTF("fleet")
82+
lifecycle.InitTF("clusters")
83+
lifecycle.ApplyTF("clusters")
7684

7785
// Authenticate Kubernetes client-go to all clusters
7886
log.Info("☸️ Generating Kubeconfig...")
79-
kc, err := lifecycle.GenerateKubeConfig(conf)
87+
kc, err := lifecycle.GenerateKubeConfig(conf.FleetProjectID)
8088
if err != nil {
8189
log.Errorf("🚨 Failed to generate kube config: %s", err)
8290
} else {
8391
log.Infof("✅ Kubeconfig generated: %+v", kc)
8492
}
85-
86-
// Verify access to Kubernetes API on all clusters
87-
log.Info("☸️ Verifying Kubernetes API access for all clusters...")
88-
err = lifecycle.ListNamespaces(kc)
89-
if err != nil {
90-
log.Errorf("🚨 Failed API access check on clusters: %s", err)
91-
} else {
92-
log.Info("✅ Clusters API access check passed.")
93-
}
9493
},
9594
}
9695

9796
func init() {
9897
var bucketNameClusters string
99-
var bucketNameSharedVPC string
98+
var bucketNameNetwork string
99+
var bucketNameFleet string
100100

101101
rootCmd.AddCommand(applyCmd)
102102
applyCmd.Flags().StringVarP(&bucketNameClusters, "gkestate", "g", "", "GKE Tf State bucket name")
103-
applyCmd.Flags().StringVarP(&bucketNameSharedVPC, "vpcstate", "v", "", "Shared VPC Tf State bucket name")
103+
applyCmd.Flags().StringVarP(&bucketNameNetwork, "vpcstate", "v", "", "Network Tf State bucket name")
104+
applyCmd.Flags().StringVarP(&bucketNameFleet, "fleetstate", "f", "", "Fleet Tf State bucket name")
104105
}

cli/cmd/connect.go

+48
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,48 @@
1+
/*
2+
Copyright © 2020 Google Inc.
3+
4+
Licensed under the Apache License, Version 2.0 (the "License");
5+
you may not use this file except in compliance with the License.
6+
You may obtain a copy of the License at
7+
8+
http://www.apache.org/licenses/LICENSE-2.0
9+
10+
Unless required by applicable law or agreed to in writing, software
11+
distributed under the License is distributed on an "AS IS" BASIS,
12+
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13+
See the License for the specific language governing permissions and
14+
limitations under the License.
15+
*/
16+
package cmd
17+
18+
import (
19+
"gkekitctl/pkg/lifecycle"
20+
21+
log "github.com/sirupsen/logrus"
22+
23+
"github.com/spf13/cobra"
24+
)
25+
26+
// connectCmd represents the connect command
27+
var connectCmd = &cobra.Command{
28+
Use: "connect",
29+
Short: "connect for all clusters in GKE Demo Environment",
30+
Example: ` gkekitctl connect -p <fleet-project-id>`,
31+
32+
Run: func(cmd *cobra.Command, args []string) {
33+
log.Println("Getting credentials...")
34+
// conf := config.InitConf(cfgFile)
35+
36+
log.Info("☸️ Generating Kubeconfig...")
37+
kc, err := lifecycle.GenerateKubeConfig(fleetProjectId)
38+
if err != nil {
39+
log.Errorf("🚨 Failed to generate kube config: %s", err)
40+
} else {
41+
log.Infof("✅ Kubeconfig generated: %+v", kc)
42+
}
43+
},
44+
}
45+
46+
func init() {
47+
rootCmd.AddCommand(connectCmd)
48+
}

cli/cmd/delete.go

+3-6
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,6 @@ limitations under the License.
1616
package cmd
1717

1818
import (
19-
"gkekitctl/pkg/config"
2019
"gkekitctl/pkg/lifecycle"
2120

2221
log "github.com/sirupsen/logrus"
@@ -32,11 +31,9 @@ var deleteCmd = &cobra.Command{
3231

3332
Run: func(cmd *cobra.Command, args []string) {
3433
log.Println("Starting delete...")
35-
conf := config.InitConf(cfgFile)
36-
if conf.VpcConfig.VpcType == "shared" {
37-
lifecycle.DestroyTF("shared_vpc")
38-
}
39-
lifecycle.DestroyTF("cluster_build")
34+
lifecycle.DestroyTF("clusters")
35+
lifecycle.DestroyTF("fleet")
36+
lifecycle.DestroyTF("network")
4037

4138
},
4239
}

cli/cmd/init.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@ var initCmd = &cobra.Command{
2828
Short: "Initialize local environment for the cli",
2929
Example: ` gkekitctl init`,
3030
Run: func(cmd *cobra.Command, args []string) {
31-
folders := []string{"samples", "templates", "cluster_build", "shared_vpc"}
31+
folders := []string{"samples", "templates", "clusters", "network", "fleet"}
3232
err := cli_init.InitFlatFiles(folders)
3333
if err != nil {
3434
log.Errorf("🚨 Failed to initialize gkekitctl: %v", err)

cli/cmd/root.go

+2-14
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@ import (
2323
)
2424

2525
var cfgFile string
26+
var fleetProjectId string
2627

2728
var (
2829
Version string
@@ -37,15 +38,6 @@ var rootCmd = &cobra.Command{
3738
Example: ` gkekitctl create
3839
gkectl create --config <file.yaml>
3940
gkekitctl delete`,
40-
41-
// Uncomment the following line if your bare application
42-
// has an action associated with it:
43-
// Run: func(cmd *cobra.Command, args []string) {
44-
// out := cmd.OutOrStdout()
45-
46-
// fmt.Fprintln(out, "Terraform state will be stored:", viper.GetString("terraformState"))
47-
// fmt.Fprintln(out, conf.ConfigSync)
48-
// },
4941
}
5042

5143
// Execute adds all child commands to the root command and sets flags appropriately.
@@ -62,6 +54,7 @@ func init() {
6254
// will be global for your application.
6355

6456
rootCmd.PersistentFlags().StringVarP(&cfgFile, "config", "c", "", "config file (default is /.gkekitctl.yaml)")
57+
rootCmd.PersistentFlags().StringVarP(&fleetProjectId, "fleet-project-id", "p", "", "Fleet project ID")
6558

6659
// Cobra also supports local flags, which will only run
6760
// when this action is called directly.
@@ -77,11 +70,6 @@ func initConfig() {
7770
// Use config file from the flag.
7871
viper.SetConfigFile(cfgFile)
7972
} else {
80-
// Find home directory.
81-
// home, err := os.UserHomeDir()
82-
// cobra.CheckErr(err)
83-
84-
// Search config in home directory with name ".gkekitctl" (without extension).
8573
viper.AddConfigPath(".")
8674
viper.SetConfigType("yaml")
8775
viper.SetConfigName(".gkekitctl")

cli/go.mod

+92-7
Original file line numberDiff line numberDiff line change
@@ -1,21 +1,106 @@
11
module gkekitctl
22

3-
go 1.16
3+
go 1.22
44

55
require (
6-
cloud.google.com/go/compute v1.10.0
7-
cloud.google.com/go/serviceusage v1.0.0
8-
cloud.google.com/go/storage v1.27.0
6+
cloud.google.com/go/compute v1.28.1
7+
cloud.google.com/go/serviceusage v1.9.1
8+
cloud.google.com/go/storage v1.43.0
99
github.com/gofrs/uuid v4.1.0+incompatible
10-
github.com/hashicorp/go-getter v1.7.1 // indirect
1110
github.com/hashicorp/terraform-exec v0.15.0
1211
github.com/manifoldco/promptui v0.9.0
1312
github.com/sirupsen/logrus v1.8.1
1413
github.com/spf13/cobra v1.2.1
1514
github.com/spf13/viper v1.9.0
1615
github.com/thanhpk/randstr v1.0.4
17-
google.golang.org/api v0.100.0
18-
google.golang.org/genproto v0.0.0-20221025140454-527a21cfbd71
16+
google.golang.org/api v0.196.0
17+
google.golang.org/genproto v0.0.0-20240924160255-9d4c2d233b61
18+
google.golang.org/genproto/googleapis/api/serviceusage v0.0.0-20240930140551-af27646dc61f
1919
k8s.io/apimachinery v0.22.4
2020
k8s.io/client-go v0.22.4
2121
)
22+
23+
require (
24+
cloud.google.com/go/auth v0.9.3 // indirect
25+
cloud.google.com/go/auth/oauth2adapt v0.2.4 // indirect
26+
cloud.google.com/go/compute/metadata v0.5.0 // indirect
27+
cloud.google.com/go/longrunning v0.6.1 // indirect
28+
github.com/felixge/httpsnoop v1.0.4 // indirect
29+
github.com/go-logr/stdr v1.2.2 // indirect
30+
github.com/google/s2a-go v0.1.8 // indirect
31+
go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.54.0 // indirect
32+
go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.54.0 // indirect
33+
go.opentelemetry.io/otel v1.29.0 // indirect
34+
go.opentelemetry.io/otel/metric v1.29.0 // indirect
35+
go.opentelemetry.io/otel/trace v1.29.0 // indirect
36+
golang.org/x/sync v0.8.0 // indirect
37+
google.golang.org/genproto/googleapis/api v0.0.0-20240924160255-9d4c2d233b61 // indirect
38+
google.golang.org/genproto/googleapis/rpc v0.0.0-20240903143218-8af14fe29dc1 // indirect
39+
)
40+
41+
require (
42+
cloud.google.com/go v0.115.1 // indirect
43+
cloud.google.com/go/gkeconnect v0.11.1
44+
cloud.google.com/go/iam v1.2.1 // indirect
45+
github.com/aws/aws-sdk-go v1.44.122 // indirect
46+
github.com/bgentry/go-netrc v0.0.0-20140422174119-9fd32a8b3d3d // indirect
47+
github.com/chzyer/readline v0.0.0-20180603132655-2972be24d48e // indirect
48+
github.com/davecgh/go-spew v1.1.1 // indirect
49+
github.com/fsnotify/fsnotify v1.5.1 // indirect
50+
github.com/go-logr/logr v1.4.2 // indirect
51+
github.com/gogo/protobuf v1.3.2 // indirect
52+
github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da // indirect
53+
github.com/golang/protobuf v1.5.4 // indirect
54+
github.com/google/go-cmp v0.6.0 // indirect
55+
github.com/google/gofuzz v1.1.0 // indirect
56+
github.com/google/uuid v1.6.0 // indirect
57+
github.com/googleapis/enterprise-certificate-proxy v0.3.3 // indirect
58+
github.com/googleapis/gax-go/v2 v2.13.0 // indirect
59+
github.com/googleapis/gnostic v0.5.5 // indirect
60+
github.com/hashicorp/go-checkpoint v0.5.0 // indirect
61+
github.com/hashicorp/go-cleanhttp v0.5.2 // indirect
62+
github.com/hashicorp/go-getter v1.7.1 // indirect
63+
github.com/hashicorp/go-safetemp v1.0.0 // indirect
64+
github.com/hashicorp/go-uuid v1.0.1 // indirect
65+
github.com/hashicorp/go-version v1.6.0 // indirect
66+
github.com/hashicorp/hcl v1.0.0 // indirect
67+
github.com/hashicorp/terraform-json v0.13.0 // indirect
68+
github.com/imdario/mergo v0.3.12 // indirect
69+
github.com/inconshreveable/mousetrap v1.0.0 // indirect
70+
github.com/jmespath/go-jmespath v0.4.0 // indirect
71+
github.com/json-iterator/go v1.1.11 // indirect
72+
github.com/klauspost/compress v1.15.11 // indirect
73+
github.com/magiconair/properties v1.8.5 // indirect
74+
github.com/mitchellh/go-homedir v1.1.0 // indirect
75+
github.com/mitchellh/go-testing-interface v1.14.1 // indirect
76+
github.com/mitchellh/mapstructure v1.4.2 // indirect
77+
github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd // indirect
78+
github.com/modern-go/reflect2 v1.0.1 // indirect
79+
github.com/pelletier/go-toml v1.9.4 // indirect
80+
github.com/spf13/afero v1.6.0 // indirect
81+
github.com/spf13/cast v1.4.1 // indirect
82+
github.com/spf13/jwalterweatherman v1.1.0 // indirect
83+
github.com/spf13/pflag v1.0.5 // indirect
84+
github.com/subosito/gotenv v1.2.0 // indirect
85+
github.com/ulikunitz/xz v0.5.10 // indirect
86+
github.com/zclconf/go-cty v1.9.1 // indirect
87+
go.opencensus.io v0.24.0 // indirect
88+
golang.org/x/crypto v0.27.0 // indirect
89+
golang.org/x/net v0.29.0 // indirect
90+
golang.org/x/oauth2 v0.22.0 // indirect
91+
golang.org/x/sys v0.25.0 // indirect
92+
golang.org/x/term v0.24.0 // indirect
93+
golang.org/x/text v0.18.0 // indirect
94+
golang.org/x/time v0.6.0 // indirect
95+
google.golang.org/grpc v1.67.0 // indirect
96+
google.golang.org/protobuf v1.34.2 // indirect
97+
gopkg.in/inf.v0 v0.9.1 // indirect
98+
gopkg.in/ini.v1 v1.63.2 // indirect
99+
gopkg.in/yaml.v2 v2.4.0 // indirect
100+
gopkg.in/yaml.v3 v3.0.1 // indirect
101+
k8s.io/api v0.22.4 // indirect
102+
k8s.io/klog/v2 v2.130.1 // indirect
103+
k8s.io/utils v0.0.0-20210819203725-bdf08cb9a70a // indirect
104+
sigs.k8s.io/structured-merge-diff/v4 v4.1.2 // indirect
105+
sigs.k8s.io/yaml v1.2.0 // indirect
106+
)

0 commit comments

Comments
 (0)