Skip to content

Commit 7eb41df

Browse files
fix: do not allow removing/changing the reserved labels (#945)
also, show only custom labels in `kubectl directpv list drives --show-labels` and `kubectl directpv list volumes --show-labels`
1 parent 75ecef4 commit 7eb41df

File tree

4 files changed

+59
-2
lines changed

4 files changed

+59
-2
lines changed

cmd/kubectl-directpv/list.go

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@ import (
2121
"sort"
2222
"strings"
2323

24+
"github.com/minio/directpv/pkg/apis/directpv.min.io/types"
2425
"github.com/minio/directpv/pkg/consts"
2526
"github.com/spf13/cobra"
2627
)
@@ -64,8 +65,13 @@ func validateListCmd() error {
6465
func labelsToString(labels map[string]string) string {
6566
var labelsArray []string
6667
for k, v := range labels {
67-
k = strings.TrimPrefix(k, consts.GroupName+"/")
68-
labelsArray = append(labelsArray, fmt.Sprintf("%s=%v", k, v))
68+
if !types.LabelKey(k).IsReserved() {
69+
k = strings.TrimPrefix(k, consts.GroupName+"/")
70+
labelsArray = append(labelsArray, fmt.Sprintf("%s=%v", k, v))
71+
}
72+
}
73+
if len(labelsArray) == 0 {
74+
return "-"
6975
}
7076
sort.Strings(labelsArray)
7177
return strings.Join(labelsArray, ",")

pkg/admin/label_drives.go

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -62,6 +62,17 @@ func (client *Client) LabelDrives(ctx context.Context, args LabelDriveArgs, labe
6262
log = nullLogger
6363
}
6464

65+
for _, label := range labels {
66+
if label.Key.IsReserved() {
67+
action := "use"
68+
if label.Remove {
69+
action = "remove"
70+
}
71+
err = fmt.Errorf("cannot %v reserved key %v", action, label.Key)
72+
return
73+
}
74+
}
75+
6576
var processed bool
6677
ctx, cancelFunc := context.WithCancel(ctx)
6778
defer cancelFunc()

pkg/admin/label_volumes.go

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -51,6 +51,17 @@ func (client *Client) LabelVolumes(ctx context.Context, args LabelVolumeArgs, la
5151
log = nullLogger
5252
}
5353

54+
for _, label := range labels {
55+
if label.Key.IsReserved() {
56+
action := "use"
57+
if label.Remove {
58+
action = "remove"
59+
}
60+
err = fmt.Errorf("cannot %v reserved key %v", action, label.Key)
61+
return
62+
}
63+
}
64+
5465
ctx, cancelFunc := context.WithCancel(ctx)
5566
defer cancelFunc()
5667

pkg/apis/directpv.min.io/types/label.go

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -96,6 +96,35 @@ const (
9696
PluginVersionLabelKey LabelKey = consts.GroupName + "/plugin-version"
9797
)
9898

99+
var reservedLabelKeys = map[LabelKey]struct{}{
100+
NodeLabelKey: {},
101+
DriveNameLabelKey: {},
102+
AccessTierLabelKey: {},
103+
DriveLabelKey: {},
104+
VersionLabelKey: {},
105+
CreatedByLabelKey: {},
106+
PodNameLabelKey: {},
107+
PodNSLabelKey: {},
108+
LatestVersionLabelKey: {},
109+
TopologyDriverIdentity: {},
110+
TopologyDriverRack: {},
111+
TopologyDriverZone: {},
112+
TopologyDriverRegion: {},
113+
MigratedLabelKey: {},
114+
RequestIDLabelKey: {},
115+
SuspendLabelKey: {},
116+
VolumeClaimIDLabelKey: {},
117+
ClaimIDLabelKey: {},
118+
ImageTagLabelKey: {},
119+
PluginVersionLabelKey: {},
120+
}
121+
122+
// IsReserved returns if the key is a reserved key
123+
func (k LabelKey) IsReserved() bool {
124+
_, found := reservedLabelKeys[k]
125+
return found || strings.HasPrefix(string(k), VolumeClaimIDLabelKeyPrefix)
126+
}
127+
99128
// LabelValue is a type definition for label value
100129
type LabelValue string
101130

0 commit comments

Comments
 (0)