This repository has been archived by the owner on Jul 21, 2020. It is now read-only.
forked from scaleway/terraform-provider-scaleway
/
resource_user_data.go
113 lines (97 loc) · 2.52 KB
/
resource_user_data.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
package scaleway
import (
"fmt"
"strings"
"github.com/hashicorp/terraform/helper/schema"
api "github.com/nicolai86/scaleway-sdk"
)
func resourceScalewayUserData() *schema.Resource {
return &schema.Resource{
Create: resourceScalewayUserDataCreate,
Read: resourceScalewayUserDataRead,
Update: resourceScalewayUserDataUpdate,
Delete: resourceScalewayUserDataDelete,
Importer: &schema.ResourceImporter{
State: schema.ImportStatePassthrough,
},
Schema: map[string]*schema.Schema{
"server": {
Type: schema.TypeString,
Required: true,
ForceNew: true,
Description: "The server the meta data is associated with",
},
"key": {
Type: schema.TypeString,
Required: true,
ForceNew: true,
Description: "The key of the user data to manage",
},
"value": {
Type: schema.TypeString,
Required: true,
Description: "The value of the user",
},
},
}
}
func resourceScalewayUserDataCreate(d *schema.ResourceData, m interface{}) error {
scaleway := m.(*Client).scaleway
if err := scaleway.PatchUserdata(
d.Get("server").(string),
d.Get("key").(string),
[]byte(d.Get("value").(string)),
false); err != nil {
return err
}
d.SetId(fmt.Sprintf("userdata-%s-%s", d.Get("server").(string), d.Get("key").(string)))
return resourceScalewayUserDataRead(d, m)
}
func resourceScalewayUserDataRead(d *schema.ResourceData, m interface{}) error {
scaleway := m.(*Client).scaleway
if d.Get("server").(string) == "" {
// import case
parts := strings.Split(d.Id(), "-")
d.Set("key", parts[len(parts)-1])
d.Set("server", strings.Join(parts[1:len(parts)-1], "-"))
}
userdata, err := scaleway.GetUserdata(
d.Get("server").(string),
d.Get("key").(string),
false,
)
if err != nil {
if serr, ok := err.(api.APIError); ok {
if serr.StatusCode == 404 {
d.SetId("")
return nil
}
}
return err
}
d.Set("value", userdata.String())
return nil
}
func resourceScalewayUserDataUpdate(d *schema.ResourceData, m interface{}) error {
scaleway := m.(*Client).scaleway
if err := scaleway.PatchUserdata(
d.Get("server").(string),
d.Get("key").(string),
[]byte(d.Get("value").(string)),
false); err != nil {
return err
}
return resourceScalewayUserDataRead(d, m)
}
func resourceScalewayUserDataDelete(d *schema.ResourceData, m interface{}) error {
scaleway := m.(*Client).scaleway
err := scaleway.DeleteUserdata(
d.Get("server").(string),
d.Get("key").(string),
false)
if err != nil {
return err
}
d.SetId("")
return nil
}