hashicorp / terraform-provider-dyn

Terraform Dyn provider. Please note: This Terraform provider is archived per our provider archiving process: https://terraform.io/docs/internals/archiving.html
https://registry.terraform.io
Mozilla Public License 2.0
7 stars 16 forks source link

Failed to create Dyn record: Bad response, got "400 Bad Request" #7

Closed hashibot closed 6 years ago

hashibot commented 7 years ago

This issue was originally opened by @kian as hashicorp/terraform#13058. It was migrated here as part of the provider split. The original body of the issue is below.


I am running into 400 Bad Request errors when attempting to manage DNS records using the Dyn provider.

The error goes away if I remove the records manually and have TF create them, but as this causes downtime, it is not ideal.

Terraform Version

$ terraform --version
Terraform v0.9.2-dev (07e54205b8f509d44c4f4703a21933b73e09d1eb+CHANGES)

Affected Resource(s)

Terraform Configuration Files

resource "dyn_record" "www01-example-com" {
  zone  = "example.com"

  name  = "www01"
  type  = "A"
  value = "1.2.3.4"
  ttl   = 3600
}

Debug Output

This contains sensitive zone data, I can provide it some other way if needed or produce a simplified test case. Given how easily the error reproduces I assume it's not very useful anyway.

Panic Output

N/A

Expected Behavior

I am hoping TF could notice the records already exist, only the TTL is different, and only update the TTL.

Actual Behavior

Error applying plan:

29 error(s) occurred:

* dyn_record.www01-placelocalstaging-com: 1 error(s) occurred:

* dyn_record.www01-placelocalstaging-com: Failed to create Dyn record: Bad response, got "400 Bad Request"
* dyn_record.www-placelocalqa-com: 1 error(s) occurred:

* dyn_record.www-placelocalqa-com: Failed to create Dyn record: Bad response, got "400 Bad Request"
* dyn_record.DFC2F923204B75C6E49A176BCE221954-placelocalqa-com: 1 error(s) occurred:

* dyn_record.DFC2F923204B75C6E49A176BCE221954-placelocalqa-com: Failed to create Dyn record: Bad response, got "400 Bad Request"
* dyn_record.wildcard-placelocaldemo-com-2: 1 error(s) occurred:

* dyn_record.wildcard-placelocaldemo-com-2: Failed to create Dyn record: Bad response, got "400 Bad Request"
* dyn_record.origin-images-placelocalqa-com: 1 error(s) occurred:

* dyn_record.origin-images-placelocalqa-com: Failed to create Dyn record: Bad response, got "400 Bad Request"
* dyn_record.assets-placelocalqa-com: 1 error(s) occurred:

* dyn_record.assets-placelocalqa-com: Failed to create Dyn record: Bad response, got "400 Bad Request"
* dyn_record.origin-assets-placelocalstaging-com: 1 error(s) occurred:

* dyn_record.origin-assets-placelocalstaging-com: Failed to create Dyn record: Bad response, got "400 Bad Request"
* dyn_record.origin-assets-placelocalqa-com: 1 error(s) occurred:

* dyn_record.origin-assets-placelocalqa-com: Failed to create Dyn record: Bad response, got "400 Bad Request"
* dyn_record.api01-placelocalstaging-com: 1 error(s) occurred:

* dyn_record.api01-placelocalstaging-com: Failed to create Dyn record: Bad response, got "400 Bad Request"
* dyn_record.origin-images-placelocalstaging-com: 1 error(s) occurred:

* dyn_record.origin-images-placelocalstaging-com: Failed to create Dyn record: Bad response, got "400 Bad Request"
* dyn_record.wildcard-placelocaldemo-com-1: 1 error(s) occurred:

* dyn_record.wildcard-placelocaldemo-com-1: Failed to create Dyn record: Bad response, got "400 Bad Request"
* dyn_record.origin-www-placelocalstaging-com: 1 error(s) occurred:

* dyn_record.origin-www-placelocalstaging-com: Failed to create Dyn record: Bad response, got "400 Bad Request"
* dyn_record.db02-placelocalstaging-com: 1 error(s) occurred:

* dyn_record.db02-placelocalstaging-com: Failed to create Dyn record: Bad response, got "400 Bad Request"
* dyn_record.www-placelocalstaging-com: 1 error(s) occurred:

