Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

ibm_dns_resource_record Change of TTL has error .name in body is a forbidden property #1331

Closed
sean-freeman opened this issue Apr 17, 2020 · 3 comments

Comments

@sean-freeman
Copy link

sean-freeman commented Apr 17, 2020

Terraform Version

$  terraform -v
Terraform v0.12.24
+ provider.ibm v1.4.0
+ provider.null v2.1.2
+ provider.tls v2.1.1

Affected Resource(s)

Please list the resources as a list, for example:

  • ibm_dns_zone
  • ibm_dns_permitted_network
  • ibm_dns_resource_record

Terraform Configuration Files

resource "ibm_resource_group" "test_rg" {
  name     = "test-rg"
}


resource "ibm_is_vpc" "test_vpc" {
  name = "test-vpc"
  resource_group = ibm_resource_group.test_rg.id
}


resource "ibm_resource_instance" "test-pdns-instance" {
  name              = "test-pdns"
  service           = "dns-svcs"
  plan              = "free-plan"

  resource_group_id = ibm_resource_group.test_rg.id
  location          = "global"

  //User can increase timeouts
  timeouts {
    create = "15m"
    update = "15m"
    delete = "15m"
  }
}


resource "ibm_dns_zone" "test-pdns-zone" {
  depends_on = [ibm_resource_instance.test-pdns-instance]
  name        = "test.com"
  instance_id = ibm_resource_instance.test-pdns-instance.guid
  description = "testdescription"
  label       = "testlabel"
}


resource "ibm_dns_permitted_network" "test-pdns-permitted-network-nw" {
  depends_on = [ibm_dns_zone.test-pdns-zone]
  instance_id = ibm_resource_instance.test-pdns-instance.guid
  zone_id = ibm_dns_zone.test-pdns-zone.zone_id
  vpc_crn = ibm_is_vpc.test_vpc.resource_crn
  type = "vpc"
}


# Create "A" (IPv4 Address) Resource Record to associate subdomain to an IPv4 address
# The input name becomes the "subdomain of the root domain"
resource "ibm_dns_resource_record" "test-pdns-resource-record-a" {
  depends_on  = [ibm_dns_permitted_network.test-pdns-permitted-network-nw]
  instance_id = ibm_resource_instance.test-pdns-instance.guid
  zone_id     = ibm_dns_zone.test-pdns-zone.zone_id
  type        = "A"
  name        = "testA"
  rdata       = "1.2.3.4"
  ttl         = 1800
}

resource "ibm_dns_resource_record" "test-pdns-resource-record-aaaa" {
  depends_on  = [ibm_dns_resource_record.test-pdns-resource-record-a]
  instance_id = ibm_resource_instance.test-pdns-instance.guid
  zone_id     = ibm_dns_zone.test-pdns-zone.zone_id
  type        = "AAAA"
  name        = "testAAAA"
  rdata       = "2001:0db8:0012:0001:3c5e:7354:0000:5db5"
  ttl         = 1800
}

resource "ibm_dns_resource_record" "test-pdns-resource-record-cname" {
  depends_on  = [ibm_dns_resource_record.test-pdns-resource-record-aaaa]
  instance_id = ibm_resource_instance.test-pdns-instance.guid
  zone_id     = ibm_dns_zone.test-pdns-zone.zone_id
  type        = "CNAME"
  name        = "testCNAME"
  rdata       = "test.com"
  ttl         = 1800
}

resource "ibm_dns_resource_record" "test-pdns-resource-record-ptr" {
  depends_on  = [ibm_dns_resource_record.test-pdns-resource-record-cname]
  instance_id = ibm_resource_instance.test-pdns-instance.guid
  zone_id     = ibm_dns_zone.test-pdns-zone.zone_id
  type        = "PTR"
  name        = "1.2.3.4"
  rdata       = "testA.test.com"
  ttl         = 1800
}

resource "ibm_dns_resource_record" "test-pdns-resource-record-mx" {
  depends_on  = [ibm_dns_resource_record.test-pdns-resource-record-ptr]
  instance_id = ibm_resource_instance.test-pdns-instance.guid
  zone_id     = ibm_dns_zone.test-pdns-zone.zone_id
  type        = "MX"
  name        = "testMX"
  rdata       = "mailserver.test.com"
  preference  = 10
  ttl         = 1800
}

resource "ibm_dns_resource_record" "test-pdns-resource-record-srv" {
  depends_on  = [ibm_dns_resource_record.test-pdns-resource-record-mx]
  instance_id = ibm_resource_instance.test-pdns-instance.guid
  zone_id     = ibm_dns_zone.test-pdns-zone.zone_id
  type        = "SRV"
  name        = "testSRV"
  rdata       = "tester.com"
  priority    = 100
  weight      = 100
  port        = 8000
  service     = "_sip"
  protocol    = "udp"
  ttl         = 1800
}

