/** * Update the Internet gateway information for the VPC in question. For the list of Internet * gateways received based on the vpc filter work through the list of attachments and VPCs * and update the Internet gateway information in the network state that maps to the VPC. */ @Override protected void consumeSuccess(DescribeInternetGatewaysRequest request, DescribeInternetGatewaysResult result) { for (InternetGateway resultGateway : result.getInternetGateways()) { for (InternetGatewayAttachment attachment : resultGateway.getAttachments()) { if (this.context.vpcs.containsKey(attachment.getVpcId())) { NetworkState networkStateToUpdate = this.context.vpcs .get(attachment.getVpcId()); networkStateToUpdate.customProperties.put(AWS_GATEWAY_ID, resultGateway.getInternetGatewayId()); this.context.vpcs.put(attachment.getVpcId(), networkStateToUpdate); } } } }
private void validateExistingIGW(AwsNetworkView awsNetworkView, AmazonEC2Client amazonEC2Client) { if (awsNetworkView.isExistingIGW()) { DescribeInternetGatewaysRequest describeInternetGatewaysRequest = new DescribeInternetGatewaysRequest(); describeInternetGatewaysRequest.withInternetGatewayIds(awsNetworkView.getExistingIGW()); DescribeInternetGatewaysResult describeInternetGatewaysResult = amazonEC2Client.describeInternetGateways(describeInternetGatewaysRequest); if (describeInternetGatewaysResult.getInternetGateways().size() < 1) { throw new CloudConnectorException(String.format(IGW_DOES_NOT_EXIST_MSG, awsNetworkView.getExistingIGW())); } else { InternetGateway internetGateway = describeInternetGatewaysResult.getInternetGateways().get(0); InternetGatewayAttachment attachment = internetGateway.getAttachments().get(0); if (attachment != null && !attachment.getVpcId().equals(awsNetworkView.getExistingVPC())) { throw new CloudConnectorException(String.format(IGWVPC_DOES_NOT_EXIST_MSG, awsNetworkView.getExistingIGW(), awsNetworkView.getExistingVPC())); } } } }
@Test public void testEnvironmentCreation() throws Throwable { boolean attached = false; String gatewayID = this.netClient.createInternetGateway(); assertTrue(gatewayID != null); String vpcID = this.netClient.createVPC(AWS_DEFAULT_SUBNET_CIDR); assertTrue(vpcID != null); String subnetID = this.netClient.createSubnet(AWS_DEFAULT_SUBNET_CIDR, vpcID).getSubnetId(); this.netClient.attachInternetGateway(vpcID, gatewayID); InternetGateway gw = this.netClient.getInternetGateway(gatewayID); List<InternetGatewayAttachment> attachments = gw.getAttachments(); // ensure we are attached to newly created vpc for (InternetGatewayAttachment attachment : attachments) { if (attachment.getVpcId().equalsIgnoreCase(vpcID)) { attached = true; break; } } assertTrue(attached); RouteTable routeTable = this.netClient.getMainRouteTable(vpcID); this.netClient.createInternetRoute(gatewayID, routeTable.getRouteTableId(), "0.0.0.0/0"); //remove resources this.netClient.detachInternetGateway(vpcID, gatewayID); this.netClient.deleteInternetGateway(gatewayID); this.netClient.deleteSubnet(subnetID); this.netClient.deleteVPC(vpcID); }
@Override public CloudGateWays gateways(CloudCredential cloudCredential, Region region, Map<String, String> filters) throws Exception { AmazonEC2Client ec2Client = awsClient.createAccess(cloudCredential); Map<String, Set<CloudGateWay>> resultCloudGateWayMap = new HashMap<>(); CloudRegions regions = regions(cloudCredential, region, filters); for (Map.Entry<Region, List<AvailabilityZone>> regionListEntry : regions.getCloudRegions().entrySet()) { if (region == null || Strings.isNullOrEmpty(region.value()) || regionListEntry.getKey().value().equals(region.value())) { ec2Client.setRegion(RegionUtils.getRegion(regionListEntry.getKey().value())); DescribeInternetGatewaysRequest describeInternetGatewaysRequest = new DescribeInternetGatewaysRequest(); DescribeInternetGatewaysResult describeInternetGatewaysResult = ec2Client.describeInternetGateways(describeInternetGatewaysRequest); Set<CloudGateWay> gateWays = new HashSet<>(); for (InternetGateway internetGateway : describeInternetGatewaysResult.getInternetGateways()) { CloudGateWay cloudGateWay = new CloudGateWay(); cloudGateWay.setId(internetGateway.getInternetGatewayId()); cloudGateWay.setName(internetGateway.getInternetGatewayId()); List<String> vpcs = new ArrayList<>(); for (InternetGatewayAttachment internetGatewayAttachment : internetGateway.getAttachments()) { vpcs.add(internetGatewayAttachment.getVpcId()); } Map<String, Object> properties = new HashMap<>(); properties.put("attachment", vpcs); cloudGateWay.setProperties(properties); gateWays.add(cloudGateWay); } for (AvailabilityZone availabilityZone : regionListEntry.getValue()) { resultCloudGateWayMap.put(availabilityZone.value(), gateWays); } } } return new CloudGateWays(resultCloudGateWayMap); }
@Override public List<InternetGatewayAttachment> getAttachments() { return (List<InternetGatewayAttachment>) resource.getAttribute("Attachments"); }
/** * Gets the value of the Attachments attribute. If this resource is not yet * loaded, a call to {@code load()} is made to retrieve the value of the * attribute. */ List<InternetGatewayAttachment> getAttachments();