Skip to content

Commit bf35009

Browse files
authored
Merge pull request #376 from SumoLogic/INVS-175_cse_entity_group_configuration
INVS-175: CSE Entity/Inventory Entity group configuration
2 parents 35074c1 + f43bca6 commit bf35009

9 files changed

+910
-58
lines changed

CHANGELOG.md

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
## 2.17.0 (Unreleased)
2-
2+
FEATURES:
3+
* **New Resource:** sumologic_cse_entity_entity_group_configuration (GH-376)
4+
* **New Resource:** sumologic_cse_inventory_entity_group_configuration (GH-376)
35

46
## 2.16.2 (June 12, 2022)
57

sumologic/provider.go

Lines changed: 59 additions & 57 deletions
Original file line numberDiff line numberDiff line change
@@ -43,63 +43,65 @@ func Provider() terraform.ResourceProvider {
4343
},
4444
},
4545
ResourcesMap: map[string]*schema.Resource{
46-
"sumologic_cse_match_list": resourceSumologicCSEMatchList(),
47-
"sumologic_cse_log_mapping": resourceSumologicCSELogMapping(),
48-
"sumologic_cse_rule_tuning_expression": resourceSumologicCSERuleTuningExpression(),
49-
"sumologic_cse_network_block": resourceSumologicCSENetworkBlock(),
50-
"sumologic_cse_custom_entity_type": resourceSumologicCSECustomEntityType(),
51-
"sumologic_cse_custom_insight": resourceSumologicCSECustomInsight(),
52-
"sumologic_cse_entity_criticality_config": resourceSumologicCSEEntityCriticalityConfig(),
53-
"sumologic_cse_insights_configuration": resourceSumologicCSEInsightsConfiguration(),
54-
"sumologic_cse_insights_resolution": resourceSumologicCSEInsightsResolution(),
55-
"sumologic_cse_insights_status": resourceSumologicCSEInsightsStatus(),
56-
"sumologic_cse_aggregation_rule": resourceSumologicCSEAggregationRule(),
57-
"sumologic_cse_chain_rule": resourceSumologicCSEChainRule(),
58-
"sumologic_cse_match_rule": resourceSumologicCSEMatchRule(),
59-
"sumologic_cse_threshold_rule": resourceSumologicCSEThresholdRule(),
60-
"sumologic_collector": resourceSumologicCollector(),
61-
"sumologic_http_source": resourceSumologicHTTPSource(),
62-
"sumologic_gcp_source": resourceSumologicGCPSource(),
63-
"sumologic_polling_source": resourceSumologicPollingSource(),
64-
"sumologic_s3_source": resourceSumologicGenericPollingSource(),
65-
"sumologic_s3_audit_source": resourceSumologicGenericPollingSource(),
66-
"sumologic_cloudwatch_source": resourceSumologicGenericPollingSource(),
67-
"sumologic_aws_inventory_source": resourceSumologicGenericPollingSource(),
68-
"sumologic_aws_xray_source": resourceSumologicGenericPollingSource(),
69-
"sumologic_cloudtrail_source": resourceSumologicGenericPollingSource(),
70-
"sumologic_elb_source": resourceSumologicGenericPollingSource(),
71-
"sumologic_cloudfront_source": resourceSumologicGenericPollingSource(),
72-
"sumologic_gcp_metrics_source": resourceSumologicGenericPollingSource(),
73-
"sumologic_cloud_to_cloud_source": resourceSumologicCloudToCloudSource(),
74-
"sumologic_metadata_source": resourceSumologicMetadataSource(),
75-
"sumologic_cloudsyslog_source": resourceSumologicCloudsyslogSource(),
76-
"sumologic_role": resourceSumologicRole(),
77-
"sumologic_user": resourceSumologicUser(),
78-
"sumologic_ingest_budget": resourceSumologicIngestBudget(),
79-
"sumologic_collector_ingest_budget_assignment": resourceSumologicCollectorIngestBudgetAssignment(),
80-
"sumologic_folder": resourceSumologicFolder(),
81-
"sumologic_content": resourceSumologicContent(),
82-
"sumologic_scheduled_view": resourceSumologicScheduledView(),
83-
"sumologic_partition": resourceSumologicPartition(),
84-
"sumologic_field_extraction_rule": resourceSumologicFieldExtractionRule(),
85-
"sumologic_connection": resourceSumologicConnection(),
86-
"sumologic_monitor": resourceSumologicMonitorsLibraryMonitor(),
87-
"sumologic_monitor_folder": resourceSumologicMonitorsLibraryFolder(),
88-
"sumologic_slo": resourceSumologicSLO(),
89-
"sumologic_slo_folder": resourceSumologicSLOLibraryFolder(),
90-
"sumologic_ingest_budget_v2": resourceSumologicIngestBudgetV2(),
91-
"sumologic_field": resourceSumologicField(),
92-
"sumologic_lookup_table": resourceSumologicLookupTable(),
93-
"sumologic_subdomain": resourceSumologicSubdomain(),
94-
"sumologic_dashboard": resourceSumologicDashboard(),
95-
"sumologic_password_policy": resourceSumologicPasswordPolicy(),
96-
"sumologic_saml_configuration": resourceSumologicSamlConfiguration(),
97-
"sumologic_kinesis_metrics_source": resourceSumologicKinesisMetricsSource(),
98-
"sumologic_kinesis_log_source": resourceSumologicKinesisLogSource(),
99-
"sumologic_token": resourceSumologicToken(),
100-
"sumologic_policies": resourceSumologicPolicies(),
101-
"sumologic_hierarchy": resourceSumologicHierarchy(),
102-
"sumologic_content_permission": resourceSumologicPermissions(),
46+
"sumologic_cse_inventory_entity_group_configuration": resourceSumologicCSEInventoryEntityGroupConfiguration(),
47+
"sumologic_cse_entity_entity_group_configuration": resourceSumologicCSEEntityEntityGroupConfiguration(),
48+
"sumologic_cse_match_list": resourceSumologicCSEMatchList(),
49+
"sumologic_cse_log_mapping": resourceSumologicCSELogMapping(),
50+
"sumologic_cse_rule_tuning_expression": resourceSumologicCSERuleTuningExpression(),
51+
"sumologic_cse_network_block": resourceSumologicCSENetworkBlock(),
52+
"sumologic_cse_custom_entity_type": resourceSumologicCSECustomEntityType(),
53+
"sumologic_cse_custom_insight": resourceSumologicCSECustomInsight(),
54+
"sumologic_cse_entity_criticality_config": resourceSumologicCSEEntityCriticalityConfig(),
55+
"sumologic_cse_insights_configuration": resourceSumologicCSEInsightsConfiguration(),
56+
"sumologic_cse_insights_resolution": resourceSumologicCSEInsightsResolution(),
57+
"sumologic_cse_insights_status": resourceSumologicCSEInsightsStatus(),
58+
"sumologic_cse_aggregation_rule": resourceSumologicCSEAggregationRule(),
59+
"sumologic_cse_chain_rule": resourceSumologicCSEChainRule(),
60+
"sumologic_cse_match_rule": resourceSumologicCSEMatchRule(),
61+
"sumologic_cse_threshold_rule": resourceSumologicCSEThresholdRule(),
62+
"sumologic_collector": resourceSumologicCollector(),
63+
"sumologic_http_source": resourceSumologicHTTPSource(),
64+
"sumologic_gcp_source": resourceSumologicGCPSource(),
65+
"sumologic_polling_source": resourceSumologicPollingSource(),
66+
"sumologic_s3_source": resourceSumologicGenericPollingSource(),
67+
"sumologic_s3_audit_source": resourceSumologicGenericPollingSource(),
68+
"sumologic_cloudwatch_source": resourceSumologicGenericPollingSource(),
69+
"sumologic_aws_inventory_source": resourceSumologicGenericPollingSource(),
70+
"sumologic_aws_xray_source": resourceSumologicGenericPollingSource(),
71+
"sumologic_cloudtrail_source": resourceSumologicGenericPollingSource(),
72+
"sumologic_elb_source": resourceSumologicGenericPollingSource(),
73+
"sumologic_cloudfront_source": resourceSumologicGenericPollingSource(),
74+
"sumologic_gcp_metrics_source": resourceSumologicGenericPollingSource(),
75+
"sumologic_cloud_to_cloud_source": resourceSumologicCloudToCloudSource(),
76+
"sumologic_metadata_source": resourceSumologicMetadataSource(),
77+
"sumologic_cloudsyslog_source": resourceSumologicCloudsyslogSource(),
78+
"sumologic_role": resourceSumologicRole(),
79+
"sumologic_user": resourceSumologicUser(),
80+
"sumologic_ingest_budget": resourceSumologicIngestBudget(),
81+
"sumologic_collector_ingest_budget_assignment": resourceSumologicCollectorIngestBudgetAssignment(),
82+
"sumologic_folder": resourceSumologicFolder(),
83+
"sumologic_content": resourceSumologicContent(),
84+
"sumologic_scheduled_view": resourceSumologicScheduledView(),
85+
"sumologic_partition": resourceSumologicPartition(),
86+
"sumologic_field_extraction_rule": resourceSumologicFieldExtractionRule(),
87+
"sumologic_connection": resourceSumologicConnection(),
88+
"sumologic_monitor": resourceSumologicMonitorsLibraryMonitor(),
89+
"sumologic_monitor_folder": resourceSumologicMonitorsLibraryFolder(),
90+
"sumologic_slo": resourceSumologicSLO(),
91+
"sumologic_slo_folder": resourceSumologicSLOLibraryFolder(),
92+
"sumologic_ingest_budget_v2": resourceSumologicIngestBudgetV2(),
93+
"sumologic_field": resourceSumologicField(),
94+
"sumologic_lookup_table": resourceSumologicLookupTable(),
95+
"sumologic_subdomain": resourceSumologicSubdomain(),
96+
"sumologic_dashboard": resourceSumologicDashboard(),
97+
"sumologic_password_policy": resourceSumologicPasswordPolicy(),
98+
"sumologic_saml_configuration": resourceSumologicSamlConfiguration(),
99+
"sumologic_kinesis_metrics_source": resourceSumologicKinesisMetricsSource(),
100+
"sumologic_kinesis_log_source": resourceSumologicKinesisLogSource(),
101+
"sumologic_token": resourceSumologicToken(),
102+
"sumologic_policies": resourceSumologicPolicies(),
103+
"sumologic_hierarchy": resourceSumologicHierarchy(),
104+
"sumologic_content_permission": resourceSumologicPermissions(),
103105
},
104106
DataSourcesMap: map[string]*schema.Resource{
105107
"sumologic_cse_log_mapping_vendor_product": dataSourceCSELogMappingVendorAndProduct(),
Lines changed: 171 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,171 @@
1+
package sumologic
2+
3+
import (
4+
"github.com/hashicorp/terraform-plugin-sdk/helper/schema"
5+
"log"
6+
)
7+
8+
func resourceSumologicCSEEntityEntityGroupConfiguration() *schema.Resource {
9+
return &schema.Resource{
10+
Create: resourceSumologicCSEEntityEntityGroupConfigurationCreate,
11+
Read: resourceSumologicCSEEntityEntityGroupConfigurationRead,
12+
Delete: resourceSumologicCSEEntityEntityGroupConfigurationDelete,
13+
Update: resourceSumologicCSEEntityEntityGroupConfigurationUpdate,
14+
Importer: &schema.ResourceImporter{
15+
State: schema.ImportStatePassthrough,
16+
},
17+
18+
Schema: map[string]*schema.Schema{
19+
"criticality": {
20+
Type: schema.TypeString,
21+
Optional: true,
22+
Default: "",
23+
},
24+
"description": {
25+
Type: schema.TypeString,
26+
Optional: true,
27+
Default: "",
28+
},
29+
"entity_namespace": {
30+
Type: schema.TypeString,
31+
Optional: true,
32+
Default: "",
33+
},
34+
"entity_type": {
35+
Type: schema.TypeString,
36+
Optional: true,
37+
Default: "",
38+
},
39+
"name": {
40+
Type: schema.TypeString,
41+
Required: true,
42+
},
43+
"network_block": {
44+
Type: schema.TypeString,
45+
Optional: true,
46+
Default: "",
47+
},
48+
"prefix": {
49+
Type: schema.TypeString,
50+
Optional: true,
51+
Default: "",
52+
},
53+
"suffix": {
54+
Type: schema.TypeString,
55+
Optional: true,
56+
Default: "",
57+
},
58+
"suppressed": {
59+
Type: schema.TypeBool,
60+
Optional: true,
61+
Default: false,
62+
},
63+
"tags": {
64+
Type: schema.TypeList,
65+
Optional: true,
66+
Elem: &schema.Schema{
67+
Type: schema.TypeString,
68+
},
69+
},
70+
},
71+
}
72+
}
73+
74+
func resourceSumologicCSEEntityEntityGroupConfigurationRead(d *schema.ResourceData, meta interface{}) error {
75+
c := meta.(*Client)
76+
77+
var CSEEntityEntityGroupConfigurationGet *CSEEntityGroupConfiguration
78+
id := d.Id()
79+
80+
CSEEntityEntityGroupConfigurationGet, err := c.GetCSEntityGroupConfiguration(id)
81+
if err != nil {
82+
log.Printf("[WARN] CSE Entity Entity Group Configuration not found when looking by id: %s, err: %v", id, err)
83+
}
84+
85+
if CSEEntityEntityGroupConfigurationGet == nil {
86+
log.Printf("[WARN] CSE Entity Entity Group Configuration not found, removing from state: %v - %v", id, err)
87+
d.SetId("")
88+
return nil
89+
}
90+
91+
d.Set("criticality", CSEEntityEntityGroupConfigurationGet.Criticality)
92+
d.Set("description", CSEEntityEntityGroupConfigurationGet.Description)
93+
d.Set("entity_namespace", CSEEntityEntityGroupConfigurationGet.EntityNamespace)
94+
d.Set("entity_type", CSEEntityEntityGroupConfigurationGet.EntityType)
95+
d.Set("name", CSEEntityEntityGroupConfigurationGet.Name)
96+
d.Set("network_block", CSEEntityEntityGroupConfigurationGet.NetworkBlock)
97+
d.Set("prefix", CSEEntityEntityGroupConfigurationGet.Prefix)
98+
d.Set("suffix", CSEEntityEntityGroupConfigurationGet.Suffix)
99+
d.Set("suppressed", CSEEntityEntityGroupConfigurationGet.Suppressed)
100+
d.Set("tags", CSEEntityEntityGroupConfigurationGet.Tags)
101+
102+
return nil
103+
}
104+
105+
func resourceSumologicCSEEntityEntityGroupConfigurationDelete(d *schema.ResourceData, meta interface{}) error {
106+
c := meta.(*Client)
107+
108+
return c.DeleteCSEEntityGroupConfiguration(d.Id())
109+
110+
}
111+
112+
func resourceSumologicCSEEntityEntityGroupConfigurationCreate(d *schema.ResourceData, meta interface{}) error {
113+
c := meta.(*Client)
114+
115+
if d.Id() == "" {
116+
id, err := c.CreateCSEEntityEntityGroupConfiguration(CSEEntityGroupConfiguration{
117+
Criticality: d.Get("criticality").(string),
118+
Description: d.Get("description").(string),
119+
EntityNamespace: d.Get("entity_namespace").(string),
120+
EntityType: d.Get("entity_type").(string),
121+
Name: d.Get("name").(string),
122+
NetworkBlock: d.Get("network_block").(string),
123+
Prefix: d.Get("prefix").(string),
124+
Suffix: d.Get("suffix").(string),
125+
Suppressed: d.Get("suppressed").(bool),
126+
Tags: resourceToStringArray(d.Get("tags").([]interface{})),
127+
})
128+
129+
if err != nil {
130+
return err
131+
}
132+
d.SetId(id)
133+
}
134+
135+
return resourceSumologicCSEEntityEntityGroupConfigurationRead(d, meta)
136+
}
137+
138+
func resourceSumologicCSEEntityEntityGroupConfigurationUpdate(d *schema.ResourceData, meta interface{}) error {
139+
CSEEntityEntityGroupConfiguration, err := resourceToCSEEntityEntityGroupConfiguration(d)
140+
if err != nil {
141+
return err
142+
}
143+
144+
c := meta.(*Client)
145+
if err = c.UpdateCSEEntityEntityGroupConfiguration(CSEEntityEntityGroupConfiguration); err != nil {
146+
return err
147+
}
148+
149+
return resourceSumologicCSEEntityEntityGroupConfigurationRead(d, meta)
150+
}
151+
152+
func resourceToCSEEntityEntityGroupConfiguration(d *schema.ResourceData) (CSEEntityGroupConfiguration, error) {
153+
id := d.Id()
154+
if id == "" {
155+
return CSEEntityGroupConfiguration{}, nil
156+
}
157+
158+
return CSEEntityGroupConfiguration{
159+
ID: id,
160+
Criticality: d.Get("criticality").(string),
161+
Description: d.Get("description").(string),
162+
EntityNamespace: d.Get("entity_namespace").(string),
163+
EntityType: d.Get("entity_type").(string),
164+
Name: d.Get("name").(string),
165+
NetworkBlock: d.Get("network_block").(string),
166+
Prefix: d.Get("prefix").(string),
167+
Suffix: d.Get("suffix").(string),
168+
Suppressed: d.Get("suppressed").(bool),
169+
Tags: resourceToStringArray(d.Get("tags").([]interface{})),
170+
}, nil
171+
}

0 commit comments

Comments
 (0)