From af2082e9f95654145adf67db660c5fac2dca0877 Mon Sep 17 00:00:00 2001 From: Helio Machado <0x2b3bfa0+git@googlemail.com> Date: Thu, 17 Feb 2022 11:59:13 +0100 Subject: [PATCH] Use randomly generated identifiers by default (#396) * Use randomly generated identifiers by default Closes #379 and #390 * remove example in readme Co-authored-by: DavidGOrtega --- docs/guides/getting-started.md | 1 - docs/index.md | 1 - docs/resources/task.md | 3 +-- iterative/resource_task.go | 34 ++++++++++++++++++++++++++-------- 4 files changed, 27 insertions(+), 12 deletions(-) diff --git a/docs/guides/getting-started.md b/docs/guides/getting-started.md index 79cc3230..7afec4fb 100644 --- a/docs/guides/getting-started.md +++ b/docs/guides/getting-started.md @@ -22,7 +22,6 @@ terraform { } provider "iterative" {} resource "iterative_task" "task" { - name = "example" cloud = "aws" # or any of: gcp, az, k8s machine = "m" diff --git a/docs/index.md b/docs/index.md index 49b7a2bf..f8fe27de 100644 --- a/docs/index.md +++ b/docs/index.md @@ -10,7 +10,6 @@ terraform { } provider "iterative" {} resource "iterative_task" "task" { - name = "example" cloud = "aws" script = <<-END diff --git a/docs/resources/task.md b/docs/resources/task.md index 5376e3bc..14a8473a 100644 --- a/docs/resources/task.md +++ b/docs/resources/task.md @@ -11,7 +11,6 @@ This resource will: ```hcl resource "iterative_task" "task" { - name = "example" cloud = "aws" environment = { GREETING = "Hello, world!" } @@ -30,12 +29,12 @@ resource "iterative_task" "task" { ### Required -- `name` - (Required) Task name. - `cloud` - (Required) Cloud provider to run the task on; valid values are `aws`, `gcp`, `az` and `k8s`. - `script` - (Required) Script to run; must begin with a valid [shebang](). ### Optional +- `name` - (Optional) Deterministic task name. - `region` - (Optional) [Cloud region/zone](#cloud-regions) to run the task on. - `machine` - (Optional) See [Machine Types](#machine-types) below. - `disk_size` - (Optional) Size of the ephemeral machine storage. diff --git a/iterative/resource_task.go b/iterative/resource_task.go index e6258c47..7cbd6efc 100644 --- a/iterative/resource_task.go +++ b/iterative/resource_task.go @@ -9,6 +9,8 @@ import ( "strings" "time" + "github.com/aohorodnyk/uid" + "github.com/hashicorp/terraform-plugin-sdk/v2/diag" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" @@ -26,7 +28,7 @@ func resourceTask() *schema.Resource { "name": { Type: schema.TypeString, ForceNew: true, - Required: true, + Optional: true, }, "cloud": { Type: schema.TypeString, @@ -162,14 +164,15 @@ func resourceTaskCreate(ctx context.Context, d *schema.ResourceData, m interface return diagnostic(diags, err, diag.Error) } - if err := task.Create(ctx); err == nil { - d.SetId(task.GetIdentifier(ctx).Long()) - } else { + d.SetId(task.GetIdentifier(ctx).Long()) + + if err := task.Create(ctx); err != nil { diags = diagnostic(diags, err, diag.Error) - if err := task.Delete(ctx); err == nil { - diags = diagnostic(diags, errors.New("failed to create"), diag.Error) - } else { + if err := task.Delete(ctx); err != nil { diags = diagnostic(diags, err, diag.Error) + } else { + diags = diagnostic(diags, errors.New("failed to create"), diag.Error) + d.SetId("") } } @@ -316,7 +319,22 @@ func resourceTaskBuild(ctx context.Context, d *schema.ResourceData, m interface{ Parallelism: uint16(d.Get("parallelism").(int)), } - return task.New(ctx, c, common.Identifier(d.Get("name").(string)), t) + name := d.Id() + if name == "" { + if identifier := d.Get("name").(string); identifier != "" { + name = identifier + } else if identifier := os.Getenv("GITHUB_RUN_ID"); identifier != "" { + name = identifier + } else if identifier := os.Getenv("CI_PIPELINE_ID"); identifier != "" { + name = identifier + } else if identifier := os.Getenv("BITBUCKET_STEP_TRIGGERER_UUID"); identifier != "" { + name = identifier + } else { + name = uid.NewProvider36Size(8).MustGenerate().String() + } + } + + return task.New(ctx, c, common.Identifier(name), t) } func diagnostic(diags diag.Diagnostics, err error, severity diag.Severity) diag.Diagnostics {