Skip to content

Commit 4c01b2e

Browse files
authored
fix(is_vpc): added an empty check for dns binding id (IBM-Cloud#6307)
* fix(is_vpc): added an empty check for dns binding id * Added acceptance test
1 parent 9da2a63 commit 4c01b2e

File tree

2 files changed

+182
-1
lines changed

2 files changed

+182
-1
lines changed

ibm/service/vpc/resource_ibm_is_vpc.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1458,7 +1458,7 @@ func vpcUpdate(context context.Context, d *schema.ResourceData, meta interface{}
14581458
}
14591459
if d.HasChange("dns.0.resolver") {
14601460
_, newResolver := d.GetChange("dns.0.resolver")
1461-
if d.HasChange("dns.0.resolver.0.dns_binding_name") && (d.Get("dns.0.resolver.0.dns_binding_name").(string) != "null" || d.Get("dns.0.resolver.0.dns_binding_name").(string) != "") {
1461+
if d.HasChange("dns.0.resolver.0.dns_binding_name") && (d.Get("dns.0.resolver.0.dns_binding_id") != nil && d.Get("dns.0.resolver.0.dns_binding_id").(string) != "") && (d.Get("dns.0.resolver.0.dns_binding_name").(string) != "null" || d.Get("dns.0.resolver.0.dns_binding_name").(string) != "") {
14621462
dnsBindingName := d.Get("dns.0.resolver.0.dns_binding_name").(string)
14631463
dnsBindingId := d.Get("dns.0.resolver.0.dns_binding_id").(string)
14641464
vpcdnsResolutionBindingPatch := &vpcv1.VpcdnsResolutionBindingPatch{

ibm/service/vpc/resource_ibm_is_vpc_test.go

Lines changed: 181 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1734,3 +1734,184 @@ func testAccCheckIBMISVPCCustomResolverDelegatedWithNameVPCCrnConfig(vpcname1, v
17341734
}
17351735
`, vpcname1, acc.ISZoneName, acc.ISZoneName, vpcname2, dnsName)
17361736
}
1737+
1738+
func TestAccIBMISVPC_DnsResolverUpdate(t *testing.T) {
1739+
var hubVpc, delegatedVpc string
1740+
hubVpcName := fmt.Sprintf("test-vpc-hub-%d", acctest.RandIntRange(10, 100))
1741+
delegatedVpcName := fmt.Sprintf("test-vpc-spoke-%d", acctest.RandIntRange(10, 100))
1742+
dnsInstanceName := fmt.Sprintf("dns-cr-instance-%d", acctest.RandIntRange(10, 100))
1743+
customResolverName := fmt.Sprintf("test-hub-true-customresolver-%d", acctest.RandIntRange(10, 100))
1744+
region := acc.ISZoneName[:len(acc.ISZoneName)-2] // Extract region from zone
1745+
1746+
resource.Test(t, resource.TestCase{
1747+
PreCheck: func() { acc.TestAccPreCheck(t) },
1748+
Providers: acc.TestAccProviders,
1749+
CheckDestroy: testAccCheckIBMISVPCDestroy,
1750+
Steps: []resource.TestStep{
1751+
{
1752+
Config: testAccCheckIBMISVPCDnsResolverSystemConfig(hubVpcName, delegatedVpcName, dnsInstanceName, customResolverName, region),
1753+
Check: resource.ComposeTestCheckFunc(
1754+
testAccCheckIBMISVPCExists("ibm_is_vpc.hub_true", hubVpc),
1755+
testAccCheckIBMISVPCExists("ibm_is_vpc.hub_false_delegated", delegatedVpc),
1756+
resource.TestCheckResourceAttr("ibm_is_vpc.hub_true", "name", hubVpcName),
1757+
resource.TestCheckResourceAttr("ibm_is_vpc.hub_true", "dns.0.enable_hub", "true"),
1758+
resource.TestCheckResourceAttr("ibm_is_vpc.hub_false_delegated", "name", delegatedVpcName),
1759+
resource.TestCheckResourceAttr("ibm_is_vpc.hub_false_delegated", "dns.0.enable_hub", "false"),
1760+
resource.TestCheckResourceAttr("ibm_is_vpc.hub_false_delegated", "dns.0.resolver.0.type", "system"),
1761+
resource.TestCheckResourceAttrSet("ibm_dns_custom_resolver.test_hub_true", "id"),
1762+
resource.TestCheckResourceAttr("ibm_dns_custom_resolver.test_hub_true", "name", customResolverName),
1763+
resource.TestCheckResourceAttr("ibm_dns_custom_resolver.test_hub_true", "enabled", "true"),
1764+
resource.TestCheckResourceAttr("ibm_dns_custom_resolver.test_hub_true", "high_availability", "true"),
1765+
),
1766+
},
1767+
{
1768+
Config: testAccCheckIBMISVPCDnsResolverDelegatedConfig(hubVpcName, delegatedVpcName, dnsInstanceName, customResolverName, region),
1769+
Check: resource.ComposeTestCheckFunc(
1770+
testAccCheckIBMISVPCExists("ibm_is_vpc.hub_true", hubVpc),
1771+
testAccCheckIBMISVPCExists("ibm_is_vpc.hub_false_delegated", delegatedVpc),
1772+
resource.TestCheckResourceAttr("ibm_is_vpc.hub_true", "name", hubVpcName),
1773+
resource.TestCheckResourceAttr("ibm_is_vpc.hub_true", "dns.0.enable_hub", "true"),
1774+
resource.TestCheckResourceAttr("ibm_is_vpc.hub_false_delegated", "name", delegatedVpcName),
1775+
resource.TestCheckResourceAttr("ibm_is_vpc.hub_false_delegated", "dns.0.enable_hub", "false"),
1776+
resource.TestCheckResourceAttr("ibm_is_vpc.hub_false_delegated", "dns.0.resolver.0.type", "delegated"),
1777+
resource.TestCheckResourceAttr("ibm_is_vpc.hub_false_delegated", "dns.0.resolver.0.dns_binding_name", "test-dns-binding"),
1778+
resource.TestCheckResourceAttrPair("ibm_is_vpc.hub_false_delegated", "dns.0.resolver.0.vpc_crn", "ibm_is_vpc.hub_true", "crn"),
1779+
resource.TestCheckResourceAttrSet("ibm_dns_custom_resolver.test_hub_true", "id"),
1780+
resource.TestCheckResourceAttr("ibm_dns_custom_resolver.test_hub_true", "name", customResolverName),
1781+
resource.TestCheckResourceAttr("ibm_dns_custom_resolver.test_hub_true", "enabled", "true"),
1782+
resource.TestCheckResourceAttr("ibm_dns_custom_resolver.test_hub_true", "high_availability", "true"),
1783+
),
1784+
},
1785+
},
1786+
})
1787+
}
1788+
1789+
func testAccCheckIBMISVPCDnsResolverSystemConfig(hubVpcName, delegatedVpcName, dnsInstanceName, customResolverName, region string) string {
1790+
return fmt.Sprintf(`
1791+
data "ibm_resource_group" "rg" {
1792+
is_default = true
1793+
}
1794+
1795+
resource "ibm_is_vpc" "hub_true" {
1796+
name = "%s"
1797+
dns {
1798+
enable_hub = true
1799+
}
1800+
}
1801+
1802+
resource "ibm_is_subnet" "hub_true_sub1" {
1803+
name = "hub-true-subnet1"
1804+
vpc = ibm_is_vpc.hub_true.id
1805+
zone = "%s-1"
1806+
total_ipv4_address_count = 16
1807+
}
1808+
1809+
resource "ibm_is_subnet" "hub_true_sub2" {
1810+
name = "hub-true-subnet2"
1811+
vpc = ibm_is_vpc.hub_true.id
1812+
zone = "%s-1"
1813+
total_ipv4_address_count = 16
1814+
}
1815+
1816+
resource "ibm_resource_instance" "dns-cr-instance" {
1817+
name = "%s"
1818+
resource_group_id = data.ibm_resource_group.rg.id
1819+
location = "global"
1820+
service = "dns-svcs"
1821+
plan = "standard-dns"
1822+
}
1823+
1824+
resource "ibm_dns_custom_resolver" "test_hub_true" {
1825+
name = "%s"
1826+
instance_id = ibm_resource_instance.dns-cr-instance.guid
1827+
description = "new test CR - TF"
1828+
high_availability = true
1829+
enabled = true
1830+
locations {
1831+
subnet_crn = ibm_is_subnet.hub_true_sub1.crn
1832+
enabled = true
1833+
}
1834+
locations {
1835+
subnet_crn = ibm_is_subnet.hub_true_sub2.crn
1836+
enabled = true
1837+
}
1838+
}
1839+
1840+
resource "ibm_is_vpc" "hub_false_delegated" {
1841+
depends_on = [ibm_dns_custom_resolver.test_hub_true]
1842+
name = "%s"
1843+
dns {
1844+
enable_hub = false
1845+
resolver {
1846+
type = "system"
1847+
}
1848+
}
1849+
}
1850+
`, hubVpcName, region, region, dnsInstanceName, customResolverName, delegatedVpcName)
1851+
}
1852+
1853+
func testAccCheckIBMISVPCDnsResolverDelegatedConfig(hubVpcName, delegatedVpcName, dnsInstanceName, customResolverName, region string) string {
1854+
return fmt.Sprintf(`
1855+
data "ibm_resource_group" "rg" {
1856+
is_default = true
1857+
}
1858+
1859+
resource "ibm_is_vpc" "hub_true" {
1860+
name = "%s"
1861+
dns {
1862+
enable_hub = true
1863+
}
1864+
}
1865+
1866+
resource "ibm_is_subnet" "hub_true_sub1" {
1867+
name = "hub-true-subnet1"
1868+
vpc = ibm_is_vpc.hub_true.id
1869+
zone = "%s-1"
1870+
total_ipv4_address_count = 16
1871+
}
1872+
1873+
resource "ibm_is_subnet" "hub_true_sub2" {
1874+
name = "hub-true-subnet2"
1875+
vpc = ibm_is_vpc.hub_true.id
1876+
zone = "%s-1"
1877+
total_ipv4_address_count = 16
1878+
}
1879+
1880+
resource "ibm_resource_instance" "dns-cr-instance" {
1881+
name = "%s"
1882+
resource_group_id = data.ibm_resource_group.rg.id
1883+
location = "global"
1884+
service = "dns-svcs"
1885+
plan = "standard-dns"
1886+
}
1887+
1888+
resource "ibm_dns_custom_resolver" "test_hub_true" {
1889+
name = "%s"
1890+
instance_id = ibm_resource_instance.dns-cr-instance.guid
1891+
description = "new test CR - TF"
1892+
high_availability = true
1893+
enabled = true
1894+
locations {
1895+
subnet_crn = ibm_is_subnet.hub_true_sub1.crn
1896+
enabled = true
1897+
}
1898+
locations {
1899+
subnet_crn = ibm_is_subnet.hub_true_sub2.crn
1900+
enabled = true
1901+
}
1902+
}
1903+
1904+
resource "ibm_is_vpc" "hub_false_delegated" {
1905+
depends_on = [ibm_dns_custom_resolver.test_hub_true]
1906+
name = "%s"
1907+
dns {
1908+
enable_hub = false
1909+
resolver {
1910+
type = "delegated"
1911+
dns_binding_name = "test-dns-binding"
1912+
vpc_crn = ibm_is_vpc.hub_true.crn
1913+
}
1914+
}
1915+
}
1916+
`, hubVpcName, region, region, dnsInstanceName, customResolverName, delegatedVpcName)
1917+
}

0 commit comments

Comments
 (0)