-
Notifications
You must be signed in to change notification settings - Fork 9.6k
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Merge pull request #11505 from ewbankkit/aws_vpc_peering_connection_a…
…ccepter-resource provider/aws: Add 'aws_vpc_peering_connection_accepter' resource
- Loading branch information
Showing
6 changed files
with
287 additions
and
19 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
76 changes: 76 additions & 0 deletions
76
builtin/providers/aws/resource_aws_vpc_peering_connection_accepter.go
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,76 @@ | ||
package aws | ||
|
||
import ( | ||
"errors" | ||
"log" | ||
|
||
"fmt" | ||
|
||
"github.com/hashicorp/terraform/helper/schema" | ||
) | ||
|
||
func resourceAwsVpcPeeringConnectionAccepter() *schema.Resource { | ||
return &schema.Resource{ | ||
Create: resourceAwsVPCPeeringAccepterCreate, | ||
Read: resourceAwsVPCPeeringRead, | ||
Update: resourceAwsVPCPeeringUpdate, | ||
Delete: resourceAwsVPCPeeringAccepterDelete, | ||
|
||
Schema: map[string]*schema.Schema{ | ||
"vpc_peering_connection_id": &schema.Schema{ | ||
Type: schema.TypeString, | ||
Required: true, | ||
ForceNew: true, | ||
Computed: false, | ||
}, | ||
"auto_accept": { | ||
Type: schema.TypeBool, | ||
Optional: true, | ||
}, | ||
"accept_status": { | ||
Type: schema.TypeString, | ||
Computed: true, | ||
}, | ||
"vpc_id": { | ||
Type: schema.TypeString, | ||
Computed: true, | ||
}, | ||
"peer_vpc_id": { | ||
Type: schema.TypeString, | ||
Computed: true, | ||
}, | ||
"peer_owner_id": { | ||
Type: schema.TypeString, | ||
Computed: true, | ||
}, | ||
"accepter": vpcPeeringConnectionOptionsSchema(), | ||
"requester": vpcPeeringConnectionOptionsSchema(), | ||
"tags": tagsSchema(), | ||
}, | ||
} | ||
} | ||
|
||
func resourceAwsVPCPeeringAccepterCreate(d *schema.ResourceData, meta interface{}) error { | ||
id := d.Get("vpc_peering_connection_id").(string) | ||
d.SetId(id) | ||
|
||
if err := resourceAwsVPCPeeringRead(d, meta); err != nil { | ||
return err | ||
} | ||
if d.Id() == "" { | ||
return fmt.Errorf("VPC Peering Connection %q not found", id) | ||
} | ||
|
||
// Ensure that this IS as cross-account VPC peering connection. | ||
if d.Get("peer_owner_id").(string) == meta.(*AWSClient).accountid { | ||
return errors.New("aws_vpc_peering_connection_accepter can only adopt into management cross-account VPC peering connections") | ||
} | ||
|
||
return resourceAwsVPCPeeringUpdate(d, meta) | ||
} | ||
|
||
func resourceAwsVPCPeeringAccepterDelete(d *schema.ResourceData, meta interface{}) error { | ||
log.Printf("[WARN] Will not delete VPC peering connection. Terraform will remove this resource from the state file, however resources may remain.") | ||
d.SetId("") | ||
return nil | ||
} |
78 changes: 78 additions & 0 deletions
78
builtin/providers/aws/resource_aws_vpc_peering_connection_accepter_test.go
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,78 @@ | ||
// make testacc TEST=./builtin/providers/aws/ TESTARGS='-run=TestAccAwsVPCPeeringConnectionAccepter_' | ||
package aws | ||
|
||
import ( | ||
"regexp" | ||
"testing" | ||
|
||
"github.com/hashicorp/terraform/helper/resource" | ||
"github.com/hashicorp/terraform/terraform" | ||
) | ||
|
||
func TestAccAwsVPCPeeringConnectionAccepter_sameAccount(t *testing.T) { | ||
resource.Test(t, resource.TestCase{ | ||
PreCheck: func() { testAccPreCheck(t) }, | ||
Providers: testAccProviders, | ||
CheckDestroy: testAccAwsVPCPeeringConnectionAccepterDestroy, | ||
Steps: []resource.TestStep{ | ||
resource.TestStep{ | ||
Config: testAccAwsVPCPeeringConnectionAccepterSameAccountConfig, | ||
ExpectError: regexp.MustCompile(`aws_vpc_peering_connection_accepter can only adopt into management cross-account VPC peering connections`), | ||
}, | ||
}, | ||
}) | ||
} | ||
|
||
func testAccAwsVPCPeeringConnectionAccepterDestroy(s *terraform.State) error { | ||
// We don't destroy the underlying VPC Peering Connection. | ||
return nil | ||
} | ||
|
||
const testAccAwsVPCPeeringConnectionAccepterSameAccountConfig = ` | ||
provider "aws" { | ||
region = "us-west-2" | ||
// Requester's credentials. | ||
} | ||
provider "aws" { | ||
alias = "peer" | ||
region = "us-west-2" | ||
// Accepter's credentials. | ||
} | ||
resource "aws_vpc" "main" { | ||
cidr_block = "10.0.0.0/16" | ||
} | ||
resource "aws_vpc" "peer" { | ||
provider = "aws.peer" | ||
cidr_block = "10.1.0.0/16" | ||
} | ||
data "aws_caller_identity" "peer" { | ||
provider = "aws.peer" | ||
} | ||
// Requester's side of the connection. | ||
resource "aws_vpc_peering_connection" "peer" { | ||
vpc_id = "${aws_vpc.main.id}" | ||
peer_vpc_id = "${aws_vpc.peer.id}" | ||
peer_owner_id = "${data.aws_caller_identity.peer.account_id}" | ||
auto_accept = false | ||
tags { | ||
Side = "Requester" | ||
} | ||
} | ||
// Accepter's side of the connection. | ||
resource "aws_vpc_peering_connection_accepter" "peer" { | ||
provider = "aws.peer" | ||
vpc_peering_connection_id = "${aws_vpc_peering_connection.peer.id}" | ||
auto_accept = true | ||
tags { | ||
Side = "Accepter" | ||
} | ||
} | ||
` |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
105 changes: 105 additions & 0 deletions
105
website/source/docs/providers/aws/r/vpc_peering_accepter.html.markdown
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,105 @@ | ||
--- | ||
layout: "aws" | ||
page_title: "AWS: aws_vpc_peering_connection_accepter" | ||
sidebar_current: "docs-aws-resource-vpc-peering-accepter" | ||
description: |- | ||
Manage the accepter's side of a cross-account VPC Peering Connection. | ||
--- | ||
|
||
# aws\_vpc\_peering\_connection\_accepter | ||
|
||
Provides a resource to manage the accepter's side of a cross-account VPC Peering Connection. | ||
|
||
When a cross-account (requester's AWS account differs from the accepter's AWS account) VPC Peering Connection | ||
is created, a VPC Peering Connection resource is automatically created in the accepter's account. | ||
The requester can use the `aws_vpc_peering_connection` resource to manage its side of the connection | ||
and the accepter can use the `aws_vpc_peering_connection_accepter` resource to "adopt" its side of the | ||
connection into management. | ||
|
||
## Example Usage | ||
|
||
``` | ||
provider "aws" { | ||
// Requester's credentials. | ||
} | ||
provider "aws" { | ||
alias = "peer" | ||
// Accepter's credentials. | ||
} | ||
resource "aws_vpc" "main" { | ||
cidr_block = "10.0.0.0/16" | ||
} | ||
resource "aws_vpc" "peer" { | ||
provider = "aws.peer" | ||
cidr_block = "10.1.0.0/16" | ||
} | ||
data "aws_caller_identity" "peer" { | ||
provider = "aws.peer" | ||
} | ||
// Requester's side of the connection. | ||
resource "aws_vpc_peering_connection" "peer" { | ||
vpc_id = "${aws_vpc.main.id}" | ||
peer_vpc_id = "${aws_vpc.peer.id}" | ||
peer_owner_id = "${data.aws_caller_identity.peer.account_id}" | ||
auto_accept = false | ||
tags { | ||
Side = "Requester" | ||
} | ||
} | ||
// Accepter's side of the connection. | ||
resource "aws_vpc_peering_connection_accepter" "peer" { | ||
provider = "aws.peer" | ||
vpc_peering_connection_id = "${aws_vpc_peering_connection.peer.id}" | ||
auto_accept = true | ||
tags { | ||
Side = "Accepter" | ||
} | ||
} | ||
``` | ||
|
||
## Argument Reference | ||
|
||
The following arguments are supported: | ||
|
||
* `vpc_peering_connection_id` - (Required) The VPC Peering Connection ID to manage. | ||
* `auto_accept` - (Optional) Whether or not to accept the peering request. Defaults to `false`. | ||
* `tags` - (Optional) A mapping of tags to assign to the resource. | ||
|
||
### Removing `aws_vpc_peering_connection_accepter` from your configuration | ||
|
||
AWS allows a cross-account VPC Peering Connection to be deleted from either the requester's or accepter's side. | ||
However, Terraform only allows the VPC Peering Connection to be deleted from the requester's side | ||
by removing the corresponding `aws_vpc_peering_connection` resource from your configuration. | ||
Removing a `aws_vpc_peering_connection_accepter` resource from your configuration will remove it | ||
from your statefile and management, **but will not destroy the VPC Peering Connection.** | ||
|
||
## Attributes Reference | ||
|
||
All of the argument attributes except `auto_accept` are also exported as result attributes. | ||
|
||
* `id` - The ID of the VPC Peering Connection. | ||
* `accept_status` - The status of the VPC Peering Connection request. | ||
* `vpc_id` - The ID of the accepter VPC. | ||
* `peer_vpc_id` - The ID of the requester VPC. | ||
* `peer_owner_id` - The AWS account ID of the owner of the requester VPC. | ||
* `accepter` - A configuration block that describes [VPC Peering Connection] | ||
(http://docs.aws.amazon.com/AmazonVPC/latest/PeeringGuide) options set for the accepter VPC. | ||
* `requester` - A configuration block that describes [VPC Peering Connection] | ||
(http://docs.aws.amazon.com/AmazonVPC/latest/PeeringGuide) options set for the requester VPC. | ||
|
||
#### Accepter and Requester Attributes Reference | ||
|
||
* `allow_remote_vpc_dns_resolution` - Indicates whether a local VPC can resolve public DNS hostnames to | ||
private IP addresses when queried from instances in a peer VPC. | ||
* `allow_classic_link_to_remote_vpc` - Indicates whether a local ClassicLink connection can communicate | ||
with the peer VPC over the VPC Peering Connection. | ||
* `allow_vpc_to_remote_classic_link` - Indicates whether a local VPC can communicate with a ClassicLink | ||
connection in the peer VPC over the VPC Peering Connection. |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters