Skip to content

Commit d84340b

Browse files
committed
OCM-12964 | feat: Allow use of flag for deleting hcpsharedvpc policies
1 parent 5ef8291 commit d84340b

File tree

4 files changed

+55
-29
lines changed

4 files changed

+55
-29
lines changed

cmd/dlt/accountroles/cmd.go

Lines changed: 38 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -37,10 +37,15 @@ import (
3737
"github.com/openshift/rosa/pkg/rosa"
3838
)
3939

40+
const (
41+
deleteHcpSharedVpcPoliciesFlagName = "delete-hcp-shared-vpc-policies"
42+
)
43+
4044
var args struct {
41-
prefix string
42-
hostedCP bool
43-
classic bool
45+
prefix string
46+
hostedCP bool
47+
classic bool
48+
deleteHcpSharedVpcPolicies bool
4449
}
4550

4651
var Cmd = &cobra.Command{
@@ -79,6 +84,13 @@ func init() {
7984
"Delete classic account roles",
8085
)
8186

87+
flags.BoolVar(
88+
&args.deleteHcpSharedVpcPolicies,
89+
deleteHcpSharedVpcPoliciesFlagName,
90+
false,
91+
"Deletes the Hosted Control Plane shared vpc policies",
92+
)
93+
8294
interactive.AddModeFlag(Cmd)
8395
confirm.AddFlag(flags)
8496
}
@@ -153,7 +165,7 @@ func run(cmd *cobra.Command, _ []string) {
153165
}
154166

