From 92f6077079bdd82598a039815abb42268b1ee9ae Mon Sep 17 00:00:00 2001 From: jabray5 Date: Wed, 28 Jul 2021 15:29:23 +0100 Subject: [PATCH] Added gitlab provider --- .../v1alpha1/secretstore_gitlab_types.go | 38 ++++++++++++++ .../v1alpha1/secretstore_types.go | 3 ++ pkg/provider/gitlab/gitlab.go | 50 +++++++++++++++++++ pkg/provider/gitlab/gitlab_test.go | 28 +++++++++++ 4 files changed, 119 insertions(+) create mode 100644 apis/externalsecrets/v1alpha1/secretstore_gitlab_types.go create mode 100644 pkg/provider/gitlab/gitlab.go create mode 100644 pkg/provider/gitlab/gitlab_test.go diff --git a/apis/externalsecrets/v1alpha1/secretstore_gitlab_types.go b/apis/externalsecrets/v1alpha1/secretstore_gitlab_types.go new file mode 100644 index 000000000..2baf54e14 --- /dev/null +++ b/apis/externalsecrets/v1alpha1/secretstore_gitlab_types.go @@ -0,0 +1,38 @@ +/* +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package v1alpha1 + +import ( + esmeta "github.com/external-secrets/external-secrets/apis/meta/v1" +) + +// Configures an store to sync secrets using a IBM Cloud Secrets Manager +// backend. +type GitlabProvider struct { + // Auth configures how secret-manager authenticates with the IBM secrets manager. + Auth GitlabAuth `json:"auth"` + + // ServiceURL is the Endpoint URL that is specific to the Secrets Manager service instance + ProjectID *string `json:"projectID,omitempty"` +} + +type GitlabAuth struct { + SecretRef GitlabSecretRef `json:"SecretRef"` +} + +type GitlabSecretRef struct { + // The Access Token is used for authentication + AccessToken esmeta.SecretKeySelector `json:"token,omitempty"` +} diff --git a/apis/externalsecrets/v1alpha1/secretstore_types.go b/apis/externalsecrets/v1alpha1/secretstore_types.go index 72bf8193b..96d264ac6 100644 --- a/apis/externalsecrets/v1alpha1/secretstore_types.go +++ b/apis/externalsecrets/v1alpha1/secretstore_types.go @@ -57,6 +57,9 @@ type SecretStoreProvider struct { // YandexLockbox configures this store to sync secrets using Yandex Lockbox provider // +optional YandexLockbox *YandexLockboxProvider `json:"yandexlockbox,omitempty"` + // GItlab configures this store to sync secrets using Gitlab Variables provider + // +optional + Gitlab *GitlabProvider `json:"gitlab,omitempty"` } type SecretStoreConditionType string diff --git a/pkg/provider/gitlab/gitlab.go b/pkg/provider/gitlab/gitlab.go new file mode 100644 index 000000000..3441908cf --- /dev/null +++ b/pkg/provider/gitlab/gitlab.go @@ -0,0 +1,50 @@ +/* +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ +package gitlab + +import ( + "log" + "os" + + gitlab "github.com/xanzy/go-gitlab" +) + +// Requires a token to be set in environment variable +var GITLABTOKEN = os.Getenv("GITLABTOKEN") + +type GitlabCredentials struct { + Token string `json:"token"` +} + +// Gitlab struct with values for *gitlab.Client and projectID +type Gitlab struct { + client *gitlab.Client + projectID interface{} +} + +// Function newGitlabProvider returns a reference to a new Gitlab struct 'instance' +func NewGitlabProvider() *Gitlab { + return &Gitlab{} +} + +// Method on Gitlab to set up client with credentials and populate projectID +func (g *Gitlab) NewGitlabClient(cred GitlabCredentials, projectID int) { + var err error + // Create a new Gitlab client with credentials + g.client, err = gitlab.NewClient(cred.Token, nil) + g.projectID = projectID + if err != nil { + log.Fatalf("Failed to create client: %v", err) + } +} diff --git a/pkg/provider/gitlab/gitlab_test.go b/pkg/provider/gitlab/gitlab_test.go new file mode 100644 index 000000000..62880b88b --- /dev/null +++ b/pkg/provider/gitlab/gitlab_test.go @@ -0,0 +1,28 @@ +/* +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ +package gitlab + +import ( + "fmt" + "testing" +) + +func TestCreateGitlabClient(t *testing.T) { + credentials := GitlabCredentials{Token: GITLABTOKEN} + gitlab := NewGitlabProvider() + gitlab.NewGitlabClient(credentials, 28414983) + + user, _, _ := gitlab.client.Users.CurrentUser() + fmt.Printf("Created client for username: %v", user) +}