Skip to content

Commit d2e1be6

Browse files
committed
pkg/asset/machines: refactor manifest serialization
Make manifest serialization a common, shared function.
1 parent 1896803 commit d2e1be6

1 file changed

Lines changed: 51 additions & 59 deletions

File tree

pkg/asset/machines/worker.go

Lines changed: 51 additions & 59 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)