mirror of
https://github.com/kata-containers/kata-containers.git
synced 2025-07-01 17:52:40 +00:00
katautils: Move SetKernelParams from CreateSandbox to updateRuntimeConfig
Function SetKernelParams is just to update the runtimeConfig according to itself. It just around the configuration. So this patch moves it to updateRuntimeConfig. Fixes: #1106 Signed-off-by: Hui Zhu <teawater@hyper.sh>
This commit is contained in:
parent
8a0793234b
commit
42a89d0dcd
@ -720,62 +720,3 @@ func TestCreate(t *testing.T) {
|
|||||||
os.RemoveAll(path)
|
os.RemoveAll(path)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestCreateInvalidKernelParams(t *testing.T) {
|
|
||||||
assert := assert.New(t)
|
|
||||||
|
|
||||||
path, err := ioutil.TempDir("", "containers-mapping")
|
|
||||||
assert.NoError(err)
|
|
||||||
defer os.RemoveAll(path)
|
|
||||||
ctrsMapTreePath = path
|
|
||||||
katautils.SetCtrsMapTreePath(ctrsMapTreePath)
|
|
||||||
|
|
||||||
tmpdir, err := ioutil.TempDir("", "")
|
|
||||||
assert.NoError(err)
|
|
||||||
defer os.RemoveAll(tmpdir)
|
|
||||||
|
|
||||||
runtimeConfig, err := newTestRuntimeConfig(tmpdir, testConsole, true)
|
|
||||||
assert.NoError(err)
|
|
||||||
|
|
||||||
bundlePath := filepath.Join(tmpdir, "bundle")
|
|
||||||
|
|
||||||
err = makeOCIBundle(bundlePath)
|
|
||||||
assert.NoError(err)
|
|
||||||
|
|
||||||
pidFilePath := filepath.Join(tmpdir, "pidfile.txt")
|
|
||||||
|
|
||||||
ociConfigFile := filepath.Join(bundlePath, "config.json")
|
|
||||||
assert.True(katautils.FileExists(ociConfigFile))
|
|
||||||
|
|
||||||
spec, err := readOCIConfigFile(ociConfigFile)
|
|
||||||
assert.NoError(err)
|
|
||||||
|
|
||||||
// Force createSandbox() to be called.
|
|
||||||
spec.Annotations = make(map[string]string)
|
|
||||||
spec.Annotations[testContainerTypeAnnotation] = testContainerTypeSandbox
|
|
||||||
|
|
||||||
// rewrite the file
|
|
||||||
err = writeOCIConfigFile(spec, ociConfigFile)
|
|
||||||
assert.NoError(err)
|
|
||||||
|
|
||||||
savedFunc := katautils.GetKernelParamsFunc
|
|
||||||
defer func() {
|
|
||||||
katautils.GetKernelParamsFunc = savedFunc
|
|
||||||
}()
|
|
||||||
|
|
||||||
katautils.GetKernelParamsFunc = func(needSystemd bool) []vc.Param {
|
|
||||||
return []vc.Param{
|
|
||||||
{
|
|
||||||
Key: "",
|
|
||||||
Value: "",
|
|
||||||
},
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
for detach := range []bool{true, false} {
|
|
||||||
err := create(context.Background(), testContainerID, bundlePath, testConsole, pidFilePath, true, true, runtimeConfig)
|
|
||||||
assert.Errorf(err, "%+v", detach)
|
|
||||||
assert.False(vcmock.IsMockError(err))
|
|
||||||
os.RemoveAll(path)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
@ -643,6 +643,41 @@ func updateRuntimeConfigShim(configPath string, tomlConf tomlConfig, config *oci
|
|||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// SetKernelParams adds the user-specified kernel parameters (from the
|
||||||
|
// configuration file) to the defaults so that the former take priority.
|
||||||
|
func SetKernelParams(runtimeConfig *oci.RuntimeConfig) error {
|
||||||
|
defaultKernelParams := GetKernelParamsFunc(needSystemd(runtimeConfig.HypervisorConfig))
|
||||||
|
|
||||||
|
if runtimeConfig.HypervisorConfig.Debug {
|
||||||
|
strParams := vc.SerializeParams(defaultKernelParams, "=")
|
||||||
|
formatted := strings.Join(strParams, " ")
|
||||||
|
|
||||||
|
kataUtilsLogger.WithField("default-kernel-parameters", formatted).Debug()
|
||||||
|
}
|
||||||
|
|
||||||
|
// retrieve the parameters specified in the config file
|
||||||
|
userKernelParams := runtimeConfig.HypervisorConfig.KernelParams
|
||||||
|
|
||||||
|
// reset
|
||||||
|
runtimeConfig.HypervisorConfig.KernelParams = []vc.Param{}
|
||||||
|
|
||||||
|
// first, add default values
|
||||||
|
for _, p := range defaultKernelParams {
|
||||||
|
if err := (runtimeConfig).AddKernelParam(p); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// now re-add the user-specified values so that they take priority.
|
||||||
|
for _, p := range userKernelParams {
|
||||||
|
if err := (runtimeConfig).AddKernelParam(p); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
func updateRuntimeConfig(configPath string, tomlConf tomlConfig, config *oci.RuntimeConfig) error {
|
func updateRuntimeConfig(configPath string, tomlConf tomlConfig, config *oci.RuntimeConfig) error {
|
||||||
if err := updateRuntimeConfigHypervisor(configPath, tomlConf, config); err != nil {
|
if err := updateRuntimeConfigHypervisor(configPath, tomlConf, config); err != nil {
|
||||||
return err
|
return err
|
||||||
@ -672,6 +707,11 @@ func updateRuntimeConfig(configPath string, tomlConf tomlConfig, config *oci.Run
|
|||||||
Enable: tomlConf.Netmon.enable(),
|
Enable: tomlConf.Netmon.enable(),
|
||||||
}
|
}
|
||||||
|
|
||||||
|
err = SetKernelParams(config)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -201,6 +201,11 @@ func createAllRuntimeConfigFiles(dir, hypervisor string) (config testRuntimeConf
|
|||||||
DisableNewNetNs: disableNewNetNs,
|
DisableNewNetNs: disableNewNetNs,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
err = SetKernelParams(&runtimeConfig)
|
||||||
|
if err != nil {
|
||||||
|
return config, err
|
||||||
|
}
|
||||||
|
|
||||||
config = testRuntimeConfig{
|
config = testRuntimeConfig{
|
||||||
RuntimeConfig: runtimeConfig,
|
RuntimeConfig: runtimeConfig,
|
||||||
RuntimeConfigFile: configPath,
|
RuntimeConfigFile: configPath,
|
||||||
@ -636,6 +641,10 @@ func TestMinimalRuntimeConfig(t *testing.T) {
|
|||||||
|
|
||||||
NetmonConfig: expectedNetmonConfig,
|
NetmonConfig: expectedNetmonConfig,
|
||||||
}
|
}
|
||||||
|
err = SetKernelParams(&expectedConfig)
|
||||||
|
if err != nil {
|
||||||
|
t.Fatal(err)
|
||||||
|
}
|
||||||
|
|
||||||
if reflect.DeepEqual(config, expectedConfig) == false {
|
if reflect.DeepEqual(config, expectedConfig) == false {
|
||||||
t.Fatalf("Got %+v\n expecting %+v", config, expectedConfig)
|
t.Fatalf("Got %+v\n expecting %+v", config, expectedConfig)
|
||||||
@ -1378,6 +1387,33 @@ func TestUpdateRuntimeConfigurationFactoryConfig(t *testing.T) {
|
|||||||
assert.Equal(expectedFactoryConfig, config.FactoryConfig)
|
assert.Equal(expectedFactoryConfig, config.FactoryConfig)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func TestUpdateRuntimeConfigurationInvalidKernelParams(t *testing.T) {
|
||||||
|
assert := assert.New(t)
|
||||||
|
|
||||||
|
assert.NotEqual(defaultAgent, vc.HyperstartAgent)
|
||||||
|
|
||||||
|
config := oci.RuntimeConfig{}
|
||||||
|
|
||||||
|
tomlConf := tomlConfig{}
|
||||||
|
|
||||||
|
savedFunc := GetKernelParamsFunc
|
||||||
|
defer func() {
|
||||||
|
GetKernelParamsFunc = savedFunc
|
||||||
|
}()
|
||||||
|
|
||||||
|
GetKernelParamsFunc = func(needSystemd bool) []vc.Param {
|
||||||
|
return []vc.Param{
|
||||||
|
{
|
||||||
|
Key: "",
|
||||||
|
Value: "",
|
||||||
|
},
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
err := updateRuntimeConfig("", tomlConf, &config)
|
||||||
|
assert.EqualError(err, "Empty kernel parameter")
|
||||||
|
}
|
||||||
|
|
||||||
func TestCheckHypervisorConfig(t *testing.T) {
|
func TestCheckHypervisorConfig(t *testing.T) {
|
||||||
assert := assert.New(t)
|
assert := assert.New(t)
|
||||||
|
|
||||||
|
@ -9,7 +9,6 @@ package katautils
|
|||||||
import (
|
import (
|
||||||
"context"
|
"context"
|
||||||
"fmt"
|
"fmt"
|
||||||
"strings"
|
|
||||||
|
|
||||||
vc "github.com/kata-containers/runtime/virtcontainers"
|
vc "github.com/kata-containers/runtime/virtcontainers"
|
||||||
vf "github.com/kata-containers/runtime/virtcontainers/factory"
|
vf "github.com/kata-containers/runtime/virtcontainers/factory"
|
||||||
@ -83,41 +82,6 @@ func HandleFactory(ctx context.Context, vci vc.VC, runtimeConfig *oci.RuntimeCon
|
|||||||
vci.SetFactory(ctx, f)
|
vci.SetFactory(ctx, f)
|
||||||
}
|
}
|
||||||
|
|
||||||
// SetKernelParams adds the user-specified kernel parameters (from the
|
|
||||||
// configuration file) to the defaults so that the former take priority.
|
|
||||||
func SetKernelParams(runtimeConfig *oci.RuntimeConfig) error {
|
|
||||||
defaultKernelParams := GetKernelParamsFunc(needSystemd(runtimeConfig.HypervisorConfig))
|
|
||||||
|
|
||||||
if runtimeConfig.HypervisorConfig.Debug {
|
|
||||||
strParams := vc.SerializeParams(defaultKernelParams, "=")
|
|
||||||
formatted := strings.Join(strParams, " ")
|
|
||||||
|
|
||||||
kataUtilsLogger.WithField("default-kernel-parameters", formatted).Debug()
|
|
||||||
}
|
|
||||||
|
|
||||||
// retrieve the parameters specified in the config file
|
|
||||||
userKernelParams := runtimeConfig.HypervisorConfig.KernelParams
|
|
||||||
|
|
||||||
// reset
|
|
||||||
runtimeConfig.HypervisorConfig.KernelParams = []vc.Param{}
|
|
||||||
|
|
||||||
// first, add default values
|
|
||||||
for _, p := range defaultKernelParams {
|
|
||||||
if err := (runtimeConfig).AddKernelParam(p); err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// now re-add the user-specified values so that they take priority.
|
|
||||||
for _, p := range userKernelParams {
|
|
||||||
if err := (runtimeConfig).AddKernelParam(p); err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
|
|
||||||
// SetEphemeralStorageType sets the mount type to 'ephemeral'
|
// SetEphemeralStorageType sets the mount type to 'ephemeral'
|
||||||
// if the mount source path is provisioned by k8s for ephemeral storage.
|
// if the mount source path is provisioned by k8s for ephemeral storage.
|
||||||
// For the given pod ephemeral volume is created only once
|
// For the given pod ephemeral volume is created only once
|
||||||
@ -138,11 +102,6 @@ func CreateSandbox(ctx context.Context, vci vc.VC, ociSpec oci.CompatOCISpec, ru
|
|||||||
span, ctx := Trace(ctx, "createSandbox")
|
span, ctx := Trace(ctx, "createSandbox")
|
||||||
defer span.Finish()
|
defer span.Finish()
|
||||||
|
|
||||||
err := SetKernelParams(&runtimeConfig)
|
|
||||||
if err != nil {
|
|
||||||
return nil, vc.Process{}, err
|
|
||||||
}
|
|
||||||
|
|
||||||
sandboxConfig, err := oci.SandboxConfig(ociSpec, runtimeConfig, bundlePath, containerID, console, disableOutput, systemdCgroup)
|
sandboxConfig, err := oci.SandboxConfig(ociSpec, runtimeConfig, bundlePath, containerID, console, disableOutput, systemdCgroup)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, vc.Process{}, err
|
return nil, vc.Process{}, err
|
||||||
|
Loading…
Reference in New Issue
Block a user