Use generic sets rather than deprecated sets.String
Kubernetes-commit: c3f15fd707a092e6cb7d96b84b81ada1f118d759
This commit is contained in:
parent
56c9d286fe
commit
608a0553d7
|
@ -123,11 +123,11 @@ func NewCmdAPIResources(restClientGetter genericclioptions.RESTClientGetter, ioS
|
||||||
|
|
||||||
// Validate checks to the APIResourceOptions to see if there is sufficient information run the command
|
// Validate checks to the APIResourceOptions to see if there is sufficient information run the command
|
||||||
func (o *APIResourceOptions) Validate() error {
|
func (o *APIResourceOptions) Validate() error {
|
||||||
supportedOutputTypes := sets.NewString("", "wide", "name")
|
supportedOutputTypes := sets.New[string]("", "wide", "name")
|
||||||
if !supportedOutputTypes.Has(o.Output) {
|
if !supportedOutputTypes.Has(o.Output) {
|
||||||
return fmt.Errorf("--output %v is not available", o.Output)
|
return fmt.Errorf("--output %v is not available", o.Output)
|
||||||
}
|
}
|
||||||
supportedSortTypes := sets.NewString("", "name", "kind")
|
supportedSortTypes := sets.New[string]("", "name", "kind")
|
||||||
if len(o.SortBy) > 0 {
|
if len(o.SortBy) > 0 {
|
||||||
if !supportedSortTypes.Has(o.SortBy) {
|
if !supportedSortTypes.Has(o.SortBy) {
|
||||||
return fmt.Errorf("--sort-by accepts only name or kind")
|
return fmt.Errorf("--sort-by accepts only name or kind")
|
||||||
|
@ -193,11 +193,11 @@ func (o *APIResourceOptions) RunAPIResources() error {
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
// filter to resources that support the specified verbs
|
// filter to resources that support the specified verbs
|
||||||
if len(o.Verbs) > 0 && !sets.NewString(resource.Verbs...).HasAll(o.Verbs...) {
|
if len(o.Verbs) > 0 && !sets.New[string](resource.Verbs...).HasAll(o.Verbs...) {
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
// filter to resources that belong to the specified categories
|
// filter to resources that belong to the specified categories
|
||||||
if len(o.Categories) > 0 && !sets.NewString(resource.Categories...).HasAll(o.Categories...) {
|
if len(o.Categories) > 0 && !sets.New[string](resource.Categories...).HasAll(o.Categories...) {
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
resources = append(resources, groupResource{
|
resources = append(resources, groupResource{
|
||||||
|
|
|
@ -105,10 +105,10 @@ var (
|
||||||
# List all allowed actions in namespace "foo"
|
# List all allowed actions in namespace "foo"
|
||||||
kubectl auth can-i --list --namespace=foo`)
|
kubectl auth can-i --list --namespace=foo`)
|
||||||
|
|
||||||
resourceVerbs = sets.NewString("get", "list", "watch", "create", "update", "patch", "delete", "deletecollection", "use", "bind", "impersonate", "*", "approve", "sign", "escalate", "attest")
|
resourceVerbs = sets.New[string]("get", "list", "watch", "create", "update", "patch", "delete", "deletecollection", "use", "bind", "impersonate", "*", "approve", "sign", "escalate", "attest")
|
||||||
nonResourceURLVerbs = sets.NewString("get", "put", "post", "head", "options", "delete", "patch", "*")
|
nonResourceURLVerbs = sets.New[string]("get", "put", "post", "head", "options", "delete", "patch", "*")
|
||||||
// holds all the server-supported resources that cannot be discovered by clients. i.e. users and groups for the impersonate verb
|
// holds all the server-supported resources that cannot be discovered by clients. i.e. users and groups for the impersonate verb
|
||||||
nonStandardResourceNames = sets.NewString("users", "groups")
|
nonStandardResourceNames = sets.New[string]("users", "groups")
|
||||||
)
|
)
|
||||||
|
|
||||||
// NewCmdCanI returns an initialized Command for 'auth can-i' sub command
|
// NewCmdCanI returns an initialized Command for 'auth can-i' sub command
|
||||||
|
|
|
@ -250,7 +250,7 @@ func printTableSelfSubjectAccessReview(obj runtime.Object, out io.Writer) error
|
||||||
}
|
}
|
||||||
|
|
||||||
if len(ui.Extra) > 0 {
|
if len(ui.Extra) > 0 {
|
||||||
for _, k := range sets.StringKeySet(ui.Extra).List() {
|
for _, k := range sets.List(sets.KeySet(ui.Extra)) {
|
||||||
v := ui.Extra[k]
|
v := ui.Extra[k]
|
||||||
_, err := fmt.Fprintf(w, "Extra: %s\t%v\n", k, v)
|
_, err := fmt.Fprintf(w, "Extra: %s\t%v\n", k, v)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
|
|
@ -89,7 +89,7 @@ func NewCmdConfigGetContexts(streams genericiooptions.IOStreams, configAccess cl
|
||||||
|
|
||||||
// Complete assigns GetContextsOptions from the args.
|
// Complete assigns GetContextsOptions from the args.
|
||||||
func (o *GetContextsOptions) Complete(cmd *cobra.Command, args []string) error {
|
func (o *GetContextsOptions) Complete(cmd *cobra.Command, args []string) error {
|
||||||
supportedOutputTypes := sets.NewString("", "name")
|
supportedOutputTypes := sets.New[string]("", "name")
|
||||||
if !supportedOutputTypes.Has(o.outputFormat) {
|
if !supportedOutputTypes.Has(o.outputFormat) {
|
||||||
return fmt.Errorf("--output %v is not available in kubectl config get-contexts; resetting to default output format", o.outputFormat)
|
return fmt.Errorf("--output %v is not available in kubectl config get-contexts; resetting to default output format", o.outputFormat)
|
||||||
}
|
}
|
||||||
|
|
|
@ -55,7 +55,7 @@ func newNavigationSteps(path string) (*navigationSteps, error) {
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
nextPart := findNameStep(individualParts[currPartIndex:], sets.StringKeySet(mapValueOptions))
|
nextPart := findNameStep(individualParts[currPartIndex:], sets.KeySet(mapValueOptions))
|
||||||
|
|
||||||
steps = append(steps, navigationStep{nextPart, mapValueType})
|
steps = append(steps, navigationStep{nextPart, mapValueType})
|
||||||
currPartIndex += len(strings.Split(nextPart, "."))
|
currPartIndex += len(strings.Split(nextPart, "."))
|
||||||
|
@ -98,7 +98,7 @@ func (s *navigationSteps) moreStepsRemaining() bool {
|
||||||
|
|
||||||
// findNameStep takes the list of parts and a set of valid tags that can be used after the name. It then walks the list of parts
|
// findNameStep takes the list of parts and a set of valid tags that can be used after the name. It then walks the list of parts
|
||||||
// until it find a valid "next" tag or until it reaches the end of the parts and then builds the name back up out of the individual parts
|
// until it find a valid "next" tag or until it reaches the end of the parts and then builds the name back up out of the individual parts
|
||||||
func findNameStep(parts []string, typeOptions sets.String) string {
|
func findNameStep(parts []string, typeOptions sets.Set[string]) string {
|
||||||
if len(parts) == 0 {
|
if len(parts) == 0 {
|
||||||
return ""
|
return ""
|
||||||
}
|
}
|
||||||
|
@ -136,7 +136,7 @@ func getPotentialTypeValues(typeValue reflect.Type) (map[string]reflect.Type, er
|
||||||
return ret, nil
|
return ret, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func findKnownValue(parts []string, valueOptions sets.String) int {
|
func findKnownValue(parts []string, valueOptions sets.Set[string]) int {
|
||||||
for i := range parts {
|
for i := range parts {
|
||||||
if valueOptions.Has(parts[i]) {
|
if valueOptions.Has(parts[i]) {
|
||||||
return i
|
return i
|
||||||
|
|
|
@ -425,7 +425,7 @@ func generateResourcePolicyRules(mapper meta.RESTMapper, verbs []string, resourc
|
||||||
|
|
||||||
// Create separate rule for each of the api group.
|
// Create separate rule for each of the api group.
|
||||||
rules := []rbacv1.PolicyRule{}
|
rules := []rbacv1.PolicyRule{}
|
||||||
for _, g := range sets.StringKeySet(groupResourceMapping).List() {
|
for _, g := range sets.List(sets.KeySet(groupResourceMapping)) {
|
||||||
rule := rbacv1.PolicyRule{}
|
rule := rbacv1.PolicyRule{}
|
||||||
rule.Verbs = verbs
|
rule.Verbs = verbs
|
||||||
rule.Resources = groupResourceMapping[g]
|
rule.Resources = groupResourceMapping[g]
|
||||||
|
|
|
@ -149,7 +149,7 @@ func NewCmdCreateToken(f cmdutil.Factory, ioStreams genericiooptions.IOStreams)
|
||||||
cmd.Flags().DurationVar(&o.Duration, "duration", o.Duration, "Requested lifetime of the issued token. If not set or if set to 0, the lifetime will be determined by the server automatically. The server may return a token with a longer or shorter lifetime.")
|
cmd.Flags().DurationVar(&o.Duration, "duration", o.Duration, "Requested lifetime of the issued token. If not set or if set to 0, the lifetime will be determined by the server automatically. The server may return a token with a longer or shorter lifetime.")
|
||||||
|
|
||||||
cmd.Flags().StringVar(&o.BoundObjectKind, "bound-object-kind", o.BoundObjectKind, "Kind of an object to bind the token to. "+
|
cmd.Flags().StringVar(&o.BoundObjectKind, "bound-object-kind", o.BoundObjectKind, "Kind of an object to bind the token to. "+
|
||||||
"Supported kinds are "+strings.Join(sets.StringKeySet(boundObjectKindToAPIVersions()).List(), ", ")+". "+
|
"Supported kinds are "+strings.Join(sets.List(sets.KeySet(boundObjectKindToAPIVersions())), ", ")+". "+
|
||||||
"If set, --bound-object-name must be provided.")
|
"If set, --bound-object-name must be provided.")
|
||||||
cmd.Flags().StringVar(&o.BoundObjectName, "bound-object-name", o.BoundObjectName, "Name of an object to bind the token to. "+
|
cmd.Flags().StringVar(&o.BoundObjectName, "bound-object-name", o.BoundObjectName, "Name of an object to bind the token to. "+
|
||||||
"The token will expire when the object is deleted. "+
|
"The token will expire when the object is deleted. "+
|
||||||
|
@ -227,7 +227,7 @@ func (o *TokenOptions) Validate() error {
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
if _, ok := boundObjectKindToAPIVersions()[o.BoundObjectKind]; !ok {
|
if _, ok := boundObjectKindToAPIVersions()[o.BoundObjectKind]; !ok {
|
||||||
return fmt.Errorf("supported --bound-object-kind values are %s", strings.Join(sets.StringKeySet(boundObjectKindToAPIVersions()).List(), ", "))
|
return fmt.Errorf("supported --bound-object-kind values are %s", strings.Join(sets.List(sets.KeySet(boundObjectKindToAPIVersions())), ", "))
|
||||||
}
|
}
|
||||||
if len(o.BoundObjectName) == 0 {
|
if len(o.BoundObjectName) == 0 {
|
||||||
return fmt.Errorf("--bound-object-name is required if --bound-object-kind is provided")
|
return fmt.Errorf("--bound-object-name is required if --bound-object-kind is provided")
|
||||||
|
|
|
@ -193,7 +193,7 @@ func (o *DescribeOptions) Run() error {
|
||||||
allErrs = append(allErrs, err)
|
allErrs = append(allErrs, err)
|
||||||
}
|
}
|
||||||
|
|
||||||
errs := sets.NewString()
|
errs := sets.New[string]()
|
||||||
first := true
|
first := true
|
||||||
for _, info := range infos {
|
for _, info := range infos {
|
||||||
mapping := info.ResourceMapping()
|
mapping := info.ResourceMapping()
|
||||||
|
|
|
@ -326,7 +326,7 @@ func (o *DrainCmdOptions) RunDrain() error {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
drainedNodes := sets.NewString()
|
drainedNodes := sets.New[string]()
|
||||||
var fatal []error
|
var fatal []error
|
||||||
|
|
||||||
remainingNodes := []string{}
|
remainingNodes := []string{}
|
||||||
|
|
|
@ -172,7 +172,7 @@ func TestEdit(t *testing.T) {
|
||||||
t.Setenv("KUBE_EDITOR", "testdata/test_editor.sh")
|
t.Setenv("KUBE_EDITOR", "testdata/test_editor.sh")
|
||||||
t.Setenv("KUBE_EDITOR_CALLBACK", server.URL+"/callback")
|
t.Setenv("KUBE_EDITOR_CALLBACK", server.URL+"/callback")
|
||||||
|
|
||||||
testcases := sets.NewString()
|
testcases := sets.New[string]()
|
||||||
filepath.Walk("testdata", func(path string, info os.FileInfo, err error) error {
|
filepath.Walk("testdata", func(path string, info os.FileInfo, err error) error {
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
|
@ -194,7 +194,7 @@ func TestEdit(t *testing.T) {
|
||||||
t.Fatalf("Error locating edit testcases")
|
t.Fatalf("Error locating edit testcases")
|
||||||
}
|
}
|
||||||
|
|
||||||
for _, testcaseName := range testcases.List() {
|
for _, testcaseName := range testcases.UnsortedList() {
|
||||||
t.Run(testcaseName, func(t *testing.T) {
|
t.Run(testcaseName, func(t *testing.T) {
|
||||||
i = 0
|
i = 0
|
||||||
name = testcaseName
|
name = testcaseName
|
||||||
|
|
|
@ -188,7 +188,7 @@ func (flags *EventsFlags) ToOptions() (*EventsOptions, error) {
|
||||||
}
|
}
|
||||||
|
|
||||||
if len(o.FilterTypes) > 0 {
|
if len(o.FilterTypes) > 0 {
|
||||||
o.FilterTypes = sets.NewString(o.FilterTypes...).List()
|
o.FilterTypes = sets.List(sets.New[string](o.FilterTypes...))
|
||||||
}
|
}
|
||||||
|
|
||||||
var printer printers.ResourcePrinter
|
var printer printers.ResourcePrinter
|
||||||
|
|
|
@ -486,7 +486,7 @@ func (o *GetOptions) Run(f cmdutil.Factory, args []string) error {
|
||||||
}
|
}
|
||||||
|
|
||||||
allErrs := []error{}
|
allErrs := []error{}
|
||||||
errs := sets.NewString()
|
errs := sets.New[string]()
|
||||||
infos, err := r.Infos()
|
infos, err := r.Infos()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
allErrs = append(allErrs, err)
|
allErrs = append(allErrs, err)
|
||||||
|
|
|
@ -137,7 +137,7 @@ func NewCmdPatch(f cmdutil.Factory, ioStreams genericiooptions.IOStreams) *cobra
|
||||||
|
|
||||||
cmd.Flags().StringVarP(&o.Patch, "patch", "p", "", "The patch to be applied to the resource JSON file.")
|
cmd.Flags().StringVarP(&o.Patch, "patch", "p", "", "The patch to be applied to the resource JSON file.")
|
||||||
cmd.Flags().StringVar(&o.PatchFile, "patch-file", "", "A file containing a patch to be applied to the resource.")
|
cmd.Flags().StringVar(&o.PatchFile, "patch-file", "", "A file containing a patch to be applied to the resource.")
|
||||||
cmd.Flags().StringVar(&o.PatchType, "type", "strategic", fmt.Sprintf("The type of patch being provided; one of %v", sets.StringKeySet(patchTypes).List()))
|
cmd.Flags().StringVar(&o.PatchType, "type", "strategic", fmt.Sprintf("The type of patch being provided; one of %v", sets.List(sets.KeySet(patchTypes))))
|
||||||
cmdutil.AddDryRunFlag(cmd)
|
cmdutil.AddDryRunFlag(cmd)
|
||||||
cmdutil.AddFilenameOptionFlags(cmd, &o.FilenameOptions, "identifying the resource to update")
|
cmdutil.AddFilenameOptionFlags(cmd, &o.FilenameOptions, "identifying the resource to update")
|
||||||
cmd.Flags().BoolVar(&o.Local, "local", o.Local, "If true, patch will operate on the content of the file, not the server-side resource.")
|
cmd.Flags().BoolVar(&o.Local, "local", o.Local, "If true, patch will operate on the content of the file, not the server-side resource.")
|
||||||
|
@ -194,7 +194,7 @@ func (o *PatchOptions) Validate() error {
|
||||||
}
|
}
|
||||||
if len(o.PatchType) != 0 {
|
if len(o.PatchType) != 0 {
|
||||||
if _, ok := patchTypes[strings.ToLower(o.PatchType)]; !ok {
|
if _, ok := patchTypes[strings.ToLower(o.PatchType)]; !ok {
|
||||||
return fmt.Errorf("--type must be one of %v, not %q", sets.StringKeySet(patchTypes).List(), o.PatchType)
|
return fmt.Errorf("--type must be one of %v, not %q", sets.List(sets.KeySet(patchTypes)), o.PatchType)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return nil
|
return nil
|
||||||
|
|
|
@ -247,7 +247,7 @@ func convertPodNamedPortToNumber(ports []string, pod corev1.Pod) ([]string, erro
|
||||||
return converted, nil
|
return converted, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func checkUDPPorts(udpOnlyPorts sets.Int, ports []string, obj metav1.Object) error {
|
func checkUDPPorts(udpOnlyPorts sets.Set[int], ports []string, obj metav1.Object) error {
|
||||||
for _, port := range ports {
|
for _, port := range ports {
|
||||||
_, remotePort := splitPort(port)
|
_, remotePort := splitPort(port)
|
||||||
portNum, err := strconv.Atoi(remotePort)
|
portNum, err := strconv.Atoi(remotePort)
|
||||||
|
@ -281,8 +281,8 @@ func checkUDPPorts(udpOnlyPorts sets.Int, ports []string, obj metav1.Object) err
|
||||||
// checkUDPPortInService returns an error if remote port in Service is a UDP port
|
// checkUDPPortInService returns an error if remote port in Service is a UDP port
|
||||||
// TODO: remove this check after #47862 is solved
|
// TODO: remove this check after #47862 is solved
|
||||||
func checkUDPPortInService(ports []string, svc *corev1.Service) error {
|
func checkUDPPortInService(ports []string, svc *corev1.Service) error {
|
||||||
udpPorts := sets.NewInt()
|
udpPorts := sets.New[int]()
|
||||||
tcpPorts := sets.NewInt()
|
tcpPorts := sets.New[int]()
|
||||||
for _, port := range svc.Spec.Ports {
|
for _, port := range svc.Spec.Ports {
|
||||||
portNum := int(port.Port)
|
portNum := int(port.Port)
|
||||||
switch port.Protocol {
|
switch port.Protocol {
|
||||||
|
@ -298,8 +298,8 @@ func checkUDPPortInService(ports []string, svc *corev1.Service) error {
|
||||||
// checkUDPPortInPod returns an error if remote port in Pod is a UDP port
|
// checkUDPPortInPod returns an error if remote port in Pod is a UDP port
|
||||||
// TODO: remove this check after #47862 is solved
|
// TODO: remove this check after #47862 is solved
|
||||||
func checkUDPPortInPod(ports []string, pod *corev1.Pod) error {
|
func checkUDPPortInPod(ports []string, pod *corev1.Pod) error {
|
||||||
udpPorts := sets.NewInt()
|
udpPorts := sets.New[int]()
|
||||||
tcpPorts := sets.NewInt()
|
tcpPorts := sets.New[int]()
|
||||||
for _, ct := range pod.Spec.Containers {
|
for _, ct := range pod.Spec.Containers {
|
||||||
for _, ctPort := range ct.Ports {
|
for _, ctPort := range ct.Ports {
|
||||||
portNum := int(ctPort.ContainerPort)
|
portNum := int(ctPort.ContainerPort)
|
||||||
|
|
|
@ -61,7 +61,7 @@ func SplitEnvironmentFromResources(args []string) (resources, envArgs []string,
|
||||||
// envVarType is for making errors more specific to user intentions.
|
// envVarType is for making errors more specific to user intentions.
|
||||||
func parseIntoEnvVar(spec []string, defaultReader io.Reader, envVarType string) ([]v1.EnvVar, []string, bool, error) {
|
func parseIntoEnvVar(spec []string, defaultReader io.Reader, envVarType string) ([]v1.EnvVar, []string, bool, error) {
|
||||||
env := []v1.EnvVar{}
|
env := []v1.EnvVar{}
|
||||||
exists := sets.NewString()
|
exists := sets.New[string]()
|
||||||
var remove []string
|
var remove []string
|
||||||
usedStdin := false
|
usedStdin := false
|
||||||
for _, envSpec := range spec {
|
for _, envSpec := range spec {
|
||||||
|
|
|
@ -158,11 +158,11 @@ func splitMaybeSubscriptedPath(fieldPath string) (string, string, bool) {
|
||||||
// formatMap formats map[string]string to a string.
|
// formatMap formats map[string]string to a string.
|
||||||
func formatMap(m map[string]string) (fmtStr string) {
|
func formatMap(m map[string]string) (fmtStr string) {
|
||||||
// output with keys in sorted order to provide stable output
|
// output with keys in sorted order to provide stable output
|
||||||
keys := sets.NewString()
|
keys := sets.New[string]()
|
||||||
for key := range m {
|
for key := range m {
|
||||||
keys.Insert(key)
|
keys.Insert(key)
|
||||||
}
|
}
|
||||||
for _, key := range keys.List() {
|
for _, key := range sets.List(keys) {
|
||||||
fmtStr += fmt.Sprintf("%v=%q\n", key, m[key])
|
fmtStr += fmt.Sprintf("%v=%q\n", key, m[key])
|
||||||
}
|
}
|
||||||
fmtStr = strings.TrimSuffix(fmtStr, "\n")
|
fmtStr = strings.TrimSuffix(fmtStr, "\n")
|
||||||
|
|
|
@ -19,7 +19,7 @@ package set
|
||||||
import (
|
import (
|
||||||
"strings"
|
"strings"
|
||||||
|
|
||||||
"k8s.io/api/core/v1"
|
v1 "k8s.io/api/core/v1"
|
||||||
"k8s.io/apimachinery/pkg/runtime"
|
"k8s.io/apimachinery/pkg/runtime"
|
||||||
"k8s.io/apimachinery/pkg/util/sets"
|
"k8s.io/apimachinery/pkg/util/sets"
|
||||||
"k8s.io/apimachinery/pkg/util/strategicpatch"
|
"k8s.io/apimachinery/pkg/util/strategicpatch"
|
||||||
|
@ -139,7 +139,7 @@ func findEnv(env []v1.EnvVar, name string) (v1.EnvVar, bool) {
|
||||||
// If a variable is both added and removed, the removal takes precedence.
|
// If a variable is both added and removed, the removal takes precedence.
|
||||||
func updateEnv(existing []v1.EnvVar, env []v1.EnvVar, remove []string) []v1.EnvVar {
|
func updateEnv(existing []v1.EnvVar, env []v1.EnvVar, remove []string) []v1.EnvVar {
|
||||||
out := []v1.EnvVar{}
|
out := []v1.EnvVar{}
|
||||||
covered := sets.NewString(remove...)
|
covered := sets.New[string](remove...)
|
||||||
for _, e := range existing {
|
for _, e := range existing {
|
||||||
if covered.Has(e.Name) {
|
if covered.Has(e.Name) {
|
||||||
continue
|
continue
|
||||||
|
|
|
@ -206,7 +206,7 @@ func (o *SubjectOptions) Validate() error {
|
||||||
func (o *SubjectOptions) Run(fn updateSubjects) error {
|
func (o *SubjectOptions) Run(fn updateSubjects) error {
|
||||||
patches := CalculatePatches(o.Infos, scheme.DefaultJSONEncoder(), func(obj runtime.Object) ([]byte, error) {
|
patches := CalculatePatches(o.Infos, scheme.DefaultJSONEncoder(), func(obj runtime.Object) ([]byte, error) {
|
||||||
subjects := []rbacv1.Subject{}
|
subjects := []rbacv1.Subject{}
|
||||||
for _, user := range sets.NewString(o.Users...).List() {
|
for _, user := range sets.List(sets.New[string](o.Users...)) {
|
||||||
subject := rbacv1.Subject{
|
subject := rbacv1.Subject{
|
||||||
Kind: rbacv1.UserKind,
|
Kind: rbacv1.UserKind,
|
||||||
APIGroup: rbacv1.GroupName,
|
APIGroup: rbacv1.GroupName,
|
||||||
|
@ -214,7 +214,7 @@ func (o *SubjectOptions) Run(fn updateSubjects) error {
|
||||||
}
|
}
|
||||||
subjects = append(subjects, subject)
|
subjects = append(subjects, subject)
|
||||||
}
|
}
|
||||||
for _, group := range sets.NewString(o.Groups...).List() {
|
for _, group := range sets.List(sets.New[string](o.Groups...)) {
|
||||||
subject := rbacv1.Subject{
|
subject := rbacv1.Subject{
|
||||||
Kind: rbacv1.GroupKind,
|
Kind: rbacv1.GroupKind,
|
||||||
APIGroup: rbacv1.GroupName,
|
APIGroup: rbacv1.GroupName,
|
||||||
|
@ -222,7 +222,7 @@ func (o *SubjectOptions) Run(fn updateSubjects) error {
|
||||||
}
|
}
|
||||||
subjects = append(subjects, subject)
|
subjects = append(subjects, subject)
|
||||||
}
|
}
|
||||||
for _, sa := range sets.NewString(o.ServiceAccounts...).List() {
|
for _, sa := range sets.List(sets.New[string](o.ServiceAccounts...)) {
|
||||||
tokens := strings.Split(sa, ":")
|
tokens := strings.Split(sa, ":")
|
||||||
namespace := tokens[0]
|
namespace := tokens[0]
|
||||||
name := tokens[1]
|
name := tokens[1]
|
||||||
|
|
|
@ -38,7 +38,7 @@ const (
|
||||||
// It also validates the spec. For example, the form `<key>` may be used to remove a taint, but not to add one.
|
// It also validates the spec. For example, the form `<key>` may be used to remove a taint, but not to add one.
|
||||||
func parseTaints(spec []string) ([]corev1.Taint, []corev1.Taint, error) {
|
func parseTaints(spec []string) ([]corev1.Taint, []corev1.Taint, error) {
|
||||||
var taints, taintsToRemove []corev1.Taint
|
var taints, taintsToRemove []corev1.Taint
|
||||||
uniqueTaints := map[corev1.TaintEffect]sets.String{}
|
uniqueTaints := map[corev1.TaintEffect]sets.Set[string]{}
|
||||||
|
|
||||||
for _, taintSpec := range spec {
|
for _, taintSpec := range spec {
|
||||||
if strings.HasSuffix(taintSpec, "-") {
|
if strings.HasSuffix(taintSpec, "-") {
|
||||||
|
@ -62,7 +62,7 @@ func parseTaints(spec []string) ([]corev1.Taint, []corev1.Taint, error) {
|
||||||
}
|
}
|
||||||
// add taint to existingTaints for uniqueness check
|
// add taint to existingTaints for uniqueness check
|
||||||
if len(uniqueTaints[newTaint.Effect]) == 0 {
|
if len(uniqueTaints[newTaint.Effect]) == 0 {
|
||||||
uniqueTaints[newTaint.Effect] = sets.String{}
|
uniqueTaints[newTaint.Effect] = sets.Set[string]{}
|
||||||
}
|
}
|
||||||
uniqueTaints[newTaint.Effect].Insert(newTaint.Key)
|
uniqueTaints[newTaint.Effect].Insert(newTaint.Key)
|
||||||
|
|
||||||
|
|
|
@ -222,7 +222,7 @@ func checkErr(err error, handleErr func(string, int)) {
|
||||||
|
|
||||||
func statusCausesToAggrError(scs []metav1.StatusCause) utilerrors.Aggregate {
|
func statusCausesToAggrError(scs []metav1.StatusCause) utilerrors.Aggregate {
|
||||||
errs := make([]error, 0, len(scs))
|
errs := make([]error, 0, len(scs))
|
||||||
errorMsgs := sets.NewString()
|
errorMsgs := sets.New[string]()
|
||||||
for _, sc := range scs {
|
for _, sc := range scs {
|
||||||
// check for duplicate error messages and skip them
|
// check for duplicate error messages and skip them
|
||||||
msg := fmt.Sprintf("%s: %s", sc.Field, sc.Message)
|
msg := fmt.Sprintf("%s: %s", sc.Field, sc.Message)
|
||||||
|
|
|
@ -97,7 +97,7 @@ const (
|
||||||
|
|
||||||
var (
|
var (
|
||||||
// globally skipped annotations
|
// globally skipped annotations
|
||||||
skipAnnotations = sets.NewString(corev1.LastAppliedConfigAnnotation)
|
skipAnnotations = sets.New[string](corev1.LastAppliedConfigAnnotation)
|
||||||
|
|
||||||
// DescriberFn gives a way to easily override the function for unit testing if needed
|
// DescriberFn gives a way to easily override the function for unit testing if needed
|
||||||
DescriberFn DescriberFunc = Describer
|
DescriberFn DescriberFunc = Describer
|
||||||
|
@ -1449,10 +1449,10 @@ func printCSIPersistentVolumeSource(csi *corev1.CSIPersistentVolumeSource, w Pre
|
||||||
}
|
}
|
||||||
|
|
||||||
func printCSIPersistentVolumeAttributesMultiline(w PrefixWriter, title string, annotations map[string]string) {
|
func printCSIPersistentVolumeAttributesMultiline(w PrefixWriter, title string, annotations map[string]string) {
|
||||||
printCSIPersistentVolumeAttributesMultilineIndent(w, "", title, "\t", annotations, sets.NewString())
|
printCSIPersistentVolumeAttributesMultilineIndent(w, "", title, "\t", annotations, sets.New[string]())
|
||||||
}
|
}
|
||||||
|
|
||||||
func printCSIPersistentVolumeAttributesMultilineIndent(w PrefixWriter, initialIndent, title, innerIndent string, attributes map[string]string, skip sets.String) {
|
func printCSIPersistentVolumeAttributesMultilineIndent(w PrefixWriter, initialIndent, title, innerIndent string, attributes map[string]string, skip sets.Set[string]) {
|
||||||
w.Write(LEVEL_2, "%s%s:%s", initialIndent, title, innerIndent)
|
w.Write(LEVEL_2, "%s%s:%s", initialIndent, title, innerIndent)
|
||||||
|
|
||||||
if len(attributes) == 0 {
|
if len(attributes) == 0 {
|
||||||
|
@ -2128,8 +2128,8 @@ func describeVolumeClaimTemplates(templates []corev1.PersistentVolumeClaim, w Pr
|
||||||
for _, pvc := range templates {
|
for _, pvc := range templates {
|
||||||
w.Write(LEVEL_1, "Name:\t%s\n", pvc.Name)
|
w.Write(LEVEL_1, "Name:\t%s\n", pvc.Name)
|
||||||
w.Write(LEVEL_1, "StorageClass:\t%s\n", storageutil.GetPersistentVolumeClaimClass(&pvc))
|
w.Write(LEVEL_1, "StorageClass:\t%s\n", storageutil.GetPersistentVolumeClaimClass(&pvc))
|
||||||
printLabelsMultilineWithIndent(w, " ", "Labels", "\t", pvc.Labels, sets.NewString())
|
printLabelsMultilineWithIndent(w, " ", "Labels", "\t", pvc.Labels, sets.New[string]())
|
||||||
printLabelsMultilineWithIndent(w, " ", "Annotations", "\t", pvc.Annotations, sets.NewString())
|
printLabelsMultilineWithIndent(w, " ", "Annotations", "\t", pvc.Annotations, sets.New[string]())
|
||||||
if capacity, ok := pvc.Spec.Resources.Requests[corev1.ResourceStorage]; ok {
|
if capacity, ok := pvc.Spec.Resources.Requests[corev1.ResourceStorage]; ok {
|
||||||
w.Write(LEVEL_1, "Capacity:\t%s\n", capacity.String())
|
w.Write(LEVEL_1, "Capacity:\t%s\n", capacity.String())
|
||||||
} else {
|
} else {
|
||||||
|
@ -3340,7 +3340,7 @@ func describeEndpointSliceV1beta1(eps *discoveryv1beta1.EndpointSlice, events *c
|
||||||
w.Write(LEVEL_2, "TargetRef:\t%s/%s\n", endpoint.TargetRef.Kind, endpoint.TargetRef.Name)
|
w.Write(LEVEL_2, "TargetRef:\t%s/%s\n", endpoint.TargetRef.Kind, endpoint.TargetRef.Name)
|
||||||
}
|
}
|
||||||
|
|
||||||
printLabelsMultilineWithIndent(w, " ", "Topology", "\t", endpoint.Topology, sets.NewString())
|
printLabelsMultilineWithIndent(w, " ", "Topology", "\t", endpoint.Topology, sets.New[string]())
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -3368,7 +3368,7 @@ func (d *ServiceAccountDescriber) Describe(namespace, name string, describerSett
|
||||||
|
|
||||||
// missingSecrets is the set of all secrets present in the
|
// missingSecrets is the set of all secrets present in the
|
||||||
// serviceAccount but not present in the set of existing secrets.
|
// serviceAccount but not present in the set of existing secrets.
|
||||||
missingSecrets := sets.NewString()
|
missingSecrets := sets.New[string]()
|
||||||
secrets := corev1.SecretList{}
|
secrets := corev1.SecretList{}
|
||||||
err = runtimeresource.FollowContinue(&metav1.ListOptions{Limit: describerSettings.ChunkSize},
|
err = runtimeresource.FollowContinue(&metav1.ListOptions{Limit: describerSettings.ChunkSize},
|
||||||
func(options metav1.ListOptions) (runtime.Object, error) {
|
func(options metav1.ListOptions) (runtime.Object, error) {
|
||||||
|
@ -3385,7 +3385,7 @@ func (d *ServiceAccountDescriber) Describe(namespace, name string, describerSett
|
||||||
if err == nil {
|
if err == nil {
|
||||||
// existingSecrets is the set of all secrets remaining on a
|
// existingSecrets is the set of all secrets remaining on a
|
||||||
// service account that are not present in the "tokens" slice.
|
// service account that are not present in the "tokens" slice.
|
||||||
existingSecrets := sets.NewString()
|
existingSecrets := sets.New[string]()
|
||||||
|
|
||||||
for _, s := range secrets.Items {
|
for _, s := range secrets.Items {
|
||||||
if s.Type == corev1.SecretTypeServiceAccountToken {
|
if s.Type == corev1.SecretTypeServiceAccountToken {
|
||||||
|
@ -3418,7 +3418,7 @@ func (d *ServiceAccountDescriber) Describe(namespace, name string, describerSett
|
||||||
return describeServiceAccount(serviceAccount, tokens, missingSecrets, events)
|
return describeServiceAccount(serviceAccount, tokens, missingSecrets, events)
|
||||||
}
|
}
|
||||||
|
|
||||||
func describeServiceAccount(serviceAccount *corev1.ServiceAccount, tokens []corev1.Secret, missingSecrets sets.String, events *corev1.EventList) (string, error) {
|
func describeServiceAccount(serviceAccount *corev1.ServiceAccount, tokens []corev1.Secret, missingSecrets sets.Set[string], events *corev1.EventList) (string, error) {
|
||||||
return tabbedString(func(out io.Writer) error {
|
return tabbedString(func(out io.Writer) error {
|
||||||
w := NewPrefixWriter(out)
|
w := NewPrefixWriter(out)
|
||||||
w.Write(LEVEL_0, "Name:\t%s\n", serviceAccount.Name)
|
w.Write(LEVEL_0, "Name:\t%s\n", serviceAccount.Name)
|
||||||
|
@ -3452,7 +3452,7 @@ func describeServiceAccount(serviceAccount *corev1.ServiceAccount, tokens []core
|
||||||
mountHeader: mountSecretNames,
|
mountHeader: mountSecretNames,
|
||||||
tokenHeader: tokenSecretNames,
|
tokenHeader: tokenSecretNames,
|
||||||
}
|
}
|
||||||
for _, header := range sets.StringKeySet(types).List() {
|
for _, header := range sets.List(sets.KeySet(types)) {
|
||||||
names := types[header]
|
names := types[header]
|
||||||
if len(names) == 0 {
|
if len(names) == 0 {
|
||||||
w.Write(LEVEL_0, "%s\t<none>\n", header)
|
w.Write(LEVEL_0, "%s\t<none>\n", header)
|
||||||
|
@ -5150,11 +5150,11 @@ func (fn typeFunc) Describe(exact interface{}, extra ...interface{}) (string, er
|
||||||
|
|
||||||
// printLabelsMultiline prints multiple labels with a proper alignment.
|
// printLabelsMultiline prints multiple labels with a proper alignment.
|
||||||
func printLabelsMultiline(w PrefixWriter, title string, labels map[string]string) {
|
func printLabelsMultiline(w PrefixWriter, title string, labels map[string]string) {
|
||||||
printLabelsMultilineWithIndent(w, "", title, "\t", labels, sets.NewString())
|
printLabelsMultilineWithIndent(w, "", title, "\t", labels, sets.New[string]())
|
||||||
}
|
}
|
||||||
|
|
||||||
// printLabelsMultiline prints multiple labels with a user-defined alignment.
|
// printLabelsMultiline prints multiple labels with a user-defined alignment.
|
||||||
func printLabelsMultilineWithIndent(w PrefixWriter, initialIndent, title, innerIndent string, labels map[string]string, skip sets.String) {
|
func printLabelsMultilineWithIndent(w PrefixWriter, initialIndent, title, innerIndent string, labels map[string]string, skip sets.Set[string]) {
|
||||||
w.Write(LEVEL_0, "%s%s:%s", initialIndent, title, innerIndent)
|
w.Write(LEVEL_0, "%s%s:%s", initialIndent, title, innerIndent)
|
||||||
|
|
||||||
if len(labels) == 0 {
|
if len(labels) == 0 {
|
||||||
|
@ -5568,7 +5568,7 @@ func backendStringer(backend *networkingv1beta1.IngressBackend) string {
|
||||||
// * a node-role.kubernetes.io/<role>="" label
|
// * a node-role.kubernetes.io/<role>="" label
|
||||||
// * a kubernetes.io/role="<role>" label
|
// * a kubernetes.io/role="<role>" label
|
||||||
func findNodeRoles(node *corev1.Node) []string {
|
func findNodeRoles(node *corev1.Node) []string {
|
||||||
roles := sets.NewString()
|
roles := sets.New[string]()
|
||||||
for k, v := range node.Labels {
|
for k, v := range node.Labels {
|
||||||
switch {
|
switch {
|
||||||
case strings.HasPrefix(k, LabelNodeRolePrefix):
|
case strings.HasPrefix(k, LabelNodeRolePrefix):
|
||||||
|
@ -5580,14 +5580,14 @@ func findNodeRoles(node *corev1.Node) []string {
|
||||||
roles.Insert(v)
|
roles.Insert(v)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return roles.List()
|
return sets.List(roles)
|
||||||
}
|
}
|
||||||
|
|
||||||
// ingressLoadBalancerStatusStringerV1 behaves mostly like a string interface and converts the given status to a string.
|
// ingressLoadBalancerStatusStringerV1 behaves mostly like a string interface and converts the given status to a string.
|
||||||
// `wide` indicates whether the returned value is meant for --o=wide output. If not, it's clipped to 16 bytes.
|
// `wide` indicates whether the returned value is meant for --o=wide output. If not, it's clipped to 16 bytes.
|
||||||
func ingressLoadBalancerStatusStringerV1(s networkingv1.IngressLoadBalancerStatus, wide bool) string {
|
func ingressLoadBalancerStatusStringerV1(s networkingv1.IngressLoadBalancerStatus, wide bool) string {
|
||||||
ingress := s.Ingress
|
ingress := s.Ingress
|
||||||
result := sets.NewString()
|
result := sets.New[string]()
|
||||||
for i := range ingress {
|
for i := range ingress {
|
||||||
if ingress[i].IP != "" {
|
if ingress[i].IP != "" {
|
||||||
result.Insert(ingress[i].IP)
|
result.Insert(ingress[i].IP)
|
||||||
|
@ -5596,7 +5596,7 @@ func ingressLoadBalancerStatusStringerV1(s networkingv1.IngressLoadBalancerStatu
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
r := strings.Join(result.List(), ",")
|
r := strings.Join(sets.List(result), ",")
|
||||||
if !wide && len(r) > LoadBalancerWidth {
|
if !wide && len(r) > LoadBalancerWidth {
|
||||||
r = r[0:(LoadBalancerWidth-3)] + "..."
|
r = r[0:(LoadBalancerWidth-3)] + "..."
|
||||||
}
|
}
|
||||||
|
@ -5607,7 +5607,7 @@ func ingressLoadBalancerStatusStringerV1(s networkingv1.IngressLoadBalancerStatu
|
||||||
// `wide` indicates whether the returned value is meant for --o=wide output. If not, it's clipped to 16 bytes.
|
// `wide` indicates whether the returned value is meant for --o=wide output. If not, it's clipped to 16 bytes.
|
||||||
func ingressLoadBalancerStatusStringerV1beta1(s networkingv1beta1.IngressLoadBalancerStatus, wide bool) string {
|
func ingressLoadBalancerStatusStringerV1beta1(s networkingv1beta1.IngressLoadBalancerStatus, wide bool) string {
|
||||||
ingress := s.Ingress
|
ingress := s.Ingress
|
||||||
result := sets.NewString()
|
result := sets.New[string]()
|
||||||
for i := range ingress {
|
for i := range ingress {
|
||||||
if ingress[i].IP != "" {
|
if ingress[i].IP != "" {
|
||||||
result.Insert(ingress[i].IP)
|
result.Insert(ingress[i].IP)
|
||||||
|
@ -5616,7 +5616,7 @@ func ingressLoadBalancerStatusStringerV1beta1(s networkingv1beta1.IngressLoadBal
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
r := strings.Join(result.List(), ",")
|
r := strings.Join(sets.List(result), ",")
|
||||||
if !wide && len(r) > LoadBalancerWidth {
|
if !wide && len(r) > LoadBalancerWidth {
|
||||||
r = r[0:(LoadBalancerWidth-3)] + "..."
|
r = r[0:(LoadBalancerWidth-3)] + "..."
|
||||||
}
|
}
|
||||||
|
|
|
@ -30,11 +30,11 @@ import (
|
||||||
// FormatMap formats map[string]string to a string.
|
// FormatMap formats map[string]string to a string.
|
||||||
func FormatMap(m map[string]string) (fmtStr string) {
|
func FormatMap(m map[string]string) (fmtStr string) {
|
||||||
// output with keys in sorted order to provide stable output
|
// output with keys in sorted order to provide stable output
|
||||||
keys := sets.NewString()
|
keys := sets.New[string]()
|
||||||
for key := range m {
|
for key := range m {
|
||||||
keys.Insert(key)
|
keys.Insert(key)
|
||||||
}
|
}
|
||||||
for _, key := range keys.List() {
|
for _, key := range sets.List(keys) {
|
||||||
fmtStr += fmt.Sprintf("%v=%q\n", key, m[key])
|
fmtStr += fmt.Sprintf("%v=%q\n", key, m[key])
|
||||||
}
|
}
|
||||||
fmtStr = strings.TrimSuffix(fmtStr, "\n")
|
fmtStr = strings.TrimSuffix(fmtStr, "\n")
|
||||||
|
|
|
@ -22,7 +22,7 @@ import (
|
||||||
"k8s.io/apimachinery/pkg/util/sets"
|
"k8s.io/apimachinery/pkg/util/sets"
|
||||||
)
|
)
|
||||||
|
|
||||||
var supportedQoSComputeResources = sets.NewString(string(core.ResourceCPU), string(core.ResourceMemory))
|
var supportedQoSComputeResources = sets.New[string](string(core.ResourceCPU), string(core.ResourceMemory))
|
||||||
|
|
||||||
func isSupportedQoSComputeResource(name core.ResourceName) bool {
|
func isSupportedQoSComputeResource(name core.ResourceName) bool {
|
||||||
return supportedQoSComputeResources.Has(string(name))
|
return supportedQoSComputeResources.Has(string(name))
|
||||||
|
|
|
@ -17,10 +17,11 @@ limitations under the License.
|
||||||
package rbac
|
package rbac
|
||||||
|
|
||||||
import (
|
import (
|
||||||
rbacv1 "k8s.io/api/rbac/v1"
|
|
||||||
"k8s.io/apimachinery/pkg/util/sets"
|
|
||||||
"reflect"
|
"reflect"
|
||||||
"strings"
|
"strings"
|
||||||
|
|
||||||
|
rbacv1 "k8s.io/api/rbac/v1"
|
||||||
|
"k8s.io/apimachinery/pkg/util/sets"
|
||||||
)
|
)
|
||||||
|
|
||||||
type simpleResource struct {
|
type simpleResource struct {
|
||||||
|
@ -43,7 +44,7 @@ func CompactRules(rules []rbacv1.PolicyRule) ([]rbacv1.PolicyRule, error) {
|
||||||
if existingRule.Verbs == nil {
|
if existingRule.Verbs == nil {
|
||||||
existingRule.Verbs = []string{}
|
existingRule.Verbs = []string{}
|
||||||
}
|
}
|
||||||
existingVerbs := sets.NewString(existingRule.Verbs...)
|
existingVerbs := sets.New[string](existingRule.Verbs...)
|
||||||
for _, verb := range rule.Verbs {
|
for _, verb := range rule.Verbs {
|
||||||
if !existingVerbs.Has(verb) {
|
if !existingVerbs.Has(verb) {
|
||||||
existingRule.Verbs = append(existingRule.Verbs, verb)
|
existingRule.Verbs = append(existingRule.Verbs, verb)
|
||||||
|
|
|
@ -254,7 +254,7 @@ func convertResourceEphemeralStorageToString(ephemeralStorage *resource.Quantity
|
||||||
return strconv.FormatInt(m, 10), nil
|
return strconv.FormatInt(m, 10), nil
|
||||||
}
|
}
|
||||||
|
|
||||||
var standardContainerResources = sets.NewString(
|
var standardContainerResources = sets.New[string](
|
||||||
string(corev1.ResourceCPU),
|
string(corev1.ResourceCPU),
|
||||||
string(corev1.ResourceMemory),
|
string(corev1.ResourceMemory),
|
||||||
string(corev1.ResourceEphemeralStorage),
|
string(corev1.ResourceEphemeralStorage),
|
||||||
|
|
Loading…
Reference in New Issue