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

ec2: Remove remaining empty validation #22948

Merged
merged 7 commits into from
Feb 4, 2022
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.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
15 changes: 15 additions & 0 deletions .changelog/22948.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
```release-note:breaking-change
resource/aws_default_vpc: `ipv6_cidr_block` can no longer be set to `""`; remove or set to `null`
```

```release-note:breaking-change
resource/aws_instance: `private_ip` can no longer be set to `""`; remove or set to `null`
```

```release-note:breaking-change
resource/aws_vpc_ipv6_cidr_block_association: `ipv6_cidr_block` can no longer be set to `""`; remove or set to `null`
```

```release-note:breaking-change
resource/aws_vpc: `ipv6_cidr_block` can no longer be set to `""`; remove or set to `null`
```
9 changes: 3 additions & 6 deletions internal/service/ec2/default_vpc.go
Original file line number Diff line number Diff line change
Expand Up @@ -113,12 +113,9 @@ func ResourceDefaultVPC() *schema.Resource {
Computed: true,
ConflictsWith: []string{"ipv6_netmask_length", "assign_generated_ipv6_cidr_block"},
RequiredWith: []string{"ipv6_ipam_pool_id"},
ValidateFunc: validation.Any(
validation.StringIsEmpty,
validation.All(
verify.ValidIPv6CIDRNetworkAddress,
validation.IsCIDRNetwork(VPCCIDRMaxIPv6, VPCCIDRMaxIPv6)),
),
ValidateFunc: validation.All(
verify.ValidIPv6CIDRNetworkAddress,
validation.IsCIDRNetwork(VPCCIDRMaxIPv6, VPCCIDRMaxIPv6)),
},
"ipv6_cidr_block_network_border_group": {
Type: schema.TypeString,
Expand Down
13 changes: 5 additions & 8 deletions internal/service/ec2/instance.go
Original file line number Diff line number Diff line change
Expand Up @@ -440,14 +440,11 @@ func ResourceInstance() *schema.Resource {
Computed: true,
},
"private_ip": {
Type: schema.TypeString,
Optional: true,
ForceNew: true,
Computed: true,
ValidateFunc: validation.Any(
validation.StringIsEmpty,
validation.IsIPv4Address,
),
Type: schema.TypeString,
Optional: true,
ForceNew: true,
Computed: true,
ValidateFunc: validation.IsIPv4Address,
},
"public_dns": {
Type: schema.TypeString,
Expand Down
52 changes: 41 additions & 11 deletions internal/service/ec2/instance_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -2285,7 +2285,7 @@ func TestAccEC2Instance_NewNetworkInterface_emptyPrivateIPAndSecondaryPrivateIPs
CheckDestroy: testAccCheckInstanceDestroy,
Steps: []resource.TestStep{
{
Config: testAccInstanceConfigPrivateIPAndSecondaryIPs(rName, "", secondaryIPs),
Config: testAccInstanceConfigPrivateIPAndSecondaryIPsNullPrivate(rName, secondaryIPs),
Check: resource.ComposeTestCheckFunc(
testAccCheckInstanceExists(resourceName, &v),
resource.TestCheckResourceAttrSet(resourceName, "private_ip"),
Expand Down Expand Up @@ -2316,23 +2316,23 @@ func TestAccEC2Instance_NewNetworkInterface_emptyPrivateIPAndSecondaryPrivateIPs
CheckDestroy: testAccCheckInstanceDestroy,
Steps: []resource.TestStep{
{
Config: testAccInstanceConfigPrivateIPAndSecondaryIPs(rName, "", secondaryIPs),
Config: testAccInstanceConfigPrivateIPAndSecondaryIPsNullPrivate(rName, secondaryIPs),
Check: resource.ComposeTestCheckFunc(
testAccCheckInstanceExists(resourceName, &v),
resource.TestCheckResourceAttrSet(resourceName, "private_ip"),
resource.TestCheckResourceAttr(resourceName, "secondary_private_ips.#", "2"),
),
},
{
Config: testAccInstanceConfigPrivateIPAndSecondaryIPs(rName, "", ""),
Config: testAccInstanceConfigPrivateIPAndSecondaryIPsNullPrivate(rName, ""),
Check: resource.ComposeTestCheckFunc(
testAccCheckInstanceExists(resourceName, &v),
resource.TestCheckResourceAttrSet(resourceName, "private_ip"),
resource.TestCheckResourceAttr(resourceName, "secondary_private_ips.#", "0"),
),
},
{
Config: testAccInstanceConfigPrivateIPAndSecondaryIPs(rName, "", secondaryIP),
Config: testAccInstanceConfigPrivateIPAndSecondaryIPsNullPrivate(rName, secondaryIP),
Check: resource.ComposeTestCheckFunc(
testAccCheckInstanceExists(resourceName, &v),
resource.TestCheckResourceAttrSet(resourceName, "private_ip"),
Expand Down Expand Up @@ -4044,7 +4044,7 @@ func defaultSubnetCount(t *testing.T) int {
func testAccAvailableAZsWavelengthZonesExcludeConfig(excludeZoneIds ...string) string {
return fmt.Sprintf(`
data "aws_availability_zones" "available" {
exclude_zone_ids = ["%[1]s"]
exclude_zone_ids = [%[1]q]
state = "available"

filter {
Expand Down Expand Up @@ -5334,7 +5334,7 @@ resource "aws_instance" "test" {
ami = data.aws_ami.amzn-ami-minimal-hvm-ebs.id
instance_type = "t2.micro"
subnet_id = aws_subnet.test.id
private_ip = ""
private_ip = null
}
`)
}
Expand Down Expand Up @@ -5743,8 +5743,8 @@ func testAccInstanceConfigPublicAndPrivateSecondaryIPs(rName string, isPublic bo
fmt.Sprintf(`
resource "aws_security_group" "test" {
vpc_id = aws_vpc.test.id
description = "%[1]s"
name = "%[1]s"
description = %[1]q
name = %[1]q
}

resource "aws_instance" "test" {
Expand Down Expand Up @@ -5774,16 +5774,16 @@ func testAccInstanceConfigPrivateIPAndSecondaryIPs(rName, privateIP, secondaryIP
fmt.Sprintf(`
resource "aws_security_group" "test" {
vpc_id = aws_vpc.test.id
description = "%[1]s"
name = "%[1]s"
description = %[1]q
name = %[1]q
}

resource "aws_instance" "test" {
ami = data.aws_ami.amzn-ami-minimal-hvm-ebs.id
instance_type = "t3.small"
subnet_id = aws_subnet.test.id

private_ip = "%[2]s"
private_ip = %[2]q
secondary_private_ips = [%[3]s]

vpc_security_group_ids = [
Expand All @@ -5797,6 +5797,36 @@ resource "aws_instance" "test" {
`, rName, privateIP, secondaryIPs))
}

func testAccInstanceConfigPrivateIPAndSecondaryIPsNullPrivate(rName, secondaryIPs string) string {
return acctest.ConfigCompose(
acctest.ConfigLatestAmazonLinuxHvmEbsAmi(),
testAccInstanceVPCConfig(rName, false),
fmt.Sprintf(`
resource "aws_security_group" "test" {
vpc_id = aws_vpc.test.id
description = %[1]q
name = %[1]q
}

resource "aws_instance" "test" {
ami = data.aws_ami.amzn-ami-minimal-hvm-ebs.id
instance_type = "t3.small"
subnet_id = aws_subnet.test.id

private_ip = null
secondary_private_ips = [%[2]s]

vpc_security_group_ids = [
aws_security_group.test.id
]

tags = {
Name = %[1]q
}
}
`, rName, secondaryIPs))
}

func testAccInstanceConfig_associatePublic_defaultPrivate(rName string) string {
return acctest.ConfigCompose(
acctest.ConfigLatestAmazonLinuxHvmEbsAmi(),
Expand Down
9 changes: 3 additions & 6 deletions internal/service/ec2/vpc.go
Original file line number Diff line number Diff line change
Expand Up @@ -130,12 +130,9 @@ func ResourceVPC() *schema.Resource {
Computed: true,
ConflictsWith: []string{"ipv6_netmask_length", "assign_generated_ipv6_cidr_block"},
RequiredWith: []string{"ipv6_ipam_pool_id"},
ValidateFunc: validation.Any(
validation.StringIsEmpty,
validation.All(
verify.ValidIPv6CIDRNetworkAddress,
validation.IsCIDRNetwork(VPCCIDRMaxIPv6, VPCCIDRMaxIPv6)),
),
ValidateFunc: validation.All(
verify.ValidIPv6CIDRNetworkAddress,
validation.IsCIDRNetwork(VPCCIDRMaxIPv6, VPCCIDRMaxIPv6)),
},
"ipv6_cidr_block_network_border_group": {
Type: schema.TypeString,
Expand Down
9 changes: 3 additions & 6 deletions internal/service/ec2/vpc_ipv6_cidr_block_association.go
Original file line number Diff line number Diff line change
Expand Up @@ -42,12 +42,9 @@ func ResourceVPCIPv6CIDRBlockAssociation() *schema.Resource {
Optional: true,
Computed: true,
ForceNew: true,
ValidateFunc: validation.Any(
validation.StringIsEmpty,
validation.All(
verify.ValidIPv6CIDRNetworkAddress,
validation.IsCIDRNetwork(VPCCIDRMaxIPv6, VPCCIDRMaxIPv6)),
),
ValidateFunc: validation.All(
verify.ValidIPv6CIDRNetworkAddress,
validation.IsCIDRNetwork(VPCCIDRMaxIPv6, VPCCIDRMaxIPv6)),
},
// ipam parameters are not required by the API but other usage mechanisms are not implemented yet. TODO ipv6 options:
// --amazon-provided-ipv6-cidr-block
Expand Down
Loading