generated from hashicorp/terraform-provider-scaffolding
/
resource_namespace.go
150 lines (123 loc) · 3.55 KB
/
resource_namespace.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
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
package provider
import (
"context"
"fmt"
"github.com/hashicorp/terraform-plugin-sdk/v2/diag"
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema"
"net/http"
)
func resourceNamespace() *schema.Resource {
return &schema.Resource{
Description: "Manages a Kestra Namespace.",
CreateContext: resourceNamespaceCreate,
ReadContext: resourceNamespaceRead,
UpdateContext: resourceNamespaceUpdate,
DeleteContext: resourceNamespaceDelete,
Schema: map[string]*schema.Schema{
"tenant_id": {
Description: "The tenant id.",
Type: schema.TypeString,
Computed: true,
ForceNew: true,
},
"namespace_id": {
Description: "The namespace.",
Type: schema.TypeString,
Required: true,
ForceNew: true,
},
"description": {
Description: "The namespace friendly description.",
Type: schema.TypeString,
Optional: true,
},
"variables": {
Description: "The namespace variables in yaml string.",
Type: schema.TypeString,
Optional: true,
DiffSuppressFunc: isYamlEquals,
},
"task_defaults": {
Description: "The namespace task defaults in yaml string.",
Type: schema.TypeString,
Optional: true,
DiffSuppressFunc: isYamlEquals,
},
},
Importer: &schema.ResourceImporter{
StateContext: schema.ImportStatePassthroughContext,
},
}
}
func resourceNamespaceCreate(ctx context.Context, d *schema.ResourceData, meta interface{}) diag.Diagnostics {
c := meta.(*Client)
var diags diag.Diagnostics
body, err := namespaceSchemaToApi(d)
if err != nil {
return diag.FromErr(err)
}
tenantId := c.TenantId
r, reqErr := c.request("POST", fmt.Sprintf("%s/namespaces", apiRoot(tenantId)), body)
if reqErr != nil {
return diag.FromErr(reqErr.Err)
}
errs := namespaceApiToSchema(r.(map[string]interface{}), d, c)
if errs != nil {
return errs
}
return diags
}
func resourceNamespaceRead(ctx context.Context, d *schema.ResourceData, meta interface{}) diag.Diagnostics {
c := meta.(*Client)
var diags diag.Diagnostics
namespaceId := d.Id()
tenantId := c.TenantId
r, reqErr := c.request("GET", fmt.Sprintf("%s/namespaces/%s", apiRoot(tenantId), namespaceId), nil)
if reqErr != nil {
if reqErr.StatusCode == http.StatusNotFound {
d.SetId("")
return diags
}
return diag.FromErr(reqErr.Err)
}
errs := namespaceApiToSchema(r.(map[string]interface{}), d, c)
if errs != nil {
return errs
}
return diags
}
func resourceNamespaceUpdate(ctx context.Context, d *schema.ResourceData, meta interface{}) diag.Diagnostics {
c := meta.(*Client)
var diags diag.Diagnostics
if d.HasChanges("description", "variables", "task_defaults") {
body, err := namespaceSchemaToApi(d)
if err != nil {
return diag.FromErr(err)
}
namespaceId := d.Id()
tenantId := c.TenantId
r, reqErr := c.request("PUT", fmt.Sprintf("%s/namespaces/%s", apiRoot(tenantId), namespaceId), body)
if reqErr != nil {
return diag.FromErr(reqErr.Err)
}
errs := namespaceApiToSchema(r.(map[string]interface{}), d, c)
if errs != nil {
return errs
}
return diags
} else {
return resourceNamespaceRead(ctx, d, meta)
}
}
func resourceNamespaceDelete(ctx context.Context, d *schema.ResourceData, meta interface{}) diag.Diagnostics {
c := meta.(*Client)
var diags diag.Diagnostics
namespaceId := d.Id()
tenantId := c.TenantId
_, reqErr := c.request("DELETE", fmt.Sprintf("%s/namespaces/%s", apiRoot(tenantId), namespaceId), nil)
if reqErr != nil {
return diag.FromErr(reqErr.Err)
}
d.SetId("")
return diags
}