use of com.amazonaws.services.ec2.model.Vpc in project photon-model by vmware.
the class TestAWSEnumerationTask method testEnumeration.
// Runs the enumeration task on the AWS endpoint to list all the instances on the endpoint.
@Test
public void testEnumeration() throws Throwable {
this.host.log("Running test: " + this.currentTestName.getMethodName());
ComputeState vmState = createAWSVMResource(this.host, this.computeHost, this.endpointState, TestAWSSetupUtils.class, zoneId, regionId, null, this.singleNicSpec, this.awsTestContext);
if (this.isMock) {
// Just make a call to the enumeration service and make sure that the adapter patches
// the parent with completion.
enumerateResources(this.host, this.computeHost, this.endpointState, this.isMock, TEST_CASE_MOCK_MODE);
return;
}
// Overriding the page size to test the pagination logic with limited instances on AWS.
// This is a functional test
// so the latency numbers maybe higher from this test due to low page size.
setQueryPageSize(DEFAULT_TEST_PAGE_SIZE);
setQueryResultLimit(DEFAULT_TEST_PAGE_SIZE);
// Provision a single VM . Check initial state.
vmState = provisionMachine(this.host, vmState, this.isMock, this.instancesToCleanUp);
queryComputeInstances(this.host, count2);
queryDocumentsAndAssertExpectedCount(this.host, count2, ComputeDescriptionService.FACTORY_LINK, false);
if (ENABLE_LOAD_BALANCER_ENUMERATION) {
this.lbToCleanUp = provisionAWSLoadBalancerWithEC2Client(this.host, this.lbClient, null, this.subnetId, this.securityGroupId, Collections.singletonList(vmState.id));
}
// CREATION directly on AWS
List<String> instanceIdsToDeleteFirstTime = provisionAWSVMWithEC2Client(this.client, this.host, count4, T2_MICRO_INSTANCE_TYPE, this.subnetId, this.securityGroupId);
List<String> instanceIds = provisionAWSVMWithEC2Client(this.client, this.host, count1, instanceType, this.subnetId, this.securityGroupId);
instanceIdsToDeleteFirstTime.addAll(instanceIds);
this.instancesToCleanUp.addAll(instanceIdsToDeleteFirstTime);
waitForProvisioningToComplete(instanceIdsToDeleteFirstTime, this.host, this.client, ZERO);
// Xenon does not know about the new instances.
ProvisioningUtils.queryComputeInstances(this.host, count2);
// Create S3 bucket on amazon
Map<String, String> tags = new HashMap<>();
tags.put(S3_TAG_KEY_1, S3_TAG_VALUE_1);
tags.put(S3_TAG_KEY_2, S3_TAG_VALUE_2);
createS3BucketAndTags(tags);
this.bucketToBeDeleted = TEST_BUCKET_NAME;
enumerateResources(this.host, this.computeHost, this.endpointState, this.isMock, TEST_CASE_INITIAL);
// Get a count of how many EBS disks are attached to a VM initially.
ComputeState csForDiskLinkValidation = getComputeStateFromId(this.instancesToCleanUp.get(0));
this.initialEbsDiskLinkCount = csForDiskLinkValidation.diskLinks.size();
// Create a volume to be attached to the VM later.
CreateVolumeRequest createVolumeRequest = new CreateVolumeRequest().withAvailabilityZone(csForDiskLinkValidation.zoneId).withVolumeType(VolumeType.Gp2).withSize(10);
CreateVolumeResult createVolumeResult = this.client.createVolume(createVolumeRequest);
this.testEbsId = createVolumeResult.getVolume().getVolumeId();
// Validate if the S3 bucket is enumerated.
validateS3Enumeration(count1, count3);
// Validate S3 tag state count.
validateS3TagStatesCreated();
if (ENABLE_LOAD_BALANCER_ENUMERATION) {
// Validate Load Balancer State
validateLoadBalancerState(this.lbToCleanUp, vmState.documentSelfLink);
}
// Remove a tag from test S3 bucket.
tags.clear();
tags.put(S3_TAG_KEY_1, S3_TAG_VALUE_1);
createS3BucketAndTags(tags);
// 5 new resources should be discovered. Mapping to 2 new compute description and 5 new
// compute states.
// Even though the "t2.micro" is common to the VM provisioned from Xenon
// service and the one directly provisioned on EC2, there is no Compute description
// linking of discovered resources to user defined compute descriptions. So a new system
// generated compute description will be created for "t2.micro"
queryDocumentsAndAssertExpectedCount(this.host, count4, ComputeDescriptionService.FACTORY_LINK, false);
queryDocumentsAndAssertExpectedCount(this.host, count7, ComputeService.FACTORY_LINK, false);
queryDocumentsAndAssertExpectedCount(this.host, count7, DiskService.FACTORY_LINK, false);
// Validate at least 4 availability zones were enumerated
ProvisioningUtils.queryComputeInstancesByType(this.host, count4, ComputeType.ZONE.toString(), false);
// Update Scenario : Check that the tag information is present for the VM tagged above.
String vpCId = validateTagAndNetworkAndComputeDescriptionInformation(vmState);
validateVPCInformation(vpCId);
// Count should be 1 NICs per discovered VM.
int totalNetworkInterfaceStateCount = count6 * this.singleNicSpec.numberOfNics();
validateNetworkInterfaceCount(totalNetworkInterfaceStateCount);
// One VPC should be discovered in the test.
queryDocumentsAndAssertExpectedCount(this.host, count1, NetworkService.FACTORY_LINK, false);
// Verify that the SecurityGroups of the newly created VM has been enumerated and exists
// locally
validateSecurityGroupsInformation(vmState.groupLinks);
// Verify stop flow
// The first instance of instanceIdsToDeleteFirstTime will be stopped.
String instanceIdsToStop = instanceIdsToDeleteFirstTime.get(0);
tagResourcesWithName(this.client, VM_STOPPED_NAME, instanceIdsToStop);
// Stop one instance
stopVMsUsingEC2Client(this.client, this.host, new ArrayList<>(Arrays.asList(instanceIdsToStop)));
// Create stale resources, that later should be deleted by the enumeration
String staleSubnetDocumentSelfLink = markFirstResourceStateAsStale(host, SubnetState.class, SubnetService.FACTORY_LINK);
String staleNetworkDocumentSelfLink = markFirstResourceStateAsStale(host, NetworkState.class, NetworkService.FACTORY_LINK);
// During the enumeration, if one instance is stopped, its public ip address
// will disappear, then the corresponding link of local ComputeState's public
// network interface and its document will be removed.
enumerateResources(this.host, this.computeHost, this.endpointState, this.isMock, TEST_CASE_STOP_VM);
// Validate that test VM still has same number of diskLinks.
csForDiskLinkValidation = getComputeStateFromId(this.instancesToCleanUp.get(0));
assertEquals(csForDiskLinkValidation.diskLinks.size(), this.initialEbsDiskLinkCount);
// Attach volume to test VM.
AttachVolumeRequest attachVolumeRequest = new AttachVolumeRequest().withVolumeId(createVolumeResult.getVolume().getVolumeId()).withInstanceId(csForDiskLinkValidation.id).withDevice("/dev/sdh");
this.client.attachVolume(attachVolumeRequest);
// Validate stale resources have been deleted
validateStaleResourceStateDeletion(staleSubnetDocumentSelfLink, staleNetworkDocumentSelfLink);
// After two enumeration cycles, validate that we did not create duplicate documents for existing
// S3 bucket and validate that we did not add duplicate tagLink in diskState and removed the tagLink
// for tag deleted from AWS.
validateS3Enumeration(count1, count2);
// Remove region from S3 bucket DiskState.
removeS3BucketRegionFromDiskState();
// Validate that deleted S3 tag's local state is deleted.
validateS3TagStatesCreated();
enumerateResources(this.host, this.computeHost, this.endpointState, this.isMock, TEST_CASE_ADDITIONAL_VM);
// Check that newly attached volume got enumerated and the instance now has 1 more diskLink than before.
csForDiskLinkValidation = getComputeStateFromId(this.instancesToCleanUp.get(0));
assertEquals(csForDiskLinkValidation.diskLinks.size(), this.initialEbsDiskLinkCount + 1);
// Validate that diskState of S3 bucket with null region got deleted
validateBucketStateDeletionForNullRegion();
// Delete the S3 bucket created in the test
this.s3Client.deleteBucket(TEST_BUCKET_NAME);
this.bucketToBeDeleted = null;
// Because one public NIC and its document are removed,
// the totalNetworkInterfaceStateCount should go down by 1
validateRemovalOfPublicNetworkInterface(instanceIdsToStop, totalNetworkInterfaceStateCount - 1);
// Provision an additional VM with a different instance type. It should re-use the
// existing compute description created by the enumeration task above.
List<String> instanceIdsToDeleteSecondTime = provisionAWSVMWithEC2Client(this.client, this.host, count1, TestAWSSetupUtils.instanceType, this.subnetId, this.securityGroupId);
this.instancesToCleanUp.addAll(instanceIdsToDeleteSecondTime);
waitForProvisioningToComplete(instanceIdsToDeleteSecondTime, this.host, this.client, ZERO);
enumerateResources(this.host, this.computeHost, this.endpointState, this.isMock, TEST_CASE_ADDITIONAL_VM);
// Validate that we do not add duplicate diskLinks after multiple enumerations.
csForDiskLinkValidation = getComputeStateFromId(this.instancesToCleanUp.get(0));
assertEquals(csForDiskLinkValidation.diskLinks.size(), this.initialEbsDiskLinkCount + 1);
// Detach and delete test EBS volume.
DetachVolumeRequest detachVolumeRequest = new DetachVolumeRequest().withVolumeId(this.testEbsId);
this.client.detachVolume(detachVolumeRequest);
// One additional compute state and no additional compute description should be
// created. 1) compute host CD 2) t2.nano-system generated 3) t2.micro-system generated
// 4) t2.micro-created from test code.
queryDocumentsAndAssertExpectedCount(this.host, count4, ComputeDescriptionService.FACTORY_LINK, false);
ServiceDocumentQueryResult computesResult1 = queryDocumentsAndAssertExpectedCount(this.host, count8, ComputeService.FACTORY_LINK, false);
// validate the internal tag tor type=ec2_instance is set
// query for the existing internal tag state for type=ec2_instance.
// There should be only one internal tag.
validateTagInEntity(computesResult1, ComputeState.class, ec2_instance.toString());
ServiceDocumentQueryResult networkInterfaceResult = queryDocumentsAndAssertExpectedCount(this.host, totalNetworkInterfaceStateCount - 1, NetworkInterfaceService.FACTORY_LINK, false);
validateTagInEntity(networkInterfaceResult, NetworkInterfaceState.class, ec2_net_interface.toString());
ServiceDocumentQueryResult networkStateResult = queryDocumentsAndAssertExpectedCount(this.host, count1, NetworkService.FACTORY_LINK, false);
validateTagInEntity(networkStateResult, NetworkState.class, ec2_vpc.toString());
ServiceDocumentQueryResult subnetStateResult = queryDocumentsAndAssertExpectedCount(this.host, count1, SubnetService.FACTORY_LINK, false);
// TODO Remove. This is to help debug an intermittent test failure.
host.log(Level.INFO, "The subnet result state that I am working with is " + Utils.toJsonHtml(subnetStateResult));
validateTagInEntity(subnetStateResult, SubnetState.class, ec2_subnet.toString());
queryDocumentsAndAssertExpectedCount(this.host, count8, DiskService.FACTORY_LINK, false);
// Verify Deletion flow
// Delete 5 VMs spawned above of type T2_NANO
deleteVMsUsingEC2Client(this.client, this.host, instanceIdsToDeleteFirstTime);
enumerateResources(this.host, this.computeHost, this.endpointState, this.isMock, TEST_CASE_DELETE_VMS);
// Counts should go down. 5 compute states and 5 disk states.
ServiceDocumentQueryResult computesResult2 = queryDocumentsAndAssertExpectedCount(this.host, count3, ComputeService.FACTORY_LINK, false);
queryDocumentsAndAssertExpectedCount(this.host, count3, DiskService.FACTORY_LINK, false);
// Validate that detached test EBS is removed from diskLinks of test instance.
csForDiskLinkValidation = getComputeStateFromId(this.instancesToCleanUp.get(0));
assertEquals(csForDiskLinkValidation.diskLinks.size(), this.initialEbsDiskLinkCount);
// validate the internal tag tor type=ec2_instance is set
// query for the existing internal tag state for type=ec2_instance.
// There should be only one internal tag.
validateTagInEntity(computesResult2, ComputeState.class, ec2_instance.toString());
// Delete 1 VMs spawned above of type T2_Micro
deleteVMsUsingEC2Client(this.client, this.host, instanceIdsToDeleteSecondTime);
enumerateResources(this.host, this.computeHost, this.endpointState, this.isMock, TEST_CASE_DELETE_VM);
// Compute state and disk state count should go down by 1
ServiceDocumentQueryResult computesResult3 = queryDocumentsAndAssertExpectedCount(this.host, count2, ComputeService.FACTORY_LINK, false);
queryDocumentsAndAssertExpectedCount(this.host, count2, DiskService.FACTORY_LINK, false);
// validate the internal tag tor type=ec2_instance is set
// query for the existing internal tag state for type=ec2_instance.
// There should be only one internal tag.
validateTagInEntity(computesResult3, ComputeState.class, ec2_instance.toString());
// Validate that the document for the deleted S3 bucket is deleted after enumeration.
validateS3Enumeration(ZERO, ZERO);
// Delete test EBS volume.
DeleteVolumeRequest deleteVolumeRequest = new DeleteVolumeRequest().withVolumeId(this.testEbsId);
this.client.deleteVolume(deleteVolumeRequest);
this.testEbsId = null;
}
use of com.amazonaws.services.ec2.model.Vpc in project photon-model by vmware.
the class TestAWSNetworkService method testGetMainRouteTable.
@Test
public void testGetMainRouteTable() throws Throwable {
Vpc defVPC = this.netClient.getDefaultVPC();
assertTrue(defVPC != null);
RouteTable routeTable = this.netClient.getMainRouteTable(defVPC.getVpcId());
assertTrue(routeTable != null);
}
use of com.amazonaws.services.ec2.model.Vpc in project photon-model by vmware.
the class TestAWSSetupUtils method createOrGetDefaultSecurityGroupForGivenVPC.
/**
* Returns an existing security group for a VPC if it exists otherwise creates a new security group.
*/
public static SecurityGroup createOrGetDefaultSecurityGroupForGivenVPC(AmazonEC2AsyncClient client, String vpcID) {
List<SecurityGroup> securityGroupsInVPC = client.describeSecurityGroups().getSecurityGroups().stream().filter(sg -> sg.getVpcId().equals(vpcID)).collect(Collectors.toList());
if (securityGroupsInVPC != null && !securityGroupsInVPC.isEmpty()) {
for (SecurityGroup sg : securityGroupsInVPC) {
// Do not use newly provisioned security groups as this could interfere with the cleanup logic of other tests.
if (!sg.getGroupName().startsWith(AWS_NEW_GROUP_PREFIX)) {
return sg;
}
}
}
String securityGroupId = new AWSSecurityGroupClient(client).createDefaultSecurityGroup(vpcID);
tagResources(client, Arrays.asList(securityGroupId), TAG_KEY_FOR_TEST_RESOURCES, TAG_VALUE_FOR_TEST_RESOURCES + TAG_SG);
DescribeSecurityGroupsResult result = client.describeSecurityGroups(new DescribeSecurityGroupsRequest().withGroupIds(Arrays.asList(securityGroupId)));
return result.getSecurityGroups().get(0);
}
use of com.amazonaws.services.ec2.model.Vpc in project photon-model by vmware.
the class TestAWSSetupUtils method tearDownTestVpc.
public static void tearDownTestVpc(AmazonEC2AsyncClient client, VerificationHost host, Map<String, Object> awsTestContext, boolean isMock) {
// if we feel the need to delete resources on every test run.
if (!isMock && awsTestContext.containsKey(DELETE_RESOURCES_KEY)) {
final String vpcId = (String) awsTestContext.get(VPC_KEY);
final String subnetId = (String) awsTestContext.get(SUBNET_KEY);
final String internetGatewayId = (String) awsTestContext.get(INTERNET_GATEWAY_KEY);
final String securityGroupId = (String) awsTestContext.get(SECURITY_GROUP_KEY);
// clean up VPC and all its dependencies if creating one at setUp
deleteSecurityGroupUsingEC2Client(client, host, securityGroupId);
SecurityGroup securityGroup = new AWSSecurityGroupClient(client).getSecurityGroup(AWS_DEFAULT_GROUP_NAME, vpcId);
if (securityGroup != null) {
deleteSecurityGroupUsingEC2Client(client, host, securityGroup.getGroupId());
}
deleteSubnet(client, subnetId);
detachInternetGateway(client, vpcId, internetGatewayId);
deleteInternetGateway(client, internetGatewayId);
deleteVPC(client, vpcId);
}
}
use of com.amazonaws.services.ec2.model.Vpc in project cloudbreak by hortonworks.
the class AwsPlatformResources method securityGroups.
@Override
public CloudSecurityGroups securityGroups(CloudCredential cloudCredential, Region region, Map<String, String> filters) {
Map<String, Set<CloudSecurityGroup>> result = new HashMap<>();
Set<CloudSecurityGroup> cloudSecurityGroups = new HashSet<>();
AmazonEC2Client ec2Client = awsClient.createAccess(new AwsCredentialView(cloudCredential), region.value());
// create securitygroup filter view
PlatformResourceSecurityGroupFilterView filter = new PlatformResourceSecurityGroupFilterView(filters);
DescribeSecurityGroupsRequest describeSecurityGroupsRequest = new DescribeSecurityGroupsRequest();
// If the filtervalue is provided then we should filter only for those securitygroups
if (!Strings.isNullOrEmpty(filter.getVpcId())) {
describeSecurityGroupsRequest.withFilters(new Filter("vpc-id", singletonList(filter.getVpcId())));
}
if (!Strings.isNullOrEmpty(filter.getGroupId())) {
describeSecurityGroupsRequest.withGroupIds(filter.getGroupId());
}
if (!Strings.isNullOrEmpty(filter.getGroupName())) {
describeSecurityGroupsRequest.withGroupNames(filter.getGroupName());
}
for (SecurityGroup securityGroup : ec2Client.describeSecurityGroups(describeSecurityGroupsRequest).getSecurityGroups()) {
Map<String, Object> properties = new HashMap<>();
properties.put("vpcId", securityGroup.getVpcId());
properties.put("description", securityGroup.getDescription());
properties.put("ipPermissions", securityGroup.getIpPermissions());
properties.put("ipPermissionsEgress", securityGroup.getIpPermissionsEgress());
cloudSecurityGroups.add(new CloudSecurityGroup(securityGroup.getGroupName(), securityGroup.getGroupId(), properties));
}
result.put(region.value(), cloudSecurityGroups);
return new CloudSecurityGroups(result);
}
Aggregations