Move GenerateRuntimeOptions() to pkg/cri/config
Signed-off-by: Kirtana Ashok <kiashok@microsoft.com>
This commit is contained in:
		| @@ -24,10 +24,15 @@ import ( | ||||
| 	"time" | ||||
|  | ||||
| 	"github.com/containerd/log" | ||||
| 	"github.com/pelletier/go-toml/v2" | ||||
| 	runtime "k8s.io/cri-api/pkg/apis/runtime/v1" | ||||
|  | ||||
| 	runhcsoptions "github.com/Microsoft/hcsshim/cmd/containerd-shim-runhcs-v1/options" | ||||
| 	"github.com/containerd/containerd/v2/pkg/cri/annotations" | ||||
| 	"github.com/containerd/containerd/v2/pkg/deprecation" | ||||
| 	runtimeoptions "github.com/containerd/containerd/v2/pkg/runtimeoptions/v1" | ||||
| 	"github.com/containerd/containerd/v2/plugins" | ||||
| 	runcoptions "github.com/containerd/containerd/v2/runtime/v2/runc/options" | ||||
| ) | ||||
|  | ||||
| const ( | ||||
| @@ -532,3 +537,40 @@ func hostAccessingSandbox(config *runtime.PodSandboxConfig) bool { | ||||
|  | ||||
| 	return false | ||||
| } | ||||
|  | ||||
| // GenerateRuntimeOptions generates runtime options from cri plugin config. | ||||
| func GenerateRuntimeOptions(r Runtime) (interface{}, error) { | ||||
| 	if r.Options == nil { | ||||
| 		return nil, nil | ||||
| 	} | ||||
|  | ||||
| 	b, err := toml.Marshal(r.Options) | ||||
| 	if err != nil { | ||||
| 		return nil, fmt.Errorf("failed to marshal TOML blob for runtime %q: %w", r.Type, err) | ||||
| 	} | ||||
|  | ||||
| 	options := getRuntimeOptionsType(r.Type) | ||||
| 	if err := toml.Unmarshal(b, options); err != nil { | ||||
| 		return nil, err | ||||
| 	} | ||||
|  | ||||
| 	// For generic configuration, if no config path specified (preserving old behavior), pass | ||||
| 	// the whole TOML configuration section to the runtime. | ||||
| 	if runtimeOpts, ok := options.(*runtimeoptions.Options); ok && runtimeOpts.ConfigPath == "" { | ||||
| 		runtimeOpts.ConfigBody = b | ||||
| 	} | ||||
|  | ||||
| 	return options, nil | ||||
| } | ||||
|  | ||||
| // getRuntimeOptionsType gets empty runtime options by the runtime type name. | ||||
| func getRuntimeOptionsType(t string) interface{} { | ||||
| 	switch t { | ||||
| 	case plugins.RuntimeRuncV2: | ||||
| 		return &runcoptions.Options{} | ||||
| 	case plugins.RuntimeRunhcsV1: | ||||
| 		return &runhcsoptions.Options{} | ||||
| 	default: | ||||
| 		return &runtimeoptions.Options{} | ||||
| 	} | ||||
| } | ||||
|   | ||||
| @@ -27,23 +27,17 @@ import ( | ||||
| 	"strings" | ||||
| 	"time" | ||||
|  | ||||
| 	runhcsoptions "github.com/Microsoft/hcsshim/cmd/containerd-shim-runhcs-v1/options" | ||||
| 	"github.com/containerd/typeurl/v2" | ||||
| 	runtimespec "github.com/opencontainers/runtime-spec/specs-go" | ||||
| 	"github.com/pelletier/go-toml/v2" | ||||
| 	runtime "k8s.io/cri-api/pkg/apis/runtime/v1" | ||||
|  | ||||
| 	containerd "github.com/containerd/containerd/v2/client" | ||||
| 	"github.com/containerd/containerd/v2/containers" | ||||
| 	"github.com/containerd/containerd/v2/errdefs" | ||||
| 	clabels "github.com/containerd/containerd/v2/labels" | ||||
| 	criconfig "github.com/containerd/containerd/v2/pkg/cri/config" | ||||
| 	crilabels "github.com/containerd/containerd/v2/pkg/cri/labels" | ||||
| 	containerstore "github.com/containerd/containerd/v2/pkg/cri/store/container" | ||||
| 	imagestore "github.com/containerd/containerd/v2/pkg/cri/store/image" | ||||
| 	runtimeoptions "github.com/containerd/containerd/v2/pkg/runtimeoptions/v1" | ||||
| 	"github.com/containerd/containerd/v2/plugins" | ||||
| 	runcoptions "github.com/containerd/containerd/v2/runtime/v2/runc/options" | ||||
| 	"github.com/containerd/log" | ||||
| ) | ||||
|  | ||||
| @@ -75,9 +69,6 @@ const ( | ||||
| 	// defaultIfName is the default network interface for the pods | ||||
| 	defaultIfName = "eth0" | ||||
|  | ||||
| 	// runtimeRunhcsV1 is the runtime type for runhcs. | ||||
| 	runtimeRunhcsV1 = "io.containerd.runhcs.v1" | ||||
|  | ||||
| 	// devShm is the default path of /dev/shm. | ||||
| 	devShm = "/dev/shm" | ||||
| 	// etcHosts is the default path of /etc/hosts file. | ||||
| @@ -250,43 +241,6 @@ func buildLabels(configLabels, imageConfigLabels map[string]string, containerTyp | ||||
| 	return labels | ||||
| } | ||||
|  | ||||
| // generateRuntimeOptions generates runtime options from cri plugin config. | ||||
| func generateRuntimeOptions(r criconfig.Runtime) (interface{}, error) { | ||||
| 	if r.Options == nil { | ||||
| 		return nil, nil | ||||
| 	} | ||||
|  | ||||
| 	b, err := toml.Marshal(r.Options) | ||||
| 	if err != nil { | ||||
| 		return nil, fmt.Errorf("failed to marshal TOML blob for runtime %q: %w", r.Type, err) | ||||
| 	} | ||||
|  | ||||
| 	options := getRuntimeOptionsType(r.Type) | ||||
| 	if err := toml.Unmarshal(b, options); err != nil { | ||||
| 		return nil, err | ||||
| 	} | ||||
|  | ||||
| 	// For generic configuration, if no config path specified (preserving old behavior), pass | ||||
| 	// the whole TOML configuration section to the runtime. | ||||
| 	if runtimeOpts, ok := options.(*runtimeoptions.Options); ok && runtimeOpts.ConfigPath == "" { | ||||
| 		runtimeOpts.ConfigBody = b | ||||
| 	} | ||||
|  | ||||
| 	return options, nil | ||||
| } | ||||
|  | ||||
| // getRuntimeOptionsType gets empty runtime options by the runtime type name. | ||||
| func getRuntimeOptionsType(t string) interface{} { | ||||
| 	switch t { | ||||
| 	case plugins.RuntimeRuncV2: | ||||
| 		return &runcoptions.Options{} | ||||
| 	case runtimeRunhcsV1: | ||||
| 		return &runhcsoptions.Options{} | ||||
| 	default: | ||||
| 		return &runtimeoptions.Options{} | ||||
| 	} | ||||
| } | ||||
|  | ||||
| // getRuntimeOptions get runtime options from container metadata. | ||||
| func getRuntimeOptions(c containers.Container) (interface{}, error) { | ||||
| 	from := c.Runtime.Options | ||||
|   | ||||
| @@ -175,7 +175,7 @@ systemd_cgroup = true | ||||
| 	} { | ||||
| 		test := test | ||||
| 		t.Run(test.desc, func(t *testing.T) { | ||||
| 			opts, err := generateRuntimeOptions(test.r) | ||||
| 			opts, err := criconfig.GenerateRuntimeOptions(test.r) | ||||
| 			assert.NoError(t, err) | ||||
| 			assert.Equal(t, test.expectedOptions, opts) | ||||
| 		}) | ||||
|   | ||||
| @@ -20,6 +20,7 @@ import ( | ||||
| 	"context" | ||||
| 	"sort" | ||||
|  | ||||
| 	criconfig "github.com/containerd/containerd/v2/pkg/cri/config" | ||||
| 	"github.com/containerd/containerd/v2/pkg/systemd" | ||||
| 	runcoptions "github.com/containerd/containerd/v2/runtime/v2/runc/options" | ||||
| 	"github.com/containerd/log" | ||||
| @@ -48,7 +49,7 @@ func (c *criService) getCgroupDriver(ctx context.Context) runtime.CgroupDriver { | ||||
| 	}) | ||||
|  | ||||
| 	for _, handler := range handlerNames { | ||||
| 		opts, err := generateRuntimeOptions(c.config.ContainerdConfig.Runtimes[handler]) | ||||
| 		opts, err := criconfig.GenerateRuntimeOptions(c.config.ContainerdConfig.Runtimes[handler]) | ||||
| 		if err != nil { | ||||
| 			log.G(ctx).Debugf("failed to parse runtime handler options for %q", handler) | ||||
| 			continue | ||||
|   | ||||
| @@ -96,7 +96,7 @@ func (c *criService) RunPodSandbox(ctx context.Context, r *runtime.RunPodSandbox | ||||
|  | ||||
| 	runtimeStart := time.Now() | ||||
| 	// Retrieve runtime options | ||||
| 	runtimeOpts, err := generateRuntimeOptions(ociRuntime) | ||||
| 	runtimeOpts, err := criconfig.GenerateRuntimeOptions(ociRuntime) | ||||
| 	if err != nil { | ||||
| 		return nil, fmt.Errorf("failed to generate sandbox runtime options: %w", err) | ||||
| 	} | ||||
|   | ||||
| @@ -75,6 +75,9 @@ const ( | ||||
| 	// RuntimeRuncV2 is the runc runtime that supports multiple containers per shim | ||||
| 	RuntimeRuncV2 = "io.containerd.runc.v2" | ||||
|  | ||||
| 	// RuntimeRunhcsV1 is the runtime type for runhcs. | ||||
| 	RuntimeRunhcsV1 = "io.containerd.runhcs.v1" | ||||
|  | ||||
| 	DeprecationsPlugin = "deprecations" | ||||
| ) | ||||
|  | ||||
|   | ||||
		Reference in New Issue
	
	Block a user
	 Kirtana Ashok
					Kirtana Ashok