use of software.amazon.awssdk.services.ec2.model.Filter in project photon-model by vmware.
the class AWSUtils method getResourceTags.
/*
* Return the tags for a giving resource
*/
public static List<TagDescription> getResourceTags(String resourceID, AmazonEC2AsyncClient client) {
Filter resource = new Filter().withName(AWS_FILTER_RESOURCE_ID).withValues(resourceID);
DescribeTagsRequest req = new DescribeTagsRequest().withFilters(resource);
DescribeTagsResult result = client.describeTags(req);
return result.getTags();
}
use of software.amazon.awssdk.services.ec2.model.Filter in project photon-model by vmware.
the class AWSNetworkStateEnumerationAdapterService method getMainRouteTableInformation.
/**
* Gets the main route table information associated with a VPC that is being mapped to a network
* state in the system. *
*/
private void getMainRouteTableInformation(AWSNetworkStateCreationContext context, AWSNetworkStateCreationStage next) {
DescribeRouteTablesRequest routeTablesRequest = new DescribeRouteTablesRequest();
List<String> vpcList = new ArrayList<>(context.vpcs.keySet());
// build filter list
List<Filter> filters = new ArrayList<>();
filters.add(new Filter(AWS_FILTER_VPC_ID, vpcList));
filters.add(AWSUtils.getFilter(AWS_MAIN_ROUTE_ASSOCIATION, "true"));
AWSMainRouteTableAsyncHandler asyncHandler = new AWSMainRouteTableAsyncHandler(next, context);
context.amazonEC2Client.describeRouteTablesAsync(routeTablesRequest, asyncHandler);
}
use of software.amazon.awssdk.services.ec2.model.Filter 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 software.amazon.awssdk.services.ec2.model.Filter 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 software.amazon.awssdk.services.ec2.model.Filter in project photon-model by vmware.
the class AWSRemoteCleanup method deleteNATGateway.
private void deleteNATGateway(String vpcId, AmazonEC2 usEastEc2Client) {
DescribeNatGatewaysRequest natGatewaysRequest = new DescribeNatGatewaysRequest().withFilter(new Filter(VPC_KEY, Collections.singletonList(vpcId)));
DescribeNatGatewaysResult natGatewaysResult = usEastEc2Client.describeNatGateways(natGatewaysRequest);
natGatewaysResult.getNatGateways().forEach(natGateway -> {
DeleteNatGatewayRequest deleteNatGatewayRequest = new DeleteNatGatewayRequest().withNatGatewayId(natGateway.getNatGatewayId());
this.host.log("Terminating stale NAT gateway: %s", natGateway.getNatGatewayId());
usEastEc2Client.deleteNatGateway(deleteNatGatewayRequest);
});
}
Aggregations