forked from launchdarkly/terraform-provider-launchdarkly
/
segments_helper.go
93 lines (83 loc) · 2.87 KB
/
segments_helper.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
package launchdarkly
import (
"context"
"fmt"
"log"
"github.com/hashicorp/terraform-plugin-sdk/v2/diag"
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema"
)
func baseSegmentSchema() map[string]*schema.Schema {
return map[string]*schema.Schema{
DESCRIPTION: {
Type: schema.TypeString,
Optional: true,
Description: "The description of the segment's purpose.",
},
TAGS: tagsSchema(),
INCLUDED: {
Type: schema.TypeList,
Elem: &schema.Schema{Type: schema.TypeString},
Optional: true,
Description: "List of user keys included in the segment.",
},
EXCLUDED: {
Type: schema.TypeList,
Elem: &schema.Schema{Type: schema.TypeString},
Optional: true,
Description: "List of user keys excluded from the segment",
},
CREATION_DATE: {
Type: schema.TypeInt,
Computed: true,
Description: "The segment's creation date represented as a UNIX epoch timestamp.",
},
RULES: segmentRulesSchema(),
}
}
func segmentRead(ctx context.Context, d *schema.ResourceData, raw interface{}, isDataSource bool) diag.Diagnostics {
var diags diag.Diagnostics
client := raw.(*Client)
projectKey := d.Get(PROJECT_KEY).(string)
envKey := d.Get(ENV_KEY).(string)
segmentKey := d.Get(KEY).(string)
segment, res, err := client.ld.SegmentsApi.GetSegment(client.ctx, projectKey, envKey, segmentKey).Execute()
if isStatusNotFound(res) && !isDataSource {
log.Printf("[WARN] failed to find segment %q in project %q, environment %q, removing from state", segmentKey, projectKey, envKey)
diags = append(diags, diag.Diagnostic{
Severity: diag.Warning,
Summary: fmt.Sprintf("[WARN] failed to find segment %q in project %q, environment %q, removing from state", segmentKey, projectKey, envKey),
})
d.SetId("")
return diags
}
if err != nil {
return diag.Errorf("failed to get segment %q of project %q: %s", segmentKey, projectKey, handleLdapiErr(err))
}
if isDataSource {
d.SetId(projectKey + "/" + envKey + "/" + segmentKey)
}
_ = d.Set(NAME, segment.Name)
_ = d.Set(DESCRIPTION, segment.Description)
_ = d.Set(CREATION_DATE, segment.CreationDate)
err = d.Set(TAGS, segment.Tags)
if err != nil {
return diag.Errorf("failed to set tags on segment with key %q: %v", segmentKey, err)
}
err = d.Set(INCLUDED, segment.Included)
if err != nil {
return diag.Errorf("failed to set included on segment with key %q: %v", segmentKey, err)
}
err = d.Set(EXCLUDED, segment.Excluded)
if err != nil {
return diag.Errorf("failed to set excluded on segment with key %q: %v", segmentKey, err)
}
rules, err := segmentRulesToResourceData(segment.Rules)
if err != nil {
return diag.Errorf("failed to read rules on segment with key %q: %v", segmentKey, err)
}
err = d.Set(RULES, rules)
if err != nil {
return diag.Errorf("failed to set excluded on segment with key %q: %v", segmentKey, err)
}
return diags
}