From 4d66ee1935ba403dd3a438a575784c7b79b50b24 Mon Sep 17 00:00:00 2001 From: Qi Feng Huo Date: Wed, 10 Jul 2024 09:12:02 +0800 Subject: [PATCH 1/3] initdata: add initdata annotation in hypervisor config - Add Initdata annotation for hypervisor config, so that it can be passed when CreateVM Signed-off-by: Qi Feng Huo --- src/runtime/pkg/oci/utils.go | 3 +++ src/runtime/virtcontainers/hypervisor.go | 3 +++ src/runtime/virtcontainers/pkg/annotations/annotations.go | 3 +++ src/runtime/virtcontainers/remote.go | 1 + 4 files changed, 10 insertions(+) diff --git a/src/runtime/pkg/oci/utils.go b/src/runtime/pkg/oci/utils.go index e3cfd1b6c7..ee70686d3c 100644 --- a/src/runtime/pkg/oci/utils.go +++ b/src/runtime/pkg/oci/utils.go @@ -542,6 +542,9 @@ func addHypervisorConfigOverrides(ocispec specs.Spec, config *vc.SandboxConfig, config.HypervisorConfig.SGXEPCSize = size } + if initdata, ok := ocispec.Annotations[vcAnnotations.Initdata]; ok { + config.HypervisorConfig.Initdata = initdata + } return nil } diff --git a/src/runtime/virtcontainers/hypervisor.go b/src/runtime/virtcontainers/hypervisor.go index aa30823247..4e4c992a1b 100644 --- a/src/runtime/virtcontainers/hypervisor.go +++ b/src/runtime/virtcontainers/hypervisor.go @@ -680,6 +680,9 @@ type HypervisorConfig struct { // QgsPort defines Intel Quote Generation Service port exposed from the host QgsPort uint32 + + // Initdata defines the initdata passed into guest when CreateVM + Initdata string } // vcpu mapping from vcpu number to thread number diff --git a/src/runtime/virtcontainers/pkg/annotations/annotations.go b/src/runtime/virtcontainers/pkg/annotations/annotations.go index 9414d05397..8b6adc56fa 100644 --- a/src/runtime/virtcontainers/pkg/annotations/annotations.go +++ b/src/runtime/virtcontainers/pkg/annotations/annotations.go @@ -243,6 +243,9 @@ const ( // EnableRootlessHypervisor is a sandbox annotation to enable rootless hypervisor (only supported in QEMU currently). EnableRootlessHypervisor = kataAnnotHypervisorPrefix + "rootless" + + // Initdata is the initdata passed in when CreateVM + Initdata = kataConfAnnotationsPrefix + "runtime.cc_init_data" ) // Runtime related annotations diff --git a/src/runtime/virtcontainers/remote.go b/src/runtime/virtcontainers/remote.go index 0250566736..d0bb1674c3 100644 --- a/src/runtime/virtcontainers/remote.go +++ b/src/runtime/virtcontainers/remote.go @@ -79,6 +79,7 @@ func (rh *remoteHypervisor) CreateVM(ctx context.Context, id string, network Net annotations[hypannotations.MachineType] = hypervisorConfig.HypervisorMachineType annotations[hypannotations.DefaultVCPUs] = strconv.FormatUint(uint64(hypervisorConfig.NumVCPUs()), 10) annotations[hypannotations.DefaultMemory] = strconv.FormatUint(uint64(hypervisorConfig.MemorySize), 10) + annotations[hypannotations.Initdata] = hypervisorConfig.Initdata req := &pb.CreateVMRequest{ Id: id, From 8d61029676225a2f1dae5ab8485d314cc4a5e741 Mon Sep 17 00:00:00 2001 From: Qi Feng Huo Date: Fri, 26 Jul 2024 14:20:57 +0800 Subject: [PATCH 2/3] initdata: add unit test code for initdata annotation Added ut code for initdata annotation Signed-off-by: Qi Feng Huo --- src/runtime/pkg/oci/utils_test.go | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/src/runtime/pkg/oci/utils_test.go b/src/runtime/pkg/oci/utils_test.go index d363b8b204..c50f110830 100644 --- a/src/runtime/pkg/oci/utils_test.go +++ b/src/runtime/pkg/oci/utils_test.go @@ -773,6 +773,11 @@ func TestAddRemoteHypervisorAnnotations(t *testing.T) { ocispec.Annotations[vcAnnotations.DefaultMemory] = "1" err = addAnnotations(ocispec, &sbConfig, runtimeConfig) assert.NoError(err) + + // When initdata specified, remote hypervisor annotations do have the annotation added. + ocispec.Annotations[vcAnnotations.Initdata] = "initdata" + err = addAnnotations(ocispec, &sbConfig, runtimeConfig) + assert.Equal(sbConfig.HypervisorConfig.Initdata, "initdata") } func TestAddProtectedHypervisorAnnotations(t *testing.T) { @@ -860,6 +865,7 @@ func TestAddRuntimeAnnotations(t *testing.T) { ocispec.Annotations[vcAnnotations.DisableNewNetNs] = "true" ocispec.Annotations[vcAnnotations.InterNetworkModel] = "macvtap" ocispec.Annotations[vcAnnotations.CreateContainerTimeout] = "100" + ocispec.Annotations[vcAnnotations.Initdata] = "initdata" addAnnotations(ocispec, &config, runtimeConfig) assert.Equal(config.DisableGuestSeccomp, true) @@ -867,6 +873,7 @@ func TestAddRuntimeAnnotations(t *testing.T) { assert.Equal(config.NetworkConfig.DisableNewNetwork, true) assert.Equal(config.NetworkConfig.InterworkingModel, vc.NetXConnectMacVtapModel) assert.Equal(config.CreateContainerTimeout, uint64(100)) + assert.Equal(config.HypervisorConfig.Initdata, "initdata") } func TestRegexpContains(t *testing.T) { From a113fc93c8fe75cf58b9b6edadd07a3ebfd665f3 Mon Sep 17 00:00:00 2001 From: Qi Feng Huo Date: Fri, 26 Jul 2024 18:24:05 +0800 Subject: [PATCH 3/3] initdata: fix unit test code for initdata annotation Added ut code for initdata annotation Signed-off-by: Qi Feng Huo --- src/runtime/pkg/oci/utils_test.go | 1 + 1 file changed, 1 insertion(+) diff --git a/src/runtime/pkg/oci/utils_test.go b/src/runtime/pkg/oci/utils_test.go index c50f110830..f034490264 100644 --- a/src/runtime/pkg/oci/utils_test.go +++ b/src/runtime/pkg/oci/utils_test.go @@ -777,6 +777,7 @@ func TestAddRemoteHypervisorAnnotations(t *testing.T) { // When initdata specified, remote hypervisor annotations do have the annotation added. ocispec.Annotations[vcAnnotations.Initdata] = "initdata" err = addAnnotations(ocispec, &sbConfig, runtimeConfig) + assert.NoError(err) assert.Equal(sbConfig.HypervisorConfig.Initdata, "initdata") }