mirror of
https://github.com/aljazceru/kata-containers.git
synced 2025-12-18 14:54:19 +01:00
gomod: update runtime import path
To use the kata-containers repo path. Most of the change is generated by script: find . -type f -name "*.go" |xargs sed -i -e \ 's|github.com/kata-containers/runtime|github.com/kata-containers/kata-containers/src/runtime|g' Fixes: #201 Signed-off-by: Peng Tao <bergwolf@hyper.sh>
This commit is contained in:
@@ -7,7 +7,7 @@ package main
|
|||||||
|
|
||||||
import (
|
import (
|
||||||
"github.com/containerd/containerd/runtime/v2/shim"
|
"github.com/containerd/containerd/runtime/v2/shim"
|
||||||
"github.com/kata-containers/runtime/containerd-shim-v2"
|
"github.com/kata-containers/kata-containers/src/runtime/containerd-shim-v2"
|
||||||
)
|
)
|
||||||
|
|
||||||
func shimConfig(config *shim.Config) {
|
func shimConfig(config *shim.Config) {
|
||||||
|
|||||||
@@ -12,10 +12,10 @@ import (
|
|||||||
"fmt"
|
"fmt"
|
||||||
"os"
|
"os"
|
||||||
|
|
||||||
"github.com/kata-containers/runtime/pkg/katautils"
|
"github.com/kata-containers/kata-containers/src/runtime/pkg/katautils"
|
||||||
vc "github.com/kata-containers/runtime/virtcontainers"
|
vc "github.com/kata-containers/kata-containers/src/runtime/virtcontainers"
|
||||||
"github.com/kata-containers/runtime/virtcontainers/pkg/compatoci"
|
"github.com/kata-containers/kata-containers/src/runtime/virtcontainers/pkg/compatoci"
|
||||||
"github.com/kata-containers/runtime/virtcontainers/pkg/oci"
|
"github.com/kata-containers/kata-containers/src/runtime/virtcontainers/pkg/oci"
|
||||||
"github.com/urfave/cli"
|
"github.com/urfave/cli"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|||||||
@@ -15,12 +15,12 @@ import (
|
|||||||
"regexp"
|
"regexp"
|
||||||
"testing"
|
"testing"
|
||||||
|
|
||||||
ktu "github.com/kata-containers/runtime/pkg/katatestutils"
|
ktu "github.com/kata-containers/kata-containers/src/runtime/pkg/katatestutils"
|
||||||
"github.com/kata-containers/runtime/pkg/katautils"
|
"github.com/kata-containers/kata-containers/src/runtime/pkg/katautils"
|
||||||
vc "github.com/kata-containers/runtime/virtcontainers"
|
vc "github.com/kata-containers/kata-containers/src/runtime/virtcontainers"
|
||||||
"github.com/kata-containers/runtime/virtcontainers/pkg/compatoci"
|
"github.com/kata-containers/kata-containers/src/runtime/virtcontainers/pkg/compatoci"
|
||||||
"github.com/kata-containers/runtime/virtcontainers/pkg/oci"
|
"github.com/kata-containers/kata-containers/src/runtime/virtcontainers/pkg/oci"
|
||||||
"github.com/kata-containers/runtime/virtcontainers/pkg/vcmock"
|
"github.com/kata-containers/kata-containers/src/runtime/virtcontainers/pkg/vcmock"
|
||||||
specs "github.com/opencontainers/runtime-spec/specs-go"
|
specs "github.com/opencontainers/runtime-spec/specs-go"
|
||||||
"github.com/stretchr/testify/assert"
|
"github.com/stretchr/testify/assert"
|
||||||
"github.com/urfave/cli"
|
"github.com/urfave/cli"
|
||||||
|
|||||||
@@ -11,10 +11,10 @@ import (
|
|||||||
"fmt"
|
"fmt"
|
||||||
"os"
|
"os"
|
||||||
|
|
||||||
"github.com/kata-containers/runtime/pkg/katautils"
|
"github.com/kata-containers/kata-containers/src/runtime/pkg/katautils"
|
||||||
vc "github.com/kata-containers/runtime/virtcontainers"
|
vc "github.com/kata-containers/kata-containers/src/runtime/virtcontainers"
|
||||||
vcAnnot "github.com/kata-containers/runtime/virtcontainers/pkg/annotations"
|
vcAnnot "github.com/kata-containers/kata-containers/src/runtime/virtcontainers/pkg/annotations"
|
||||||
"github.com/kata-containers/runtime/virtcontainers/pkg/oci"
|
"github.com/kata-containers/kata-containers/src/runtime/virtcontainers/pkg/oci"
|
||||||
"github.com/sirupsen/logrus"
|
"github.com/sirupsen/logrus"
|
||||||
"github.com/urfave/cli"
|
"github.com/urfave/cli"
|
||||||
)
|
)
|
||||||
|
|||||||
@@ -16,12 +16,12 @@ import (
|
|||||||
"github.com/stretchr/testify/assert"
|
"github.com/stretchr/testify/assert"
|
||||||
"github.com/urfave/cli"
|
"github.com/urfave/cli"
|
||||||
|
|
||||||
ktu "github.com/kata-containers/runtime/pkg/katatestutils"
|
ktu "github.com/kata-containers/kata-containers/src/runtime/pkg/katatestutils"
|
||||||
vc "github.com/kata-containers/runtime/virtcontainers"
|
vc "github.com/kata-containers/kata-containers/src/runtime/virtcontainers"
|
||||||
vcAnnotations "github.com/kata-containers/runtime/virtcontainers/pkg/annotations"
|
vcAnnotations "github.com/kata-containers/kata-containers/src/runtime/virtcontainers/pkg/annotations"
|
||||||
"github.com/kata-containers/runtime/virtcontainers/pkg/compatoci"
|
"github.com/kata-containers/kata-containers/src/runtime/virtcontainers/pkg/compatoci"
|
||||||
"github.com/kata-containers/runtime/virtcontainers/pkg/vcmock"
|
"github.com/kata-containers/kata-containers/src/runtime/virtcontainers/pkg/vcmock"
|
||||||
"github.com/kata-containers/runtime/virtcontainers/types"
|
"github.com/kata-containers/kata-containers/src/runtime/virtcontainers/types"
|
||||||
)
|
)
|
||||||
|
|
||||||
func testRemoveCgroupsPathSuccessful(t *testing.T, cgroupsPathList []string) {
|
func testRemoveCgroupsPathSuccessful(t *testing.T, cgroupsPathList []string) {
|
||||||
|
|||||||
@@ -13,10 +13,10 @@ import (
|
|||||||
"sync"
|
"sync"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
vc "github.com/kata-containers/runtime/virtcontainers"
|
vc "github.com/kata-containers/kata-containers/src/runtime/virtcontainers"
|
||||||
"github.com/kata-containers/runtime/virtcontainers/types"
|
"github.com/kata-containers/kata-containers/src/runtime/virtcontainers/types"
|
||||||
|
|
||||||
"github.com/kata-containers/runtime/pkg/katautils"
|
"github.com/kata-containers/kata-containers/src/runtime/pkg/katautils"
|
||||||
"github.com/sirupsen/logrus"
|
"github.com/sirupsen/logrus"
|
||||||
"github.com/urfave/cli"
|
"github.com/urfave/cli"
|
||||||
)
|
)
|
||||||
|
|||||||
@@ -12,10 +12,10 @@ import (
|
|||||||
"testing"
|
"testing"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
vc "github.com/kata-containers/runtime/virtcontainers"
|
vc "github.com/kata-containers/kata-containers/src/runtime/virtcontainers"
|
||||||
vcAnnotations "github.com/kata-containers/runtime/virtcontainers/pkg/annotations"
|
vcAnnotations "github.com/kata-containers/kata-containers/src/runtime/virtcontainers/pkg/annotations"
|
||||||
"github.com/kata-containers/runtime/virtcontainers/pkg/vcmock"
|
"github.com/kata-containers/kata-containers/src/runtime/virtcontainers/pkg/vcmock"
|
||||||
"github.com/kata-containers/runtime/virtcontainers/types"
|
"github.com/kata-containers/kata-containers/src/runtime/virtcontainers/types"
|
||||||
"github.com/stretchr/testify/assert"
|
"github.com/stretchr/testify/assert"
|
||||||
"github.com/urfave/cli"
|
"github.com/urfave/cli"
|
||||||
)
|
)
|
||||||
|
|||||||
@@ -14,9 +14,9 @@ import (
|
|||||||
"os"
|
"os"
|
||||||
"syscall"
|
"syscall"
|
||||||
|
|
||||||
"github.com/kata-containers/runtime/pkg/katautils"
|
"github.com/kata-containers/kata-containers/src/runtime/pkg/katautils"
|
||||||
"github.com/kata-containers/runtime/virtcontainers/pkg/oci"
|
"github.com/kata-containers/kata-containers/src/runtime/virtcontainers/pkg/oci"
|
||||||
"github.com/kata-containers/runtime/virtcontainers/types"
|
"github.com/kata-containers/kata-containers/src/runtime/virtcontainers/types"
|
||||||
|
|
||||||
specs "github.com/opencontainers/runtime-spec/specs-go"
|
specs "github.com/opencontainers/runtime-spec/specs-go"
|
||||||
"github.com/urfave/cli"
|
"github.com/urfave/cli"
|
||||||
|
|||||||
@@ -18,11 +18,11 @@ import (
|
|||||||
"github.com/stretchr/testify/assert"
|
"github.com/stretchr/testify/assert"
|
||||||
"github.com/urfave/cli"
|
"github.com/urfave/cli"
|
||||||
|
|
||||||
vc "github.com/kata-containers/runtime/virtcontainers"
|
vc "github.com/kata-containers/kata-containers/src/runtime/virtcontainers"
|
||||||
vcAnnotations "github.com/kata-containers/runtime/virtcontainers/pkg/annotations"
|
vcAnnotations "github.com/kata-containers/kata-containers/src/runtime/virtcontainers/pkg/annotations"
|
||||||
"github.com/kata-containers/runtime/virtcontainers/pkg/compatoci"
|
"github.com/kata-containers/kata-containers/src/runtime/virtcontainers/pkg/compatoci"
|
||||||
"github.com/kata-containers/runtime/virtcontainers/pkg/vcmock"
|
"github.com/kata-containers/kata-containers/src/runtime/virtcontainers/pkg/vcmock"
|
||||||
"github.com/kata-containers/runtime/virtcontainers/types"
|
"github.com/kata-containers/kata-containers/src/runtime/virtcontainers/types"
|
||||||
)
|
)
|
||||||
|
|
||||||
func TestExecCLIFunction(t *testing.T) {
|
func TestExecCLIFunction(t *testing.T) {
|
||||||
|
|||||||
@@ -16,10 +16,10 @@ import (
|
|||||||
"time"
|
"time"
|
||||||
|
|
||||||
"github.com/gogo/protobuf/types"
|
"github.com/gogo/protobuf/types"
|
||||||
pb "github.com/kata-containers/runtime/protocols/cache"
|
pb "github.com/kata-containers/kata-containers/src/runtime/protocols/cache"
|
||||||
vc "github.com/kata-containers/runtime/virtcontainers"
|
vc "github.com/kata-containers/kata-containers/src/runtime/virtcontainers"
|
||||||
vf "github.com/kata-containers/runtime/virtcontainers/factory"
|
vf "github.com/kata-containers/kata-containers/src/runtime/virtcontainers/factory"
|
||||||
"github.com/kata-containers/runtime/virtcontainers/pkg/oci"
|
"github.com/kata-containers/kata-containers/src/runtime/virtcontainers/pkg/oci"
|
||||||
"github.com/pkg/errors"
|
"github.com/pkg/errors"
|
||||||
"github.com/urfave/cli"
|
"github.com/urfave/cli"
|
||||||
"golang.org/x/sys/unix"
|
"golang.org/x/sys/unix"
|
||||||
|
|||||||
@@ -14,8 +14,8 @@ import (
|
|||||||
"github.com/stretchr/testify/assert"
|
"github.com/stretchr/testify/assert"
|
||||||
"github.com/urfave/cli"
|
"github.com/urfave/cli"
|
||||||
|
|
||||||
ktu "github.com/kata-containers/runtime/pkg/katatestutils"
|
ktu "github.com/kata-containers/kata-containers/src/runtime/pkg/katatestutils"
|
||||||
vc "github.com/kata-containers/runtime/virtcontainers"
|
vc "github.com/kata-containers/kata-containers/src/runtime/virtcontainers"
|
||||||
)
|
)
|
||||||
|
|
||||||
const testDisabledAsNonRoot = "Test disabled as requires root privileges"
|
const testDisabledAsNonRoot = "Test disabled as requires root privileges"
|
||||||
|
|||||||
@@ -25,9 +25,9 @@ import (
|
|||||||
"strings"
|
"strings"
|
||||||
"syscall"
|
"syscall"
|
||||||
|
|
||||||
"github.com/kata-containers/runtime/pkg/katautils"
|
"github.com/kata-containers/kata-containers/src/runtime/pkg/katautils"
|
||||||
vc "github.com/kata-containers/runtime/virtcontainers"
|
vc "github.com/kata-containers/kata-containers/src/runtime/virtcontainers"
|
||||||
"github.com/kata-containers/runtime/virtcontainers/pkg/oci"
|
"github.com/kata-containers/kata-containers/src/runtime/virtcontainers/pkg/oci"
|
||||||
"github.com/sirupsen/logrus"
|
"github.com/sirupsen/logrus"
|
||||||
"github.com/urfave/cli"
|
"github.com/urfave/cli"
|
||||||
)
|
)
|
||||||
|
|||||||
@@ -12,7 +12,7 @@ import (
|
|||||||
"syscall"
|
"syscall"
|
||||||
"unsafe"
|
"unsafe"
|
||||||
|
|
||||||
vc "github.com/kata-containers/runtime/virtcontainers"
|
vc "github.com/kata-containers/kata-containers/src/runtime/virtcontainers"
|
||||||
"github.com/sirupsen/logrus"
|
"github.com/sirupsen/logrus"
|
||||||
)
|
)
|
||||||
|
|
||||||
@@ -53,7 +53,7 @@ const acrnDevice = "/dev/acrn_vhm"
|
|||||||
// Due to this several macros are not defined in Linux headers.
|
// Due to this several macros are not defined in Linux headers.
|
||||||
// Until the support is available, directly use the value instead
|
// Until the support is available, directly use the value instead
|
||||||
// of macros.
|
// of macros.
|
||||||
//https://github.com/kata-containers/runtime/issues/1784
|
//https://github.com/kata-containers/kata-containers/src/runtime/issues/1784
|
||||||
const ioctl_ACRN_CREATE_VM = 0x43000010 //nolint
|
const ioctl_ACRN_CREATE_VM = 0x43000010 //nolint
|
||||||
const ioctl_ACRN_DESTROY_VM = 0x43000011 //nolint
|
const ioctl_ACRN_DESTROY_VM = 0x43000011 //nolint
|
||||||
|
|
||||||
|
|||||||
@@ -14,7 +14,7 @@ import (
|
|||||||
"regexp"
|
"regexp"
|
||||||
"testing"
|
"testing"
|
||||||
|
|
||||||
ktu "github.com/kata-containers/runtime/pkg/katatestutils"
|
ktu "github.com/kata-containers/kata-containers/src/runtime/pkg/katatestutils"
|
||||||
"github.com/sirupsen/logrus"
|
"github.com/sirupsen/logrus"
|
||||||
"github.com/stretchr/testify/assert"
|
"github.com/stretchr/testify/assert"
|
||||||
)
|
)
|
||||||
|
|||||||
@@ -8,7 +8,7 @@ package main
|
|||||||
import (
|
import (
|
||||||
"fmt"
|
"fmt"
|
||||||
|
|
||||||
vc "github.com/kata-containers/runtime/virtcontainers"
|
vc "github.com/kata-containers/kata-containers/src/runtime/virtcontainers"
|
||||||
"github.com/sirupsen/logrus"
|
"github.com/sirupsen/logrus"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|||||||
@@ -12,8 +12,8 @@ import (
|
|||||||
"strconv"
|
"strconv"
|
||||||
"strings"
|
"strings"
|
||||||
|
|
||||||
"github.com/kata-containers/runtime/pkg/katautils"
|
"github.com/kata-containers/kata-containers/src/runtime/pkg/katautils"
|
||||||
vc "github.com/kata-containers/runtime/virtcontainers"
|
vc "github.com/kata-containers/kata-containers/src/runtime/virtcontainers"
|
||||||
"github.com/sirupsen/logrus"
|
"github.com/sirupsen/logrus"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|||||||
@@ -9,7 +9,7 @@ import (
|
|||||||
"fmt"
|
"fmt"
|
||||||
"strings"
|
"strings"
|
||||||
|
|
||||||
vc "github.com/kata-containers/runtime/virtcontainers"
|
vc "github.com/kata-containers/kata-containers/src/runtime/virtcontainers"
|
||||||
"github.com/sirupsen/logrus"
|
"github.com/sirupsen/logrus"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|||||||
@@ -17,9 +17,9 @@ import (
|
|||||||
"strings"
|
"strings"
|
||||||
"testing"
|
"testing"
|
||||||
|
|
||||||
ktu "github.com/kata-containers/runtime/pkg/katatestutils"
|
ktu "github.com/kata-containers/kata-containers/src/runtime/pkg/katatestutils"
|
||||||
"github.com/kata-containers/runtime/pkg/katautils"
|
"github.com/kata-containers/kata-containers/src/runtime/pkg/katautils"
|
||||||
vc "github.com/kata-containers/runtime/virtcontainers"
|
vc "github.com/kata-containers/kata-containers/src/runtime/virtcontainers"
|
||||||
"github.com/sirupsen/logrus"
|
"github.com/sirupsen/logrus"
|
||||||
"github.com/stretchr/testify/assert"
|
"github.com/stretchr/testify/assert"
|
||||||
"github.com/urfave/cli"
|
"github.com/urfave/cli"
|
||||||
|
|||||||
@@ -13,11 +13,11 @@ import (
|
|||||||
"strings"
|
"strings"
|
||||||
|
|
||||||
"github.com/BurntSushi/toml"
|
"github.com/BurntSushi/toml"
|
||||||
"github.com/kata-containers/runtime/pkg/katautils"
|
"github.com/kata-containers/kata-containers/src/runtime/pkg/katautils"
|
||||||
vc "github.com/kata-containers/runtime/virtcontainers"
|
vc "github.com/kata-containers/kata-containers/src/runtime/virtcontainers"
|
||||||
exp "github.com/kata-containers/runtime/virtcontainers/experimental"
|
exp "github.com/kata-containers/kata-containers/src/runtime/virtcontainers/experimental"
|
||||||
"github.com/kata-containers/runtime/virtcontainers/pkg/oci"
|
"github.com/kata-containers/kata-containers/src/runtime/virtcontainers/pkg/oci"
|
||||||
vcUtils "github.com/kata-containers/runtime/virtcontainers/utils"
|
vcUtils "github.com/kata-containers/kata-containers/src/runtime/virtcontainers/utils"
|
||||||
specs "github.com/opencontainers/runtime-spec/specs-go"
|
specs "github.com/opencontainers/runtime-spec/specs-go"
|
||||||
"github.com/urfave/cli"
|
"github.com/urfave/cli"
|
||||||
)
|
)
|
||||||
|
|||||||
@@ -7,7 +7,7 @@ package main
|
|||||||
|
|
||||||
import (
|
import (
|
||||||
"fmt"
|
"fmt"
|
||||||
vcUtils "github.com/kata-containers/runtime/virtcontainers/utils"
|
vcUtils "github.com/kata-containers/kata-containers/src/runtime/virtcontainers/utils"
|
||||||
"path/filepath"
|
"path/filepath"
|
||||||
goruntime "runtime"
|
goruntime "runtime"
|
||||||
)
|
)
|
||||||
|
|||||||
@@ -19,14 +19,14 @@ import (
|
|||||||
"testing"
|
"testing"
|
||||||
|
|
||||||
"github.com/BurntSushi/toml"
|
"github.com/BurntSushi/toml"
|
||||||
vc "github.com/kata-containers/runtime/virtcontainers"
|
vc "github.com/kata-containers/kata-containers/src/runtime/virtcontainers"
|
||||||
vcUtils "github.com/kata-containers/runtime/virtcontainers/utils"
|
vcUtils "github.com/kata-containers/kata-containers/src/runtime/virtcontainers/utils"
|
||||||
specs "github.com/opencontainers/runtime-spec/specs-go"
|
specs "github.com/opencontainers/runtime-spec/specs-go"
|
||||||
"github.com/urfave/cli"
|
"github.com/urfave/cli"
|
||||||
|
|
||||||
"github.com/kata-containers/runtime/pkg/katatestutils"
|
"github.com/kata-containers/kata-containers/src/runtime/pkg/katatestutils"
|
||||||
"github.com/kata-containers/runtime/pkg/katautils"
|
"github.com/kata-containers/kata-containers/src/runtime/pkg/katautils"
|
||||||
"github.com/kata-containers/runtime/virtcontainers/pkg/oci"
|
"github.com/kata-containers/kata-containers/src/runtime/virtcontainers/pkg/oci"
|
||||||
"github.com/stretchr/testify/assert"
|
"github.com/stretchr/testify/assert"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|||||||
@@ -12,8 +12,8 @@ import (
|
|||||||
"fmt"
|
"fmt"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
"github.com/kata-containers/runtime/pkg/katautils"
|
"github.com/kata-containers/kata-containers/src/runtime/pkg/katautils"
|
||||||
"github.com/kata-containers/runtime/virtcontainers/types"
|
"github.com/kata-containers/kata-containers/src/runtime/virtcontainers/types"
|
||||||
"github.com/sirupsen/logrus"
|
"github.com/sirupsen/logrus"
|
||||||
"github.com/urfave/cli"
|
"github.com/urfave/cli"
|
||||||
)
|
)
|
||||||
|
|||||||
@@ -12,10 +12,10 @@ import (
|
|||||||
"strconv"
|
"strconv"
|
||||||
"syscall"
|
"syscall"
|
||||||
|
|
||||||
"github.com/kata-containers/runtime/pkg/katautils"
|
"github.com/kata-containers/kata-containers/src/runtime/pkg/katautils"
|
||||||
vc "github.com/kata-containers/runtime/virtcontainers"
|
vc "github.com/kata-containers/kata-containers/src/runtime/virtcontainers"
|
||||||
"github.com/kata-containers/runtime/virtcontainers/pkg/oci"
|
"github.com/kata-containers/kata-containers/src/runtime/virtcontainers/pkg/oci"
|
||||||
"github.com/kata-containers/runtime/virtcontainers/types"
|
"github.com/kata-containers/kata-containers/src/runtime/virtcontainers/types"
|
||||||
"github.com/sirupsen/logrus"
|
"github.com/sirupsen/logrus"
|
||||||
"github.com/urfave/cli"
|
"github.com/urfave/cli"
|
||||||
)
|
)
|
||||||
|
|||||||
@@ -16,10 +16,10 @@ import (
|
|||||||
"github.com/opencontainers/runtime-spec/specs-go"
|
"github.com/opencontainers/runtime-spec/specs-go"
|
||||||
"github.com/stretchr/testify/assert"
|
"github.com/stretchr/testify/assert"
|
||||||
|
|
||||||
vc "github.com/kata-containers/runtime/virtcontainers"
|
vc "github.com/kata-containers/kata-containers/src/runtime/virtcontainers"
|
||||||
vcAnnotations "github.com/kata-containers/runtime/virtcontainers/pkg/annotations"
|
vcAnnotations "github.com/kata-containers/kata-containers/src/runtime/virtcontainers/pkg/annotations"
|
||||||
"github.com/kata-containers/runtime/virtcontainers/pkg/vcmock"
|
"github.com/kata-containers/kata-containers/src/runtime/virtcontainers/pkg/vcmock"
|
||||||
"github.com/kata-containers/runtime/virtcontainers/types"
|
"github.com/kata-containers/kata-containers/src/runtime/virtcontainers/types"
|
||||||
)
|
)
|
||||||
|
|
||||||
var (
|
var (
|
||||||
|
|||||||
@@ -19,9 +19,9 @@ import (
|
|||||||
|
|
||||||
"github.com/urfave/cli"
|
"github.com/urfave/cli"
|
||||||
|
|
||||||
"github.com/kata-containers/runtime/pkg/katautils"
|
"github.com/kata-containers/kata-containers/src/runtime/pkg/katautils"
|
||||||
vc "github.com/kata-containers/runtime/virtcontainers"
|
vc "github.com/kata-containers/kata-containers/src/runtime/virtcontainers"
|
||||||
oci "github.com/kata-containers/runtime/virtcontainers/pkg/oci"
|
oci "github.com/kata-containers/kata-containers/src/runtime/virtcontainers/pkg/oci"
|
||||||
)
|
)
|
||||||
|
|
||||||
const formatOptions = `table or json`
|
const formatOptions = `table or json`
|
||||||
|
|||||||
@@ -18,10 +18,10 @@ import (
|
|||||||
"testing"
|
"testing"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
"github.com/kata-containers/runtime/pkg/katautils"
|
"github.com/kata-containers/kata-containers/src/runtime/pkg/katautils"
|
||||||
vc "github.com/kata-containers/runtime/virtcontainers"
|
vc "github.com/kata-containers/kata-containers/src/runtime/virtcontainers"
|
||||||
vcAnnotations "github.com/kata-containers/runtime/virtcontainers/pkg/annotations"
|
vcAnnotations "github.com/kata-containers/kata-containers/src/runtime/virtcontainers/pkg/annotations"
|
||||||
"github.com/kata-containers/runtime/virtcontainers/pkg/vcmock"
|
"github.com/kata-containers/kata-containers/src/runtime/virtcontainers/pkg/vcmock"
|
||||||
"github.com/stretchr/testify/assert"
|
"github.com/stretchr/testify/assert"
|
||||||
"github.com/urfave/cli"
|
"github.com/urfave/cli"
|
||||||
)
|
)
|
||||||
|
|||||||
@@ -17,13 +17,13 @@ import (
|
|||||||
"strings"
|
"strings"
|
||||||
"syscall"
|
"syscall"
|
||||||
|
|
||||||
"github.com/kata-containers/runtime/pkg/katautils"
|
"github.com/kata-containers/kata-containers/src/runtime/pkg/katautils"
|
||||||
"github.com/kata-containers/runtime/pkg/signals"
|
"github.com/kata-containers/kata-containers/src/runtime/pkg/signals"
|
||||||
vc "github.com/kata-containers/runtime/virtcontainers"
|
vc "github.com/kata-containers/kata-containers/src/runtime/virtcontainers"
|
||||||
exp "github.com/kata-containers/runtime/virtcontainers/experimental"
|
exp "github.com/kata-containers/kata-containers/src/runtime/virtcontainers/experimental"
|
||||||
vf "github.com/kata-containers/runtime/virtcontainers/factory"
|
vf "github.com/kata-containers/kata-containers/src/runtime/virtcontainers/factory"
|
||||||
"github.com/kata-containers/runtime/virtcontainers/pkg/oci"
|
"github.com/kata-containers/kata-containers/src/runtime/virtcontainers/pkg/oci"
|
||||||
"github.com/kata-containers/runtime/virtcontainers/pkg/rootless"
|
"github.com/kata-containers/kata-containers/src/runtime/virtcontainers/pkg/rootless"
|
||||||
specs "github.com/opencontainers/runtime-spec/specs-go"
|
specs "github.com/opencontainers/runtime-spec/specs-go"
|
||||||
opentracing "github.com/opentracing/opentracing-go"
|
opentracing "github.com/opentracing/opentracing-go"
|
||||||
"github.com/sirupsen/logrus"
|
"github.com/sirupsen/logrus"
|
||||||
@@ -282,7 +282,7 @@ func beforeSubcommands(c *cli.Context) error {
|
|||||||
rootless.SetRootless(*r)
|
rootless.SetRootless(*r)
|
||||||
}
|
}
|
||||||
// Support --systed-cgroup
|
// Support --systed-cgroup
|
||||||
// Issue: https://github.com/kata-containers/runtime/issues/2428
|
// Issue: https://github.com/kata-containers/kata-containers/src/runtime/issues/2428
|
||||||
|
|
||||||
ignoreConfigLogs := false
|
ignoreConfigLogs := false
|
||||||
var traceRootSpan string
|
var traceRootSpan string
|
||||||
|
|||||||
@@ -22,14 +22,14 @@ import (
|
|||||||
"testing"
|
"testing"
|
||||||
|
|
||||||
"github.com/dlespiau/covertool/pkg/cover"
|
"github.com/dlespiau/covertool/pkg/cover"
|
||||||
ktu "github.com/kata-containers/runtime/pkg/katatestutils"
|
ktu "github.com/kata-containers/kata-containers/src/runtime/pkg/katatestutils"
|
||||||
"github.com/kata-containers/runtime/pkg/katautils"
|
"github.com/kata-containers/kata-containers/src/runtime/pkg/katautils"
|
||||||
vc "github.com/kata-containers/runtime/virtcontainers"
|
vc "github.com/kata-containers/kata-containers/src/runtime/virtcontainers"
|
||||||
"github.com/kata-containers/runtime/virtcontainers/pkg/compatoci"
|
"github.com/kata-containers/kata-containers/src/runtime/virtcontainers/pkg/compatoci"
|
||||||
"github.com/kata-containers/runtime/virtcontainers/pkg/oci"
|
"github.com/kata-containers/kata-containers/src/runtime/virtcontainers/pkg/oci"
|
||||||
"github.com/kata-containers/runtime/virtcontainers/pkg/rootless"
|
"github.com/kata-containers/kata-containers/src/runtime/virtcontainers/pkg/rootless"
|
||||||
"github.com/kata-containers/runtime/virtcontainers/pkg/vcmock"
|
"github.com/kata-containers/kata-containers/src/runtime/virtcontainers/pkg/vcmock"
|
||||||
"github.com/kata-containers/runtime/virtcontainers/types"
|
"github.com/kata-containers/kata-containers/src/runtime/virtcontainers/types"
|
||||||
specs "github.com/opencontainers/runtime-spec/specs-go"
|
specs "github.com/opencontainers/runtime-spec/specs-go"
|
||||||
"github.com/stretchr/testify/assert"
|
"github.com/stretchr/testify/assert"
|
||||||
jaeger "github.com/uber/jaeger-client-go"
|
jaeger "github.com/uber/jaeger-client-go"
|
||||||
|
|||||||
@@ -11,8 +11,8 @@ import (
|
|||||||
"fmt"
|
"fmt"
|
||||||
"os"
|
"os"
|
||||||
|
|
||||||
vcTypes "github.com/kata-containers/runtime/virtcontainers/pkg/types"
|
vcTypes "github.com/kata-containers/kata-containers/src/runtime/virtcontainers/pkg/types"
|
||||||
"github.com/kata-containers/runtime/virtcontainers/types"
|
"github.com/kata-containers/kata-containers/src/runtime/virtcontainers/types"
|
||||||
"github.com/sirupsen/logrus"
|
"github.com/sirupsen/logrus"
|
||||||
"github.com/urfave/cli"
|
"github.com/urfave/cli"
|
||||||
)
|
)
|
||||||
|
|||||||
@@ -15,9 +15,9 @@ import (
|
|||||||
specs "github.com/opencontainers/runtime-spec/specs-go"
|
specs "github.com/opencontainers/runtime-spec/specs-go"
|
||||||
"github.com/stretchr/testify/assert"
|
"github.com/stretchr/testify/assert"
|
||||||
|
|
||||||
vc "github.com/kata-containers/runtime/virtcontainers"
|
vc "github.com/kata-containers/kata-containers/src/runtime/virtcontainers"
|
||||||
vcTypes "github.com/kata-containers/runtime/virtcontainers/pkg/types"
|
vcTypes "github.com/kata-containers/kata-containers/src/runtime/virtcontainers/pkg/types"
|
||||||
"github.com/kata-containers/runtime/virtcontainers/types"
|
"github.com/kata-containers/kata-containers/src/runtime/virtcontainers/types"
|
||||||
)
|
)
|
||||||
|
|
||||||
var (
|
var (
|
||||||
|
|||||||
@@ -15,8 +15,8 @@ import (
|
|||||||
"strings"
|
"strings"
|
||||||
"syscall"
|
"syscall"
|
||||||
|
|
||||||
"github.com/kata-containers/runtime/pkg/katautils"
|
"github.com/kata-containers/kata-containers/src/runtime/pkg/katautils"
|
||||||
vc "github.com/kata-containers/runtime/virtcontainers"
|
vc "github.com/kata-containers/kata-containers/src/runtime/virtcontainers"
|
||||||
"github.com/opencontainers/runc/libcontainer/utils"
|
"github.com/opencontainers/runc/libcontainer/utils"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|||||||
@@ -16,9 +16,9 @@ import (
|
|||||||
"testing"
|
"testing"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
vc "github.com/kata-containers/runtime/virtcontainers"
|
vc "github.com/kata-containers/kata-containers/src/runtime/virtcontainers"
|
||||||
vcAnnotations "github.com/kata-containers/runtime/virtcontainers/pkg/annotations"
|
vcAnnotations "github.com/kata-containers/kata-containers/src/runtime/virtcontainers/pkg/annotations"
|
||||||
"github.com/kata-containers/runtime/virtcontainers/pkg/vcmock"
|
"github.com/kata-containers/kata-containers/src/runtime/virtcontainers/pkg/vcmock"
|
||||||
"github.com/opencontainers/runc/libcontainer/utils"
|
"github.com/opencontainers/runc/libcontainer/utils"
|
||||||
"github.com/stretchr/testify/assert"
|
"github.com/stretchr/testify/assert"
|
||||||
)
|
)
|
||||||
|
|||||||
@@ -9,7 +9,7 @@ package main
|
|||||||
import (
|
import (
|
||||||
"context"
|
"context"
|
||||||
|
|
||||||
"github.com/kata-containers/runtime/pkg/katautils"
|
"github.com/kata-containers/kata-containers/src/runtime/pkg/katautils"
|
||||||
"github.com/sirupsen/logrus"
|
"github.com/sirupsen/logrus"
|
||||||
"github.com/urfave/cli"
|
"github.com/urfave/cli"
|
||||||
)
|
)
|
||||||
|
|||||||
@@ -15,8 +15,8 @@ import (
|
|||||||
specs "github.com/opencontainers/runtime-spec/specs-go"
|
specs "github.com/opencontainers/runtime-spec/specs-go"
|
||||||
"github.com/stretchr/testify/assert"
|
"github.com/stretchr/testify/assert"
|
||||||
|
|
||||||
vc "github.com/kata-containers/runtime/virtcontainers"
|
vc "github.com/kata-containers/kata-containers/src/runtime/virtcontainers"
|
||||||
"github.com/kata-containers/runtime/virtcontainers/types"
|
"github.com/kata-containers/kata-containers/src/runtime/virtcontainers/types"
|
||||||
)
|
)
|
||||||
|
|
||||||
var (
|
var (
|
||||||
|
|||||||
@@ -10,9 +10,9 @@ import (
|
|||||||
"context"
|
"context"
|
||||||
"fmt"
|
"fmt"
|
||||||
|
|
||||||
"github.com/kata-containers/runtime/pkg/katautils"
|
"github.com/kata-containers/kata-containers/src/runtime/pkg/katautils"
|
||||||
vc "github.com/kata-containers/runtime/virtcontainers"
|
vc "github.com/kata-containers/kata-containers/src/runtime/virtcontainers"
|
||||||
"github.com/kata-containers/runtime/virtcontainers/types"
|
"github.com/kata-containers/kata-containers/src/runtime/virtcontainers/types"
|
||||||
|
|
||||||
"github.com/sirupsen/logrus"
|
"github.com/sirupsen/logrus"
|
||||||
"github.com/urfave/cli"
|
"github.com/urfave/cli"
|
||||||
|
|||||||
@@ -11,10 +11,10 @@ import (
|
|||||||
"os"
|
"os"
|
||||||
"testing"
|
"testing"
|
||||||
|
|
||||||
vc "github.com/kata-containers/runtime/virtcontainers"
|
vc "github.com/kata-containers/kata-containers/src/runtime/virtcontainers"
|
||||||
vcAnnotations "github.com/kata-containers/runtime/virtcontainers/pkg/annotations"
|
vcAnnotations "github.com/kata-containers/kata-containers/src/runtime/virtcontainers/pkg/annotations"
|
||||||
"github.com/kata-containers/runtime/virtcontainers/pkg/vcmock"
|
"github.com/kata-containers/kata-containers/src/runtime/virtcontainers/pkg/vcmock"
|
||||||
"github.com/kata-containers/runtime/virtcontainers/types"
|
"github.com/kata-containers/kata-containers/src/runtime/virtcontainers/types"
|
||||||
"github.com/stretchr/testify/assert"
|
"github.com/stretchr/testify/assert"
|
||||||
"github.com/urfave/cli"
|
"github.com/urfave/cli"
|
||||||
)
|
)
|
||||||
|
|||||||
@@ -13,8 +13,8 @@ import (
|
|||||||
"os"
|
"os"
|
||||||
"syscall"
|
"syscall"
|
||||||
|
|
||||||
"github.com/kata-containers/runtime/pkg/katautils"
|
"github.com/kata-containers/kata-containers/src/runtime/pkg/katautils"
|
||||||
"github.com/kata-containers/runtime/virtcontainers/pkg/oci"
|
"github.com/kata-containers/kata-containers/src/runtime/virtcontainers/pkg/oci"
|
||||||
"github.com/urfave/cli"
|
"github.com/urfave/cli"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|||||||
@@ -20,12 +20,12 @@ import (
|
|||||||
"github.com/stretchr/testify/assert"
|
"github.com/stretchr/testify/assert"
|
||||||
"github.com/urfave/cli"
|
"github.com/urfave/cli"
|
||||||
|
|
||||||
ktu "github.com/kata-containers/runtime/pkg/katatestutils"
|
ktu "github.com/kata-containers/kata-containers/src/runtime/pkg/katatestutils"
|
||||||
vc "github.com/kata-containers/runtime/virtcontainers"
|
vc "github.com/kata-containers/kata-containers/src/runtime/virtcontainers"
|
||||||
vcAnnotations "github.com/kata-containers/runtime/virtcontainers/pkg/annotations"
|
vcAnnotations "github.com/kata-containers/kata-containers/src/runtime/virtcontainers/pkg/annotations"
|
||||||
"github.com/kata-containers/runtime/virtcontainers/pkg/compatoci"
|
"github.com/kata-containers/kata-containers/src/runtime/virtcontainers/pkg/compatoci"
|
||||||
"github.com/kata-containers/runtime/virtcontainers/pkg/oci"
|
"github.com/kata-containers/kata-containers/src/runtime/virtcontainers/pkg/oci"
|
||||||
"github.com/kata-containers/runtime/virtcontainers/pkg/vcmock"
|
"github.com/kata-containers/kata-containers/src/runtime/virtcontainers/pkg/vcmock"
|
||||||
)
|
)
|
||||||
|
|
||||||
func TestRunCliAction(t *testing.T) {
|
func TestRunCliAction(t *testing.T) {
|
||||||
|
|||||||
@@ -12,7 +12,7 @@ import (
|
|||||||
"io/ioutil"
|
"io/ioutil"
|
||||||
"os"
|
"os"
|
||||||
|
|
||||||
"github.com/kata-containers/runtime/pkg/katautils"
|
"github.com/kata-containers/kata-containers/src/runtime/pkg/katautils"
|
||||||
"github.com/opencontainers/runc/libcontainer/specconv"
|
"github.com/opencontainers/runc/libcontainer/specconv"
|
||||||
"github.com/urfave/cli"
|
"github.com/urfave/cli"
|
||||||
)
|
)
|
||||||
|
|||||||
@@ -10,10 +10,10 @@ import (
|
|||||||
"context"
|
"context"
|
||||||
"fmt"
|
"fmt"
|
||||||
|
|
||||||
"github.com/kata-containers/runtime/pkg/katautils"
|
"github.com/kata-containers/kata-containers/src/runtime/pkg/katautils"
|
||||||
vc "github.com/kata-containers/runtime/virtcontainers"
|
vc "github.com/kata-containers/kata-containers/src/runtime/virtcontainers"
|
||||||
vcAnnot "github.com/kata-containers/runtime/virtcontainers/pkg/annotations"
|
vcAnnot "github.com/kata-containers/kata-containers/src/runtime/virtcontainers/pkg/annotations"
|
||||||
"github.com/kata-containers/runtime/virtcontainers/pkg/oci"
|
"github.com/kata-containers/kata-containers/src/runtime/virtcontainers/pkg/oci"
|
||||||
"github.com/sirupsen/logrus"
|
"github.com/sirupsen/logrus"
|
||||||
"github.com/urfave/cli"
|
"github.com/urfave/cli"
|
||||||
)
|
)
|
||||||
|
|||||||
@@ -16,10 +16,10 @@ import (
|
|||||||
"github.com/stretchr/testify/assert"
|
"github.com/stretchr/testify/assert"
|
||||||
"github.com/urfave/cli"
|
"github.com/urfave/cli"
|
||||||
|
|
||||||
"github.com/kata-containers/runtime/pkg/katautils"
|
"github.com/kata-containers/kata-containers/src/runtime/pkg/katautils"
|
||||||
vc "github.com/kata-containers/runtime/virtcontainers"
|
vc "github.com/kata-containers/kata-containers/src/runtime/virtcontainers"
|
||||||
vcAnnotations "github.com/kata-containers/runtime/virtcontainers/pkg/annotations"
|
vcAnnotations "github.com/kata-containers/kata-containers/src/runtime/virtcontainers/pkg/annotations"
|
||||||
"github.com/kata-containers/runtime/virtcontainers/pkg/vcmock"
|
"github.com/kata-containers/kata-containers/src/runtime/virtcontainers/pkg/vcmock"
|
||||||
)
|
)
|
||||||
|
|
||||||
func TestStartInvalidArgs(t *testing.T) {
|
func TestStartInvalidArgs(t *testing.T) {
|
||||||
|
|||||||
@@ -12,8 +12,8 @@ import (
|
|||||||
"fmt"
|
"fmt"
|
||||||
"os"
|
"os"
|
||||||
|
|
||||||
"github.com/kata-containers/runtime/pkg/katautils"
|
"github.com/kata-containers/kata-containers/src/runtime/pkg/katautils"
|
||||||
"github.com/kata-containers/runtime/virtcontainers/pkg/oci"
|
"github.com/kata-containers/kata-containers/src/runtime/virtcontainers/pkg/oci"
|
||||||
"github.com/urfave/cli"
|
"github.com/urfave/cli"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|||||||
@@ -12,9 +12,9 @@ import (
|
|||||||
"os"
|
"os"
|
||||||
"testing"
|
"testing"
|
||||||
|
|
||||||
vc "github.com/kata-containers/runtime/virtcontainers"
|
vc "github.com/kata-containers/kata-containers/src/runtime/virtcontainers"
|
||||||
vcAnnotations "github.com/kata-containers/runtime/virtcontainers/pkg/annotations"
|
vcAnnotations "github.com/kata-containers/kata-containers/src/runtime/virtcontainers/pkg/annotations"
|
||||||
"github.com/kata-containers/runtime/virtcontainers/pkg/vcmock"
|
"github.com/kata-containers/kata-containers/src/runtime/virtcontainers/pkg/vcmock"
|
||||||
"github.com/stretchr/testify/assert"
|
"github.com/stretchr/testify/assert"
|
||||||
"github.com/urfave/cli"
|
"github.com/urfave/cli"
|
||||||
)
|
)
|
||||||
|
|||||||
@@ -13,8 +13,8 @@ import (
|
|||||||
"strconv"
|
"strconv"
|
||||||
|
|
||||||
"github.com/docker/go-units"
|
"github.com/docker/go-units"
|
||||||
"github.com/kata-containers/runtime/pkg/katautils"
|
"github.com/kata-containers/kata-containers/src/runtime/pkg/katautils"
|
||||||
"github.com/kata-containers/runtime/virtcontainers/types"
|
"github.com/kata-containers/kata-containers/src/runtime/virtcontainers/types"
|
||||||
|
|
||||||
"github.com/opencontainers/runtime-spec/specs-go"
|
"github.com/opencontainers/runtime-spec/specs-go"
|
||||||
"github.com/sirupsen/logrus"
|
"github.com/sirupsen/logrus"
|
||||||
|
|||||||
@@ -12,10 +12,10 @@ import (
|
|||||||
"os"
|
"os"
|
||||||
"testing"
|
"testing"
|
||||||
|
|
||||||
vc "github.com/kata-containers/runtime/virtcontainers"
|
vc "github.com/kata-containers/kata-containers/src/runtime/virtcontainers"
|
||||||
vcAnnotations "github.com/kata-containers/runtime/virtcontainers/pkg/annotations"
|
vcAnnotations "github.com/kata-containers/kata-containers/src/runtime/virtcontainers/pkg/annotations"
|
||||||
"github.com/kata-containers/runtime/virtcontainers/pkg/vcmock"
|
"github.com/kata-containers/kata-containers/src/runtime/virtcontainers/pkg/vcmock"
|
||||||
"github.com/kata-containers/runtime/virtcontainers/types"
|
"github.com/kata-containers/kata-containers/src/runtime/virtcontainers/types"
|
||||||
specs "github.com/opencontainers/runtime-spec/specs-go"
|
specs "github.com/opencontainers/runtime-spec/specs-go"
|
||||||
"github.com/stretchr/testify/assert"
|
"github.com/stretchr/testify/assert"
|
||||||
"github.com/urfave/cli"
|
"github.com/urfave/cli"
|
||||||
|
|||||||
@@ -13,7 +13,7 @@ import (
|
|||||||
"strings"
|
"strings"
|
||||||
|
|
||||||
"github.com/blang/semver"
|
"github.com/blang/semver"
|
||||||
"github.com/kata-containers/runtime/pkg/katautils"
|
"github.com/kata-containers/kata-containers/src/runtime/pkg/katautils"
|
||||||
)
|
)
|
||||||
|
|
||||||
const (
|
const (
|
||||||
|
|||||||
@@ -12,7 +12,7 @@ import (
|
|||||||
"path/filepath"
|
"path/filepath"
|
||||||
"testing"
|
"testing"
|
||||||
|
|
||||||
"github.com/kata-containers/runtime/pkg/katautils"
|
"github.com/kata-containers/kata-containers/src/runtime/pkg/katautils"
|
||||||
"github.com/stretchr/testify/assert"
|
"github.com/stretchr/testify/assert"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|||||||
@@ -6,7 +6,7 @@
|
|||||||
package main
|
package main
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"github.com/kata-containers/runtime/pkg/katautils"
|
"github.com/kata-containers/kata-containers/src/runtime/pkg/katautils"
|
||||||
"github.com/urfave/cli"
|
"github.com/urfave/cli"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|||||||
@@ -13,7 +13,7 @@ import (
|
|||||||
taskAPI "github.com/containerd/containerd/runtime/v2/task"
|
taskAPI "github.com/containerd/containerd/runtime/v2/task"
|
||||||
"github.com/opencontainers/runtime-spec/specs-go"
|
"github.com/opencontainers/runtime-spec/specs-go"
|
||||||
|
|
||||||
vc "github.com/kata-containers/runtime/virtcontainers"
|
vc "github.com/kata-containers/kata-containers/src/runtime/virtcontainers"
|
||||||
)
|
)
|
||||||
|
|
||||||
type container struct {
|
type container struct {
|
||||||
|
|||||||
@@ -25,10 +25,10 @@ import (
|
|||||||
_ "github.com/containerd/containerd/runtime/linux/runctypes"
|
_ "github.com/containerd/containerd/runtime/linux/runctypes"
|
||||||
crioption "github.com/containerd/cri-containerd/pkg/api/runtimeoptions/v1"
|
crioption "github.com/containerd/cri-containerd/pkg/api/runtimeoptions/v1"
|
||||||
|
|
||||||
"github.com/kata-containers/runtime/pkg/katautils"
|
"github.com/kata-containers/kata-containers/src/runtime/pkg/katautils"
|
||||||
vc "github.com/kata-containers/runtime/virtcontainers"
|
vc "github.com/kata-containers/kata-containers/src/runtime/virtcontainers"
|
||||||
"github.com/kata-containers/runtime/virtcontainers/pkg/compatoci"
|
"github.com/kata-containers/kata-containers/src/runtime/virtcontainers/pkg/compatoci"
|
||||||
"github.com/kata-containers/runtime/virtcontainers/pkg/oci"
|
"github.com/kata-containers/kata-containers/src/runtime/virtcontainers/pkg/oci"
|
||||||
)
|
)
|
||||||
|
|
||||||
func create(ctx context.Context, s *service, r *taskAPI.CreateTaskRequest) (*container, error) {
|
func create(ctx context.Context, s *service, r *taskAPI.CreateTaskRequest) (*container, error) {
|
||||||
@@ -137,7 +137,7 @@ func loadSpec(r *taskAPI.CreateTaskRequest) (*specs.Spec, string, error) {
|
|||||||
// remove the pidns to disable the sharePidNs temporarily,
|
// remove the pidns to disable the sharePidNs temporarily,
|
||||||
// once kata fixed this issue, we can remove this line.
|
// once kata fixed this issue, we can remove this line.
|
||||||
// For the bug, please see:
|
// For the bug, please see:
|
||||||
// https://github.com/kata-containers/runtime/issues/930
|
// https://github.com/kata-containers/kata-containers/src/runtime/issues/930
|
||||||
removeNamespace(&ociSpec, specs.PIDNamespace)
|
removeNamespace(&ociSpec, specs.PIDNamespace)
|
||||||
|
|
||||||
return &ociSpec, bundlePath, nil
|
return &ociSpec, bundlePath, nil
|
||||||
|
|||||||
@@ -22,12 +22,12 @@ import (
|
|||||||
specs "github.com/opencontainers/runtime-spec/specs-go"
|
specs "github.com/opencontainers/runtime-spec/specs-go"
|
||||||
"github.com/stretchr/testify/assert"
|
"github.com/stretchr/testify/assert"
|
||||||
|
|
||||||
ktu "github.com/kata-containers/runtime/pkg/katatestutils"
|
ktu "github.com/kata-containers/kata-containers/src/runtime/pkg/katatestutils"
|
||||||
"github.com/kata-containers/runtime/pkg/katautils"
|
"github.com/kata-containers/kata-containers/src/runtime/pkg/katautils"
|
||||||
vc "github.com/kata-containers/runtime/virtcontainers"
|
vc "github.com/kata-containers/kata-containers/src/runtime/virtcontainers"
|
||||||
vcAnnotations "github.com/kata-containers/runtime/virtcontainers/pkg/annotations"
|
vcAnnotations "github.com/kata-containers/kata-containers/src/runtime/virtcontainers/pkg/annotations"
|
||||||
"github.com/kata-containers/runtime/virtcontainers/pkg/compatoci"
|
"github.com/kata-containers/kata-containers/src/runtime/virtcontainers/pkg/compatoci"
|
||||||
"github.com/kata-containers/runtime/virtcontainers/pkg/vcmock"
|
"github.com/kata-containers/kata-containers/src/runtime/virtcontainers/pkg/vcmock"
|
||||||
)
|
)
|
||||||
|
|
||||||
func TestCreateSandboxSuccess(t *testing.T) {
|
func TestCreateSandboxSuccess(t *testing.T) {
|
||||||
|
|||||||
@@ -10,8 +10,8 @@ import (
|
|||||||
"path"
|
"path"
|
||||||
|
|
||||||
"github.com/containerd/containerd/mount"
|
"github.com/containerd/containerd/mount"
|
||||||
"github.com/kata-containers/runtime/pkg/katautils"
|
"github.com/kata-containers/kata-containers/src/runtime/pkg/katautils"
|
||||||
"github.com/kata-containers/runtime/virtcontainers/types"
|
"github.com/kata-containers/kata-containers/src/runtime/virtcontainers/types"
|
||||||
|
|
||||||
"github.com/sirupsen/logrus"
|
"github.com/sirupsen/logrus"
|
||||||
)
|
)
|
||||||
|
|||||||
@@ -15,8 +15,8 @@ import (
|
|||||||
taskAPI "github.com/containerd/containerd/runtime/v2/task"
|
taskAPI "github.com/containerd/containerd/runtime/v2/task"
|
||||||
"github.com/stretchr/testify/assert"
|
"github.com/stretchr/testify/assert"
|
||||||
|
|
||||||
"github.com/kata-containers/runtime/virtcontainers/pkg/compatoci"
|
"github.com/kata-containers/kata-containers/src/runtime/virtcontainers/pkg/compatoci"
|
||||||
"github.com/kata-containers/runtime/virtcontainers/pkg/vcmock"
|
"github.com/kata-containers/kata-containers/src/runtime/virtcontainers/pkg/vcmock"
|
||||||
)
|
)
|
||||||
|
|
||||||
func TestDeleteContainerSuccessAndFail(t *testing.T) {
|
func TestDeleteContainerSuccessAndFail(t *testing.T) {
|
||||||
|
|||||||
@@ -13,7 +13,7 @@ import (
|
|||||||
"google.golang.org/grpc/codes"
|
"google.golang.org/grpc/codes"
|
||||||
"google.golang.org/grpc/status"
|
"google.golang.org/grpc/status"
|
||||||
|
|
||||||
vc "github.com/kata-containers/runtime/virtcontainers/pkg/types"
|
vc "github.com/kata-containers/kata-containers/src/runtime/virtcontainers/pkg/types"
|
||||||
)
|
)
|
||||||
|
|
||||||
// toGRPC maps the virtcontainers error into a grpc error,
|
// toGRPC maps the virtcontainers error into a grpc error,
|
||||||
|
|||||||
@@ -9,7 +9,7 @@ import (
|
|||||||
"syscall"
|
"syscall"
|
||||||
"testing"
|
"testing"
|
||||||
|
|
||||||
vc "github.com/kata-containers/runtime/virtcontainers/pkg/types"
|
vc "github.com/kata-containers/kata-containers/src/runtime/virtcontainers/pkg/types"
|
||||||
"github.com/stretchr/testify/assert"
|
"github.com/stretchr/testify/assert"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|||||||
@@ -14,7 +14,7 @@ import (
|
|||||||
"github.com/containerd/containerd/errdefs"
|
"github.com/containerd/containerd/errdefs"
|
||||||
"github.com/containerd/typeurl"
|
"github.com/containerd/typeurl"
|
||||||
googleProtobuf "github.com/gogo/protobuf/types"
|
googleProtobuf "github.com/gogo/protobuf/types"
|
||||||
"github.com/kata-containers/runtime/virtcontainers/types"
|
"github.com/kata-containers/kata-containers/src/runtime/virtcontainers/types"
|
||||||
specs "github.com/opencontainers/runtime-spec/specs-go"
|
specs "github.com/opencontainers/runtime-spec/specs-go"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|||||||
@@ -13,7 +13,7 @@ import (
|
|||||||
"github.com/containerd/containerd/namespaces"
|
"github.com/containerd/containerd/namespaces"
|
||||||
|
|
||||||
taskAPI "github.com/containerd/containerd/runtime/v2/task"
|
taskAPI "github.com/containerd/containerd/runtime/v2/task"
|
||||||
"github.com/kata-containers/runtime/virtcontainers/pkg/vcmock"
|
"github.com/kata-containers/kata-containers/src/runtime/virtcontainers/pkg/vcmock"
|
||||||
|
|
||||||
"github.com/stretchr/testify/assert"
|
"github.com/stretchr/testify/assert"
|
||||||
)
|
)
|
||||||
|
|||||||
@@ -10,7 +10,7 @@ import (
|
|||||||
"github.com/containerd/typeurl"
|
"github.com/containerd/typeurl"
|
||||||
|
|
||||||
google_protobuf "github.com/gogo/protobuf/types"
|
google_protobuf "github.com/gogo/protobuf/types"
|
||||||
vc "github.com/kata-containers/runtime/virtcontainers"
|
vc "github.com/kata-containers/kata-containers/src/runtime/virtcontainers"
|
||||||
)
|
)
|
||||||
|
|
||||||
func marshalMetrics(s *service, containerID string) (*google_protobuf.Any, error) {
|
func marshalMetrics(s *service, containerID string) (*google_protobuf.Any, error) {
|
||||||
|
|||||||
@@ -12,7 +12,7 @@ import (
|
|||||||
|
|
||||||
"github.com/containerd/cgroups"
|
"github.com/containerd/cgroups"
|
||||||
"github.com/containerd/containerd/namespaces"
|
"github.com/containerd/containerd/namespaces"
|
||||||
vc "github.com/kata-containers/runtime/virtcontainers"
|
vc "github.com/kata-containers/kata-containers/src/runtime/virtcontainers"
|
||||||
"github.com/stretchr/testify/assert"
|
"github.com/stretchr/testify/assert"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|||||||
@@ -13,9 +13,9 @@ import (
|
|||||||
"github.com/containerd/containerd/namespaces"
|
"github.com/containerd/containerd/namespaces"
|
||||||
taskAPI "github.com/containerd/containerd/runtime/v2/task"
|
taskAPI "github.com/containerd/containerd/runtime/v2/task"
|
||||||
|
|
||||||
vc "github.com/kata-containers/runtime/virtcontainers"
|
vc "github.com/kata-containers/kata-containers/src/runtime/virtcontainers"
|
||||||
"github.com/kata-containers/runtime/virtcontainers/pkg/vcmock"
|
"github.com/kata-containers/kata-containers/src/runtime/virtcontainers/pkg/vcmock"
|
||||||
"github.com/kata-containers/runtime/virtcontainers/types"
|
"github.com/kata-containers/kata-containers/src/runtime/virtcontainers/types"
|
||||||
|
|
||||||
"github.com/stretchr/testify/assert"
|
"github.com/stretchr/testify/assert"
|
||||||
)
|
)
|
||||||
|
|||||||
@@ -29,11 +29,11 @@ import (
|
|||||||
"github.com/sirupsen/logrus"
|
"github.com/sirupsen/logrus"
|
||||||
"golang.org/x/sys/unix"
|
"golang.org/x/sys/unix"
|
||||||
|
|
||||||
"github.com/kata-containers/runtime/pkg/katautils"
|
"github.com/kata-containers/kata-containers/src/runtime/pkg/katautils"
|
||||||
vc "github.com/kata-containers/runtime/virtcontainers"
|
vc "github.com/kata-containers/kata-containers/src/runtime/virtcontainers"
|
||||||
"github.com/kata-containers/runtime/virtcontainers/pkg/compatoci"
|
"github.com/kata-containers/kata-containers/src/runtime/virtcontainers/pkg/compatoci"
|
||||||
"github.com/kata-containers/runtime/virtcontainers/pkg/oci"
|
"github.com/kata-containers/kata-containers/src/runtime/virtcontainers/pkg/oci"
|
||||||
"github.com/kata-containers/runtime/virtcontainers/types"
|
"github.com/kata-containers/kata-containers/src/runtime/virtcontainers/types"
|
||||||
)
|
)
|
||||||
|
|
||||||
const (
|
const (
|
||||||
|
|||||||
@@ -10,7 +10,7 @@ import (
|
|||||||
"fmt"
|
"fmt"
|
||||||
|
|
||||||
"github.com/containerd/containerd/api/types/task"
|
"github.com/containerd/containerd/api/types/task"
|
||||||
"github.com/kata-containers/runtime/pkg/katautils"
|
"github.com/kata-containers/kata-containers/src/runtime/pkg/katautils"
|
||||||
)
|
)
|
||||||
|
|
||||||
func startContainer(ctx context.Context, s *service, c *container) error {
|
func startContainer(ctx context.Context, s *service, c *container) error {
|
||||||
|
|||||||
@@ -13,9 +13,9 @@ import (
|
|||||||
"github.com/containerd/containerd/namespaces"
|
"github.com/containerd/containerd/namespaces"
|
||||||
taskAPI "github.com/containerd/containerd/runtime/v2/task"
|
taskAPI "github.com/containerd/containerd/runtime/v2/task"
|
||||||
|
|
||||||
vc "github.com/kata-containers/runtime/virtcontainers"
|
vc "github.com/kata-containers/kata-containers/src/runtime/virtcontainers"
|
||||||
vcAnnotations "github.com/kata-containers/runtime/virtcontainers/pkg/annotations"
|
vcAnnotations "github.com/kata-containers/kata-containers/src/runtime/virtcontainers/pkg/annotations"
|
||||||
"github.com/kata-containers/runtime/virtcontainers/pkg/vcmock"
|
"github.com/kata-containers/kata-containers/src/runtime/virtcontainers/pkg/vcmock"
|
||||||
|
|
||||||
"github.com/stretchr/testify/assert"
|
"github.com/stretchr/testify/assert"
|
||||||
)
|
)
|
||||||
|
|||||||
@@ -15,10 +15,10 @@ import (
|
|||||||
|
|
||||||
"github.com/containerd/containerd/mount"
|
"github.com/containerd/containerd/mount"
|
||||||
cdshim "github.com/containerd/containerd/runtime/v2/shim"
|
cdshim "github.com/containerd/containerd/runtime/v2/shim"
|
||||||
"github.com/kata-containers/runtime/pkg/katautils"
|
"github.com/kata-containers/kata-containers/src/runtime/pkg/katautils"
|
||||||
vc "github.com/kata-containers/runtime/virtcontainers"
|
vc "github.com/kata-containers/kata-containers/src/runtime/virtcontainers"
|
||||||
"github.com/kata-containers/runtime/virtcontainers/pkg/compatoci"
|
"github.com/kata-containers/kata-containers/src/runtime/virtcontainers/pkg/compatoci"
|
||||||
"github.com/kata-containers/runtime/virtcontainers/pkg/oci"
|
"github.com/kata-containers/kata-containers/src/runtime/virtcontainers/pkg/oci"
|
||||||
"github.com/opencontainers/runtime-spec/specs-go"
|
"github.com/opencontainers/runtime-spec/specs-go"
|
||||||
"github.com/sirupsen/logrus"
|
"github.com/sirupsen/logrus"
|
||||||
)
|
)
|
||||||
|
|||||||
@@ -19,12 +19,12 @@ import (
|
|||||||
|
|
||||||
"github.com/opencontainers/runtime-spec/specs-go"
|
"github.com/opencontainers/runtime-spec/specs-go"
|
||||||
|
|
||||||
ktu "github.com/kata-containers/runtime/pkg/katatestutils"
|
ktu "github.com/kata-containers/kata-containers/src/runtime/pkg/katatestutils"
|
||||||
"github.com/kata-containers/runtime/pkg/katautils"
|
"github.com/kata-containers/kata-containers/src/runtime/pkg/katautils"
|
||||||
vc "github.com/kata-containers/runtime/virtcontainers"
|
vc "github.com/kata-containers/kata-containers/src/runtime/virtcontainers"
|
||||||
"github.com/kata-containers/runtime/virtcontainers/pkg/compatoci"
|
"github.com/kata-containers/kata-containers/src/runtime/virtcontainers/pkg/compatoci"
|
||||||
"github.com/kata-containers/runtime/virtcontainers/pkg/oci"
|
"github.com/kata-containers/kata-containers/src/runtime/virtcontainers/pkg/oci"
|
||||||
"github.com/kata-containers/runtime/virtcontainers/pkg/vcmock"
|
"github.com/kata-containers/kata-containers/src/runtime/virtcontainers/pkg/vcmock"
|
||||||
)
|
)
|
||||||
|
|
||||||
const (
|
const (
|
||||||
|
|||||||
@@ -6,9 +6,11 @@ require (
|
|||||||
github.com/BurntSushi/toml v0.3.1
|
github.com/BurntSushi/toml v0.3.1
|
||||||
github.com/blang/semver v0.0.0-20190414102917-ba2c2ddd8906
|
github.com/blang/semver v0.0.0-20190414102917-ba2c2ddd8906
|
||||||
github.com/cilium/ebpf v0.0.0-20200421083123-d05ecd062fb1 // indirect
|
github.com/cilium/ebpf v0.0.0-20200421083123-d05ecd062fb1 // indirect
|
||||||
|
github.com/codahale/hdrhistogram v0.0.0-20161010025455-3a0bb77429bd // indirect
|
||||||
github.com/containerd/cgroups v0.0.0-20190717030353-c4b9ac5c7601
|
github.com/containerd/cgroups v0.0.0-20190717030353-c4b9ac5c7601
|
||||||
github.com/containerd/console v0.0.0-20191206165004-02ecf6a7291e
|
github.com/containerd/console v0.0.0-20191206165004-02ecf6a7291e
|
||||||
github.com/containerd/containerd v1.2.1-0.20181210191522-f05672357f56
|
github.com/containerd/containerd v1.2.1-0.20181210191522-f05672357f56
|
||||||
|
github.com/containerd/continuity v0.0.0-20200413184840-d3ef23f19fbb // indirect
|
||||||
github.com/containerd/cri-containerd v1.11.1-0.20190125013620-4dd6735020f5
|
github.com/containerd/cri-containerd v1.11.1-0.20190125013620-4dd6735020f5
|
||||||
github.com/containerd/fifo v0.0.0-20190226154929-a9fb20d87448
|
github.com/containerd/fifo v0.0.0-20190226154929-a9fb20d87448
|
||||||
github.com/containerd/go-runc v0.0.0-20200220073739-7016d3ce2328 // indirect
|
github.com/containerd/go-runc v0.0.0-20200220073739-7016d3ce2328 // indirect
|
||||||
@@ -30,10 +32,8 @@ require (
|
|||||||
github.com/hashicorp/yamux v0.0.0-20190923154419-df201c70410d // indirect
|
github.com/hashicorp/yamux v0.0.0-20190923154419-df201c70410d // indirect
|
||||||
github.com/intel/govmm v0.0.0-20200304142514-e969afbec52c
|
github.com/intel/govmm v0.0.0-20200304142514-e969afbec52c
|
||||||
github.com/kata-containers/agent v0.0.0-20200220202609-d26a505efd33
|
github.com/kata-containers/agent v0.0.0-20200220202609-d26a505efd33
|
||||||
github.com/kata-containers/runtime v0.0.0-00010101000000-000000000000
|
|
||||||
github.com/mdlayher/vsock v0.0.0-20191108225356-d9c65923cb8f // indirect
|
github.com/mdlayher/vsock v0.0.0-20191108225356-d9c65923cb8f // indirect
|
||||||
github.com/mitchellh/mapstructure v1.1.2
|
github.com/mitchellh/mapstructure v1.1.2
|
||||||
github.com/opencontainers/go-digest v1.0.0-rc1 // indirect
|
|
||||||
github.com/opencontainers/runc v1.0.0-rc9.0.20200102164712-2b52db75279c
|
github.com/opencontainers/runc v1.0.0-rc9.0.20200102164712-2b52db75279c
|
||||||
github.com/opencontainers/runtime-spec v1.0.2-0.20190408193819-a1b50f621a48
|
github.com/opencontainers/runtime-spec v1.0.2-0.20190408193819-a1b50f621a48
|
||||||
github.com/opencontainers/selinux v1.4.0
|
github.com/opencontainers/selinux v1.4.0
|
||||||
@@ -43,6 +43,7 @@ require (
|
|||||||
github.com/safchain/ethtool v0.0.0-20190326074333-42ed695e3de8
|
github.com/safchain/ethtool v0.0.0-20190326074333-42ed695e3de8
|
||||||
github.com/seccomp/libseccomp-golang v0.9.1 // indirect
|
github.com/seccomp/libseccomp-golang v0.9.1 // indirect
|
||||||
github.com/sirupsen/logrus v1.4.2
|
github.com/sirupsen/logrus v1.4.2
|
||||||
|
github.com/smartystreets/goconvey v1.6.4 // indirect
|
||||||
github.com/stretchr/testify v1.4.0
|
github.com/stretchr/testify v1.4.0
|
||||||
github.com/uber/jaeger-client-go v0.0.0-20200422204034-e1cd868603cb
|
github.com/uber/jaeger-client-go v0.0.0-20200422204034-e1cd868603cb
|
||||||
github.com/uber/jaeger-lib v2.2.0+incompatible // indirect
|
github.com/uber/jaeger-lib v2.2.0+incompatible // indirect
|
||||||
@@ -54,9 +55,10 @@ require (
|
|||||||
golang.org/x/oauth2 v0.0.0-20191122200657-5d9234df094c
|
golang.org/x/oauth2 v0.0.0-20191122200657-5d9234df094c
|
||||||
golang.org/x/sys v0.0.0-20200420163511-1957bb5e6d1f
|
golang.org/x/sys v0.0.0-20200420163511-1957bb5e6d1f
|
||||||
google.golang.org/grpc v1.19.0
|
google.golang.org/grpc v1.19.0
|
||||||
|
gotest.tools v2.2.0+incompatible // indirect
|
||||||
)
|
)
|
||||||
|
|
||||||
replace (
|
replace (
|
||||||
github.com/kata-containers/runtime => ./
|
|
||||||
github.com/uber-go/atomic => go.uber.org/atomic v1.5.1
|
github.com/uber-go/atomic => go.uber.org/atomic v1.5.1
|
||||||
|
gotest.tools/v3 => gotest.tools v2.2.0+incompatible
|
||||||
)
|
)
|
||||||
|
|||||||
@@ -112,7 +112,6 @@ github.com/golang/mock v1.1.1/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfb
|
|||||||
github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
|
github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
|
||||||
github.com/golang/protobuf v1.3.1 h1:YF8+flBXS5eO826T4nzqPrxfhQThhXl0YzfuUPu4SBg=
|
github.com/golang/protobuf v1.3.1 h1:YF8+flBXS5eO826T4nzqPrxfhQThhXl0YzfuUPu4SBg=
|
||||||
github.com/golang/protobuf v1.3.1/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
|
github.com/golang/protobuf v1.3.1/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
|
||||||
github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5aqRK0M=
|
|
||||||
github.com/google/go-cmp v0.3.1 h1:Xye71clBPdm5HgqGwUkwhbynsUJZhDbS20FvLhQ2izg=
|
github.com/google/go-cmp v0.3.1 h1:Xye71clBPdm5HgqGwUkwhbynsUJZhDbS20FvLhQ2izg=
|
||||||
github.com/google/go-cmp v0.3.1/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU=
|
github.com/google/go-cmp v0.3.1/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU=
|
||||||
github.com/google/uuid v1.0.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
|
github.com/google/uuid v1.0.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
|
||||||
@@ -177,7 +176,6 @@ github.com/opentracing/opentracing-go v1.1.0 h1:pWlfV3Bxv7k65HYwkikxat0+s3pV4bsq
|
|||||||
github.com/opentracing/opentracing-go v1.1.0/go.mod h1:UkNAQd3GIcIGf0SeVgPpRdFStlNbqXla1AfSYxPUl2o=
|
github.com/opentracing/opentracing-go v1.1.0/go.mod h1:UkNAQd3GIcIGf0SeVgPpRdFStlNbqXla1AfSYxPUl2o=
|
||||||
github.com/pborman/uuid v1.2.0 h1:J7Q5mO4ysT1dv8hyrUGHb9+ooztCXu1D8MY8DZYsu3g=
|
github.com/pborman/uuid v1.2.0 h1:J7Q5mO4ysT1dv8hyrUGHb9+ooztCXu1D8MY8DZYsu3g=
|
||||||
github.com/pborman/uuid v1.2.0/go.mod h1:X/NO0urCmaxf9VXbdlT7C2Yzkj2IKimNn4k+gtPdI/k=
|
github.com/pborman/uuid v1.2.0/go.mod h1:X/NO0urCmaxf9VXbdlT7C2Yzkj2IKimNn4k+gtPdI/k=
|
||||||
github.com/pkg/errors v0.8.0/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
|
|
||||||
github.com/pkg/errors v0.8.1-0.20171018195549-f15c970de5b7/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
|
github.com/pkg/errors v0.8.1-0.20171018195549-f15c970de5b7/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
|
||||||
github.com/pkg/errors v0.8.1 h1:iURUrRGxPUNPdy5/HRSm+Yj6okJ6UtLINN0Q9M4+h3I=
|
github.com/pkg/errors v0.8.1 h1:iURUrRGxPUNPdy5/HRSm+Yj6okJ6UtLINN0Q9M4+h3I=
|
||||||
github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
|
github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
|
||||||
@@ -199,11 +197,9 @@ github.com/smartystreets/goconvey v1.6.4 h1:fv0U8FUIMPNf1L9lnHLvLhgicrIVChEkdzIK
|
|||||||
github.com/smartystreets/goconvey v1.6.4/go.mod h1:syvi0/a8iFYH4r/RixwvyeAJjdLS9QV7WQ/tjFTllLA=
|
github.com/smartystreets/goconvey v1.6.4/go.mod h1:syvi0/a8iFYH4r/RixwvyeAJjdLS9QV7WQ/tjFTllLA=
|
||||||
github.com/spf13/cobra v0.0.2-0.20171109065643-2da4a54c5cee/go.mod h1:1l0Ry5zgKvJasoi3XT1TypsSe7PqH0Sj9dhYf7v3XqQ=
|
github.com/spf13/cobra v0.0.2-0.20171109065643-2da4a54c5cee/go.mod h1:1l0Ry5zgKvJasoi3XT1TypsSe7PqH0Sj9dhYf7v3XqQ=
|
||||||
github.com/spf13/pflag v1.0.1-0.20171106142849-4c012f6dcd95/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4=
|
github.com/spf13/pflag v1.0.1-0.20171106142849-4c012f6dcd95/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4=
|
||||||
github.com/spf13/pflag v1.0.3/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4=
|
|
||||||
github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
|
github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
|
||||||
github.com/stretchr/objx v0.1.1/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
|
github.com/stretchr/objx v0.1.1/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
|
||||||
github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs=
|
github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs=
|
||||||
github.com/stretchr/testify v1.3.0 h1:TivCn/peBQ7UY8ooIcPgZFpTNSz0Q2U6UrFlUfqbe0Q=
|
|
||||||
github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI=
|
github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI=
|
||||||
github.com/stretchr/testify v1.4.0 h1:2E4SXV/wtOkTonXsotYi4li6zVWxYlZuYNCXe9XRJyk=
|
github.com/stretchr/testify v1.4.0 h1:2E4SXV/wtOkTonXsotYi4li6zVWxYlZuYNCXe9XRJyk=
|
||||||
github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4=
|
github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4=
|
||||||
@@ -234,7 +230,6 @@ golang.org/x/net v0.0.0-20181011144130-49bb7cea24b1/go.mod h1:mL1N/T3taQHkDXs73r
|
|||||||
golang.org/x/net v0.0.0-20181201002055-351d144fa1fc/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
|
golang.org/x/net v0.0.0-20181201002055-351d144fa1fc/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
|
||||||
golang.org/x/net v0.0.0-20190108225652-1e06a53dbb7e/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
|
golang.org/x/net v0.0.0-20190108225652-1e06a53dbb7e/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
|
||||||
golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
|
golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
|
||||||
golang.org/x/net v0.0.0-20190620200207-3b0461eec859 h1:R/3boaszxrf1GEUWTVDzSKVwLmSJpwZ1yqXm8j0v2QI=
|
|
||||||
golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
|
golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
|
||||||
golang.org/x/net v0.0.0-20191108221443-4ba9e2ef068c h1:SRpq/kuj/xNci/RdvEs+RSvpfxqvLAzTKuKGlzoGdZQ=
|
golang.org/x/net v0.0.0-20191108221443-4ba9e2ef068c h1:SRpq/kuj/xNci/RdvEs+RSvpfxqvLAzTKuKGlzoGdZQ=
|
||||||
golang.org/x/net v0.0.0-20191108221443-4ba9e2ef068c/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
|
golang.org/x/net v0.0.0-20191108221443-4ba9e2ef068c/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
|
||||||
@@ -253,13 +248,11 @@ golang.org/x/sys v0.0.0-20191105231009-c1f44814a5cd/go.mod h1:h1NjWce9XRLGQEsW7w
|
|||||||
golang.org/x/sys v0.0.0-20191115151921-52ab43148777/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
golang.org/x/sys v0.0.0-20191115151921-52ab43148777/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||||
golang.org/x/sys v0.0.0-20191120155948-bd437916bb0e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
golang.org/x/sys v0.0.0-20191120155948-bd437916bb0e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||||
golang.org/x/sys v0.0.0-20191210023423-ac6580df4449/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
golang.org/x/sys v0.0.0-20191210023423-ac6580df4449/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||||
golang.org/x/sys v0.0.0-20200124204421-9fbb57f87de9 h1:1/DFK4b7JH8DmkqhUk48onnSfrPzImPoVxuomtbT2nk=
|
|
||||||
golang.org/x/sys v0.0.0-20200124204421-9fbb57f87de9/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
golang.org/x/sys v0.0.0-20200124204421-9fbb57f87de9/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||||
golang.org/x/sys v0.0.0-20200420163511-1957bb5e6d1f h1:gWF768j/LaZugp8dyS4UwsslYCYz9XgFxvlgsn0n9H8=
|
golang.org/x/sys v0.0.0-20200420163511-1957bb5e6d1f h1:gWF768j/LaZugp8dyS4UwsslYCYz9XgFxvlgsn0n9H8=
|
||||||
golang.org/x/sys v0.0.0-20200420163511-1957bb5e6d1f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
golang.org/x/sys v0.0.0-20200420163511-1957bb5e6d1f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||||
golang.org/x/text v0.3.0 h1:g61tztE5qeGQ89tm6NTjjM9VPIm088od1l6aSorWRWg=
|
golang.org/x/text v0.3.0 h1:g61tztE5qeGQ89tm6NTjjM9VPIm088od1l6aSorWRWg=
|
||||||
golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
|
golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
|
||||||
golang.org/x/tools v0.0.0-20180810170437-e96c4e24768d/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
|
|
||||||
golang.org/x/tools v0.0.0-20190114222345-bf090417da8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
|
golang.org/x/tools v0.0.0-20190114222345-bf090417da8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
|
||||||
golang.org/x/tools v0.0.0-20190311212946-11955173bddd/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs=
|
golang.org/x/tools v0.0.0-20190311212946-11955173bddd/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs=
|
||||||
golang.org/x/tools v0.0.0-20190328211700-ab21143f2384/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs=
|
golang.org/x/tools v0.0.0-20190328211700-ab21143f2384/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs=
|
||||||
@@ -288,6 +281,6 @@ gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7/go.mod h1:dt/ZhP58zS4L8KSrWD
|
|||||||
gopkg.in/yaml.v2 v2.2.1/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
|
gopkg.in/yaml.v2 v2.2.1/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
|
||||||
gopkg.in/yaml.v2 v2.2.2 h1:ZCJp+EgiOT7lHqUV2J862kp8Qj64Jo6az82+3Td9dZw=
|
gopkg.in/yaml.v2 v2.2.2 h1:ZCJp+EgiOT7lHqUV2J862kp8Qj64Jo6az82+3Td9dZw=
|
||||||
gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
|
gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
|
||||||
gotest.tools v2.3.0+incompatible h1:oTCKjb7ZuVfn37AQodk7UysjQQL/S5Dep3pzi59u1NQ=
|
gotest.tools v2.2.0+incompatible h1:VsBPFP1AI068pPrMxtb/S8Zkgf9xEmTLJjfM+P5UIEo=
|
||||||
gotest.tools v2.3.0+incompatible/go.mod h1:R//lfYlUuTOTfblYI3lGoAAAebUdzjvbmQsuB7Ykd90=
|
gotest.tools v2.2.0+incompatible/go.mod h1:DsYFclhRJ6vuDpmuTbkuFWG+y2sxOXAzmJt81HFBacw=
|
||||||
honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
|
honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
|
||||||
|
|||||||
@@ -21,8 +21,8 @@ import (
|
|||||||
"syscall"
|
"syscall"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
"github.com/kata-containers/runtime/pkg/signals"
|
"github.com/kata-containers/kata-containers/src/runtime/pkg/signals"
|
||||||
vcTypes "github.com/kata-containers/runtime/virtcontainers/pkg/types"
|
vcTypes "github.com/kata-containers/kata-containers/src/runtime/virtcontainers/pkg/types"
|
||||||
"github.com/sirupsen/logrus"
|
"github.com/sirupsen/logrus"
|
||||||
lSyslog "github.com/sirupsen/logrus/hooks/syslog"
|
lSyslog "github.com/sirupsen/logrus/hooks/syslog"
|
||||||
"github.com/vishvananda/netlink"
|
"github.com/vishvananda/netlink"
|
||||||
|
|||||||
@@ -17,8 +17,8 @@ import (
|
|||||||
"runtime"
|
"runtime"
|
||||||
"testing"
|
"testing"
|
||||||
|
|
||||||
ktu "github.com/kata-containers/runtime/pkg/katatestutils"
|
ktu "github.com/kata-containers/kata-containers/src/runtime/pkg/katatestutils"
|
||||||
vcTypes "github.com/kata-containers/runtime/virtcontainers/pkg/types"
|
vcTypes "github.com/kata-containers/kata-containers/src/runtime/virtcontainers/pkg/types"
|
||||||
"github.com/sirupsen/logrus"
|
"github.com/sirupsen/logrus"
|
||||||
"github.com/stretchr/testify/assert"
|
"github.com/stretchr/testify/assert"
|
||||||
"github.com/vishvananda/netlink"
|
"github.com/vishvananda/netlink"
|
||||||
|
|||||||
@@ -14,11 +14,11 @@ import (
|
|||||||
"strings"
|
"strings"
|
||||||
|
|
||||||
"github.com/BurntSushi/toml"
|
"github.com/BurntSushi/toml"
|
||||||
vc "github.com/kata-containers/runtime/virtcontainers"
|
vc "github.com/kata-containers/kata-containers/src/runtime/virtcontainers"
|
||||||
"github.com/kata-containers/runtime/virtcontainers/device/config"
|
"github.com/kata-containers/kata-containers/src/runtime/virtcontainers/device/config"
|
||||||
exp "github.com/kata-containers/runtime/virtcontainers/experimental"
|
exp "github.com/kata-containers/kata-containers/src/runtime/virtcontainers/experimental"
|
||||||
"github.com/kata-containers/runtime/virtcontainers/pkg/oci"
|
"github.com/kata-containers/kata-containers/src/runtime/virtcontainers/pkg/oci"
|
||||||
"github.com/kata-containers/runtime/virtcontainers/utils"
|
"github.com/kata-containers/kata-containers/src/runtime/virtcontainers/utils"
|
||||||
"github.com/sirupsen/logrus"
|
"github.com/sirupsen/logrus"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|||||||
@@ -19,10 +19,10 @@ import (
|
|||||||
"syscall"
|
"syscall"
|
||||||
"testing"
|
"testing"
|
||||||
|
|
||||||
ktu "github.com/kata-containers/runtime/pkg/katatestutils"
|
ktu "github.com/kata-containers/kata-containers/src/runtime/pkg/katatestutils"
|
||||||
vc "github.com/kata-containers/runtime/virtcontainers"
|
vc "github.com/kata-containers/kata-containers/src/runtime/virtcontainers"
|
||||||
"github.com/kata-containers/runtime/virtcontainers/pkg/oci"
|
"github.com/kata-containers/kata-containers/src/runtime/virtcontainers/pkg/oci"
|
||||||
"github.com/kata-containers/runtime/virtcontainers/utils"
|
"github.com/kata-containers/kata-containers/src/runtime/virtcontainers/utils"
|
||||||
"github.com/stretchr/testify/assert"
|
"github.com/stretchr/testify/assert"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|||||||
@@ -13,9 +13,9 @@ import (
|
|||||||
"strconv"
|
"strconv"
|
||||||
"strings"
|
"strings"
|
||||||
|
|
||||||
vc "github.com/kata-containers/runtime/virtcontainers"
|
vc "github.com/kata-containers/kata-containers/src/runtime/virtcontainers"
|
||||||
vf "github.com/kata-containers/runtime/virtcontainers/factory"
|
vf "github.com/kata-containers/kata-containers/src/runtime/virtcontainers/factory"
|
||||||
"github.com/kata-containers/runtime/virtcontainers/pkg/oci"
|
"github.com/kata-containers/kata-containers/src/runtime/virtcontainers/pkg/oci"
|
||||||
specs "github.com/opencontainers/runtime-spec/specs-go"
|
specs "github.com/opencontainers/runtime-spec/specs-go"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|||||||
@@ -19,11 +19,11 @@ import (
|
|||||||
"syscall"
|
"syscall"
|
||||||
"testing"
|
"testing"
|
||||||
|
|
||||||
ktu "github.com/kata-containers/runtime/pkg/katatestutils"
|
ktu "github.com/kata-containers/kata-containers/src/runtime/pkg/katatestutils"
|
||||||
vc "github.com/kata-containers/runtime/virtcontainers"
|
vc "github.com/kata-containers/kata-containers/src/runtime/virtcontainers"
|
||||||
"github.com/kata-containers/runtime/virtcontainers/pkg/compatoci"
|
"github.com/kata-containers/kata-containers/src/runtime/virtcontainers/pkg/compatoci"
|
||||||
"github.com/kata-containers/runtime/virtcontainers/pkg/oci"
|
"github.com/kata-containers/kata-containers/src/runtime/virtcontainers/pkg/oci"
|
||||||
"github.com/kata-containers/runtime/virtcontainers/pkg/vcmock"
|
"github.com/kata-containers/kata-containers/src/runtime/virtcontainers/pkg/vcmock"
|
||||||
"github.com/opencontainers/runtime-spec/specs-go"
|
"github.com/opencontainers/runtime-spec/specs-go"
|
||||||
"github.com/stretchr/testify/assert"
|
"github.com/stretchr/testify/assert"
|
||||||
)
|
)
|
||||||
|
|||||||
@@ -11,8 +11,8 @@ import (
|
|||||||
"os"
|
"os"
|
||||||
"testing"
|
"testing"
|
||||||
|
|
||||||
ktu "github.com/kata-containers/runtime/pkg/katatestutils"
|
ktu "github.com/kata-containers/kata-containers/src/runtime/pkg/katatestutils"
|
||||||
. "github.com/kata-containers/runtime/virtcontainers/pkg/mock"
|
. "github.com/kata-containers/kata-containers/src/runtime/virtcontainers/pkg/mock"
|
||||||
"github.com/opencontainers/runtime-spec/specs-go"
|
"github.com/opencontainers/runtime-spec/specs-go"
|
||||||
"github.com/stretchr/testify/assert"
|
"github.com/stretchr/testify/assert"
|
||||||
)
|
)
|
||||||
|
|||||||
@@ -16,8 +16,8 @@ import (
|
|||||||
|
|
||||||
"github.com/containernetworking/plugins/pkg/ns"
|
"github.com/containernetworking/plugins/pkg/ns"
|
||||||
"github.com/containernetworking/plugins/pkg/testutils"
|
"github.com/containernetworking/plugins/pkg/testutils"
|
||||||
vc "github.com/kata-containers/runtime/virtcontainers"
|
vc "github.com/kata-containers/kata-containers/src/runtime/virtcontainers"
|
||||||
"github.com/kata-containers/runtime/virtcontainers/pkg/rootless"
|
"github.com/kata-containers/kata-containers/src/runtime/virtcontainers/pkg/rootless"
|
||||||
"golang.org/x/sys/unix"
|
"golang.org/x/sys/unix"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|||||||
@@ -15,8 +15,8 @@ import (
|
|||||||
|
|
||||||
"github.com/containernetworking/plugins/pkg/ns"
|
"github.com/containernetworking/plugins/pkg/ns"
|
||||||
"github.com/containernetworking/plugins/pkg/testutils"
|
"github.com/containernetworking/plugins/pkg/testutils"
|
||||||
ktu "github.com/kata-containers/runtime/pkg/katatestutils"
|
ktu "github.com/kata-containers/kata-containers/src/runtime/pkg/katatestutils"
|
||||||
vc "github.com/kata-containers/runtime/virtcontainers"
|
vc "github.com/kata-containers/kata-containers/src/runtime/virtcontainers"
|
||||||
"github.com/stretchr/testify/assert"
|
"github.com/stretchr/testify/assert"
|
||||||
"golang.org/x/sys/unix"
|
"golang.org/x/sys/unix"
|
||||||
)
|
)
|
||||||
|
|||||||
@@ -13,7 +13,7 @@ import (
|
|||||||
"path/filepath"
|
"path/filepath"
|
||||||
"strings"
|
"strings"
|
||||||
|
|
||||||
"github.com/kata-containers/runtime/virtcontainers/pkg/rootless"
|
"github.com/kata-containers/kata-containers/src/runtime/virtcontainers/pkg/rootless"
|
||||||
)
|
)
|
||||||
|
|
||||||
const ctrsMappingDirMode = os.FileMode(0750)
|
const ctrsMappingDirMode = os.FileMode(0750)
|
||||||
|
|||||||
@@ -13,7 +13,7 @@ import (
|
|||||||
"path/filepath"
|
"path/filepath"
|
||||||
"testing"
|
"testing"
|
||||||
|
|
||||||
"github.com/kata-containers/runtime/virtcontainers/pkg/rootless"
|
"github.com/kata-containers/kata-containers/src/runtime/virtcontainers/pkg/rootless"
|
||||||
"github.com/stretchr/testify/assert"
|
"github.com/stretchr/testify/assert"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|||||||
@@ -18,7 +18,7 @@ import (
|
|||||||
"syscall"
|
"syscall"
|
||||||
"testing"
|
"testing"
|
||||||
|
|
||||||
"github.com/kata-containers/runtime/virtcontainers/pkg/compatoci"
|
"github.com/kata-containers/kata-containers/src/runtime/virtcontainers/pkg/compatoci"
|
||||||
"github.com/stretchr/testify/assert"
|
"github.com/stretchr/testify/assert"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|||||||
201
src/runtime/vendor/github.com/kata-containers/runtime/LICENSE
generated
vendored
201
src/runtime/vendor/github.com/kata-containers/runtime/LICENSE
generated
vendored
@@ -1,201 +0,0 @@
|
|||||||
Apache License
|
|
||||||
Version 2.0, January 2004
|
|
||||||
http://www.apache.org/licenses/
|
|
||||||
|
|
||||||
TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
|
|
||||||
|
|
||||||
1. Definitions.
|
|
||||||
|
|
||||||
"License" shall mean the terms and conditions for use, reproduction,
|
|
||||||
and distribution as defined by Sections 1 through 9 of this document.
|
|
||||||
|
|
||||||
"Licensor" shall mean the copyright owner or entity authorized by
|
|
||||||
the copyright owner that is granting the License.
|
|
||||||
|
|
||||||
"Legal Entity" shall mean the union of the acting entity and all
|
|
||||||
other entities that control, are controlled by, or are under common
|
|
||||||
control with that entity. For the purposes of this definition,
|
|
||||||
"control" means (i) the power, direct or indirect, to cause the
|
|
||||||
direction or management of such entity, whether by contract or
|
|
||||||
otherwise, or (ii) ownership of fifty percent (50%) or more of the
|
|
||||||
outstanding shares, or (iii) beneficial ownership of such entity.
|
|
||||||
|
|
||||||
"You" (or "Your") shall mean an individual or Legal Entity
|
|
||||||
exercising permissions granted by this License.
|
|
||||||
|
|
||||||
"Source" form shall mean the preferred form for making modifications,
|
|
||||||
including but not limited to software source code, documentation
|
|
||||||
source, and configuration files.
|
|
||||||
|
|
||||||
"Object" form shall mean any form resulting from mechanical
|
|
||||||
transformation or translation of a Source form, including but
|
|
||||||
not limited to compiled object code, generated documentation,
|
|
||||||
and conversions to other media types.
|
|
||||||
|
|
||||||
"Work" shall mean the work of authorship, whether in Source or
|
|
||||||
Object form, made available under the License, as indicated by a
|
|
||||||
copyright notice that is included in or attached to the work
|
|
||||||
(an example is provided in the Appendix below).
|
|
||||||
|
|
||||||
"Derivative Works" shall mean any work, whether in Source or Object
|
|
||||||
form, that is based on (or derived from) the Work and for which the
|
|
||||||
editorial revisions, annotations, elaborations, or other modifications
|
|
||||||
represent, as a whole, an original work of authorship. For the purposes
|
|
||||||
of this License, Derivative Works shall not include works that remain
|
|
||||||
separable from, or merely link (or bind by name) to the interfaces of,
|
|
||||||
the Work and Derivative Works thereof.
|
|
||||||
|
|
||||||
"Contribution" shall mean any work of authorship, including
|
|
||||||
the original version of the Work and any modifications or additions
|
|
||||||
to that Work or Derivative Works thereof, that is intentionally
|
|
||||||
submitted to Licensor for inclusion in the Work by the copyright owner
|
|
||||||
or by an individual or Legal Entity authorized to submit on behalf of
|
|
||||||
the copyright owner. For the purposes of this definition, "submitted"
|
|
||||||
means any form of electronic, verbal, or written communication sent
|
|
||||||
to the Licensor or its representatives, including but not limited to
|
|
||||||
communication on electronic mailing lists, source code control systems,
|
|
||||||
and issue tracking systems that are managed by, or on behalf of, the
|
|
||||||
Licensor for the purpose of discussing and improving the Work, but
|
|
||||||
excluding communication that is conspicuously marked or otherwise
|
|
||||||
designated in writing by the copyright owner as "Not a Contribution."
|
|
||||||
|
|
||||||
"Contributor" shall mean Licensor and any individual or Legal Entity
|
|
||||||
on behalf of whom a Contribution has been received by Licensor and
|
|
||||||
subsequently incorporated within the Work.
|
|
||||||
|
|
||||||
2. Grant of Copyright License. Subject to the terms and conditions of
|
|
||||||
this License, each Contributor hereby grants to You a perpetual,
|
|
||||||
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
|
|
||||||
copyright license to reproduce, prepare Derivative Works of,
|
|
||||||
publicly display, publicly perform, sublicense, and distribute the
|
|
||||||
Work and such Derivative Works in Source or Object form.
|
|
||||||
|
|
||||||
3. Grant of Patent License. Subject to the terms and conditions of
|
|
||||||
this License, each Contributor hereby grants to You a perpetual,
|
|
||||||
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
|
|
||||||
(except as stated in this section) patent license to make, have made,
|
|
||||||
use, offer to sell, sell, import, and otherwise transfer the Work,
|
|
||||||
where such license applies only to those patent claims licensable
|
|
||||||
by such Contributor that are necessarily infringed by their
|
|
||||||
Contribution(s) alone or by combination of their Contribution(s)
|
|
||||||
with the Work to which such Contribution(s) was submitted. If You
|
|
||||||
institute patent litigation against any entity (including a
|
|
||||||
cross-claim or counterclaim in a lawsuit) alleging that the Work
|
|
||||||
or a Contribution incorporated within the Work constitutes direct
|
|
||||||
or contributory patent infringement, then any patent licenses
|
|
||||||
granted to You under this License for that Work shall terminate
|
|
||||||
as of the date such litigation is filed.
|
|
||||||
|
|
||||||
4. Redistribution. You may reproduce and distribute copies of the
|
|
||||||
Work or Derivative Works thereof in any medium, with or without
|
|
||||||
modifications, and in Source or Object form, provided that You
|
|
||||||
meet the following conditions:
|
|
||||||
|
|
||||||
(a) You must give any other recipients of the Work or
|
|
||||||
Derivative Works a copy of this License; and
|
|
||||||
|
|
||||||
(b) You must cause any modified files to carry prominent notices
|
|
||||||
stating that You changed the files; and
|
|
||||||
|
|
||||||
(c) You must retain, in the Source form of any Derivative Works
|
|
||||||
that You distribute, all copyright, patent, trademark, and
|
|
||||||
attribution notices from the Source form of the Work,
|
|
||||||
excluding those notices that do not pertain to any part of
|
|
||||||
the Derivative Works; and
|
|
||||||
|
|
||||||
(d) If the Work includes a "NOTICE" text file as part of its
|
|
||||||
distribution, then any Derivative Works that You distribute must
|
|
||||||
include a readable copy of the attribution notices contained
|
|
||||||
within such NOTICE file, excluding those notices that do not
|
|
||||||
pertain to any part of the Derivative Works, in at least one
|
|
||||||
of the following places: within a NOTICE text file distributed
|
|
||||||
as part of the Derivative Works; within the Source form or
|
|
||||||
documentation, if provided along with the Derivative Works; or,
|
|
||||||
within a display generated by the Derivative Works, if and
|
|
||||||
wherever such third-party notices normally appear. The contents
|
|
||||||
of the NOTICE file are for informational purposes only and
|
|
||||||
do not modify the License. You may add Your own attribution
|
|
||||||
notices within Derivative Works that You distribute, alongside
|
|
||||||
or as an addendum to the NOTICE text from the Work, provided
|
|
||||||
that such additional attribution notices cannot be construed
|
|
||||||
as modifying the License.
|
|
||||||
|
|
||||||
You may add Your own copyright statement to Your modifications and
|
|
||||||
may provide additional or different license terms and conditions
|
|
||||||
for use, reproduction, or distribution of Your modifications, or
|
|
||||||
for any such Derivative Works as a whole, provided Your use,
|
|
||||||
reproduction, and distribution of the Work otherwise complies with
|
|
||||||
the conditions stated in this License.
|
|
||||||
|
|
||||||
5. Submission of Contributions. Unless You explicitly state otherwise,
|
|
||||||
any Contribution intentionally submitted for inclusion in the Work
|
|
||||||
by You to the Licensor shall be under the terms and conditions of
|
|
||||||
this License, without any additional terms or conditions.
|
|
||||||
Notwithstanding the above, nothing herein shall supersede or modify
|
|
||||||
the terms of any separate license agreement you may have executed
|
|
||||||
with Licensor regarding such Contributions.
|
|
||||||
|
|
||||||
6. Trademarks. This License does not grant permission to use the trade
|
|
||||||
names, trademarks, service marks, or product names of the Licensor,
|
|
||||||
except as required for reasonable and customary use in describing the
|
|
||||||
origin of the Work and reproducing the content of the NOTICE file.
|
|
||||||
|
|
||||||
7. Disclaimer of Warranty. Unless required by applicable law or
|
|
||||||
agreed to in writing, Licensor provides the Work (and each
|
|
||||||
Contributor provides its Contributions) on an "AS IS" BASIS,
|
|
||||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
|
|
||||||
implied, including, without limitation, any warranties or conditions
|
|
||||||
of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
|
|
||||||
PARTICULAR PURPOSE. You are solely responsible for determining the
|
|
||||||
appropriateness of using or redistributing the Work and assume any
|
|
||||||
risks associated with Your exercise of permissions under this License.
|
|
||||||
|
|
||||||
8. Limitation of Liability. In no event and under no legal theory,
|
|
||||||
whether in tort (including negligence), contract, or otherwise,
|
|
||||||
unless required by applicable law (such as deliberate and grossly
|
|
||||||
negligent acts) or agreed to in writing, shall any Contributor be
|
|
||||||
liable to You for damages, including any direct, indirect, special,
|
|
||||||
incidental, or consequential damages of any character arising as a
|
|
||||||
result of this License or out of the use or inability to use the
|
|
||||||
Work (including but not limited to damages for loss of goodwill,
|
|
||||||
work stoppage, computer failure or malfunction, or any and all
|
|
||||||
other commercial damages or losses), even if such Contributor
|
|
||||||
has been advised of the possibility of such damages.
|
|
||||||
|
|
||||||
9. Accepting Warranty or Additional Liability. While redistributing
|
|
||||||
the Work or Derivative Works thereof, You may choose to offer,
|
|
||||||
and charge a fee for, acceptance of support, warranty, indemnity,
|
|
||||||
or other liability obligations and/or rights consistent with this
|
|
||||||
License. However, in accepting such obligations, You may act only
|
|
||||||
on Your own behalf and on Your sole responsibility, not on behalf
|
|
||||||
of any other Contributor, and only if You agree to indemnify,
|
|
||||||
defend, and hold each Contributor harmless for any liability
|
|
||||||
incurred by, or claims asserted against, such Contributor by reason
|
|
||||||
of your accepting any such warranty or additional liability.
|
|
||||||
|
|
||||||
END OF TERMS AND CONDITIONS
|
|
||||||
|
|
||||||
APPENDIX: How to apply the Apache License to your work.
|
|
||||||
|
|
||||||
To apply the Apache License to your work, attach the following
|
|
||||||
boilerplate notice, with the fields enclosed by brackets "[]"
|
|
||||||
replaced with your own identifying information. (Don't include
|
|
||||||
the brackets!) The text should be enclosed in the appropriate
|
|
||||||
comment syntax for the file format. We also recommend that a
|
|
||||||
file or class name and description of purpose be included on the
|
|
||||||
same "printed page" as the copyright notice for easier
|
|
||||||
identification within third-party archives.
|
|
||||||
|
|
||||||
Copyright [yyyy] [name of copyright owner]
|
|
||||||
|
|
||||||
Licensed under the Apache License, Version 2.0 (the "License");
|
|
||||||
you may not use this file except in compliance with the License.
|
|
||||||
You may obtain a copy of the License at
|
|
||||||
|
|
||||||
http://www.apache.org/licenses/LICENSE-2.0
|
|
||||||
|
|
||||||
Unless required by applicable law or agreed to in writing, software
|
|
||||||
distributed under the License is distributed on an "AS IS" BASIS,
|
|
||||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
||||||
See the License for the specific language governing permissions and
|
|
||||||
limitations under the License.
|
|
||||||
66
src/runtime/vendor/github.com/kata-containers/runtime/containerd-shim-v2/container.go
generated
vendored
66
src/runtime/vendor/github.com/kata-containers/runtime/containerd-shim-v2/container.go
generated
vendored
@@ -1,66 +0,0 @@
|
|||||||
// Copyright (c) 2018 HyperHQ Inc.
|
|
||||||
//
|
|
||||||
// SPDX-License-Identifier: Apache-2.0
|
|
||||||
//
|
|
||||||
|
|
||||||
package containerdshim
|
|
||||||
|
|
||||||
import (
|
|
||||||
"time"
|
|
||||||
|
|
||||||
"github.com/containerd/containerd/api/types/task"
|
|
||||||
"github.com/containerd/containerd/errdefs"
|
|
||||||
taskAPI "github.com/containerd/containerd/runtime/v2/task"
|
|
||||||
"github.com/opencontainers/runtime-spec/specs-go"
|
|
||||||
|
|
||||||
vc "github.com/kata-containers/runtime/virtcontainers"
|
|
||||||
)
|
|
||||||
|
|
||||||
type container struct {
|
|
||||||
s *service
|
|
||||||
ttyio *ttyIO
|
|
||||||
spec *specs.Spec
|
|
||||||
exitTime time.Time
|
|
||||||
execs map[string]*exec
|
|
||||||
exitIOch chan struct{}
|
|
||||||
exitCh chan uint32
|
|
||||||
id string
|
|
||||||
stdin string
|
|
||||||
stdout string
|
|
||||||
stderr string
|
|
||||||
bundle string
|
|
||||||
cType vc.ContainerType
|
|
||||||
exit uint32
|
|
||||||
status task.Status
|
|
||||||
terminal bool
|
|
||||||
mounted bool
|
|
||||||
}
|
|
||||||
|
|
||||||
func newContainer(s *service, r *taskAPI.CreateTaskRequest, containerType vc.ContainerType, spec *specs.Spec, mounted bool) (*container, error) {
|
|
||||||
if r == nil {
|
|
||||||
return nil, errdefs.ToGRPCf(errdefs.ErrInvalidArgument, " CreateTaskRequest points to nil")
|
|
||||||
}
|
|
||||||
|
|
||||||
// in order to avoid deferencing a nil pointer in test
|
|
||||||
if spec == nil {
|
|
||||||
spec = &specs.Spec{}
|
|
||||||
}
|
|
||||||
|
|
||||||
c := &container{
|
|
||||||
s: s,
|
|
||||||
spec: spec,
|
|
||||||
id: r.ID,
|
|
||||||
bundle: r.Bundle,
|
|
||||||
stdin: r.Stdin,
|
|
||||||
stdout: r.Stdout,
|
|
||||||
stderr: r.Stderr,
|
|
||||||
terminal: r.Terminal,
|
|
||||||
cType: containerType,
|
|
||||||
execs: make(map[string]*exec),
|
|
||||||
status: task.StatusCreated,
|
|
||||||
exitIOch: make(chan struct{}),
|
|
||||||
exitCh: make(chan uint32, 1),
|
|
||||||
mounted: mounted,
|
|
||||||
}
|
|
||||||
return c, nil
|
|
||||||
}
|
|
||||||
220
src/runtime/vendor/github.com/kata-containers/runtime/containerd-shim-v2/create.go
generated
vendored
220
src/runtime/vendor/github.com/kata-containers/runtime/containerd-shim-v2/create.go
generated
vendored
@@ -1,220 +0,0 @@
|
|||||||
// Copyright (c) 2014,2015,2016 Docker, Inc.
|
|
||||||
// Copyright (c) 2017 Intel Corporation
|
|
||||||
// Copyright (c) 2018 HyperHQ Inc.
|
|
||||||
//
|
|
||||||
// SPDX-License-Identifier: Apache-2.0
|
|
||||||
//
|
|
||||||
|
|
||||||
package containerdshim
|
|
||||||
|
|
||||||
import (
|
|
||||||
"context"
|
|
||||||
"fmt"
|
|
||||||
"os"
|
|
||||||
"path/filepath"
|
|
||||||
|
|
||||||
containerd_types "github.com/containerd/containerd/api/types"
|
|
||||||
"github.com/containerd/containerd/mount"
|
|
||||||
taskAPI "github.com/containerd/containerd/runtime/v2/task"
|
|
||||||
"github.com/containerd/typeurl"
|
|
||||||
"github.com/opencontainers/runtime-spec/specs-go"
|
|
||||||
"github.com/pkg/errors"
|
|
||||||
"github.com/sirupsen/logrus"
|
|
||||||
|
|
||||||
// only register the proto type
|
|
||||||
_ "github.com/containerd/containerd/runtime/linux/runctypes"
|
|
||||||
crioption "github.com/containerd/cri-containerd/pkg/api/runtimeoptions/v1"
|
|
||||||
|
|
||||||
"github.com/kata-containers/runtime/pkg/katautils"
|
|
||||||
vc "github.com/kata-containers/runtime/virtcontainers"
|
|
||||||
"github.com/kata-containers/runtime/virtcontainers/pkg/compatoci"
|
|
||||||
"github.com/kata-containers/runtime/virtcontainers/pkg/oci"
|
|
||||||
)
|
|
||||||
|
|
||||||
func create(ctx context.Context, s *service, r *taskAPI.CreateTaskRequest) (*container, error) {
|
|
||||||
rootFs := vc.RootFs{}
|
|
||||||
if len(r.Rootfs) == 1 {
|
|
||||||
m := r.Rootfs[0]
|
|
||||||
rootFs.Source = m.Source
|
|
||||||
rootFs.Type = m.Type
|
|
||||||
rootFs.Options = m.Options
|
|
||||||
}
|
|
||||||
|
|
||||||
detach := !r.Terminal
|
|
||||||
ociSpec, bundlePath, err := loadSpec(r)
|
|
||||||
if err != nil {
|
|
||||||
return nil, err
|
|
||||||
}
|
|
||||||
|
|
||||||
containerType, err := oci.ContainerType(*ociSpec)
|
|
||||||
if err != nil {
|
|
||||||
return nil, err
|
|
||||||
}
|
|
||||||
|
|
||||||
disableOutput := noNeedForOutput(detach, ociSpec.Process.Terminal)
|
|
||||||
rootfs := filepath.Join(r.Bundle, "rootfs")
|
|
||||||
|
|
||||||
switch containerType {
|
|
||||||
case vc.PodSandbox:
|
|
||||||
if s.sandbox != nil {
|
|
||||||
return nil, fmt.Errorf("cannot create another sandbox in sandbox: %s", s.sandbox.ID())
|
|
||||||
}
|
|
||||||
|
|
||||||
_, err := loadRuntimeConfig(s, r, ociSpec.Annotations)
|
|
||||||
if err != nil {
|
|
||||||
return nil, err
|
|
||||||
}
|
|
||||||
|
|
||||||
if rootFs.Mounted, err = checkAndMount(s, r); err != nil {
|
|
||||||
return nil, err
|
|
||||||
}
|
|
||||||
|
|
||||||
defer func() {
|
|
||||||
if err != nil && rootFs.Mounted {
|
|
||||||
if err2 := mount.UnmountAll(rootfs, 0); err2 != nil {
|
|
||||||
logrus.WithError(err2).Warn("failed to cleanup rootfs mount")
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}()
|
|
||||||
|
|
||||||
katautils.HandleFactory(ctx, vci, s.config)
|
|
||||||
|
|
||||||
// Pass service's context instead of local ctx to CreateSandbox(), since local
|
|
||||||
// ctx will be canceled after this rpc service call, but the sandbox will live
|
|
||||||
// across multiple rpc service calls.
|
|
||||||
//
|
|
||||||
sandbox, _, err := katautils.CreateSandbox(s.ctx, vci, *ociSpec, *s.config, rootFs, r.ID, bundlePath, "", disableOutput, false, true)
|
|
||||||
if err != nil {
|
|
||||||
return nil, err
|
|
||||||
}
|
|
||||||
s.sandbox = sandbox
|
|
||||||
|
|
||||||
case vc.PodContainer:
|
|
||||||
if s.sandbox == nil {
|
|
||||||
return nil, fmt.Errorf("BUG: Cannot start the container, since the sandbox hasn't been created")
|
|
||||||
}
|
|
||||||
|
|
||||||
if rootFs.Mounted, err = checkAndMount(s, r); err != nil {
|
|
||||||
return nil, err
|
|
||||||
}
|
|
||||||
|
|
||||||
defer func() {
|
|
||||||
if err != nil && rootFs.Mounted {
|
|
||||||
if err2 := mount.UnmountAll(rootfs, 0); err2 != nil {
|
|
||||||
logrus.WithError(err2).Warn("failed to cleanup rootfs mount")
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}()
|
|
||||||
|
|
||||||
_, err = katautils.CreateContainer(ctx, vci, s.sandbox, *ociSpec, rootFs, r.ID, bundlePath, "", disableOutput, true)
|
|
||||||
if err != nil {
|
|
||||||
return nil, err
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
container, err := newContainer(s, r, containerType, ociSpec, rootFs.Mounted)
|
|
||||||
if err != nil {
|
|
||||||
return nil, err
|
|
||||||
}
|
|
||||||
|
|
||||||
return container, nil
|
|
||||||
}
|
|
||||||
|
|
||||||
func loadSpec(r *taskAPI.CreateTaskRequest) (*specs.Spec, string, error) {
|
|
||||||
// Checks the MUST and MUST NOT from OCI runtime specification
|
|
||||||
bundlePath, err := validBundle(r.ID, r.Bundle)
|
|
||||||
if err != nil {
|
|
||||||
return nil, "", err
|
|
||||||
}
|
|
||||||
|
|
||||||
ociSpec, err := compatoci.ParseConfigJSON(bundlePath)
|
|
||||||
if err != nil {
|
|
||||||
return nil, "", err
|
|
||||||
}
|
|
||||||
|
|
||||||
// Todo:
|
|
||||||
// Since there is a bug in kata for sharedPidNs, here to
|
|
||||||
// remove the pidns to disable the sharePidNs temporarily,
|
|
||||||
// once kata fixed this issue, we can remove this line.
|
|
||||||
// For the bug, please see:
|
|
||||||
// https://github.com/kata-containers/runtime/issues/930
|
|
||||||
removeNamespace(&ociSpec, specs.PIDNamespace)
|
|
||||||
|
|
||||||
return &ociSpec, bundlePath, nil
|
|
||||||
}
|
|
||||||
|
|
||||||
// Config override ordering(high to low):
|
|
||||||
// 1. podsandbox annotation
|
|
||||||
// 2. shimv2 create task option
|
|
||||||
// 3. environment
|
|
||||||
func loadRuntimeConfig(s *service, r *taskAPI.CreateTaskRequest, anno map[string]string) (*oci.RuntimeConfig, error) {
|
|
||||||
configPath := oci.GetSandboxConfigPath(anno)
|
|
||||||
if configPath == "" && r.Options != nil {
|
|
||||||
v, err := typeurl.UnmarshalAny(r.Options)
|
|
||||||
if err != nil {
|
|
||||||
return nil, err
|
|
||||||
}
|
|
||||||
option, ok := v.(*crioption.Options)
|
|
||||||
// cri default runtime handler will pass a linux runc options,
|
|
||||||
// and we'll ignore it.
|
|
||||||
if ok {
|
|
||||||
configPath = option.ConfigPath
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// Try to get the config file from the env KATA_CONF_FILE
|
|
||||||
if configPath == "" {
|
|
||||||
configPath = os.Getenv("KATA_CONF_FILE")
|
|
||||||
}
|
|
||||||
|
|
||||||
_, runtimeConfig, err := katautils.LoadConfiguration(configPath, false, true)
|
|
||||||
if err != nil {
|
|
||||||
return nil, err
|
|
||||||
}
|
|
||||||
|
|
||||||
// For the unit test, the config will be predefined
|
|
||||||
if s.config == nil {
|
|
||||||
s.config = &runtimeConfig
|
|
||||||
}
|
|
||||||
|
|
||||||
return &runtimeConfig, nil
|
|
||||||
}
|
|
||||||
|
|
||||||
func checkAndMount(s *service, r *taskAPI.CreateTaskRequest) (bool, error) {
|
|
||||||
if len(r.Rootfs) == 1 {
|
|
||||||
m := r.Rootfs[0]
|
|
||||||
|
|
||||||
if katautils.IsBlockDevice(m.Source) && !s.config.HypervisorConfig.DisableBlockDeviceUse {
|
|
||||||
return false, nil
|
|
||||||
}
|
|
||||||
}
|
|
||||||
rootfs := filepath.Join(r.Bundle, "rootfs")
|
|
||||||
if err := doMount(r.Rootfs, rootfs); err != nil {
|
|
||||||
return false, err
|
|
||||||
}
|
|
||||||
return true, nil
|
|
||||||
}
|
|
||||||
|
|
||||||
func doMount(mounts []*containerd_types.Mount, rootfs string) error {
|
|
||||||
if len(mounts) == 0 {
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
|
|
||||||
if _, err := os.Stat(rootfs); os.IsNotExist(err) {
|
|
||||||
if err := os.Mkdir(rootfs, 0711); err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
for _, rm := range mounts {
|
|
||||||
m := &mount.Mount{
|
|
||||||
Type: rm.Type,
|
|
||||||
Source: rm.Source,
|
|
||||||
Options: rm.Options,
|
|
||||||
}
|
|
||||||
if err := m.Mount(rootfs); err != nil {
|
|
||||||
return errors.Wrapf(err, "failed to mount rootfs component %v", m)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
52
src/runtime/vendor/github.com/kata-containers/runtime/containerd-shim-v2/delete.go
generated
vendored
52
src/runtime/vendor/github.com/kata-containers/runtime/containerd-shim-v2/delete.go
generated
vendored
@@ -1,52 +0,0 @@
|
|||||||
// Copyright (c) 2018 HyperHQ Inc.
|
|
||||||
//
|
|
||||||
// SPDX-License-Identifier: Apache-2.0
|
|
||||||
//
|
|
||||||
|
|
||||||
package containerdshim
|
|
||||||
|
|
||||||
import (
|
|
||||||
"context"
|
|
||||||
"path"
|
|
||||||
|
|
||||||
"github.com/containerd/containerd/mount"
|
|
||||||
"github.com/kata-containers/runtime/pkg/katautils"
|
|
||||||
"github.com/kata-containers/runtime/virtcontainers/types"
|
|
||||||
|
|
||||||
"github.com/sirupsen/logrus"
|
|
||||||
)
|
|
||||||
|
|
||||||
func deleteContainer(ctx context.Context, s *service, c *container) error {
|
|
||||||
status, err := s.sandbox.StatusContainer(c.id)
|
|
||||||
if err != nil && !isNotFound(err) {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
if !c.cType.IsSandbox() && err == nil {
|
|
||||||
if status.State.State != types.StateStopped {
|
|
||||||
_, err = s.sandbox.StopContainer(c.id, false)
|
|
||||||
if err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if _, err = s.sandbox.DeleteContainer(c.id); err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// Run post-stop OCI hooks.
|
|
||||||
if err := katautils.PostStopHooks(ctx, *c.spec, s.sandbox.ID(), c.bundle); err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
|
|
||||||
if c.mounted {
|
|
||||||
rootfs := path.Join(c.bundle, "rootfs")
|
|
||||||
if err := mount.UnmountAll(rootfs, 0); err != nil {
|
|
||||||
logrus.WithError(err).Warn("failed to cleanup rootfs mount")
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
delete(s.containers, c.id)
|
|
||||||
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
62
src/runtime/vendor/github.com/kata-containers/runtime/containerd-shim-v2/errors.go
generated
vendored
62
src/runtime/vendor/github.com/kata-containers/runtime/containerd-shim-v2/errors.go
generated
vendored
@@ -1,62 +0,0 @@
|
|||||||
// Copyright (c) 2019 hyper.sh
|
|
||||||
//
|
|
||||||
// SPDX-License-Identifier: Apache-2.0
|
|
||||||
//
|
|
||||||
|
|
||||||
package containerdshim
|
|
||||||
|
|
||||||
import (
|
|
||||||
"strings"
|
|
||||||
"syscall"
|
|
||||||
|
|
||||||
"github.com/pkg/errors"
|
|
||||||
"google.golang.org/grpc/codes"
|
|
||||||
"google.golang.org/grpc/status"
|
|
||||||
|
|
||||||
vc "github.com/kata-containers/runtime/virtcontainers/pkg/types"
|
|
||||||
)
|
|
||||||
|
|
||||||
// toGRPC maps the virtcontainers error into a grpc error,
|
|
||||||
// using the original error message as a description.
|
|
||||||
func toGRPC(err error) error {
|
|
||||||
if err == nil {
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
|
|
||||||
if isGRPCError(err) {
|
|
||||||
// error has already been mapped to grpc
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
|
|
||||||
err = errors.Cause(err)
|
|
||||||
switch {
|
|
||||||
case isInvalidArgument(err):
|
|
||||||
return status.Errorf(codes.InvalidArgument, err.Error())
|
|
||||||
case isNotFound(err):
|
|
||||||
return status.Errorf(codes.NotFound, err.Error())
|
|
||||||
}
|
|
||||||
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
|
|
||||||
// toGRPCf maps the error to grpc error codes, assembling the formatting string
|
|
||||||
// and combining it with the target error string.
|
|
||||||
func toGRPCf(err error, format string, args ...interface{}) error {
|
|
||||||
return toGRPC(errors.Wrapf(err, format, args...))
|
|
||||||
}
|
|
||||||
|
|
||||||
func isGRPCError(err error) bool {
|
|
||||||
_, ok := status.FromError(err)
|
|
||||||
return ok
|
|
||||||
}
|
|
||||||
|
|
||||||
func isInvalidArgument(err error) bool {
|
|
||||||
return err == vc.ErrNeedSandbox || err == vc.ErrNeedSandboxID ||
|
|
||||||
err == vc.ErrNeedContainerID || err == vc.ErrNeedState ||
|
|
||||||
err == syscall.EINVAL
|
|
||||||
}
|
|
||||||
|
|
||||||
func isNotFound(err error) bool {
|
|
||||||
return err == vc.ErrNoSuchContainer || err == syscall.ENOENT ||
|
|
||||||
strings.Contains(err.Error(), "not found") || strings.Contains(err.Error(), "not exist")
|
|
||||||
}
|
|
||||||
135
src/runtime/vendor/github.com/kata-containers/runtime/containerd-shim-v2/exec.go
generated
vendored
135
src/runtime/vendor/github.com/kata-containers/runtime/containerd-shim-v2/exec.go
generated
vendored
@@ -1,135 +0,0 @@
|
|||||||
// Copyright (c) 2018 HyperHQ Inc.
|
|
||||||
//
|
|
||||||
// SPDX-License-Identifier: Apache-2.0
|
|
||||||
//
|
|
||||||
|
|
||||||
package containerdshim
|
|
||||||
|
|
||||||
import (
|
|
||||||
"fmt"
|
|
||||||
"strings"
|
|
||||||
"time"
|
|
||||||
|
|
||||||
"github.com/containerd/containerd/api/types/task"
|
|
||||||
"github.com/containerd/containerd/errdefs"
|
|
||||||
"github.com/containerd/typeurl"
|
|
||||||
googleProtobuf "github.com/gogo/protobuf/types"
|
|
||||||
"github.com/kata-containers/runtime/virtcontainers/types"
|
|
||||||
specs "github.com/opencontainers/runtime-spec/specs-go"
|
|
||||||
)
|
|
||||||
|
|
||||||
type exec struct {
|
|
||||||
container *container
|
|
||||||
cmds *types.Cmd
|
|
||||||
tty *tty
|
|
||||||
ttyio *ttyIO
|
|
||||||
id string
|
|
||||||
|
|
||||||
exitCode int32
|
|
||||||
|
|
||||||
status task.Status
|
|
||||||
|
|
||||||
exitIOch chan struct{}
|
|
||||||
exitCh chan uint32
|
|
||||||
|
|
||||||
exitTime time.Time
|
|
||||||
}
|
|
||||||
|
|
||||||
type tty struct {
|
|
||||||
stdin string
|
|
||||||
stdout string
|
|
||||||
stderr string
|
|
||||||
height uint32
|
|
||||||
width uint32
|
|
||||||
terminal bool
|
|
||||||
}
|
|
||||||
|
|
||||||
func getEnvs(envs []string) []types.EnvVar {
|
|
||||||
var vcEnvs = []types.EnvVar{}
|
|
||||||
var env types.EnvVar
|
|
||||||
|
|
||||||
for _, v := range envs {
|
|
||||||
pair := strings.SplitN(v, "=", 2)
|
|
||||||
|
|
||||||
if len(pair) == 2 {
|
|
||||||
env = types.EnvVar{Var: pair[0], Value: pair[1]}
|
|
||||||
} else if len(pair) == 1 {
|
|
||||||
env = types.EnvVar{Var: pair[0], Value: ""}
|
|
||||||
}
|
|
||||||
|
|
||||||
vcEnvs = append(vcEnvs, env)
|
|
||||||
}
|
|
||||||
|
|
||||||
return vcEnvs
|
|
||||||
}
|
|
||||||
|
|
||||||
func newExec(c *container, stdin, stdout, stderr string, terminal bool, jspec *googleProtobuf.Any) (*exec, error) {
|
|
||||||
var height uint32
|
|
||||||
var width uint32
|
|
||||||
|
|
||||||
if jspec == nil {
|
|
||||||
return nil, errdefs.ToGRPCf(errdefs.ErrInvalidArgument, "googleProtobuf.Any points to nil")
|
|
||||||
}
|
|
||||||
|
|
||||||
// process exec request
|
|
||||||
var spec *specs.Process
|
|
||||||
v, err := typeurl.UnmarshalAny(jspec)
|
|
||||||
if err != nil {
|
|
||||||
return nil, err
|
|
||||||
}
|
|
||||||
spec, ok := v.(*specs.Process)
|
|
||||||
if !ok {
|
|
||||||
return nil, errdefs.ToGRPCf(errdefs.ErrInvalidArgument, "Get an invalid spec type")
|
|
||||||
}
|
|
||||||
|
|
||||||
if spec.ConsoleSize != nil {
|
|
||||||
height = uint32(spec.ConsoleSize.Height)
|
|
||||||
width = uint32(spec.ConsoleSize.Width)
|
|
||||||
}
|
|
||||||
|
|
||||||
tty := &tty{
|
|
||||||
stdin: stdin,
|
|
||||||
stdout: stdout,
|
|
||||||
stderr: stderr,
|
|
||||||
height: height,
|
|
||||||
width: width,
|
|
||||||
terminal: terminal,
|
|
||||||
}
|
|
||||||
|
|
||||||
cmds := &types.Cmd{
|
|
||||||
Args: spec.Args,
|
|
||||||
Envs: getEnvs(spec.Env),
|
|
||||||
User: fmt.Sprintf("%d", spec.User.UID),
|
|
||||||
PrimaryGroup: fmt.Sprintf("%d", spec.User.GID),
|
|
||||||
WorkDir: spec.Cwd,
|
|
||||||
Interactive: terminal,
|
|
||||||
Detach: !terminal,
|
|
||||||
NoNewPrivileges: spec.NoNewPrivileges,
|
|
||||||
}
|
|
||||||
|
|
||||||
exec := &exec{
|
|
||||||
container: c,
|
|
||||||
cmds: cmds,
|
|
||||||
tty: tty,
|
|
||||||
exitCode: exitCode255,
|
|
||||||
exitIOch: make(chan struct{}),
|
|
||||||
exitCh: make(chan uint32, 1),
|
|
||||||
status: task.StatusCreated,
|
|
||||||
}
|
|
||||||
|
|
||||||
return exec, nil
|
|
||||||
}
|
|
||||||
|
|
||||||
func (c *container) getExec(id string) (*exec, error) {
|
|
||||||
if c.execs == nil {
|
|
||||||
return nil, errdefs.ToGRPCf(errdefs.ErrNotFound, "exec does not exist %s", id)
|
|
||||||
}
|
|
||||||
|
|
||||||
exec := c.execs[id]
|
|
||||||
|
|
||||||
if exec == nil {
|
|
||||||
return nil, errdefs.ToGRPCf(errdefs.ErrNotFound, "exec does not exist %s", id)
|
|
||||||
}
|
|
||||||
|
|
||||||
return exec, nil
|
|
||||||
}
|
|
||||||
192
src/runtime/vendor/github.com/kata-containers/runtime/containerd-shim-v2/metrics.go
generated
vendored
192
src/runtime/vendor/github.com/kata-containers/runtime/containerd-shim-v2/metrics.go
generated
vendored
@@ -1,192 +0,0 @@
|
|||||||
// Copyright (c) 2018 HyperHQ Inc.
|
|
||||||
//
|
|
||||||
// SPDX-License-Identifier: Apache-2.0
|
|
||||||
//
|
|
||||||
|
|
||||||
package containerdshim
|
|
||||||
|
|
||||||
import (
|
|
||||||
"github.com/containerd/cgroups"
|
|
||||||
"github.com/containerd/typeurl"
|
|
||||||
|
|
||||||
google_protobuf "github.com/gogo/protobuf/types"
|
|
||||||
vc "github.com/kata-containers/runtime/virtcontainers"
|
|
||||||
)
|
|
||||||
|
|
||||||
func marshalMetrics(s *service, containerID string) (*google_protobuf.Any, error) {
|
|
||||||
stats, err := s.sandbox.StatsContainer(containerID)
|
|
||||||
if err != nil {
|
|
||||||
return nil, err
|
|
||||||
}
|
|
||||||
|
|
||||||
metrics := statsToMetrics(&stats)
|
|
||||||
|
|
||||||
data, err := typeurl.MarshalAny(metrics)
|
|
||||||
if err != nil {
|
|
||||||
return nil, err
|
|
||||||
}
|
|
||||||
|
|
||||||
return data, nil
|
|
||||||
}
|
|
||||||
|
|
||||||
func statsToMetrics(stats *vc.ContainerStats) *cgroups.Metrics {
|
|
||||||
metrics := &cgroups.Metrics{}
|
|
||||||
|
|
||||||
if stats.CgroupStats != nil {
|
|
||||||
metrics = &cgroups.Metrics{
|
|
||||||
Hugetlb: setHugetlbStats(stats.CgroupStats.HugetlbStats),
|
|
||||||
Pids: setPidsStats(stats.CgroupStats.PidsStats),
|
|
||||||
CPU: setCPUStats(stats.CgroupStats.CPUStats),
|
|
||||||
Memory: setMemoryStats(stats.CgroupStats.MemoryStats),
|
|
||||||
Blkio: setBlkioStats(stats.CgroupStats.BlkioStats),
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
metrics.Network = setNetworkStats(stats.NetworkStats)
|
|
||||||
|
|
||||||
return metrics
|
|
||||||
}
|
|
||||||
|
|
||||||
func setHugetlbStats(vcHugetlb map[string]vc.HugetlbStats) []*cgroups.HugetlbStat {
|
|
||||||
var hugetlbStats []*cgroups.HugetlbStat
|
|
||||||
for _, v := range vcHugetlb {
|
|
||||||
hugetlbStats = append(
|
|
||||||
hugetlbStats,
|
|
||||||
&cgroups.HugetlbStat{
|
|
||||||
Usage: v.Usage,
|
|
||||||
Max: v.MaxUsage,
|
|
||||||
Failcnt: v.Failcnt,
|
|
||||||
})
|
|
||||||
}
|
|
||||||
|
|
||||||
return hugetlbStats
|
|
||||||
}
|
|
||||||
|
|
||||||
func setPidsStats(vcPids vc.PidsStats) *cgroups.PidsStat {
|
|
||||||
pidsStats := &cgroups.PidsStat{
|
|
||||||
Current: vcPids.Current,
|
|
||||||
Limit: vcPids.Limit,
|
|
||||||
}
|
|
||||||
|
|
||||||
return pidsStats
|
|
||||||
}
|
|
||||||
|
|
||||||
func setCPUStats(vcCPU vc.CPUStats) *cgroups.CPUStat {
|
|
||||||
|
|
||||||
var perCPU []uint64
|
|
||||||
perCPU = append(perCPU, vcCPU.CPUUsage.PercpuUsage...)
|
|
||||||
|
|
||||||
cpuStats := &cgroups.CPUStat{
|
|
||||||
Usage: &cgroups.CPUUsage{
|
|
||||||
Total: vcCPU.CPUUsage.TotalUsage,
|
|
||||||
Kernel: vcCPU.CPUUsage.UsageInKernelmode,
|
|
||||||
User: vcCPU.CPUUsage.UsageInUsermode,
|
|
||||||
PerCPU: perCPU,
|
|
||||||
},
|
|
||||||
Throttling: &cgroups.Throttle{
|
|
||||||
Periods: vcCPU.ThrottlingData.Periods,
|
|
||||||
ThrottledPeriods: vcCPU.ThrottlingData.ThrottledPeriods,
|
|
||||||
ThrottledTime: vcCPU.ThrottlingData.ThrottledTime,
|
|
||||||
},
|
|
||||||
}
|
|
||||||
|
|
||||||
return cpuStats
|
|
||||||
}
|
|
||||||
|
|
||||||
func setMemoryStats(vcMemory vc.MemoryStats) *cgroups.MemoryStat {
|
|
||||||
memoryStats := &cgroups.MemoryStat{
|
|
||||||
Usage: &cgroups.MemoryEntry{
|
|
||||||
Limit: vcMemory.Usage.Limit,
|
|
||||||
Usage: vcMemory.Usage.Usage,
|
|
||||||
Max: vcMemory.Usage.MaxUsage,
|
|
||||||
Failcnt: vcMemory.Usage.Failcnt,
|
|
||||||
},
|
|
||||||
Swap: &cgroups.MemoryEntry{
|
|
||||||
Limit: vcMemory.SwapUsage.Limit,
|
|
||||||
Usage: vcMemory.SwapUsage.Usage,
|
|
||||||
Max: vcMemory.SwapUsage.MaxUsage,
|
|
||||||
Failcnt: vcMemory.SwapUsage.Failcnt,
|
|
||||||
},
|
|
||||||
Kernel: &cgroups.MemoryEntry{
|
|
||||||
Limit: vcMemory.KernelUsage.Limit,
|
|
||||||
Usage: vcMemory.KernelUsage.Usage,
|
|
||||||
Max: vcMemory.KernelUsage.MaxUsage,
|
|
||||||
Failcnt: vcMemory.KernelUsage.Failcnt,
|
|
||||||
},
|
|
||||||
KernelTCP: &cgroups.MemoryEntry{
|
|
||||||
Limit: vcMemory.KernelTCPUsage.Limit,
|
|
||||||
Usage: vcMemory.KernelTCPUsage.Usage,
|
|
||||||
Max: vcMemory.KernelTCPUsage.MaxUsage,
|
|
||||||
Failcnt: vcMemory.KernelTCPUsage.Failcnt,
|
|
||||||
},
|
|
||||||
}
|
|
||||||
|
|
||||||
if vcMemory.UseHierarchy {
|
|
||||||
memoryStats.Cache = vcMemory.Stats["total_cache"]
|
|
||||||
memoryStats.RSS = vcMemory.Stats["total_rss"]
|
|
||||||
memoryStats.MappedFile = vcMemory.Stats["total_mapped_file"]
|
|
||||||
} else {
|
|
||||||
memoryStats.Cache = vcMemory.Stats["cache"]
|
|
||||||
memoryStats.RSS = vcMemory.Stats["rss"]
|
|
||||||
memoryStats.MappedFile = vcMemory.Stats["mapped_file"]
|
|
||||||
}
|
|
||||||
if v, ok := vcMemory.Stats["pgfault"]; ok {
|
|
||||||
memoryStats.PgFault = v
|
|
||||||
}
|
|
||||||
if v, ok := vcMemory.Stats["pgmajfault"]; ok {
|
|
||||||
memoryStats.PgMajFault = v
|
|
||||||
}
|
|
||||||
if v, ok := vcMemory.Stats["total_inactive_file"]; ok {
|
|
||||||
memoryStats.TotalInactiveFile = v
|
|
||||||
}
|
|
||||||
|
|
||||||
return memoryStats
|
|
||||||
}
|
|
||||||
|
|
||||||
func setBlkioStats(vcBlkio vc.BlkioStats) *cgroups.BlkIOStat {
|
|
||||||
blkioStats := &cgroups.BlkIOStat{
|
|
||||||
IoServiceBytesRecursive: copyBlkio(vcBlkio.IoServiceBytesRecursive),
|
|
||||||
IoServicedRecursive: copyBlkio(vcBlkio.IoServicedRecursive),
|
|
||||||
IoQueuedRecursive: copyBlkio(vcBlkio.IoQueuedRecursive),
|
|
||||||
SectorsRecursive: copyBlkio(vcBlkio.SectorsRecursive),
|
|
||||||
IoServiceTimeRecursive: copyBlkio(vcBlkio.IoServiceTimeRecursive),
|
|
||||||
IoWaitTimeRecursive: copyBlkio(vcBlkio.IoWaitTimeRecursive),
|
|
||||||
IoMergedRecursive: copyBlkio(vcBlkio.IoMergedRecursive),
|
|
||||||
IoTimeRecursive: copyBlkio(vcBlkio.IoTimeRecursive),
|
|
||||||
}
|
|
||||||
|
|
||||||
return blkioStats
|
|
||||||
}
|
|
||||||
|
|
||||||
func copyBlkio(s []vc.BlkioStatEntry) []*cgroups.BlkIOEntry {
|
|
||||||
ret := make([]*cgroups.BlkIOEntry, len(s))
|
|
||||||
for i, v := range s {
|
|
||||||
ret[i] = &cgroups.BlkIOEntry{
|
|
||||||
Op: v.Op,
|
|
||||||
Major: v.Major,
|
|
||||||
Minor: v.Minor,
|
|
||||||
Value: v.Value,
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return ret
|
|
||||||
}
|
|
||||||
|
|
||||||
func setNetworkStats(vcNetwork []*vc.NetworkStats) []*cgroups.NetworkStat {
|
|
||||||
networkStats := make([]*cgroups.NetworkStat, len(vcNetwork))
|
|
||||||
for i, v := range vcNetwork {
|
|
||||||
networkStats[i] = &cgroups.NetworkStat{
|
|
||||||
Name: v.Name,
|
|
||||||
RxBytes: v.RxBytes,
|
|
||||||
RxPackets: v.RxPackets,
|
|
||||||
RxErrors: v.RxErrors,
|
|
||||||
RxDropped: v.RxDropped,
|
|
||||||
TxBytes: v.TxBytes,
|
|
||||||
TxPackets: v.TxPackets,
|
|
||||||
TxErrors: v.TxErrors,
|
|
||||||
TxDropped: v.TxDropped,
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return networkStats
|
|
||||||
}
|
|
||||||
936
src/runtime/vendor/github.com/kata-containers/runtime/containerd-shim-v2/service.go
generated
vendored
936
src/runtime/vendor/github.com/kata-containers/runtime/containerd-shim-v2/service.go
generated
vendored
@@ -1,936 +0,0 @@
|
|||||||
// Copyright (c) 2018 HyperHQ Inc.
|
|
||||||
//
|
|
||||||
// SPDX-License-Identifier: Apache-2.0
|
|
||||||
//
|
|
||||||
|
|
||||||
package containerdshim
|
|
||||||
|
|
||||||
import (
|
|
||||||
"context"
|
|
||||||
"io/ioutil"
|
|
||||||
"os"
|
|
||||||
sysexec "os/exec"
|
|
||||||
"sync"
|
|
||||||
"syscall"
|
|
||||||
"time"
|
|
||||||
|
|
||||||
eventstypes "github.com/containerd/containerd/api/events"
|
|
||||||
"github.com/containerd/containerd/api/types/task"
|
|
||||||
"github.com/containerd/containerd/errdefs"
|
|
||||||
"github.com/containerd/containerd/events"
|
|
||||||
"github.com/containerd/containerd/namespaces"
|
|
||||||
cdruntime "github.com/containerd/containerd/runtime"
|
|
||||||
cdshim "github.com/containerd/containerd/runtime/v2/shim"
|
|
||||||
taskAPI "github.com/containerd/containerd/runtime/v2/task"
|
|
||||||
"github.com/containerd/typeurl"
|
|
||||||
ptypes "github.com/gogo/protobuf/types"
|
|
||||||
"github.com/opencontainers/runtime-spec/specs-go"
|
|
||||||
"github.com/pkg/errors"
|
|
||||||
"github.com/sirupsen/logrus"
|
|
||||||
"golang.org/x/sys/unix"
|
|
||||||
|
|
||||||
"github.com/kata-containers/runtime/pkg/katautils"
|
|
||||||
vc "github.com/kata-containers/runtime/virtcontainers"
|
|
||||||
"github.com/kata-containers/runtime/virtcontainers/pkg/compatoci"
|
|
||||||
"github.com/kata-containers/runtime/virtcontainers/pkg/oci"
|
|
||||||
"github.com/kata-containers/runtime/virtcontainers/types"
|
|
||||||
)
|
|
||||||
|
|
||||||
const (
|
|
||||||
// Define the service's channel size, which is used for
|
|
||||||
// reaping the exited processes exit state and forwarding
|
|
||||||
// it to containerd as the containerd event format.
|
|
||||||
bufferSize = 32
|
|
||||||
|
|
||||||
chSize = 128
|
|
||||||
exitCode255 = 255
|
|
||||||
|
|
||||||
// A time span used to wait for publish a containerd event,
|
|
||||||
// once it costs a longer time than timeOut, it will be canceld.
|
|
||||||
timeOut = 5 * time.Second
|
|
||||||
)
|
|
||||||
|
|
||||||
var (
|
|
||||||
empty = &ptypes.Empty{}
|
|
||||||
_ taskAPI.TaskService = (taskAPI.TaskService)(&service{})
|
|
||||||
)
|
|
||||||
|
|
||||||
// concrete virtcontainer implementation
|
|
||||||
var vci vc.VC = &vc.VCImpl{}
|
|
||||||
|
|
||||||
// New returns a new shim service that can be used via GRPC
|
|
||||||
func New(ctx context.Context, id string, publisher events.Publisher) (cdshim.Shim, error) {
|
|
||||||
logger := logrus.WithField("ID", id)
|
|
||||||
// Discard the log before shim init its log output. Otherwise
|
|
||||||
// it will output into stdio, from which containerd would like
|
|
||||||
// to get the shim's socket address.
|
|
||||||
logrus.SetOutput(ioutil.Discard)
|
|
||||||
opts := ctx.Value(cdshim.OptsKey{}).(cdshim.Opts)
|
|
||||||
if !opts.Debug {
|
|
||||||
logrus.SetLevel(logrus.WarnLevel)
|
|
||||||
}
|
|
||||||
vci.SetLogger(ctx, logger)
|
|
||||||
katautils.SetLogger(ctx, logger, logger.Logger.Level)
|
|
||||||
|
|
||||||
ctx, cancel := context.WithCancel(ctx)
|
|
||||||
|
|
||||||
s := &service{
|
|
||||||
id: id,
|
|
||||||
pid: uint32(os.Getpid()),
|
|
||||||
ctx: ctx,
|
|
||||||
containers: make(map[string]*container),
|
|
||||||
events: make(chan interface{}, chSize),
|
|
||||||
ec: make(chan exit, bufferSize),
|
|
||||||
cancel: cancel,
|
|
||||||
}
|
|
||||||
|
|
||||||
go s.processExits()
|
|
||||||
|
|
||||||
go s.forward(publisher)
|
|
||||||
|
|
||||||
return s, nil
|
|
||||||
}
|
|
||||||
|
|
||||||
type exit struct {
|
|
||||||
id string
|
|
||||||
execid string
|
|
||||||
pid uint32
|
|
||||||
status int
|
|
||||||
timestamp time.Time
|
|
||||||
}
|
|
||||||
|
|
||||||
// service is the shim implementation of a remote shim over GRPC
|
|
||||||
type service struct {
|
|
||||||
mu sync.Mutex
|
|
||||||
eventSendMu sync.Mutex
|
|
||||||
|
|
||||||
// pid Since this shimv2 cannot get the container processes pid from VM,
|
|
||||||
// thus for the returned values needed pid, just return this shim's
|
|
||||||
// pid directly.
|
|
||||||
pid uint32
|
|
||||||
|
|
||||||
ctx context.Context
|
|
||||||
sandbox vc.VCSandbox
|
|
||||||
containers map[string]*container
|
|
||||||
config *oci.RuntimeConfig
|
|
||||||
events chan interface{}
|
|
||||||
monitor chan error
|
|
||||||
|
|
||||||
cancel func()
|
|
||||||
|
|
||||||
ec chan exit
|
|
||||||
id string
|
|
||||||
}
|
|
||||||
|
|
||||||
func newCommand(ctx context.Context, containerdBinary, id, containerdAddress string) (*sysexec.Cmd, error) {
|
|
||||||
ns, err := namespaces.NamespaceRequired(ctx)
|
|
||||||
if err != nil {
|
|
||||||
return nil, err
|
|
||||||
}
|
|
||||||
self, err := os.Executable()
|
|
||||||
if err != nil {
|
|
||||||
return nil, err
|
|
||||||
}
|
|
||||||
cwd, err := os.Getwd()
|
|
||||||
if err != nil {
|
|
||||||
return nil, err
|
|
||||||
}
|
|
||||||
args := []string{
|
|
||||||
"-namespace", ns,
|
|
||||||
"-address", containerdAddress,
|
|
||||||
"-publish-binary", containerdBinary,
|
|
||||||
"-id", id,
|
|
||||||
}
|
|
||||||
opts := ctx.Value(cdshim.OptsKey{}).(cdshim.Opts)
|
|
||||||
if opts.Debug {
|
|
||||||
args = append(args, "-debug")
|
|
||||||
}
|
|
||||||
cmd := sysexec.Command(self, args...)
|
|
||||||
cmd.Dir = cwd
|
|
||||||
|
|
||||||
// Set the go max process to 2 in case the shim forks too much process
|
|
||||||
cmd.Env = append(os.Environ(), "GOMAXPROCS=2")
|
|
||||||
|
|
||||||
cmd.SysProcAttr = &syscall.SysProcAttr{
|
|
||||||
Setpgid: true,
|
|
||||||
}
|
|
||||||
|
|
||||||
return cmd, nil
|
|
||||||
}
|
|
||||||
|
|
||||||
// StartShim willl start a kata shimv2 daemon which will implemented the
|
|
||||||
// ShimV2 APIs such as create/start/update etc containers.
|
|
||||||
func (s *service) StartShim(ctx context.Context, id, containerdBinary, containerdAddress string) (string, error) {
|
|
||||||
bundlePath, err := os.Getwd()
|
|
||||||
if err != nil {
|
|
||||||
return "", err
|
|
||||||
}
|
|
||||||
|
|
||||||
address, err := getAddress(ctx, bundlePath, id)
|
|
||||||
if err != nil {
|
|
||||||
return "", err
|
|
||||||
}
|
|
||||||
if address != "" {
|
|
||||||
if err := cdshim.WriteAddress("address", address); err != nil {
|
|
||||||
return "", err
|
|
||||||
}
|
|
||||||
return address, nil
|
|
||||||
}
|
|
||||||
|
|
||||||
cmd, err := newCommand(ctx, containerdBinary, id, containerdAddress)
|
|
||||||
if err != nil {
|
|
||||||
return "", err
|
|
||||||
}
|
|
||||||
|
|
||||||
address, err = cdshim.SocketAddress(ctx, id)
|
|
||||||
if err != nil {
|
|
||||||
return "", err
|
|
||||||
}
|
|
||||||
|
|
||||||
socket, err := cdshim.NewSocket(address)
|
|
||||||
if err != nil {
|
|
||||||
return "", err
|
|
||||||
}
|
|
||||||
defer socket.Close()
|
|
||||||
f, err := socket.File()
|
|
||||||
if err != nil {
|
|
||||||
return "", err
|
|
||||||
}
|
|
||||||
defer f.Close()
|
|
||||||
|
|
||||||
cmd.ExtraFiles = append(cmd.ExtraFiles, f)
|
|
||||||
|
|
||||||
if err := cmd.Start(); err != nil {
|
|
||||||
return "", err
|
|
||||||
}
|
|
||||||
defer func() {
|
|
||||||
if err != nil {
|
|
||||||
cmd.Process.Kill()
|
|
||||||
}
|
|
||||||
}()
|
|
||||||
|
|
||||||
// make sure to wait after start
|
|
||||||
go cmd.Wait()
|
|
||||||
if err := cdshim.WritePidFile("shim.pid", cmd.Process.Pid); err != nil {
|
|
||||||
return "", err
|
|
||||||
}
|
|
||||||
if err := cdshim.WriteAddress("address", address); err != nil {
|
|
||||||
return "", err
|
|
||||||
}
|
|
||||||
return address, nil
|
|
||||||
}
|
|
||||||
|
|
||||||
func (s *service) forward(publisher events.Publisher) {
|
|
||||||
for e := range s.events {
|
|
||||||
ctx, cancel := context.WithTimeout(s.ctx, timeOut)
|
|
||||||
err := publisher.Publish(ctx, getTopic(e), e)
|
|
||||||
cancel()
|
|
||||||
if err != nil {
|
|
||||||
logrus.WithError(err).Error("post event")
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
func (s *service) send(evt interface{}) {
|
|
||||||
// for unit test, it will not initialize s.events
|
|
||||||
if s.events != nil {
|
|
||||||
s.events <- evt
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
func (s *service) sendL(evt interface{}) {
|
|
||||||
s.eventSendMu.Lock()
|
|
||||||
if s.events != nil {
|
|
||||||
s.events <- evt
|
|
||||||
}
|
|
||||||
s.eventSendMu.Unlock()
|
|
||||||
}
|
|
||||||
|
|
||||||
func getTopic(e interface{}) string {
|
|
||||||
switch e.(type) {
|
|
||||||
case *eventstypes.TaskCreate:
|
|
||||||
return cdruntime.TaskCreateEventTopic
|
|
||||||
case *eventstypes.TaskStart:
|
|
||||||
return cdruntime.TaskStartEventTopic
|
|
||||||
case *eventstypes.TaskOOM:
|
|
||||||
return cdruntime.TaskOOMEventTopic
|
|
||||||
case *eventstypes.TaskExit:
|
|
||||||
return cdruntime.TaskExitEventTopic
|
|
||||||
case *eventstypes.TaskDelete:
|
|
||||||
return cdruntime.TaskDeleteEventTopic
|
|
||||||
case *eventstypes.TaskExecAdded:
|
|
||||||
return cdruntime.TaskExecAddedEventTopic
|
|
||||||
case *eventstypes.TaskExecStarted:
|
|
||||||
return cdruntime.TaskExecStartedEventTopic
|
|
||||||
case *eventstypes.TaskPaused:
|
|
||||||
return cdruntime.TaskPausedEventTopic
|
|
||||||
case *eventstypes.TaskResumed:
|
|
||||||
return cdruntime.TaskResumedEventTopic
|
|
||||||
case *eventstypes.TaskCheckpointed:
|
|
||||||
return cdruntime.TaskCheckpointedEventTopic
|
|
||||||
default:
|
|
||||||
logrus.Warnf("no topic for type %#v", e)
|
|
||||||
}
|
|
||||||
return cdruntime.TaskUnknownTopic
|
|
||||||
}
|
|
||||||
|
|
||||||
func (s *service) Cleanup(ctx context.Context) (_ *taskAPI.DeleteResponse, err error) {
|
|
||||||
//Since the binary cleanup will return the DeleteResponse from stdout to
|
|
||||||
//containerd, thus we must make sure there is no any outputs in stdout except
|
|
||||||
//the returned response, thus here redirect the log to stderr in case there's
|
|
||||||
//any log output to stdout.
|
|
||||||
logrus.SetOutput(os.Stderr)
|
|
||||||
|
|
||||||
defer func() {
|
|
||||||
err = toGRPC(err)
|
|
||||||
}()
|
|
||||||
|
|
||||||
if s.id == "" {
|
|
||||||
return nil, errdefs.ToGRPCf(errdefs.ErrInvalidArgument, "the container id is empty, please specify the container id")
|
|
||||||
}
|
|
||||||
|
|
||||||
path, err := os.Getwd()
|
|
||||||
if err != nil {
|
|
||||||
return nil, err
|
|
||||||
}
|
|
||||||
|
|
||||||
ociSpec, err := compatoci.ParseConfigJSON(path)
|
|
||||||
if err != nil {
|
|
||||||
return nil, err
|
|
||||||
}
|
|
||||||
|
|
||||||
containerType, err := oci.ContainerType(ociSpec)
|
|
||||||
if err != nil {
|
|
||||||
return nil, err
|
|
||||||
}
|
|
||||||
|
|
||||||
switch containerType {
|
|
||||||
case vc.PodSandbox:
|
|
||||||
err = cleanupContainer(ctx, s.id, s.id, path)
|
|
||||||
if err != nil {
|
|
||||||
return nil, err
|
|
||||||
}
|
|
||||||
case vc.PodContainer:
|
|
||||||
sandboxID, err := oci.SandboxID(ociSpec)
|
|
||||||
if err != nil {
|
|
||||||
return nil, err
|
|
||||||
}
|
|
||||||
|
|
||||||
err = cleanupContainer(ctx, sandboxID, s.id, path)
|
|
||||||
if err != nil {
|
|
||||||
return nil, err
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return &taskAPI.DeleteResponse{
|
|
||||||
ExitedAt: time.Now(),
|
|
||||||
ExitStatus: 128 + uint32(unix.SIGKILL),
|
|
||||||
}, nil
|
|
||||||
}
|
|
||||||
|
|
||||||
// Create a new sandbox or container with the underlying OCI runtime
|
|
||||||
func (s *service) Create(ctx context.Context, r *taskAPI.CreateTaskRequest) (_ *taskAPI.CreateTaskResponse, err error) {
|
|
||||||
defer func() {
|
|
||||||
err = toGRPC(err)
|
|
||||||
}()
|
|
||||||
|
|
||||||
s.mu.Lock()
|
|
||||||
defer s.mu.Unlock()
|
|
||||||
|
|
||||||
var c *container
|
|
||||||
|
|
||||||
c, err = create(ctx, s, r)
|
|
||||||
if err != nil {
|
|
||||||
return nil, err
|
|
||||||
}
|
|
||||||
|
|
||||||
c.status = task.StatusCreated
|
|
||||||
|
|
||||||
s.containers[r.ID] = c
|
|
||||||
|
|
||||||
s.send(&eventstypes.TaskCreate{
|
|
||||||
ContainerID: r.ID,
|
|
||||||
Bundle: r.Bundle,
|
|
||||||
Rootfs: r.Rootfs,
|
|
||||||
IO: &eventstypes.TaskIO{
|
|
||||||
Stdin: r.Stdin,
|
|
||||||
Stdout: r.Stdout,
|
|
||||||
Stderr: r.Stderr,
|
|
||||||
Terminal: r.Terminal,
|
|
||||||
},
|
|
||||||
Checkpoint: r.Checkpoint,
|
|
||||||
Pid: s.pid,
|
|
||||||
})
|
|
||||||
|
|
||||||
return &taskAPI.CreateTaskResponse{
|
|
||||||
Pid: s.pid,
|
|
||||||
}, nil
|
|
||||||
}
|
|
||||||
|
|
||||||
// Start a process
|
|
||||||
func (s *service) Start(ctx context.Context, r *taskAPI.StartRequest) (_ *taskAPI.StartResponse, err error) {
|
|
||||||
defer func() {
|
|
||||||
err = toGRPC(err)
|
|
||||||
}()
|
|
||||||
|
|
||||||
s.mu.Lock()
|
|
||||||
defer s.mu.Unlock()
|
|
||||||
|
|
||||||
c, err := s.getContainer(r.ID)
|
|
||||||
if err != nil {
|
|
||||||
return nil, err
|
|
||||||
}
|
|
||||||
|
|
||||||
// hold the send lock so that the start events are sent before any exit events in the error case
|
|
||||||
s.eventSendMu.Lock()
|
|
||||||
defer s.eventSendMu.Unlock()
|
|
||||||
|
|
||||||
//start a container
|
|
||||||
if r.ExecID == "" {
|
|
||||||
err = startContainer(ctx, s, c)
|
|
||||||
if err != nil {
|
|
||||||
return nil, errdefs.ToGRPC(err)
|
|
||||||
}
|
|
||||||
s.send(&eventstypes.TaskStart{
|
|
||||||
ContainerID: c.id,
|
|
||||||
Pid: s.pid,
|
|
||||||
})
|
|
||||||
} else {
|
|
||||||
//start an exec
|
|
||||||
_, err = startExec(ctx, s, r.ID, r.ExecID)
|
|
||||||
if err != nil {
|
|
||||||
return nil, errdefs.ToGRPC(err)
|
|
||||||
}
|
|
||||||
s.send(&eventstypes.TaskExecStarted{
|
|
||||||
ContainerID: c.id,
|
|
||||||
ExecID: r.ExecID,
|
|
||||||
Pid: s.pid,
|
|
||||||
})
|
|
||||||
}
|
|
||||||
|
|
||||||
return &taskAPI.StartResponse{
|
|
||||||
Pid: s.pid,
|
|
||||||
}, nil
|
|
||||||
}
|
|
||||||
|
|
||||||
// Delete the initial process and container
|
|
||||||
func (s *service) Delete(ctx context.Context, r *taskAPI.DeleteRequest) (_ *taskAPI.DeleteResponse, err error) {
|
|
||||||
defer func() {
|
|
||||||
err = toGRPC(err)
|
|
||||||
}()
|
|
||||||
|
|
||||||
s.mu.Lock()
|
|
||||||
defer s.mu.Unlock()
|
|
||||||
|
|
||||||
c, err := s.getContainer(r.ID)
|
|
||||||
if err != nil {
|
|
||||||
return nil, err
|
|
||||||
}
|
|
||||||
|
|
||||||
if r.ExecID == "" {
|
|
||||||
if err = deleteContainer(ctx, s, c); err != nil {
|
|
||||||
return nil, err
|
|
||||||
}
|
|
||||||
|
|
||||||
s.send(&eventstypes.TaskDelete{
|
|
||||||
ContainerID: c.id,
|
|
||||||
Pid: s.pid,
|
|
||||||
ExitStatus: c.exit,
|
|
||||||
ExitedAt: c.exitTime,
|
|
||||||
})
|
|
||||||
|
|
||||||
return &taskAPI.DeleteResponse{
|
|
||||||
ExitStatus: c.exit,
|
|
||||||
ExitedAt: c.exitTime,
|
|
||||||
Pid: s.pid,
|
|
||||||
}, nil
|
|
||||||
}
|
|
||||||
//deal with the exec case
|
|
||||||
execs, err := c.getExec(r.ExecID)
|
|
||||||
if err != nil {
|
|
||||||
return nil, err
|
|
||||||
}
|
|
||||||
|
|
||||||
delete(c.execs, r.ExecID)
|
|
||||||
|
|
||||||
return &taskAPI.DeleteResponse{
|
|
||||||
ExitStatus: uint32(execs.exitCode),
|
|
||||||
ExitedAt: execs.exitTime,
|
|
||||||
Pid: s.pid,
|
|
||||||
}, nil
|
|
||||||
}
|
|
||||||
|
|
||||||
// Exec an additional process inside the container
|
|
||||||
func (s *service) Exec(ctx context.Context, r *taskAPI.ExecProcessRequest) (_ *ptypes.Empty, err error) {
|
|
||||||
defer func() {
|
|
||||||
err = toGRPC(err)
|
|
||||||
}()
|
|
||||||
|
|
||||||
s.mu.Lock()
|
|
||||||
defer s.mu.Unlock()
|
|
||||||
|
|
||||||
c, err := s.getContainer(r.ID)
|
|
||||||
if err != nil {
|
|
||||||
return nil, err
|
|
||||||
}
|
|
||||||
|
|
||||||
if execs := c.execs[r.ExecID]; execs != nil {
|
|
||||||
return nil, errdefs.ToGRPCf(errdefs.ErrAlreadyExists, "id %s", r.ExecID)
|
|
||||||
}
|
|
||||||
|
|
||||||
execs, err := newExec(c, r.Stdin, r.Stdout, r.Stderr, r.Terminal, r.Spec)
|
|
||||||
if err != nil {
|
|
||||||
return nil, errdefs.ToGRPC(err)
|
|
||||||
}
|
|
||||||
|
|
||||||
c.execs[r.ExecID] = execs
|
|
||||||
|
|
||||||
s.send(&eventstypes.TaskExecAdded{
|
|
||||||
ContainerID: c.id,
|
|
||||||
ExecID: r.ExecID,
|
|
||||||
})
|
|
||||||
|
|
||||||
return empty, nil
|
|
||||||
}
|
|
||||||
|
|
||||||
// ResizePty of a process
|
|
||||||
func (s *service) ResizePty(ctx context.Context, r *taskAPI.ResizePtyRequest) (_ *ptypes.Empty, err error) {
|
|
||||||
defer func() {
|
|
||||||
err = toGRPC(err)
|
|
||||||
}()
|
|
||||||
|
|
||||||
s.mu.Lock()
|
|
||||||
defer s.mu.Unlock()
|
|
||||||
|
|
||||||
c, err := s.getContainer(r.ID)
|
|
||||||
if err != nil {
|
|
||||||
return nil, err
|
|
||||||
}
|
|
||||||
|
|
||||||
processID := c.id
|
|
||||||
if r.ExecID != "" {
|
|
||||||
execs, err := c.getExec(r.ExecID)
|
|
||||||
if err != nil {
|
|
||||||
return nil, err
|
|
||||||
}
|
|
||||||
execs.tty.height = r.Height
|
|
||||||
execs.tty.width = r.Width
|
|
||||||
|
|
||||||
processID = execs.id
|
|
||||||
|
|
||||||
}
|
|
||||||
err = s.sandbox.WinsizeProcess(c.id, processID, r.Height, r.Width)
|
|
||||||
if err != nil {
|
|
||||||
return nil, err
|
|
||||||
}
|
|
||||||
|
|
||||||
return empty, err
|
|
||||||
}
|
|
||||||
|
|
||||||
// State returns runtime state information for a process
|
|
||||||
func (s *service) State(ctx context.Context, r *taskAPI.StateRequest) (_ *taskAPI.StateResponse, err error) {
|
|
||||||
defer func() {
|
|
||||||
err = toGRPC(err)
|
|
||||||
}()
|
|
||||||
|
|
||||||
s.mu.Lock()
|
|
||||||
defer s.mu.Unlock()
|
|
||||||
|
|
||||||
c, err := s.getContainer(r.ID)
|
|
||||||
if err != nil {
|
|
||||||
return nil, err
|
|
||||||
}
|
|
||||||
|
|
||||||
if r.ExecID == "" {
|
|
||||||
return &taskAPI.StateResponse{
|
|
||||||
ID: c.id,
|
|
||||||
Bundle: c.bundle,
|
|
||||||
Pid: s.pid,
|
|
||||||
Status: c.status,
|
|
||||||
Stdin: c.stdin,
|
|
||||||
Stdout: c.stdout,
|
|
||||||
Stderr: c.stderr,
|
|
||||||
Terminal: c.terminal,
|
|
||||||
ExitStatus: c.exit,
|
|
||||||
}, nil
|
|
||||||
}
|
|
||||||
|
|
||||||
//deal with exec case
|
|
||||||
execs, err := c.getExec(r.ExecID)
|
|
||||||
if err != nil {
|
|
||||||
return nil, err
|
|
||||||
}
|
|
||||||
|
|
||||||
return &taskAPI.StateResponse{
|
|
||||||
ID: execs.id,
|
|
||||||
Bundle: c.bundle,
|
|
||||||
Pid: s.pid,
|
|
||||||
Status: execs.status,
|
|
||||||
Stdin: execs.tty.stdin,
|
|
||||||
Stdout: execs.tty.stdout,
|
|
||||||
Stderr: execs.tty.stderr,
|
|
||||||
Terminal: execs.tty.terminal,
|
|
||||||
ExitStatus: uint32(execs.exitCode),
|
|
||||||
}, nil
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
// Pause the container
|
|
||||||
func (s *service) Pause(ctx context.Context, r *taskAPI.PauseRequest) (_ *ptypes.Empty, err error) {
|
|
||||||
defer func() {
|
|
||||||
err = toGRPC(err)
|
|
||||||
}()
|
|
||||||
|
|
||||||
s.mu.Lock()
|
|
||||||
defer s.mu.Unlock()
|
|
||||||
|
|
||||||
c, err := s.getContainer(r.ID)
|
|
||||||
if err != nil {
|
|
||||||
return nil, err
|
|
||||||
}
|
|
||||||
|
|
||||||
c.status = task.StatusPausing
|
|
||||||
|
|
||||||
err = s.sandbox.PauseContainer(r.ID)
|
|
||||||
if err == nil {
|
|
||||||
c.status = task.StatusPaused
|
|
||||||
s.send(&eventstypes.TaskPaused{
|
|
||||||
ContainerID: c.id,
|
|
||||||
})
|
|
||||||
return empty, nil
|
|
||||||
}
|
|
||||||
|
|
||||||
if status, err := s.getContainerStatus(c.id); err != nil {
|
|
||||||
c.status = task.StatusUnknown
|
|
||||||
} else {
|
|
||||||
c.status = status
|
|
||||||
}
|
|
||||||
|
|
||||||
return empty, err
|
|
||||||
}
|
|
||||||
|
|
||||||
// Resume the container
|
|
||||||
func (s *service) Resume(ctx context.Context, r *taskAPI.ResumeRequest) (_ *ptypes.Empty, err error) {
|
|
||||||
defer func() {
|
|
||||||
err = toGRPC(err)
|
|
||||||
}()
|
|
||||||
|
|
||||||
s.mu.Lock()
|
|
||||||
defer s.mu.Unlock()
|
|
||||||
|
|
||||||
c, err := s.getContainer(r.ID)
|
|
||||||
if err != nil {
|
|
||||||
return nil, err
|
|
||||||
}
|
|
||||||
|
|
||||||
err = s.sandbox.ResumeContainer(c.id)
|
|
||||||
if err == nil {
|
|
||||||
c.status = task.StatusRunning
|
|
||||||
s.send(&eventstypes.TaskResumed{
|
|
||||||
ContainerID: c.id,
|
|
||||||
})
|
|
||||||
return empty, nil
|
|
||||||
}
|
|
||||||
|
|
||||||
if status, err := s.getContainerStatus(c.id); err != nil {
|
|
||||||
c.status = task.StatusUnknown
|
|
||||||
} else {
|
|
||||||
c.status = status
|
|
||||||
}
|
|
||||||
|
|
||||||
return empty, err
|
|
||||||
}
|
|
||||||
|
|
||||||
// Kill a process with the provided signal
|
|
||||||
func (s *service) Kill(ctx context.Context, r *taskAPI.KillRequest) (_ *ptypes.Empty, err error) {
|
|
||||||
defer func() {
|
|
||||||
err = toGRPC(err)
|
|
||||||
}()
|
|
||||||
|
|
||||||
s.mu.Lock()
|
|
||||||
defer s.mu.Unlock()
|
|
||||||
|
|
||||||
signum := syscall.Signal(r.Signal)
|
|
||||||
|
|
||||||
c, err := s.getContainer(r.ID)
|
|
||||||
if err != nil {
|
|
||||||
return nil, err
|
|
||||||
}
|
|
||||||
|
|
||||||
// According to CRI specs, kubelet will call StopPodSandbox()
|
|
||||||
// at least once before calling RemovePodSandbox, and this call
|
|
||||||
// is idempotent, and must not return an error if all relevant
|
|
||||||
// resources have already been reclaimed. And in that call it will
|
|
||||||
// send a SIGKILL signal first to try to stop the container, thus
|
|
||||||
// once the container has terminated, here should ignore this signal
|
|
||||||
// and return directly.
|
|
||||||
if signum == syscall.SIGKILL || signum == syscall.SIGTERM {
|
|
||||||
if c.status == task.StatusStopped {
|
|
||||||
logrus.WithField("sandbox", s.sandbox.ID()).WithField("Container", c.id).Debug("Container has already been stopped")
|
|
||||||
return empty, nil
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
processID := c.id
|
|
||||||
if r.ExecID != "" {
|
|
||||||
execs, err := c.getExec(r.ExecID)
|
|
||||||
if err != nil {
|
|
||||||
return nil, err
|
|
||||||
}
|
|
||||||
processID = execs.id
|
|
||||||
if processID == "" {
|
|
||||||
logrus.WithFields(logrus.Fields{
|
|
||||||
"sandbox": s.sandbox.ID(),
|
|
||||||
"Container": c.id,
|
|
||||||
"ExecID": r.ExecID,
|
|
||||||
}).Debug("Id of exec process to be signalled is empty")
|
|
||||||
return empty, errors.New("The exec process does not exist")
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return empty, s.sandbox.SignalProcess(c.id, processID, signum, r.All)
|
|
||||||
}
|
|
||||||
|
|
||||||
// Pids returns all pids inside the container
|
|
||||||
// Since for kata, it cannot get the process's pid from VM,
|
|
||||||
// thus only return the Shim's pid directly.
|
|
||||||
func (s *service) Pids(ctx context.Context, r *taskAPI.PidsRequest) (_ *taskAPI.PidsResponse, err error) {
|
|
||||||
var processes []*task.ProcessInfo
|
|
||||||
|
|
||||||
defer func() {
|
|
||||||
err = toGRPC(err)
|
|
||||||
}()
|
|
||||||
|
|
||||||
pInfo := task.ProcessInfo{
|
|
||||||
Pid: s.pid,
|
|
||||||
}
|
|
||||||
processes = append(processes, &pInfo)
|
|
||||||
|
|
||||||
return &taskAPI.PidsResponse{
|
|
||||||
Processes: processes,
|
|
||||||
}, nil
|
|
||||||
}
|
|
||||||
|
|
||||||
// CloseIO of a process
|
|
||||||
func (s *service) CloseIO(ctx context.Context, r *taskAPI.CloseIORequest) (_ *ptypes.Empty, err error) {
|
|
||||||
defer func() {
|
|
||||||
err = toGRPC(err)
|
|
||||||
}()
|
|
||||||
|
|
||||||
s.mu.Lock()
|
|
||||||
defer s.mu.Unlock()
|
|
||||||
|
|
||||||
c, err := s.getContainer(r.ID)
|
|
||||||
if err != nil {
|
|
||||||
return nil, err
|
|
||||||
}
|
|
||||||
|
|
||||||
tty := c.ttyio
|
|
||||||
if r.ExecID != "" {
|
|
||||||
execs, err := c.getExec(r.ExecID)
|
|
||||||
if err != nil {
|
|
||||||
return nil, err
|
|
||||||
}
|
|
||||||
tty = execs.ttyio
|
|
||||||
}
|
|
||||||
|
|
||||||
if tty != nil && tty.Stdin != nil {
|
|
||||||
if err := tty.Stdin.Close(); err != nil {
|
|
||||||
return nil, errors.Wrap(err, "close stdin")
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return empty, nil
|
|
||||||
}
|
|
||||||
|
|
||||||
// Checkpoint the container
|
|
||||||
func (s *service) Checkpoint(ctx context.Context, r *taskAPI.CheckpointTaskRequest) (_ *ptypes.Empty, err error) {
|
|
||||||
defer func() {
|
|
||||||
err = toGRPC(err)
|
|
||||||
}()
|
|
||||||
|
|
||||||
return nil, errdefs.ToGRPCf(errdefs.ErrNotImplemented, "service Checkpoint")
|
|
||||||
}
|
|
||||||
|
|
||||||
// Connect returns shim information such as the shim's pid
|
|
||||||
func (s *service) Connect(ctx context.Context, r *taskAPI.ConnectRequest) (_ *taskAPI.ConnectResponse, err error) {
|
|
||||||
defer func() {
|
|
||||||
err = toGRPC(err)
|
|
||||||
}()
|
|
||||||
|
|
||||||
s.mu.Lock()
|
|
||||||
defer s.mu.Unlock()
|
|
||||||
|
|
||||||
return &taskAPI.ConnectResponse{
|
|
||||||
ShimPid: s.pid,
|
|
||||||
//Since kata cannot get the container's pid in VM, thus only return the shim's pid.
|
|
||||||
TaskPid: s.pid,
|
|
||||||
}, nil
|
|
||||||
}
|
|
||||||
|
|
||||||
func (s *service) Shutdown(ctx context.Context, r *taskAPI.ShutdownRequest) (_ *ptypes.Empty, err error) {
|
|
||||||
defer func() {
|
|
||||||
err = toGRPC(err)
|
|
||||||
}()
|
|
||||||
|
|
||||||
s.mu.Lock()
|
|
||||||
if len(s.containers) != 0 {
|
|
||||||
s.mu.Unlock()
|
|
||||||
return empty, nil
|
|
||||||
}
|
|
||||||
s.mu.Unlock()
|
|
||||||
|
|
||||||
s.cancel()
|
|
||||||
|
|
||||||
os.Exit(0)
|
|
||||||
|
|
||||||
// This will never be called, but this is only there to make sure the
|
|
||||||
// program can compile.
|
|
||||||
return empty, nil
|
|
||||||
}
|
|
||||||
|
|
||||||
func (s *service) Stats(ctx context.Context, r *taskAPI.StatsRequest) (_ *taskAPI.StatsResponse, err error) {
|
|
||||||
defer func() {
|
|
||||||
err = toGRPC(err)
|
|
||||||
}()
|
|
||||||
|
|
||||||
s.mu.Lock()
|
|
||||||
defer s.mu.Unlock()
|
|
||||||
|
|
||||||
c, err := s.getContainer(r.ID)
|
|
||||||
if err != nil {
|
|
||||||
return nil, err
|
|
||||||
}
|
|
||||||
|
|
||||||
data, err := marshalMetrics(s, c.id)
|
|
||||||
if err != nil {
|
|
||||||
return nil, err
|
|
||||||
}
|
|
||||||
|
|
||||||
return &taskAPI.StatsResponse{
|
|
||||||
Stats: data,
|
|
||||||
}, nil
|
|
||||||
}
|
|
||||||
|
|
||||||
// Update a running container
|
|
||||||
func (s *service) Update(ctx context.Context, r *taskAPI.UpdateTaskRequest) (_ *ptypes.Empty, err error) {
|
|
||||||
defer func() {
|
|
||||||
err = toGRPC(err)
|
|
||||||
}()
|
|
||||||
|
|
||||||
s.mu.Lock()
|
|
||||||
defer s.mu.Unlock()
|
|
||||||
|
|
||||||
var resources *specs.LinuxResources
|
|
||||||
v, err := typeurl.UnmarshalAny(r.Resources)
|
|
||||||
if err != nil {
|
|
||||||
return nil, err
|
|
||||||
}
|
|
||||||
resources, ok := v.(*specs.LinuxResources)
|
|
||||||
if !ok {
|
|
||||||
return nil, errdefs.ToGRPCf(errdefs.ErrInvalidArgument, "Invalid resources type for %s", s.id)
|
|
||||||
}
|
|
||||||
|
|
||||||
err = s.sandbox.UpdateContainer(r.ID, *resources)
|
|
||||||
if err != nil {
|
|
||||||
return nil, errdefs.ToGRPC(err)
|
|
||||||
}
|
|
||||||
|
|
||||||
return empty, nil
|
|
||||||
}
|
|
||||||
|
|
||||||
// Wait for a process to exit
|
|
||||||
func (s *service) Wait(ctx context.Context, r *taskAPI.WaitRequest) (_ *taskAPI.WaitResponse, err error) {
|
|
||||||
var ret uint32
|
|
||||||
|
|
||||||
defer func() {
|
|
||||||
err = toGRPC(err)
|
|
||||||
}()
|
|
||||||
|
|
||||||
s.mu.Lock()
|
|
||||||
c, err := s.getContainer(r.ID)
|
|
||||||
s.mu.Unlock()
|
|
||||||
|
|
||||||
if err != nil {
|
|
||||||
return nil, err
|
|
||||||
}
|
|
||||||
|
|
||||||
//wait for container
|
|
||||||
if r.ExecID == "" {
|
|
||||||
ret = <-c.exitCh
|
|
||||||
|
|
||||||
// refill the exitCh with the container process's exit code in case
|
|
||||||
// there were other waits on this process.
|
|
||||||
c.exitCh <- ret
|
|
||||||
} else { //wait for exec
|
|
||||||
execs, err := c.getExec(r.ExecID)
|
|
||||||
if err != nil {
|
|
||||||
return nil, err
|
|
||||||
}
|
|
||||||
ret = <-execs.exitCh
|
|
||||||
|
|
||||||
// refill the exitCh with the exec process's exit code in case
|
|
||||||
// there were other waits on this process.
|
|
||||||
execs.exitCh <- ret
|
|
||||||
}
|
|
||||||
|
|
||||||
return &taskAPI.WaitResponse{
|
|
||||||
ExitStatus: ret,
|
|
||||||
ExitedAt: c.exitTime,
|
|
||||||
}, nil
|
|
||||||
}
|
|
||||||
|
|
||||||
func (s *service) processExits() {
|
|
||||||
for e := range s.ec {
|
|
||||||
s.checkProcesses(e)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
func (s *service) checkProcesses(e exit) {
|
|
||||||
s.mu.Lock()
|
|
||||||
defer s.mu.Unlock()
|
|
||||||
|
|
||||||
id := e.execid
|
|
||||||
if id == "" {
|
|
||||||
id = e.id
|
|
||||||
}
|
|
||||||
|
|
||||||
s.sendL(&eventstypes.TaskExit{
|
|
||||||
ContainerID: e.id,
|
|
||||||
ID: id,
|
|
||||||
Pid: e.pid,
|
|
||||||
ExitStatus: uint32(e.status),
|
|
||||||
ExitedAt: e.timestamp,
|
|
||||||
})
|
|
||||||
}
|
|
||||||
|
|
||||||
func (s *service) getContainer(id string) (*container, error) {
|
|
||||||
c := s.containers[id]
|
|
||||||
|
|
||||||
if c == nil {
|
|
||||||
return nil, errdefs.ToGRPCf(errdefs.ErrNotFound, "container does not exist %s", id)
|
|
||||||
}
|
|
||||||
|
|
||||||
return c, nil
|
|
||||||
}
|
|
||||||
|
|
||||||
func (s *service) getContainerStatus(containerID string) (task.Status, error) {
|
|
||||||
cStatus, err := s.sandbox.StatusContainer(containerID)
|
|
||||||
if err != nil {
|
|
||||||
return task.StatusUnknown, err
|
|
||||||
}
|
|
||||||
|
|
||||||
var status task.Status
|
|
||||||
switch cStatus.State.State {
|
|
||||||
case types.StateReady:
|
|
||||||
status = task.StatusCreated
|
|
||||||
case types.StateRunning:
|
|
||||||
status = task.StatusRunning
|
|
||||||
case types.StatePaused:
|
|
||||||
status = task.StatusPaused
|
|
||||||
case types.StateStopped:
|
|
||||||
status = task.StatusStopped
|
|
||||||
}
|
|
||||||
|
|
||||||
return status, nil
|
|
||||||
}
|
|
||||||
121
src/runtime/vendor/github.com/kata-containers/runtime/containerd-shim-v2/start.go
generated
vendored
121
src/runtime/vendor/github.com/kata-containers/runtime/containerd-shim-v2/start.go
generated
vendored
@@ -1,121 +0,0 @@
|
|||||||
// Copyright (c) 2018 HyperHQ Inc.
|
|
||||||
//
|
|
||||||
// SPDX-License-Identifier: Apache-2.0
|
|
||||||
//
|
|
||||||
|
|
||||||
package containerdshim
|
|
||||||
|
|
||||||
import (
|
|
||||||
"context"
|
|
||||||
"fmt"
|
|
||||||
|
|
||||||
"github.com/containerd/containerd/api/types/task"
|
|
||||||
"github.com/kata-containers/runtime/pkg/katautils"
|
|
||||||
)
|
|
||||||
|
|
||||||
func startContainer(ctx context.Context, s *service, c *container) error {
|
|
||||||
//start a container
|
|
||||||
if c.cType == "" {
|
|
||||||
err := fmt.Errorf("Bug, the container %s type is empty", c.id)
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
|
|
||||||
if s.sandbox == nil {
|
|
||||||
err := fmt.Errorf("Bug, the sandbox hasn't been created for this container %s", c.id)
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
|
|
||||||
if c.cType.IsSandbox() {
|
|
||||||
err := s.sandbox.Start()
|
|
||||||
if err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
// Start monitor after starting sandbox
|
|
||||||
s.monitor, err = s.sandbox.Monitor()
|
|
||||||
if err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
go watchSandbox(s)
|
|
||||||
} else {
|
|
||||||
_, err := s.sandbox.StartContainer(c.id)
|
|
||||||
if err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// Run post-start OCI hooks.
|
|
||||||
err := katautils.EnterNetNS(s.sandbox.GetNetNs(), func() error {
|
|
||||||
return katautils.PostStartHooks(ctx, *c.spec, s.sandbox.ID(), c.bundle)
|
|
||||||
})
|
|
||||||
if err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
|
|
||||||
c.status = task.StatusRunning
|
|
||||||
|
|
||||||
stdin, stdout, stderr, err := s.sandbox.IOStream(c.id, c.id)
|
|
||||||
if err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
|
|
||||||
if c.stdin != "" || c.stdout != "" || c.stderr != "" {
|
|
||||||
tty, err := newTtyIO(ctx, c.stdin, c.stdout, c.stderr, c.terminal)
|
|
||||||
if err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
c.ttyio = tty
|
|
||||||
go ioCopy(c.exitIOch, tty, stdin, stdout, stderr)
|
|
||||||
} else {
|
|
||||||
//close the io exit channel, since there is no io for this container,
|
|
||||||
//otherwise the following wait goroutine will hang on this channel.
|
|
||||||
close(c.exitIOch)
|
|
||||||
}
|
|
||||||
|
|
||||||
go wait(s, c, "")
|
|
||||||
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
|
|
||||||
func startExec(ctx context.Context, s *service, containerID, execID string) (*exec, error) {
|
|
||||||
//start an exec
|
|
||||||
c, err := s.getContainer(containerID)
|
|
||||||
if err != nil {
|
|
||||||
return nil, err
|
|
||||||
}
|
|
||||||
|
|
||||||
execs, err := c.getExec(execID)
|
|
||||||
if err != nil {
|
|
||||||
return nil, err
|
|
||||||
}
|
|
||||||
|
|
||||||
_, proc, err := s.sandbox.EnterContainer(containerID, *execs.cmds)
|
|
||||||
if err != nil {
|
|
||||||
err := fmt.Errorf("cannot enter container %s, with err %s", containerID, err)
|
|
||||||
return nil, err
|
|
||||||
}
|
|
||||||
execs.id = proc.Token
|
|
||||||
|
|
||||||
execs.status = task.StatusRunning
|
|
||||||
if execs.tty.height != 0 && execs.tty.width != 0 {
|
|
||||||
err = s.sandbox.WinsizeProcess(c.id, execs.id, execs.tty.height, execs.tty.width)
|
|
||||||
if err != nil {
|
|
||||||
return nil, err
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
stdin, stdout, stderr, err := s.sandbox.IOStream(c.id, execs.id)
|
|
||||||
if err != nil {
|
|
||||||
return nil, err
|
|
||||||
}
|
|
||||||
tty, err := newTtyIO(ctx, execs.tty.stdin, execs.tty.stdout, execs.tty.stderr, execs.tty.terminal)
|
|
||||||
if err != nil {
|
|
||||||
return nil, err
|
|
||||||
}
|
|
||||||
execs.ttyio = tty
|
|
||||||
|
|
||||||
go ioCopy(execs.exitIOch, tty, stdin, stdout, stderr)
|
|
||||||
|
|
||||||
go wait(s, c, execID)
|
|
||||||
|
|
||||||
return execs, nil
|
|
||||||
}
|
|
||||||
127
src/runtime/vendor/github.com/kata-containers/runtime/containerd-shim-v2/stream.go
generated
vendored
127
src/runtime/vendor/github.com/kata-containers/runtime/containerd-shim-v2/stream.go
generated
vendored
@@ -1,127 +0,0 @@
|
|||||||
// Copyright (c) 2018 HyperHQ Inc.
|
|
||||||
//
|
|
||||||
// SPDX-License-Identifier: Apache-2.0
|
|
||||||
//
|
|
||||||
|
|
||||||
package containerdshim
|
|
||||||
|
|
||||||
import (
|
|
||||||
"context"
|
|
||||||
"io"
|
|
||||||
"sync"
|
|
||||||
"syscall"
|
|
||||||
|
|
||||||
"github.com/containerd/fifo"
|
|
||||||
)
|
|
||||||
|
|
||||||
// The buffer size used to specify the buffer for IO streams copy
|
|
||||||
const bufSize = 32 << 10
|
|
||||||
|
|
||||||
var (
|
|
||||||
bufPool = sync.Pool{
|
|
||||||
New: func() interface{} {
|
|
||||||
buffer := make([]byte, bufSize)
|
|
||||||
return &buffer
|
|
||||||
},
|
|
||||||
}
|
|
||||||
)
|
|
||||||
|
|
||||||
type ttyIO struct {
|
|
||||||
Stdin io.ReadCloser
|
|
||||||
Stdout io.Writer
|
|
||||||
Stderr io.Writer
|
|
||||||
}
|
|
||||||
|
|
||||||
func (tty *ttyIO) close() {
|
|
||||||
|
|
||||||
if tty.Stdin != nil {
|
|
||||||
tty.Stdin.Close()
|
|
||||||
}
|
|
||||||
cf := func(w io.Writer) {
|
|
||||||
if w == nil {
|
|
||||||
return
|
|
||||||
}
|
|
||||||
if c, ok := w.(io.WriteCloser); ok {
|
|
||||||
c.Close()
|
|
||||||
}
|
|
||||||
}
|
|
||||||
cf(tty.Stdout)
|
|
||||||
cf(tty.Stderr)
|
|
||||||
}
|
|
||||||
|
|
||||||
func newTtyIO(ctx context.Context, stdin, stdout, stderr string, console bool) (*ttyIO, error) {
|
|
||||||
var in io.ReadCloser
|
|
||||||
var outw io.Writer
|
|
||||||
var errw io.Writer
|
|
||||||
var err error
|
|
||||||
|
|
||||||
if stdin != "" {
|
|
||||||
in, err = fifo.OpenFifo(ctx, stdin, syscall.O_RDONLY|syscall.O_NONBLOCK, 0)
|
|
||||||
if err != nil {
|
|
||||||
return nil, err
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if stdout != "" {
|
|
||||||
outw, err = fifo.OpenFifo(ctx, stdout, syscall.O_RDWR, 0)
|
|
||||||
if err != nil {
|
|
||||||
return nil, err
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if !console && stderr != "" {
|
|
||||||
errw, err = fifo.OpenFifo(ctx, stderr, syscall.O_RDWR, 0)
|
|
||||||
if err != nil {
|
|
||||||
return nil, err
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
ttyIO := &ttyIO{
|
|
||||||
Stdin: in,
|
|
||||||
Stdout: outw,
|
|
||||||
Stderr: errw,
|
|
||||||
}
|
|
||||||
|
|
||||||
return ttyIO, nil
|
|
||||||
}
|
|
||||||
|
|
||||||
func ioCopy(exitch chan struct{}, tty *ttyIO, stdinPipe io.WriteCloser, stdoutPipe, stderrPipe io.Reader) {
|
|
||||||
var wg sync.WaitGroup
|
|
||||||
var closeOnce sync.Once
|
|
||||||
|
|
||||||
if tty.Stdin != nil {
|
|
||||||
wg.Add(1)
|
|
||||||
go func() {
|
|
||||||
p := bufPool.Get().(*[]byte)
|
|
||||||
defer bufPool.Put(p)
|
|
||||||
io.CopyBuffer(stdinPipe, tty.Stdin, *p)
|
|
||||||
wg.Done()
|
|
||||||
}()
|
|
||||||
}
|
|
||||||
|
|
||||||
if tty.Stdout != nil {
|
|
||||||
wg.Add(1)
|
|
||||||
|
|
||||||
go func() {
|
|
||||||
p := bufPool.Get().(*[]byte)
|
|
||||||
defer bufPool.Put(p)
|
|
||||||
io.CopyBuffer(tty.Stdout, stdoutPipe, *p)
|
|
||||||
wg.Done()
|
|
||||||
closeOnce.Do(tty.close)
|
|
||||||
}()
|
|
||||||
}
|
|
||||||
|
|
||||||
if tty.Stderr != nil && stderrPipe != nil {
|
|
||||||
wg.Add(1)
|
|
||||||
go func() {
|
|
||||||
p := bufPool.Get().(*[]byte)
|
|
||||||
defer bufPool.Put(p)
|
|
||||||
io.CopyBuffer(tty.Stderr, stderrPipe, *p)
|
|
||||||
wg.Done()
|
|
||||||
}()
|
|
||||||
}
|
|
||||||
|
|
||||||
wg.Wait()
|
|
||||||
closeOnce.Do(tty.close)
|
|
||||||
close(exitch)
|
|
||||||
}
|
|
||||||
135
src/runtime/vendor/github.com/kata-containers/runtime/containerd-shim-v2/utils.go
generated
vendored
135
src/runtime/vendor/github.com/kata-containers/runtime/containerd-shim-v2/utils.go
generated
vendored
@@ -1,135 +0,0 @@
|
|||||||
// Copyright (c) 2017 Intel Corporation
|
|
||||||
// Copyright (c) 2018 HyperHQ Inc.
|
|
||||||
//
|
|
||||||
// SPDX-License-Identifier: Apache-2.0
|
|
||||||
//
|
|
||||||
|
|
||||||
package containerdshim
|
|
||||||
|
|
||||||
import (
|
|
||||||
"context"
|
|
||||||
"fmt"
|
|
||||||
"os"
|
|
||||||
"path/filepath"
|
|
||||||
"time"
|
|
||||||
|
|
||||||
"github.com/containerd/containerd/mount"
|
|
||||||
cdshim "github.com/containerd/containerd/runtime/v2/shim"
|
|
||||||
"github.com/kata-containers/runtime/pkg/katautils"
|
|
||||||
vc "github.com/kata-containers/runtime/virtcontainers"
|
|
||||||
"github.com/kata-containers/runtime/virtcontainers/pkg/compatoci"
|
|
||||||
"github.com/kata-containers/runtime/virtcontainers/pkg/oci"
|
|
||||||
"github.com/opencontainers/runtime-spec/specs-go"
|
|
||||||
"github.com/sirupsen/logrus"
|
|
||||||
)
|
|
||||||
|
|
||||||
func cReap(s *service, status int, id, execid string, exitat time.Time) {
|
|
||||||
s.ec <- exit{
|
|
||||||
timestamp: exitat,
|
|
||||||
pid: s.pid,
|
|
||||||
status: status,
|
|
||||||
id: id,
|
|
||||||
execid: execid,
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
func cleanupContainer(ctx context.Context, sid, cid, bundlePath string) error {
|
|
||||||
logrus.WithField("Service", "Cleanup").WithField("container", cid).Info("Cleanup container")
|
|
||||||
|
|
||||||
err := vci.CleanupContainer(ctx, sid, cid, true)
|
|
||||||
if err != nil {
|
|
||||||
logrus.WithError(err).WithField("container", cid).Warn("failed to cleanup container")
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
|
|
||||||
rootfs := filepath.Join(bundlePath, "rootfs")
|
|
||||||
|
|
||||||
if err := mount.UnmountAll(rootfs, 0); err != nil {
|
|
||||||
logrus.WithError(err).WithField("container", cid).Warn("failed to cleanup container rootfs")
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
|
|
||||||
func validBundle(containerID, bundlePath string) (string, error) {
|
|
||||||
// container ID MUST be provided.
|
|
||||||
if containerID == "" {
|
|
||||||
return "", fmt.Errorf("Missing container ID")
|
|
||||||
}
|
|
||||||
|
|
||||||
// bundle path MUST be provided.
|
|
||||||
if bundlePath == "" {
|
|
||||||
return "", fmt.Errorf("Missing bundle path")
|
|
||||||
}
|
|
||||||
|
|
||||||
// bundle path MUST be valid.
|
|
||||||
fileInfo, err := os.Stat(bundlePath)
|
|
||||||
if err != nil {
|
|
||||||
return "", fmt.Errorf("Invalid bundle path '%s': %s", bundlePath, err)
|
|
||||||
}
|
|
||||||
if !fileInfo.IsDir() {
|
|
||||||
return "", fmt.Errorf("Invalid bundle path '%s', it should be a directory", bundlePath)
|
|
||||||
}
|
|
||||||
|
|
||||||
resolved, err := katautils.ResolvePath(bundlePath)
|
|
||||||
if err != nil {
|
|
||||||
return "", err
|
|
||||||
}
|
|
||||||
|
|
||||||
return resolved, nil
|
|
||||||
}
|
|
||||||
|
|
||||||
func getAddress(ctx context.Context, bundlePath, id string) (string, error) {
|
|
||||||
var err error
|
|
||||||
|
|
||||||
// Checks the MUST and MUST NOT from OCI runtime specification
|
|
||||||
if bundlePath, err = validBundle(id, bundlePath); err != nil {
|
|
||||||
return "", err
|
|
||||||
}
|
|
||||||
|
|
||||||
ociSpec, err := compatoci.ParseConfigJSON(bundlePath)
|
|
||||||
if err != nil {
|
|
||||||
return "", err
|
|
||||||
}
|
|
||||||
|
|
||||||
containerType, err := oci.ContainerType(ociSpec)
|
|
||||||
if err != nil {
|
|
||||||
return "", err
|
|
||||||
}
|
|
||||||
|
|
||||||
if containerType == vc.PodContainer {
|
|
||||||
sandboxID, err := oci.SandboxID(ociSpec)
|
|
||||||
if err != nil {
|
|
||||||
return "", err
|
|
||||||
}
|
|
||||||
address, err := cdshim.SocketAddress(ctx, sandboxID)
|
|
||||||
if err != nil {
|
|
||||||
return "", err
|
|
||||||
}
|
|
||||||
return address, nil
|
|
||||||
}
|
|
||||||
|
|
||||||
return "", nil
|
|
||||||
}
|
|
||||||
|
|
||||||
func noNeedForOutput(detach bool, tty bool) bool {
|
|
||||||
if !detach {
|
|
||||||
return false
|
|
||||||
}
|
|
||||||
|
|
||||||
if !tty {
|
|
||||||
return false
|
|
||||||
}
|
|
||||||
|
|
||||||
return true
|
|
||||||
}
|
|
||||||
|
|
||||||
func removeNamespace(s *specs.Spec, nsType specs.LinuxNamespaceType) {
|
|
||||||
for i, n := range s.Linux.Namespaces {
|
|
||||||
if n.Type == nsType {
|
|
||||||
s.Linux.Namespaces = append(s.Linux.Namespaces[:i], s.Linux.Namespaces[i+1:]...)
|
|
||||||
return
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
128
src/runtime/vendor/github.com/kata-containers/runtime/containerd-shim-v2/wait.go
generated
vendored
128
src/runtime/vendor/github.com/kata-containers/runtime/containerd-shim-v2/wait.go
generated
vendored
@@ -1,128 +0,0 @@
|
|||||||
// Copyright (c) 2018 HyperHQ Inc.
|
|
||||||
//
|
|
||||||
// SPDX-License-Identifier: Apache-2.0
|
|
||||||
//
|
|
||||||
|
|
||||||
package containerdshim
|
|
||||||
|
|
||||||
import (
|
|
||||||
"path"
|
|
||||||
"time"
|
|
||||||
|
|
||||||
"github.com/containerd/containerd/api/types/task"
|
|
||||||
"github.com/containerd/containerd/mount"
|
|
||||||
"github.com/sirupsen/logrus"
|
|
||||||
)
|
|
||||||
|
|
||||||
func wait(s *service, c *container, execID string) (int32, error) {
|
|
||||||
var execs *exec
|
|
||||||
var err error
|
|
||||||
|
|
||||||
processID := c.id
|
|
||||||
|
|
||||||
if execID == "" {
|
|
||||||
//wait until the io closed, then wait the container
|
|
||||||
<-c.exitIOch
|
|
||||||
} else {
|
|
||||||
execs, err = c.getExec(execID)
|
|
||||||
if err != nil {
|
|
||||||
return exitCode255, err
|
|
||||||
}
|
|
||||||
<-execs.exitIOch
|
|
||||||
//This wait could be triggered before exec start which
|
|
||||||
//will get the exec's id, thus this assignment must after
|
|
||||||
//the exec exit, to make sure it get the exec's id.
|
|
||||||
processID = execs.id
|
|
||||||
}
|
|
||||||
|
|
||||||
ret, err := s.sandbox.WaitProcess(c.id, processID)
|
|
||||||
if err != nil {
|
|
||||||
logrus.WithError(err).WithFields(logrus.Fields{
|
|
||||||
"container": c.id,
|
|
||||||
"pid": processID,
|
|
||||||
}).Error("Wait for process failed")
|
|
||||||
}
|
|
||||||
|
|
||||||
timeStamp := time.Now()
|
|
||||||
|
|
||||||
s.mu.Lock()
|
|
||||||
if execID == "" {
|
|
||||||
// Take care of the use case where it is a sandbox.
|
|
||||||
// Right after the container representing the sandbox has
|
|
||||||
// been deleted, let's make sure we stop and delete the
|
|
||||||
// sandbox.
|
|
||||||
|
|
||||||
if c.cType.IsSandbox() {
|
|
||||||
// cancel watcher
|
|
||||||
if s.monitor != nil {
|
|
||||||
s.monitor <- nil
|
|
||||||
}
|
|
||||||
if err = s.sandbox.Stop(true); err != nil {
|
|
||||||
logrus.WithField("sandbox", s.sandbox.ID()).Error("failed to stop sandbox")
|
|
||||||
}
|
|
||||||
|
|
||||||
if err = s.sandbox.Delete(); err != nil {
|
|
||||||
logrus.WithField("sandbox", s.sandbox.ID()).Error("failed to delete sandbox")
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
if _, err = s.sandbox.StopContainer(c.id, false); err != nil {
|
|
||||||
logrus.WithError(err).WithField("container", c.id).Warn("stop container failed")
|
|
||||||
}
|
|
||||||
}
|
|
||||||
c.status = task.StatusStopped
|
|
||||||
c.exit = uint32(ret)
|
|
||||||
c.exitTime = timeStamp
|
|
||||||
|
|
||||||
c.exitCh <- uint32(ret)
|
|
||||||
|
|
||||||
} else {
|
|
||||||
execs.status = task.StatusStopped
|
|
||||||
execs.exitCode = ret
|
|
||||||
execs.exitTime = timeStamp
|
|
||||||
|
|
||||||
execs.exitCh <- uint32(ret)
|
|
||||||
}
|
|
||||||
s.mu.Unlock()
|
|
||||||
|
|
||||||
go cReap(s, int(ret), c.id, execID, timeStamp)
|
|
||||||
|
|
||||||
return ret, nil
|
|
||||||
}
|
|
||||||
|
|
||||||
func watchSandbox(s *service) {
|
|
||||||
if s.monitor == nil {
|
|
||||||
return
|
|
||||||
}
|
|
||||||
err := <-s.monitor
|
|
||||||
if err == nil {
|
|
||||||
return
|
|
||||||
}
|
|
||||||
s.monitor = nil
|
|
||||||
|
|
||||||
s.mu.Lock()
|
|
||||||
defer s.mu.Unlock()
|
|
||||||
// sandbox malfunctioning, cleanup as much as we can
|
|
||||||
logrus.WithError(err).Warn("sandbox stopped unexpectedly")
|
|
||||||
err = s.sandbox.Stop(true)
|
|
||||||
if err != nil {
|
|
||||||
logrus.WithError(err).Warn("stop sandbox failed")
|
|
||||||
}
|
|
||||||
err = s.sandbox.Delete()
|
|
||||||
if err != nil {
|
|
||||||
logrus.WithError(err).Warn("delete sandbox failed")
|
|
||||||
}
|
|
||||||
|
|
||||||
for _, c := range s.containers {
|
|
||||||
if !c.mounted {
|
|
||||||
continue
|
|
||||||
}
|
|
||||||
rootfs := path.Join(c.bundle, "rootfs")
|
|
||||||
logrus.WithField("rootfs", rootfs).WithField("id", c.id).Debug("container umount rootfs")
|
|
||||||
if err := mount.UnmountAll(rootfs, 0); err != nil {
|
|
||||||
logrus.WithError(err).Warn("failed to cleanup rootfs mount")
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// Existing container/exec will be cleaned up by its waiters.
|
|
||||||
// No need to send async events here.
|
|
||||||
}
|
|
||||||
178
src/runtime/vendor/github.com/kata-containers/runtime/pkg/katatestutils/README.md
generated
vendored
178
src/runtime/vendor/github.com/kata-containers/runtime/pkg/katatestutils/README.md
generated
vendored
@@ -1,178 +0,0 @@
|
|||||||
# Kata test utilities
|
|
||||||
|
|
||||||
* [Test Constraints](#test-constraints)
|
|
||||||
* [Usage](#usage)
|
|
||||||
* [Displaying the `TestConstraint`](#displaying-the-testconstraint)
|
|
||||||
* [Associating an issue with a constraint](#associating-an-issue-with-a-constraint)
|
|
||||||
* [Examples](#examples)
|
|
||||||
* [Skip tests based on user](#skip-tests-based-on-user)
|
|
||||||
* [Skip tests based on distro](#skip-tests-based-on-distro)
|
|
||||||
* [Skip tests based on kernel version](#skip-tests-based-on-kernel-version)
|
|
||||||
* [Full details](#full-details)
|
|
||||||
|
|
||||||
This package provides a small set of test utilities. See the
|
|
||||||
[GoDoc](https://godoc.org/github.com/kata-containers/runtime/pkg/katatestutils)
|
|
||||||
for full details.
|
|
||||||
|
|
||||||
## Test Constraints
|
|
||||||
|
|
||||||
This package provides helper functions that accept user-specified constraints
|
|
||||||
that allow you to skip tests.
|
|
||||||
|
|
||||||
### Usage
|
|
||||||
|
|
||||||
Create a `TestConstraint` object using the `NewTestConstraint()` constructor.
|
|
||||||
This takes a single boolean parameter that specifies if debug output is generated.
|
|
||||||
|
|
||||||
In each test that has particular test constraints, call the `NotValid()`
|
|
||||||
method on the `TestConstraint` object, passing one or more constraints that
|
|
||||||
you want to be valid.
|
|
||||||
|
|
||||||
The `NotValid()` function returns `true` if any of the specified constraints
|
|
||||||
are not available. This allows for a more natural way to code an arbitrarily
|
|
||||||
complex test skip as shown in the following example.
|
|
||||||
|
|
||||||
The main object is created in the `init()` function to make it available for
|
|
||||||
all tests:
|
|
||||||
|
|
||||||
```go
|
|
||||||
|
|
||||||
import ktu "katatestutils"
|
|
||||||
|
|
||||||
var tc ktu.TestConstraint
|
|
||||||
|
|
||||||
func init() {
|
|
||||||
tc = NewTestConstraint(true)
|
|
||||||
}
|
|
||||||
|
|
||||||
func TestFoo(t *testing.T) {
|
|
||||||
|
|
||||||
// Specify one or more constraint functions. If not satisfied, the test
|
|
||||||
// will be skipped.
|
|
||||||
if tc.NotValid(...) {
|
|
||||||
t.Skip("skipping test")
|
|
||||||
}
|
|
||||||
|
|
||||||
// Test code ...
|
|
||||||
}
|
|
||||||
```
|
|
||||||
|
|
||||||
#### Displaying the `TestConstraint`
|
|
||||||
|
|
||||||
Note that you could add the `TestConstraint` object to the `Skip()` call as it
|
|
||||||
will provide details of why the skip occurred:
|
|
||||||
|
|
||||||
```go
|
|
||||||
if tc.NotValid(...) {
|
|
||||||
t.Skipf("skipping test as requirements not met: %v", tc)
|
|
||||||
}
|
|
||||||
```
|
|
||||||
|
|
||||||
#### Associating an issue with a constraint
|
|
||||||
|
|
||||||
You can add a constraint which specifies an issue URL for the skip. No
|
|
||||||
checking is performed on the issue but if specified, it will be added to the
|
|
||||||
`TestConstraint` and recorded in error messages and when that object is
|
|
||||||
displayed:
|
|
||||||
|
|
||||||
```go
|
|
||||||
if tc.NotValid(WithIssue("https://github.com/kata-containers/runtime/issues/1586"), ...) {
|
|
||||||
t.Skipf("skipping test as requirements not met: %v", tc)
|
|
||||||
}
|
|
||||||
```
|
|
||||||
|
|
||||||
### Examples
|
|
||||||
|
|
||||||
#### Skip tests based on user
|
|
||||||
|
|
||||||
Use the `NeedRoot()` constraint to skip a test unless running as `root`:
|
|
||||||
|
|
||||||
```go
|
|
||||||
func TestOnlyRunWhenRoot(t *testing.T) {
|
|
||||||
|
|
||||||
if tc.NotValid(ktu.NeedRoot()) {
|
|
||||||
t.Skip("skipping test as not running as root user")
|
|
||||||
}
|
|
||||||
|
|
||||||
// Test code to run as root user ...
|
|
||||||
}
|
|
||||||
```
|
|
||||||
|
|
||||||
Use the `NeedNonRoot()` constraint to skip a test unless running as a
|
|
||||||
non-`root` user:
|
|
||||||
|
|
||||||
```go
|
|
||||||
func TestOnlyRunWhenNotRoot(t *testing.T) {
|
|
||||||
|
|
||||||
if tc.NotValid(ktu.NeedNonRoot()) {
|
|
||||||
t.Skip("skipping test as running as root user")
|
|
||||||
}
|
|
||||||
|
|
||||||
// Test code to run as non-root user ...
|
|
||||||
}
|
|
||||||
```
|
|
||||||
|
|
||||||
#### Skip tests based on distro
|
|
||||||
|
|
||||||
Use the `NeedDistro()` constraint to skip a test unless running on a
|
|
||||||
particular Linux distribution:
|
|
||||||
|
|
||||||
```go
|
|
||||||
func TestOnlyRunOnUbuntu(t *testing.T) {
|
|
||||||
|
|
||||||
if tc.NotValid(ktu.NeedDistro("ubuntu")) {
|
|
||||||
t.Skip("skipping test as not running on ubuntu")
|
|
||||||
}
|
|
||||||
|
|
||||||
// Test code to run on Ubuntu only ...
|
|
||||||
}
|
|
||||||
```
|
|
||||||
|
|
||||||
Use the `NeedDistroNotEquals()` constraint to skip a test unless running
|
|
||||||
on a Linux distribution other than the one specified:
|
|
||||||
|
|
||||||
```go
|
|
||||||
func TestDontRunOnFedora(t *testing.T) {
|
|
||||||
|
|
||||||
if tc.NotValid(ktu.NeedDistroNotEquals("fedora")) {
|
|
||||||
t.Skip("skipping test as running on fedora")
|
|
||||||
}
|
|
||||||
|
|
||||||
// Test code to run on any distro apart from Fedora ...
|
|
||||||
}
|
|
||||||
```
|
|
||||||
|
|
||||||
#### Skip tests based on kernel version
|
|
||||||
|
|
||||||
Use the `NeedKernelVersionGE()` constraint to skip a test unless running on a
|
|
||||||
system with at least the specified kernel version:
|
|
||||||
|
|
||||||
```go
|
|
||||||
func TestNewKernelVersion(t *testing.T) {
|
|
||||||
|
|
||||||
if tc.NotValid(ktu.NeedKernelVersionGE("5.0.10")) {
|
|
||||||
t.Skip("skipping test as kernel is too old")
|
|
||||||
}
|
|
||||||
|
|
||||||
// Test code to run on specified kernel version (or newer) ...
|
|
||||||
}
|
|
||||||
```
|
|
||||||
|
|
||||||
Use the `NeedKernelVersionLT()` constraint to skip a test unless running on a
|
|
||||||
system whose kernel is older than the specified kernel version:
|
|
||||||
|
|
||||||
```go
|
|
||||||
func TestOldKernelVersion(t *testing.T) {
|
|
||||||
|
|
||||||
if tc.NotValid(ktu.NeedKernelVersionLT("4.14.114")) {
|
|
||||||
t.Skip("skipping test as kernel is too new")
|
|
||||||
}
|
|
||||||
|
|
||||||
// Test code to run on specified kernel version (or newer) ...
|
|
||||||
}
|
|
||||||
```
|
|
||||||
|
|
||||||
### Full details
|
|
||||||
|
|
||||||
The public API is shown in [`constraints_api.go`](constraints_api.go) or
|
|
||||||
the [GoDoc](https://godoc.org/github.com/kata-containers/runtime/pkg/katatestutils).
|
|
||||||
484
src/runtime/vendor/github.com/kata-containers/runtime/pkg/katatestutils/constraints.go
generated
vendored
484
src/runtime/vendor/github.com/kata-containers/runtime/pkg/katatestutils/constraints.go
generated
vendored
@@ -1,484 +0,0 @@
|
|||||||
// Copyright (c) 2019 Intel Corporation
|
|
||||||
//
|
|
||||||
// SPDX-License-Identifier: Apache-2.0
|
|
||||||
//
|
|
||||||
|
|
||||||
package katatestutils
|
|
||||||
|
|
||||||
import (
|
|
||||||
"errors"
|
|
||||||
"fmt"
|
|
||||||
"io/ioutil"
|
|
||||||
"os"
|
|
||||||
"strconv"
|
|
||||||
"strings"
|
|
||||||
|
|
||||||
"github.com/blang/semver"
|
|
||||||
)
|
|
||||||
|
|
||||||
const (
|
|
||||||
TestDisabledNeedRoot = "Test disabled as requires root user"
|
|
||||||
TestDisabledNeedNonRoot = "Test disabled as requires non-root user"
|
|
||||||
|
|
||||||
// See https://www.freedesktop.org/software/systemd/man/os-release.html
|
|
||||||
osRelease = "/etc/os-release"
|
|
||||||
osReleaseAlternative = "/usr/lib/os-release"
|
|
||||||
)
|
|
||||||
|
|
||||||
var (
|
|
||||||
errUnknownDistroName = errors.New("unknown distro name")
|
|
||||||
errUnknownDistroVersion = errors.New("unknown distro version")
|
|
||||||
errInvalidOpForConstraint = errors.New("invalid operator for constraint type")
|
|
||||||
)
|
|
||||||
|
|
||||||
// String converts the operator to a human-readable value.
|
|
||||||
func (o Operator) String() (s string) {
|
|
||||||
switch o {
|
|
||||||
case eqOperator:
|
|
||||||
s = "=="
|
|
||||||
case geOperator:
|
|
||||||
s = ">="
|
|
||||||
case gtOperator:
|
|
||||||
s = ">"
|
|
||||||
case leOperator:
|
|
||||||
s = "<="
|
|
||||||
case ltOperator:
|
|
||||||
s = "<"
|
|
||||||
case neOperator:
|
|
||||||
s = "!="
|
|
||||||
}
|
|
||||||
|
|
||||||
return s
|
|
||||||
}
|
|
||||||
|
|
||||||
// Result is the outcome of a Constraint test
|
|
||||||
type Result struct {
|
|
||||||
// Details of the constraint
|
|
||||||
// (human-readable result of testing for a Constraint).
|
|
||||||
Description string
|
|
||||||
|
|
||||||
// true if constraint was valid
|
|
||||||
Success bool
|
|
||||||
}
|
|
||||||
|
|
||||||
// GetFileContents return the file contents as a string.
|
|
||||||
func getFileContents(file string) (string, error) {
|
|
||||||
bytes, err := ioutil.ReadFile(file)
|
|
||||||
if err != nil {
|
|
||||||
return "", err
|
|
||||||
}
|
|
||||||
|
|
||||||
return string(bytes), nil
|
|
||||||
}
|
|
||||||
|
|
||||||
func getKernelVersion() (string, error) {
|
|
||||||
const procVersion = "/proc/version"
|
|
||||||
|
|
||||||
contents, err := getFileContents(procVersion)
|
|
||||||
if err != nil {
|
|
||||||
return "", err
|
|
||||||
}
|
|
||||||
|
|
||||||
fields := strings.Fields(contents)
|
|
||||||
l := len(fields)
|
|
||||||
if l < 3 {
|
|
||||||
return "", fmt.Errorf("unexpected contents in %v", procVersion)
|
|
||||||
}
|
|
||||||
|
|
||||||
return fixKernelVersion(fields[2]), nil
|
|
||||||
}
|
|
||||||
|
|
||||||
// getDistroDetails returns the distributions name and version string.
|
|
||||||
// If it is not possible to determine both values an error is
|
|
||||||
// returned.
|
|
||||||
func getDistroDetails() (name, version string, err error) {
|
|
||||||
files := []string{osRelease, osReleaseAlternative}
|
|
||||||
name = ""
|
|
||||||
version = ""
|
|
||||||
|
|
||||||
for _, file := range files {
|
|
||||||
contents, err := getFileContents(file)
|
|
||||||
if err != nil {
|
|
||||||
if os.IsNotExist(err) {
|
|
||||||
continue
|
|
||||||
}
|
|
||||||
|
|
||||||
return "", "", err
|
|
||||||
}
|
|
||||||
|
|
||||||
lines := strings.Split(contents, "\n")
|
|
||||||
|
|
||||||
for _, line := range lines {
|
|
||||||
if strings.HasPrefix(line, "ID=") && name == "" {
|
|
||||||
fields := strings.Split(line, "=")
|
|
||||||
name = strings.Trim(fields[1], `"`)
|
|
||||||
name = strings.ToLower(name)
|
|
||||||
} else if strings.HasPrefix(line, "VERSION_ID=") && version == "" {
|
|
||||||
fields := strings.Split(line, "=")
|
|
||||||
version = strings.Trim(fields[1], `"`)
|
|
||||||
version = strings.ToLower(version)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if name != "" && version != "" {
|
|
||||||
return name, version, nil
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if name == "" {
|
|
||||||
return "", "", errUnknownDistroName
|
|
||||||
}
|
|
||||||
|
|
||||||
if version == "" {
|
|
||||||
return "", "", errUnknownDistroVersion
|
|
||||||
}
|
|
||||||
|
|
||||||
return name, version, nil
|
|
||||||
}
|
|
||||||
|
|
||||||
// fixKernelVersion replaces underscores with dashes in a version string.
|
|
||||||
// This change is primarily for Fedora, RHEL and CentOS version numbers which
|
|
||||||
// can contain underscores. By replacing them with dashes, a valid semantic
|
|
||||||
// version string is created.
|
|
||||||
//
|
|
||||||
// Examples of actual kernel versions which can be made into valid semver
|
|
||||||
// format by calling this function:
|
|
||||||
//
|
|
||||||
// centos: 3.10.0-957.12.1.el7.x86_64
|
|
||||||
// fedora: 5.0.9-200.fc29.x86_64
|
|
||||||
//
|
|
||||||
func fixKernelVersion(version string) string {
|
|
||||||
return strings.Replace(version, "_", "-", -1)
|
|
||||||
}
|
|
||||||
|
|
||||||
// handleDistroName checks that the current distro is compatible with
|
|
||||||
// the constraint specified by the arguments.
|
|
||||||
func (tc *TestConstraint) handleDistroName(name string, op Operator) (result Result, err error) {
|
|
||||||
if name == "" {
|
|
||||||
return Result{}, fmt.Errorf("distro name cannot be blank")
|
|
||||||
}
|
|
||||||
|
|
||||||
name = strings.ToLower(name)
|
|
||||||
|
|
||||||
var success bool
|
|
||||||
|
|
||||||
switch op {
|
|
||||||
case eqOperator:
|
|
||||||
success = name == tc.DistroName
|
|
||||||
case neOperator:
|
|
||||||
success = name != tc.DistroName
|
|
||||||
default:
|
|
||||||
return Result{}, errInvalidOpForConstraint
|
|
||||||
}
|
|
||||||
|
|
||||||
descr := fmt.Sprintf("need distro %s %q, got distro %q", op, name, tc.DistroName)
|
|
||||||
|
|
||||||
result = Result{
|
|
||||||
Description: descr,
|
|
||||||
Success: success,
|
|
||||||
}
|
|
||||||
|
|
||||||
return result, nil
|
|
||||||
}
|
|
||||||
|
|
||||||
// handleDistroVersion checks that the current distro version is compatible with
|
|
||||||
// the constraint specified by the arguments.
|
|
||||||
func (tc *TestConstraint) handleDistroVersion(version string, op Operator) (result Result, err error) {
|
|
||||||
return handleVersionType("distro", tc.DistroVersion, op, version)
|
|
||||||
}
|
|
||||||
|
|
||||||
// handleKernelVersion checks that the current kernel version is compatible with
|
|
||||||
// the constraint specified by the arguments.
|
|
||||||
func (tc *TestConstraint) handleKernelVersion(version string, op Operator) (result Result, err error) {
|
|
||||||
return handleVersionType("kernel", tc.KernelVersion, op, version)
|
|
||||||
}
|
|
||||||
|
|
||||||
// handleVersionType checks that the current and new versions are compatible with
|
|
||||||
// the constraint specified by the arguments. The versionName argument is a
|
|
||||||
// human-readable value to represent the currentVersion.
|
|
||||||
func handleVersionType(versionName, newVersion string, op Operator, currentVersion string) (result Result, err error) {
|
|
||||||
if versionName == "" {
|
|
||||||
return Result{}, fmt.Errorf("version name cannot be blank")
|
|
||||||
}
|
|
||||||
|
|
||||||
if newVersion == "" {
|
|
||||||
return Result{}, fmt.Errorf("new version cannot be blank")
|
|
||||||
}
|
|
||||||
|
|
||||||
if currentVersion == "" {
|
|
||||||
return Result{}, fmt.Errorf("current version cannot be blank")
|
|
||||||
}
|
|
||||||
|
|
||||||
newVersion = strings.ToLower(newVersion)
|
|
||||||
currentVersion = strings.ToLower(currentVersion)
|
|
||||||
|
|
||||||
newVersionElements := len(strings.Split(newVersion, "."))
|
|
||||||
currentVersionElements := len(strings.Split(currentVersion, "."))
|
|
||||||
|
|
||||||
var success bool
|
|
||||||
|
|
||||||
// Determine the type of version string based on the current version
|
|
||||||
switch currentVersionElements {
|
|
||||||
case 1:
|
|
||||||
// A simple integer version number.
|
|
||||||
if newVersionElements != 1 {
|
|
||||||
return Result{}, fmt.Errorf("%s version type (%q) is integer, but specified version (%s) is not",
|
|
||||||
versionName, currentVersion, newVersion)
|
|
||||||
}
|
|
||||||
|
|
||||||
success, err = evalIntVersion(newVersion, op, currentVersion)
|
|
||||||
case 2:
|
|
||||||
// A "floating point" version number in format "a.b".
|
|
||||||
if newVersionElements > 2 {
|
|
||||||
return Result{}, fmt.Errorf("%s version type (%q) is float, but specified version (%s) is not float or int",
|
|
||||||
versionName, currentVersion, newVersion)
|
|
||||||
}
|
|
||||||
|
|
||||||
success, err = evalFloatVersion(newVersion, op, currentVersion)
|
|
||||||
default:
|
|
||||||
// Assumed to be a semver format version string
|
|
||||||
// in format "a.b.c."
|
|
||||||
//
|
|
||||||
// Cannot check specified version here as semver is more
|
|
||||||
// complex - let the eval function detail with it.
|
|
||||||
|
|
||||||
success, err = evalSemverVersion(newVersion, op, currentVersion)
|
|
||||||
}
|
|
||||||
|
|
||||||
if err != nil {
|
|
||||||
return Result{}, err
|
|
||||||
}
|
|
||||||
|
|
||||||
descr := fmt.Sprintf("need %s version %s %q, got version %q",
|
|
||||||
versionName, op, currentVersion, newVersion)
|
|
||||||
|
|
||||||
result = Result{
|
|
||||||
Description: descr,
|
|
||||||
Success: success,
|
|
||||||
}
|
|
||||||
|
|
||||||
return result, nil
|
|
||||||
}
|
|
||||||
|
|
||||||
// evalIntVersion deals with integer version numbers
|
|
||||||
// (in format "a").
|
|
||||||
func evalIntVersion(newVersionStr string, op Operator, currentVersionStr string) (success bool, err error) {
|
|
||||||
newVersion, err := strconv.Atoi(newVersionStr)
|
|
||||||
if err != nil {
|
|
||||||
return false, err
|
|
||||||
}
|
|
||||||
|
|
||||||
currentVersion, err := strconv.Atoi(currentVersionStr)
|
|
||||||
if err != nil {
|
|
||||||
return false, err
|
|
||||||
}
|
|
||||||
|
|
||||||
switch op {
|
|
||||||
case eqOperator:
|
|
||||||
success = newVersion == currentVersion
|
|
||||||
case geOperator:
|
|
||||||
success = newVersion >= currentVersion
|
|
||||||
case gtOperator:
|
|
||||||
success = newVersion > currentVersion
|
|
||||||
case leOperator:
|
|
||||||
success = newVersion <= currentVersion
|
|
||||||
case ltOperator:
|
|
||||||
success = newVersion < currentVersion
|
|
||||||
case neOperator:
|
|
||||||
success = newVersion != currentVersion
|
|
||||||
default:
|
|
||||||
return false, errInvalidOpForConstraint
|
|
||||||
}
|
|
||||||
|
|
||||||
return success, err
|
|
||||||
}
|
|
||||||
|
|
||||||
// evalFloatVersion deals with "floating point" version numbers
|
|
||||||
// (in format "a.b").
|
|
||||||
//
|
|
||||||
// Note that (implicitly) the specified version number provided by the user
|
|
||||||
// may in fact be an integer value which will be converted into a float.
|
|
||||||
func evalFloatVersion(newVersionStr string, op Operator, currentVersionStr string) (success bool, err error) {
|
|
||||||
// If this many bits is insufficient to represent a version number, we
|
|
||||||
// have problems...!
|
|
||||||
const bitSize = 32
|
|
||||||
|
|
||||||
newVersion, err := strconv.ParseFloat(newVersionStr, bitSize)
|
|
||||||
if err != nil {
|
|
||||||
return false, err
|
|
||||||
}
|
|
||||||
|
|
||||||
currentVersion, err := strconv.ParseFloat(currentVersionStr, bitSize)
|
|
||||||
if err != nil {
|
|
||||||
return false, err
|
|
||||||
}
|
|
||||||
|
|
||||||
switch op {
|
|
||||||
case eqOperator:
|
|
||||||
success = newVersion == currentVersion
|
|
||||||
case geOperator:
|
|
||||||
success = newVersion >= currentVersion
|
|
||||||
case gtOperator:
|
|
||||||
success = newVersion > currentVersion
|
|
||||||
case leOperator:
|
|
||||||
success = newVersion <= currentVersion
|
|
||||||
case ltOperator:
|
|
||||||
success = newVersion < currentVersion
|
|
||||||
case neOperator:
|
|
||||||
success = newVersion != currentVersion
|
|
||||||
default:
|
|
||||||
return false, errInvalidOpForConstraint
|
|
||||||
}
|
|
||||||
|
|
||||||
return success, err
|
|
||||||
}
|
|
||||||
|
|
||||||
// evalSemverVersion deals with semantic versioning format version strings
|
|
||||||
// (in version "a.b.c").
|
|
||||||
//
|
|
||||||
// See: https://semver.org
|
|
||||||
func evalSemverVersion(newVersionStr string, op Operator, currentVersionStr string) (success bool, err error) {
|
|
||||||
newVersion, err := semver.Make(newVersionStr)
|
|
||||||
if err != nil {
|
|
||||||
return false, err
|
|
||||||
}
|
|
||||||
|
|
||||||
currentVersion, err := semver.Make(currentVersionStr)
|
|
||||||
if err != nil {
|
|
||||||
return false, err
|
|
||||||
}
|
|
||||||
|
|
||||||
switch op {
|
|
||||||
case eqOperator:
|
|
||||||
success = newVersion.EQ(currentVersion)
|
|
||||||
case geOperator:
|
|
||||||
success = newVersion.GE(currentVersion)
|
|
||||||
case gtOperator:
|
|
||||||
success = newVersion.GT(currentVersion)
|
|
||||||
case leOperator:
|
|
||||||
success = newVersion.LE(currentVersion)
|
|
||||||
case ltOperator:
|
|
||||||
success = newVersion.LT(currentVersion)
|
|
||||||
case neOperator:
|
|
||||||
success = newVersion.NE(currentVersion)
|
|
||||||
default:
|
|
||||||
return false, errInvalidOpForConstraint
|
|
||||||
}
|
|
||||||
|
|
||||||
return success, err
|
|
||||||
}
|
|
||||||
|
|
||||||
// handleUID checks that the current UID is compatible with the constraint
|
|
||||||
// specified by the arguments.
|
|
||||||
func (tc *TestConstraint) handleUID(uid int, op Operator) (result Result, err error) {
|
|
||||||
if uid < 0 {
|
|
||||||
return Result{}, fmt.Errorf("uid must be >= 0, got %d", uid)
|
|
||||||
}
|
|
||||||
|
|
||||||
var success bool
|
|
||||||
|
|
||||||
switch op {
|
|
||||||
case eqOperator:
|
|
||||||
success = tc.ActualEUID == uid
|
|
||||||
case neOperator:
|
|
||||||
success = tc.ActualEUID != uid
|
|
||||||
default:
|
|
||||||
return Result{}, errInvalidOpForConstraint
|
|
||||||
}
|
|
||||||
|
|
||||||
descr := fmt.Sprintf("need uid %s %d, got euid %d", op, uid, tc.ActualEUID)
|
|
||||||
|
|
||||||
result = Result{
|
|
||||||
Description: descr,
|
|
||||||
Success: success,
|
|
||||||
}
|
|
||||||
|
|
||||||
return result, nil
|
|
||||||
}
|
|
||||||
|
|
||||||
// handleResults is the common handler for all constraint types. It deals with
|
|
||||||
// errors found trying to check constraints, stores results and displays
|
|
||||||
// details of valid constraints.
|
|
||||||
func (tc *TestConstraint) handleResults(result Result, err error) {
|
|
||||||
if err != nil {
|
|
||||||
var extra string
|
|
||||||
|
|
||||||
if tc.Issue != "" {
|
|
||||||
extra = fmt.Sprintf(" (issue %s)", tc.Issue)
|
|
||||||
}
|
|
||||||
|
|
||||||
// Display the TestConstraint object as it's may provide
|
|
||||||
// helpful information for the caller.
|
|
||||||
panic(fmt.Sprintf("%+v: failed to check test constraints: error: %s%s\n",
|
|
||||||
tc, err, extra))
|
|
||||||
}
|
|
||||||
|
|
||||||
if !result.Success {
|
|
||||||
tc.Failed = append(tc.Failed, result)
|
|
||||||
} else {
|
|
||||||
tc.Passed = append(tc.Passed, result)
|
|
||||||
}
|
|
||||||
|
|
||||||
if tc.Debug {
|
|
||||||
var outcome string
|
|
||||||
|
|
||||||
if result.Success {
|
|
||||||
outcome = "valid"
|
|
||||||
} else {
|
|
||||||
outcome = "invalid"
|
|
||||||
}
|
|
||||||
|
|
||||||
fmt.Printf("Constraint %s: %s\n", outcome, result.Description)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// constraintValid handles the specified constraint, returning true if the
|
|
||||||
// constraint is valid, else false.
|
|
||||||
func (tc *TestConstraint) constraintValid(fn Constraint) bool {
|
|
||||||
c := Constraints{}
|
|
||||||
|
|
||||||
// Call the constraint function that sets the Constraints values
|
|
||||||
fn(&c)
|
|
||||||
|
|
||||||
if c.Issue != "" {
|
|
||||||
// Just record it
|
|
||||||
tc.Issue = c.Issue
|
|
||||||
}
|
|
||||||
|
|
||||||
if c.UIDSet {
|
|
||||||
result, err := tc.handleUID(c.UID, c.Operator)
|
|
||||||
tc.handleResults(result, err)
|
|
||||||
if !result.Success {
|
|
||||||
return false
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if c.DistroName != "" {
|
|
||||||
result, err := tc.handleDistroName(c.DistroName, c.Operator)
|
|
||||||
tc.handleResults(result, err)
|
|
||||||
if !result.Success {
|
|
||||||
return false
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if c.DistroVersion != "" {
|
|
||||||
result, err := tc.handleDistroVersion(c.DistroVersion, c.Operator)
|
|
||||||
tc.handleResults(result, err)
|
|
||||||
if !result.Success {
|
|
||||||
return false
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
if c.KernelVersion != "" {
|
|
||||||
result, err := tc.handleKernelVersion(c.KernelVersion, c.Operator)
|
|
||||||
tc.handleResults(result, err)
|
|
||||||
if !result.Success {
|
|
||||||
return false
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
// Constraint is valid
|
|
||||||
return true
|
|
||||||
}
|
|
||||||
309
src/runtime/vendor/github.com/kata-containers/runtime/pkg/katatestutils/constraints_api.go
generated
vendored
309
src/runtime/vendor/github.com/kata-containers/runtime/pkg/katatestutils/constraints_api.go
generated
vendored
@@ -1,309 +0,0 @@
|
|||||||
// Copyright (c) 2019 Intel Corporation
|
|
||||||
//
|
|
||||||
// SPDX-License-Identifier: Apache-2.0
|
|
||||||
//
|
|
||||||
|
|
||||||
// This file contains the public API for the test constraints facility.
|
|
||||||
|
|
||||||
package katatestutils
|
|
||||||
|
|
||||||
import (
|
|
||||||
"os"
|
|
||||||
"strings"
|
|
||||||
)
|
|
||||||
|
|
||||||
// Operator represents an operator to apply to a test constraint value.
|
|
||||||
type Operator int
|
|
||||||
|
|
||||||
const (
|
|
||||||
eqOperator Operator = iota
|
|
||||||
geOperator Operator = iota
|
|
||||||
gtOperator Operator = iota
|
|
||||||
leOperator Operator = iota
|
|
||||||
ltOperator Operator = iota
|
|
||||||
neOperator Operator = iota
|
|
||||||
)
|
|
||||||
|
|
||||||
// Constraints encapsulates all information about a test constraint.
|
|
||||||
type Constraints struct {
|
|
||||||
Issue string
|
|
||||||
|
|
||||||
UID int
|
|
||||||
|
|
||||||
// Not ideal: set when UID needs to be checked. This allows
|
|
||||||
// a test for UID 0 to be detected.
|
|
||||||
UIDSet bool
|
|
||||||
|
|
||||||
// DistroName is the name of a distro in all lower-case letters.
|
|
||||||
DistroName string
|
|
||||||
|
|
||||||
// DistroVersion is the version of the particular distro in string
|
|
||||||
// format. It may contain periods and dashes.
|
|
||||||
DistroVersion string
|
|
||||||
|
|
||||||
// KernelVersion is the version of a particular kernel.
|
|
||||||
KernelVersion string
|
|
||||||
|
|
||||||
// Operator is the operator to apply to one of the constraints.
|
|
||||||
Operator Operator
|
|
||||||
}
|
|
||||||
|
|
||||||
// Constraint is a function that operates on a Constraints object to set
|
|
||||||
// particular values.
|
|
||||||
type Constraint func(c *Constraints)
|
|
||||||
|
|
||||||
// TestConstraint records details about test constraints.
|
|
||||||
type TestConstraint struct {
|
|
||||||
Debug bool
|
|
||||||
|
|
||||||
// Effective user ID of running test
|
|
||||||
ActualEUID int
|
|
||||||
|
|
||||||
DistroName string
|
|
||||||
DistroVersion string
|
|
||||||
KernelVersion string
|
|
||||||
|
|
||||||
// Used to record all passed and failed constraints in
|
|
||||||
// human-readable form.
|
|
||||||
Passed []Result
|
|
||||||
Failed []Result
|
|
||||||
|
|
||||||
// Optionally used to record an issue number that relates to the
|
|
||||||
// constraint.
|
|
||||||
Issue string
|
|
||||||
}
|
|
||||||
|
|
||||||
// NewKataTest creates a new TestConstraint object and is the main interface
|
|
||||||
// to the test constraints feature.
|
|
||||||
func NewTestConstraint(debug bool) TestConstraint {
|
|
||||||
distroName, distroVersion, err := getDistroDetails()
|
|
||||||
if err != nil {
|
|
||||||
panic(err)
|
|
||||||
}
|
|
||||||
|
|
||||||
kernelVersion, err := getKernelVersion()
|
|
||||||
if err != nil {
|
|
||||||
panic(err)
|
|
||||||
}
|
|
||||||
|
|
||||||
return TestConstraint{
|
|
||||||
Debug: debug,
|
|
||||||
|
|
||||||
ActualEUID: os.Geteuid(),
|
|
||||||
DistroName: distroName,
|
|
||||||
DistroVersion: distroVersion,
|
|
||||||
KernelVersion: kernelVersion,
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// NotValid checks if the specified list of constraints are all valid,
|
|
||||||
// returning true if any _fail_.
|
|
||||||
//
|
|
||||||
// Notes:
|
|
||||||
//
|
|
||||||
// - Constraints are applied in the order specified.
|
|
||||||
// - A constraint type (user, distro) can only be specified once.
|
|
||||||
// - If the function fails to determine whether it can check the constraints,
|
|
||||||
// it will panic. Since this is facility is used for testing, this seems like
|
|
||||||
// the best approach as it unburdens the caller from checking for an error
|
|
||||||
// (which should never be ignored).
|
|
||||||
func (tc *TestConstraint) NotValid(constraints ...Constraint) bool {
|
|
||||||
if len(constraints) == 0 {
|
|
||||||
panic("need atleast one constraint")
|
|
||||||
}
|
|
||||||
|
|
||||||
// Reset in case of a previous call
|
|
||||||
tc.Passed = nil
|
|
||||||
tc.Failed = nil
|
|
||||||
tc.Issue = ""
|
|
||||||
|
|
||||||
for _, c := range constraints {
|
|
||||||
valid := tc.constraintValid(c)
|
|
||||||
if !valid {
|
|
||||||
return true
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return false
|
|
||||||
}
|
|
||||||
|
|
||||||
// NeedUID skips the test unless running as a user with the specified user ID.
|
|
||||||
func NeedUID(uid int, op Operator) Constraint {
|
|
||||||
return func(c *Constraints) {
|
|
||||||
c.Operator = op
|
|
||||||
c.UID = uid
|
|
||||||
c.UIDSet = true
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// NeedNonRoot skips the test unless running as root.
|
|
||||||
func NeedRoot() Constraint {
|
|
||||||
return NeedUID(0, eqOperator)
|
|
||||||
}
|
|
||||||
|
|
||||||
// NeedNonRoot skips the test if running as the root user.
|
|
||||||
func NeedNonRoot() Constraint {
|
|
||||||
return NeedUID(0, neOperator)
|
|
||||||
}
|
|
||||||
|
|
||||||
// NeedDistroWithOp skips the test unless the distro constraint specified by
|
|
||||||
// the arguments is true.
|
|
||||||
func NeedDistroWithOp(distro string, op Operator) Constraint {
|
|
||||||
return func(c *Constraints) {
|
|
||||||
c.DistroName = strings.ToLower(distro)
|
|
||||||
c.Operator = op
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// NeedDistroEquals will skip the test unless running on the specified distro.
|
|
||||||
func NeedDistroEquals(distro string) Constraint {
|
|
||||||
return NeedDistroWithOp(distro, eqOperator)
|
|
||||||
}
|
|
||||||
|
|
||||||
// NeedDistroNotEquals will skip the test unless run a distro that does not
|
|
||||||
// match the specified name.
|
|
||||||
func NeedDistroNotEquals(distro string) Constraint {
|
|
||||||
return NeedDistroWithOp(distro, neOperator)
|
|
||||||
}
|
|
||||||
|
|
||||||
// NeedDistro will skip the test unless running on the specified distro.
|
|
||||||
func NeedDistro(distro string) Constraint {
|
|
||||||
return NeedDistroEquals(distro)
|
|
||||||
}
|
|
||||||
|
|
||||||
// NeedDistroVersionWithOp skips the test unless the distro version constraint
|
|
||||||
// specified by the arguments is true.
|
|
||||||
//
|
|
||||||
// Note: distro versions vary in format.
|
|
||||||
func NeedDistroVersionWithOp(version string, op Operator) Constraint {
|
|
||||||
return func(c *Constraints) {
|
|
||||||
c.DistroVersion = version
|
|
||||||
c.Operator = op
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// NeedDistroVersionEquals will skip the test unless the distro version is the
|
|
||||||
// same as the specified version.
|
|
||||||
//
|
|
||||||
// Note: distro versions vary in format.
|
|
||||||
func NeedDistroVersionEquals(version string) Constraint {
|
|
||||||
return NeedDistroVersionWithOp(version, eqOperator)
|
|
||||||
}
|
|
||||||
|
|
||||||
// NeedDistroVersionNotEquals will skip the test unless the distro version is
|
|
||||||
// different to the specified version.
|
|
||||||
//
|
|
||||||
// Note: distro versions vary in format.
|
|
||||||
func NeedDistroVersionNotEquals(version string) Constraint {
|
|
||||||
return NeedDistroVersionWithOp(version, neOperator)
|
|
||||||
}
|
|
||||||
|
|
||||||
// NeedDistroVersionLE will skip the test unless the distro version is older
|
|
||||||
// than or the same as the specified version.
|
|
||||||
//
|
|
||||||
// Note: distro versions vary in format.
|
|
||||||
func NeedDistroVersionLE(version string) Constraint {
|
|
||||||
return NeedDistroVersionWithOp(version, leOperator)
|
|
||||||
}
|
|
||||||
|
|
||||||
// NeedDistroVersionLT will skip the test unless the distro version is older
|
|
||||||
// than the specified version.
|
|
||||||
//
|
|
||||||
// Note: distro versions vary in format.
|
|
||||||
func NeedDistroVersionLT(version string) Constraint {
|
|
||||||
return NeedDistroVersionWithOp(version, ltOperator)
|
|
||||||
}
|
|
||||||
|
|
||||||
// NeedDistroVersionGE will skip the test unless the distro version is newer
|
|
||||||
// than or the same as the specified version.
|
|
||||||
//
|
|
||||||
// Note: distro versions vary in format.
|
|
||||||
func NeedDistroVersionGE(version string) Constraint {
|
|
||||||
return NeedDistroVersionWithOp(version, geOperator)
|
|
||||||
}
|
|
||||||
|
|
||||||
// NeedDistroVersionGT will skip the test unless the distro version is newer
|
|
||||||
// than the specified version.
|
|
||||||
//
|
|
||||||
// Note: distro versions vary in format.
|
|
||||||
func NeedDistroVersionGT(version string) Constraint {
|
|
||||||
return NeedDistroVersionWithOp(version, gtOperator)
|
|
||||||
}
|
|
||||||
|
|
||||||
// NeedDistroVersion will skip the test unless running on the specified
|
|
||||||
// (exact) version of some distro.
|
|
||||||
//
|
|
||||||
// Note: distro versions vary in format.
|
|
||||||
func NeedDistroVersion(version string) Constraint {
|
|
||||||
return NeedDistroVersionEquals(version)
|
|
||||||
}
|
|
||||||
|
|
||||||
// NeedKernelVersionWithOp skips the test unless the distro version constraint
|
|
||||||
// specified by the arguments is true.
|
|
||||||
func NeedKernelVersionWithOp(version string, op Operator) Constraint {
|
|
||||||
return func(c *Constraints) {
|
|
||||||
c.KernelVersion = version
|
|
||||||
c.Operator = op
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// NeedKernelVersionLT will skip the test unless the distro version is older
|
|
||||||
// than the specified version.
|
|
||||||
func NeedKernelVersionEquals(version string) Constraint {
|
|
||||||
return NeedKernelVersionWithOp(version, eqOperator)
|
|
||||||
}
|
|
||||||
|
|
||||||
// NeedKernelVersionNotEquals will skip the test unless the distro version is
|
|
||||||
// different to the specified version.
|
|
||||||
func NeedKernelVersionNotEquals(version string) Constraint {
|
|
||||||
return NeedKernelVersionWithOp(version, neOperator)
|
|
||||||
}
|
|
||||||
|
|
||||||
// NeedKernelVersionLT will skip the test unless the distro version is older
|
|
||||||
// than the specified version.
|
|
||||||
//
|
|
||||||
// Note: distro versions vary in format.
|
|
||||||
func NeedKernelVersionLT(version string) Constraint {
|
|
||||||
return NeedKernelVersionWithOp(version, ltOperator)
|
|
||||||
}
|
|
||||||
|
|
||||||
// NeedKernelVersionLE will skip the test unless the distro version is older
|
|
||||||
// than or the same as the specified version.
|
|
||||||
//
|
|
||||||
// Note: distro versions vary in format.
|
|
||||||
func NeedKernelVersionLE(version string) Constraint {
|
|
||||||
return NeedKernelVersionWithOp(version, leOperator)
|
|
||||||
}
|
|
||||||
|
|
||||||
// NeedKernelVersionGT will skip the test unless the distro version is newer
|
|
||||||
// than the specified version.
|
|
||||||
//
|
|
||||||
// Note: distro versions vary in format.
|
|
||||||
func NeedKernelVersionGT(version string) Constraint {
|
|
||||||
return NeedKernelVersionWithOp(version, gtOperator)
|
|
||||||
}
|
|
||||||
|
|
||||||
// NeedKernelVersionGE will skip the test unless the distro version is newer
|
|
||||||
// than or the same as the specified version.
|
|
||||||
//
|
|
||||||
// Note: distro versions vary in format.
|
|
||||||
func NeedKernelVersionGE(version string) Constraint {
|
|
||||||
return NeedKernelVersionWithOp(version, geOperator)
|
|
||||||
}
|
|
||||||
|
|
||||||
// NeedKernelVersion will skip the test unless running on the specified
|
|
||||||
// (exact) version of some distro.
|
|
||||||
//
|
|
||||||
// Note: distro versions vary in format.
|
|
||||||
func NeedKernelVersion(version string) Constraint {
|
|
||||||
return NeedKernelVersionEquals(version)
|
|
||||||
}
|
|
||||||
|
|
||||||
// WithIssue allows the specification of an issue URL.
|
|
||||||
//
|
|
||||||
// Note that the issue is not checked for validity.
|
|
||||||
func WithIssue(issue string) Constraint {
|
|
||||||
return func(c *Constraints) {
|
|
||||||
c.Issue = issue
|
|
||||||
}
|
|
||||||
}
|
|
||||||
92
src/runtime/vendor/github.com/kata-containers/runtime/pkg/katatestutils/utils.go
generated
vendored
92
src/runtime/vendor/github.com/kata-containers/runtime/pkg/katatestutils/utils.go
generated
vendored
@@ -1,92 +0,0 @@
|
|||||||
// Copyright (c) 2018-2019 Intel Corporation
|
|
||||||
// Copyright (c) 2018 HyperHQ Inc.
|
|
||||||
//
|
|
||||||
// SPDX-License-Identifier: Apache-2.0
|
|
||||||
//
|
|
||||||
|
|
||||||
package katatestutils
|
|
||||||
|
|
||||||
import "strconv"
|
|
||||||
|
|
||||||
type RuntimeConfigOptions struct {
|
|
||||||
Hypervisor string
|
|
||||||
HypervisorPath string
|
|
||||||
DefaultVCPUCount uint32
|
|
||||||
DefaultMaxVCPUCount uint32
|
|
||||||
DefaultMemSize uint32
|
|
||||||
DefaultMsize9p uint32
|
|
||||||
DefaultGuestHookPath string
|
|
||||||
KernelPath string
|
|
||||||
ImagePath string
|
|
||||||
KernelParams string
|
|
||||||
MachineType string
|
|
||||||
ShimPath string
|
|
||||||
ProxyPath string
|
|
||||||
NetmonPath string
|
|
||||||
LogPath string
|
|
||||||
BlockDeviceDriver string
|
|
||||||
AgentTraceMode string
|
|
||||||
AgentTraceType string
|
|
||||||
SharedFS string
|
|
||||||
PCIeRootPort uint32
|
|
||||||
DisableBlock bool
|
|
||||||
EnableIOThreads bool
|
|
||||||
HotplugVFIOOnRootBus bool
|
|
||||||
DisableNewNetNs bool
|
|
||||||
HypervisorDebug bool
|
|
||||||
RuntimeDebug bool
|
|
||||||
RuntimeTrace bool
|
|
||||||
ProxyDebug bool
|
|
||||||
ShimDebug bool
|
|
||||||
NetmonDebug bool
|
|
||||||
AgentDebug bool
|
|
||||||
AgentTrace bool
|
|
||||||
}
|
|
||||||
|
|
||||||
func MakeRuntimeConfigFileData(config RuntimeConfigOptions) string {
|
|
||||||
return `
|
|
||||||
# Runtime configuration file
|
|
||||||
|
|
||||||
[hypervisor.` + config.Hypervisor + `]
|
|
||||||
path = "` + config.HypervisorPath + `"
|
|
||||||
kernel = "` + config.KernelPath + `"
|
|
||||||
block_device_driver = "` + config.BlockDeviceDriver + `"
|
|
||||||
kernel_params = "` + config.KernelParams + `"
|
|
||||||
image = "` + config.ImagePath + `"
|
|
||||||
machine_type = "` + config.MachineType + `"
|
|
||||||
default_vcpus = ` + strconv.FormatUint(uint64(config.DefaultVCPUCount), 10) + `
|
|
||||||
default_maxvcpus = ` + strconv.FormatUint(uint64(config.DefaultMaxVCPUCount), 10) + `
|
|
||||||
default_memory = ` + strconv.FormatUint(uint64(config.DefaultMemSize), 10) + `
|
|
||||||
disable_block_device_use = ` + strconv.FormatBool(config.DisableBlock) + `
|
|
||||||
enable_iothreads = ` + strconv.FormatBool(config.EnableIOThreads) + `
|
|
||||||
hotplug_vfio_on_root_bus = ` + strconv.FormatBool(config.HotplugVFIOOnRootBus) + `
|
|
||||||
pcie_root_port = ` + strconv.FormatUint(uint64(config.PCIeRootPort), 10) + `
|
|
||||||
msize_9p = ` + strconv.FormatUint(uint64(config.DefaultMsize9p), 10) + `
|
|
||||||
enable_debug = ` + strconv.FormatBool(config.HypervisorDebug) + `
|
|
||||||
guest_hook_path = "` + config.DefaultGuestHookPath + `"
|
|
||||||
shared_fs = "` + config.SharedFS + `"
|
|
||||||
virtio_fs_daemon = "/path/to/virtiofsd"
|
|
||||||
|
|
||||||
[proxy.kata]
|
|
||||||
enable_debug = ` + strconv.FormatBool(config.ProxyDebug) + `
|
|
||||||
path = "` + config.ProxyPath + `"
|
|
||||||
|
|
||||||
[shim.kata]
|
|
||||||
path = "` + config.ShimPath + `"
|
|
||||||
enable_debug = ` + strconv.FormatBool(config.ShimDebug) + `
|
|
||||||
|
|
||||||
[agent.kata]
|
|
||||||
enable_debug = ` + strconv.FormatBool(config.AgentDebug) + `
|
|
||||||
enable_tracing = ` + strconv.FormatBool(config.AgentTrace) + `
|
|
||||||
trace_mode = "` + config.AgentTraceMode + `"` + `
|
|
||||||
trace_type = "` + config.AgentTraceType + `"` + `
|
|
||||||
|
|
||||||
[netmon]
|
|
||||||
path = "` + config.NetmonPath + `"
|
|
||||||
enable_debug = ` + strconv.FormatBool(config.NetmonDebug) + `
|
|
||||||
|
|
||||||
[runtime]
|
|
||||||
enable_debug = ` + strconv.FormatBool(config.RuntimeDebug) + `
|
|
||||||
enable_tracing = ` + strconv.FormatBool(config.RuntimeTrace) + `
|
|
||||||
disable_new_netns= ` + strconv.FormatBool(config.DisableNewNetNs)
|
|
||||||
}
|
|
||||||
4
src/runtime/vendor/github.com/kata-containers/runtime/pkg/katautils/README.md
generated
vendored
4
src/runtime/vendor/github.com/kata-containers/runtime/pkg/katautils/README.md
generated
vendored
@@ -1,4 +0,0 @@
|
|||||||
# Kata utilities packages
|
|
||||||
|
|
||||||
The `katautils` package contains useful functions that are shared by various
|
|
||||||
parts of the codebase, including the runtime and the container v2 shim.
|
|
||||||
66
src/runtime/vendor/github.com/kata-containers/runtime/pkg/katautils/config-settings.go
generated
vendored
66
src/runtime/vendor/github.com/kata-containers/runtime/pkg/katautils/config-settings.go
generated
vendored
@@ -1,66 +0,0 @@
|
|||||||
// Copyright (c) 2018 Intel Corporation
|
|
||||||
// Copyright (c) 2018 HyperHQ Inc.
|
|
||||||
//
|
|
||||||
// SPDX-License-Identifier: Apache-2.0
|
|
||||||
//
|
|
||||||
// Note that some variables are "var" to allow them to be modified
|
|
||||||
// by the tests.
|
|
||||||
|
|
||||||
package katautils
|
|
||||||
|
|
||||||
var defaultHypervisorPath = "/usr/bin/qemu-lite-system-x86_64"
|
|
||||||
var defaultHypervisorCtlPath = "/usr/bin/acrnctl"
|
|
||||||
var defaultJailerPath = "/usr/bin/jailer"
|
|
||||||
var defaultImagePath = "/usr/share/kata-containers/kata-containers.img"
|
|
||||||
var defaultKernelPath = "/usr/share/kata-containers/vmlinuz.container"
|
|
||||||
var defaultInitrdPath = "/usr/share/kata-containers/kata-containers-initrd.img"
|
|
||||||
var defaultFirmwarePath = ""
|
|
||||||
var defaultMachineAccelerators = ""
|
|
||||||
var defaultShimPath = "/usr/libexec/kata-containers/kata-shim"
|
|
||||||
var systemdUnitName = "kata-containers.target"
|
|
||||||
|
|
||||||
const defaultKernelParams = ""
|
|
||||||
const defaultMachineType = "pc"
|
|
||||||
|
|
||||||
const defaultVCPUCount uint32 = 1
|
|
||||||
const defaultMaxVCPUCount uint32 = 0
|
|
||||||
const defaultMemSize uint32 = 2048 // MiB
|
|
||||||
const defaultMemSlots uint32 = 10
|
|
||||||
const defaultMemOffset uint32 = 0 // MiB
|
|
||||||
const defaultVirtioMem bool = false
|
|
||||||
const defaultBridgesCount uint32 = 1
|
|
||||||
const defaultInterNetworkingModel = "tcfilter"
|
|
||||||
const defaultDisableBlockDeviceUse bool = false
|
|
||||||
const defaultBlockDeviceDriver = "virtio-scsi"
|
|
||||||
const defaultBlockDeviceCacheSet bool = false
|
|
||||||
const defaultBlockDeviceCacheDirect bool = false
|
|
||||||
const defaultBlockDeviceCacheNoflush bool = false
|
|
||||||
const defaultEnableIOThreads bool = false
|
|
||||||
const defaultEnableMemPrealloc bool = false
|
|
||||||
const defaultEnableHugePages bool = false
|
|
||||||
const defaultFileBackedMemRootDir string = ""
|
|
||||||
const defaultEnableSwap bool = false
|
|
||||||
const defaultEnableDebug bool = false
|
|
||||||
const defaultDisableNestingChecks bool = false
|
|
||||||
const defaultMsize9p uint32 = 8192
|
|
||||||
const defaultHotplugVFIOOnRootBus bool = false
|
|
||||||
const defaultPCIeRootPort = 0
|
|
||||||
const defaultEntropySource = "/dev/urandom"
|
|
||||||
const defaultGuestHookPath string = ""
|
|
||||||
const defaultVirtioFSCacheMode = "none"
|
|
||||||
const defaultDisableImageNvdimm = false
|
|
||||||
const defaultVhostUserStorePath string = "/var/run/kata-containers/vhost-user/"
|
|
||||||
|
|
||||||
const defaultTemplatePath string = "/run/vc/vm/template"
|
|
||||||
const defaultVMCacheEndpoint string = "/var/run/kata-containers/cache.sock"
|
|
||||||
|
|
||||||
// Default config file used by stateless systems.
|
|
||||||
var defaultRuntimeConfiguration = "/usr/share/defaults/kata-containers/configuration.toml"
|
|
||||||
|
|
||||||
// Alternate config file that takes precedence over
|
|
||||||
// defaultRuntimeConfiguration.
|
|
||||||
var defaultSysConfRuntimeConfiguration = "/etc/kata-containers/configuration.toml"
|
|
||||||
|
|
||||||
var name = "kata"
|
|
||||||
var defaultProxyPath = "/usr/libexec/kata-containers/kata-proxy"
|
|
||||||
var defaultNetmonPath = "/usr/libexec/kata-containers/kata-netmon"
|
|
||||||
@@ -1,66 +0,0 @@
|
|||||||
// Copyright (c) 2018 Intel Corporation
|
|
||||||
// Copyright (c) 2018 HyperHQ Inc.
|
|
||||||
//
|
|
||||||
// SPDX-License-Identifier: Apache-2.0
|
|
||||||
//
|
|
||||||
// Note that some variables are "var" to allow them to be modified
|
|
||||||
// by the tests.
|
|
||||||
|
|
||||||
package katautils
|
|
||||||
|
|
||||||
var defaultHypervisorPath = "/usr/bin/qemu-lite-system-x86_64"
|
|
||||||
var defaultHypervisorCtlPath = "/usr/bin/acrnctl"
|
|
||||||
var defaultJailerPath = "/usr/bin/jailer"
|
|
||||||
var defaultImagePath = "/usr/share/kata-containers/kata-containers.img"
|
|
||||||
var defaultKernelPath = "/usr/share/kata-containers/vmlinuz.container"
|
|
||||||
var defaultInitrdPath = "/usr/share/kata-containers/kata-containers-initrd.img"
|
|
||||||
var defaultFirmwarePath = ""
|
|
||||||
var defaultMachineAccelerators = ""
|
|
||||||
var defaultShimPath = "/usr/libexec/kata-containers/kata-shim"
|
|
||||||
var systemdUnitName = "kata-containers.target"
|
|
||||||
|
|
||||||
const defaultKernelParams = ""
|
|
||||||
const defaultMachineType = "pc"
|
|
||||||
|
|
||||||
const defaultVCPUCount uint32 = 1
|
|
||||||
const defaultMaxVCPUCount uint32 = 0
|
|
||||||
const defaultMemSize uint32 = 2048 // MiB
|
|
||||||
const defaultMemSlots uint32 = 10
|
|
||||||
const defaultMemOffset uint32 = 0 // MiB
|
|
||||||
const defaultVirtioMem bool = false
|
|
||||||
const defaultBridgesCount uint32 = 1
|
|
||||||
const defaultInterNetworkingModel = "tcfilter"
|
|
||||||
const defaultDisableBlockDeviceUse bool = false
|
|
||||||
const defaultBlockDeviceDriver = "virtio-scsi"
|
|
||||||
const defaultBlockDeviceCacheSet bool = false
|
|
||||||
const defaultBlockDeviceCacheDirect bool = false
|
|
||||||
const defaultBlockDeviceCacheNoflush bool = false
|
|
||||||
const defaultEnableIOThreads bool = false
|
|
||||||
const defaultEnableMemPrealloc bool = false
|
|
||||||
const defaultEnableHugePages bool = false
|
|
||||||
const defaultFileBackedMemRootDir string = ""
|
|
||||||
const defaultEnableSwap bool = false
|
|
||||||
const defaultEnableDebug bool = false
|
|
||||||
const defaultDisableNestingChecks bool = false
|
|
||||||
const defaultMsize9p uint32 = 8192
|
|
||||||
const defaultHotplugVFIOOnRootBus bool = false
|
|
||||||
const defaultPCIeRootPort = 0
|
|
||||||
const defaultEntropySource = "/dev/urandom"
|
|
||||||
const defaultGuestHookPath string = ""
|
|
||||||
const defaultVirtioFSCacheMode = "none"
|
|
||||||
const defaultDisableImageNvdimm = false
|
|
||||||
const defaultVhostUserStorePath string = "/var/run/kata-containers/vhost-user/"
|
|
||||||
|
|
||||||
const defaultTemplatePath string = "/run/vc/vm/template"
|
|
||||||
const defaultVMCacheEndpoint string = "/var/run/kata-containers/cache.sock"
|
|
||||||
|
|
||||||
// Default config file used by stateless systems.
|
|
||||||
var defaultRuntimeConfiguration = "@CONFIG_PATH@"
|
|
||||||
|
|
||||||
// Alternate config file that takes precedence over
|
|
||||||
// defaultRuntimeConfiguration.
|
|
||||||
var defaultSysConfRuntimeConfiguration = "@SYSCONFIG@"
|
|
||||||
|
|
||||||
var name = "kata"
|
|
||||||
var defaultProxyPath = "/usr/libexec/kata-containers/kata-proxy"
|
|
||||||
var defaultNetmonPath = "/usr/libexec/kata-containers/kata-netmon"
|
|
||||||
1405
src/runtime/vendor/github.com/kata-containers/runtime/pkg/katautils/config.go
generated
vendored
1405
src/runtime/vendor/github.com/kata-containers/runtime/pkg/katautils/config.go
generated
vendored
File diff suppressed because it is too large
Load Diff
75
src/runtime/vendor/github.com/kata-containers/runtime/pkg/katautils/container_engine.go
generated
vendored
75
src/runtime/vendor/github.com/kata-containers/runtime/pkg/katautils/container_engine.go
generated
vendored
@@ -1,75 +0,0 @@
|
|||||||
// Copyright (c) 2019 SUSE LLC
|
|
||||||
//
|
|
||||||
// SPDX-License-Identifier: Apache-2.0
|
|
||||||
//
|
|
||||||
|
|
||||||
package katautils
|
|
||||||
|
|
||||||
import (
|
|
||||||
"os/exec"
|
|
||||||
)
|
|
||||||
|
|
||||||
type CtrEngine struct {
|
|
||||||
Name string
|
|
||||||
}
|
|
||||||
|
|
||||||
var (
|
|
||||||
DockerLikeCtrEngines = []string{"docker", "podman"}
|
|
||||||
)
|
|
||||||
|
|
||||||
func (e *CtrEngine) Init(name string) (string, error) {
|
|
||||||
var out string
|
|
||||||
out, err := RunCommandFull([]string{name, "version"}, true)
|
|
||||||
if err != nil {
|
|
||||||
return out, err
|
|
||||||
}
|
|
||||||
|
|
||||||
e.Name = name
|
|
||||||
return out, nil
|
|
||||||
}
|
|
||||||
|
|
||||||
func (e *CtrEngine) Inspect(image string) (string, error) {
|
|
||||||
// Only hit the network if the image doesn't exist locally
|
|
||||||
return RunCommand([]string{e.Name, "inspect", "--type=image", image})
|
|
||||||
}
|
|
||||||
|
|
||||||
func (e *CtrEngine) Pull(image string) (string, error) {
|
|
||||||
return RunCommand([]string{e.Name, "pull", image})
|
|
||||||
}
|
|
||||||
|
|
||||||
func (e *CtrEngine) Create(image string) (string, error) {
|
|
||||||
return RunCommand([]string{e.Name, "create", image})
|
|
||||||
}
|
|
||||||
|
|
||||||
func (e *CtrEngine) Rm(ctrID string) (string, error) {
|
|
||||||
return RunCommand([]string{e.Name, "rm", ctrID})
|
|
||||||
}
|
|
||||||
|
|
||||||
func (e *CtrEngine) GetRootfs(ctrID string, dir string) error {
|
|
||||||
cmd1 := exec.Command(e.Name, "export", ctrID)
|
|
||||||
cmd2 := exec.Command("tar", "-C", dir, "-xvf", "-")
|
|
||||||
|
|
||||||
cmd1Stdout, err := cmd1.StdoutPipe()
|
|
||||||
if err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
|
|
||||||
cmd2.Stdin = cmd1Stdout
|
|
||||||
|
|
||||||
err = cmd2.Start()
|
|
||||||
if err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
|
|
||||||
err = cmd1.Run()
|
|
||||||
if err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
|
|
||||||
err = cmd2.Wait()
|
|
||||||
if err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user