use of com.amazonaws.services.ec2.model.Subnet in project herd by FINRAOS.
the class Ec2DaoImpl method getAvailabilityZonesForSubnetIds.
/**
* This implementation uses the DescribeAvailabilityZones API to get the list of AZs.
*/
@Override
public List<AvailabilityZone> getAvailabilityZonesForSubnetIds(Collection<Subnet> subnets, AwsParamsDto awsParamsDto) {
Set<String> zoneNames = new HashSet<>();
for (Subnet subnet : subnets) {
zoneNames.add(subnet.getAvailabilityZone());
}
AmazonEC2Client ec2Client = getEc2Client(awsParamsDto);
DescribeAvailabilityZonesRequest describeAvailabilityZonesRequest = new DescribeAvailabilityZonesRequest();
describeAvailabilityZonesRequest.setZoneNames(zoneNames);
DescribeAvailabilityZonesResult describeAvailabilityZonesResult = ec2Operations.describeAvailabilityZones(ec2Client, describeAvailabilityZonesRequest);
return describeAvailabilityZonesResult.getAvailabilityZones();
}
use of com.amazonaws.services.ec2.model.Subnet in project photon-model by vmware.
the class AWSUtils method createSecurityGroupOnDefaultVPC.
// method create a security group in the VPC from custom properties or the default VPC
private static String createSecurityGroupOnDefaultVPC(AWSInstanceContext aws) {
String vpcId = null;
// get the subnet cidr (if any)
String subnetCidr = null;
// in case subnet will be obtained from the default vpc, the security group should
// as well be created there
Vpc defaultVPC = getDefaultVPC(aws);
if (defaultVPC != null) {
vpcId = defaultVPC.getVpcId();
subnetCidr = defaultVPC.getCidrBlock();
}
// no subnet or no vpc is not an option...
if (subnetCidr == null || vpcId == null) {
throw new AmazonServiceException("default VPC not found");
}
return new AWSSecurityGroupClient(aws.amazonEC2Client).createDefaultSecurityGroupWithDefaultRules(defaultVPC);
}
use of com.amazonaws.services.ec2.model.Subnet in project photon-model by vmware.
the class AWSNetworkStateEnumerationAdapterService method createTags.
/**
* Gets the Networks and Subnets tags information and creates TagState for each tag
*/
private void createTags(AWSNetworkStateCreationContext context, AWSNetworkStateCreationStage next) {
// Collect all tags in a List
List<Tag> allNetworkAndSubnetsTags = context.awsVpcs.values().stream().filter(vpc -> !context.localNetworkStateMap.containsKey(vpc.getVpcId())).flatMap(vpc -> vpc.getTags().stream()).collect(Collectors.toList());
allNetworkAndSubnetsTags.addAll(context.awsSubnets.values().stream().filter(subnet -> !context.localSubnetStateMap.containsKey(subnet.getSubnetId())).flatMap(subnet -> subnet.getTags().stream()).collect(Collectors.toList()));
// POST each of the tags. If a tag exists it won't be created again. We don't want the name
// tags, so filter them out
List<Operation> operations = new ArrayList<>();
Map<Long, Tag> tagsCreationOperationIdsMap = new ConcurrentHashMap<>();
allNetworkAndSubnetsTags.stream().filter(t -> !AWSConstants.AWS_TAG_NAME.equals(t.getKey())).forEach(t -> {
TagState tagState = newTagState(t.getKey(), t.getValue(), true, context.request.tenantLinks);
Operation createTagOp = Operation.createPost(this, TagService.FACTORY_LINK).setBody(tagState);
operations.add(createTagOp);
tagsCreationOperationIdsMap.put(createTagOp.getId(), t);
});
if (operations.isEmpty()) {
context.networkCreationStage = next;
handleNetworkStateChanges(context);
} else {
OperationJoin.create(operations).setCompletion((ops, exs) -> {
if (exs != null && !exs.isEmpty()) {
this.logWarning("Failure creating external tags for network and subnets: %s", exs.get(0).getMessage());
}
ops.values().stream().filter(operation -> operation.getStatusCode() == Operation.STATUS_CODE_OK || operation.getStatusCode() == Operation.STATUS_CODE_NOT_MODIFIED).forEach(operation -> {
if (tagsCreationOperationIdsMap.containsKey(operation.getId())) {
context.createdExternalTags.add(tagsCreationOperationIdsMap.get(operation.getId()));
}
});
context.networkCreationStage = next;
handleNetworkStateChanges(context);
}).sendWith(this);
}
}
use of com.amazonaws.services.ec2.model.Subnet in project photon-model by vmware.
the class AWSNetworkStateEnumerationAdapterService method createSubnetStateOperations.
/**
* Create the subnet state operations for all the Subnets that need to be created or updated in
* the system.
*/
private void createSubnetStateOperations(AWSNetworkStateCreationContext context, AWSNetworkStateCreationStage next) {
if (context.subnets.isEmpty()) {
logFine(() -> "No new subnets found.");
handleNetworkStateChanges(context, next);
return;
}
final List<Operation> subnetOperations = new ArrayList<>();
for (String remoteSubnetId : context.subnets.keySet()) {
SubnetStateWithParentVpcId subnetStateWithParentVpcId = context.subnets.get(remoteSubnetId);
SubnetState subnetState = subnetStateWithParentVpcId.subnetState;
// Update networkLink with "latest" (either created or updated)
// NetworkState.documentSelfLink
subnetState.networkLink = context.vpcs.get(subnetStateWithParentVpcId.parentVpcId).documentSelfLink;
final Operation subnetStateOp;
if (context.localSubnetStateMap.containsKey(remoteSubnetId)) {
// If the local subnet state already exists for the Subnet -> Update it.
subnetState.documentSelfLink = context.localSubnetStateMap.get(remoteSubnetId).documentSelfLink;
// for already existing subnets, add internal tags only if missing
if (subnetState.tagLinks == null || subnetState.tagLinks.isEmpty()) {
setTagLinksToResourceState(subnetState, context.subnetInternalTagsMap, false);
} else {
context.subnetInternalTagLinksSet.stream().filter(tagLink -> !subnetState.tagLinks.contains(tagLink)).map(tagLink -> subnetState.tagLinks.add(tagLink)).collect(Collectors.toSet());
}
subnetStateOp = createPatchOperation(this, subnetState, subnetState.documentSelfLink);
} else {
// add tag links
Subnet awsSubnet = context.awsSubnets.get(remoteSubnetId);
setResourceTags(subnetState, awsSubnet.getTags());
setTagLinksToResourceState(subnetState, context.subnetInternalTagsMap, false);
subnetStateOp = createPostOperation(this, subnetState, SubnetService.FACTORY_LINK);
}
subnetOperations.add(subnetStateOp);
}
JoinedCompletionHandler joinCompletion = (ops, excs) -> {
if (excs != null) {
Entry<Long, Throwable> excEntry = excs.entrySet().iterator().next();
Throwable exc = excEntry.getValue();
Operation op = ops.get(excEntry.getKey());
logSevere(() -> String.format("Error %s-ing a Subnet state: %s", op.getAction(), Utils.toString(excs)));
finishWithFailure(context, exc);
return;
}
logFine(() -> "Successfully created/updated all subnet states.");
ops.values().stream().filter(op -> op.getStatusCode() != Operation.STATUS_CODE_NOT_MODIFIED).forEach(op -> {
SubnetState subnetState = op.getBody(SubnetState.class);
context.subnets.get(subnetState.id).subnetState = subnetState;
});
handleNetworkStateChanges(context, next);
};
OperationJoin.create(subnetOperations).setCompletion(joinCompletion).sendWith(this);
}
use of com.amazonaws.services.ec2.model.Subnet in project photon-model by vmware.
the class AWSRemoteCleanup method deleteSubnets.
private void deleteSubnets(String vpcId, AmazonEC2 usEastEc2Client) {
DescribeSubnetsRequest subnetsRequest = new DescribeSubnetsRequest().withFilters(new Filter(VPC_KEY, Collections.singletonList(vpcId)));
DescribeSubnetsResult securityGroupsResult = usEastEc2Client.describeSubnets(subnetsRequest);
securityGroupsResult.getSubnets().forEach(subnet -> {
DeleteSubnetRequest deleteSubnetRequest = new DeleteSubnetRequest().withSubnetId(subnet.getSubnetId());
this.host.log("Terminating stale subnet: %s", subnet.getSubnetId());
usEastEc2Client.deleteSubnet(deleteSubnetRequest);
});
}
Aggregations