resource "ibm_dns_resource_record" "test-pdns-resource-record-txt" {
  depends_on  = [ibm_dns_resource_record.test-pdns-resource-record-srv]
  instance_id = ibm_resource_instance.test-pdns-instance.guid
  zone_id     = ibm_dns_zone.test-pdns-zone.zone_id
  type        = "TXT"
  name        = "testTXT"
  rdata       = "textinformation"
  ttl         = 1800
}

Expected Behavior

Apply Complete!

Actual Behavior

Error: Request JSON payload error: .name in body is a forbidden property

  on dns_test.tf line 996, in resource "ibm_dns_resource_record" "test-pdns-resource-record-ptr":
 90: resource "ibm_dns_resource_record" "test-pdns-resource-record-ptr" {

Steps to Reproduce

Please list the steps required to reproduce the issue, for example:

  1. terraform apply with ttl as 900
  2. Change ttl value from 900 to 1800 for each DNS Resource Record
  3. terraform apply
@sakthishanmugam2ibm
Copy link

PR raised: #1333
Issue is caused due to PTR record should not set any other field other than TTL; whereas in code [prior to fix], it sets name field as well.

hkantare pushed a commit that referenced this issue Apr 20, 2020
ibm_dns_resource_record Change of TTL has error .name in body is a forbidden property
#1331
@hkantare
Copy link
Collaborator

hkantare commented May 4, 2020

@sean-freeman
Copy link
Author

Confirmed fixed, tested on v1.5.2

Working configuration:

resource "ibm_resource_instance" "dns_services_instance" {
  name              = "dns-services-for-vpc"
  service           = "dns-svcs"
  plan              = "standard-dns"

  resource_group_id = ibm_resource_group.resource_group.id
  location          = "global"

  //User can increase timeouts
  timeouts {
    create = "15m"
    update = "15m"
    delete = "15m"
  }
}

resource "ibm_dns_zone" "dns_services_zone" {
  depends_on = [ibm_resource_instance.dns_services_instance]
  name        = "test.cloud"
  instance_id = ibm_resource_instance.dns_services_instance.guid
  description = "Test Cloud Private DNS Zone"
  label       = "dns_zone"
}

resource "ibm_dns_permitted_network" "dns_services_permitted_network" {
  depends_on = [ibm_dns_zone.dns_services_zone]
  instance_id = ibm_resource_instance.dns_services_instance.guid
  zone_id = ibm_dns_zone.dns_services_zone.zone_id
  vpc_crn = ibm_is_vpc.vpc.resource_crn
  type = "vpc"
}

# Create "A" (IPv4 Address) Resource Record to map IPv4 address as hostname / subdomain of the root domain name
# The input name becomes the "subdomain of the root domain"
resource "ibm_dns_resource_record" "dns_services_resource_record_a" {
  depends_on  = [ibm_dns_permitted_network.dns_services_permitted_network]
  instance_id = ibm_resource_instance.dns_services_instance.guid
  zone_id     = ibm_dns_zone.dns_services_zone.zone_id
  type        = "A"
  name        = ibm_is_instance.vsi.name // Use Host Name given to the VSI
  rdata       = ibm_is_instance.vsi.primary_network_interface[0].primary_ipv4_address
  ttl         = 1800
}

# Canonical Name (CNAME) - Provides a way to alias a hostname to another hostname or Canonical Name (CNAME)
# "An A, AAAA or CNAME record already exists with that host" will appear if the key name has a value equal to any A, AAAA or CNAME record that exists
resource "ibm_dns_resource_record" "dns_services_resource_record_cname" {
  depends_on  = [ibm_dns_resource_record.dns_services_resource_record_a]
  instance_id = ibm_resource_instance.dns_services_instance.guid
  zone_id     = ibm_dns_zone.dns_services_zone.zone_id
  type        = "CNAME"
  name        = "${ibm_is_instance.vsi.name}-short" // Create new Alias of the Host Name given to the VSI
  rdata       = "${ibm_is_instance.vsi.name}.${ibm_dns_zone.dns_services_zone.name}" // Is an Alias of the actual Host Name and Domain
  ttl         = 1800
}

# PTR (Pointer) - Enables reverse DNS lookup, from an IP address (IPv4 or IPv6) to a hostname
resource "ibm_dns_resource_record" "dns_services_resource_record_ptr" {
  depends_on  = [ibm_dns_resource_record.dns_services_resource_record_cname]
  instance_id = ibm_resource_instance.dns_services_instance.guid
  zone_id     = ibm_dns_zone.dns_services_zone.zone_id
  type        = "PTR"
  name        = ibm_is_instance.vsi.primary_network_interface[0].primary_ipv4_address
  rdata       = "${ibm_is_instance.vsi.name}.${ibm_dns_zone.dns_services_zone.name}"
  ttl         = 1800
}

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

3 participants