From c5b6ba4e21e499429e10aa3d7107ddbd12c1f870 Mon Sep 17 00:00:00 2001 From: Koenraad Verheyden Date: Fri, 16 Oct 2020 18:34:39 +0200 Subject: [PATCH] Add importer to honeycombio_trigger (#36) --- docs/resources/trigger.md | 10 ++++++++++ honeycombio/resource_trigger.go | 22 ++++++++++++++++++++++ honeycombio/resource_trigger_test.go | 13 +++++++++++++ 3 files changed, 45 insertions(+) diff --git a/docs/resources/trigger.md b/docs/resources/trigger.md index 372322c8..7b1fe9d7 100644 --- a/docs/resources/trigger.md +++ b/docs/resources/trigger.md @@ -89,3 +89,13 @@ webhook | name of the webhook In addition to all arguments above, the following attributes are exported: * `id` - ID of the trigger. + +## Import + +Triggers can be imported using a combination of the dataset name and their ID, e.g. + +``` +$ terraform import honeycombio_board.my_board my-dataaset/AeZzSoWws9G +``` + +You can find the ID in the URL bar when visiting the trigger from the UI. diff --git a/honeycombio/resource_trigger.go b/honeycombio/resource_trigger.go index b30e74b5..cd0883db 100644 --- a/honeycombio/resource_trigger.go +++ b/honeycombio/resource_trigger.go @@ -3,6 +3,8 @@ package honeycombio import ( "context" "encoding/json" + "fmt" + "strings" "github.com/hashicorp/terraform-plugin-sdk/v2/diag" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" @@ -16,6 +18,9 @@ func newTrigger() *schema.Resource { ReadContext: resourceTriggerRead, UpdateContext: resourceTriggerUpdate, DeleteContext: resourceTriggerDelete, + Importer: &schema.ResourceImporter{ + StateContext: resourceTriggerImport, + }, Schema: map[string]*schema.Schema{ "name": { @@ -103,6 +108,23 @@ func newTrigger() *schema.Resource { } } +func resourceTriggerImport(ctx context.Context, d *schema.ResourceData, i interface{}) ([]*schema.ResourceData, error) { + // import ID is of the format / + // note that the dataset name can also contain '/' + idSegments := strings.Split(d.Id(), "/") + if len(idSegments) < 2 { + return nil, fmt.Errorf("invalid import ID, supplied ID must be written as /") + } + + dataset := strings.Join(idSegments[0:len(idSegments)-1], "/") + id := idSegments[len(idSegments)-1] + + d.Set("dataset", dataset) + d.SetId(id) + + return []*schema.ResourceData{d}, nil +} + func resourceTriggerCreate(ctx context.Context, d *schema.ResourceData, meta interface{}) diag.Diagnostics { client := meta.(*honeycombio.Client) diff --git a/honeycombio/resource_trigger_test.go b/honeycombio/resource_trigger_test.go index 9f397abf..4e9d8ab0 100644 --- a/honeycombio/resource_trigger_test.go +++ b/honeycombio/resource_trigger_test.go @@ -42,6 +42,12 @@ func TestAccHoneycombioTrigger_basic(t *testing.T) { testAccCheckTriggerExists(t, "honeycombio_trigger.test", &triggerAfter), ), }, + { + ResourceName: "honeycombio_trigger.test", + ImportStateIdPrefix: fmt.Sprintf("%v/", dataset), + ImportState: true, + ImportStateVerify: true, + }, }, }) } @@ -156,6 +162,13 @@ func TestAccHoneycombioTrigger_validationErrors(t *testing.T) { }`), ExpectError: regexp.MustCompile("limit is not allowed in a trigger query"), }, + { + ResourceName: "honeycombio_trigger.test", + ImportStateId: "someId", + ImportState: true, + ImportStateVerify: true, + ExpectError: regexp.MustCompile("invalid import ID, supplied ID must be written as /"), + }, }, }) }