Support cdrom media change.

This commit is contained in:
Michael Lipp 2023-08-05 11:40:36 +02:00
parent ae2e6cde7f
commit e8b10b32b0
12 changed files with 278 additions and 37 deletions

View file

@ -136,15 +136,28 @@ data:
drives:
<#assign drvCounter = 0/>
<#list cr.spec.vm.disks.asList() as disk>
<#if disk.volumeClaimTemplate.metadata??
<#if disk.volumeClaimTemplate??
&& disk.volumeClaimTemplate.metadata??
&& disk.volumeClaimTemplate.metadata.name??>
<#assign name = disk.volumeClaimTemplate.metadata.name.asString>
<#else>
<#assign name = "" + drvCounter>
</#if>
<#if disk.volumeClaimTemplate??>
- type: raw
resource: /dev/disk-${ name }
<#assign drvCounter = drvCounter + 1/>
<#if disk.bootindex??>
bootindex: ${ disk.bootindex.asInt?c }
</#if>
<#assign drvCounter = drvCounter + 1/>
</#if>
<#if disk.cdromImage??>
- type: ide-cd
file: "${ disk.cdromImage.path.asString }"
<#if disk.bootindex??>
bootindex: ${ disk.bootindex.asInt?c }
</#if>
</#if>
</#list>
display:

View file

@ -36,6 +36,7 @@ spec:
volumeDevices:
<#assign diskCounter = 0/>
<#list cr.spec.vm.disks.asList() as disk>
<#if disk.volumeClaimTemplate??>
<#if disk.volumeClaimTemplate.metadata??
&& disk.volumeClaimTemplate.metadata.name??>
<#assign diskName = "disk-" + disk.volumeClaimTemplate.metadata.name.asString>
@ -45,6 +46,7 @@ spec:
- name: ${ diskName }
devicePath: /dev/${ diskName }
<#assign diskCounter = diskCounter + 1/>
</#if>
</#list>
securityContext:
privileged: true
@ -72,6 +74,7 @@ spec:
claimName: vmop-image-repository
<#assign diskCounter = 0/>
<#list cr.spec.vm.disks.asList() as disk>
<#if disk.volumeClaimTemplate??>
<#if disk.volumeClaimTemplate.metadata??
&& disk.volumeClaimTemplate.metadata.name??>
<#assign claimName = disk.volumeClaimTemplate.metadata.name.asString>
@ -84,6 +87,7 @@ spec:
persistentVolumeClaim:
claimName: ${ claimName }
<#assign diskCounter = diskCounter + 1/>
</#if>
</#list>
hostNetwork: true
terminationGracePeriodSeconds: ${ (cr.spec.vm.powerdownTimeout.asInt + 5)?c }

View file

@ -58,6 +58,9 @@ import static org.jdrupes.vmoperator.manager.Constants.VM_OP_NAME;
private void reconcileDisk(DynamicKubernetesObject vmDefinition,
int index, JsonObject diskDef, WatchChannel channel)
throws ApiException {
if (!diskDef.has("volumeClaimTemplate")) {
return;
}
var pvcObject = new DynamicKubernetesObject();
var pvcRaw = GsonPtr.to(pvcObject.getRaw());
var vmRaw = GsonPtr.to(vmDefinition.getRaw());