From 0871143988143d57feea8ebd442c40e65882debc Mon Sep 17 00:00:00 2001 From: Yuuki Takahashi <20282867+yktakaha4@users.noreply.github.com> Date: Fri, 17 Mar 2023 21:49:30 +0900 Subject: [PATCH 1/3] add import cloudflare_tunnel_config --- docs/resources/tunnel_config.md | 8 +++++ .../resource_cloudflare_tunnel_config.go | 30 +++++++++++++++++++ .../resource_cloudflare_tunnel_config_test.go | 12 ++++++++ 3 files changed, 50 insertions(+) diff --git a/docs/resources/tunnel_config.md b/docs/resources/tunnel_config.md index 58264e08ab..96c19f5d1f 100644 --- a/docs/resources/tunnel_config.md +++ b/docs/resources/tunnel_config.md @@ -139,3 +139,11 @@ Optional: Optional: - `enabled` (Boolean) Whether WARP routing is enabled. + +## Import + +Import is supported using the following syntax: + +```shell +$ terraform import cloudflare_tunnel_config.example / +``` diff --git a/internal/sdkv2provider/resource_cloudflare_tunnel_config.go b/internal/sdkv2provider/resource_cloudflare_tunnel_config.go index c90f361b71..47ca6036ba 100644 --- a/internal/sdkv2provider/resource_cloudflare_tunnel_config.go +++ b/internal/sdkv2provider/resource_cloudflare_tunnel_config.go @@ -4,6 +4,7 @@ import ( "context" "fmt" "reflect" + "strings" "time" "github.com/MakeNowJust/heredoc/v2" @@ -13,6 +14,7 @@ import ( "github.com/cloudflare/terraform-provider-cloudflare/internal/consts" "github.com/hashicorp/terraform-plugin-sdk/v2/diag" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" + "github.com/pkg/errors" ) func resourceCloudflareTunnelConfig() *schema.Resource { @@ -22,6 +24,9 @@ func resourceCloudflareTunnelConfig() *schema.Resource { CreateContext: resourceCloudflareTunnelConfigUpdate, UpdateContext: resourceCloudflareTunnelConfigUpdate, DeleteContext: resourceCloudflareTunnelConfigDelete, + Importer: &schema.ResourceImporter{ + StateContext: resourceCloudflareTunnelConfigImport, + }, Description: heredoc.Doc(` Provides a Cloudflare Tunnel configuration resource. `), @@ -223,3 +228,28 @@ func resourceCloudflareTunnelConfigDelete(ctx context.Context, d *schema.Resourc d.SetId("") return nil } + +func resourceCloudflareTunnelConfigImport(ctx context.Context, d *schema.ResourceData, meta interface{}) ([]*schema.ResourceData, error) { + client := meta.(*cloudflare.API) + attributes := strings.Split(d.Id(), "/") + + if len(attributes) != 2 { + return nil, fmt.Errorf("invalid id (\"%s\") specified, should be in format \"accountID/tunnelId\"", d.Id()) + } + + accountId, tunnelId := attributes[0], attributes[1] + + result, err := client.GetTunnelConfiguration(ctx, cloudflare.AccountIdentifier(accountId), tunnelId) + tflog.Debug(ctx, fmt.Sprintf("GetTunnelConfiguration: %+v", result)) + if err != nil { + return nil, errors.Wrap(err, fmt.Sprintf("failed to fetch Cloudflare Tunnel configuration %s", tunnelId)) + } + + d.Set(consts.AccountIDSchemaKey, accountId) + d.Set("tunnel_id", result.TunnelID) + d.SetId(result.TunnelID) + + resourceCloudflareTunnelConfigRead(ctx, d, meta) + + return []*schema.ResourceData{d}, nil +} diff --git a/internal/sdkv2provider/resource_cloudflare_tunnel_config_test.go b/internal/sdkv2provider/resource_cloudflare_tunnel_config_test.go index 81ab498fdc..60f8693fc0 100644 --- a/internal/sdkv2provider/resource_cloudflare_tunnel_config_test.go +++ b/internal/sdkv2provider/resource_cloudflare_tunnel_config_test.go @@ -129,6 +129,12 @@ func TestAccCloudflareTunnelConfig_Full(t *testing.T) { resource.TestCheckResourceAttr(name, "config.0.ingress_rule.1.service", "https://10.0.0.3:8081"), ), }, + { + ResourceName: name, + ImportStateIdPrefix: fmt.Sprintf("%s/", zoneID), + ImportState: true, + ImportStateVerify: true, + }, }, }) } @@ -153,6 +159,12 @@ func TestAccCloudflareTunnelConfig_Short(t *testing.T) { resource.TestCheckResourceAttr(name, "config.0.ingress_rule.0.service", "https://10.0.0.1:8081"), ), }, + { + ResourceName: name, + ImportStateIdPrefix: fmt.Sprintf("%s/", zoneID), + ImportState: true, + ImportStateVerify: true, + }, }, }) } From fe3f602e44734af49d4d3bee513ca65babe59d03 Mon Sep 17 00:00:00 2001 From: Yuuki Takahashi <20282867+yktakaha4@users.noreply.github.com> Date: Fri, 17 Mar 2023 22:05:41 +0900 Subject: [PATCH 2/3] add changelog --- .changelog/2298.txt | 3 +++ 1 file changed, 3 insertions(+) create mode 100644 .changelog/2298.txt diff --git a/.changelog/2298.txt b/.changelog/2298.txt new file mode 100644 index 0000000000..e4fa623452 --- /dev/null +++ b/.changelog/2298.txt @@ -0,0 +1,3 @@ +```release-note:enhancement +resource/cloudflare_tunnel_config: add support for import of `cloudflare_tunnel_config` +``` From 542bfc8de156c4be2b0df7186ebebbb8491cc1f0 Mon Sep 17 00:00:00 2001 From: Jacob Bednarz Date: Mon, 20 Mar 2023 11:10:37 +1100 Subject: [PATCH 3/3] resource/cloudflare_tunnel_config: add docs for import --- examples/resources/cloudflare_tunnel_config/import.sh | 1 + templates/resources/tunnel_config.md.tmpl | 8 ++++++++ 2 files changed, 9 insertions(+) create mode 100644 examples/resources/cloudflare_tunnel_config/import.sh diff --git a/examples/resources/cloudflare_tunnel_config/import.sh b/examples/resources/cloudflare_tunnel_config/import.sh new file mode 100644 index 0000000000..c6078286b1 --- /dev/null +++ b/examples/resources/cloudflare_tunnel_config/import.sh @@ -0,0 +1 @@ +$ terraform import cloudflare_tunnel_config.example / diff --git a/templates/resources/tunnel_config.md.tmpl b/templates/resources/tunnel_config.md.tmpl index 79e2dfa58d..cfc06576bf 100644 --- a/templates/resources/tunnel_config.md.tmpl +++ b/templates/resources/tunnel_config.md.tmpl @@ -16,3 +16,11 @@ description: |- {{ tffile (printf "%s%s%s" "examples/resources/" .Name "/resource.tf") }} {{ .SchemaMarkdown | trimspace }} + +{{ if .HasImport -}} +## Import + +Import is supported using the following syntax: + +{{ codefile "shell" (printf "%s%s%s" "examples/resources/" .Name "/import.sh") }} +{{- end }}