Skip to content

Commit

Permalink
kata-monitor: use regexp to check if runtime is kata containers
Browse files Browse the repository at this point in the history
To support a few common configurations for Kata, including:

- `io.containerd.kata.v2`
- `io.containerd.kata-qemu.v2`
- `io.containerd.kata-clh.v2`

`kata-monintor` changes to use regexp instead of direct string comparison.

Fixes: kata-containers#957

Signed-off-by: bin liu <[email protected]>
  • Loading branch information
liubin committed Oct 15, 2020
1 parent 71be16c commit 1b7ed32
Show file tree
Hide file tree
Showing 5 changed files with 43 additions and 6 deletions.
4 changes: 2 additions & 2 deletions src/runtime/cli/containerd-shim-kata-v2/main.go
Original file line number Diff line number Diff line change
Expand Up @@ -22,9 +22,9 @@ func shimConfig(config *shim.Config) {
func main() {

if len(os.Args) == 2 && os.Args[1] == "--version" {
fmt.Printf("%s containerd shim: id: %q, version: %s, commit: %v\n", project, types.KataRuntimeName, version, commit)
fmt.Printf("%s containerd shim: id: %q, version: %s, commit: %v\n", project, types.DefaultKataRuntimeName, version, commit)
os.Exit(0)
}

shim.Run(types.KataRuntimeName, containerdshim.New, shimConfig)
shim.Run(types.DefaultKataRuntimeName, containerdshim.New, shimConfig)
}
2 changes: 1 addition & 1 deletion src/runtime/pkg/kata-monitor/containerd.go
Original file line number Diff line number Diff line change
Expand Up @@ -82,7 +82,7 @@ func (ka *KataMonitor) getSandboxes() (map[string]string, error) {
namespacedCtx := namespaces.WithNamespace(ctx, namespace)
// only list Kata Containers pods/containers
containers, err := client.ContainerService().List(namespacedCtx,
"runtime.name=="+types.KataRuntimeName+`,labels."io.cri-containerd.kind"==sandbox`)
"runtime.name~="+types.KataRuntimeNameRegexp+`,labels."io.cri-containerd.kind"==sandbox`)
if err != nil {
return err
}
Expand Down
8 changes: 7 additions & 1 deletion src/runtime/pkg/kata-monitor/sandbox_cache.go
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@ package katamonitor
import (
"context"
"fmt"
"regexp"
"sync"

"github.com/containerd/containerd"
Expand Down Expand Up @@ -97,6 +98,11 @@ func (sc *sandboxCache) startEventsListener(addr string) error {
`topic=="/containers/delete"`,
}

runtimeNameRegexp, err := regexp.Compile(types.KataRuntimeNameRegexp)
if err != nil {
return err
}

eventsCh, errCh := eventsClient.Subscribe(ctx, eventFilters...)
for {
var e *events.Envelope
Expand Down Expand Up @@ -138,7 +144,7 @@ func (sc *sandboxCache) startEventsListener(addr string) error {
}

// skip non-kata contaienrs
if cc.Runtime.Name != types.KataRuntimeName {
if !runtimeNameRegexp.MatchString(cc.Runtime.Name) {
continue
}

Expand Down
5 changes: 3 additions & 2 deletions src/runtime/pkg/types/types.go
Original file line number Diff line number Diff line change
@@ -1,11 +1,12 @@
// Copyright (c) 2020 Ant Financial
// Copyright (c) 2020 Ant Group
//
// SPDX-License-Identifier: Apache-2.0
//

package types

const (
KataRuntimeName = "io.containerd.kata.v2"
DefaultKataRuntimeName = "io.containerd.kata.v2"
KataRuntimeNameRegexp = `io\.containerd\.kata.*\.v2`
ContainerdRuntimeTaskPath = "io.containerd.runtime.v2.task"
)
30 changes: 30 additions & 0 deletions src/runtime/pkg/types/types_test.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
// Copyright (c) 2020 Ant Group
//
// SPDX-License-Identifier: Apache-2.0
//
package types

import (
"regexp"
"testing"

"github.com/stretchr/testify/assert"
)

func TestKataRuntimeNameRegexp(t *testing.T) {
assert := assert.New(t)

runtimeNameRegexp, err := regexp.Compile(KataRuntimeNameRegexp)
assert.NoError(err)

// valid Kata containers name
assert.Equal(true, runtimeNameRegexp.MatchString("io.containerd.kata.v2"))
assert.Equal(true, runtimeNameRegexp.MatchString("io.containerd.kataclh.v2"))
assert.Equal(true, runtimeNameRegexp.MatchString("io.containerd.kata-clh.v2"))
assert.Equal(true, runtimeNameRegexp.MatchString("io.containerd.kata.1.2.3-clh.4.v2"))

// invalid Kata containers name
assert.Equal(false, runtimeNameRegexp.MatchString("io2containerd.kata.v2"))
assert.Equal(false, runtimeNameRegexp.MatchString("io.c3ontainerd.kata.v2"))
assert.Equal(false, runtimeNameRegexp.MatchString("io.containerd.runc.v1"))
}

0 comments on commit 1b7ed32

Please sign in to comment.