From ed91bce275328d8873afcfdcb707a6939048985e Mon Sep 17 00:00:00 2001 From: Yujun Zhang Date: Fri, 30 Aug 2019 11:01:42 +0800 Subject: [PATCH] Add example plugin for go-getter --- docs/plugins/README.md | 3 +- .../someteam.example.com/v1/gogetter/GoGetter | 46 +++++++++++++++++++ .../v1/gogetter/GoGetter_test.go | 45 ++++++++++++++++++ 3 files changed, 93 insertions(+), 1 deletion(-) create mode 100755 plugin/someteam.example.com/v1/gogetter/GoGetter create mode 100644 plugin/someteam.example.com/v1/gogetter/GoGetter_test.go diff --git a/docs/plugins/README.md b/docs/plugins/README.md index 730897a0e..f250da22b 100644 --- a/docs/plugins/README.md +++ b/docs/plugins/README.md @@ -223,6 +223,7 @@ 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 @@ -230,7 +231,7 @@ provided in the kustomization file). * [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`. diff --git a/plugin/someteam.example.com/v1/gogetter/GoGetter b/plugin/someteam.example.com/v1/gogetter/GoGetter new file mode 100755 index 000000000..958b29e40 --- /dev/null +++ b/plugin/someteam.example.com/v1/gogetter/GoGetter @@ -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 diff --git a/plugin/someteam.example.com/v1/gogetter/GoGetter_test.go b/plugin/someteam.example.com/v1/gogetter/GoGetter_test.go new file mode 100644 index 000000000..226c4a128 --- /dev/null +++ b/plugin/someteam.example.com/v1/gogetter/GoGetter_test.go @@ -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 +`) +}