Skip to content

Commit 99b0827

Browse files
committed
add import to random_pet resource #184
1 parent 227aa79 commit 99b0827

File tree

3 files changed

+54
-1
lines changed

3 files changed

+54
-1
lines changed

docs/resources/pet.md

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -53,3 +53,13 @@ resource "aws_instance" "server" {
5353
### Read-Only
5454

5555
- `id` (String) The random pet name.
56+
57+
## Import
58+
59+
Import is supported using the following syntax:
60+
61+
```shell
62+
# Random Pet can be imported with format: pet_name,separator,prefix
63+
64+
terraform import random_pet.example pet_name,separator,prefix
65+
```
Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
# Random Pet can be imported with format: pet_name,separator,prefix
2+
3+
terraform import random_pet.example pet_name,separator,prefix

internal/provider/resource_pet.go

Lines changed: 41 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,10 @@ import (
2121
mapplanmodifiers "github.com/terraform-providers/terraform-provider-random/internal/planmodifiers/map"
2222
)
2323

24-
var _ resource.Resource = (*petResource)(nil)
24+
var (
25+
_ resource.Resource = (*petResource)(nil)
26+
_ resource.ResourceWithImportState = (*petResource)(nil)
27+
)
2528

2629
func NewPetResource() resource.Resource {
2730
return &petResource{}
@@ -151,6 +154,43 @@ func (r *petResource) Update(ctx context.Context, req resource.UpdateRequest, re
151154
func (r *petResource) Delete(ctx context.Context, req resource.DeleteRequest, resp *resource.DeleteResponse) {
152155
}
153156

157+
func (r *petResource) ImportState(ctx context.Context, req resource.ImportStateRequest, resp *resource.ImportStateResponse) {
158+
parts := strings.Split(req.ID, ",")
159+
if len(parts) != 3 {
160+
resp.Diagnostics.AddError(
161+
"Unexpected Import Identifier",
162+
fmt.Sprintf("Expected import identifier with format: pet_name,separator,prefix. Got: %q", req.ID),
163+
)
164+
return
165+
}
166+
167+
id, separator, prefix := parts[0], parts[1], parts[2]
168+
if separator == "" {
169+
separator = "-"
170+
}
171+
172+
nameLength := len(strings.Split(id, separator))
173+
174+
prefixVal := types.StringNull()
175+
if prefix != "" {
176+
prefixVal = types.StringValue(prefix)
177+
}
178+
179+
state := petModelV0{
180+
ID: types.StringValue(id),
181+
Length: types.Int64Value(int64(nameLength)),
182+
Prefix: prefixVal,
183+
Separator: types.StringValue(separator),
184+
Keepers: types.MapNull(types.StringType),
185+
}
186+
187+
diags := resp.State.Set(ctx, &state)
188+
resp.Diagnostics.Append(diags...)
189+
if resp.Diagnostics.HasError() {
190+
return
191+
}
192+
}
193+
154194
type petModelV0 struct {
155195
ID types.String `tfsdk:"id"`
156196
Keepers types.Map `tfsdk:"keepers"`

0 commit comments

Comments
 (0)