diff --git a/pkg/asset/agent/workflow/agentworkflow.go b/pkg/asset/agent/workflow/agentworkflow.go new file mode 100644 index 0000000000..f6789547b0 --- /dev/null +++ b/pkg/asset/agent/workflow/agentworkflow.go @@ -0,0 +1,67 @@ +package workflow + +import ( + "fmt" + "os" + + "github.com/openshift/installer/pkg/asset" + "github.com/pkg/errors" +) + +// AgentWorkflow allows other assets to check +// which is the workflow currently active +type AgentWorkflow struct { + File *asset.File + Workflow AgentWorkflowType +} + +var _ asset.WritableAsset = (*AgentWorkflow)(nil) + +// Name returns a human friendly name for the asset. +func (*AgentWorkflow) Name() string { + return "Agent Workflow" +} + +// Dependencies returns all of the dependencies directly needed to generate +// the asset. +func (*AgentWorkflow) Dependencies() []asset.Asset { + return []asset.Asset{} +} + +// Generate generates the AgentWorkflow asset. +func (a *AgentWorkflow) Generate(dependencies asset.Parents) error { + + // Set install workflow as a default + a.Workflow = AgentWorkflowTypeInstall + a.File = &asset.File{ + Filename: agentWorkflowFilename, + Data: []byte(a.Workflow), + } + + return nil +} + +// Files returns the files generated by the asset. +func (a *AgentWorkflow) Files() []*asset.File { + if a.File != nil { + return []*asset.File{a.File} + } + return []*asset.File{} +} + +// Load returns the asset from disk. +func (a *AgentWorkflow) Load(f asset.FileFetcher) (bool, error) { + file, err := f.FetchByName(agentWorkflowFilename) + if err != nil { + if os.IsNotExist(err) { + return false, nil + } + return false, errors.Wrap(err, fmt.Sprintf("failed to load %s file", agentWorkflowFilename)) + } + + // Get the current workflow + a.Workflow = AgentWorkflowType(file.Data) + a.File = file + + return true, nil +} diff --git a/pkg/asset/agent/workflow/agentworkflowaddnodes.go b/pkg/asset/agent/workflow/agentworkflowaddnodes.go new file mode 100644 index 0000000000..fcad75d44b --- /dev/null +++ b/pkg/asset/agent/workflow/agentworkflowaddnodes.go @@ -0,0 +1,28 @@ +package workflow + +import "github.com/openshift/installer/pkg/asset" + +// AgentWorkflowAddNodes is meant just to define +// the add nodes workflow +type AgentWorkflowAddNodes struct { + AgentWorkflow +} + +var _ asset.WritableAsset = (*AgentWorkflowAddNodes)(nil) + +// Name returns a human friendly name for the asset. +func (*AgentWorkflowAddNodes) Name() string { + return "Agent Workflow Add Nodes" +} + +// Generate generates the AgentWorkflow asset. +func (a *AgentWorkflowAddNodes) Generate(dependencies asset.Parents) error { + + a.Workflow = AgentWorkflowTypeAddNodes + a.File = &asset.File{ + Filename: agentWorkflowFilename, + Data: []byte(a.Workflow), + } + + return nil +} diff --git a/pkg/asset/agent/workflow/commons.go b/pkg/asset/agent/workflow/commons.go new file mode 100644 index 0000000000..54fe540ab5 --- /dev/null +++ b/pkg/asset/agent/workflow/commons.go @@ -0,0 +1,12 @@ +package workflow + +// AgentWorkflowType defines the supported +// agent workflows. +type AgentWorkflowType string + +const ( + AgentWorkflowTypeInstall AgentWorkflowType = "install" + AgentWorkflowTypeAddNodes AgentWorkflowType = "addnodes" + + agentWorkflowFilename = ".agentworkflow" +)