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

Add support for IPv6 DHCP Lease Time option #36934

Merged
merged 6 commits into from Apr 16, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
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