Skip to content

Commit

Permalink
Add example plugin for go-getter
Browse files Browse the repository at this point in the history
  • Loading branch information
yujunz committed Aug 30, 2019
1 parent 119ff5a commit ed91bce
Show file tree
Hide file tree
Showing 3 changed files with 93 additions and 1 deletion.
3 changes: 2 additions & 1 deletion docs/plugins/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -223,14 +223,15 @@ provided in the kustomization file).
[helm chart inflator]: ../../plugin/someteam.example.com/v1/chartinflator
[bashed config map]: ../../plugin/someteam.example.com/v1/bashedconfigmap
[sed transformer]: ../../plugin/someteam.example.com/v1/sedtransformer
[hashicorp go-getter]: ../../plugin/someteam.example.com/v1/gogetter
#### Examples
* [helm chart inflator] - A generator that inflates a helm chart.
* [bashed config map] - Super simple configMap generation from bash.
* [sed transformer] - Define your unstructured edits using a
plugin like this one.
* [hashicorp go-getter] - Download kustomize layes and build it to generate resources
A generator plugin accepts nothing on `stdin`, but emits
generated resources to `stdout`.
Expand Down
46 changes: 46 additions & 0 deletions plugin/someteam.example.com/v1/gogetter/GoGetter
Original file line number Diff line number Diff line change
@@ -0,0 +1,46 @@
#!/bin/bash
# Copyright 2019 The Kubernetes Authors.
# SPDX-License-Identifier: Apache-2.0

# HashiCorp go-getter
#
# Reads a file like this
#
# apiVersion: someteam.example.com/v1
# kind: GoGetter
# metadata:
# name: example
# url: github.com/kustless/kustomize-examples.git
# # overlay: base # (optional) relative path in the package
#
# download kustomize layes and build it to stdout
#
# Example execution:
# ./plugin/someteam.example.com/v1/gogetter/GoGetter configFile.yaml
#
# TODO: cache downloads

set -e

# YAML parsing function borrowed from ChartInflator
function parseYaml {
local file=$1
while read -r line
do
local k=${line%:*}
local v=${line#*:}
local t=${v#"${v%%[![:space:]]*}"} # trim leading space

if [ "$k" == "url" ]; then url=$t
elif [ "$k" == "overlay" ]; then overlay=$t
fi
done <"$file"
}

TMP_DIR=$(mktemp -d)

parseYaml $1
go-getter $url $TMP_DIR/got 2> /dev/null
kustomize build $TMP_DIR/got/$overlay

/bin/rm -rf $TMP_DIR
45 changes: 45 additions & 0 deletions plugin/someteam.example.com/v1/gogetter/GoGetter_test.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,45 @@
// +build notravis

// Copyright 2019 The Kubernetes Authors.
// SPDX-License-Identifier: Apache-2.0

// Disabled on travis, because don't want to install go-getter on travis.

package main_test

import (
"testing"

kusttest_test "sigs.k8s.io/kustomize/v3/pkg/kusttest"
plugins_test "sigs.k8s.io/kustomize/v3/pkg/plugins/test"
)

// This test requires having the go-getter binary on the PATH.
//
func TestGoGetter(t *testing.T) {
tc := plugins_test.NewEnvForTest(t).Set()
defer tc.Reset()

tc.BuildExecPlugin(
"someteam.example.com", "v1", "GoGetter")

th := kusttest_test.NewKustTestPluginHarness(t, "/app")

m := th.LoadAndRunGenerator(`
apiVersion: someteam.example.com/v1
kind: GoGetter
metadata:
name: example
url: github.com/kustless/kustomize-examples.git
`)

th.AssertActualEqualsExpected(m, `
apiVersion: v1
data:
altGreeting: Good Morning!
enableRisky: "false"
kind: ConfigMap
metadata:
name: the-map
`)
}

0 comments on commit ed91bce

Please sign in to comment.