use of software.amazon.awssdk.services.ec2.model.Filter in project photon-model by vmware.
the class AWSInstanceContext method createSecurityGroupsIfNotExist.
/**
* When there are SecurityGroupStates for the new VM to be provisioned, for which there are no
* corresponding existing SecurityGroups in AWS, the missing SecurityGroups are created
*/
private DeferredResult<AWSInstanceContext> createSecurityGroupsIfNotExist(AWSInstanceContext context) {
if (context.nics.isEmpty()) {
return DeferredResult.completed(context);
}
List<DeferredResult<Void>> createSecurityGroupsDRs = new ArrayList<>();
AWSSecurityGroupClient sgClient = new AWSSecurityGroupClient(context.amazonEC2Client);
for (AWSNicContext nicCtx : context.nics) {
if (nicCtx.securityGroupStates == null) {
continue;
}
Collection<String> foundIds = nicCtx.securityGroupIds;
List<SecurityGroupState> missingSecurityGroupStates = nicCtx.securityGroupStates.stream().filter(sgState -> !foundIds.contains(sgState.id)).collect(Collectors.toList());
for (SecurityGroupState missingSGState : missingSecurityGroupStates) {
DeferredResult<Void> createSGWithRulesDR = createSecurityGroup(sgClient, context, nicCtx, missingSGState).thenCompose(ignore -> createIngressRules(context, nicCtx, missingSGState, sgClient)).thenCompose(ignore -> createEgressRules(context, nicCtx, missingSGState, sgClient)).thenApply(ignore -> (Void) null);
createSecurityGroupsDRs.add(createSGWithRulesDR);
}
}
return DeferredResult.allOf(createSecurityGroupsDRs).handle((all, exc) -> {
if (exc != null) {
String msg = String.format("Error creating SecurityGroups in AWS for [%s] VM.", context.child.name);
throw new IllegalStateException(msg, exc);
}
return context;
});
}
use of software.amazon.awssdk.services.ec2.model.Filter in project photon-model by vmware.
the class AWSInstanceContext method getVPCs.
/**
* For every NIC lookup associated AWS VPC as specified by
* {@code AWSNicContext.networkState.id}. If any of the VPCs is not found then complete with an
* exception.
*/
private DeferredResult<AWSInstanceContext> getVPCs(AWSInstanceContext context) {
if (context.nics.isEmpty()) {
return DeferredResult.completed(context);
}
List<DeferredResult<DescribeVpcsResult>> getVpcDRs = new ArrayList<>();
for (AWSNicContext nicCtx : context.nics) {
DescribeVpcsRequest vpcRequest = new DescribeVpcsRequest().withFilters(new Filter(AWS_VPC_ID_FILTER, singletonList(nicCtx.networkState.id)));
String msg = "Getting AWS VPC [" + nicCtx.networkState.id + "/" + nicCtx.networkState.name + "/" + "] for [" + nicCtx.nicStateWithDesc.name + "] NIC for [" + context.child.name + "] VM";
AWSDeferredResultAsyncHandler<DescribeVpcsRequest, DescribeVpcsResult> handler = new AWSDeferredResultAsyncHandler<DescribeVpcsRequest, DescribeVpcsResult>(this.service, msg) {
@Override
protected DeferredResult<DescribeVpcsResult> consumeSuccess(DescribeVpcsRequest request, DescribeVpcsResult result) {
if (result.getVpcs().isEmpty()) {
String msg = String.format("VPC with [%s] id is not found in AWS for [%s] NIC of [%s] VM.", nicCtx.networkState.id, nicCtx.nicStateWithDesc.name, context.child.name);
return DeferredResult.failed(new IllegalStateException(msg));
}
nicCtx.vpc = result.getVpcs().get(0);
return DeferredResult.completed(result);
}
};
context.amazonEC2Client.describeVpcsAsync(vpcRequest, handler);
getVpcDRs.add(handler.toDeferredResult());
}
return DeferredResult.allOf(getVpcDRs).handle((all, exc) -> {
if (exc != null) {
String msg = String.format("Error getting VPCs from AWS for [%s] VM.", context.child.name);
throw new IllegalStateException(msg, exc);
}
return context;
});
}
use of software.amazon.awssdk.services.ec2.model.Filter in project photon-model by vmware.
the class TestAWSSetupUtils method createSnapshot.
/**
* Creates a snapshot and return the snapshot id.
*/
public static String createSnapshot(VerificationHost host, AmazonEC2Client client, String volumeId) {
CreateSnapshotRequest req = new CreateSnapshotRequest().withVolumeId(volumeId);
CreateSnapshotResult res = client.createSnapshot(req);
String snapshotId = res.getSnapshot().getSnapshotId();
Filter filter = new Filter().withName(SNAPSHOT_ID_ATTRIBUTE).withValues(snapshotId);
DescribeSnapshotsRequest snapshotsRequest = new DescribeSnapshotsRequest().withSnapshotIds(snapshotId).withFilters(filter);
host.waitFor("Timeout waiting for creating snapshot", () -> {
DescribeSnapshotsResult snapshotsResult = client.describeSnapshots(snapshotsRequest);
String state = snapshotsResult.getSnapshots().get(0).getState();
if (state.equalsIgnoreCase(SNAPSHOT_STATUS_COMPLETE)) {
return true;
}
return false;
});
tagResources(client, Arrays.asList(snapshotId), TAG_KEY_FOR_TEST_RESOURCES, TAG_VALUE_FOR_TEST_RESOURCES + TAG_SNAPSHOT);
return snapshotId;
}
use of software.amazon.awssdk.services.ec2.model.Filter in project photon-model by vmware.
the class TestAWSSetupUtils method getEC2InstanceIdsAssociatedWithVpcId.
/**
* Get a list of all EC2 instance ids associated with a given VPC id.
*/
public static List<String> getEC2InstanceIdsAssociatedWithVpcId(AmazonEC2AsyncClient client, String vpcId) {
DescribeInstancesRequest req = new DescribeInstancesRequest();
if (vpcId != null) {
req.withFilters(new Filter(AWS_VPC_ID_FILTER, Collections.singletonList(vpcId)));
}
DescribeInstancesResult instancesResult = client.describeInstances(req);
return instancesResult == null ? Collections.emptyList() : instancesResult.getReservations().get(0).getInstances().stream().map(instance -> instance.getInstanceId()).collect(Collectors.toList());
}
use of software.amazon.awssdk.services.ec2.model.Filter in project photon-model by vmware.
the class TestAWSSetupUtils method getSecurityGroupsIdUsingEC2Client.
public static SecurityGroup getSecurityGroupsIdUsingEC2Client(AmazonEC2AsyncClient client, String awsGroupId) {
if (awsGroupId == null) {
return null;
}
DescribeSecurityGroupsRequest describeSGsRequest = new DescribeSecurityGroupsRequest().withFilters(new Filter(AWSConstants.AWS_GROUP_ID_FILTER, Collections.singletonList(awsGroupId)));
DescribeSecurityGroupsResult describeSGResult = client.describeSecurityGroups(describeSGsRequest);
if (describeSGResult.getSecurityGroups().size() > 0) {
return describeSGResult.getSecurityGroups().get(0);
} else {
return null;
}
}
Aggregations