@@ -96,11 +96,12 @@ func (o *RemoveFromProjectOptions) Complete(f *clientcmd.Factory, args []string,
96
96
}
97
97
98
98
func (o * RemoveFromProjectOptions ) Run () error {
99
- bindingList , err := o .Client .PolicyBindings (o .BindingNamespace ).List (metav1.ListOptions {})
99
+ roleBindings , err := o .Client .RoleBindings (o .BindingNamespace ).List (metav1.ListOptions {})
100
100
if err != nil {
101
101
return err
102
102
}
103
- sort .Sort (authorizationapi .PolicyBindingSorter (bindingList .Items ))
103
+ // maintain David's hack from #1973 (see #1975, #1976 and https://bugzilla.redhat.com/show_bug.cgi?id=1215969)
104
+ sort .Sort (sort .Reverse (authorizationapi .RoleBindingSorter (roleBindings .Items )))
104
105
105
106
usersRemoved := sets.String {}
106
107
groupsRemoved := sets.String {}
@@ -109,47 +110,45 @@ func (o *RemoveFromProjectOptions) Run() error {
109
110
110
111
subjectsToRemove := authorizationapi .BuildSubjects (o .Users , o .Groups , uservalidation .ValidateUserName , uservalidation .ValidateGroupName )
111
112
112
- for _ , currPolicyBinding := range bindingList .Items {
113
- for _ , currBinding := range authorizationapi .SortRoleBindings (currPolicyBinding .RoleBindings , true ) {
114
- originalSubjects := make ([]kapi.ObjectReference , len (currBinding .Subjects ))
115
- copy (originalSubjects , currBinding .Subjects )
116
- oldUsers , oldGroups , oldSAs , oldOthers := authorizationapi .SubjectsStrings (currBinding .Namespace , originalSubjects )
117
- oldUsersSet , oldGroupsSet , oldSAsSet , oldOtherSet := sets .NewString (oldUsers ... ), sets .NewString (oldGroups ... ), sets .NewString (oldSAs ... ), sets .NewString (oldOthers ... )
113
+ for _ , currBinding := range roleBindings .Items {
114
+ originalSubjects := make ([]kapi.ObjectReference , len (currBinding .Subjects ))
115
+ copy (originalSubjects , currBinding .Subjects )
116
+ oldUsers , oldGroups , oldSAs , oldOthers := authorizationapi .SubjectsStrings (currBinding .Namespace , originalSubjects )
117
+ oldUsersSet , oldGroupsSet , oldSAsSet , oldOtherSet := sets .NewString (oldUsers ... ), sets .NewString (oldGroups ... ), sets .NewString (oldSAs ... ), sets .NewString (oldOthers ... )
118
118
119
- currBinding .Subjects = removeSubjects (currBinding .Subjects , subjectsToRemove )
120
- newUsers , newGroups , newSAs , newOthers := authorizationapi .SubjectsStrings (currBinding .Namespace , currBinding .Subjects )
121
- newUsersSet , newGroupsSet , newSAsSet , newOtherSet := sets .NewString (newUsers ... ), sets .NewString (newGroups ... ), sets .NewString (newSAs ... ), sets .NewString (newOthers ... )
119
+ currBinding .Subjects = removeSubjects (currBinding .Subjects , subjectsToRemove )
120
+ newUsers , newGroups , newSAs , newOthers := authorizationapi .SubjectsStrings (currBinding .Namespace , currBinding .Subjects )
121
+ newUsersSet , newGroupsSet , newSAsSet , newOtherSet := sets .NewString (newUsers ... ), sets .NewString (newGroups ... ), sets .NewString (newSAs ... ), sets .NewString (newOthers ... )
122
122
123
- if len (currBinding .Subjects ) == len (originalSubjects ) {
124
- continue
125
- }
123
+ if len (currBinding .Subjects ) == len (originalSubjects ) {
124
+ continue
125
+ }
126
126
127
- _ , err = o .Client .RoleBindings (o .BindingNamespace ).Update (currBinding )
128
- if err != nil {
129
- return err
130
- }
127
+ _ , err = o .Client .RoleBindings (o .BindingNamespace ).Update (& currBinding )
128
+ if err != nil {
129
+ return err
130
+ }
131
131
132
- roleDisplayName := fmt .Sprintf ("%s/%s" , currBinding .RoleRef .Namespace , currBinding .RoleRef .Name )
133
- if len (currBinding .RoleRef .Namespace ) == 0 {
134
- roleDisplayName = currBinding .RoleRef .Name
135
- }
132
+ roleDisplayName := fmt .Sprintf ("%s/%s" , currBinding .RoleRef .Namespace , currBinding .RoleRef .Name )
133
+ if len (currBinding .RoleRef .Namespace ) == 0 {
134
+ roleDisplayName = currBinding .RoleRef .Name
135
+ }
136
136
137
- if diff := oldUsersSet .Difference (newUsersSet ); len (diff ) != 0 {
138
- fmt .Fprintf (o .Out , "Removing %s from users %v in project %s.\n " , roleDisplayName , diff .List (), o .BindingNamespace )
139
- usersRemoved .Insert (diff .List ()... )
140
- }
141
- if diff := oldGroupsSet .Difference (newGroupsSet ); len (diff ) != 0 {
142
- fmt .Fprintf (o .Out , "Removing %s from groups %v in project %s.\n " , roleDisplayName , diff .List (), o .BindingNamespace )
143
- groupsRemoved .Insert (diff .List ()... )
144
- }
145
- if diff := oldSAsSet .Difference (newSAsSet ); len (diff ) != 0 {
146
- fmt .Fprintf (o .Out , "Removing %s from serviceaccounts %v in project %s.\n " , roleDisplayName , diff .List (), o .BindingNamespace )
147
- sasRemoved .Insert (diff .List ()... )
148
- }
149
- if diff := oldOtherSet .Difference (newOtherSet ); len (diff ) != 0 {
150
- fmt .Fprintf (o .Out , "Removing %s from subjects %v in project %s.\n " , roleDisplayName , diff .List (), o .BindingNamespace )
151
- othersRemoved .Insert (diff .List ()... )
152
- }
137
+ if diff := oldUsersSet .Difference (newUsersSet ); len (diff ) != 0 {
138
+ fmt .Fprintf (o .Out , "Removing %s from users %v in project %s.\n " , roleDisplayName , diff .List (), o .BindingNamespace )
139
+ usersRemoved .Insert (diff .List ()... )
140
+ }
141
+ if diff := oldGroupsSet .Difference (newGroupsSet ); len (diff ) != 0 {
142
+ fmt .Fprintf (o .Out , "Removing %s from groups %v in project %s.\n " , roleDisplayName , diff .List (), o .BindingNamespace )
143
+ groupsRemoved .Insert (diff .List ()... )
144
+ }
145
+ if diff := oldSAsSet .Difference (newSAsSet ); len (diff ) != 0 {
146
+ fmt .Fprintf (o .Out , "Removing %s from serviceaccounts %v in project %s.\n " , roleDisplayName , diff .List (), o .BindingNamespace )
147
+ sasRemoved .Insert (diff .List ()... )
148
+ }
149
+ if diff := oldOtherSet .Difference (newOtherSet ); len (diff ) != 0 {
150
+ fmt .Fprintf (o .Out , "Removing %s from subjects %v in project %s.\n " , roleDisplayName , diff .List (), o .BindingNamespace )
151
+ othersRemoved .Insert (diff .List ()... )
153
152
}
154
153
}
155
154
0 commit comments