Skip to content

Commit

Permalink
Merge pull request #229 from gianlucam76/register-generate
Browse files Browse the repository at this point in the history
Allow to register a cluster with one command
  • Loading branch information
gianlucam76 authored Apr 17, 2024
2 parents 5aabffb + 30b3c1e commit fa61537
Show file tree
Hide file tree
Showing 7 changed files with 183 additions and 67 deletions.
16 changes: 16 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -116,6 +116,22 @@ Usage:
--profile=<kind/name> Show addons deployed because of this clusterprofile/profile. If not specified all clusterprofiles/profiles are considered.
```

## Register a cluster

If there is kubeconfig with multiple contexts, the option __fleet-cluster-context__
allows to specify the context for the cluster to be managed.

So with default context pointing to the management cluster, following command will:
1. create a ServiceAccount in the managed cluster (using cluster-1 context)
2. grant this ServiceAccount cluster-admin permission
3. create a TokenRequest for such account and a Kubeconfig with bearer token from the TokenRequest
4. create a SveltosCluster in the management cluster (so using default context) and a Secret
with kubeconfig generated in the step above

```
sveltosctl register cluster --namespace=gcp --cluster=cluster-1 --fleet-cluster-context=cluster-1 --labels=k1=v1,k2=v2
```

## Display information about resources in managed cluster

**show resources** looks at all the HealthCheckReport instances and display information about those.
Expand Down
8 changes: 5 additions & 3 deletions go.mod
Original file line number Diff line number Diff line change
@@ -1,6 +1,8 @@
module github.com/projectsveltos/sveltosctl

go 1.21
go 1.22.0

toolchain go1.22.2

require (
github.com/docopt/docopt-go v0.0.0-20180111231733-ee0de3bc6815
Expand All @@ -14,7 +16,7 @@ require (
github.com/pkg/errors v0.9.1
github.com/projectsveltos/addon-controller v0.27.1-0.20240405170833-7fa049caf6a3
github.com/projectsveltos/event-manager v0.26.1-0.20240315124018-bf7536defbe2
github.com/projectsveltos/libsveltos v0.27.1-0.20240405132615-9e1a36ca5c8f
github.com/projectsveltos/libsveltos v0.27.1-0.20240414121914-1eb0b89fc6c9
github.com/robfig/cron/v3 v3.0.1
gopkg.in/yaml.v2 v2.4.0
k8s.io/api v0.29.3
Expand All @@ -24,7 +26,7 @@ require (
k8s.io/klog/v2 v2.120.1
k8s.io/kubectl v0.29.3
sigs.k8s.io/cluster-api v1.6.3
sigs.k8s.io/controller-runtime v0.17.2
sigs.k8s.io/controller-runtime v0.17.3
sigs.k8s.io/yaml v1.4.0
)

Expand Down
8 changes: 4 additions & 4 deletions go.sum
Original file line number Diff line number Diff line change
Expand Up @@ -336,8 +336,8 @@ github.com/projectsveltos/addon-controller v0.27.1-0.20240405170833-7fa049caf6a3
github.com/projectsveltos/addon-controller v0.27.1-0.20240405170833-7fa049caf6a3/go.mod h1:i9dFWaOrVzQSPXyACKxBkcgq3eH8TmlGw0DIFvWizVI=
github.com/projectsveltos/event-manager v0.26.1-0.20240315124018-bf7536defbe2 h1:vbwFY8ag5X+yJ42q88Q/dyWfodpRtExhdSrNRYtmMVs=
github.com/projectsveltos/event-manager v0.26.1-0.20240315124018-bf7536defbe2/go.mod h1:jsdBg7hvxOqX0dwtgffrodJWKDKVttX/GYp2+fWsL+U=
github.com/projectsveltos/libsveltos v0.27.1-0.20240405132615-9e1a36ca5c8f h1:FCmjCYxO/5irmocHXcuVfg9fT74NoN1G4k64/SwWdMo=
github.com/projectsveltos/libsveltos v0.27.1-0.20240405132615-9e1a36ca5c8f/go.mod h1:Uq3KYj5LKQYttA3yVb0O/V5Uvi2Qy7B23tnB5fBAMFg=
github.com/projectsveltos/libsveltos v0.27.1-0.20240414121914-1eb0b89fc6c9 h1:RYqAVU6cXVWniqDJGuWRFOzA5xgH3zasf2O11W7hYNw=
github.com/projectsveltos/libsveltos v0.27.1-0.20240414121914-1eb0b89fc6c9/go.mod h1:DVMv0DUlZ2x21jq7Z+LJvs7HesSe/pWsHZgQLV3Mhjw=
github.com/prometheus/client_golang v0.9.1/go.mod h1:7SWBe2y4D6OKWSNQJUaRYU/AaXPKyh/dDVn+NZz0KFw=
github.com/prometheus/client_golang v1.0.0/go.mod h1:db9x61etRT2tGnBNRi70OPL5FsnadC4Ky3P0J6CfImo=
github.com/prometheus/client_golang v1.1.0/go.mod h1:I1FGZT9+L76gKKOs5djB6ezCbFQP1xR9D75/vuwEF3g=
Expand Down Expand Up @@ -587,8 +587,8 @@ oras.land/oras-go v1.2.4 h1:djpBY2/2Cs1PV87GSJlxv4voajVOMZxqqtq9AB8YNvY=
oras.land/oras-go v1.2.4/go.mod h1:DYcGfb3YF1nKjcezfX2SNlDAeQFKSXmf+qrFmrh4324=
sigs.k8s.io/cluster-api v1.6.3 h1:VOlPNg92PQLlhBVLc5pg+cbAuPvGOOBujeFLk9zgnoo=
sigs.k8s.io/cluster-api v1.6.3/go.mod h1:4FzfgPPiYaFq8X9F9j2SvmggH/4OOLEDgVJuWDqKLig=
sigs.k8s.io/controller-runtime v0.17.2 h1:FwHwD1CTUemg0pW2otk7/U5/i5m2ymzvOXdbeGOUvw0=
sigs.k8s.io/controller-runtime v0.17.2/go.mod h1:+MngTvIQQQhfXtwfdGw/UOQ/aIaqsYywfCINOtwMO/s=
sigs.k8s.io/controller-runtime v0.17.3 h1:65QmN7r3FWgTxDMz9fvGnO1kbf2nu+acg9p2R9oYYYk=
sigs.k8s.io/controller-runtime v0.17.3/go.mod h1:N0jpP5Lo7lMTF9aL56Z/B2oWBJjey6StQM0jRbKQXtY=
sigs.k8s.io/json v0.0.0-20221116044647-bc3834ca7abd h1:EDPBXCAspyGV4jQlpZSudPeMmr1bNJefnuqLsRAsHZo=
sigs.k8s.io/json v0.0.0-20221116044647-bc3834ca7abd/go.mod h1:B8JuhiUyNFVKdsE8h686QcCxMaH6HrOAZj4vswFpcB0=
sigs.k8s.io/kustomize/api v0.16.0 h1:/zAR4FOQDCkgSDmVzV2uiFbuy9bhu3jEzthrHCuvm1g=
Expand Down
4 changes: 0 additions & 4 deletions internal/commands/generate/export_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -16,10 +16,6 @@ limitations under the License.

package generate

const (
Projectsveltos = projectsveltos
)

var (
CreateNamespace = createNamespace
CreateClusterRole = createClusterRole
Expand Down
41 changes: 22 additions & 19 deletions internal/commands/generate/generate_kubeconfig.go
Original file line number Diff line number Diff line change
Expand Up @@ -39,45 +39,47 @@ import (
)

const (
projectsveltos = "projectsveltos"
Projectsveltos = "projectsveltos"
)

func generateKubeconfigForServiceAccount(ctx context.Context, namespace, serviceAccountName string,
expirationSeconds int, create bool, logger logr.Logger) error {
func GenerateKubeconfigForServiceAccount(ctx context.Context, namespace, serviceAccountName string,
expirationSeconds int, create, display bool, logger logr.Logger) (string, error) {

if create {
if err := createNamespace(ctx, namespace, logger); err != nil {
return err
return "", err
}
if err := createServiceAccount(ctx, namespace, serviceAccountName, logger); err != nil {
return err
return "", err
}
if err := createClusterRole(ctx, projectsveltos, logger); err != nil {
return err
if err := createClusterRole(ctx, Projectsveltos, logger); err != nil {
return "", err
}
if err := createClusterRoleBinding(ctx, projectsveltos, projectsveltos, namespace, serviceAccountName, logger); err != nil {
return err
if err := createClusterRoleBinding(ctx, Projectsveltos, Projectsveltos, namespace, serviceAccountName, logger); err != nil {
return "", err
}
} else {
if err := getNamespace(ctx, namespace); err != nil {
return err
return "", err
}
if err := getServiceAccount(ctx, namespace, serviceAccountName); err != nil {
return err
return "", err
}
}

tokenRequest, err := getServiceAccountTokenRequest(ctx, namespace, serviceAccountName, expirationSeconds, logger)
if err != nil {
return err
return "", err
}

logger.V(logs.LogDebug).Info("Get Kubeconfig from TokenRequest")
data := getKubeconfigFromToken(namespace, serviceAccountName, tokenRequest.Token)
//nolint: forbidigo // print kubeconfig
fmt.Println(data)
if display {
//nolint: forbidigo // print kubeconfig
fmt.Println(data)
}

return nil
return data, nil
}

func getNamespace(ctx context.Context, name string) error {
Expand Down Expand Up @@ -325,12 +327,12 @@ or create a new one with the necessary permissions.
}
}

namespace := projectsveltos
namespace := Projectsveltos
if passedNamespace := parsedArgs["--namespace"]; passedNamespace != nil {
namespace = passedNamespace.(string)
}

serviceAccount := projectsveltos
serviceAccount := Projectsveltos
if passedServiceAccount := parsedArgs["--serviceaccount"]; passedServiceAccount != nil {
serviceAccount = passedServiceAccount.(string)
}
Expand All @@ -345,6 +347,7 @@ or create a new one with the necessary permissions.

create := parsedArgs["--create"].(bool)

return generateKubeconfigForServiceAccount(ctx, namespace, serviceAccount, expirationSeconds,
create, logger)
_, err = GenerateKubeconfigForServiceAccount(ctx, namespace, serviceAccount, expirationSeconds,
create, true, logger)
return err
}
Loading

0 comments on commit fa61537

Please sign in to comment.