Skip to content

Commit 08c2071

Browse files
author
Kubernetes Submit Queue
authored
Merge pull request kubernetes#47171 from xilabao/validate-nonResourceURL-in-create-clusterrole
Automatic merge from submit-queue (batch tested with PRs 51038, 50063, 51257, 47171, 51143) validate nonResourceURL in create clusterrole **Release note**: ```release-note NONE ```
2 parents cd908f3 + 42c41a0 commit 08c2071

2 files changed

Lines changed: 56 additions & 1 deletion

File tree

pkg/kubectl/cmd/create_clusterrole.go

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@ package cmd
1919
import (
2020
"fmt"
2121
"io"
22+
"strings"
2223

2324
"github.com/spf13/cobra"
2425

@@ -133,6 +134,20 @@ func (c *CreateClusterRoleOptions) Validate() error {
133134
return fmt.Errorf("invalid verb: '%s' for nonResourceURL", v)
134135
}
135136
}
137+
138+
for _, nonResourceURL := range c.NonResourceURLs {
139+
if nonResourceURL == "*" {
140+
continue
141+
}
142+
143+
if nonResourceURL == "" || !strings.HasPrefix(nonResourceURL, "/") {
144+
return fmt.Errorf("nonResourceURL should start with /")
145+
}
146+
147+
if strings.ContainsRune(nonResourceURL[:len(nonResourceURL)-1], '*') {
148+
return fmt.Errorf("nonResourceURL only supports wildcard matches when '*' is at the end")
149+
}
150+
}
136151
}
137152

138153
return nil

pkg/kubectl/cmd/create_clusterrole_test.go

Lines changed: 41 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -375,6 +375,46 @@ func TestClusterRoleValidate(t *testing.T) {
375375
},
376376
expectErr: false,
377377
},
378+
"test-invalid-empty-non-resource-url": {
379+
clusterRoleOptions: &CreateClusterRoleOptions{
380+
CreateRoleOptions: &CreateRoleOptions{
381+
Name: "my-clusterrole",
382+
Verbs: []string{"create"},
383+
},
384+
NonResourceURLs: []string{""},
385+
},
386+
expectErr: true,
387+
},
388+
"test-invalid-non-resource-url": {
389+
clusterRoleOptions: &CreateClusterRoleOptions{
390+
CreateRoleOptions: &CreateRoleOptions{
391+
Name: "my-clusterrole",
392+
Verbs: []string{"create"},
393+
},
394+
NonResourceURLs: []string{"logs"},
395+
},
396+
expectErr: true,
397+
},
398+
"test-invalid-non-resource-url-with-*": {
399+
clusterRoleOptions: &CreateClusterRoleOptions{
400+
CreateRoleOptions: &CreateRoleOptions{
401+
Name: "my-clusterrole",
402+
Verbs: []string{"create"},
403+
},
404+
NonResourceURLs: []string{"/logs/*/"},
405+
},
406+
expectErr: true,
407+
},
408+
"test-invalid-non-resource-url-with-multiple-*": {
409+
clusterRoleOptions: &CreateClusterRoleOptions{
410+
CreateRoleOptions: &CreateRoleOptions{
411+
Name: "my-clusterrole",
412+
Verbs: []string{"create"},
413+
},
414+
NonResourceURLs: []string{"/logs*/*"},
415+
},
416+
expectErr: true,
417+
},
378418
"test-invalid-verb-for-non-resource-url": {
379419
clusterRoleOptions: &CreateClusterRoleOptions{
380420
CreateRoleOptions: &CreateRoleOptions{
@@ -397,7 +437,7 @@ func TestClusterRoleValidate(t *testing.T) {
397437
},
398438
},
399439
},
400-
NonResourceURLs: []string{"/logs/"},
440+
NonResourceURLs: []string{"/logs/", "/logs/*"},
401441
},
402442
expectErr: false,
403443
},

0 commit comments

Comments
 (0)