From e864e0870ec9a7bb889c379dad6c3e4ca55ae7b3 Mon Sep 17 00:00:00 2001 From: Roberto Jung Drebes Date: Sat, 15 Dec 2018 21:10:17 +0100 Subject: [PATCH] terraform: DNS private managed_zones outbound forwarding --- products/dns/api.yaml | 21 +++++++++++++++++++ products/dns/terraform.yaml | 4 ++-- .../examples/dns_managed_zone_private.tf.erb | 9 ++++++++ .../resource_dns_managed_zone_test.go.erb | 17 +++++++++++---- 4 files changed, 45 insertions(+), 6 deletions(-) diff --git a/products/dns/api.yaml b/products/dns/api.yaml index d1bafd7e214c..45677220b91c 100644 --- a/products/dns/api.yaml +++ b/products/dns/api.yaml @@ -128,6 +128,27 @@ objects: This should be formatted like https://www.googleapis.com/compute/v1/projects/{project}/global/networks/{network} min_version: beta + - !ruby/object:Api::Type::NestedObject + name: 'forwardingConfig' + description: | + The presence for this field indicates that outbound forwarding is enabled + for this zone. The value of this field contains the set of destinations + to forward to. + update_verb: :PATCH + update_url: 'projects/{{project}}/managedZones/{{name}}' + properties: + - !ruby/object:Api::Type::Array + name: 'targetNameServers' + description: | + List of target name servers to forward to. Cloud DNS will + select the best available name server if more than + one target is given. + item_type: !ruby/object:Api::Type::NestedObject + properties: + - !ruby/object:Api::Type::String + name: 'ipv4Address' + description: 'IPv4 address of a target name server.' + min_version: beta references: !ruby/object:Api::Resource::ReferenceLinks guides: 'Managing Zones': diff --git a/products/dns/terraform.yaml b/products/dns/terraform.yaml index ea75a60e4dd4..9aeccd99e6e9 100644 --- a/products/dns/terraform.yaml +++ b/products/dns/terraform.yaml @@ -46,8 +46,6 @@ overrides: !ruby/object:Provider::ResourceOverrides func(v interface{}) int { raw := v.(map[string]interface{}) if url, ok := raw["network_url"]; ok { - log.Printf("[DEBUG] URL %s", url) - log.Printf("[DEBUG] URL hash %d", selfLinkNameHash(url)) return selfLinkNameHash(url) } var buf bytes.Buffer @@ -56,6 +54,8 @@ overrides: !ruby/object:Provider::ResourceOverrides } privateVisibilityConfig.networks.networkUrl: !ruby/object:Provider::Terraform::PropertyOverride diff_suppress_func: 'compareSelfLinkOrResourceName' + forwardingConfig.targetNameServers: !ruby/object:Provider::Terraform::PropertyOverride + is_set: true ResourceRecordSet: !ruby/object:Provider::Terraform::ResourceOverride exclude: true Project: !ruby/object:Provider::Terraform::ResourceOverride diff --git a/templates/terraform/examples/dns_managed_zone_private.tf.erb b/templates/terraform/examples/dns_managed_zone_private.tf.erb index 31eb167efd5a..f8c2587cb5eb 100644 --- a/templates/terraform/examples/dns_managed_zone_private.tf.erb +++ b/templates/terraform/examples/dns_managed_zone_private.tf.erb @@ -17,6 +17,15 @@ resource "google_dns_managed_zone" "<%= ctx[:primary_resource_id] %>" { } } + forwarding_config { + target_name_servers { + ipv4_address = "172.16.1.10" + } + target_name_servers { + ipv4_address = "172.16.1.20" + } + } + } resource "google_compute_network" "network-1" { diff --git a/third_party/terraform/tests/resource_dns_managed_zone_test.go.erb b/third_party/terraform/tests/resource_dns_managed_zone_test.go.erb index 66b55689a13a..c8fd667c4fda 100644 --- a/third_party/terraform/tests/resource_dns_managed_zone_test.go.erb +++ b/third_party/terraform/tests/resource_dns_managed_zone_test.go.erb @@ -51,7 +51,7 @@ func TestAccDnsManagedZone_privateUpdate(t *testing.T) { CheckDestroy: testAccCheckDnsManagedZoneDestroy, Steps: []resource.TestStep{ resource.TestStep{ - Config: testAccDnsManagedZone_privateUpdate(zoneSuffix, "network-1", "network-2"), + Config: testAccDnsManagedZone_privateUpdate(zoneSuffix, "network-1", "network-2", "172.16.1.10", "172.16.1.20"), }, resource.TestStep{ ResourceName: "google_dns_managed_zone.private", @@ -59,7 +59,7 @@ func TestAccDnsManagedZone_privateUpdate(t *testing.T) { ImportStateVerify: true, }, resource.TestStep{ - Config: testAccDnsManagedZone_privateUpdate(zoneSuffix, "network-2", "network-3"), + Config: testAccDnsManagedZone_privateUpdate(zoneSuffix, "network-1", "network-3", "172.16.1.10", "192.168.1.1"), }, resource.TestStep{ ResourceName: "google_dns_managed_zone.private", @@ -84,7 +84,7 @@ resource "google_dns_managed_zone" "foobar" { } <% unless version.nil? || version == 'ga' -%> -func testAccDnsManagedZone_privateUpdate(suffix, first_network, second_network string) string { +func testAccDnsManagedZone_privateUpdate(suffix, first_network, second_network, first_nameserver, second_nameserver string) string { return fmt.Sprintf(` resource "google_dns_managed_zone" "private" { name = "private-zone-%s" @@ -99,6 +99,15 @@ resource "google_dns_managed_zone" "private" { network_url = "${google_compute_network.%s.self_link}" } } + + forwarding_config { + target_name_servers { + ipv4_address = "%s" + } + target_name_servers { + ipv4_address = "%s" + } + } } resource "google_compute_network" "network-1" { @@ -114,7 +123,7 @@ resource "google_compute_network" "network-2" { resource "google_compute_network" "network-3" { name = "network-3-%s" auto_create_subnetworks = false -}`, suffix, first_network, second_network, suffix, suffix, suffix) +}`, suffix, first_network, second_network, first_nameserver, second_nameserver, suffix, suffix, suffix) } <% end -%>