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