Skip to content

Commit f8f861e

Browse files
authored
Merge pull request #4631 from opjt/fix/namespace-validation-logic
fix: Improve namespace validation logic for update, inspect command
2 parents cbdbc90 + 8c96403 commit f8f861e

File tree

4 files changed

+47
-7
lines changed

4 files changed

+47
-7
lines changed

cmd/nerdctl/namespace/namespace_update.go

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,8 @@ func updateCommand() *cobra.Command {
3636
SilenceUsage: true,
3737
SilenceErrors: true,
3838
}
39-
cmd.Flags().StringArrayP("label", "l", nil, "Set labels for a namespace")
39+
cmd.Flags().StringArrayP("label", "l", nil, "Set labels for a namespace (required)")
40+
cmd.MarkFlagRequired("label")
4041
return cmd
4142
}
4243

pkg/cmd/namespace/common.go

Lines changed: 23 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,16 @@
1616

1717
package namespace
1818

19-
import "strings"
19+
import (
20+
"context"
21+
"fmt"
22+
"slices"
23+
"strings"
24+
25+
"github.com/compose-spec/compose-go/v2/errdefs"
26+
27+
"github.com/containerd/containerd/v2/pkg/namespaces"
28+
)
2029

2130
func objectWithLabelArgs(args []string) map[string]string {
2231
if len(args) >= 1 {
@@ -39,3 +48,16 @@ func labelArgs(labelStrings []string) map[string]string {
3948

4049
return labels
4150
}
51+
52+
// namespaceExists checks if the namespace exists
53+
func namespaceExists(ctx context.Context, store namespaces.Store, namespace string) error {
54+
nsList, err := store.List(ctx)
55+
if err != nil {
56+
return err
57+
}
58+
if slices.Contains(nsList, namespace) {
59+
return nil
60+
}
61+
62+
return fmt.Errorf("namespace %s: %w", namespace, errdefs.ErrNotFound)
63+
}

pkg/cmd/namespace/inspect.go

Lines changed: 19 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -21,25 +21,39 @@ import (
2121

2222
containerd "github.com/containerd/containerd/v2/client"
2323
"github.com/containerd/containerd/v2/pkg/namespaces"
24+
"github.com/containerd/log"
2425

2526
"github.com/containerd/nerdctl/v2/pkg/api/types"
2627
"github.com/containerd/nerdctl/v2/pkg/formatter"
2728
"github.com/containerd/nerdctl/v2/pkg/inspecttypes/native"
2829
)
2930

3031
func Inspect(ctx context.Context, client *containerd.Client, inspectedNamespaces []string, options types.NamespaceInspectOptions) error {
31-
result := make([]interface{}, len(inspectedNamespaces))
32-
for index, ns := range inspectedNamespaces {
32+
result := []interface{}{}
33+
warns := []error{}
34+
35+
for _, ns := range inspectedNamespaces {
3336
ctx = namespaces.WithNamespace(ctx, ns)
34-
labels, err := client.NamespaceService().Labels(ctx, ns)
37+
namespaceService := client.NamespaceService()
38+
if err := namespaceExists(ctx, namespaceService, ns); err != nil {
39+
warns = append(warns, err)
40+
continue
41+
}
42+
labels, err := namespaceService.Labels(ctx, ns)
3543
if err != nil {
3644
return err
3745
}
3846
nsInspect := native.Namespace{
3947
Name: ns,
4048
Labels: &labels,
4149
}
42-
result[index] = nsInspect
50+
result = append(result, nsInspect)
51+
}
52+
if err := formatter.FormatSlice(options.Format, options.Stdout, result); err != nil {
53+
return err
54+
}
55+
for _, warn := range warns {
56+
log.G(ctx).Warn(warn)
4357
}
44-
return formatter.FormatSlice(options.Format, options.Stdout, result)
58+
return nil
4559
}

pkg/cmd/namespace/update.go

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,9 @@ import (
2727
func Update(ctx context.Context, client *containerd.Client, namespace string, options types.NamespaceUpdateOptions) error {
2828
labelsArg := objectWithLabelArgs(options.Labels)
2929
namespaces := client.NamespaceService()
30+
if err := namespaceExists(ctx, namespaces, namespace); err != nil {
31+
return err
32+
}
3033
for k, v := range labelsArg {
3134
if err := namespaces.SetLabel(ctx, namespace, k, v); err != nil {
3235
return err

0 commit comments

Comments
 (0)