@@ -9,12 +9,12 @@ import (
99
1010 "github.com/pkg/errors"
1111 "github.com/sirupsen/logrus"
12+ meta "k8s.io/apimachinery/pkg/api/meta"
1213 "k8s.io/apimachinery/pkg/runtime"
1314 "k8s.io/apimachinery/pkg/runtime/serializer"
1415 "k8s.io/apimachinery/pkg/util/intstr"
1516 "k8s.io/utils/pointer"
16- capz "sigs.k8s.io/cluster-api-provider-azure/api/v1beta1"
17- ipamv1 "sigs.k8s.io/cluster-api/api/ipam/v1beta1" //nolint:staticcheck //CORS-3563
17+ capz "sigs.k8s.io/cluster-api-provider-azure/api/v1beta1" //nolint:staticcheck //CORS-3563
1818 "sigs.k8s.io/yaml"
1919
2020 configv1 "github.com/openshift/api/config/v1"
@@ -325,14 +325,11 @@ func (w *Worker) Generate(ctx context.Context, dependencies asset.Parents) error
325325 dependencies .Get (clusterID , installConfig , rhcosImage , rhcosRelease , wign )
326326
327327 workerUserDataSecretName := "worker-user-data"
328-
329- machines := []machinev1beta1.Machine {}
330328 machineConfigs := []* mcfgv1.MachineConfig {}
331- machineSets := []runtime.Object {}
332- var ipClaims []ipamv1.IPAddressClaim
333- var ipAddrs []ipamv1.IPAddress
329+ var ipClaims , ipAddrs , machines , machineSets []runtime.Object
334330 var err error
335331 ic := installConfig .Config
332+
336333 for _ , pool := range ic .Compute {
337334 pool := pool // this makes golint happy... G601: Implicit memory aliasing in for loop. (gosec)
338335 if pool .Hyperthreading == types .HyperthreadingDisabled {
@@ -727,9 +724,15 @@ func (w *Worker) Generate(ctx context.Context, dependencies asset.Parents) error
727724 return errors .Wrap (err , "failed to create worker machine objects" )
728725 }
729726
730- machines = data .Machines
731- ipClaims = data .IPClaims
732- ipAddrs = data .IPAddresses
727+ for _ , m := range data .Machines {
728+ machines = append (machines , & m )
729+ }
730+ for _ , c := range data .IPClaims {
731+ ipClaims = append (ipClaims , & c )
732+ }
733+ for _ , a := range data .IPAddresses {
734+ ipAddrs = append (ipAddrs , & a )
735+ }
733736
734737 logrus .Debugf ("Generated %v worker machines." , len (machines ))
735738
@@ -801,58 +804,17 @@ func (w *Worker) Generate(ctx context.Context, dependencies asset.Parents) error
801804 return errors .Wrap (err , "failed to create MachineConfig manifests for worker machines" )
802805 }
803806
804- w .MachineSetFiles = make ([]* asset.File , len (machineSets ))
805- padFormat := fmt .Sprintf ("%%0%dd" , len (fmt .Sprintf ("%d" , len (machineSets ))))
806- for i , machineSet := range machineSets {
807- data , err := yaml .Marshal (machineSet )
808- if err != nil {
809- return errors .Wrapf (err , "marshal worker %d" , i )
810- }
811-
812- padded := fmt .Sprintf (padFormat , i )
813- w .MachineSetFiles [i ] = & asset.File {
814- Filename : filepath .Join (directory , fmt .Sprintf (workerMachineSetFileName , padded )),
815- Data : data ,
816- }
807+ if w .MachineSetFiles , err = serialize (machineSets , workerMachineSetFileName , false ); err != nil {
808+ return fmt .Errorf ("failed to serialize worker machine sets: %w" , err )
817809 }
818-
819- w .IPClaimFiles = make ([]* asset.File , len (ipClaims ))
820- for i , claim := range ipClaims {
821- data , err := yaml .Marshal (claim )
822- if err != nil {
823- return errors .Wrapf (err , "marshal ip claim %v" , claim .Name )
824- }
825-
826- w .IPClaimFiles [i ] = & asset.File {
827- Filename : filepath .Join (directory , fmt .Sprintf (ipClaimFileName , claim .Name )),
828- Data : data ,
829- }
810+ if w .IPClaimFiles , err = serialize (ipClaims , ipClaimFileName , true ); err != nil {
811+ return fmt .Errorf ("failed to serialize worker ip claims: %w" , err )
830812 }
831-
832- w .IPAddrFiles = make ([]* asset.File , len (ipAddrs ))
833- for i , address := range ipAddrs {
834- data , err := yaml .Marshal (address )
835- if err != nil {
836- return errors .Wrapf (err , "marshal ip claim %v" , address .Name )
837- }
838-
839- w .IPAddrFiles [i ] = & asset.File {
840- Filename : filepath .Join (directory , fmt .Sprintf (ipAddressFileName , address .Name )),
841- Data : data ,
842- }
813+ if w .IPAddrFiles , err = serialize (ipAddrs , ipAddressFileName , true ); err != nil {
814+ return fmt .Errorf ("failed to serialize worker ip addresses: %w" , err )
843815 }
844- w .MachineFiles = make ([]* asset.File , len (machines ))
845- for i , machineDef := range machines {
846- data , err := yaml .Marshal (machineDef )
847- if err != nil {
848- return errors .Wrapf (err , "marshal master %d" , i )
849- }
850-
851- padded := fmt .Sprintf (padFormat , i )
852- w .MachineFiles [i ] = & asset.File {
853- Filename : filepath .Join (directory , fmt .Sprintf (workerMachineFileName , padded )),
854- Data : data ,
855- }
816+ if w .MachineFiles , err = serialize (machines , workerMachineFileName , false ); err != nil {
817+ return fmt .Errorf ("failed to serialize worker machines: %w" , err )
856818 }
857819 return nil
858820}
@@ -966,3 +928,33 @@ func (w *Worker) MachineSets() ([]machinev1beta1.MachineSet, error) {
966928
967929 return machineSets , nil
968930}
931+
932+ // serialize marshals a list of runtime.Object manifests into asset files.
933+ // When useObjectName is true, the object's metadata name is used in the filename,
934+ // e.g. "99_openshift-machine-api_claim-cluster-worker-0-claim-0-0.yaml".
935+ // When false, a zero-padded index is used instead,
936+ // e.g. "99_openshift-cluster-api_worker-machineset-0.yaml".
937+ func serialize (manifests []runtime.Object , fileName string , useObjectName bool ) ([]* asset.File , error ) {
938+ files := make ([]* asset.File , len (manifests ))
939+ padFormat := fmt .Sprintf ("%%0%dd" , len (fmt .Sprintf ("%d" , len (manifests ))))
940+ for i , m := range manifests {
941+ data , err := yaml .Marshal (m )
942+ if err != nil {
943+ return nil , fmt .Errorf ("marshaling %s: %w" , fmt .Sprintf (fileName , i ), err )
944+ }
945+
946+ key := fmt .Sprintf (padFormat , i )
947+ if useObjectName {
948+ accessor , err := meta .Accessor (m )
949+ if err != nil {
950+ return nil , fmt .Errorf ("accessing object metadata: %w" , err )
951+ }
952+ key = accessor .GetName ()
953+ }
954+ files [i ] = & asset.File {
955+ Filename : filepath .Join (directory , fmt .Sprintf (fileName , key )),
956+ Data : data ,
957+ }
958+ }
959+ return files , nil
960+ }
0 commit comments