Skip to content

Commit a4e6ae7

Browse files
committed
Merge branch 'master' into ayan-fix-fields-docs
2 parents e5723e0 + b8ea3ed commit a4e6ae7

15 files changed

+1233
-9
lines changed

.github/workflows/test.yml

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -54,7 +54,7 @@ jobs:
5454
name: Matrix Test
5555
needs: build
5656
runs-on: ubuntu-latest
57-
timeout-minutes: 60
57+
timeout-minutes: 90
5858
strategy:
5959
fail-fast: false
6060
matrix:
@@ -77,7 +77,7 @@ jobs:
7777
go mod download
7878
7979
- name: TF acceptance tests
80-
timeout-minutes: 55
80+
timeout-minutes: 90
8181
env:
8282
TF_ACC: "1"
8383
TF_ACC_TERRAFORM_VERSION: ${{ matrix.terraform }}
@@ -90,8 +90,14 @@ jobs:
9090
SUMOLOGIC_ACCESSKEY: ${{ secrets.SUMOLOGIC_ACCESSKEY }}
9191
SUMOLOGIC_ENVIRONMENT: ${{ secrets.SUMOLOGIC_ENVIRONMENT }}
9292
SUMOLOGIC_TEST_BUCKET_NAME: ${{ secrets.SUMOLOGIC_TEST_BUCKET_NAME }}
93-
SUMOLOGIC_TEST_ROLE_ARN: ${{ secrets.SUMOLOGIC_TEST_ROLE_ARN }}
93+
SUMOLOGIC_TEST_CONSUMER_GROUP: ${{ secrets.SUMOLOGIC_TEST_CONSUMER_GROUP }}
94+
SUMOLOGIC_TEST_EVENT_HUB: ${{ secrets.SUMOLOGIC_TEST_EVENT_HUB }}
9495
SUMOLOGIC_TEST_GOOGLE_APPLICATION_CREDENTIALS: ${{ secrets.SUMOLOGIC_TEST_GOOGLE_APPLICATION_CREDENTIALS }}
96+
SUMOLOGIC_TEST_NAMESPACE: ${{ secrets.SUMOLOGIC_TEST_NAMESPACE }}
97+
SUMOLOGIC_TEST_REGION: ${{ secrets.SUMOLOGIC_TEST_REGION }}
98+
SUMOLOGIC_TEST_ROLE_ARN: ${{ secrets.SUMOLOGIC_TEST_ROLE_ARN }}
99+
SUMOLOGIC_TEST_SAS_KEY: ${{ secrets.SUMOLOGIC_TEST_SAS_KEY }}
100+
SUMOLOGIC_TEST_SAS_KEY_NAME: ${{ secrets.SUMOLOGIC_TEST_SAS_KEY_NAME }}
95101

96102
# disable go test timeout. We rely on GitHub action timeout.
97103
run: |

CHANGELOG.md

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,11 @@
1-
## 2.29.1 (Unreleased)
1+
## 2.30.1 (Unreleased)
2+
3+
## 2.30.0 (May 21, 2024)
24
FEATURES:
35
* resource/sumologic_muting_schedule: Added support for Muting Schedule for an alert group (GH-601)
6+
* **New Resource:** sumologic_role_v2 (GH-651)
7+
* **New Data Source:** sumologic_role_v2 (GH-651)
8+
* **New Resource:** sumologic_azure_event_hub_log_source (GH-626)
49

