Skip to content

Commit

Permalink
fix vmi-create-admitter
Browse files Browse the repository at this point in the history
Signed-off-by: Andrei Kvapil <kvapss@gmail.com>
  • Loading branch information
kvaps committed Aug 4, 2023
1 parent 25249d9 commit db250c6
Show file tree
Hide file tree
Showing 2 changed files with 50 additions and 0 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -1896,6 +1896,13 @@ func validateAccessCredentials(field *k8sfield.Path, accessCredentials []v1.Acce
return causes
}

hasNoCloudVolume := false
for _, volume := range volumes {
if volume.CloudInitConfigDrive != nil {
hasNoCloudVolume = true
break
}
}
hasConfigDriveVolume := false
for _, volume := range volumes {
if volume.CloudInitConfigDrive != nil {
Expand All @@ -1917,6 +1924,18 @@ func validateAccessCredentials(field *k8sfield.Path, accessCredentials []v1.Acce
sourceCount++
}

if accessCred.SSHPublicKey.PropagationMethod.NoCloud != nil {
methodCount++
if !hasNoCloudVolume {
causes = append(causes, metav1.StatusCause{
Type: metav1.CauseTypeFieldValueInvalid,
Message: fmt.Sprintf("%s requires a noCloud volume to exist when the noCloud propagationMethod is in use.", field.Index(idx).String()),
Field: field.Index(idx).Child("sshPublicKey", "propagationMethod").String(),
})

}
}

if accessCred.SSHPublicKey.PropagationMethod.ConfigDrive != nil {
methodCount++
if !hasConfigDriveVolume {
Expand All @@ -1928,6 +1947,7 @@ func validateAccessCredentials(field *k8sfield.Path, accessCredentials []v1.Acce

}
}

if accessCred.SSHPublicKey.PropagationMethod.QemuGuestAgent != nil {

if len(accessCred.SSHPublicKey.PropagationMethod.QemuGuestAgent.Users) == 0 {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2694,6 +2694,36 @@ var _ = Describe("Validating VMICreate Admitter", func() {
Expect(causes).To(BeEmpty())
})

It("should reject a noCloud ssh access credential when no noCloud volume exists", func() {
vmi := api.NewMinimalVMI("testvmi")
vmi.Spec.Domain.Devices.Disks = append(vmi.Spec.Domain.Devices.Disks, v1.Disk{
Name: "testdisk",
})

vmi.Spec.Volumes = append(vmi.Spec.Volumes, v1.Volume{
Name: "testdisk",
VolumeSource: v1.VolumeSource{
CloudInitNoCloud: &v1.CloudInitNoCloudSource{UserData: " "},
},
})

vmi.Spec.AccessCredentials = []v1.AccessCredential{
{
SSHPublicKey: &v1.SSHPublicKeyAccessCredential{
Source: v1.SSHPublicKeyAccessCredentialSource{
Secret: &v1.AccessCredentialSecretSource{
SecretName: "my-pkey",
},
},
PropagationMethod: v1.SSHPublicKeyAccessCredentialPropagationMethod{
NoCloud: &v1.NoCloudSSHPublicKeyAccessCredentialPropagation{},
},
},
},
}
causes := ValidateVirtualMachineInstanceSpec(k8sfield.NewPath("fake"), &vmi.Spec, config)
Expect(causes).To(HaveLen(1))
})
It("should reject a configDrive ssh access credential when no configDrive volume exists", func() {
vmi := api.NewMinimalVMI("testvmi")
vmi.Spec.Domain.Devices.Disks = append(vmi.Spec.Domain.Devices.Disks, v1.Disk{
Expand Down

0 comments on commit db250c6

Please sign in to comment.