Skip to content

Commit

Permalink
Implement OwnerReference in new DataVolumes
Browse files Browse the repository at this point in the history
  • Loading branch information
Victor Morales committed Dec 20, 2024
1 parent 350bb8a commit a3df2c6
Show file tree
Hide file tree
Showing 2 changed files with 40 additions and 19 deletions.
2 changes: 1 addition & 1 deletion go.mod
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@ require (
github.com/spf13/viper v1.19.0
k8s.io/api v0.31.3
k8s.io/apimachinery v0.31.3
k8s.io/utils v0.0.0-20240711033017-18e509b52bc8
kubevirt.io/api v1.4.0
kubevirt.io/client-go v1.4.0
kubevirt.io/containerized-data-importer-api v1.57.0-alpha1
Expand Down Expand Up @@ -79,7 +80,6 @@ require (
k8s.io/client-go v0.31.3 // indirect
k8s.io/klog/v2 v2.130.1 // indirect
k8s.io/kube-openapi v0.31.0 // indirect
k8s.io/utils v0.0.0-20240711033017-18e509b52bc8 // indirect
kubevirt.io/controller-lifecycle-operator-sdk/api v0.0.0-20220329064328-f3cc58c6ed90 // indirect
sigs.k8s.io/json v0.0.0-20221116044647-bc3834ca7abd // indirect
sigs.k8s.io/structured-merge-diff/v4 v4.4.1 // indirect
Expand Down
57 changes: 39 additions & 18 deletions internal/runner.go
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,7 @@ import (
"github.com/spf13/pflag"
k8scorev1 "k8s.io/api/core/v1"
k8smetav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
"k8s.io/utils/ptr"
v1 "kubevirt.io/api/core/v1"
cdiclient "kubevirt.io/client-go/containerizeddataimporter"
"kubevirt.io/client-go/kubecli"
Expand Down Expand Up @@ -77,9 +78,12 @@ func (rc *Runner) getResources(ctx context.Context, vmTemplate, runnerName, jitC
for _, dvt := range virtualMachine.Spec.DataVolumeTemplates {
for _, volume := range virtualMachineInstance.Spec.Volumes {
if volume.DataVolume != nil && volume.DataVolume.Name == dvt.Name {
dataVolume = &v1beta1.DataVolume{}
dataVolume.Name = fmt.Sprintf("%s-%s", dvt.Name, runnerName)
dataVolume.Spec = dvt.Spec
dataVolume = &v1beta1.DataVolume{
ObjectMeta: k8smetav1.ObjectMeta{
Name: fmt.Sprintf("%s-%s", dvt.Name, runnerName),
},
Spec: dvt.Spec,
}

volume.DataVolume.Name = dataVolume.Name

Expand All @@ -88,7 +92,13 @@ func (rc *Runner) getResources(ctx context.Context, vmTemplate, runnerName, jitC
}
}

virtualMachineInstance.Spec.Volumes = append(virtualMachineInstance.Spec.Volumes, v1.Volume{
virtualMachineInstance.Spec.Volumes = append(virtualMachineInstance.Spec.Volumes, generateRunnerInfoVolume())

return virtualMachineInstance, dataVolume
}

func generateRunnerInfoVolume() v1.Volume {
return v1.Volume{
Name: runnerInfoVolume,
VolumeSource: v1.VolumeSource{
DownwardAPI: &v1.DownwardAPIVolumeSource{
Expand All @@ -102,33 +112,44 @@ func (rc *Runner) getResources(ctx context.Context, vmTemplate, runnerName, jitC
},
},
},
})

return virtualMachineInstance, dataVolume
}
}

func (rc *Runner) CreateResources(ctx context.Context,
vmTemplate, runnerName, jitConfig string,
) {
virtualMachineInstance, dataVolume := rc.getResources(ctx, vmTemplate, runnerName, jitConfig)

log.Printf("Creating %s Data Volume\n", dataVolume.Name)

if _, err := rc.cdiClient.CdiV1beta1().DataVolumes(
rc.namespace).Create(ctx, dataVolume, k8smetav1.CreateOptions{}); err != nil {
log.Fatalf("cannot create data volume: %v\n", err)
}

rc.dataVolume = dataVolume.Name

log.Printf("Creating %s Virtual Machine Instance\n", virtualMachineInstance.Name)

if _, err := rc.virtClient.VirtualMachineInstance(rc.namespace).Create(ctx,
virtualMachineInstance, k8smetav1.CreateOptions{}); err != nil {
vmi, err := rc.virtClient.VirtualMachineInstance(rc.namespace).Create(ctx,
virtualMachineInstance, k8smetav1.CreateOptions{})
if err != nil {
log.Fatal(err.Error())
}

rc.virtualMachineInstance = virtualMachineInstance.Name

if dataVolume != nil {
log.Printf("Creating %s Data Volume\n", dataVolume.Name)

dataVolume.OwnerReferences = []k8smetav1.OwnerReference{
{
APIVersion: "kubevirt.io/v1",
Kind: "VirtualMachineInstance",
Name: vmi.Name,
UID: vmi.UID,
Controller: ptr.To(false),
},
}

if _, err := rc.cdiClient.CdiV1beta1().DataVolumes(
rc.namespace).Create(ctx, dataVolume, k8smetav1.CreateOptions{}); err != nil {
log.Fatalf("cannot create data volume: %v\n", err)
}

rc.dataVolume = dataVolume.Name
}
}

func (rc *Runner) WaitForVirtualMachineInstance(ctx context.Context) {
Expand Down

0 comments on commit a3df2c6

Please sign in to comment.