@@ -13,6 +13,8 @@ import (
1313 hivev1 "github.com/openshift/hive/apis/hive/v1"
1414 "github.com/openshift/installer/pkg/asset"
1515 "github.com/openshift/installer/pkg/asset/agent"
16+ "github.com/openshift/installer/pkg/asset/agent/joiner"
17+ "github.com/openshift/installer/pkg/asset/agent/workflow"
1618 "github.com/openshift/installer/pkg/asset/releaseimage"
1719 "github.com/openshift/installer/pkg/version"
1820)
@@ -38,50 +40,69 @@ func (*ClusterImageSet) Name() string {
3840// the asset.
3941func (* ClusterImageSet ) Dependencies () []asset.Asset {
4042 return []asset.Asset {
43+ & workflow.AgentWorkflow {},
44+ & joiner.ClusterInfo {},
4145 & releaseimage.Image {},
4246 & agent.OptionalInstallConfig {},
4347 }
4448}
4549
4650// Generate generates the ClusterImageSet manifest.
4751func (a * ClusterImageSet ) Generate (dependencies asset.Parents ) error {
48-
52+ agentWorkflow := & workflow.AgentWorkflow {}
53+ clusterInfo := & joiner.ClusterInfo {}
4954 releaseImage := & releaseimage.Image {}
5055 installConfig := & agent.OptionalInstallConfig {}
51- dependencies .Get (releaseImage , installConfig )
56+ dependencies .Get (releaseImage , installConfig , agentWorkflow , clusterInfo )
5257
53- currentVersion , err := version .Version ()
54- if err != nil {
55- return err
58+ switch agentWorkflow .Workflow {
59+ case workflow .AgentWorkflowTypeInstall :
60+ currentVersion , err := version .Version ()
61+ if err != nil {
62+ return err
63+ }
64+
65+ clusterNamespace := ""
66+ if installConfig .Config != nil {
67+ clusterNamespace = installConfig .ClusterNamespace ()
68+ }
69+ err = a .generateManifest (currentVersion , releaseImage .PullSpec , clusterNamespace )
70+ if err != nil {
71+ return err
72+ }
73+ case workflow .AgentWorkflowTypeAddNodes :
74+ return a .generateManifest (clusterInfo .Version , clusterInfo .ReleaseImage , clusterInfo .Namespace )
75+
76+ default :
77+ return fmt .Errorf ("AgentWorkflowType value not supported: %s" , agentWorkflow .Workflow )
5678 }
5779
80+ return a .finish (agentWorkflow .Workflow )
81+ }
82+
83+ func (a * ClusterImageSet ) generateManifest (version , releaseImage , clusterNamespace string ) error {
5884 clusterImageSet := & hivev1.ClusterImageSet {
5985 ObjectMeta : metav1.ObjectMeta {
60- Name : fmt .Sprintf ("openshift-%s" , currentVersion ),
86+ Name : fmt .Sprintf ("openshift-%s" , version ),
87+ Namespace : clusterNamespace ,
6188 },
6289 Spec : hivev1.ClusterImageSetSpec {
63- ReleaseImage : releaseImage . PullSpec ,
90+ ReleaseImage : releaseImage ,
6491 },
6592 }
6693
67- if installConfig .Config != nil {
68- clusterImageSet .ObjectMeta .Namespace = installConfig .ClusterNamespace ()
69-
70- }
71-
72- a .Config = clusterImageSet
73-
7494 configData , err := yaml .Marshal (clusterImageSet )
7595 if err != nil {
7696 return errors .Wrap (err , "failed to marshal agent cluster image set" )
7797 }
7898
99+ a .Config = clusterImageSet
79100 a .File = & asset.File {
80101 Filename : clusterImageSetFilename ,
81102 Data : configData ,
82103 }
83104
84- return a . finish ()
105+ return nil
85106}
86107
87108// Files returns the files generated by the asset.
@@ -95,6 +116,12 @@ func (a *ClusterImageSet) Files() []*asset.File {
95116// Load returns ClusterImageSet asset from the disk.
96117func (a * ClusterImageSet ) Load (f asset.FileFetcher ) (bool , error ) {
97118
119+ agentWorkflow := & workflow.AgentWorkflow {}
120+ _ , err := agentWorkflow .Load (f )
121+ if err != nil {
122+ return false , err
123+ }
124+
98125 clusterImageSetFile , err := f .FetchByName (clusterImageSetFilename )
99126 if err != nil {
100127 if os .IsNotExist (err ) {
@@ -112,36 +139,41 @@ func (a *ClusterImageSet) Load(f asset.FileFetcher) (bool, error) {
112139 }
113140 a .Config = clusterImageSet
114141
115- if err = a .finish (); err != nil {
142+ if err = a .finish (agentWorkflow . Workflow ); err != nil {
116143 return false , err
117144 }
118145 return true , nil
119146}
120147
121- func (a * ClusterImageSet ) finish () error {
148+ func (a * ClusterImageSet ) finish (workflowType workflow. AgentWorkflowType ) error {
122149
123150 if a .Config == nil {
124151 return errors .New ("missing configuration or manifest file" )
125152 }
126153
127- if err := a .validateClusterImageSet ().ToAggregate (); err != nil {
154+ if err := a .validateClusterImageSet (workflowType ).ToAggregate (); err != nil {
128155 return errors .Wrapf (err , "invalid ClusterImageSet configuration" )
129156 }
130157
131158 return nil
132159}
133160
134- func (a * ClusterImageSet ) validateClusterImageSet () field.ErrorList {
161+ func (a * ClusterImageSet ) validateClusterImageSet (workflowType workflow. AgentWorkflowType ) field.ErrorList {
135162 allErrs := field.ErrorList {}
136163
137- if err := a .validateReleaseVersion (); err != nil {
164+ if err := a .validateReleaseVersion (workflowType ); err != nil {
138165 allErrs = append (allErrs , err ... )
139166 }
140167
141168 return allErrs
142169}
143170
144- func (a * ClusterImageSet ) validateReleaseVersion () field.ErrorList {
171+ func (a * ClusterImageSet ) validateReleaseVersion (workflowType workflow.AgentWorkflowType ) field.ErrorList {
172+
173+ // skip release version check in case of add nodes workflow
174+ if workflowType == workflow .AgentWorkflowTypeAddNodes {
175+ return nil
176+ }
145177
146178 var allErrs field.ErrorList
147179
0 commit comments