Skip to content

Commit

Permalink
feat: narc cluster kubeconfig
Browse files Browse the repository at this point in the history
Kan hende denne burde flytte til narc kubeconfig
  • Loading branch information
Kyrremann committed Jun 23, 2023
1 parent 8e41e44 commit b2926e3
Show file tree
Hide file tree
Showing 12 changed files with 679 additions and 39 deletions.
1 change: 1 addition & 0 deletions cmd/commands/clusterCmd/cmds.go
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@ func Command() *cli.Command {

func subCommands() []*cli.Command {
return []*cli.Command{
kubeconfigCmd(),
listCmd(),
}
}
107 changes: 107 additions & 0 deletions cmd/commands/clusterCmd/kubeconfigCmd.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,107 @@
package clusterCmd

import (
"fmt"
"github.com/nais/narcos/pkg/gcp"
"github.com/nais/narcos/pkg/kubeconfig"
"github.com/nais/narcos/pkg/naisdevice"
"github.com/urfave/cli/v2"
"golang.org/x/exp/slices"
)

func kubeconfigCmd() *cli.Command {
return &cli.Command{
Name: "kubeconfig",
Aliases: []string{"kc"},
Description: `Create a kubeconfig file for connecting to available clusters.
This requires that you have the gcloud command line tool installed, configured and logged in using:
gcloud auth login --update-adc`,
Flags: []cli.Flag{
&cli.BoolFlag{
Name: "excludeManagement",
Aliases: []string{"m"},
},
&cli.BoolFlag{
Name: "excludeOnprem",
Aliases: []string{"o"},
},
&cli.BoolFlag{
Name: "excludeKnada",
},
&cli.BoolFlag{
Name: "prefixTenant",
Value: true,
},
&cli.BoolFlag{
Name: "skipNAVPrefix",
Value: true,
},
&cli.BoolFlag{
Name: "overwrite",
Usage: "Will overwrite users, clusters, and contexts in your kubeconfig.",
},
&cli.BoolFlag{
Name: "seperateAdmin",
Aliases: []string{"s"},
Usage: "Seperate cluster with admin user from cluster with team access. Required both a NAV and NAIS e-mail.",
},
&cli.BoolFlag{
Name: "clean",
Usage: "Create kubeconfig from a clean slate, will remove all customization",
},
&cli.BoolFlag{
Name: "verbose",
Aliases: []string{"v"},
},
&cli.StringFlag{
Name: "tenant",
Aliases: []string{"t"},
Usage: "Specify which tenant you want config for. Default behaviour is all tenants.",
Action: func(context *cli.Context, tenant string) error {
if !slices.Contains(naisdevice.Tenants, tenant) {
return fmt.Errorf("%v is not a valid tenant", tenant)
}

return nil
},
},
},
UseShortOptionHandling: true,
Before: func(context *cli.Context) error {
return gcp.ValidateUserLogin(context.Context)
},
Action: func(context *cli.Context) error {
excludeManagement := context.Bool("excludeManagement")
excludeOnprem := context.Bool("excludeOnprem")
excludeKnada := context.Bool("excludeKnada")
prefixTenant := context.Bool("prefixTenant")
skipNAVPrefix := context.Bool("skipNAVPrefix")
overwrite := context.Bool("overwrite")
seperateAdmin := context.Bool("seperateAdmin")
clean := context.Bool("clean")
verbose := context.Bool("verbose")
tenant := context.String("tenant")

fmt.Println("Getting clusters...")
clusters, err := gcp.GetClusters(context.Context, !excludeManagement, !excludeOnprem, !excludeKnada, prefixTenant, skipNAVPrefix, tenant)
if err != nil {
return err
}

if len(clusters) == 0 {
return fmt.Errorf("no clusters found")
}

fmt.Printf("Found %v clusters\n", len(clusters))

emails, err := gcp.GetUserEmails(context.Context)

err = kubeconfig.CreateKubeconfig(emails, clusters, overwrite, excludeOnprem, clean, verbose, seperateAdmin)
if err != nil {
return err
}

return nil
},
}
}
14 changes: 7 additions & 7 deletions cmd/commands/clusterCmd/listCmd.go
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,6 @@ import (
"github.com/nais/narcos/pkg/naisdevice"
"github.com/urfave/cli/v2"
"golang.org/x/exp/slices"
"strings"
)

func listCmd() *cli.Command {
Expand All @@ -23,6 +22,10 @@ func listCmd() *cli.Command {
Aliases: []string{"o"},
Value: true,
},
&cli.BoolFlag{
Name: "includeKnada",
Value: true,
},
&cli.BoolFlag{
Name: "prefixTenant",
},
Expand All @@ -45,20 +48,17 @@ func listCmd() *cli.Command {
Action: func(context *cli.Context) error {
includeManagement := context.Bool("includeManagement")
includeOnprem := context.Bool("includeOnprem")
includeKnada := context.Bool("includeKnada")
prefixTenant := context.Bool("prefixTenant")
tenant := context.String("tenant")

clusters, err := gcp.GetClusters(context.Context, includeManagement, includeOnprem, tenant)
clusters, err := gcp.GetClusters(context.Context, includeManagement, includeOnprem, includeKnada, prefixTenant, false, tenant)
if err != nil {
return err
}

for _, cluster := range clusters {
name := cluster.Name
if prefixTenant {
name = cluster.Tenant + "-" + strings.TrimPrefix(name, "nais-")
}
fmt.Println(name)
fmt.Println(cluster.Name)
}

return nil
Expand Down
19 changes: 19 additions & 0 deletions go.mod
Original file line number Diff line number Diff line change
Expand Up @@ -3,26 +3,36 @@ module github.com/nais/narcos
go 1.20

require (
github.com/go-logr/logr v1.2.3
github.com/nais/device v0.0.0-20230606131307-0fe402bccc46
github.com/urfave/cli/v2 v2.25.5
golang.org/x/exp v0.0.0-20230522175609-2e198f4a06a1
google.golang.org/api v0.125.0
google.golang.org/grpc v1.55.0
k8s.io/client-go v0.27.3
k8s.io/klog/v2 v2.90.1
)

require (
cloud.google.com/go/compute v1.20.0 // indirect
cloud.google.com/go/compute/metadata v0.2.3 // indirect
github.com/cpuguy83/go-md2man/v2 v2.0.2 // indirect
github.com/davecgh/go-spew v1.1.1 // indirect
github.com/gogo/protobuf v1.3.2 // indirect
github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da // indirect
github.com/golang/protobuf v1.5.3 // indirect
github.com/google/gofuzz v1.1.0 // indirect
github.com/google/s2a-go v0.1.4 // indirect
github.com/google/uuid v1.3.0 // indirect
github.com/googleapis/enterprise-certificate-proxy v0.2.3 // indirect
github.com/googleapis/gax-go/v2 v2.10.0 // indirect
github.com/imdario/mergo v0.3.6 // indirect
github.com/json-iterator/go v1.1.12 // indirect
github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd // indirect
github.com/modern-go/reflect2 v1.0.2 // indirect
github.com/pmezard/go-difflib v1.0.0 // indirect
github.com/russross/blackfriday/v2 v2.1.0 // indirect
github.com/spf13/pflag v1.0.5 // indirect
github.com/stretchr/objx v0.5.0 // indirect
github.com/stretchr/testify v1.8.1 // indirect
github.com/xrash/smetrics v0.0.0-20201216005158-039620a65673 // indirect
Expand All @@ -31,9 +41,18 @@ require (
golang.org/x/net v0.10.0 // indirect
golang.org/x/oauth2 v0.8.0 // indirect
golang.org/x/sys v0.8.0 // indirect
golang.org/x/term v0.8.0 // indirect
golang.org/x/text v0.9.0 // indirect
golang.org/x/time v0.2.0 // indirect
google.golang.org/appengine v1.6.7 // indirect
google.golang.org/genproto/googleapis/rpc v0.0.0-20230530153820-e85fd2cbaebc // indirect
google.golang.org/protobuf v1.30.0 // indirect
gopkg.in/inf.v0 v0.9.1 // indirect
gopkg.in/yaml.v2 v2.4.0 // indirect
gopkg.in/yaml.v3 v3.0.1 // indirect
k8s.io/apimachinery v0.27.3 // indirect
k8s.io/utils v0.0.0-20230209194617-a36077c30491 // indirect
sigs.k8s.io/json v0.0.0-20221116044647-bc3834ca7abd // indirect
sigs.k8s.io/structured-merge-diff/v4 v4.2.3 // indirect
sigs.k8s.io/yaml v1.3.0 // indirect
)
Loading

0 comments on commit b2926e3

Please sign in to comment.