sandbox: get runtime info from sandbox or container
For backward compatibility, we should get runtimeInfo from sandbox in db, or get it from the sandbox container in db. Note that this is a temporary solution and we will remove the Container field in Sandbox in cri cache, and replace it with a SandboxInsantance of type containerd.Sandbox interface. Signed-off-by: Abel Feng <fshb1988@gmail.com>
This commit is contained in:
@@ -263,14 +263,15 @@ func (c *criService) CreateContainer(ctx context.Context, r *runtime.CreateConta
|
||||
|
||||
containerLabels := buildLabels(config.Labels, image.ImageSpec.Config.Labels, crilabels.ContainerKindContainer)
|
||||
|
||||
sandboxInfo, err := c.client.SandboxStore().Get(ctx, sandboxID)
|
||||
// TODO the sandbox in the cache should hold this info
|
||||
runtimeName, runtimeOption, err := c.runtimeInfo(ctx, sandboxID)
|
||||
if err != nil {
|
||||
return nil, fmt.Errorf("unable to get sandbox %q metdata: %w", sandboxID, err)
|
||||
return nil, fmt.Errorf("unable to get sandbox %q runtime info: %w", sandboxID, err)
|
||||
}
|
||||
|
||||
opts = append(opts,
|
||||
containerd.WithSpec(spec, specOpts...),
|
||||
containerd.WithRuntime(sandboxInfo.Runtime.Name, sandboxInfo.Runtime.Options),
|
||||
containerd.WithRuntime(runtimeName, runtimeOption),
|
||||
containerd.WithContainerLabels(containerLabels),
|
||||
containerd.WithContainerExtension(crilabels.ContainerMetadataExtension, &meta),
|
||||
)
|
||||
@@ -1055,3 +1056,16 @@ func (c *criService) linuxContainerMounts(sandboxID string, config *runtime.Cont
|
||||
}
|
||||
return mounts
|
||||
}
|
||||
|
||||
func (c *criService) runtimeInfo(ctx context.Context, id string) (string, typeurl.Any, error) {
|
||||
sandboxInfo, err := c.client.SandboxStore().Get(ctx, id)
|
||||
if err == nil {
|
||||
return sandboxInfo.Runtime.Name, sandboxInfo.Runtime.Options, nil
|
||||
}
|
||||
sandboxContainer, legacyErr := c.client.ContainerService().Get(ctx, id)
|
||||
if legacyErr == nil {
|
||||
return sandboxContainer.Runtime.Name, sandboxContainer.Runtime.Options, nil
|
||||
}
|
||||
|
||||
return "", nil, err
|
||||
}
|
||||
|
Reference in New Issue
Block a user