Browse Source

Added gitlab provider

jabray5 4 years ago
parent
commit
92f6077079

+ 38 - 0
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"`
+}

+ 3 - 0
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

+ 50 - 0
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)
+	}
+}

+ 28 - 0
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)
+}