Skip to content

Commit

Permalink
Use new Kustomize API
Browse files Browse the repository at this point in the history
  • Loading branch information
larslevie committed Nov 27, 2020
1 parent a2872fc commit 179a5ad
Show file tree
Hide file tree
Showing 4 changed files with 411 additions and 67 deletions.
12 changes: 6 additions & 6 deletions Dockerfile
Original file line number Diff line number Diff line change
@@ -1,31 +1,31 @@
FROM golang:1.12-stretch
FROM golang:1.15-buster

RUN apt-get update && apt-get install -y \
curl \
gettext \
g++ \
git
git

WORKDIR /code

RUN GO111MODULE=on go get sigs.k8s.io/kustomize/kustomize/v3@v3.2.1
RUN GO111MODULE=on go get sigs.k8s.io/kustomize/kustomize/v3@v3.8.7

COPY go.mod go.sum ./
RUN go mod download

COPY ./SecretsFromVault.go ./

RUN go build -buildmode plugin -o /opt/kustomize/plugin/kvSources/SecretsFromVault.so ./SecretsFromVault.go
RUN go build -buildmode plugin -o /opt/kustomize/plugin/kvSources/SecretsFromVault.so ./SecretsFromVault.go

FROM debian:stretch-slim
FROM debian:buster-slim

RUN apt-get update && apt-get install -y \
git

COPY --from=0 /opt/kustomize/plugin/kvSources/SecretsFromVault.so /opt/kustomize/plugin/kustomize.config.realgeeks.com/v1beta1/secretsfromvault/SecretsFromVault.so
COPY --from=0 /go/bin/kustomize /usr/bin/kustomize

WORKDIR /working
WORKDIR /working

ENV XDG_CONFIG_HOME=/opt

Expand Down
29 changes: 17 additions & 12 deletions SecretsFromVault.go
Original file line number Diff line number Diff line change
Expand Up @@ -8,10 +8,12 @@ import (
"strings"

"github.com/hashicorp/vault/api"
"sigs.k8s.io/kustomize/v3/pkg/ifc"
"sigs.k8s.io/kustomize/v3/pkg/resmap"
"sigs.k8s.io/kustomize/v3/pkg/types"
"sigs.k8s.io/kustomize/api/kv"
"sigs.k8s.io/kustomize/api/resmap"
"sigs.k8s.io/kustomize/api/types"
"sigs.k8s.io/yaml"

_ "github.com/hashicorp/go-cleanhttp"
)

type vaultSecret struct {
Expand All @@ -21,23 +23,23 @@ type vaultSecret struct {
}

type secretSpec struct {
Secrets []vaultSecret `json:"secrets,omitempty" yaml:"secrets,omitempty"`
Options *types.GeneratorOptions `json:"options,omitempty" yaml:"options,omitempty"`
Secrets []vaultSecret `json:"secrets,omitempty" yaml:"secrets,omitempty"`
Options *types.GeneratorOptions `json:"options,omitempty" yaml:"options,omitempty"`
Behavior string `json:"behavior,omitempty" yaml:"behavior,omitempty"`
}

type plugin struct {
rf *resmap.Factory
ldr ifc.Loader
Spec secretSpec `json:"spec,omitempty" yaml:"spec,omitempty"`
h *resmap.PluginHelpers
types.ObjectMeta `json:"metadata,omitempty" yaml:"metadata,omitempty" protobuf:"bytes,1,opt,name=metadata"`
Spec secretSpec `json:"spec,omitempty" yaml:"spec,omitempty"`
VaultClient *api.Client
}

//nolint: golint
//noinspection GoUnusedGlobalVariable
var KustomizePlugin plugin

func (p *plugin) Config(ldr ifc.Loader, rf *resmap.Factory, c []byte) error {
func (p *plugin) Config(h *resmap.PluginHelpers, c []byte) error {
vaultAddr, ok := os.LookupEnv("VAULT_ADDR")
if !ok {
return errors.New("missing `VAULT_ADDR` env var: required")
Expand All @@ -59,9 +61,8 @@ func (p *plugin) Config(ldr ifc.Loader, rf *resmap.Factory, c []byte) error {

client.SetToken(vaultToken)

p.rf = rf
p.ldr = ldr
p.VaultClient = client
p.h = h

return yaml.Unmarshal(c, p)
}
Expand All @@ -70,6 +71,8 @@ func (p *plugin) Generate() (resmap.ResMap, error) {
args := types.SecretArgs{}
args.Name = p.Name
args.Namespace = p.Namespace
args.Behavior = p.Spec.Behavior
args.Options = p.Spec.Options

for _, secret := range p.Spec.Secrets {
value, err := p.getSecretFromVault(secret.Path, secret.Key)
Expand All @@ -88,7 +91,9 @@ func (p *plugin) Generate() (resmap.ResMap, error) {
args.LiteralSources = append(args.LiteralSources, entry)
}

return p.rf.FromSecretArgs(p.ldr, p.Spec.Options, args)
rf := p.h.ResmapFactory()

return rf.FromSecretArgs(kv.NewLoader(p.h.Loader(), p.h.Validator()), args)
}

func getVaultToken() (string, error) {
Expand Down
8 changes: 4 additions & 4 deletions go.mod
Original file line number Diff line number Diff line change
@@ -1,10 +1,10 @@
module github.com/RealGeeks/kustomize-kvsource-vault

go 1.12
go 1.15

require (
github.com/hashicorp/go-cleanhttp v0.5.1
github.com/hashicorp/vault/api v1.0.5-0.20190909210825-c14bd9a2b1d2
github.com/spf13/pflag v1.0.5 // indirect
sigs.k8s.io/kustomize/v3 v3.2.0
sigs.k8s.io/yaml v1.1.0
sigs.k8s.io/kustomize/api v0.6.5
sigs.k8s.io/yaml v1.2.0
)
Loading

0 comments on commit 179a5ad

Please sign in to comment.