155167
if deleteClassic {
156-
err = deleteAccountRoles(r, env, prefix, clusters, mode, false)
168+
err = deleteAccountRoles(r, cmd, env, prefix, clusters, mode, false)
157169
if err != nil {
158170
r.Reporter.Errorf("%s", err)
159171
os.Exit(1)
@@ -165,7 +177,7 @@ func run(cmd *cobra.Command, _ []string) {
165177
}
166178

167179
if deleteHostedCP {
168-
err = deleteAccountRoles(r, env, prefix, clusters, mode, true)
180+
err = deleteAccountRoles(r, cmd, env, prefix, clusters, mode, true)
169181
if err != nil {
170182
r.Reporter.Errorf("%s", err)
171183
os.Exit(1)
@@ -182,8 +194,8 @@ func setDeleteRoles(isClassicFlagSet bool, isHostedCPFlagSet bool) (bool, bool)
182194
return isClassicFlagSet, isHostedCPFlagSet
183195
}
184196

185-
func deleteAccountRoles(r *rosa.Runtime, env string, prefix string, clusters []*cmv1.Cluster, mode string,
186-
hostedCP bool) error {
197+
func deleteAccountRoles(r *rosa.Runtime, cmd *cobra.Command, env string, prefix string, clusters []*cmv1.Cluster,
198+
mode string, hostedCP bool) error {
187199
var accountRolesMap map[string]aws.AccountRole
188200
var roleTypeString string
189201
if hostedCP {
@@ -203,28 +215,32 @@ func deleteAccountRoles(r *rosa.Runtime, env string, prefix string, clusters []*
203215
return nil
204216
}
205217

218+
deleteHcpSharedVpcPolicies := args.deleteHcpSharedVpcPolicies
219+
206220
switch mode {
207221
case interactive.ModeAuto:
208222
r.Reporter.Infof(fmt.Sprintf("Deleting %saccount roles", roleTypeString))
209223

210224
r.OCMClient.LogEvent("ROSADeleteAccountRoleModeAuto", nil)
211-
deleteHcpSharedVpcPolicies := false
212-
if roles.CheckIfRolesAreHcpSharedVpc(r, finalRoleList) {
213-
deleteHcpSharedVpcPolicies = confirm.Prompt(true, "Attempt to delete Hosted CP shared VPC"+
214-
" policies?")
225+
if roles.CheckIfRolesAreHcpSharedVpc(r, finalRoleList) &&
226+
!cmd.Flag(deleteHcpSharedVpcPoliciesFlagName).Changed {
227+
deleteHcpSharedVpcPolicies = confirm.Prompt(true, "Attempt to delete Hosted CP shared VPC policies?")
215228
}
216-
for _, role := range finalRoleList {
217-
if !confirm.Prompt(true, "Delete the account role '%s'?", role) {
218-
continue
219-
}
220-
r.Reporter.Infof("Deleting account role '%s'", role)
221-
err := r.AWSClient.DeleteAccountRole(role, prefix, managedPolicies, deleteHcpSharedVpcPolicies)
222-
if err != nil {
223-
r.Reporter.Warnf("There was an error deleting the account roles or policies: %s", err)
224-
continue
229+
230+
if deleteHcpSharedVpcPolicies {
231+
for _, role := range finalRoleList {
232+
if !confirm.Prompt(true, "Delete the account role '%s'?", role) {
233+
continue
234+
}
235+
r.Reporter.Infof("Deleting account role '%s'", role)
236+
err := r.AWSClient.DeleteAccountRole(role, prefix, managedPolicies, deleteHcpSharedVpcPolicies)
237+
if err != nil {
238+
r.Reporter.Warnf("There was an error deleting the account roles or policies: %s", err)
239+
continue
240+
}
225241
}
242+
r.Reporter.Infof(fmt.Sprintf("Successfully deleted the %s account roles", roleTypeString))
226243
}
227-
r.Reporter.Infof(fmt.Sprintf("Successfully deleted the %saccount roles", roleTypeString))
228244
case interactive.ModeManual:
229245
r.OCMClient.LogEvent("ROSADeleteAccountRoleModeManual", nil)
230246
policyMap, arbitraryPolicyMap, err := r.AWSClient.GetAccountRolePolicies(finalRoleList, prefix)
@@ -234,8 +250,7 @@ func deleteAccountRoles(r *rosa.Runtime, env string, prefix string, clusters []*
234250

235251
// Get HCP shared vpc policy details if the user is deleting roles related to HCP shared vpc
236252
policiesOutput := make([]*iam.GetPolicyOutput, 0)
237-
if roles.CheckIfRolesAreHcpSharedVpc(r, finalRoleList) &&
238-
confirm.Prompt(true, "Create commands to delete Hosted CP shared VPC policies?") {
253+
if roles.CheckIfRolesAreHcpSharedVpc(r, finalRoleList) && deleteHcpSharedVpcPolicies {
239254
for _, role := range finalRoleList {
240255
policies, err := r.AWSClient.GetPolicyDetailsFromRole(awssdk.String(role))
241256
policiesOutput = append(policiesOutput, policies...)

cmd/dlt/operatorrole/cmd.go

Lines changed: 15 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -39,11 +39,13 @@ import (
3939
)
4040

4141
const (
42-
PrefixFlag = "prefix"
42+
PrefixFlag = "prefix"
43+
deleteHcpSharedVpcPoliciesFlagName = "delete-hcp-shared-vpc-policies"
4344
)
4445

4546
var args struct {
46-
prefix string
47+
prefix string
48+
deleteHcpSharedVpcPolicies bool
4749
}
4850

4951
var Cmd = &cobra.Command{
@@ -67,6 +69,13 @@ func init() {
6769
"Operator role prefix, this flag needs to be used in case of reusable OIDC Config",
6870
)
6971

72+
flags.BoolVar(
73+
&args.deleteHcpSharedVpcPolicies,
74+
deleteHcpSharedVpcPoliciesFlagName,
75+
false,
76+
"Deletes the Hosted Control Plane shared vpc policies",
77+
)
78+
7079
ocm.AddOptionalClusterFlag(Cmd)
7180
interactive.AddModeFlag(Cmd)
7281
confirm.AddFlag(flags)
@@ -226,8 +235,9 @@ func run(cmd *cobra.Command, _ []string) {
226235
r.OCMClient.LogEvent("ROSADeleteOperatorroleModeAuto", nil)
227236

228237
// Only ask user if they want to delete policies if they are deleting HcpSharedVpc roles
229-
deleteHcpSharedVpcPolicies := false
230-
if roles.CheckIfRolesAreHcpSharedVpc(r, foundOperatorRoles) {
238+
deleteHcpSharedVpcPolicies := args.deleteHcpSharedVpcPolicies
239+
if roles.CheckIfRolesAreHcpSharedVpc(r, foundOperatorRoles) &&
240+
!cmd.Flag(deleteHcpSharedVpcPoliciesFlagName).Changed {
231241
deleteHcpSharedVpcPolicies = confirm.Prompt(true, "Attempt to delete Hosted CP shared VPC policies?")
232242
}
233243
allSharedVpcPoliciesNotDeleted := make(map[string]bool)
@@ -276,8 +286,7 @@ func run(cmd *cobra.Command, _ []string) {
276286

277287
// Get HCP shared vpc policy details if the user is deleting roles related to HCP shared vpc
278288
policiesOutput := make([]*iam.GetPolicyOutput, 0)
279-
if roles.CheckIfRolesAreHcpSharedVpc(r, foundOperatorRoles) &&
280-
confirm.Prompt(true, "Create commands to delete Hosted CP shared VPC policies?") {
289+
if roles.CheckIfRolesAreHcpSharedVpc(r, foundOperatorRoles) && args.deleteHcpSharedVpcPolicies {
281290
for _, role := range foundOperatorRoles {
282291
policies, err := r.AWSClient.GetPolicyDetailsFromRole(awssdk.String(role))
283292
policiesOutput = append(policiesOutput, policies...)

cmd/rosa/structure_test/command_args/rosa/delete/account-roles/command_args.yml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,4 +4,5 @@
44
- name: prefix
55
- name: profile
66
- name: region
7+
- name: delete-hcp-shared-vpc-policies
78
- name: "yes"

cmd/rosa/structure_test/command_args/rosa/delete/operator-roles/command_args.yml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,4 +3,5 @@
33
- name: prefix
44
- name: profile
55
- name: region
6+
- name: delete-hcp-shared-vpc-policies
67
- name: "yes"

0 commit comments

Comments
 (0)