Use labels only when default namespace is provided and prefer given

options.

Implements same approach of setting defaults for `NewWithConn`.

Signed-off-by: Nikhil Soni <krsoninikhil@gmail.com>
This commit is contained in:
Nikhil Soni 2018-09-18 02:41:47 +05:30
parent 59432aaecf
commit 34323985a1
3 changed files with 27 additions and 14 deletions

View File

@ -140,18 +140,16 @@ func New(address string, opts ...ClientOpt) (*Client, error) {
} }
// check namespace labels for default runtime // check namespace labels for default runtime
defaultns := "default" if copts.defaultRuntime == "" && copts.defaultns != "" {
if copts.defaultns != "" { namespaces := c.NamespaceService()
defaultns = copts.defaultns ctx := context.Background()
} if labels, err := namespaces.Labels(ctx, copts.defaultns); err == nil {
namespaces := c.NamespaceService() if defaultRuntime, ok := labels["containerd.io/defaults/runtime"]; ok {
ctx := context.Background() c.runtime = defaultRuntime
if labels, err := namespaces.Labels(ctx, defaultns); err == nil { }
if defaultRuntime, ok := labels["runtime"]; ok { } else {
c.runtime = defaultRuntime return nil, err
} }
} else {
return nil, err
} }
return c, nil return c, nil
@ -170,6 +168,20 @@ func NewWithConn(conn *grpc.ClientConn, opts ...ClientOpt) (*Client, error) {
conn: conn, conn: conn,
runtime: fmt.Sprintf("%s.%s", plugin.RuntimePlugin, runtime.GOOS), runtime: fmt.Sprintf("%s.%s", plugin.RuntimePlugin, runtime.GOOS),
} }
// check namespace labels for default runtime
if copts.defaultRuntime == "" && copts.defaultns != "" {
namespaces := c.NamespaceService()
ctx := context.Background()
if labels, err := namespaces.Labels(ctx, copts.defaultns); err == nil {
if defaultRuntime, ok := labels["containerd.io/defaults/runtime"]; ok {
c.runtime = defaultRuntime
}
} else {
return nil, err
}
}
if copts.services != nil { if copts.services != nil {
c.services = *copts.services c.services = *copts.services
} }

View File

@ -405,11 +405,12 @@ func TestDefaultRuntimeWithNamespaceLabels(t *testing.T) {
defer cancel() defer cancel()
namespaces := client.NamespaceService() namespaces := client.NamespaceService()
testRuntime := "testRuntime" testRuntime := "testRuntime"
if err := namespaces.SetLabel(ctx, testNamespace, "runtime", testRuntime); err != nil { runtimeLabel := "containerd.io/defaults/runtime"
if err := namespaces.SetLabel(ctx, testNamespace, runtimeLabel, testRuntime); err != nil {
t.Fatal(err) t.Fatal(err)
} }
testClient, err := newClient(t, address, WithDefaultNamespace(testNamespace)) testClient, err := New(address, WithDefaultNamespace(testNamespace))
if err != nil { if err != nil {
t.Fatal(err) t.Fatal(err)
} }

View File

@ -172,7 +172,7 @@ func setSnapshotterIfEmpty(ctx context.Context, client *Client, c *containers.Co
namespaceService := client.NamespaceService() namespaceService := client.NamespaceService()
if ns, err := namespaces.NamespaceRequired(ctx); err == nil { if ns, err := namespaces.NamespaceRequired(ctx); err == nil {
if labels, err := namespaceService.Labels(ctx, ns); err == nil { if labels, err := namespaceService.Labels(ctx, ns); err == nil {
if snapshotLabel, ok := labels["snapshotter"]; ok { if snapshotLabel, ok := labels["containerd.io/defaults/snapshotter"]; ok {
defaultSnapshotter = snapshotLabel defaultSnapshotter = snapshotLabel
} }
} }