Add phase, client and helper interfaces

The interfaces are not yet implemented.

Change-Id: Ide9e3691978efe470bf63d1053c8264ffcdf5a4d
This commit is contained in:
Kostiantyn Kalynovskyi 2020-09-08 23:33:56 -05:00 committed by Kostyantyn Kalynovskyi
parent 0a7661ab7c
commit 99d37b3907
2 changed files with 77 additions and 0 deletions

34
pkg/phase/ifc/helper.go Normal file
View File

@ -0,0 +1,34 @@
/*
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
https://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
*/
package ifc
import (
"opendev.org/airship/airshipctl/pkg/api/v1alpha1"
"opendev.org/airship/airshipctl/pkg/cluster/clustermap"
"opendev.org/airship/airshipctl/pkg/document"
)
// Helper is a phase helper that provides phases with additional config related information
type Helper interface {
TargetPath() string
WorkDir() (string, error)
Phase(phaseID ID) (*v1alpha1.Phase, error)
Plan() (*v1alpha1.PhasePlan, error)
ListPhases() ([]*v1alpha1.Phase, error)
ClusterMapAPIobj() (*v1alpha1.ClusterMap, error)
ClusterMap() (clustermap.ClusterMap, error)
ExecutorDoc(phaseID ID) (document.Document, error)
PhaseRoot() string
}

43
pkg/phase/ifc/phase.go Normal file
View File

@ -0,0 +1,43 @@
/*
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
https://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
*/
package ifc
import (
"opendev.org/airship/airshipctl/pkg/api/v1alpha1"
"opendev.org/airship/airshipctl/pkg/cluster/clustermap"
)
// Phase provides a way to interact with a phase
// TODO add render method
type Phase interface {
Validate() error
Run(RunOptions) error
DocumentRoot() string
Details() (string, error)
Executor() (Executor, error)
}
// ID uniquely identifies the phase
type ID struct {
Name string
Namespace string
}
// Client is a phase client that can be used by command line or ui packages
type Client interface {
PhaseByID(ID) (Phase, error)
PhaseByAPIObj(*v1alpha1.Phase) (Phase, error)
ClusterMap() (clustermap.ClusterMap, error)
}