Fix no pivot and keyring opts
Signed-off-by: Michael Crosby <crosbymichael@gmail.com>
This commit is contained in:
parent
bfbd1d09c9
commit
160737d2c8
@ -229,7 +229,9 @@ func (c *container) NewTask(ctx context.Context, ioCreate cio.Creator, opts ...N
|
|||||||
})
|
})
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
var info TaskInfo
|
info := TaskInfo{
|
||||||
|
runtime: r.Runtime.Name,
|
||||||
|
}
|
||||||
for _, o := range opts {
|
for _, o := range opts {
|
||||||
if err := o(ctx, c.client, &info); err != nil {
|
if err := o(ctx, c.client, &info); err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
|
@ -485,7 +485,7 @@ func TestCRWithImagePath(t *testing.T) {
|
|||||||
}
|
}
|
||||||
defer ncontainer.Delete(ctx, WithSnapshotCleanup)
|
defer ncontainer.Delete(ctx, WithSnapshotCleanup)
|
||||||
|
|
||||||
ntask, err := ncontainer.NewTask(ctx, empty(), WithRestoreImagePath(client.runtime, imagePath))
|
ntask, err := ncontainer.NewTask(ctx, empty(), WithRestoreImagePath(imagePath))
|
||||||
if err != nil {
|
if err != nil {
|
||||||
t.Fatal(err)
|
t.Fatal(err)
|
||||||
}
|
}
|
||||||
|
8
task.go
8
task.go
@ -43,7 +43,7 @@ import (
|
|||||||
google_protobuf "github.com/gogo/protobuf/types"
|
google_protobuf "github.com/gogo/protobuf/types"
|
||||||
digest "github.com/opencontainers/go-digest"
|
digest "github.com/opencontainers/go-digest"
|
||||||
is "github.com/opencontainers/image-spec/specs-go"
|
is "github.com/opencontainers/image-spec/specs-go"
|
||||||
"github.com/opencontainers/image-spec/specs-go/v1"
|
v1 "github.com/opencontainers/image-spec/specs-go/v1"
|
||||||
specs "github.com/opencontainers/runtime-spec/specs-go"
|
specs "github.com/opencontainers/runtime-spec/specs-go"
|
||||||
"github.com/pkg/errors"
|
"github.com/pkg/errors"
|
||||||
)
|
)
|
||||||
@ -131,6 +131,12 @@ type TaskInfo struct {
|
|||||||
RootFS []mount.Mount
|
RootFS []mount.Mount
|
||||||
// Options hold runtime specific settings for task creation
|
// Options hold runtime specific settings for task creation
|
||||||
Options interface{}
|
Options interface{}
|
||||||
|
runtime string
|
||||||
|
}
|
||||||
|
|
||||||
|
// Runtime name for the container
|
||||||
|
func (i *TaskInfo) Runtime() string {
|
||||||
|
return i.runtime
|
||||||
}
|
}
|
||||||
|
|
||||||
// Task is the executable object within containerd
|
// Task is the executable object within containerd
|
||||||
|
@ -118,9 +118,9 @@ func WithCheckpointImagePath(rt, path string) CheckpointTaskOpts {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// WithRestoreImagePath sets image path for create option
|
// WithRestoreImagePath sets image path for create option
|
||||||
func WithRestoreImagePath(rt, path string) NewTaskOpts {
|
func WithRestoreImagePath(path string) NewTaskOpts {
|
||||||
return func(ctx context.Context, c *Client, ti *TaskInfo) error {
|
return func(ctx context.Context, c *Client, ti *TaskInfo) error {
|
||||||
if CheckRuntime(rt, "io.containerd.runc") {
|
if CheckRuntime(ti.Runtime(), "io.containerd.runc") {
|
||||||
if ti.Options == nil {
|
if ti.Options == nil {
|
||||||
ti.Options = &options.Options{}
|
ti.Options = &options.Options{}
|
||||||
}
|
}
|
||||||
|
@ -22,36 +22,58 @@ import (
|
|||||||
"context"
|
"context"
|
||||||
|
|
||||||
"github.com/containerd/containerd/runtime/linux/runctypes"
|
"github.com/containerd/containerd/runtime/linux/runctypes"
|
||||||
|
"github.com/containerd/containerd/runtime/v2/runc/options"
|
||||||
"github.com/pkg/errors"
|
"github.com/pkg/errors"
|
||||||
)
|
)
|
||||||
|
|
||||||
// WithNoNewKeyring causes tasks not to be created with a new keyring for secret storage.
|
// WithNoNewKeyring causes tasks not to be created with a new keyring for secret storage.
|
||||||
// There is an upper limit on the number of keyrings in a linux system
|
// There is an upper limit on the number of keyrings in a linux system
|
||||||
func WithNoNewKeyring(ctx context.Context, c *Client, ti *TaskInfo) error {
|
func WithNoNewKeyring(ctx context.Context, c *Client, ti *TaskInfo) error {
|
||||||
if ti.Options == nil {
|
if CheckRuntime(ti.Runtime(), "io.containerd.runc") {
|
||||||
ti.Options = &runctypes.CreateOptions{}
|
if ti.Options == nil {
|
||||||
|
ti.Options = &options.Options{}
|
||||||
|
}
|
||||||
|
opts, ok := ti.Options.(*options.Options)
|
||||||
|
if !ok {
|
||||||
|
return errors.New("invalid v2 shim create options format")
|
||||||
|
}
|
||||||
|
opts.NoNewKeyring = true
|
||||||
|
} else {
|
||||||
|
if ti.Options == nil {
|
||||||
|
ti.Options = &runctypes.CreateOptions{}
|
||||||
|
}
|
||||||
|
opts, ok := ti.Options.(*runctypes.CreateOptions)
|
||||||
|
if !ok {
|
||||||
|
return errors.New("could not cast TaskInfo Options to CreateOptions")
|
||||||
|
}
|
||||||
|
opts.NoNewKeyring = true
|
||||||
}
|
}
|
||||||
opts, ok := ti.Options.(*runctypes.CreateOptions)
|
|
||||||
if !ok {
|
|
||||||
return errors.New("could not cast TaskInfo Options to CreateOptions")
|
|
||||||
}
|
|
||||||
|
|
||||||
opts.NoNewKeyring = true
|
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
// WithNoPivotRoot instructs the runtime not to you pivot_root
|
// WithNoPivotRoot instructs the runtime not to you pivot_root
|
||||||
func WithNoPivotRoot(_ context.Context, _ *Client, info *TaskInfo) error {
|
func WithNoPivotRoot(_ context.Context, _ *Client, ti *TaskInfo) error {
|
||||||
if info.Options == nil {
|
if CheckRuntime(ti.Runtime(), "io.containerd.runc") {
|
||||||
info.Options = &runctypes.CreateOptions{
|
if ti.Options == nil {
|
||||||
NoPivotRoot: true,
|
ti.Options = &options.Options{}
|
||||||
}
|
}
|
||||||
return nil
|
opts, ok := ti.Options.(*options.Options)
|
||||||
|
if !ok {
|
||||||
|
return errors.New("invalid v2 shim create options format")
|
||||||
|
}
|
||||||
|
opts.NoPivotRoot = true
|
||||||
|
} else {
|
||||||
|
if ti.Options == nil {
|
||||||
|
ti.Options = &runctypes.CreateOptions{
|
||||||
|
NoPivotRoot: true,
|
||||||
|
}
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
opts, ok := ti.Options.(*runctypes.CreateOptions)
|
||||||
|
if !ok {
|
||||||
|
return errors.New("invalid options type, expected runctypes.CreateOptions")
|
||||||
|
}
|
||||||
|
opts.NoPivotRoot = true
|
||||||
}
|
}
|
||||||
opts, ok := info.Options.(*runctypes.CreateOptions)
|
|
||||||
if !ok {
|
|
||||||
return errors.New("invalid options type, expected runctypes.CreateOptions")
|
|
||||||
}
|
|
||||||
opts.NoPivotRoot = true
|
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user