From 0c357c751e41415d8314e4697abbcb3672d4f2ef Mon Sep 17 00:00:00 2001 From: travis laduke Date: Fri, 14 Oct 2022 13:47:32 -0700 Subject: [PATCH] Allow importing members re #17 and #29 I'm not sure how to add a test for `import`ing yet. The cool tf harness doesn't support `import`. The terraform file I used for testing. ``` terraform { required_providers { zerotier = { source = "zerotier/zerotier" } } } resource "zerotier_member" "bob" {} ``` `terraform import zerotier_member.bob 8286ac0e4786b2aa-1122334455` The member needs to already exist `terraform state show zerotier_member.bob` implementation borrowed from bltavares branch --- docs/resources/member.md | 8 ++++++++ pkg/zerotier/resource_member.go | 19 ++++++++++++++++++- 2 files changed, 26 insertions(+), 1 deletion(-) diff --git a/docs/resources/member.md b/docs/resources/member.md index 0648ccf..7180ce4 100644 --- a/docs/resources/member.md +++ b/docs/resources/member.md @@ -46,3 +46,11 @@ resource "zerotier_member" "alice" { - **no_auto_assign_ips** (Boolean) Exempt this member from the IP auto assignment pool on a Network + +## Import + +Members can be imported using their Network ID and Node ID, for example: + +``` +$ terraform import zerotier_network.network "8056c2e21c1930be-1122334455" +``` diff --git a/pkg/zerotier/resource_member.go b/pkg/zerotier/resource_member.go index ec06ae2..9cc252a 100644 --- a/pkg/zerotier/resource_member.go +++ b/pkg/zerotier/resource_member.go @@ -2,6 +2,7 @@ package zerotier import ( "context" + "strings" "github.com/hashicorp/terraform-plugin-sdk/v2/diag" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" @@ -16,6 +17,9 @@ func resourceMember() *schema.Resource { UpdateContext: resourceMemberUpdate, DeleteContext: resourceMemberDelete, Schema: MemberSchema, + Importer: &schema.ResourceImporter{ + State: schema.ImportStatePassthrough, + }, } } @@ -26,7 +30,9 @@ func resourceMember() *schema.Resource { func resourceMemberRead(ctx context.Context, d *schema.ResourceData, m interface{}) diag.Diagnostics { c := m.(*ztcentral.Client) - member, err := c.GetMember(ctx, d.Get("network_id").(string), d.Get("member_id").(string)) + nwid, nodeId := resourceNetworkAndNodeIdentifiers(d) + + member, err := c.GetMember(ctx, nwid, nodeId) if err != nil { return diag.FromErr(err) } @@ -75,3 +81,14 @@ func resourceMemberDelete(ctx context.Context, d *schema.ResourceData, m interfa d.SetId("") return nil } + +func resourceNetworkAndNodeIdentifiers(d *schema.ResourceData) (string, string) { + nwid := d.Get("network_id").(string) + nodeID := d.Get("member_id").(string) + + if nwid == "" && nodeID == "" { + parts := strings.Split(d.Id(), "-") + nwid, nodeID = parts[0], parts[1] + } + return nwid, nodeID +}