510
BUG FIXES:
611
* Speed up match list updates. (GH-645)
Lines changed: 147 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,147 @@
1+
package sumologic
2+
3+
import (
4+
"encoding/json"
5+
"errors"
6+
"fmt"
7+
"net/url"
8+
9+
"github.com/hashicorp/terraform-plugin-sdk/helper/schema"
10+
)
11+
12+
func dataSourceSumologicRoleV2() *schema.Resource {
13+
return &schema.Resource{
14+
Read: dataSourceSumologicRoleV2Read,
15+
16+
Schema: map[string]*schema.Schema{
17+
"id": {
18+
Type: schema.TypeString,
19+
Optional: true,
20+
Computed: true,
21+
},
22+
"name": {
23+
Type: schema.TypeString,
24+
Optional: true,
25+
Computed: true,
26+
},
27+
"description": {
28+
Type: schema.TypeString,
29+
Computed: true,
30+
},
31+
"selected_views": {
32+
Type: schema.TypeList,
33+
Computed: true,
34+
Elem: &schema.Resource{
35+
Schema: map[string]*schema.Schema{
36+
"view_name": {
37+
Type: schema.TypeString,
38+
Computed: true,
39+
},
40+
41+
"view_filter": {
42+
Type: schema.TypeString,
43+
Computed: true,
44+
},
45+
},
46+
},
47+
},
48+
"security_data_filter": {
49+
Type: schema.TypeString,
50+
Computed: true,
51+
},
52+
"selection_type": {
53+
Type: schema.TypeString,
54+
Computed: true,
55+
},
56+
"log_analytics_filter": {
57+
Type: schema.TypeString,
58+
Computed: true,
59+
},
60+
61+
"audit_data_filter": {
62+
Type: schema.TypeString,
63+
Computed: true,
64+
},
65+
"capabilities": {
66+
Type: schema.TypeList,
67+
Computed: true,
68+
Description: "List of [capabilities](https://help.sumologic.com/docs/manage/users-roles/roles/role-capabilities/) associated with this role",
69+
Elem: &schema.Schema{
70+
Type: schema.TypeString,
71+
},
72+
},
73+
},
74+
}
75+
}
76+
77+
func dataSourceSumologicRoleV2Read(d *schema.ResourceData, meta interface{}) error {
78+
c := meta.(*Client)
79+
80+
var roleV2 *RoleV2
81+
var err error
82+
if rid, ok := d.GetOk("id"); ok {
83+
id := rid.(string)
84+
roleV2, err = c.GetRoleV2(id)
85+
if err != nil {
86+
return fmt.Errorf("role with id %v not found: %v", id, err)
87+
}
88+
if roleV2 == nil {
89+
return fmt.Errorf("role with id %v not found", id)
90+
}
91+
} else {
92+
if rname, ok := d.GetOk("name"); ok {
93+
name := rname.(string)
94+
roleV2, err = c.GetRoleNameV2(name)
95+
if err != nil {
96+
return fmt.Errorf("role with name %s not found: %v", name, err)
97+
}
98+
if roleV2 == nil {
99+
return fmt.Errorf("role with name %s not found", name)
100+
}
101+
} else {
102+
return errors.New("please specify either id or name")
103+
}
104+
}
105+
106+
d.SetId(roleV2.ID)
107+
d.Set("name", roleV2.Name)
108+
d.Set("audit_data_filter", roleV2.AuditDataFilter)
109+
d.Set("selection_type", roleV2.SelectionType)
110+
d.Set("description", roleV2.Description)
111+
d.Set("security_data_filter", roleV2.SecurityDataFilter)
112+
d.Set("log_analytics_filter", roleV2.LogAnalyticsFilter)
113+
if err := d.Set("capabilities", roleV2.Capabilities); err != nil {
114+
return fmt.Errorf("error setting capabilities for datasource %s: %s", d.Id(), err)
115+
}
116+
if err := d.Set("selected_views", flattenSelectedViews(roleV2.SelectedViews)); err != nil {
117+
return fmt.Errorf("error setting selected views for datasource %s: %s", d.Id(), err)
118+
}
119+
120+
return nil
121+
}
122+
123+
func (s *Client) GetRoleNameV2(name string) (*RoleV2, error) {
124+
data, _, err := s.Get(fmt.Sprintf("v2/roles?name=%s", url.QueryEscape(name)))
125+
if err != nil {
126+
return nil, err
127+
}
128+
129+
if data == nil {
130+
return nil, fmt.Errorf("role with name '%s' does not exist", name)
131+
}
132+
133+
var response RoleResponseV2
134+
err = json.Unmarshal(data, &response)
135+
if err != nil {
136+
return nil, err
137+
}
138+
if len(response.RolesV2) == 0 {
139+
return nil, fmt.Errorf("role with name '%s' does not exist", name)
140+
}
141+
142+
return &response.RolesV2[0], nil
143+
}
144+
145+
type RoleResponseV2 struct {
146+
RolesV2 []RoleV2 `json:"data"`
147+
}
Lines changed: 92 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,92 @@
1+
package sumologic
2+
3+
import (
4+
"regexp"
5+
"testing"
6+
7+
"github.com/hashicorp/terraform-plugin-sdk/helper/resource"
8+
)
9+
10+
func TestAccDataSourceSumologicRoleV2_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: testDataSourceAccSumologicRoleV2Config,
17+
Check: resource.ComposeTestCheckFunc(
18+
testAccDataSourceRoleV2Check("data.sumologic_role_v2.by_name", "sumologic_role_v2.test"),
19+
testAccDataSourceRoleV2Check("data.sumologic_role_v2.by_id", "sumologic_role_v2.test"),
20+
),
21+
},
22+
},
23+
})
24+
}
25+
26+
func testAccDataSourceRoleV2Check(name, reference string) resource.TestCheckFunc {
27+
return resource.ComposeTestCheckFunc(
28+
resource.TestCheckResourceAttrSet(name, "id"),
29+
resource.TestCheckResourceAttrPair(name, "id", reference, "id"),
30+
resource.TestCheckResourceAttrPair(name, "name", reference, "name"),
31+
resource.TestCheckResourceAttrPair(name, "description", reference, "description"),
32+
resource.TestCheckResourceAttrPair(name, "capabilities", reference, "capabilities"),
33+
resource.TestCheckResourceAttrPair(name, "selection_type", reference, "selection_type"),
34+
resource.TestCheckResourceAttrPair(name, "audit_data_filter", reference, "audit_data_filter"),
35+
resource.TestCheckResourceAttrPair(name, "security_data_filter", reference, "security_data_filter"),
36+
resource.TestCheckResourceAttrPair(name, "selected_views", reference, "selected_views"),
37+
)
38+
}
39+
40+
func TestAccDataSourceSumologicRoleV2_role_name_doesnt_exist(t *testing.T) {
41+
roleDoestExistConfig := `
42+
data "sumologic_role_v2" "role_name_doesnt_exist" {
43+
name = "someRoleNameDoesntExist87461"
44+
}`
45+
resource.Test(t, resource.TestCase{
46+
PreCheck: func() { testAccPreCheck(t) },
47+
Providers: testAccProviders,
48+
Steps: []resource.TestStep{
49+
{
50+
Config: roleDoestExistConfig,
51+
ExpectError: regexp.MustCompile("role with name 'someRoleNameDoesntExist87461' does not exist"),
52+
},
53+
},
54+
})
55+
}
56+
57+
func TestAccDataSourceSumologicRoleV2_role_id_doesnt_exist(t *testing.T) {
58+
roleDoestExistConfig := `
59+
data "sumologic_role_v2" "role_id_doesnt_exist" {
60+
id = 99999999999999
61+
}`
62+
resource.Test(t, resource.TestCase{
63+
PreCheck: func() { testAccPreCheck(t) },
64+
Providers: testAccProviders,
65+
Steps: []resource.TestStep{
66+
{
67+
Config: roleDoestExistConfig,
68+
ExpectError: regexp.MustCompile("role with id 99999999999999 not found"),
69+
},
70+
},
71+
})
72+
}
73+
74+
var testDataSourceAccSumologicRoleV2Config = `
75+
resource "sumologic_role_v2" "test" {
76+
name = "My_SumoRole_V2"
77+
description = "My_SumoRoleDesc"
78+
capabilities = ["viewCollectors"]
79+
selection_type = "All"
80+
audit_data_filter = "info"
81+
security_data_filter = "error"
82+
log_analytics_filter = "!_sourceCategory=collector"
83+
}
84+
85+
data "sumologic_role_v2" "by_name" {
86+
name = "${sumologic_role_v2.test.name}"
87+
}
88+
89+
data "sumologic_role_v2" "by_id" {
90+
id = "${sumologic_role_v2.test.id}"
91+
}
92+
`

sumologic/provider.go

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -117,6 +117,8 @@ func Provider() terraform.ResourceProvider {
117117
"sumologic_log_search": resourceSumologicLogSearch(),
118118
"sumologic_metrics_search": resourceSumologicMetricsSearch(),
119119
"sumologic_rum_source": resourceSumologicRumSource(),
120+
"sumologic_role_v2": resourceSumologicRoleV2(),
121+
"sumologic_azure_event_hub_log_source": resourceSumologicGenericPollingSource(),
120122
},
121123
DataSourcesMap: map[string]*schema.Resource{
122124
"sumologic_cse_log_mapping_vendor_product": dataSourceCSELogMappingVendorAndProduct(),
@@ -128,6 +130,7 @@ func Provider() terraform.ResourceProvider {
128130
"sumologic_folder": dataSourceSumologicFolder(),
129131
"sumologic_my_user_id": dataSourceSumologicMyUserId(),
130132
"sumologic_role": dataSourceSumologicRole(),
133+
"sumologic_role_v2": dataSourceSumologicRoleV2(),
131134
"sumologic_user": dataSourceSumologicUser(),
132135
},
133136
ConfigureFunc: providerConfigure,

0 commit comments

Comments
 (0)