Skip to content

Commit d8102af

Browse files
authored
Merge pull request #784 from SumoLogic/SUMO-261065_add-sumologic-monitor-folder-datasource
SUMO-261065: Add sumologic_monitor_folder as a data_source.
2 parents 63c47ee + 2c46c6b commit d8102af

File tree

5 files changed

+132
-0
lines changed

5 files changed

+132
-0
lines changed

CHANGELOG.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33

44
FEATURES:
55
* **Updated sumologic_monitor resource:** Added support for automated playbooks in monitors
6+
* **New Data Source:** sumologic_monitor_folder
67

78
## 3.1.1 (July 8, 2025)
89

Lines changed: 53 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,53 @@
1+
package sumologic
2+
3+
import (
4+
"fmt"
5+
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema"
6+
)
7+
8+
func dataSourceSumologicMonitorFolder() *schema.Resource {
9+
return &schema.Resource{
10+
Read: dataSourceSumologicMonitorFolderRead,
11+
Schema: map[string]*schema.Schema{
12+
"path": {
13+
Type: schema.TypeString,
14+
Required: true,
15+
},
16+
"id": {
17+
Type: schema.TypeString,
18+
Optional: true,
19+
Computed: true,
20+
},
21+
"name": {
22+
Type: schema.TypeString,
23+
Optional: true,
24+
Computed: true,
25+
},
26+
"description": {
27+
Type: schema.TypeString,
28+
Optional: true,
29+
Computed: true,
30+
},
31+
},
32+
}
33+
}
34+
35+
func dataSourceSumologicMonitorFolderRead(d *schema.ResourceData, meta interface{}) error {
36+
c := meta.(*Client)
37+
38+
monitorsLibraryFolder, err := c.GetMonitorsLibraryFolderByPath(d.Get("path").(string))
39+
40+
if err != nil {
41+
return err
42+
}
43+
44+
if monitorsLibraryFolder == nil || monitorsLibraryFolder.ID == "" {
45+
return fmt.Errorf("folder with path '%s' does not exist", d.Get("path").(string))
46+
}
47+
48+
d.SetId(monitorsLibraryFolder.ID)
49+
d.Set("name", monitorsLibraryFolder.Name)
50+
d.Set("description", monitorsLibraryFolder.Description)
51+
52+
return nil
53+
}
Lines changed: 57 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,57 @@
1+
package sumologic
2+
3+
import (
4+
"regexp"
5+
"testing"
6+
7+
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource"
8+
)
9+
10+
func TestAccDataSourceMonitorFolder_basic(t *testing.T) {
11+
resource.Test(t, resource.TestCase{
12+
PreCheck: func() { testAccPreCheck(t) },
13+
Providers: testAccProviders,
14+
Steps: []resource.TestStep{
15+
{
16+
Config: `
17+
resource "sumologic_monitor_folder" "test_folder" {
18+
name = "Terraform Test"
19+
description = "Terraform Test Folder"
20+
}
21+
data "sumologic_monitor_folder" "test" {
22+
path = "/Monitor/Terraform Test"
23+
depends_on = [sumologic_monitor_folder.test_folder]
24+
}
25+
`,
26+
Check: resource.ComposeTestCheckFunc(
27+
testAccDataSourceMonitorFolderCheck("data.sumologic_monitor_folder.test"),
28+
),
29+
},
30+
},
31+
})
32+
}
33+
34+
func TestAccDataSourceMonitorFolder_folder_does_not_exist(t *testing.T) {
35+
resource.Test(t, resource.TestCase{
36+
PreCheck: func() { testAccPreCheck(t) },
37+
Providers: testAccProviders,
38+
Steps: []resource.TestStep{
39+
{
40+
Config: `
41+
data "sumologic_monitor_folder" "test" {
42+
path = "/Monitor/Terraform Test/Subfolder/DoesNotExist"
43+
}
44+
`,
45+
ExpectError: regexp.MustCompile(
46+
`folder with path '/Monitor/Terraform Test/Subfolder/DoesNotExist' does not exist`),
47+
},
48+
},
49+
})
50+
}
51+
52+
func testAccDataSourceMonitorFolderCheck(name string) resource.TestCheckFunc {
53+
return resource.ComposeTestCheckFunc(
54+
resource.TestCheckResourceAttrSet(name, "id"),
55+
resource.TestCheckResourceAttrSet(name, "name"),
56+
)
57+
}

sumologic/provider.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -132,6 +132,7 @@ func Provider() *schema.Provider {
132132
"sumologic_http_source": dataSourceSumologicHTTPSource(),
133133
"sumologic_personal_folder": dataSourceSumologicPersonalFolder(),
134134
"sumologic_folder": dataSourceSumologicFolder(),
135+
"sumologic_monitor_folder": dataSourceSumologicMonitorFolder(),
135136
"sumologic_my_user_id": dataSourceSumologicMyUserId(),
136137
"sumologic_partition": dataSourceSumologicPartition(),
137138
"sumologic_partitions": dataSourceSumologicPartitions(),

sumologic/sumologic_monitors_library_folder.go

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ package sumologic
33
import (
44
"encoding/json"
55
"fmt"
6+
"net/url"
67
)
78

89
// ---------- ENDPOINTS ----------
@@ -66,6 +67,25 @@ func (s *Client) GetMonitorsLibraryFolder(id string) (*MonitorsLibraryFolder, er
6667

6768
}
6869

70+
func (s *Client) GetMonitorsLibraryFolderByPath(path string) (*MonitorsLibraryFolder, error) {
71+
escapedPath := url.QueryEscape(path)
72+
urlWithParams := fmt.Sprintf("v1/monitors/path?path=%s", escapedPath)
73+
74+
data, err := s.Get(urlWithParams)
75+
if err != nil {
76+
return nil, err
77+
}
78+
if data == nil {
79+
return nil, nil
80+
}
81+
82+
var folder MonitorsLibraryFolder
83+
if err := json.Unmarshal(data, &folder); err != nil {
84+
return nil, err
85+
}
86+
return &folder, nil
87+
}
88+
6989
func (s *Client) DeleteMonitorsLibraryFolder(id string) error {
7090
urlWithoutParams := "v1/monitors/%s"
7191
paramString := ""

0 commit comments

Comments
 (0)