Skip to content

Commit 5d6b855

Browse files
authored
Merge pull request #374 from SumoLogic/vishal-folder-data-source-163889
Add data source for Folders
2 parents 97f1a54 + a657716 commit 5d6b855

File tree

6 files changed

+183
-4
lines changed

6 files changed

+183
-4
lines changed

CHANGELOG.md

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,11 @@
11
## 2.15.0 (Unreleased)
22

33
FEATURES:
4-
* Add new optional `alert_name` field to resource/sumologic_monitor.
5-
* **New Resource:** `sumologic_slo` ([GH-362](https://github.com/SumoLogic/terraform-provider-sumologic/pull/362/files))
6-
* **New Resource:** `sumologic_slo_folder` ([GH-362](https://github.com/SumoLogic/terraform-provider-sumologic/pull/362/files))
7-
* Add support for slo based monitors ([GH-363](https://github.com/SumoLogic/terraform-provider-sumologic/pull/363/files))
4+
* **New Data Source:** `sumologic_folder` (GH-374)
5+
* **New Resource:** `sumologic_slo` (GH-362)
6+
* **New Resource:** `sumologic_slo_folder` (GH-362)
7+
* Add support for slo based monitors (GH-363)
8+
* Add new optional `alert_name` field to resource/sumologic_monitor (GH-359)
89

910

1011
BUG FIXES:
Lines changed: 66 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,66 @@
1+
package sumologic
2+
3+
import (
4+
"encoding/json"
5+
"fmt"
6+
"net/url"
7+
8+
"github.com/hashicorp/terraform-plugin-sdk/helper/schema"
9+
)
10+
11+
func dataSourceSumologicFolder() *schema.Resource {
12+
return &schema.Resource{
13+
Read: dataSourceSumologicFolderRead,
14+
Schema: map[string]*schema.Schema{
15+
"path": {
16+
Type: schema.TypeString,
17+
Required: true,
18+
},
19+
"id": {
20+
Type: schema.TypeString,
21+
Computed: true,
22+
},
23+
"name": {
24+
Type: schema.TypeString,
25+
Computed: true,
26+
},
27+
},
28+
}
29+
}
30+
31+
func dataSourceSumologicFolderRead(d *schema.ResourceData, meta interface{}) error {
32+
c := meta.(*Client)
33+
34+
folder, err := c.GetFolderByPath(d.Get("path").(string))
35+
36+
if err != nil {
37+
return err
38+
}
39+
40+
d.SetId(folder.ID)
41+
d.Set("name", folder.Name)
42+
43+
return nil
44+
}
45+
46+
func (s *Client) GetFolderByPath(path string) (*Folder, error) {
47+
data, _, err := s.Get(fmt.Sprintf("v2/content/path?path=%s", url.QueryEscape(path)))
48+
if err != nil {
49+
return nil, err
50+
}
51+
52+
if data == nil {
53+
return nil, fmt.Errorf("folder with path '%s' does not exist", path)
54+
}
55+
56+
var folder Folder
57+
err = json.Unmarshal(data, &folder)
58+
if err != nil {
59+
return nil, err
60+
}
61+
if len(folder.ID) == 0 {
62+
return nil, fmt.Errorf("folder with path '%s' does not exist", path)
63+
}
64+
65+
return &folder, nil
66+
}
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/helper/resource"
9+
)
10+
11+
func TestAccDataSourceFolder_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: folderConfig("/Library/Users/[email protected]"),
18+
Check: resource.ComposeTestCheckFunc(
19+
testAccDataSourceFolderCheck("data.sumologic_folder.personal_folder"),
20+
),
21+
},
22+
},
23+
})
24+
}
25+
26+
func TestAccDataSourceFolder_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: folderConfig("/Library/Users/[email protected]/doesNotExist"),
33+
ExpectError: regexp.MustCompile(
34+
"folder with path '/Library/Users/dgould\\[email protected]/doesNotExist' does not exist"),
35+
},
36+
},
37+
})
38+
}
39+
40+
func testAccDataSourceFolderCheck(name string) resource.TestCheckFunc {
41+
return resource.ComposeTestCheckFunc(
42+
resource.TestCheckResourceAttrSet(name, "id"),
43+
resource.TestCheckResourceAttrSet(name, "name"),
44+
)
45+
}
46+
47+
func folderConfig(path string) string {
48+
return fmt.Sprintf(`
49+
data "sumologic_folder" "personal_folder" {
50+
path = "%s"
51+
}
52+
`, path)
53+
}

sumologic/provider.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -108,6 +108,7 @@ func Provider() terraform.ResourceProvider {
108108
"sumologic_collector": dataSourceSumologicCollector(),
109109
"sumologic_http_source": dataSourceSumologicHTTPSource(),
110110
"sumologic_personal_folder": dataSourceSumologicPersonalFolder(),
111+
"sumologic_folder": dataSourceSumologicFolder(),
111112
"sumologic_my_user_id": dataSourceSumologicMyUserId(),
112113
"sumologic_role": dataSourceSumologicRole(),
113114
"sumologic_user": dataSourceSumologicUser(),
Lines changed: 58 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,58 @@
1+
---
2+
layout: "sumologic"
3+
page_title: "SumoLogic: sumologic_folder"
4+
description: |-
5+
Provides an easy way to retrieve a folder.
6+
---
7+
8+
# sumologic_folder
9+
Provides an easy way to retrieve a folder.
10+
11+
You must specify the absolute path of the folder to retrieve. The content library has "Library"
12+
folder at the root level. For items in "Personal" folder, the base path is "/Library/Users/[email protected]"
13+
where "[email protected]" is the email address of the user. For example, if a user with email address
14+
`[email protected]` has `Rockets` folder inside Personal folder, the path of Rockets folder will be
15+
`/Library/Users/[email protected]/Rockets`.
16+
17+
For items in "Admin Recommended" folder, the base path is "/Library/Admin Recommended". For example,
18+
given a folder `Acme` in Admin Recommended folder, the path will be `/Library/Admin Recommended/Acme`.
19+
20+
21+
## Example Usage
22+
```hcl
23+
provider "sumologic" {
24+
environment = "us2"
25+
access_id = "..."
26+
access_key = "..."
27+
}
28+
29+
# Provider with admin mode set to true
30+
provider "sumologic" {
31+
...
32+
admin_mode = true
33+
alias = "admin"
34+
}
35+
36+
# Look up folder named "Rockets" under Personal folder of user "[email protected]"
37+
data "sumologic_folder" "rockets" {
38+
path = "/Library/Users/[email protected]/Rockets"
39+
}
40+
41+
# Look up folder named "Acme" under "Admin Recommended" folder (must use provider with
42+
admin mode set to true)
43+
data "sumologic_folder" "acme" {
44+
provider = sumologic.admin
45+
path = "/Library/Admin Recommended/Acme"
46+
}
47+
```
48+
49+
50+
## Attributes reference
51+
52+
The following attributes are exported:
53+
54+
- `id` - The ID of the folder.
55+
- `name` - The name of the folder.
56+
57+
58+
File renamed without changes.

0 commit comments

Comments
 (0)