Skip to content

Commit eda5413

Browse files
authored
Merge pull request #74 from SumoLogic/unified-monitors-terraform-beta
Unified Monitors terraform support [BETA]
2 parents 254de94 + 176d013 commit eda5413

7 files changed

+1427
-0
lines changed

sumologic/provider.go

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -61,6 +61,8 @@ func Provider() terraform.ResourceProvider {
6161
"sumologic_partition": resourceSumologicPartition(),
6262
"sumologic_field_extraction_rule": resourceSumologicFieldExtractionRule(),
6363
"sumologic_connection": resourceSumologicConnection(),
64+
"sumologic_monitor": resourceSumologicMonitorsLibraryMonitor(),
65+
"sumologic_monitor_folder": resourceSumologicMonitorsLibraryFolder(),
6466
},
6567
DataSourcesMap: map[string]*schema.Resource{
6668
"sumologic_caller_identity": dataSourceSumologicCallerIdentity(),
Lines changed: 211 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,211 @@
1+
package sumologic
2+
3+
import (
4+
"log"
5+
6+
"github.com/hashicorp/terraform-plugin-sdk/helper/schema"
7+
)
8+
9+
func resourceSumologicMonitorsLibraryFolder() *schema.Resource {
10+
return &schema.Resource{
11+
Create: resourceSumologicMonitorsLibraryFolderCreate,
12+
Read: resourceSumologicMonitorsLibraryFolderRead,
13+
Update: resourceSumologicMonitorsLibraryFolderUpdate,
14+
Delete: resourceSumologicMonitorsLibraryFolderDelete,
15+
Importer: &schema.ResourceImporter{
16+
State: schema.ImportStatePassthrough,
17+
},
18+
19+
Schema: map[string]*schema.Schema{
20+
21+
"version": {
22+
Type: schema.TypeInt,
23+
Optional: true,
24+
ForceNew: false,
25+
Computed: true,
26+
},
27+
28+
"modified_at": {
29+
Type: schema.TypeString,
30+
Optional: true,
31+
ForceNew: false,
32+
Computed: true,
33+
},
34+
35+
"is_system": {
36+
Type: schema.TypeBool,
37+
Optional: true,
38+
ForceNew: false,
39+
Computed: true,
40+
},
41+
42+
"content_type": {
43+
Type: schema.TypeString,
44+
Optional: true,
45+
ForceNew: false,
46+
Default: "Folder",
47+
},
48+
49+
"created_by": {
50+
Type: schema.TypeString,
51+
Optional: true,
52+
ForceNew: false,
53+
Computed: true,
54+
},
55+
56+
"parent_id": {
57+
Type: schema.TypeString,
58+
Optional: true,
59+
ForceNew: false,
60+
Computed: true,
61+
},
62+
63+
"is_mutable": {
64+
Type: schema.TypeBool,
65+
Optional: true,
66+
ForceNew: false,
67+
Computed: true,
68+
},
69+
70+
"description": {
71+
Type: schema.TypeString,
72+
Required: true,
73+
ForceNew: false,
74+
},
75+
76+
"created_at": {
77+
Type: schema.TypeString,
78+
Optional: true,
79+
ForceNew: false,
80+
Computed: true,
81+
},
82+
83+
"is_locked": {
84+
Type: schema.TypeBool,
85+
Optional: true,
86+
ForceNew: false,
87+
},
88+
89+
"type": {
90+
Type: schema.TypeString,
91+
Optional: true,
92+
ForceNew: false,
93+
Default: "MonitorsLibraryFolder",
94+
},
95+
96+
"modified_by": {
97+
Type: schema.TypeString,
98+
Optional: true,
99+
ForceNew: false,
100+
Computed: true,
101+
},
102+
103+
"name": {
104+
Type: schema.TypeString,
105+
Required: true,
106+
ForceNew: false,
107+
},
108+
"post_request_map": {
109+
Type: schema.TypeMap,
110+
Optional: true,
111+
Elem: &schema.Schema{
112+
Type: schema.TypeString,
113+
},
114+
},
115+
},
116+
}
117+
}
118+
119+
func resourceSumologicMonitorsLibraryFolderCreate(d *schema.ResourceData, meta interface{}) error {
120+
c := meta.(*Client)
121+
if d.Id() == "" {
122+
folder := resourceToMonitorsLibraryFolder(d)
123+
paramMap := make(map[string]string)
124+
if folder.ParentID == "" {
125+
rootFolder, err := c.GetMonitorsLibraryFolder("root")
126+
if err != nil {
127+
return err
128+
}
129+
130+
folder.ParentID = rootFolder.ID
131+
}
132+
paramMap["parentId"] = folder.ParentID
133+
monitorDefinitionID, err := c.CreateMonitorsLibraryFolder(folder, paramMap)
134+
if err != nil {
135+
return err
136+
}
137+
138+
d.SetId(monitorDefinitionID)
139+
}
140+
return resourceSumologicMonitorsLibraryFolderRead(d, meta)
141+
}
142+
143+
func resourceSumologicMonitorsLibraryFolderRead(d *schema.ResourceData, meta interface{}) error {
144+
c := meta.(*Client)
145+
146+
folder, err := c.GetMonitorsLibraryFolder(d.Id())
147+
if err != nil {
148+
return err
149+
}
150+
151+
if folder == nil {
152+
log.Printf("[WARN] Monitor Folder not found, removing from state: %v - %v", d.Id(), err)
153+
d.SetId("")
154+
return nil
155+
}
156+
157+
d.Set("created_by", folder.CreatedBy)
158+
d.Set("created_at", folder.CreatedAt)
159+
d.Set("modified_by", folder.ModifiedBy)
160+
d.Set("is_mutable", folder.IsMutable)
161+
d.Set("version", folder.Version)
162+
d.Set("name", folder.Name)
163+
d.Set("description", folder.Description)
164+
d.Set("parent_id", folder.ParentID)
165+
d.Set("modified_at", folder.ModifiedAt)
166+
d.Set("content_type", folder.ContentType)
167+
d.Set("is_locked", folder.IsLocked)
168+
d.Set("is_system", folder.IsSystem)
169+
170+
return nil
171+
}
172+
173+
func resourceSumologicMonitorsLibraryFolderUpdate(d *schema.ResourceData, meta interface{}) error {
174+
c := meta.(*Client)
175+
monitor := resourceToMonitorsLibraryFolder(d)
176+
monitor.Type = "MonitorsLibraryFolderUpdate"
177+
err := c.UpdateMonitorsLibraryFolder(monitor)
178+
if err != nil {
179+
return err
180+
}
181+
return resourceSumologicMonitorsLibraryFolderRead(d, meta)
182+
}
183+
184+
func resourceSumologicMonitorsLibraryFolderDelete(d *schema.ResourceData, meta interface{}) error {
185+
c := meta.(*Client)
186+
monitor := resourceToMonitorsLibraryFolder(d)
187+
err := c.DeleteMonitorsLibraryFolder(monitor.ID)
188+
if err != nil {
189+
return err
190+
}
191+
return nil
192+
}
193+
194+
func resourceToMonitorsLibraryFolder(d *schema.ResourceData) MonitorsLibraryFolder {
195+
return MonitorsLibraryFolder{
196+
CreatedBy: d.Get("created_by").(string),
197+
Name: d.Get("name").(string),
198+
ID: d.Id(),
199+
CreatedAt: d.Get("created_at").(string),
200+
Description: d.Get("description").(string),
201+
ModifiedBy: d.Get("modified_by").(string),
202+
IsMutable: d.Get("is_mutable").(bool),
203+
Version: d.Get("version").(int),
204+
Type: d.Get("type").(string),
205+
ParentID: d.Get("parent_id").(string),
206+
ModifiedAt: d.Get("modified_at").(string),
207+
ContentType: d.Get("content_type").(string),
208+
IsLocked: d.Get("is_locked").(bool),
209+
IsSystem: d.Get("is_system").(bool),
210+
}
211+
}

0 commit comments

Comments
 (0)