Merge "Use Helper in clusterctl and kube apply executors"
This commit is contained in:
commit
567e5060db
@ -16,7 +16,6 @@ package client
|
||||
|
||||
import (
|
||||
"io"
|
||||
"path/filepath"
|
||||
|
||||
"k8s.io/apimachinery/pkg/runtime/schema"
|
||||
|
||||
@ -34,7 +33,6 @@ var _ ifc.Executor = &ClusterctlExecutor{}
|
||||
// ClusterctlExecutor phase executor
|
||||
type ClusterctlExecutor struct {
|
||||
clusterName string
|
||||
dumpRoot string
|
||||
|
||||
Interface
|
||||
bundle document.Bundle
|
||||
@ -59,11 +57,7 @@ func NewExecutor(cfg ifc.ExecutorConfig) (ifc.Executor, error) {
|
||||
if err := cfg.ExecutorDocument.ToAPIObject(options, airshipv1.Scheme); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
tgtPath, err := cfg.AirshipConfig.CurrentContextTargetPath()
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
client, err := NewClient(tgtPath, log.DebugEnabled(), options)
|
||||
client, err := NewClient(cfg.Helper.TargetPath(), log.DebugEnabled(), options)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
@ -73,7 +67,6 @@ func NewExecutor(cfg ifc.ExecutorConfig) (ifc.Executor, error) {
|
||||
bundle: cfg.ExecutorBundle,
|
||||
options: options,
|
||||
kubecfg: cfg.KubeConfig,
|
||||
dumpRoot: filepath.Dir(cfg.AirshipConfig.LoadedConfigPath()),
|
||||
}, nil
|
||||
}
|
||||
|
||||
@ -100,7 +93,7 @@ func (c *ClusterctlExecutor) init(opts ifc.RunOptions, evtCh chan events.Event)
|
||||
Operation: events.ClusterctlInitStart,
|
||||
},
|
||||
}
|
||||
kubeConfigFile, cleanup, err := c.kubecfg.WriteTempFile(c.dumpRoot)
|
||||
kubeConfigFile, cleanup, err := c.kubecfg.GetFile()
|
||||
if err != nil {
|
||||
c.handleErr(err, evtCh)
|
||||
return
|
||||
|
@ -31,6 +31,7 @@ import (
|
||||
airerrors "opendev.org/airship/airshipctl/pkg/errors"
|
||||
"opendev.org/airship/airshipctl/pkg/events"
|
||||
"opendev.org/airship/airshipctl/pkg/k8s/kubeconfig"
|
||||
"opendev.org/airship/airshipctl/pkg/phase"
|
||||
"opendev.org/airship/airshipctl/pkg/phase/ifc"
|
||||
"opendev.org/airship/airshipctl/testutil/fs"
|
||||
)
|
||||
@ -76,21 +77,12 @@ func TestNewExecutor(t *testing.T) {
|
||||
|
||||
testCases := []struct {
|
||||
name string
|
||||
settings *config.Config
|
||||
helper ifc.Helper
|
||||
expectedErr error
|
||||
}{
|
||||
{
|
||||
name: "New Clusterctl Executor",
|
||||
settings: sampleSettings(),
|
||||
},
|
||||
{
|
||||
name: "New Clusterctl Executor",
|
||||
settings: func() *config.Config {
|
||||
s := sampleSettings()
|
||||
s.CurrentContext = "non-existent-ctx"
|
||||
return s
|
||||
}(),
|
||||
expectedErr: config.ErrMissingConfig{What: "Context with name 'non-existent-ctx'"},
|
||||
name: "New Clusterctl Executor",
|
||||
helper: makeDefaultHelper(t),
|
||||
},
|
||||
}
|
||||
for _, test := range testCases {
|
||||
@ -99,7 +91,7 @@ func TestNewExecutor(t *testing.T) {
|
||||
_, actualErr := cctlclient.NewExecutor(ifc.ExecutorConfig{
|
||||
ExecutorDocument: sampleCfgDoc,
|
||||
ExecutorBundle: bundle,
|
||||
AirshipConfig: tt.settings,
|
||||
Helper: tt.helper,
|
||||
})
|
||||
assert.Equal(t, tt.expectedErr, actualErr)
|
||||
})
|
||||
@ -185,7 +177,7 @@ func TestExecutorRun(t *testing.T) {
|
||||
ifc.ExecutorConfig{
|
||||
ExecutorDocument: tt.cfgDoc,
|
||||
ExecutorBundle: bundle,
|
||||
AirshipConfig: sampleSettings(),
|
||||
Helper: makeDefaultHelper(t),
|
||||
KubeConfig: kubeCfg,
|
||||
})
|
||||
require.NoError(t, err)
|
||||
@ -208,7 +200,7 @@ func TestExecutorValidate(t *testing.T) {
|
||||
ifc.ExecutorConfig{
|
||||
ExecutorDocument: sampleCfgDoc,
|
||||
ExecutorBundle: bundle,
|
||||
AirshipConfig: sampleSettings(),
|
||||
Helper: makeDefaultHelper(t),
|
||||
})
|
||||
require.NoError(t, err)
|
||||
expectedErr := airerrors.ErrNotImplemented{}
|
||||
@ -225,7 +217,7 @@ func TestExecutorRender(t *testing.T) {
|
||||
ifc.ExecutorConfig{
|
||||
ExecutorDocument: sampleCfgDoc,
|
||||
ExecutorBundle: bundle,
|
||||
AirshipConfig: sampleSettings(),
|
||||
Helper: makeDefaultHelper(t),
|
||||
})
|
||||
require.NoError(t, err)
|
||||
actualOut := &bytes.Buffer{}
|
||||
@ -233,11 +225,16 @@ func TestExecutorRender(t *testing.T) {
|
||||
assert.Equal(t, expectedErr, actualErr)
|
||||
}
|
||||
|
||||
func sampleSettings() *config.Config {
|
||||
func makeDefaultHelper(t *testing.T) ifc.Helper {
|
||||
t.Helper()
|
||||
cfg := config.NewConfig()
|
||||
cfg.Manifests[config.AirshipDefaultManifest].TargetPath = "./testdata"
|
||||
cfg.Manifests[config.AirshipDefaultManifest].MetadataPath = "metadata.yaml"
|
||||
cfg.SetLoadedConfigPath(".")
|
||||
return cfg
|
||||
helper, err := phase.NewHelper(cfg)
|
||||
require.NoError(t, err)
|
||||
require.NotNil(t, helper)
|
||||
return helper
|
||||
}
|
||||
|
||||
func executorDoc(t *testing.T, action string) document.Document {
|
||||
|
2
pkg/clusterctl/client/testdata/metadata.yaml
vendored
Normal file
2
pkg/clusterctl/client/testdata/metadata.yaml
vendored
Normal file
@ -0,0 +1,2 @@
|
||||
phase:
|
||||
path: executor_move
|
@ -22,7 +22,6 @@ import (
|
||||
"sigs.k8s.io/cli-utils/pkg/common"
|
||||
|
||||
airshipv1 "opendev.org/airship/airshipctl/pkg/api/v1alpha1"
|
||||
"opendev.org/airship/airshipctl/pkg/config"
|
||||
"opendev.org/airship/airshipctl/pkg/document"
|
||||
"opendev.org/airship/airshipctl/pkg/errors"
|
||||
"opendev.org/airship/airshipctl/pkg/events"
|
||||
@ -39,7 +38,7 @@ type ExecutorOptions struct {
|
||||
ExecutorDocument document.Document
|
||||
ExecutorBundle document.Bundle
|
||||
Kubeconfig kubeconfig.Interface
|
||||
AirshipConfig *config.Config
|
||||
Helper ifc.Helper
|
||||
}
|
||||
|
||||
var _ ifc.Executor = &Executor{}
|
||||
@ -59,7 +58,7 @@ func RegisterExecutor(registry map[schema.GroupVersionKind]ifc.ExecutorFactory)
|
||||
func registerExecutor(cfg ifc.ExecutorConfig) (ifc.Executor, error) {
|
||||
return NewExecutor(ExecutorOptions{
|
||||
BundleName: cfg.PhaseName,
|
||||
AirshipConfig: cfg.AirshipConfig,
|
||||
Helper: cfg.Helper,
|
||||
ExecutorBundle: cfg.ExecutorBundle,
|
||||
ExecutorDocument: cfg.ExecutorDocument,
|
||||
Kubeconfig: cfg.KubeConfig,
|
||||
|
@ -27,6 +27,7 @@ import (
|
||||
"opendev.org/airship/airshipctl/pkg/k8s/applier"
|
||||
"opendev.org/airship/airshipctl/pkg/k8s/kubeconfig"
|
||||
"opendev.org/airship/airshipctl/pkg/k8s/utils"
|
||||
"opendev.org/airship/airshipctl/pkg/phase"
|
||||
"opendev.org/airship/airshipctl/pkg/phase/ifc"
|
||||
"opendev.org/airship/airshipctl/testutil/fs"
|
||||
)
|
||||
@ -84,15 +85,15 @@ func TestNewExecutor(t *testing.T) {
|
||||
name string
|
||||
cfgDoc string
|
||||
expectedErr string
|
||||
airConfig *config.Config
|
||||
helper ifc.Helper
|
||||
kubeconf kubeconfig.Interface
|
||||
bundleFunc func(t *testing.T) document.Bundle
|
||||
}{
|
||||
{
|
||||
name: "valid executor",
|
||||
cfgDoc: ValidExecutorDoc,
|
||||
kubeconf: testKubeconfig(testValidKubeconfig),
|
||||
airConfig: makeDefaultConfig(),
|
||||
name: "valid executor",
|
||||
cfgDoc: ValidExecutorDoc,
|
||||
kubeconf: testKubeconfig(testValidKubeconfig),
|
||||
helper: makeDefaultHelper(t),
|
||||
bundleFunc: func(t *testing.T) document.Bundle {
|
||||
return newBundle("testdata/source_bundle", t)
|
||||
},
|
||||
@ -107,7 +108,7 @@ metadata:
|
||||
labels:
|
||||
cli-utils.sigs.k8s.io/inventory-id: "some id"`,
|
||||
expectedErr: "wrong config document",
|
||||
airConfig: makeDefaultConfig(),
|
||||
helper: makeDefaultHelper(t),
|
||||
bundleFunc: func(t *testing.T) document.Bundle {
|
||||
return newBundle("testdata/source_bundle", t)
|
||||
},
|
||||
@ -126,7 +127,7 @@ metadata:
|
||||
ExecutorDocument: doc,
|
||||
ExecutorBundle: tt.bundleFunc(t),
|
||||
Kubeconfig: tt.kubeconf,
|
||||
AirshipConfig: tt.airConfig,
|
||||
Helper: tt.helper,
|
||||
})
|
||||
if tt.expectedErr != "" {
|
||||
require.Error(t, err)
|
||||
@ -151,12 +152,12 @@ func TestExecutorRun(t *testing.T) {
|
||||
kubeconf kubeconfig.Interface
|
||||
execDoc document.Document
|
||||
bundleFunc func(t *testing.T) document.Bundle
|
||||
airConfig *config.Config
|
||||
helper ifc.Helper
|
||||
}{
|
||||
{
|
||||
name: "cant read kubeconfig error",
|
||||
containsErr: "no such file or directory",
|
||||
airConfig: makeDefaultConfig(),
|
||||
helper: makeDefaultHelper(t),
|
||||
bundleFunc: func(t *testing.T) document.Bundle {
|
||||
return newBundle("testdata/source_bundle", t)
|
||||
},
|
||||
@ -168,7 +169,7 @@ func TestExecutorRun(t *testing.T) {
|
||||
execDoc: toKubernetesApply(t, ValidExecutorDoc),
|
||||
containsErr: "Cannot apply nil bundle",
|
||||
kubeconf: testKubeconfig(testValidKubeconfig),
|
||||
airConfig: makeDefaultConfig(),
|
||||
helper: makeDefaultHelper(t),
|
||||
bundleFunc: func(t *testing.T) document.Bundle {
|
||||
return nil
|
||||
},
|
||||
@ -180,7 +181,7 @@ func TestExecutorRun(t *testing.T) {
|
||||
exec, err := applier.NewExecutor(
|
||||
applier.ExecutorOptions{
|
||||
ExecutorDocument: tt.execDoc,
|
||||
AirshipConfig: tt.airConfig,
|
||||
Helper: tt.helper,
|
||||
ExecutorBundle: tt.bundleFunc(t),
|
||||
Kubeconfig: tt.kubeconf,
|
||||
})
|
||||
@ -219,7 +220,8 @@ func TestRender(t *testing.T) {
|
||||
assert.Contains(t, result, "ReplicationController")
|
||||
}
|
||||
|
||||
func makeDefaultConfig() *config.Config {
|
||||
func makeDefaultHelper(t *testing.T) ifc.Helper {
|
||||
t.Helper()
|
||||
conf := &config.Config{
|
||||
CurrentContext: "default",
|
||||
Contexts: map[string]*config.Context{
|
||||
@ -229,12 +231,15 @@ func makeDefaultConfig() *config.Config {
|
||||
},
|
||||
Manifests: map[string]*config.Manifest{
|
||||
"default-manifest": {
|
||||
MetadataPath: "metadata-path",
|
||||
MetadataPath: "metadata.yaml",
|
||||
TargetPath: "testdata",
|
||||
},
|
||||
},
|
||||
}
|
||||
return conf
|
||||
helper, err := phase.NewHelper(conf)
|
||||
require.NoError(t, err)
|
||||
require.NotNil(t, helper)
|
||||
return helper
|
||||
}
|
||||
|
||||
// toKubernetesApply converts string to document object
|
||||
|
2
pkg/k8s/applier/testdata/metadata.yaml
vendored
Normal file
2
pkg/k8s/applier/testdata/metadata.yaml
vendored
Normal file
@ -0,0 +1,2 @@
|
||||
phase:
|
||||
path: "source_bundle"
|
Loading…
x
Reference in New Issue
Block a user