Skip to content

Commit 7d24f0a

Browse files
committed
setup labels
Signed-off-by: fahed dorgaa <fahed.dorgaa@gmail.com>
1 parent fde3eae commit 7d24f0a

17 files changed

Lines changed: 237 additions & 21 deletions

File tree

cmd/nerdctl/network_create.go

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@ import (
2626
"github.com/containerd/containerd/identifiers"
2727
"github.com/containerd/nerdctl/pkg/lockutil"
2828
"github.com/containerd/nerdctl/pkg/netutil"
29+
"github.com/containerd/nerdctl/pkg/strutil"
2930
"github.com/pkg/errors"
3031
"github.com/urfave/cli/v2"
3132
)
@@ -40,6 +41,10 @@ var networkCreateCommand = &cli.Command{
4041
Name: "subnet",
4142
Usage: "Subnet in CIDR format that represents a network segment, e.g. \"10.5.0.0/16\"",
4243
},
44+
&cli.StringSliceFlag{
45+
Name: "label",
46+
Usage: "Set metadata for a volume",
47+
},
4348
},
4449
Action: networkCreateAction,
4550
}
@@ -85,7 +90,8 @@ func networkCreateAction(clicontext *cli.Context) error {
8590
subnet = fmt.Sprintf("10.4.%d.0/24", id)
8691
}
8792

88-
l, err := netutil.GenerateConfigList(e, id, name, subnet)
93+
labels := strutil.DedupeStrSlice(clicontext.StringSlice("label"))
94+
l, err := netutil.GenerateConfigList(e, labels, id, name, subnet)
8995
if err != nil {
9096
return err
9197
}

cmd/nerdctl/network_inspect.go

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -64,10 +64,12 @@ func networkInspectAction(clicontext *cli.Context) error {
6464
if !ok {
6565
return errors.Errorf("no such network: %s", name)
6666
}
67+
6768
r := native.Network{
68-
CNI: json.RawMessage(l.Bytes),
69-
NerdctlID: l.NerdctlID,
70-
File: l.File,
69+
CNI: json.RawMessage(l.Bytes),
70+
NerdctlID: l.NerdctlID,
71+
NerdctlLabels: l.NerdctlLabels,
72+
File: l.File,
7173
}
7274
result[i] = r
7375
}
Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
/*
2+
Copyright The containerd Authors.
3+
4+
Licensed under the Apache License, Version 2.0 (the "License");
5+
you may not use this file except in compliance with the License.
6+
You may obtain a copy of the License at
7+
8+
http://www.apache.org/licenses/LICENSE-2.0
9+
10+
Unless required by applicable law or agreed to in writing, software
11+
distributed under the License is distributed on an "AS IS" BASIS,
12+
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13+
See the License for the specific language governing permissions and
14+
limitations under the License.
15+
*/
16+
17+
package main
18+
19+
import (
20+
"testing"
21+
22+
"github.com/containerd/nerdctl/pkg/testutil"
23+
"gotest.tools/v3/assert"
24+
)
25+
26+
func TestNetworkInspectContainsLabels(t *testing.T) {
27+
// Skip docker, because docker support CNM not CNI
28+
testutil.DockerIncompatible(t)
29+
30+
const testNetwork = "nerdctl-test-inspect-with-labels"
31+
32+
base := testutil.NewBase(t)
33+
defer base.Cmd("network", "rm", testNetwork).Run()
34+
35+
base.Cmd("network", "create", "--label", "tag=testNetwork", testNetwork).AssertOK()
36+
inspect := base.InspectNetwork(testNetwork)
37+
inspectNerdctlLabels := (*inspect.NerdctlLabels)
38+
expected := make(map[string]string, 1)
39+
expected["tag"] = "testNetwork"
40+
assert.DeepEqual(base.T, expected, inspectNerdctlLabels)
41+
}

