@@ -2,8 +2,8 @@ package clusterapi
22
33import (
44 "fmt"
5+ "os"
56 "path/filepath"
6- "sort"
77
88 "github.com/pkg/errors"
99 corev1 "k8s.io/api/core/v1"
@@ -30,13 +30,12 @@ const (
3030 manifestDir = "cluster-api"
3131)
3232
33- var _ asset.WritableAsset = (* Cluster )(nil )
33+ var _ asset.WritableRuntimeAsset = (* Cluster )(nil )
3434
3535// Cluster generates manifests for target cluster
3636// creation using CAPI.
3737type Cluster struct {
38- FileList []* asset.File
39- Manifests capiutils.Manifests `json:"-"`
38+ FileList []* asset.RuntimeFile
4039}
4140
4241// Name returns a human friendly name for the operator.
@@ -74,15 +73,18 @@ func (c *Cluster) Generate(dependencies asset.Parents) error {
7473 return nil
7574 }
7675
77- c .FileList = []* asset.File {}
78- c .Manifests = capiutils.Manifests {}
76+ if err := os .MkdirAll (filepath .Dir (manifestDir ), 0755 ); err != nil {
77+ return err
78+ }
79+
80+ c .FileList = []* asset.RuntimeFile {}
7981
8082 namespace := & corev1.Namespace {
8183 ObjectMeta : metav1.ObjectMeta {
8284 Name : capiutils .Namespace ,
8385 },
8486 }
85- c .Manifests = append (c .Manifests , & capiutils. Manifest {Object : namespace , Filename : "00_capi-namespace.yaml" })
87+ c .FileList = append (c .FileList , & asset. RuntimeFile {Object : namespace , File : asset. File { Filename : "00_capi-namespace.yaml" } })
8688
8789 cluster := & clusterv1.Cluster {
8890 ObjectMeta : metav1.ObjectMeta {
@@ -91,7 +93,7 @@ func (c *Cluster) Generate(dependencies asset.Parents) error {
9193 },
9294 Spec : clusterv1.ClusterSpec {},
9395 }
94- c .Manifests = append (c .Manifests , & capiutils. Manifest {Object : cluster , Filename : "01_capi-cluster.yaml" })
96+ c .FileList = append (c .FileList , & asset. RuntimeFile {Object : cluster , File : asset. File { Filename : "01_capi-cluster.yaml" } })
9597
9698 // Gather the ignition files, and store them in a secret.
9799 {
@@ -100,9 +102,9 @@ func (c *Cluster) Generate(dependencies asset.Parents) error {
100102 if err != nil {
101103 return errors .Wrap (err , "unable to inject installation info" )
102104 }
103- c .Manifests = append (c .Manifests ,
104- & capiutils. Manifest {
105- Filename : "01_ignition-secret-master.yaml" ,
105+ c .FileList = append (c .FileList ,
106+ & asset. RuntimeFile {
107+ File : asset. File { Filename : "01_ignition-secret-master.yaml" } ,
106108 Object : & corev1.Secret {
107109 ObjectMeta : metav1.ObjectMeta {
108110 Name : fmt .Sprintf ("%s-%s" , clusterID .InfraID , "master" ),
@@ -117,8 +119,8 @@ func (c *Cluster) Generate(dependencies asset.Parents) error {
117119 },
118120 },
119121 },
120- & capiutils. Manifest {
121- Filename : "01_ignition-secret-bootstrap.yaml" ,
122+ & asset. RuntimeFile {
123+ File : asset. File { Filename : "01_ignition-secret-bootstrap.yaml" } ,
122124 Object : & corev1.Secret {
123125 ObjectMeta : metav1.ObjectMeta {
124126 Name : fmt .Sprintf ("%s-%s" , clusterID .InfraID , "bootstrap" ),
@@ -164,26 +166,39 @@ func (c *Cluster) Generate(dependencies asset.Parents) error {
164166 return fmt .Errorf ("failed to generate manifests: cluster.Spec.InfrastructureRef was never set" )
165167 }
166168
169+ // Append the infrastructure manifests.
170+ c .FileList = append (c .FileList , out .Manifests ... )
171+
167172 // Create the infrastructure manifests.
168- sort .Sort (c .Manifests )
169- for _ , m := range c .Manifests {
173+ for _ , m := range c .FileList {
170174 objData , err := yaml .Marshal (m .Object )
171175 if err != nil {
172176 return errors .Wrapf (err , "failed to marshal infrastructure manifest %s" , m .Filename )
173177 }
178+ m .Data = objData
174179
175- c .FileList = append (c .FileList , & asset.File {
176- Filename : filepath .Join (manifestDir , m .Filename ),
177- Data : objData ,
178- })
180+ // If the filename is already a path, do not append the manifestDir.
181+ if filepath .Dir (m .Filename ) == manifestDir {
182+ continue
183+ }
184+ m .Filename = filepath .Join (manifestDir , m .Filename )
179185 }
180- asset .SortFiles (c .FileList )
181186
187+ asset .SortManifestFiles (c .FileList )
182188 return nil
183189}
184190
185191// Files returns the files generated by the asset.
186192func (c * Cluster ) Files () []* asset.File {
193+ files := []* asset.File {}
194+ for _ , f := range c .FileList {
195+ files = append (files , & f .File )
196+ }
197+ return files
198+ }
199+
200+ // RuntimeFiles returns the files generated by the asset.
201+ func (c * Cluster ) RuntimeFiles () []* asset.RuntimeFile {
187202 return c .FileList
188203}
189204
@@ -204,10 +219,7 @@ func (c *Cluster) Load(f asset.FileFetcher) (bool, error) {
204219 fileList := append (yamlFileList , ymlFileList ... ) //nolint:gocritic
205220 fileList = append (fileList , jsonFileList ... )
206221
207- c .FileList = append (c .FileList , fileList ... )
208- asset .SortFiles (c .FileList )
209-
210- for _ , file := range c .FileList {
222+ for _ , file := range fileList {
211223 u := & unstructured.Unstructured {}
212224 if err := yaml .Unmarshal (file .Data , u ); err != nil {
213225 return false , errors .Wrap (err , "failed to unmarshal file" )
@@ -219,12 +231,14 @@ func (c *Cluster) Load(f asset.FileFetcher) (bool, error) {
219231 if err := clusterapi .Scheme .Convert (u , obj , nil ); err != nil {
220232 return false , errors .Wrap (err , "failed to convert object" )
221233 }
222- c .Manifests = append (c .Manifests , & capiutils.Manifest {
223- Filename : file .Filename ,
224- Object : obj .(client.Object ),
234+ c .FileList = append (c .FileList , & asset.RuntimeFile {
235+ File : asset.File {
236+ Filename : file .Filename ,
237+ Data : file .Data },
238+ Object : obj .(client.Object ),
225239 })
226240 }
227241
228- sort . Sort (c .Manifests )
242+ asset . SortManifestFiles (c .FileList )
229243 return len (c .FileList ) > 0 , nil
230244}
0 commit comments