-
Notifications
You must be signed in to change notification settings - Fork 132
/
resource_fastly_tls_private_key.go
134 lines (119 loc) · 3.44 KB
/
resource_fastly_tls_private_key.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
package fastly
import (
"context"
"fmt"
gofastly "github.com/fastly/go-fastly/v6/fastly"
"github.com/hashicorp/terraform-plugin-sdk/v2/diag"
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema"
"time"
)
func resourceFastlyTLSPrivateKey() *schema.Resource {
return &schema.Resource{
CreateContext: resourceFastlyTLSPrivateKeyCreate,
ReadContext: resourceFastlyTLSPrivateKeyRead,
DeleteContext: resourceFastlyTLSPrivateKeyDelete,
Importer: &schema.ResourceImporter{
StateContext: schema.ImportStatePassthroughContext,
},
Schema: map[string]*schema.Schema{
"key_pem": {
Type: schema.TypeString,
Required: true,
ForceNew: true,
Description: "Private key in PEM format.",
Sensitive: true,
},
"name": {
Type: schema.TypeString,
Required: true,
ForceNew: true,
Description: "Customisable name of the private key.",
},
"created_at": {
Type: schema.TypeString,
Computed: true,
Description: "Time-stamp (GMT) when the private key was created.",
},
"key_length": {
Type: schema.TypeInt,
Computed: true,
Description: "The key length used to generate the private key.",
},
"key_type": {
Type: schema.TypeString,
Computed: true,
Description: "The algorithm used to generate the private key. Must be RSA.",
},
"replace": {
Type: schema.TypeBool,
Computed: true,
Description: "Whether Fastly recommends replacing this private key.",
},
"public_key_sha1": {
Type: schema.TypeString,
Computed: true,
Description: "Useful for safely identifying the key.",
},
},
}
}
func resourceFastlyTLSPrivateKeyCreate(ctx context.Context, d *schema.ResourceData, meta interface{}) diag.Diagnostics {
conn := meta.(*FastlyClient).conn
privateKey, err := conn.CreatePrivateKey(&gofastly.CreatePrivateKeyInput{
Key: d.Get("key_pem").(string),
Name: d.Get("name").(string),
})
if err != nil {
return diag.FromErr(err)
}
d.SetId(privateKey.ID)
return resourceFastlyTLSPrivateKeyRead(ctx, d, meta)
}
func resourceFastlyTLSPrivateKeyRead(_ context.Context, d *schema.ResourceData, meta interface{}) diag.Diagnostics {
conn := meta.(*FastlyClient).conn
var diags diag.Diagnostics
privateKey, err := conn.GetPrivateKey(&gofastly.GetPrivateKeyInput{
ID: d.Id(),
})
if err != nil {
return diag.FromErr(err)
}
if privateKey.Replace {
diags = append(diags, diag.Diagnostic{
Severity: diag.Warning,
Summary: fmt.Sprintf("Fastly recommends that this private key (%s) be replaced", privateKey.ID),
})
}
err = d.Set("name", privateKey.Name)
if err != nil {
return diag.FromErr(err)
}
err = d.Set("created_at", privateKey.CreatedAt.Format(time.RFC3339))
if err != nil {
return diag.FromErr(err)
}
err = d.Set("key_length", privateKey.KeyLength)
if err != nil {
return diag.FromErr(err)
}
err = d.Set("key_type", privateKey.KeyType)
if err != nil {
return diag.FromErr(err)
}
err = d.Set("replace", privateKey.Replace)
if err != nil {
return diag.FromErr(err)
}
err = d.Set("public_key_sha1", privateKey.PublicKeySHA1)
if err != nil {
return diag.FromErr(err)
}
return diags
}
func resourceFastlyTLSPrivateKeyDelete(_ context.Context, d *schema.ResourceData, meta interface{}) diag.Diagnostics {
conn := meta.(*FastlyClient).conn
err := conn.DeletePrivateKey(&gofastly.DeletePrivateKeyInput{
ID: d.Id(),
})
return diag.FromErr(err)
}