* dyn_record.www-placelocalstaging-com: Failed to create Dyn record: Bad response, got "400 Bad Request"
* dyn_record.images-placelocalstaging-com: 1 error(s) occurred:

* dyn_record.images-placelocalstaging-com: Failed to create Dyn record: Bad response, got "400 Bad Request"
* dyn_record.wildcard-placelocalstaging-com: 1 error(s) occurred:

* dyn_record.wildcard-placelocalstaging-com: Failed to create Dyn record: Bad response, got "400 Bad Request"
* dyn_record.api02-placelocalqa-com: 1 error(s) occurred:

* dyn_record.api02-placelocalqa-com: Failed to create Dyn record: Bad response, got "400 Bad Request"
* dyn_record.api-placelocalstaging-com: 1 error(s) occurred:

* dyn_record.api-placelocalstaging-com: Failed to create Dyn record: Bad response, got "400 Bad Request"
* dyn_record.tps02-placelocalqa-com: 1 error(s) occurred:

* dyn_record.tps02-placelocalqa-com: Failed to create Dyn record: Bad response, got "400 Bad Request"
* dyn_record.origin-www-placelocalqa-com: 1 error(s) occurred:

* dyn_record.origin-www-placelocalqa-com: Failed to create Dyn record: Bad response, got "400 Bad Request"
* dyn_record.db01-placelocalqa-com: 1 error(s) occurred:

* dyn_record.db01-placelocalqa-com: Failed to create Dyn record: Bad response, got "400 Bad Request"
* dyn_record.adserve-placelocalqa-com: 1 error(s) occurred:

* dyn_record.adserve-placelocalqa-com: Failed to create Dyn record: Bad response, got "400 Bad Request"
* dyn_record.db01-placelocalstaging-com: 1 error(s) occurred:

* dyn_record.db01-placelocalstaging-com: Failed to create Dyn record: Bad response, got "400 Bad Request"
* dyn_record.tracking-placelocalqa-com: 1 error(s) occurred:

* dyn_record.tracking-placelocalqa-com: Failed to create Dyn record: Bad response, got "400 Bad Request"
* dyn_record.images-placelocalqa-com: 1 error(s) occurred:

* dyn_record.images-placelocalqa-com: Failed to create Dyn record: Bad response, got "400 Bad Request"
* dyn_record.api-placelocalqa-com: 1 error(s) occurred:

* dyn_record.api-placelocalqa-com: Failed to create Dyn record: Bad response, got "400 Bad Request"
* dyn_record.tracking-placelocalstaging-com: 1 error(s) occurred:

* dyn_record.tracking-placelocalstaging-com: Failed to create Dyn record: Bad response, got "400 Bad Request"
* dyn_record.assets-placelocalstaging-com: 1 error(s) occurred:

* dyn_record.assets-placelocalstaging-com: Failed to create Dyn record: Bad response, got "400 Bad Request"
* dyn_record.wildcard-placelocalqa-com: 1 error(s) occurred:

* dyn_record.wildcard-placelocalqa-com: Failed to create Dyn record: Bad response, got "400 Bad Request"

Terraform does not automatically rollback in the face of errors.
Instead, your Terraform state file has been partially updated with
any resources that successfully completed. Please address the error
above and apply again to incrementally change your infrastructure.

Steps to Reproduce

  1. terraform apply

Important Factoids

Seems to work if I first delete the existing records.

radeksimko commented 6 years ago

Hi @kian, generally speaking Terraform tends to avoid overwriting any existing records to prevent stamping over another tool or a user, so in case there's an existing record you get 400 and this is intended behaviour.

That said I relabelled this issue as enhancement because we could add support for import as you rightly mentioned in https://github.com/hashicorp/terraform/issues/13058#issuecomment-291629849

The import functionality won't be trivial to implement in this particular case though, because the DynDNS doesn't seem to provide a way to lookup a record based on ID. https://help.dyn.com/get-a-records-api/

sjparkinson commented 6 years ago

Would https://help.dyn.com/get-all-records-api/ not be enough, with something like terraform import dyn_record.www www.example.com?

This provider is not very useful as it stands for managing any existing records, which I imagine is often the case.

max-l-weaver commented 6 years ago

+1 on this. Spent a not insignificant amount of time migrating DNS records to Terraform only to discover I can't manage existing records and will have to delete/re-create. This might be OK if you only have a few, but I'm guessing the reason people want to manage their DNS with Terraform in the first place is because they have too many to manage manually.