Skip to content

Commit

Permalink
Merge pull request #36934 from ddericco/f-vpc_dhcp_ipv6_options
Browse files Browse the repository at this point in the history
Add support for IPv6 DHCP Lease Time option
  • Loading branch information
jar-b committed Apr 16, 2024
2 parents db1d81a + 19d421c commit 3401119
Show file tree
Hide file tree
Showing 8 changed files with 67 additions and 30 deletions.
11 changes: 11 additions & 0 deletions .changelog/36934.txt
@@ -0,0 +1,11 @@
```release-note:enhancement
resource/aws_vpc_dhcp_options: Add `ipv6_address_preferred_lease_time` attribute
```

```release-note:enhancement
resource/aws_default_vpc_dhcp_options: Add `ipv6_address_preferred_lease_time` as Computed attribute
```

```release-note:enhancement
data/aws_vpc_dhcp_options: Add `ipv6_address_preferred_lease_time` attribute
```
5 changes: 5 additions & 0 deletions internal/service/ec2/vpc_default_vpc_dhcp_options.go
Expand Up @@ -38,6 +38,7 @@ func ResourceDefaultVPCDHCPOptions() *schema.Resource {
// Keep in sync with aws_vpc_dhcp_options' schema with the following changes:
// - domain_name is Computed-only
// - domain_name_servers is Computed-only and is TypeString
// - ipv6_address_preferred_lease_time is Computed-only and is TypeString
// - netbios_name_servers is Computed-only and is TypeString
// - netbios_node_type is Computed-only
// - ntp_servers is Computed-only and is TypeString
Expand All @@ -55,6 +56,10 @@ func ResourceDefaultVPCDHCPOptions() *schema.Resource {
Type: schema.TypeString,
Computed: true,
},
"ipv6_address_preferred_lease_time": {
Type: schema.TypeString,
Computed: true,
},
"netbios_name_servers": {
Type: schema.TypeString,
Computed: true,
Expand Down
27 changes: 17 additions & 10 deletions internal/service/ec2/vpc_dhcp_options.go
Expand Up @@ -46,34 +46,40 @@ func ResourceVPCDHCPOptions() *schema.Resource {
Type: schema.TypeString,
Optional: true,
ForceNew: true,
AtLeastOneOf: []string{"domain_name", "domain_name_servers", "netbios_name_servers", "netbios_node_type", "ntp_servers"},
AtLeastOneOf: []string{"domain_name", "domain_name_servers", "ipv6_address_preferred_lease_time", "netbios_name_servers", "netbios_node_type", "ntp_servers"},
},
"domain_name_servers": {
Type: schema.TypeList,
Optional: true,
ForceNew: true,
Elem: &schema.Schema{Type: schema.TypeString},
AtLeastOneOf: []string{"domain_name", "domain_name_servers", "netbios_name_servers", "netbios_node_type", "ntp_servers"},
AtLeastOneOf: []string{"domain_name", "domain_name_servers", "ipv6_address_preferred_lease_time", "netbios_name_servers", "netbios_node_type", "ntp_servers"},
},
"ipv6_address_preferred_lease_time": {
Type: schema.TypeString,
Optional: true,
ForceNew: true,
AtLeastOneOf: []string{"domain_name", "domain_name_servers", "ipv6_address_preferred_lease_time", "netbios_name_servers", "netbios_node_type", "ntp_servers"},
},
"netbios_name_servers": {
Type: schema.TypeList,
Optional: true,
ForceNew: true,
Elem: &schema.Schema{Type: schema.TypeString},
AtLeastOneOf: []string{"domain_name", "domain_name_servers", "netbios_name_servers", "netbios_node_type", "ntp_servers"},
AtLeastOneOf: []string{"domain_name", "domain_name_servers", "ipv6_address_preferred_lease_time", "netbios_name_servers", "netbios_node_type", "ntp_servers"},
},
"netbios_node_type": {
Type: schema.TypeString,
Optional: true,
ForceNew: true,
AtLeastOneOf: []string{"domain_name", "domain_name_servers", "netbios_name_servers", "netbios_node_type", "ntp_servers"},
AtLeastOneOf: []string{"domain_name", "domain_name_servers", "ipv6_address_preferred_lease_time", "netbios_name_servers", "netbios_node_type", "ntp_servers"},
},
"ntp_servers": {
Type: schema.TypeList,
Optional: true,
ForceNew: true,
Elem: &schema.Schema{Type: schema.TypeString},
AtLeastOneOf: []string{"domain_name", "domain_name_servers", "netbios_name_servers", "netbios_node_type", "ntp_servers"},
AtLeastOneOf: []string{"domain_name", "domain_name_servers", "ipv6_address_preferred_lease_time", "netbios_name_servers", "netbios_node_type", "ntp_servers"},
},
"owner_id": {
Type: schema.TypeString,
Expand All @@ -89,11 +95,12 @@ func ResourceVPCDHCPOptions() *schema.Resource {

var (
optionsMap = newDHCPOptionsMap(map[string]string{
"domain_name": "domain-name",
"domain_name_servers": "domain-name-servers",
"netbios_name_servers": "netbios-name-servers",
"netbios_node_type": "netbios-node-type",
"ntp_servers": "ntp-servers",
"domain_name": "domain-name",
"domain_name_servers": "domain-name-servers",
"ipv6_address_preferred_lease_time": "ipv6-address-preferred-lease-time",
"netbios_name_servers": "netbios-name-servers",
"netbios_node_type": "netbios-node-type",
"ntp_servers": "ntp-servers",
})
)

Expand Down
4 changes: 4 additions & 0 deletions internal/service/ec2/vpc_dhcp_options_data_source.go
Expand Up @@ -48,6 +48,10 @@ func DataSourceVPCDHCPOptions() *schema.Resource {
Elem: &schema.Schema{Type: schema.TypeString},
},
"filter": customFiltersSchema(),
"ipv6_address_preferred_lease_time": {
Type: schema.TypeString,
Computed: true,
},
"netbios_name_servers": {
Type: schema.TypeList,
Computed: true,
Expand Down
24 changes: 14 additions & 10 deletions internal/service/ec2/vpc_dhcp_options_data_source_test.go
Expand Up @@ -36,6 +36,7 @@ func TestAccVPCDHCPOptionsDataSource_basic(t *testing.T) {
resource.TestCheckResourceAttrPair(datasourceName, "domain_name_servers.#", resourceName, "domain_name_servers.#"),
resource.TestCheckResourceAttrPair(datasourceName, "domain_name_servers.0", resourceName, "domain_name_servers.0"),
resource.TestCheckResourceAttrPair(datasourceName, "domain_name_servers.1", resourceName, "domain_name_servers.1"),
resource.TestCheckResourceAttrPair(datasourceName, "ipv6_address_preferred_lease_time", resourceName, "ipv6_address_preferred_lease_time"),
resource.TestCheckResourceAttrPair(datasourceName, "netbios_name_servers.#", resourceName, "netbios_name_servers.#"),
resource.TestCheckResourceAttrPair(datasourceName, "netbios_name_servers.0", resourceName, "netbios_name_servers.0"),
resource.TestCheckResourceAttrPair(datasourceName, "netbios_node_type", resourceName, "netbios_node_type"),
Expand Down Expand Up @@ -70,6 +71,7 @@ func TestAccVPCDHCPOptionsDataSource_filter(t *testing.T) {
resource.TestCheckResourceAttrPair(datasourceName, "domain_name_servers.#", resourceName, "domain_name_servers.#"),
resource.TestCheckResourceAttrPair(datasourceName, "domain_name_servers.0", resourceName, "domain_name_servers.0"),
resource.TestCheckResourceAttrPair(datasourceName, "domain_name_servers.1", resourceName, "domain_name_servers.1"),
resource.TestCheckResourceAttrPair(datasourceName, "ipv6_address_preferred_lease_time", resourceName, "ipv6_address_preferred_lease_time"),
resource.TestCheckResourceAttrPair(datasourceName, "netbios_name_servers.#", resourceName, "netbios_name_servers.#"),
resource.TestCheckResourceAttrPair(datasourceName, "netbios_name_servers.0", resourceName, "netbios_name_servers.0"),
resource.TestCheckResourceAttrPair(datasourceName, "netbios_node_type", resourceName, "netbios_node_type"),
Expand Down Expand Up @@ -107,11 +109,12 @@ resource "aws_vpc_dhcp_options" "incorrect" {
}
resource "aws_vpc_dhcp_options" "test" {
domain_name = "service.consul"
domain_name_servers = ["127.0.0.1", "10.0.0.2"]
netbios_name_servers = ["127.0.0.1"]
netbios_node_type = 2
ntp_servers = ["127.0.0.1"]
domain_name = "service.consul"
domain_name_servers = ["127.0.0.1", "10.0.0.2"]
ipv6_address_preferred_lease_time = 3600
netbios_name_servers = ["127.0.0.1"]
netbios_node_type = 2
ntp_servers = ["127.0.0.1"]
tags = {
Name = "tf-acc-test"
Expand All @@ -132,11 +135,12 @@ resource "aws_vpc_dhcp_options" "incorrect" {
resource "aws_vpc_dhcp_options" "test" {
count = %[2]d
domain_name = "tf-acc-test-%[1]d.example.com"
domain_name_servers = ["127.0.0.1", "10.0.0.2"]
netbios_name_servers = ["127.0.0.1"]
netbios_node_type = 2
ntp_servers = ["127.0.0.1"]
domain_name = "tf-acc-test-%[1]d.example.com"
domain_name_servers = ["127.0.0.1", "10.0.0.2"]
ipv6_address_preferred_lease_time = 3600
netbios_name_servers = ["127.0.0.1"]
netbios_node_type = 2
ntp_servers = ["127.0.0.1"]
tags = {
Name = "tf-acc-test-%[1]d"
Expand Down
13 changes: 8 additions & 5 deletions internal/service/ec2/vpc_dhcp_options_test.go
Expand Up @@ -38,6 +38,7 @@ func TestAccVPCDHCPOptions_basic(t *testing.T) {
acctest.MatchResourceAttrRegionalARN(resourceName, "arn", "ec2", regexache.MustCompile(`dhcp-options/dopt-.+`)),
resource.TestCheckResourceAttr(resourceName, "domain_name", ""),
resource.TestCheckResourceAttr(resourceName, "domain_name_servers.#", "0"),
resource.TestCheckResourceAttr(resourceName, "ipv6_address_preferred_lease_time", ""),
resource.TestCheckResourceAttr(resourceName, "netbios_name_servers.#", "0"),
resource.TestCheckResourceAttr(resourceName, "netbios_node_type", "1"),
resource.TestCheckResourceAttr(resourceName, "ntp_servers.#", "0"),
Expand Down Expand Up @@ -76,6 +77,7 @@ func TestAccVPCDHCPOptions_full(t *testing.T) {
resource.TestCheckResourceAttr(resourceName, "domain_name_servers.#", "2"),
resource.TestCheckResourceAttr(resourceName, "domain_name_servers.0", "127.0.0.1"),
resource.TestCheckResourceAttr(resourceName, "domain_name_servers.1", "10.0.0.2"),
resource.TestCheckResourceAttr(resourceName, "ipv6_address_preferred_lease_time", "1440"),
resource.TestCheckResourceAttr(resourceName, "netbios_name_servers.#", "1"),
resource.TestCheckResourceAttr(resourceName, "netbios_name_servers.0", "127.0.0.1"),
resource.TestCheckResourceAttr(resourceName, "netbios_node_type", "2"),
Expand Down Expand Up @@ -223,11 +225,12 @@ resource "aws_vpc_dhcp_options" "test" {
func testAccVPCDHCPOptionsConfig_full(rName, domainName string) string {
return fmt.Sprintf(`
resource "aws_vpc_dhcp_options" "test" {
domain_name = %[2]q
domain_name_servers = ["127.0.0.1", "10.0.0.2"]
ntp_servers = ["127.0.0.1"]
netbios_name_servers = ["127.0.0.1"]
netbios_node_type = "2"
domain_name = %[2]q
domain_name_servers = ["127.0.0.1", "10.0.0.2"]
ipv6_address_preferred_lease_time = 1440
ntp_servers = ["127.0.0.1"]
netbios_name_servers = ["127.0.0.1"]
netbios_node_type = "2"
tags = {
Name = %[1]q
Expand Down
1 change: 1 addition & 0 deletions website/docs/d/vpc_dhcp_options.html.markdown
Expand Up @@ -57,6 +57,7 @@ This data source exports the following attributes in addition to the arguments a
* `domain_name` - Suffix domain name to used when resolving non Fully Qualified Domain NamesE.g., the `search` value in the `/etc/resolv.conf` file.
* `domain_name_servers` - List of name servers.
* `id` - EC2 DHCP Options ID
* `ipv6_address_preferred_lease_time` - How frequently, in seconds, a running instance with an IPv6 assigned to it goes through DHCPv6 lease renewal.
* `netbios_name_servers` - List of NETBIOS name servers.
* `netbios_node_type` - NetBIOS node type (1, 2, 4, or 8). For more information about these node types, see [RFC 2132](http://www.ietf.org/rfc/rfc2132.txt).
* `ntp_servers` - List of NTP servers.
Expand Down
12 changes: 7 additions & 5 deletions website/docs/r/vpc_dhcp_options.html.markdown
Expand Up @@ -24,11 +24,12 @@ Full usage:

```terraform
resource "aws_vpc_dhcp_options" "foo" {
domain_name = "service.consul"
domain_name_servers = ["127.0.0.1", "10.0.0.2"]
ntp_servers = ["127.0.0.1"]
netbios_name_servers = ["127.0.0.1"]
netbios_node_type = 2
domain_name = "service.consul"
domain_name_servers = ["127.0.0.1", "10.0.0.2"]
ipv6_address_preferred_lease_time = 1440
ntp_servers = ["127.0.0.1"]
netbios_name_servers = ["127.0.0.1"]
netbios_node_type = 2
tags = {
Name = "foo-name"
Expand All @@ -42,6 +43,7 @@ This resource supports the following arguments:

* `domain_name` - (Optional) the suffix domain name to use by default when resolving non Fully Qualified Domain Names. In other words, this is what ends up being the `search` value in the `/etc/resolv.conf` file.
* `domain_name_servers` - (Optional) List of name servers to configure in `/etc/resolv.conf`. If you want to use the default AWS nameservers you should set this to `AmazonProvidedDNS`.
* `ipv6_address_preferred_lease_time` - (Optional) How frequently, in seconds, a running instance with an IPv6 assigned to it goes through DHCPv6 lease renewal. Acceptable values are between 140 and 2147483647 (approximately 68 years). If no value is entered, the default lease time is 140 seconds. If you use long-term addressing for EC2 instances, you can increase the lease time and avoid frequent lease renewal requests. Lease renewal typically occurs when half of the lease time has elapsed.
* `ntp_servers` - (Optional) List of NTP servers to configure.
* `netbios_name_servers` - (Optional) List of NETBIOS name servers.
* `netbios_node_type` - (Optional) The NetBIOS node type (1, 2, 4, or 8). AWS recommends to specify 2 since broadcast and multicast are not supported in their network. For more information about these node types, see [RFC 2132](http://www.ietf.org/rfc/rfc2132.txt).
Expand Down

0 comments on commit 3401119

Please sign in to comment.