Skip to content

Commit d3a5054

Browse files
authored
Merge pull request #373 from SumoLogic/ayiu_SUMO-164539_fgp_provider_pt_01
SUMO-164539: adding optional FGP "obj_permissions" feature to Monitor Folder TF Provider
2 parents 5d6b855 + 7c6fbe2 commit d3a5054

File tree

5 files changed

+904
-3
lines changed

5 files changed

+904
-3
lines changed

sumologic/resource_sumologic_monitors_library_folder.go

Lines changed: 64 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -92,18 +92,24 @@ func resourceSumologicMonitorsLibraryFolder() *schema.Resource {
9292
Type: schema.TypeString,
9393
Required: true,
9494
},
95+
9596
"post_request_map": {
9697
Type: schema.TypeMap,
9798
Optional: true,
9899
Elem: &schema.Schema{
99100
Type: schema.TypeString,
100101
},
101102
},
103+
104+
"obj_permission": GetCmfFgpObjPermSetSchema(),
102105
},
103106
}
104107
}
105108

109+
const fgpTargetType = "monitors"
110+
106111
func resourceSumologicMonitorsLibraryFolderCreate(d *schema.ResourceData, meta interface{}) error {
112+
107113
c := meta.(*Client)
108114
if d.Id() == "" {
109115
folder := resourceToMonitorsLibraryFolder(d)
@@ -122,12 +128,24 @@ func resourceSumologicMonitorsLibraryFolderCreate(d *schema.ResourceData, meta i
122128
return err
123129
}
124130

131+
permStmts, convErr := ResourceToCmfFgpPermStmts(d, monitorDefinitionID)
132+
if convErr != nil {
133+
return convErr
134+
}
135+
_, fgpErr := c.SetCmfFgp(fgpTargetType, CmfFgpRequest{
136+
PermissionStatements: permStmts,
137+
})
138+
if fgpErr != nil {
139+
return fgpErr
140+
}
141+
125142
d.SetId(monitorDefinitionID)
126143
}
127144
return resourceSumologicMonitorsLibraryFolderRead(d, meta)
128145
}
129146

130147
func resourceSumologicMonitorsLibraryFolderRead(d *schema.ResourceData, meta interface{}) error {
148+
131149
c := meta.(*Client)
132150

133151
folder, err := c.GetMonitorsLibraryFolder(d.Id())
@@ -141,6 +159,18 @@ func resourceSumologicMonitorsLibraryFolderRead(d *schema.ResourceData, meta int
141159
return nil
142160
}
143161

162+
fgpResponse, fgpErr := c.GetCmfFgp(fgpTargetType, folder.ID)
163+
if fgpErr != nil {
164+
// if FGP endpoint is not enabled (not implemented), we should suppress this error
165+
if !HasErrorCode(fgpErr.Error(), "not_implemented_yet") {
166+
return fgpErr
167+
} else {
168+
log.Printf("[WARN] FGP Feature has not been enabled yet. Suppressing \"not_implemented_yet\" error under GetCmfFgp operation.")
169+
}
170+
} else {
171+
CmfFgpPermStmtsSetToResource(d, fgpResponse.PermissionStatements)
172+
}
173+
144174
d.Set("created_by", folder.CreatedBy)
145175
d.Set("created_at", folder.CreatedAt)
146176
d.Set("modified_by", folder.ModifiedBy)
@@ -158,13 +188,44 @@ func resourceSumologicMonitorsLibraryFolderRead(d *schema.ResourceData, meta int
158188
}
159189

160190
func resourceSumologicMonitorsLibraryFolderUpdate(d *schema.ResourceData, meta interface{}) error {
191+
161192
c := meta.(*Client)
162-
monitor := resourceToMonitorsLibraryFolder(d)
163-
monitor.Type = "MonitorsLibraryFolderUpdate"
164-
err := c.UpdateMonitorsLibraryFolder(monitor)
193+
monitorFolder := resourceToMonitorsLibraryFolder(d)
194+
monitorFolder.Type = "MonitorsLibraryFolderUpdate"
195+
err := c.UpdateMonitorsLibraryFolder(monitorFolder)
165196
if err != nil {
166197
return err
167198
}
199+
200+
// converting Reource FGP to Struct
201+
permStmts, convErr := ResourceToCmfFgpPermStmts(d, monitorFolder.ID)
202+
if convErr != nil {
203+
return convErr
204+
}
205+
206+
// reading FGP from Backend to reconcille
207+
fgpGetResponse, fgpGetErr := c.GetCmfFgp(fgpTargetType, monitorFolder.ID)
208+
if fgpGetErr != nil {
209+
// if FGP endpoint is not enabled (not implemented) and FGP feature is not used,
210+
// we should suppress this error
211+
if !HasErrorCode(fgpGetErr.Error(), "not_implemented_yet") && len(permStmts) == 0 {
212+
return fgpGetErr
213+
} else {
214+
log.Printf("[WARN] FGP Feature has not been enabled yet. Suppressing \"not_implemented_yet\" error under GetCmfFgp operation.")
215+
}
216+
}
217+
218+
if len(permStmts) > 0 || fgpGetResponse != nil {
219+
_, fgpSetErr := c.SetCmfFgp(fgpTargetType, CmfFgpRequest{
220+
PermissionStatements: ReconcileFgpPermStmtsWithEmptyPerms(
221+
permStmts, fgpGetResponse.PermissionStatements,
222+
),
223+
})
224+
if fgpSetErr != nil {
225+
return fgpSetErr
226+
}
227+
}
228+
168229
return resourceSumologicMonitorsLibraryFolderRead(d, meta)
169230
}
170231

0 commit comments

Comments
 (0)