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