7
7
"time"
8
8
9
9
"github.com/crowdstrike/gofalcon/falcon/client"
10
- "github.com/crowdstrike/gofalcon/falcon/client/device_control_policies"
11
10
"github.com/crowdstrike/gofalcon/falcon/client/firewall_policies"
12
11
"github.com/crowdstrike/gofalcon/falcon/client/host_group"
13
12
"github.com/crowdstrike/gofalcon/falcon/client/prevention_policies"
@@ -95,11 +94,6 @@ var apiScopes = []scopes.Scope{
95
94
Read : true ,
96
95
Write : true ,
97
96
},
98
- {
99
- Name : "Device control policies" ,
100
- Read : true ,
101
- Write : true ,
102
- },
103
97
{
104
98
Name : "Firewall management" ,
105
99
Read : true ,
@@ -362,31 +356,15 @@ func (r *hostGroupResource) Delete(
362
356
return
363
357
}
364
358
365
- // all assinged policies must be removed before we are able to delete the host group
366
- resp .Diagnostics .Append (r .purgeSensorUpdatePolicies (ctx , state .ID .ValueString ())... )
367
- if resp .Diagnostics .HasError () {
368
- return
369
- }
370
-
371
- resp .Diagnostics .Append (r .purgeUSBDeviceControlPolicies (ctx , state .ID .ValueString ())... )
372
- if resp .Diagnostics .HasError () {
373
- return
374
- }
375
-
376
- resp .Diagnostics .Append (r .purgeFirewallPolicies (ctx , state .ID .ValueString ())... )
377
- if resp .Diagnostics .HasError () {
378
- return
379
- }
380
-
381
- resp .Diagnostics .Append (r .purgePreventionPolicies (ctx , state .ID .ValueString ())... )
382
- if resp .Diagnostics .HasError () {
383
- return
384
- }
359
+ // some cxs may not have all modules so they will get a 403
360
+ // storing errors in tempDiags and only throw them after a failed 409 delete
361
+ var tempDiags diag.Diagnostics
385
362
386
- resp .Diagnostics .Append (r .purgeResponsePolicies (ctx , state .ID .ValueString ())... )
387
- if resp .Diagnostics .HasError () {
388
- return
389
- }
363
+ // all assinged policies must be removed before we are able to delete the host group
364
+ tempDiags .Append (r .purgeSensorUpdatePolicies (ctx , state .ID .ValueString ())... )
365
+ tempDiags .Append (r .purgeFirewallPolicies (ctx , state .ID .ValueString ())... )
366
+ tempDiags .Append (r .purgePreventionPolicies (ctx , state .ID .ValueString ())... )
367
+ tempDiags .Append (r .purgeResponsePolicies (ctx , state .ID .ValueString ())... )
390
368
391
369
// removal of assigned policies return before the host group is ready to be deleted
392
370
// adding a simple sleep.
@@ -401,9 +379,10 @@ func (r *hostGroupResource) Delete(
401
379
402
380
if err != nil {
403
381
if strings .Contains (err .Error (), "409" ) {
382
+ resp .Diagnostics .Append (tempDiags ... )
404
383
resp .Diagnostics .AddError (
405
384
"Error deleting CrowdStrike host group" ,
406
- "Please remove all assigned policies (firewall policies, prevention policies, etc) and try again. " + err .Error (),
385
+ "Please ensure you have the correct api scopes or remove all assigned policies manually (firewall policies, prevention policies, etc) and try again. " + err .Error (),
407
386
)
408
387
} else {
409
388
resp .Diagnostics .AddError (
@@ -449,91 +428,32 @@ func (r *hostGroupResource) purgeSensorUpdatePolicies(
449
428
}
450
429
451
430
policies := res .Payload .Resources
452
-
453
- if len (policies ) == 0 {
454
- return diags
455
- }
456
-
457
431
name := "group_id"
458
- _ , err = r .client .SensorUpdatePolicies .PerformSensorUpdatePoliciesAction (
459
- & sensor_update_policies.PerformSensorUpdatePoliciesActionParams {
460
- Context : ctx ,
461
- ActionName : "remove-host-group" ,
462
- Body : & models.MsaEntityActionRequestV2 {
463
- ActionParameters : []* models.MsaspecActionParameter {
464
- {
465
- Name : & name ,
466
- Value : & hostGroupID ,
467
- },
468
- },
469
- Ids : policies ,
470
- },
471
- },
472
- )
473
-
474
- if err != nil {
475
- diags .AddError (
476
- "Error deleting CrowdStrike host group" ,
477
- "Unable to remove assigned sensor update policies " + err .Error (),
478
- )
479
- return diags
480
- }
481
-
482
- return diags
483
- }
484
-
485
- // purgeUSBDeviceControlPolicies removes all usb device control policies from a host group.
486
- func (r * hostGroupResource ) purgeUSBDeviceControlPolicies (
487
- ctx context.Context ,
488
- hostGroupID string ,
489
- ) diag.Diagnostics {
490
- var diags diag.Diagnostics
491
-
492
- filter := fmt .Sprintf ("groups:'%s'" , hostGroupID )
493
- res , err := r .client .DeviceControlPolicies .QueryDeviceControlPolicies (
494
- & device_control_policies.QueryDeviceControlPoliciesParams {
495
- Context : ctx ,
496
- Filter : & filter ,
497
- },
498
- )
499
-
500
- if err != nil {
501
- diags .AddError (
502
- "Error deleting CrowdStrike host group" ,
503
- "Unable to read assigned usb device control policies " + err .Error (),
504
- )
505
- return diags
506
- }
507
-
508
- policies := res .Payload .Resources
509
432
510
- if len (policies ) == 0 {
511
- return diags
512
- }
513
-
514
- name := "group_id"
515
- _ , err = r .client .DeviceControlPolicies .PerformDeviceControlPoliciesAction (
516
- & device_control_policies.PerformDeviceControlPoliciesActionParams {
517
- Context : ctx ,
518
- ActionName : "remove-host-group" ,
519
- Body : & models.MsaEntityActionRequestV2 {
520
- ActionParameters : []* models.MsaspecActionParameter {
521
- {
522
- Name : & name ,
523
- Value : & hostGroupID ,
433
+ for _ , policy := range policies {
434
+ _ , err = r .client .SensorUpdatePolicies .PerformSensorUpdatePoliciesAction (
435
+ & sensor_update_policies.PerformSensorUpdatePoliciesActionParams {
436
+ Context : ctx ,
437
+ ActionName : "remove-host-group" ,
438
+ Body : & models.MsaEntityActionRequestV2 {
439
+ ActionParameters : []* models.MsaspecActionParameter {
440
+ {
441
+ Name : & name ,
442
+ Value : & hostGroupID ,
443
+ },
524
444
},
445
+ Ids : []string {policy },
525
446
},
526
- Ids : policies ,
527
447
},
528
- },
529
- )
530
-
531
- if err != nil {
532
- diags .AddError (
533
- "Error deleting CrowdStrike host group" ,
534
- "Unable to remove assigned usb device control policies " + err .Error (),
535
448
)
536
- return diags
449
+
450
+ if err != nil {
451
+ diags .AddError (
452
+ "Error deleting CrowdStrike host group" ,
453
+ "Unable to remove assigned sensor update policies " + err .Error (),
454
+ )
455
+ return diags
456
+ }
537
457
}
538
458
539
459
return diags
@@ -563,34 +483,32 @@ func (r *hostGroupResource) purgePreventionPolicies(
563
483
}
564
484
565
485
policies := res .Payload .Resources
566
-
567
- if len (policies ) == 0 {
568
- return diags
569
- }
570
-
571
486
name := "group_id"
572
- _ , err = r .client .PreventionPolicies .PerformPreventionPoliciesAction (
573
- & prevention_policies.PerformPreventionPoliciesActionParams {
574
- Context : ctx ,
575
- ActionName : "remove-host-group" ,
576
- Body : & models.MsaEntityActionRequestV2 {
577
- ActionParameters : []* models.MsaspecActionParameter {
578
- {
579
- Name : & name ,
580
- Value : & hostGroupID ,
487
+
488
+ for _ , policy := range policies {
489
+ _ , err = r .client .PreventionPolicies .PerformPreventionPoliciesAction (
490
+ & prevention_policies.PerformPreventionPoliciesActionParams {
491
+ Context : ctx ,
492
+ ActionName : "remove-host-group" ,
493
+ Body : & models.MsaEntityActionRequestV2 {
494
+ ActionParameters : []* models.MsaspecActionParameter {
495
+ {
496
+ Name : & name ,
497
+ Value : & hostGroupID ,
498
+ },
581
499
},
500
+ Ids : []string {policy },
582
501
},
583
- Ids : policies ,
584
502
},
585
- },
586
- )
587
-
588
- if err != nil {
589
- diags .AddError (
590
- "Error deleting CrowdStrike host group" ,
591
- "Unable to remove assigned prevention policies " + err .Error (),
592
503
)
593
- return diags
504
+
505
+ if err != nil {
506
+ diags .AddError (
507
+ "Error deleting CrowdStrike host group" ,
508
+ "Unable to remove assigned prevention policies " + err .Error (),
509
+ )
510
+ return diags
511
+ }
594
512
}
595
513
596
514
return diags
@@ -620,34 +538,32 @@ func (r *hostGroupResource) purgeFirewallPolicies(
620
538
}
621
539
622
540
policies := res .Payload .Resources
623
-
624
- if len (policies ) == 0 {
625
- return diags
626
- }
627
-
628
541
name := "group_id"
629
- _ , err = r .client .FirewallPolicies .PerformFirewallPoliciesAction (
630
- & firewall_policies.PerformFirewallPoliciesActionParams {
631
- Context : ctx ,
632
- ActionName : "remove-host-group" ,
633
- Body : & models.MsaEntityActionRequestV2 {
634
- ActionParameters : []* models.MsaspecActionParameter {
635
- {
636
- Name : & name ,
637
- Value : & hostGroupID ,
542
+
543
+ for _ , policy := range policies {
544
+ _ , err = r .client .FirewallPolicies .PerformFirewallPoliciesAction (
545
+ & firewall_policies.PerformFirewallPoliciesActionParams {
546
+ Context : ctx ,
547
+ ActionName : "remove-host-group" ,
548
+ Body : & models.MsaEntityActionRequestV2 {
549
+ ActionParameters : []* models.MsaspecActionParameter {
550
+ {
551
+ Name : & name ,
552
+ Value : & hostGroupID ,
553
+ },
638
554
},
555
+ Ids : []string {policy },
639
556
},
640
- Ids : policies ,
641
557
},
642
- },
643
- )
644
-
645
- if err != nil {
646
- diags .AddError (
647
- "Error deleting CrowdStrike host group" ,
648
- "Unable to remove assigned firewall prevention policies " + err .Error (),
649
558
)
650
- return diags
559
+
560
+ if err != nil {
561
+ diags .AddError (
562
+ "Error deleting CrowdStrike host group" ,
563
+ "Unable to remove assigned firewall prevention policies " + err .Error (),
564
+ )
565
+ return diags
566
+ }
651
567
}
652
568
653
569
return diags
@@ -677,34 +593,32 @@ func (r *hostGroupResource) purgeResponsePolicies(
677
593
}
678
594
679
595
policies := res .Payload .Resources
680
-
681
- if len (policies ) == 0 {
682
- return diags
683
- }
684
-
685
596
name := "group_id"
686
- _ , err = r .client .ResponsePolicies .PerformRTResponsePoliciesAction (
687
- & response_policies.PerformRTResponsePoliciesActionParams {
688
- Context : ctx ,
689
- ActionName : "remove-host-group" ,
690
- Body : & models.MsaEntityActionRequestV2 {
691
- ActionParameters : []* models.MsaspecActionParameter {
692
- {
693
- Name : & name ,
694
- Value : & hostGroupID ,
597
+
598
+ for _ , policy := range policies {
599
+ _ , err = r .client .ResponsePolicies .PerformRTResponsePoliciesAction (
600
+ & response_policies.PerformRTResponsePoliciesActionParams {
601
+ Context : ctx ,
602
+ ActionName : "remove-host-group" ,
603
+ Body : & models.MsaEntityActionRequestV2 {
604
+ ActionParameters : []* models.MsaspecActionParameter {
605
+ {
606
+ Name : & name ,
607
+ Value : & hostGroupID ,
608
+ },
695
609
},
610
+ Ids : []string {policy },
696
611
},
697
- Ids : policies ,
698
612
},
699
- },
700
- )
701
-
702
- if err != nil {
703
- diags .AddError (
704
- "Error deleting CrowdStrike host group" ,
705
- "Unable to remove assigned response policies " + err .Error (),
706
613
)
707
- return diags
614
+
615
+ if err != nil {
616
+ diags .AddError (
617
+ "Error deleting CrowdStrike host group" ,
618
+ "Unable to remove assigned response policies " + err .Error (),
619
+ )
620
+ return diags
621
+ }
708
622
}
709
623
710
624
return diags
0 commit comments