cmd/nerdctl/run_mount.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -140,7 +140,7 @@ func generateMountOpts(clicontext *cli.Context, ctx context.Context, client *con
140140

141141
logrus.Debugf("creating anonymous volume %q, for \"VOLUME %s\"",
142142
anonVolName, imgVolRaw)
143-
anonVol, err := volStore.Create(anonVolName)
143+
anonVol, err := volStore.Create(anonVolName, []string{})
144144
if err != nil {
145145
return nil, nil, err
146146
}

cmd/nerdctl/volume_create.go

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@ import (
2020
"fmt"
2121

2222
"github.com/containerd/containerd/identifiers"
23+
"github.com/containerd/nerdctl/pkg/strutil"
2324
"github.com/pkg/errors"
2425
"github.com/urfave/cli/v2"
2526
)
@@ -29,6 +30,12 @@ var volumeCreateCommand = &cli.Command{
2930
Usage: "Create a volume",
3031
ArgsUsage: "[flags] VOLUME",
3132
Action: volumeCreateAction,
33+
Flags: []cli.Flag{
34+
&cli.StringSliceFlag{
35+
Name: "label",
36+
Usage: "Set metadata for a volume",
37+
},
38+
},
3239
}
3340

3441
func volumeCreateAction(clicontext *cli.Context) error {
@@ -44,7 +51,8 @@ func volumeCreateAction(clicontext *cli.Context) error {
4451
if err != nil {
4552
return err
4653
}
47-
if _, err := volStore.Create(name); err != nil {
54+
labels := strutil.DedupeStrSlice(clicontext.StringSlice("label"))
55+
if _, err := volStore.Create(name, labels); err != nil {
4856
return err
4957
}
5058
fmt.Fprintf(clicontext.App.Writer, "%s\n", name)

cmd/nerdctl/volume_inspect_test.go

Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
/*
2+
Copyright The containerd Authors.
3+
4+
Licensed under the Apache License, Version 2.0 (the "License");
5+
you may not use this file except in compliance with the License.
6+
You may obtain a copy of the License at
7+
8+
http://www.apache.org/licenses/LICENSE-2.0
9+
10+
Unless required by applicable law or agreed to in writing, software
11+
distributed under the License is distributed on an "AS IS" BASIS,
12+
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13+
See the License for the specific language governing permissions and
14+
limitations under the License.
15+
*/
16+
17+
package main
18+
19+
import (
20+
"testing"
21+
22+
"github.com/containerd/nerdctl/pkg/testutil"
23+
"gotest.tools/v3/assert"
24+
)
25+
26+
func TestVolumeInspectContainsLabels(t *testing.T) {
27+
const testVolume = "nerdctl-test-inspect-with-labels"
28+
29+
base := testutil.NewBase(t)
30+
defer base.Cmd("volume", "rm", "-f", testVolume).Run()
31+
32+
base.Cmd("volume", "create", "--label", "tag=testVolume", testVolume).AssertOK()
33+
inspect := base.InspectVolume(testVolume)
34+
inspectNerdctlLabels := (*inspect.Labels)
35+
expected := make(map[string]string, 1)
36+
expected["tag"] = "testVolume"
37+
assert.DeepEqual(base.T, expected, inspectNerdctlLabels)
38+
}

pkg/composer/up_network.go

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,9 @@ package composer
1818

1919
import (
2020
"context"
21+
"fmt"
2122

23+
"github.com/containerd/nerdctl/pkg/labels"
2224
"github.com/containerd/nerdctl/pkg/reflectutil"
2325
"github.com/pkg/errors"
2426
"github.com/sirupsen/logrus"
@@ -45,7 +47,13 @@ func (c *Composer) upNetwork(ctx context.Context, shortName string) error {
4547
return err
4648
} else if !netExists {
4749
logrus.Infof("Creating network %s", fullName)
48-
if err := c.runNerdctlCmd(ctx, "network", "create", fullName); err != nil {
50+
//add metadata labels to network https://github.com/compose-spec/compose-spec/blob/master/spec.md#labels-1
51+
createArgs := []string{
52+
fmt.Sprintf("--label=%s=%s", labels.ComposeProject, c.Options.Project),
53+
fmt.Sprintf("--label=%s=%s", labels.ComposeNetwork, shortName),
54+
fullName,
55+
}
56+
if err := c.runNerdctlCmd(ctx, append([]string{"network", "create"}, createArgs...)...); err != nil {
4957
return err
5058
}
5159
}

pkg/composer/up_volume.go

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,9 @@ package composer
1818

1919
import (
2020
"context"
21+
"fmt"
2122

23+
"github.com/containerd/nerdctl/pkg/labels"
2224
"github.com/containerd/nerdctl/pkg/reflectutil"
2325
"github.com/pkg/errors"
2426
"github.com/sirupsen/logrus"
@@ -45,7 +47,13 @@ func (c *Composer) upVolume(ctx context.Context, shortName string) error {
4547
return err
4648
} else if !volExists {
4749
logrus.Infof("Creating volume %s", fullName)
48-
if err := c.runNerdctlCmd(ctx, "volume", "create", fullName); err != nil {
50+
//add metadata labels to volume https://github.com/compose-spec/compose-spec/blob/master/spec.md#labels-2
51+
createArgs := []string{
52+
fmt.Sprintf("--label=%s=%s", labels.ComposeProject, c.Options.Project),
53+
fmt.Sprintf("--label=%s=%s", labels.ComposeVolume, shortName),
54+
fullName,
55+
}
56+
if err := c.runNerdctlCmd(ctx, append([]string{"volume", "create"}, createArgs...)...); err != nil {
4957
return err
5058
}
5159
}

pkg/inspecttypes/native/network.go

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,8 @@ import "encoding/json"
2020

2121
// Network corresponds to pkg/netutil.NetworkConfigList
2222
type Network struct {
23-
CNI json.RawMessage `json:"CNI,omitempty"`
24-
NerdctlID *int `json:"NerdctlID"`
25-
File string `json:"File,omitempty"`
23+
CNI json.RawMessage `json:"CNI,omitempty"`
24+
NerdctlID *int `json:"NerdctlID"`
25+
NerdctlLabels *map[string]string `json:"NerdctlLabels,omitempty"`
26+
File string `json:"File,omitempty"`
2627
}

pkg/inspecttypes/native/volume.go

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@ package native
1818

1919
// Volume is also compatible with Docker
2020
type Volume struct {
21-
Name string `json:"Name"`
22-
Mountpoint string `json:"Mountpoint"`
21+
Name string `json:"Name"`
22+
Mountpoint string `json:"Mountpoint"`
23+
Labels *map[string]string `json:"Labels,omitempty"`
2324
}

0 commit comments

Comments
 (0)