@@ -482,6 +482,98 @@ func TestAccSumologicMonitorsLibraryMonitor_driftingCorrectionFGP(t *testing.T)
482482 })
483483}
484484
485+ func TestAccSumologicMonitorsLibraryMonitor_update_folder (t * testing.T ) {
486+ var monitorsLibraryMonitor MonitorsLibraryMonitor
487+ testNameSuffix := acctest .RandString (16 )
488+
489+ testName := "terraform_test_monitor_" + testNameSuffix
490+ testType := "MonitorsLibraryMonitor"
491+ testMonitorType := "Logs"
492+ //testAlertName := "Alert from {{Name}}"
493+ folder1tfResourceKey := "sumologic_monitor_folder.tf_folder_01"
494+ folder2tfResourceKey := "sumologic_monitor_folder.tf_folder_02"
495+
496+ resource .Test (t , resource.TestCase {
497+ PreCheck : func () { testAccPreCheck (t ) },
498+ Providers : testAccProviders ,
499+ CheckDestroy : testAccCheckMonitorsLibraryMonitorDestroy (monitorsLibraryMonitor ),
500+ Steps : []resource.TestStep {
501+ {
502+ Config : testAccSumologicMonitorsLibraryMonitorFolderUpdate (testNameSuffix , folder1tfResourceKey ),
503+ Check : resource .ComposeTestCheckFunc (
504+ testAccCheckMonitorsLibraryMonitorExists ("sumologic_monitor.test" , & monitorsLibraryMonitor , t ),
505+ testAccCheckMonitorsLibraryMonitorAttributes ("sumologic_monitor.test" ),
506+ resource .TestCheckResourceAttr ("sumologic_monitor.test" , "monitor_type" , testMonitorType ),
507+ resource .TestCheckResourceAttr ("sumologic_monitor.test" , "name" , testName ),
508+ resource .TestCheckResourceAttr ("sumologic_monitor.test" , "type" , testType ),
509+ testAccCheckMonitorsLibraryMonitorFolderMatch ("sumologic_monitor.test" , folder1tfResourceKey , t ),
510+ ),
511+ },
512+ {
513+ Config : testAccSumologicMonitorsLibraryMonitorFolderUpdate (testNameSuffix , folder2tfResourceKey ),
514+ Check : resource .ComposeTestCheckFunc (
515+ testAccCheckMonitorsLibraryMonitorExists ("sumologic_monitor.test" , & monitorsLibraryMonitor , t ),
516+ testAccCheckMonitorsLibraryMonitorAttributes ("sumologic_monitor.test" ),
517+ resource .TestCheckResourceAttr ("sumologic_monitor.test" , "monitor_type" , testMonitorType ),
518+ resource .TestCheckResourceAttr ("sumologic_monitor.test" , "name" , testName ),
519+ resource .TestCheckResourceAttr ("sumologic_monitor.test" , "type" , testType ),
520+ testAccCheckMonitorsLibraryMonitorFolderMatch ("sumologic_monitor.test" , folder2tfResourceKey , t ),
521+ ),
522+ },
523+ },
524+ })
525+ }
526+
527+ func testAccCheckMonitorsLibraryMonitorFolderMatch (monitorName string , folderName string , t * testing.T ) resource.TestCheckFunc {
528+ return func (s * terraform.State ) error {
529+ //fetching monitor information
530+ monitorResource , ok := s .RootModule ().Resources [monitorName ]
531+ if ! ok {
532+ //need this so that we don't get an unused import error for strconv in some cases
533+ return fmt .Errorf ("Error = %s. MonitorsLibraryMonitor not found: %s" , strconv .FormatBool (ok ), monitorName )
534+ }
535+
536+ //need this so that we don't get an unused import error for strings in some cases
537+ if strings .EqualFold (monitorResource .Primary .ID , "" ) {
538+ return fmt .Errorf ("MonitorsLibraryMonitor ID is not set" )
539+ }
540+
541+ monitorResourceId := monitorResource .Primary .ID
542+
543+ client := testAccProvider .Meta ().(* Client )
544+ monitorsLibraryMonitor , err := client .MonitorsRead (monitorResourceId )
545+
546+ if err != nil {
547+ return fmt .Errorf ("MonitorsLibraryMonitor %s not found" , monitorResourceId )
548+ }
549+
550+ //fetching monitor folder information
551+ folderResource , ok := s .RootModule ().Resources [folderName ]
552+ if ! ok {
553+ //need this so that we don't get an unused import error for strconv in some cases
554+ return fmt .Errorf ("Error = %s. MonitorsLibraryFolder not found: %s" , strconv .FormatBool (ok ), folderName )
555+ }
556+
557+ //need this so that we don't get an unused import error for strings in some cases
558+ if strings .EqualFold (folderResource .Primary .ID , "" ) {
559+ return fmt .Errorf ("MonitorsLibraryFolder ID is not set" )
560+ }
561+
562+ folderResourceId := folderResource .Primary .ID
563+ monitorsLibraryFolder , err := client .MonitorsRead (folderResourceId )
564+ if err != nil {
565+ return fmt .Errorf ("MonitorsLibraryFolder%s not found" , monitorResourceId )
566+ }
567+
568+ //checkig if the monitor parent id matches to the correct folder id
569+ if monitorsLibraryMonitor .ParentID != monitorsLibraryFolder .ID {
570+ return fmt .Errorf ("Parent Id should be %s but %s" , monitorsLibraryFolder .ID , monitorsLibraryMonitor .ParentID )
571+ }
572+
573+ return nil
574+ }
575+ }
576+
485577func testAccCheckMonitorsLibraryMonitorDestroy (monitorsLibraryMonitor MonitorsLibraryMonitor ) resource.TestCheckFunc {
486578 return func (s * terraform.State ) error {
487579 client := testAccProvider .Meta ().(* Client )
@@ -765,6 +857,62 @@ func testAccEmulateFGPDriftingMonitor(
765857 }
766858}
767859
860+ func testAccSumologicMonitorsLibraryMonitorFolderUpdate (testName string , parentIdTFString string ) string {
861+ return fmt .Sprintf (`
862+ resource "sumologic_monitor_folder" "tf_folder_01" {
863+ name = "tf_test_folder_01_%s"
864+ description = "1st folder"
865+ }
866+ resource "sumologic_monitor_folder" "tf_folder_02" {
867+ name = "tf_test_folder_02_%s"
868+ description = "1st folder"
869+ }
870+ resource "sumologic_monitor" "test" {
871+ name = "terraform_test_monitor_%s"
872+ description = "terraform_test_monitor_description"
873+ type = "MonitorsLibraryMonitor"
874+ is_disabled = false
875+ content_type = "Monitor"
876+ monitor_type = "Logs"
877+ evaluation_delay = "8m"
878+ queries {
879+ row_id = "A"
880+ query = "_sourceCategory=monitor-manager info"
881+ }
882+ triggers {
883+ threshold_type = "GreaterThan"
884+ threshold = 40.0
885+ time_range = "30m"
886+ occurrence_type = "ResultCount"
887+ trigger_source = "AllResults"
888+ trigger_type = "Critical"
889+ detection_method = "StaticCondition"
890+ }
891+ triggers {
892+ threshold_type = "LessThanOrEqual"
893+ threshold = 40.0
894+ time_range = "30m"
895+ occurrence_type = "ResultCount"
896+ trigger_source = "AllResults"
897+ trigger_type = "ResolvedCritical"
898+ detection_method = "StaticCondition"
899+ }
900+ notifications {
901+ notification {
902+ connection_type = "Email"
903+ recipients = ["[email protected] "] 904+ subject = "test tf monitor"
905+ time_zone = "PST"
906+ message_body = "test"
907+ }
908+ run_for_trigger_types = ["Critical", "ResolvedCritical"]
909+ }
910+ playbook = "This is an updated test playbook"
911+ alert_name = "Updated Alert from {{Name}}"
912+ parent_id = %s.id
913+ }` , testName , testName , testName , parentIdTFString )
914+ }
915+
768916func exampleMonitorWithTriggerCondition (
769917 testName string ,
770918 monitorType string ,
0 commit comments