편집을 취소할 수 있습니다. 이 편집을 되돌리려면 아래의 바뀐 내용을 확인한 후 게시해주세요.
최신판 | 당신의 편집 | ||
9번째 줄: | 9번째 줄: | ||
"fmt" | "fmt" | ||
"reflect" | "reflect" | ||
"strings" | "strings" | ||
717번째 줄: | 716번째 줄: | ||
type Metadata struct { | type Metadata struct { | ||
Name | Name string `yaml:"name"` | ||
} | } | ||
type Rule struct { | type Rule struct { | ||
APIGroups []string `yaml:"apiGroups"` | APIGroups []string `yaml:"apiGroups"` | ||
NonResourceURLs []string `yaml:"nonResourceURLs"` | |||
Resources []string `yaml:"resources"` | Resources []string `yaml:"resources"` | ||
ResourceNames []string `yaml:"resourceNames"` | ResourceNames []string `yaml:"resourceNames"` | ||
Verbs []string `yaml:"verbs"` | |||
} | |||
type PolicyRule struct { | |||
Resource string | |||
NonResourceURLs []string | |||
ResourceNames []string | |||
Verbs []string | |||
} | } | ||
func transposeNonResourceURLs(rules [] | func transposeNonResourceURLs(rules []PolicyRule) []PolicyRule { | ||
var newRules [] | var newRules []PolicyRule | ||
for _, rule := range rules { | for _, rule := range rules { | ||
if len(rule.NonResourceURLs) < 2 { | if len(rule.NonResourceURLs) < 2 { | ||
743번째 줄: | 748번째 줄: | ||
} | } | ||
return newRules | return newRules | ||
} | } | ||
func describe(role Role) { | func describe(role Role) { | ||
policyRules := []PolicyRule{} | |||
for _, r := range role.Rules { | for _, r := range role.Rules { | ||
if len(r.APIGroups) == 0 { | if len(r.APIGroups) == 0 { | ||
policyRules = append(policyRules, PolicyRule{ | |||
Resource: "", | |||
NonResourceURLs: r.NonResourceURLs, | |||
ResourceNames: r.ResourceNames, | |||
Verbs: r.Verbs, | Verbs: r.Verbs, | ||
}) | }) | ||
continue | continue | ||
775번째 줄: | 768번째 줄: | ||
} | } | ||
for _, resource := range r.Resources { | for _, resource := range r.Resources { | ||
parts := strings.Split(resource, "/") | |||
if len(parts) == 1 { | if len(parts) == 1 { | ||
resource = resource + postfix | resource = resource + postfix | ||
781번째 줄: | 774번째 줄: | ||
resource = parts[0] + postfix + "/" + parts[1] | resource = parts[0] + postfix + "/" + parts[1] | ||
} | } | ||
var idx = -1 | var idx = -1 | ||
for i, rule := range | for i, rule := range policyRules { | ||
if | if rule.Resource != resource { | ||
continue | continue | ||
} | } | ||
797번째 줄: | 789번째 줄: | ||
} | } | ||
if idx >= 0 { | if idx >= 0 { | ||
policyRules[idx].Verbs = append(policyRules[idx].Verbs, r.Verbs...) | |||
} else { | } else { | ||
policyRules = append(policyRules, PolicyRule{ | |||
Resource: resource, | |||
NonResourceURLs: r.NonResourceURLs, | |||
ResourceNames: r.ResourceNames, | |||
Verbs: r.Verbs, | Verbs: r.Verbs, | ||
}) | }) | ||
} | } | ||
810번째 줄: | 801번째 줄: | ||
} | } | ||
} | } | ||
// transpose Non-Resource URLs | |||
policyRules = transposeNonResourceURLs(policyRules) | |||
fmt.Println("---") | fmt.Println("---") | ||
fmt.Println("Name:", role.Metadata.Name) | fmt.Println("Name:", role.Metadata.Name) | ||
fmt.Println("PolicyRule:") | fmt.Println("PolicyRule:") | ||
fmt.Printf(" %-50s %v %v %s\n", "Resources", "Non-Resource URLs", "Resource Names", "Verbs") | fmt.Printf(" %-50s %v %v %s\n", "Resources", "Non-Resource URLs", "Resource Names", "Verbs") | ||
for _, r := range | for _, r := range policyRules { | ||
fmt.Printf(" %-50s %v %v %s\n", r.Resource, r.NonResourceURLs, r.ResourceNames, r.Verbs) | |||
fmt.Printf(" %-50s %v %v %s\n", | |||
} | } | ||
} | } |