Skip to content

Commit 37d905d

Browse files
committed
Retain volume status recieved from IRI
1 parent 11b3f21 commit 37d905d

File tree

3 files changed

+64
-13
lines changed

3 files changed

+64
-13
lines changed

internal/apis/compute/validation/machine.go

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,22 @@ func ValidateMachine(machine *compute.Machine) field.ErrorList {
3434
func ValidateMachineUpdate(newMachine, oldMachine *compute.Machine) field.ErrorList {
3535
var allErrs field.ErrorList
3636

37+
seenVolumeNames := sets.NewString()
38+
newVolumeNameIndexMap := map[string]int{}
39+
for _, vol := range oldMachine.Spec.Volumes {
40+
seenVolumeNames.Insert(vol.Name)
41+
}
42+
for index, vol := range newMachine.Spec.Volumes {
43+
if !seenVolumeNames.Has(vol.Name) {
44+
newVolumeNameIndexMap[vol.Name] = index
45+
}
46+
}
47+
for _, vol := range newMachine.Status.Volumes {
48+
if i, ok := newVolumeNameIndexMap[vol.Name]; ok {
49+
allErrs = append(allErrs, field.Duplicate(field.NewPath("spec.volume").Index(i).Child("name"), vol.Name))
50+
}
51+
}
52+
3753
allErrs = append(allErrs, apivalidation.ValidateObjectMetaAccessorUpdate(newMachine, oldMachine, field.NewPath("metadata"))...)
3854
allErrs = append(allErrs, validateMachineSpecUpdate(&newMachine.Spec, &oldMachine.Spec, field.NewPath("spec"))...)
3955
allErrs = append(allErrs, ValidateMachine(newMachine)...)

internal/apis/compute/validation/machine_test.go

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -474,5 +474,35 @@ var _ = Describe("Machine", func() {
474474
&compute.Machine{},
475475
Not(ContainElement(ImmutableField("spec.machinePoolRef"))),
476476
),
477+
Entry("duplicate volume name",
478+
&compute.Machine{
479+
Spec: compute.MachineSpec{
480+
Volumes: []compute.Volume{
481+
{Name: "foo"},
482+
{Name: "bar"},
483+
},
484+
},
485+
Status: compute.MachineStatus{
486+
Volumes: []compute.VolumeStatus{
487+
{Name: "foo"},
488+
{Name: "bar"},
489+
},
490+
},
491+
},
492+
&compute.Machine{
493+
Spec: compute.MachineSpec{
494+
Volumes: []compute.Volume{
495+
{Name: "foo"},
496+
},
497+
},
498+
Status: compute.MachineStatus{
499+
Volumes: []compute.VolumeStatus{
500+
{Name: "foo"},
501+
{Name: "bar"},
502+
},
503+
},
504+
},
505+
ContainElement(DuplicateField("spec.volume[1].name")),
506+
),
477507
)
478508
})

poollet/machinepoollet/controllers/machine_controller_volume.go

Lines changed: 18 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -385,30 +385,35 @@ func (r *MachineReconciler) getVolumeStatusesForMachine(
385385
errs []error
386386
)
387387

388+
for _, iriVolume := range iriMachine.Status.Volumes {
389+
var volumeStatusValues computev1alpha1.VolumeStatus
390+
volumeStatusValues, err := r.convertIRIVolumeStatus(iriVolume, iriVolume.Name)
391+
if err != nil {
392+
return nil, fmt.Errorf("[volume %s] %w", iriVolume.Name, err)
393+
}
394+
volumeStatus := existingVolumeStatusesByName[iriVolume.Name]
395+
r.addVolumeStatusValues(now, &volumeStatus, &volumeStatusValues)
396+
volumeStatuses = append(volumeStatuses, volumeStatus)
397+
}
398+
388399
for _, machineVolume := range machine.Spec.Volumes {
389400
var (
390-
iriVolumeStatus, ok = iriVolumeStatusByName[machineVolume.Name]
391-
volumeStatusValues computev1alpha1.VolumeStatus
401+
_, ok = iriVolumeStatusByName[machineVolume.Name]
402+
volumeStatusValues computev1alpha1.VolumeStatus
392403
)
393404
volumeName := computev1alpha1.MachineVolumeName(machine.Name, machineVolume)
394-
if ok {
395-
var err error
396-
volumeStatusValues, err = r.convertIRIVolumeStatus(iriVolumeStatus, volumeName)
397-
if err != nil {
398-
return nil, fmt.Errorf("[volume %s] %w", machineVolume.Name, err)
399-
}
400-
} else {
405+
if !ok {
401406
volumeStatusValues = computev1alpha1.VolumeStatus{
402407
Name: machineVolume.Name,
403408
State: computev1alpha1.VolumeStatePending,
404409
VolumeRef: corev1.LocalObjectReference{Name: volumeName},
405410
}
411+
volumeStatus := existingVolumeStatusesByName[machineVolume.Name]
412+
r.addVolumeStatusValues(now, &volumeStatus, &volumeStatusValues)
413+
volumeStatuses = append(volumeStatuses, volumeStatus)
406414
}
407-
408-
volumeStatus := existingVolumeStatusesByName[machineVolume.Name]
409-
r.addVolumeStatusValues(now, &volumeStatus, &volumeStatusValues)
410-
volumeStatuses = append(volumeStatuses, volumeStatus)
411415
}
416+
412417
if len(errs) > 0 {
413418
return nil, errors.Join(errs...)
414419
}

0 commit comments

Comments
 (0)