Skip to content

Commit 3e5eb09

Browse files
committed
SUMO-261065: Add sumologic_monitor_folder as a data_source.
A user can now easily get a folderId or monitorId by path
1 parent ec9ebc1 commit 3e5eb09

File tree

4 files changed

+127
-0
lines changed

4 files changed

+127
-0
lines changed
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: 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+
"regexp"
6+
"testing"
7+
8+
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource"
9+
)
10+
11+
func TestAccDataSourceMonitorFolder_basic(t *testing.T) {
12+
resource.Test(t, resource.TestCase{
13+
PreCheck: func() { testAccPreCheck(t) },
14+
Providers: testAccProviders,
15+
Steps: []resource.TestStep{
16+
{
17+
Config: monitorFolderConfig("/Monitor/Terraform Test/Subfolder"),
18+
Check: resource.ComposeTestCheckFunc(
19+
testAccDataSourceMonitorFolderCheck("data.sumologic_monitor_folder.test"),
20+
),
21+
},
22+
},
23+
})
24+
}
25+
26+
func TestAccDataSourceMonitorFolder_folder_does_not_exist(t *testing.T) {
27+
resource.Test(t, resource.TestCase{
28+
PreCheck: func() { testAccPreCheck(t) },
29+
Providers: testAccProviders,
30+
Steps: []resource.TestStep{
31+
{
32+
Config: monitorFolderConfig("/Monitor/Terraform Test/Subfolder/DoesNotExist"),
33+
ExpectError: regexp.MustCompile(
34+
`folder with path '/Monitor/Terraform Test/Subfolder/DoesNotExist' does not exist`),
35+
},
36+
},
37+
})
38+
}
39+
40+
func testAccDataSourceMonitorFolderCheck(name string) resource.TestCheckFunc {
41+
return resource.ComposeTestCheckFunc(
42+
resource.TestCheckResourceAttrSet(name, "id"),
43+
resource.TestCheckResourceAttrSet(name, "name"),
44+
)
45+
}
46+
47+
func monitorFolderConfig(path string) string {
48+
return fmt.Sprintf(`
49+
data "sumologic_monitor_folder" "test" {
50+
path = "%s"
51+
}
52+
`, path)
53+
}

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)