// VPCStateRefreshFunc returns a resource.StateRefreshFunc that is used to watch // a VPC. func VPCStateRefreshFunc(conn *ec2.EC2, id string) resource.StateRefreshFunc { return func() (interface{}, string, error) { DescribeVpcOpts := &ec2.DescribeVpcsInput{ VpcIds: []*string{aws.String(id)}, } resp, err := conn.DescribeVpcs(DescribeVpcOpts) if err != nil { if ec2err, ok := err.(awserr.Error); ok && ec2err.Code() == "InvalidVpcID.NotFound" { resp = nil } else { log.Printf("Error on VPCStateRefresh: %s", err) return nil, "", err } } if resp == nil { // Sometimes AWS just has consistency issues and doesn't see // our instance yet. Return an empty state. return nil, "", nil } vpc := resp.Vpcs[0] return vpc, *vpc.State, nil } }
// Get all of the VPCs configured in the environment func getAllVPCs(ec2client *ec2.EC2) ([]*ec2.Vpc, error) { //Get all of the VPCs vpcs, err := ec2client.DescribeVpcs(&ec2.DescribeVpcsInput{}) //If we had an error, return it if err != nil { return []*ec2.Vpc{}, err } //Otherwise, return all of our VPCs return vpcs.Vpcs, nil }
func processVpcs(svc *ec2.EC2, pageSize int64, apply func([]*string)) { vpcsOut, err := svc.DescribeVpcs(&ec2.DescribeVpcsInput{}) kingpin.FatalIfError(err, "Could not retrieve EC2 VPCs") var vpcIds []*string for _, vpc := range vpcsOut.Vpcs { vpcIds = append(vpcIds, vpc.VpcId) } apply(vpcIds) }
func findVPCsByDHCPOptionsID(conn *ec2.EC2, id string) ([]*ec2.Vpc, error) { req := &ec2.DescribeVpcsInput{ Filters: []*ec2.Filter{ &ec2.Filter{ Name: aws.String("dhcp-options-id"), Values: []*string{ aws.String(id), }, }, }, } resp, err := conn.DescribeVpcs(req) if err != nil { if ec2err, ok := err.(awserr.Error); ok && ec2err.Code() == "InvalidVpcID.NotFound" { return nil, nil } return nil, err } return resp.Vpcs, nil }
func verifyAndCreateVPC(c *ec2.EC2, config *Config) error { dvi := &ec2.DescribeVpcsInput{} dvo, err := c.DescribeVpcs(dvi) if err != nil { return err } vpc := &ec2.Vpc{} vpcexists := false for i := range dvo.Vpcs { if *dvo.Vpcs[i].CidrBlock == config.VPC { vpc = dvo.Vpcs[i] vpcexists = true config.VpcId = *dvo.Vpcs[i].VpcId //fmt.Println("VPC already exists.") } } if vpcexists { err = createSecurityGroups(c, config) if err != nil { fmt.Println("Failed to create security groups.") panic(err) } /* sgids := getSecurityGroupIds(c,config, err = applySecurityGroups(c, config) if err != nil { fmt.Println("Failed to apply security groups.") panic(err) } */ dsi := &ec2.DescribeSubnetsInput{} dso, err := c.DescribeSubnets(dsi) if err != nil { panic(err) } haspriv := false haspub := false for i := range dso.Subnets { if *dso.Subnets[i].CidrBlock == config.PublicNet { //fmt.Println("Subnet for public VPC already exists.") config.PublicSubnetId = *dso.Subnets[i].SubnetId haspub = true continue } if *dso.Subnets[i].CidrBlock == config.PrivateNet { //fmt.Println("Subnet for private VPC already exists.") config.PrivateSubnetId = *dso.Subnets[i].SubnetId haspriv = true continue } } if haspub && haspriv { return nil } cso1, cso2, err := createSubnets(c, config) if err != nil { panic(err) } config.PublicSubnetId = *cso1.Subnet.SubnetId config.PrivateSubnetId = *cso2.Subnet.SubnetId _, err = createPrivateRouteTable(c, config) if err != nil { panic(err) } return createGateway(c, vpc, cso1.Subnet.SubnetId) } cvi := &ec2.CreateVpcInput{CidrBlock: &config.VPC} cvo, err := c.CreateVpc(cvi) if err != nil { return err } config.VpcId = *cvo.Vpc.VpcId fmt.Println("Created new VPC: " + config.VpcId) //fmt.Println(cvo) err = createSecurityGroups(c, config) if err != nil { fmt.Println("Failed to create security groups.") panic(err) } /* err = applySecurityGroups(c, config) if err != nil { fmt.Println("Failed to apply security groups.") panic(err) } */ cso1, cso2, err := createSubnets(c, config) config.PublicSubnetId = *cso1.Subnet.SubnetId config.PrivateSubnetId = *cso2.Subnet.SubnetId _, err = createPrivateRouteTable(c, config) if err != nil { panic(err) } return createGateway(c, cvo.Vpc, cso1.Subnet.SubnetId) }