mirror of
https://github.com/external-secrets/external-secrets.git
synced 2024-12-14 11:57:59 +00:00
Added gitlab provider
This commit is contained in:
parent
ee830e47e3
commit
92f6077079
4 changed files with 119 additions and 0 deletions
38
apis/externalsecrets/v1alpha1/secretstore_gitlab_types.go
Normal file
38
apis/externalsecrets/v1alpha1/secretstore_gitlab_types.go
Normal file
|
@ -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"`
|
||||
}
|
|
@ -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
pkg/provider/gitlab/gitlab.go
Normal file
50
pkg/provider/gitlab/gitlab.go
Normal file
|
@ -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
pkg/provider/gitlab/gitlab_test.go
Normal file
28
pkg/provider/gitlab/gitlab_test.go
Normal file
|
@ -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)
|
||||
}
|
Loading…
Reference in a new issue