Merge pull request #1719 from monopole/mvPluginConfig

Move plugin config to main config package.
This commit is contained in:
Jeff Regan
2019-11-01 16:32:42 -07:00
committed by GitHub
14 changed files with 61 additions and 62 deletions

View File

@@ -4,7 +4,7 @@
package krusty package krusty
import ( import (
"sigs.k8s.io/kustomize/api/plugins/config" "sigs.k8s.io/kustomize/api/pgmconfig"
"sigs.k8s.io/kustomize/api/types" "sigs.k8s.io/kustomize/api/types"
) )
@@ -35,6 +35,6 @@ func MakeDefaultOptions() *Options {
DoLegacyResourceSort: true, DoLegacyResourceSort: true,
LoadRestrictions: rootOnly, LoadRestrictions: rootOnly,
DoPrune: false, DoPrune: false,
PluginConfig: config.DefaultPluginConfig(), PluginConfig: pgmconfig.DefaultPluginConfig(),
} }
} }

6
api/pgmconfig/doc.go Normal file
View File

@@ -0,0 +1,6 @@
// Copyright 2019 The Kubernetes Authors.
// SPDX-License-Identifier: Apache-2.0
// Package pgmconfig provides configuration methods and constants
// for the kustomize API.
package pgmconfig

View File

@@ -23,11 +23,11 @@ const (
// An environment variable to consult for kustomization // An environment variable to consult for kustomization
// configuration data. See: // configuration data. See:
// https://specifications.freedesktop.org/basedir-spec/basedir-spec-latest.html // https://specifications.freedesktop.org/basedir-spec/basedir-spec-latest.html
XdgConfigHome = "XDG_CONFIG_HOME" XdgConfigHomeEnv = "XDG_CONFIG_HOME"
// Use this when XdgConfigHome not defined. // Use this when XdgConfigHomeEnv not defined.
DefaultConfigSubdir = ".config" XdgConfigHomeEnvDefault = ".config"
// Program name, for help, finding the XDG_CONFIG_DIR, etc. // A program name, for use in help, finding the XDG_CONFIG_DIR, etc.
ProgramName = "kustomize" ProgramName = "kustomize"
) )

View File

