From 2c65c24931a536df32ea8f992e757f5ead71b359 Mon Sep 17 00:00:00 2001 From: Evan de Jesus Date: Fri, 26 Feb 2021 10:22:41 -0500 Subject: [PATCH] update error msg for existing deployment --- .terraform.lock.hcl | 20 ++++++++++++++++++++ dev.tfrc | 6 ++++++ dev24g/resource_deployment.go | 26 ++++++++++++++++++-------- main.tf | 30 ++++++++++++++++++++++++++++++ 4 files changed, 74 insertions(+), 8 deletions(-) create mode 100644 .terraform.lock.hcl create mode 100644 dev.tfrc create mode 100644 main.tf diff --git a/.terraform.lock.hcl b/.terraform.lock.hcl new file mode 100644 index 0000000..c4dd659 --- /dev/null +++ b/.terraform.lock.hcl @@ -0,0 +1,20 @@ +# This file is maintained automatically by "terraform init". +# Manual edits may be lost in future updates. + +provider "registry.terraform.io/twentyfourg/dev24g" { + version = "1.0.0" + hashes = [ + "h1:oVCQp0zYjvs4M8V6Go3u48HohNYP89ejb4X3L3z00K4=", + "zh:14883698843233e59c204fd5e87c8b5eafe3bf8a0bba67442fd2e743d9419a05", + "zh:27e605992d5b16728b858438e41c081b4fa5c3a87bfece05303f3cff2552720b", + "zh:468b1fb6168844aeaddf18e0109a27d49196413f4dfb040a2f089dcceea37502", + "zh:9f48fe3b95576f31eb1b04ef9772b42edfcdf6b524a54e8ea529df83589b417a", + "zh:b0ea1208f4e867affd09e87cc7f10090ddab5ae37ff32ca5e9fded7af4f2c627", + "zh:c683576709f8a0f4c1377688b51e5e5b1ec17d16cbe5fc0895641a78bf0e47f8", + "zh:c78b7c88d225be61cfd7bbde16e24ce9b0cb8b838d4a14e416a9a48985f29368", + "zh:d1f70eafca20058f688cdd98cf9f5e0915b3f8d77ce0cbd117202cc17b7b0226", + "zh:e21ed77905a18f2bb53e9ee772651bc8b94c3c92f5ae739f5e87ba012ecf4944", + "zh:e82c71aee7cbd8250f05ebcf5307851a7e75a29911dfdbeb4610eadeaa574085", + "zh:f783d9ffec9a4cb58695b9131366274223b872899b4c1128ff759edfa76ef2d0", + ] +} diff --git a/dev.tfrc b/dev.tfrc new file mode 100644 index 0000000..e0fe095 --- /dev/null +++ b/dev.tfrc @@ -0,0 +1,6 @@ +provider_installation { + dev_overrides { + "twentyfourg/dev24g" = "/home/24g/go/bin" + } + direct {} +} \ No newline at end of file diff --git a/dev24g/resource_deployment.go b/dev24g/resource_deployment.go index 56a6005..1813681 100644 --- a/dev24g/resource_deployment.go +++ b/dev24g/resource_deployment.go @@ -3,10 +3,12 @@ package dev24g import ( "bytes" "encoding/json" + "errors" "fmt" "io/ioutil" "log" "net/url" + "strings" "github.com/hashicorp/terraform/helper/schema" "github.com/hashicorp/terraform/helper/validation" @@ -19,6 +21,7 @@ type Deployment struct { UUID string `json:"uuid,omitempty"` } +// Stage structure for handing stage type Stage struct { Name string `json:"name"` } @@ -29,6 +32,10 @@ func resourceDeployment() *schema.Resource { Update: resourceDeploymentUpdate, Read: resourceDeploymentRead, Delete: resourceDeploymentDelete, + // TODO: implement import + // Importer: &schema.ResourceImporter{ + // State: schema.ImportStatePassthrough, + // }, Schema: map[string]*schema.Schema{ "uuid": { @@ -76,17 +83,20 @@ func resourceDeploymentCreate(d *schema.ResourceData, m interface{}) error { if err != nil { return err } - req, err := client.Post(fmt.Sprintf("2.0/repositories/%s/environments/", + resp, err := client.Post(fmt.Sprintf("2.0/repositories/%s/environments/", d.Get("repository").(string), ), bytes.NewBuffer(bytedata)) if err != nil { + if strings.Contains(err.Error(), "400") { + return errors.New("Deployment already exists") + } return err } var deployment Deployment - body, readerr := ioutil.ReadAll(req.Body) + body, readerr := ioutil.ReadAll(resp.Body) if readerr != nil { return readerr } @@ -104,16 +114,16 @@ func resourceDeploymentCreate(d *schema.ResourceData, m interface{}) error { func resourceDeploymentRead(d *schema.ResourceData, m interface{}) error { client := m.(*Client) - req, _ := client.Get(fmt.Sprintf("2.0/repositories/%s/environments/%s", + resp, _ := client.Get(fmt.Sprintf("2.0/repositories/%s/environments/%s", d.Get("repository").(string), d.Get("uuid").(string), )) log.Printf("ID: %s", url.PathEscape(d.Id())) - if req.StatusCode == 200 { + if resp.StatusCode == 200 { var Deployment Deployment - body, readerr := ioutil.ReadAll(req.Body) + body, readerr := ioutil.ReadAll(resp.Body) if readerr != nil { return readerr } @@ -128,7 +138,7 @@ func resourceDeploymentRead(d *schema.ResourceData, m interface{}) error { d.Set("stage", Deployment.Stage.Name) } - if req.StatusCode == 404 { + if resp.StatusCode == 404 { d.SetId("") return nil } @@ -144,7 +154,7 @@ func resourceDeploymentUpdate(d *schema.ResourceData, m interface{}) error { if err != nil { return err } - req, err := client.Put(fmt.Sprintf("2.0/repositories/%s/environments/%s", + resp, err := client.Put(fmt.Sprintf("2.0/repositories/%s/environments/%s", d.Get("repository").(string), d.Get("uuid").(string), ), bytes.NewBuffer(bytedata)) @@ -153,7 +163,7 @@ func resourceDeploymentUpdate(d *schema.ResourceData, m interface{}) error { return err } - if req.StatusCode != 200 { + if resp.StatusCode != 200 { return nil } diff --git a/main.tf b/main.tf new file mode 100644 index 0000000..2a2a2aa --- /dev/null +++ b/main.tf @@ -0,0 +1,30 @@ +terraform { + required_providers { + dev24g = { + source = "twentyfourg/dev24g" + } + } + required_version = "~>0.14.3" +} + +# Configure the Provider +provider "dev24g" { + workspace = "24g" +} + +data "dev24g_bitbucket_repository" "api" { + name = "2222-13-billing-tool" +} + +resource "dev24g_bitbucket_deployment" "evan" { + name = "dev-api" + stage = "Test" + repository = "${data.dev24g_bitbucket_repository.api.workspace}/${data.dev24g_bitbucket_repository.api.name}" +} + +resource "dev24g_bitbucket_deployment_variable" "foobar" { + key = "foo" + value = "bar" + secured = false + deployment = dev24g_bitbucket_deployment.evan.id +} \ No newline at end of file