@@ -17,10 +17,11 @@ import (
1717)
1818
1919var (
20- serviceAccount string
21- userID string
22- allAccounts bool
23- prefix bool
20+ serviceAccount string
21+ userID string
22+ allAccounts bool
23+ prefix bool
24+ patternTypeFlag string
2425)
2526
2627type requestParams struct {
@@ -56,12 +57,10 @@ func NewDeleteCommand(f *factory.Factory) *cobra.Command {
5657
5758 var errorCollection []error
5859
59- if opts .Operation == "" {
60- errorCollection = append (errorCollection , opts .Localizer .MustLocalizeError ("kafka.acl.common.flag.operation.required" ))
61- }
62-
63- if resourceErrors := aclcmdutil .ValidateAndSetResources (opts , aclFlagUtil .ResourceTypeFlagEntries ); resourceErrors != nil {
64- errorCollection = append (errorCollection , resourceErrors )
60+ selectedResourceTypeCount := aclcmdutil .SetACLResources (opts )
61+ if selectedResourceTypeCount > 1 {
62+ errorCollection = append (errorCollection ,
63+ opts .Localizer .MustLocalizeError ("kafka.acl.common.error.oneResourceTypeAllowed" , aclFlagUtil .ResourceTypeFlagEntries ... ))
6564 }
6665
6766 if principalErrors := validateAndSetOpts (opts ); principalErrors != nil {
@@ -82,7 +81,7 @@ func NewDeleteCommand(f *factory.Factory) *cobra.Command {
8281 flags .AddOperationFilter (& opts .Operation )
8382
8483 flags .AddCluster (& opts .Cluster )
85- flags . AddPrefix ( & prefix )
84+
8685 flags .AddTopic (& opts .Topic )
8786 flags .AddConsumerGroup (& opts .Group )
8887 flags .AddTransactionalID (& opts .TransactionalID )
@@ -92,6 +91,19 @@ func NewDeleteCommand(f *factory.Factory) *cobra.Command {
9291 flags .AddServiceAccount (& serviceAccount )
9392 flags .AddAllAccounts (& allAccounts )
9493 flags .AddYes (& opts .SkipConfirm )
94+ flags .AddPrefix (& prefix )
95+
96+ cmd .Flags ().StringVar (
97+ & patternTypeFlag ,
98+ "pattern-type" ,
99+ aclcmdutil .PatternTypeLITERAL ,
100+ opts .Localizer .MustLocalize ("kafka.acl.common.flag.patterntypes.description" ,
101+ localize .NewEntry ("Types" , aclcmdutil .PatternTypes )),
102+ )
103+
104+ _ = cmd .RegisterFlagCompletionFunc ("pattern-type" , func (cmd * cobra.Command , _ []string , toComplete string ) ([]string , cobra.ShellCompDirective ) {
105+ return aclcmdutil .PatternTypes , cobra .ShellCompDirectiveNoSpace
106+ })
95107
96108 return cmd
97109}
@@ -118,12 +130,15 @@ func runDelete(instanceID string, opts *aclcmdutil.CrudOptions) error {
118130 return err
119131 }
120132
121- if isValidOp , validResourceOperations := aclcmdutil .IsValidResourceOperation (opts .ResourceType , opts .Operation , resourceOperations ); ! isValidOp {
122- return opts .Localizer .MustLocalizeError ("kafka.acl.common.error.invalidResourceOperation" ,
123- localize .NewEntry ("ResourceType" , opts .ResourceType ),
124- localize .NewEntry ("Operation" , opts .Operation ),
125- localize .NewEntry ("ValidOperationList" , cmdutil .StringSliceToListStringWithQuotes (validResourceOperations )),
126- )
133+ // Validate only when both are present
134+ if opts .ResourceType != "" && opts .Operation != "" {
135+ if isValidOp , validResourceOperations := aclcmdutil .IsValidResourceOperation (opts .ResourceType , opts .Operation , resourceOperations ); ! isValidOp {
136+ return opts .Localizer .MustLocalizeError ("kafka.acl.common.error.invalidResourceOperation" ,
137+ localize .NewEntry ("ResourceType" , opts .ResourceType ),
138+ localize .NewEntry ("Operation" , opts .Operation ),
139+ localize .NewEntry ("ValidOperationList" , cmdutil .StringSliceToListStringWithQuotes (validResourceOperations )),
140+ )
141+ }
127142 }
128143
129144 kafkaNameTmplEntry := localize .NewEntry ("Name" , kafkaInstance .GetName ())
@@ -149,14 +164,29 @@ func runDelete(instanceID string, opts *aclcmdutil.CrudOptions) error {
149164
150165 requestParams := getRequestParams (opts )
151166
152- deletedACLs , httpRes , err := adminAPI .AclsApi .DeleteAcls (ctx ).
153- ResourceType (requestParams .resourceType ).
154- Principal (requestParams .principal ).
155- PatternType (requestParams .patternType ).
156- ResourceName (requestParams .resourceName ).
157- Operation (requestParams .operation ).
158- Permission (requestParams .permission ).
159- Execute ()
167+ requestDeleteAcls := adminAPI .AclsApi .DeleteAcls (ctx )
168+ if requestParams .resourceType != "" {
169+ requestDeleteAcls = requestDeleteAcls .ResourceType (requestParams .resourceType )
170+ }
171+
172+ if requestParams .principal != "" {
173+ requestDeleteAcls = requestDeleteAcls .Principal (requestParams .principal )
174+ }
175+
176+ if requestParams .resourceName != "" {
177+ requestDeleteAcls = requestDeleteAcls .ResourceName (requestParams .resourceName )
178+ }
179+ if requestParams .patternType != "" {
180+ requestDeleteAcls = requestDeleteAcls .PatternType (requestParams .patternType )
181+ }
182+ if requestParams .operation != "" {
183+ requestDeleteAcls = requestDeleteAcls .Operation (requestParams .operation )
184+ }
185+ if requestParams .permission != "" {
186+ requestDeleteAcls = requestDeleteAcls .Permission (requestParams .permission )
187+ }
188+
189+ deletedACLs , httpRes , err := requestDeleteAcls .Execute ()
160190
161191 if httpRes != nil {
162192 defer httpRes .Body .Close ()
@@ -226,7 +256,17 @@ func validateAndSetOpts(opts *aclcmdutil.CrudOptions) error {
226256 return opts .Localizer .MustLocalizeError ("kafka.acl.common.error.noPrincipalsSelected" )
227257 }
228258
229- opts .PatternType = aclcmdutil .PatternTypeLITERAL
259+ // Backwards compatibility:
260+
261+ switch patternTypeFlag {
262+ case aclcmdutil .PatternTypeANY :
263+ opts .PatternType = aclcmdutil .PatternTypeANY
264+ case aclcmdutil .PatternTypePREFIX :
265+ opts .PatternType = aclcmdutil .PatternTypePREFIX
266+ case aclcmdutil .PatternTypeLITERAL :
267+ opts .PatternType = aclcmdutil .PatternTypeLITERAL
268+ }
269+
230270 if prefix {
231271 opts .PatternType = aclcmdutil .PatternTypePREFIX
232272 }
0 commit comments