@@ -1,9 +1,7 @@
// Copyright 2019 The Kubernetes Authors. // Copyright 2019 The Kubernetes Authors.
// SPDX-License-Identifier: Apache-2.0 // SPDX-License-Identifier: Apache-2.0
// Package config provides configuration methods and constants package pgmconfig
// for general plugins.
package config
import ( import (
"fmt" "fmt"
@@ -12,22 +10,23 @@ import (
"runtime" "runtime"
"github.com/spf13/pflag" "github.com/spf13/pflag"
"sigs.k8s.io/kustomize/api/pgmconfig"
"sigs.k8s.io/kustomize/api/types" "sigs.k8s.io/kustomize/api/types"
) )
const ( const (
// Used with Go plugins. // Symbol that must be used inside Go plugins.
PluginSymbol = "KustomizePlugin" PluginSymbol = "KustomizePlugin"
// Location of builtins. // Location of builtins.
BuiltinPluginPackage = "builtin" BuiltinPluginPackage = "builtin"
// ApiVersion of builtins. // The value of kubernetes ApiVersion to use in configuration
// files for builtin plugins.
// The value for non-builtins can be anything.
BuiltinPluginApiVersion = BuiltinPluginPackage BuiltinPluginApiVersion = BuiltinPluginPackage
// Domain from which kustomize code is imported, for locating // Domain from which kustomize code is imported, for locating
// plugin source code under $GOPATH. // plugin source code under $GOPATH when GOPATH is defined.
DomainName = "sigs.k8s.io" DomainName = "sigs.k8s.io"
// Name of directory housing all plugins. // Name of directory housing all plugins.
@@ -73,12 +72,12 @@ func AddFlagEnablePlugins(set *pflag.FlagSet, v *bool) {
// Use https://github.com/kirsle/configdir instead? // Use https://github.com/kirsle/configdir instead?
func configRoot() string { func configRoot() string {
dir := os.Getenv(pgmconfig.XdgConfigHome) dir := os.Getenv(XdgConfigHomeEnv)
if len(dir) == 0 { if len(dir) == 0 {
dir = filepath.Join( dir = filepath.Join(
HomeDir(), pgmconfig.DefaultConfigSubdir) HomeDir(), XdgConfigHomeEnvDefault)
} }
return filepath.Join(dir, pgmconfig.ProgramName) return filepath.Join(dir, ProgramName)
} }
func HomeDir() string { func HomeDir() string {

View File

@@ -1,29 +1,27 @@
// Copyright 2019 The Kubernetes Authors. // Copyright 2019 The Kubernetes Authors.
// SPDX-License-Identifier: Apache-2.0 // SPDX-License-Identifier: Apache-2.0
package config package pgmconfig
import ( import (
"os" "os"
"path/filepath" "path/filepath"
"strings" "strings"
"testing" "testing"
"sigs.k8s.io/kustomize/api/pgmconfig"
) )
func TestConfigDirNoXdg(t *testing.T) { func TestConfigDirNoXdg(t *testing.T) {
xdg, isSet := os.LookupEnv(pgmconfig.XdgConfigHome) xdg, isSet := os.LookupEnv(XdgConfigHomeEnv)
if isSet { if isSet {
os.Unsetenv(pgmconfig.XdgConfigHome) os.Unsetenv(XdgConfigHomeEnv)
} }
s := configRoot() s := configRoot()
if isSet { if isSet {
os.Setenv(pgmconfig.XdgConfigHome, xdg) os.Setenv(XdgConfigHomeEnv, xdg)
} }
if !strings.HasSuffix( if !strings.HasSuffix(
s, s,
rootedPath(pgmconfig.DefaultConfigSubdir, pgmconfig.ProgramName)) { rootedPath(XdgConfigHomeEnvDefault, ProgramName)) {
t.Fatalf("unexpected config dir: %s", s) t.Fatalf("unexpected config dir: %s", s)
} }
} }
@@ -33,13 +31,13 @@ func rootedPath(elem ...string) string {
} }
func TestConfigDirWithXdg(t *testing.T) { func TestConfigDirWithXdg(t *testing.T) {
xdg, isSet := os.LookupEnv(pgmconfig.XdgConfigHome) xdg, isSet := os.LookupEnv(XdgConfigHomeEnv)
os.Setenv(pgmconfig.XdgConfigHome, rootedPath("blah")) os.Setenv(XdgConfigHomeEnv, rootedPath("blah"))
s := configRoot() s := configRoot()
if isSet { if isSet {
os.Setenv(pgmconfig.XdgConfigHome, xdg) os.Setenv(XdgConfigHomeEnv, xdg)
} }
if s != rootedPath("blah", pgmconfig.ProgramName) { if s != rootedPath("blah", ProgramName) {
t.Fatalf("unexpected config dir: %s", s) t.Fatalf("unexpected config dir: %s", s)
} }
} }

View File

@@ -13,7 +13,6 @@ import (
"time" "time"
"sigs.k8s.io/kustomize/api/pgmconfig" "sigs.k8s.io/kustomize/api/pgmconfig"
"sigs.k8s.io/kustomize/api/plugins/config"
) )
// Compiler creates Go plugin object files. // Compiler creates Go plugin object files.
@@ -36,20 +35,20 @@ func DefaultSrcRoot() (string, error) {
root = filepath.Join( root = filepath.Join(
os.Getenv("GOPATH"), "src", os.Getenv("GOPATH"), "src",
config.DomainName, pgmconfig.ProgramName, config.PluginRoot) pgmconfig.DomainName, pgmconfig.ProgramName, pgmconfig.PluginRoot)
if FileExists(root) { if FileExists(root) {
return root, nil return root, nil
} }
nope = append(nope, root) nope = append(nope, root)
root = config.DefaultPluginConfig().DirectoryPath root = pgmconfig.DefaultPluginConfig().DirectoryPath
if FileExists(root) { if FileExists(root) {
return root, nil return root, nil
} }
nope = append(nope, root) nope = append(nope, root)
root = filepath.Join( root = filepath.Join(
config.HomeDir(), pgmconfig.ProgramName, config.PluginRoot) pgmconfig.HomeDir(), pgmconfig.ProgramName, pgmconfig.PluginRoot)
if FileExists(root) { if FileExists(root) {
return root, nil return root, nil
} }

View File

@@ -11,7 +11,7 @@ import (
"sigs.k8s.io/kustomize/api/internal/loadertest" "sigs.k8s.io/kustomize/api/internal/loadertest"
"sigs.k8s.io/kustomize/api/k8sdeps/kunstruct" "sigs.k8s.io/kustomize/api/k8sdeps/kunstruct"
"sigs.k8s.io/kustomize/api/plugins/config" "sigs.k8s.io/kustomize/api/pgmconfig"
. "sigs.k8s.io/kustomize/api/plugins/execplugin" . "sigs.k8s.io/kustomize/api/plugins/execplugin"
"sigs.k8s.io/kustomize/api/plugins/loader" "sigs.k8s.io/kustomize/api/plugins/loader"
"sigs.k8s.io/kustomize/api/resmap" "sigs.k8s.io/kustomize/api/resmap"
@@ -46,7 +46,7 @@ s/$BAR/bar/g
p, err := NewExecPlugin( p, err := NewExecPlugin(
loader.AbsolutePluginPath( loader.AbsolutePluginPath(
config.DefaultPluginConfig(), pgmconfig.DefaultPluginConfig(),
pluginConfig.OrgId())) pluginConfig.OrgId()))
if err != nil { if err != nil {
t.Fatalf("unexpected error: %v", err.Error()) t.Fatalf("unexpected error: %v", err.Error())

View File

@@ -13,8 +13,8 @@ import (
"github.com/pkg/errors" "github.com/pkg/errors"
"sigs.k8s.io/kustomize/api/ifc" "sigs.k8s.io/kustomize/api/ifc"
"sigs.k8s.io/kustomize/api/pgmconfig"
"sigs.k8s.io/kustomize/api/plugins/builtinhelpers" "sigs.k8s.io/kustomize/api/plugins/builtinhelpers"
"sigs.k8s.io/kustomize/api/plugins/config"
"sigs.k8s.io/kustomize/api/plugins/execplugin" "sigs.k8s.io/kustomize/api/plugins/execplugin"
"sigs.k8s.io/kustomize/api/resid" "sigs.k8s.io/kustomize/api/resid"
"sigs.k8s.io/kustomize/api/resmap" "sigs.k8s.io/kustomize/api/resmap"
@@ -103,7 +103,7 @@ func (l *Loader) absolutePluginPath(id resid.ResId) string {
func isBuiltinPlugin(res *resource.Resource) bool { func isBuiltinPlugin(res *resource.Resource) bool {
// TODO: the special string should appear in Group, not Version. // TODO: the special string should appear in Group, not Version.
return res.GetGvk().Group == "" && return res.GetGvk().Group == "" &&
res.GetGvk().Version == config.BuiltinPluginApiVersion res.GetGvk().Version == pgmconfig.BuiltinPluginApiVersion
} }
func (l *Loader) loadAndConfigurePlugin( func (l *Loader) loadAndConfigurePlugin(
@@ -117,7 +117,7 @@ func (l *Loader) loadAndConfigurePlugin(
} else if l.pc.Enabled { } else if l.pc.Enabled {
c, err = l.loadPlugin(res.OrgId()) c, err = l.loadPlugin(res.OrgId())
} else { } else {
err = config.NotEnabledErr(res.OrgId().Kind) err = pgmconfig.NotEnabledErr(res.OrgId().Kind)
} }
if err != nil { if err != nil {
return nil, err return nil, err
@@ -178,11 +178,11 @@ func (l *Loader) loadGoPlugin(id resid.ResId) (resmap.Configurable, error) {
if err != nil { if err != nil {
return nil, errors.Wrapf(err, "plugin %s fails to load", absPath) return nil, errors.Wrapf(err, "plugin %s fails to load", absPath)
} }
symbol, err := p.Lookup(config.PluginSymbol) symbol, err := p.Lookup(pgmconfig.PluginSymbol)
if err != nil { if err != nil {
return nil, errors.Wrapf( return nil, errors.Wrapf(
err, "plugin %s doesn't have symbol %s", err, "plugin %s doesn't have symbol %s",
regId, config.PluginSymbol) regId, pgmconfig.PluginSymbol)
} }
c, ok := symbol.(resmap.Configurable) c, ok := symbol.(resmap.Configurable)
if !ok { if !ok {

View File

@@ -8,12 +8,12 @@ import (
"sigs.k8s.io/kustomize/api/internal/loadertest" "sigs.k8s.io/kustomize/api/internal/loadertest"
"sigs.k8s.io/kustomize/api/k8sdeps/kunstruct" "sigs.k8s.io/kustomize/api/k8sdeps/kunstruct"
"sigs.k8s.io/kustomize/api/plugins/config" "sigs.k8s.io/kustomize/api/pgmconfig"
. "sigs.k8s.io/kustomize/api/plugins/loader" . "sigs.k8s.io/kustomize/api/plugins/loader"
"sigs.k8s.io/kustomize/api/resmap" "sigs.k8s.io/kustomize/api/resmap"
"sigs.k8s.io/kustomize/api/resource" "sigs.k8s.io/kustomize/api/resource"
"sigs.k8s.io/kustomize/api/testutils/kusttest" kusttest_test "sigs.k8s.io/kustomize/api/testutils/kusttest"
"sigs.k8s.io/kustomize/api/testutils/valtest" valtest_test "sigs.k8s.io/kustomize/api/testutils/valtest"
) )
const ( const (
@@ -57,7 +57,7 @@ func TestLoader(t *testing.T) {
ldr := loadertest.NewFakeLoader("/foo") ldr := loadertest.NewFakeLoader("/foo")
pLdr := NewLoader(config.ActivePluginConfig(), rmF) pLdr := NewLoader(pgmconfig.ActivePluginConfig(), rmF)
if pLdr == nil { if pLdr == nil {
t.Fatal("expect non-nil loader") t.Fatal("expect non-nil loader")
} }

View File

@@ -8,8 +8,8 @@ import (
"testing" "testing"
"sigs.k8s.io/kustomize/api/loader" "sigs.k8s.io/kustomize/api/loader"
"sigs.k8s.io/kustomize/api/plugins/config" "sigs.k8s.io/kustomize/api/pgmconfig"
"sigs.k8s.io/kustomize/api/testutils/kusttest" kusttest_test "sigs.k8s.io/kustomize/api/testutils/kusttest"
) )
func TestOrderPreserved(t *testing.T) { func TestOrderPreserved(t *testing.T) {
@@ -300,7 +300,7 @@ spec:
func TestSharedPatchDisAllowed(t *testing.T) { func TestSharedPatchDisAllowed(t *testing.T) {
th := kusttest_test.NewKustTestHarnessFull( th := kusttest_test.NewKustTestHarnessFull(
t, "/app/overlay", t, "/app/overlay",
loader.RestrictionRootOnly, config.DefaultPluginConfig()) loader.RestrictionRootOnly, pgmconfig.DefaultPluginConfig())
writeSmallBase(th) writeSmallBase(th)
th.WriteK("/app/overlay", ` th.WriteK("/app/overlay", `
commonLabels: commonLabels:
@@ -332,7 +332,7 @@ spec:
func TestSharedPatchAllowed(t *testing.T) { func TestSharedPatchAllowed(t *testing.T) {
th := kusttest_test.NewKustTestHarnessFull( th := kusttest_test.NewKustTestHarnessFull(
t, "/app/overlay", t, "/app/overlay",
loader.RestrictionNone, config.DefaultPluginConfig()) loader.RestrictionNone, pgmconfig.DefaultPluginConfig())
writeSmallBase(th) writeSmallBase(th)
th.WriteK("/app/overlay", ` th.WriteK("/app/overlay", `
commonLabels: commonLabels:

View File

@@ -13,13 +13,13 @@ import (
"sigs.k8s.io/kustomize/api/k8sdeps/kunstruct" "sigs.k8s.io/kustomize/api/k8sdeps/kunstruct"
"sigs.k8s.io/kustomize/api/k8sdeps/transformer" "sigs.k8s.io/kustomize/api/k8sdeps/transformer"
fLdr "sigs.k8s.io/kustomize/api/loader" fLdr "sigs.k8s.io/kustomize/api/loader"
"sigs.k8s.io/kustomize/api/plugins/config" "sigs.k8s.io/kustomize/api/pgmconfig"
pLdr "sigs.k8s.io/kustomize/api/plugins/loader" pLdr "sigs.k8s.io/kustomize/api/plugins/loader"
"sigs.k8s.io/kustomize/api/resmap" "sigs.k8s.io/kustomize/api/resmap"
"sigs.k8s.io/kustomize/api/resource" "sigs.k8s.io/kustomize/api/resource"
"sigs.k8s.io/kustomize/api/target" "sigs.k8s.io/kustomize/api/target"
"sigs.k8s.io/kustomize/api/testutils/kusttest" kusttest_test "sigs.k8s.io/kustomize/api/testutils/kusttest"
"sigs.k8s.io/kustomize/api/testutils/valtest" valtest_test "sigs.k8s.io/kustomize/api/testutils/valtest"
) )
func TestPluginDir(t *testing.T) { func TestPluginDir(t *testing.T) {
@@ -65,7 +65,7 @@ metadata:
rf := resmap.NewFactory(resource.NewFactory( rf := resmap.NewFactory(resource.NewFactory(
kunstruct.NewKunstructuredFactoryImpl()), nil) kunstruct.NewKunstructuredFactoryImpl()), nil)
pl := pLdr.NewLoader(config.ActivePluginConfig(), rf) pl := pLdr.NewLoader(pgmconfig.ActivePluginConfig(), rf)
tg, err := target.NewKustTarget( tg, err := target.NewKustTarget(
ldr, valtest_test.MakeFakeValidator(), rf, transformer.NewFactoryImpl(), pl) ldr, valtest_test.MakeFakeValidator(), rf, transformer.NewFactoryImpl(), pl)
if err != nil { if err != nil {

View File

@@ -15,7 +15,6 @@ import (
fLdr "sigs.k8s.io/kustomize/api/loader" fLdr "sigs.k8s.io/kustomize/api/loader"
"sigs.k8s.io/kustomize/api/pgmconfig" "sigs.k8s.io/kustomize/api/pgmconfig"
"sigs.k8s.io/kustomize/api/plugins/builtinconfig/consts" "sigs.k8s.io/kustomize/api/plugins/builtinconfig/consts"
"sigs.k8s.io/kustomize/api/plugins/config"
pLdr "sigs.k8s.io/kustomize/api/plugins/loader" pLdr "sigs.k8s.io/kustomize/api/plugins/loader"
"sigs.k8s.io/kustomize/api/resmap" "sigs.k8s.io/kustomize/api/resmap"
"sigs.k8s.io/kustomize/api/resource" "sigs.k8s.io/kustomize/api/resource"
@@ -37,17 +36,17 @@ type KustTestHarness struct {
func NewKustTestHarness(t *testing.T, path string) *KustTestHarness { func NewKustTestHarness(t *testing.T, path string) *KustTestHarness {
return NewKustTestHarnessFull( return NewKustTestHarnessFull(
t, path, fLdr.RestrictionRootOnly, config.DefaultPluginConfig()) t, path, fLdr.RestrictionRootOnly, pgmconfig.DefaultPluginConfig())
} }
func NewKustTestHarnessAllowPlugins(t *testing.T, path string) *KustTestHarness { func NewKustTestHarnessAllowPlugins(t *testing.T, path string) *KustTestHarness {
return NewKustTestHarnessFull( return NewKustTestHarnessFull(
t, path, fLdr.RestrictionRootOnly, config.ActivePluginConfig()) t, path, fLdr.RestrictionRootOnly, pgmconfig.ActivePluginConfig())
} }
func NewKustTestHarnessNoLoadRestrictor(t *testing.T, path string) *KustTestHarness { func NewKustTestHarnessNoLoadRestrictor(t *testing.T, path string) *KustTestHarness {
return NewKustTestHarnessFull( return NewKustTestHarnessFull(
t, path, fLdr.RestrictionNone, config.DefaultPluginConfig()) t, path, fLdr.RestrictionNone, pgmconfig.DefaultPluginConfig())
} }
func NewKustTestHarnessFull( func NewKustTestHarnessFull(

View File

@@ -13,7 +13,6 @@ import (
"sigs.k8s.io/kustomize/api/pgmconfig" "sigs.k8s.io/kustomize/api/pgmconfig"
"sigs.k8s.io/kustomize/api/plugins/compiler" "sigs.k8s.io/kustomize/api/plugins/compiler"
"sigs.k8s.io/kustomize/api/plugins/config"
) )
// PluginTestEnv manages the plugin test environment. // PluginTestEnv manages the plugin test environment.
@@ -71,7 +70,7 @@ func (x *PluginTestEnv) makeCompiler() *compiler.Compiler {
// $objRoot // $objRoot
// so set things up accordingly. // so set things up accordingly.
objRoot := filepath.Join( objRoot := filepath.Join(
x.workDir, pgmconfig.ProgramName, config.PluginRoot) x.workDir, pgmconfig.ProgramName, pgmconfig.PluginRoot)
err := os.MkdirAll(objRoot, os.ModePerm) err := os.MkdirAll(objRoot, os.ModePerm)
if err != nil { if err != nil {
x.t.Error(err) x.t.Error(err)
@@ -100,14 +99,14 @@ func (x *PluginTestEnv) removeWorkDir() {
} }
func (x *PluginTestEnv) setEnv() { func (x *PluginTestEnv) setEnv() {
x.oldXdg, x.wasSet = os.LookupEnv(pgmconfig.XdgConfigHome) x.oldXdg, x.wasSet = os.LookupEnv(pgmconfig.XdgConfigHomeEnv)
os.Setenv(pgmconfig.XdgConfigHome, x.workDir) os.Setenv(pgmconfig.XdgConfigHomeEnv, x.workDir)
} }
func (x *PluginTestEnv) resetEnv() { func (x *PluginTestEnv) resetEnv() {
if x.wasSet { if x.wasSet {
os.Setenv(pgmconfig.XdgConfigHome, x.oldXdg) os.Setenv(pgmconfig.XdgConfigHomeEnv, x.oldXdg)
} else { } else {
os.Unsetenv(pgmconfig.XdgConfigHome) os.Unsetenv(pgmconfig.XdgConfigHomeEnv)
} }
} }

View File

@@ -13,7 +13,6 @@ import (
"sigs.k8s.io/kustomize/api/filesys" "sigs.k8s.io/kustomize/api/filesys"
"sigs.k8s.io/kustomize/api/krusty" "sigs.k8s.io/kustomize/api/krusty"
"sigs.k8s.io/kustomize/api/pgmconfig" "sigs.k8s.io/kustomize/api/pgmconfig"
"sigs.k8s.io/kustomize/api/plugins/config"
"sigs.k8s.io/kustomize/api/resmap" "sigs.k8s.io/kustomize/api/resmap"
"sigs.k8s.io/kustomize/api/resource" "sigs.k8s.io/kustomize/api/resource"
"sigs.k8s.io/yaml" "sigs.k8s.io/yaml"
@@ -75,7 +74,7 @@ func NewCmdBuild(out io.Writer) *cobra.Command {
"output", "o", "", "output", "o", "",
"If specified, write the build output to this path.") "If specified, write the build output to this path.")
krusty.AddFlagLoadRestrictor(cmd.Flags()) krusty.AddFlagLoadRestrictor(cmd.Flags())
config.AddFlagEnablePlugins( pgmconfig.AddFlagEnablePlugins(
cmd.Flags(), &o.pluginsEnabled) cmd.Flags(), &o.pluginsEnabled)
addFlagReorderOutput(cmd.Flags()) addFlagReorderOutput(cmd.Flags())
cmd.AddCommand(NewCmdBuildPrune(out)) cmd.AddCommand(NewCmdBuildPrune(out))