From 2b30dd0d7155f26bf99c368f286b741850281f4e Mon Sep 17 00:00:00 2001 From: Kostiantyn Kalynovskyi Date: Mon, 21 Sep 2020 21:07:47 -0500 Subject: [PATCH] Stop using CurrentContextEntryPoint in remote pkg Note this commit doesn't refactor remote package, it is only created to shift from using CurrentContextEntryPoint function, which would in turn allow us to refactor config package and get rid of cluster types in airship config. Relates-To: #349 Relates-To: #246 Relates-To: #265 Change-Id: I1c941c8ade3497b9911fb126465aa85c25567431 --- pkg/remote/management.go | 14 +++++++++++--- pkg/remote/management_test.go | 5 ++++- pkg/remote/remote_direct.go | 12 ++++++++++-- .../ephemeral/bootstrap/kustomization.yaml | 5 +++-- .../site/test-site/ephemeral/bootstrap/phase.yaml | 12 ++++++++++++ pkg/remote/testdata/base/metadata.yaml | 2 ++ pkg/remote/testdata/emptyurl/metadata.yaml | 2 ++ .../ephemeral/bootstrap/kustomization.yaml | 5 +++-- .../site/test-site/ephemeral/bootstrap/phase.yaml | 12 ++++++++++++ pkg/remote/testdata/noisourl/metadata.yaml | 2 ++ .../ephemeral/bootstrap/kustomization.yaml | 3 ++- .../site/test-site/ephemeral/bootstrap/phase.yaml | 12 ++++++++++++ pkg/remote/testdata/noremote/metadata.yaml | 2 ++ 13 files changed, 77 insertions(+), 11 deletions(-) create mode 100644 pkg/remote/testdata/base/manifests/site/test-site/ephemeral/bootstrap/phase.yaml create mode 100644 pkg/remote/testdata/base/metadata.yaml create mode 100644 pkg/remote/testdata/emptyurl/metadata.yaml create mode 100644 pkg/remote/testdata/noisourl/manifests/site/test-site/ephemeral/bootstrap/phase.yaml create mode 100644 pkg/remote/testdata/noisourl/metadata.yaml create mode 100644 pkg/remote/testdata/noremote/manifests/site/test-site/ephemeral/bootstrap/phase.yaml create mode 100644 pkg/remote/testdata/noremote/metadata.yaml diff --git a/pkg/remote/management.go b/pkg/remote/management.go index 85f022974..ce61881cb 100644 --- a/pkg/remote/management.go +++ b/pkg/remote/management.go @@ -21,6 +21,8 @@ import ( "opendev.org/airship/airshipctl/pkg/config" "opendev.org/airship/airshipctl/pkg/document" "opendev.org/airship/airshipctl/pkg/log" + "opendev.org/airship/airshipctl/pkg/phase" + "opendev.org/airship/airshipctl/pkg/phase/ifc" "opendev.org/airship/airshipctl/pkg/remote/power" "opendev.org/airship/airshipctl/pkg/remote/redfish" redfishdell "opendev.org/airship/airshipctl/pkg/remote/redfish/vendors/dell" @@ -115,7 +117,7 @@ func ByName(name string) HostSelector { // NewManager provides a manager that exposes the capability to perform remote direct functionality and other // out-of-band management on multiple hosts. -func NewManager(cfg *config.Config, phase string, hosts ...HostSelector) (*Manager, error) { +func NewManager(cfg *config.Config, phaseName string, hosts ...HostSelector) (*Manager, error) { managementCfg, err := cfg.CurrentContextManagementConfig() if err != nil { return nil, err @@ -125,12 +127,18 @@ func NewManager(cfg *config.Config, phase string, hosts ...HostSelector) (*Manag return nil, err } - entrypoint, err := cfg.CurrentContextEntryPoint(phase) + helper, err := phase.NewHelper(cfg) if err != nil { return nil, err } - docBundle, err := document.NewBundleByPath(entrypoint) + phaseClient := phase.NewClient(helper) + phase, err := phaseClient.PhaseByID(ifc.ID{Name: phaseName}) + if err != nil { + return nil, err + } + + docBundle, err := document.NewBundleByPath(phase.DocumentRoot()) if err != nil { return nil, err } diff --git a/pkg/remote/management_test.go b/pkg/remote/management_test.go index a7f7539c3..ca2ad8ada 100644 --- a/pkg/remote/management_test.go +++ b/pkg/remote/management_test.go @@ -56,8 +56,8 @@ func withTestDataPath(path string) Configuration { if err != nil { panic(fmt.Sprintf("Unable to initialize management tests. Current Context error %q", err)) } - manifest.TargetPath = fmt.Sprintf("testdata/%s", path) + manifest.MetadataPath = "metadata.yaml" } } @@ -108,6 +108,9 @@ func TestNewManagerMultipleSelectorsNoMatch(t *testing.T) { manager, err := NewManager(settings, config.BootstrapPhase, ByName("master-2"), ByLabel(document.EphemeralHostSelector)) + + // Must return ErrNoHostsFound here, without check for specific error, test can panic + require.Equal(t, ErrNoHostsFound{}, err) require.Equal(t, 0, len(manager.Hosts)) assert.Error(t, err) } diff --git a/pkg/remote/remote_direct.go b/pkg/remote/remote_direct.go index 3e0fed0c4..53504c7df 100644 --- a/pkg/remote/remote_direct.go +++ b/pkg/remote/remote_direct.go @@ -19,17 +19,25 @@ import ( "opendev.org/airship/airshipctl/pkg/config" "opendev.org/airship/airshipctl/pkg/document" "opendev.org/airship/airshipctl/pkg/log" + "opendev.org/airship/airshipctl/pkg/phase" + "opendev.org/airship/airshipctl/pkg/phase/ifc" "opendev.org/airship/airshipctl/pkg/remote/power" ) // DoRemoteDirect bootstraps the ephemeral node. func (b baremetalHost) DoRemoteDirect(cfg *config.Config) error { - root, err := cfg.CurrentContextEntryPoint(config.BootstrapPhase) + helper, err := phase.NewHelper(cfg) if err != nil { return err } - docBundle, err := document.NewBundleByPath(root) + phaseClient := phase.NewClient(helper) + phase, err := phaseClient.PhaseByID(ifc.ID{Name: config.BootstrapPhase}) + if err != nil { + return err + } + + docBundle, err := document.NewBundleByPath(phase.DocumentRoot()) if err != nil { return err } diff --git a/pkg/remote/testdata/base/manifests/site/test-site/ephemeral/bootstrap/kustomization.yaml b/pkg/remote/testdata/base/manifests/site/test-site/ephemeral/bootstrap/kustomization.yaml index 3a72d08f4..293309dc7 100644 --- a/pkg/remote/testdata/base/manifests/site/test-site/ephemeral/bootstrap/kustomization.yaml +++ b/pkg/remote/testdata/base/manifests/site/test-site/ephemeral/bootstrap/kustomization.yaml @@ -1,3 +1,4 @@ resources: - - baremetal.yaml - - remote_direct_configuration.yaml +- baremetal.yaml +- remote_direct_configuration.yaml +- phase.yaml diff --git a/pkg/remote/testdata/base/manifests/site/test-site/ephemeral/bootstrap/phase.yaml b/pkg/remote/testdata/base/manifests/site/test-site/ephemeral/bootstrap/phase.yaml new file mode 100644 index 000000000..26fcb21db --- /dev/null +++ b/pkg/remote/testdata/base/manifests/site/test-site/ephemeral/bootstrap/phase.yaml @@ -0,0 +1,12 @@ +--- +apiVersion: airshipit.org/v1alpha1 +kind: Phase +metadata: + name: bootstrap + clusterName: ephemeral-cluster +config: + executorRef: + apiVersion: airshipit.org/v1alpha1 + kind: KubernetesApply + name: kubernetes-apply + documentEntryPoint: manifests/site/test-site/ephemeral/bootstrap \ No newline at end of file diff --git a/pkg/remote/testdata/base/metadata.yaml b/pkg/remote/testdata/base/metadata.yaml new file mode 100644 index 000000000..501319122 --- /dev/null +++ b/pkg/remote/testdata/base/metadata.yaml @@ -0,0 +1,2 @@ +phase: + path: manifests/site/test-site/ephemeral/bootstrap \ No newline at end of file diff --git a/pkg/remote/testdata/emptyurl/metadata.yaml b/pkg/remote/testdata/emptyurl/metadata.yaml new file mode 100644 index 000000000..c3355489f --- /dev/null +++ b/pkg/remote/testdata/emptyurl/metadata.yaml @@ -0,0 +1,2 @@ +phase: + path: emptyurl/manifests/site/test-site/ephemeral/bootstrap \ No newline at end of file diff --git a/pkg/remote/testdata/noisourl/manifests/site/test-site/ephemeral/bootstrap/kustomization.yaml b/pkg/remote/testdata/noisourl/manifests/site/test-site/ephemeral/bootstrap/kustomization.yaml index 3a72d08f4..293309dc7 100644 --- a/pkg/remote/testdata/noisourl/manifests/site/test-site/ephemeral/bootstrap/kustomization.yaml +++ b/pkg/remote/testdata/noisourl/manifests/site/test-site/ephemeral/bootstrap/kustomization.yaml @@ -1,3 +1,4 @@ resources: - - baremetal.yaml - - remote_direct_configuration.yaml +- baremetal.yaml +- remote_direct_configuration.yaml +- phase.yaml diff --git a/pkg/remote/testdata/noisourl/manifests/site/test-site/ephemeral/bootstrap/phase.yaml b/pkg/remote/testdata/noisourl/manifests/site/test-site/ephemeral/bootstrap/phase.yaml new file mode 100644 index 000000000..26fcb21db --- /dev/null +++ b/pkg/remote/testdata/noisourl/manifests/site/test-site/ephemeral/bootstrap/phase.yaml @@ -0,0 +1,12 @@ +--- +apiVersion: airshipit.org/v1alpha1 +kind: Phase +metadata: + name: bootstrap + clusterName: ephemeral-cluster +config: + executorRef: + apiVersion: airshipit.org/v1alpha1 + kind: KubernetesApply + name: kubernetes-apply + documentEntryPoint: manifests/site/test-site/ephemeral/bootstrap \ No newline at end of file diff --git a/pkg/remote/testdata/noisourl/metadata.yaml b/pkg/remote/testdata/noisourl/metadata.yaml new file mode 100644 index 000000000..501319122 --- /dev/null +++ b/pkg/remote/testdata/noisourl/metadata.yaml @@ -0,0 +1,2 @@ +phase: + path: manifests/site/test-site/ephemeral/bootstrap \ No newline at end of file diff --git a/pkg/remote/testdata/noremote/manifests/site/test-site/ephemeral/bootstrap/kustomization.yaml b/pkg/remote/testdata/noremote/manifests/site/test-site/ephemeral/bootstrap/kustomization.yaml index db5b66552..4a26e9671 100644 --- a/pkg/remote/testdata/noremote/manifests/site/test-site/ephemeral/bootstrap/kustomization.yaml +++ b/pkg/remote/testdata/noremote/manifests/site/test-site/ephemeral/bootstrap/kustomization.yaml @@ -1,2 +1,3 @@ resources: - - baremetal.yaml +- baremetal.yaml +- phase.yaml diff --git a/pkg/remote/testdata/noremote/manifests/site/test-site/ephemeral/bootstrap/phase.yaml b/pkg/remote/testdata/noremote/manifests/site/test-site/ephemeral/bootstrap/phase.yaml new file mode 100644 index 000000000..26fcb21db --- /dev/null +++ b/pkg/remote/testdata/noremote/manifests/site/test-site/ephemeral/bootstrap/phase.yaml @@ -0,0 +1,12 @@ +--- +apiVersion: airshipit.org/v1alpha1 +kind: Phase +metadata: + name: bootstrap + clusterName: ephemeral-cluster +config: + executorRef: + apiVersion: airshipit.org/v1alpha1 + kind: KubernetesApply + name: kubernetes-apply + documentEntryPoint: manifests/site/test-site/ephemeral/bootstrap \ No newline at end of file diff --git a/pkg/remote/testdata/noremote/metadata.yaml b/pkg/remote/testdata/noremote/metadata.yaml new file mode 100644 index 000000000..fe3390d5b --- /dev/null +++ b/pkg/remote/testdata/noremote/metadata.yaml @@ -0,0 +1,2 @@ +phase: + path: manifests/site/test-site/ephemeral/bootstrap