/** {@inheritDoc} */ @Override public Collection<InetSocketAddress> getRegisteredAddresses() throws IgniteSpiException { initComputeService(); Collection<InetSocketAddress> addresses = new LinkedList<>(); try { Set<NodeMetadata> nodes; if (nodesFilter != null) nodes = (Set<NodeMetadata>)computeService.listNodesDetailsMatching(nodesFilter); else { nodes = new HashSet<>(); for (ComputeMetadata metadata : computeService.listNodes()) nodes.add(computeService.getNodeMetadata(metadata.getId())); } for (NodeMetadata metadata : nodes) { if (metadata.getStatus() != NodeMetadata.Status.RUNNING) continue; for (String addr : metadata.getPrivateAddresses()) addresses.add(new InetSocketAddress(addr, 0)); for (String addr : metadata.getPublicAddresses()) addresses.add(new InetSocketAddress(addr, 0)); } } catch (Exception e) { throw new IgniteSpiException("Failed to get registered addresses for the provider: " + provider, e); } return addresses; }
/** * Terminate a specified VM * @param id id of the VM */ public void destroyVM(String id){ novaComputeService.destroyNode(id); }
/** * The list locations command returns all the valid locations for nodes. A location has a scope, * which is typically region or zone. A region is a general area, like eu-west, where a zone is * similar to a datacenter. If a location has a parent, that implies it is within that location. * For example a location can be a rack, whose parent is likely to be a zone. */ @Override public Set<? extends Location> listAssignableLocations() { return computeService.listAssignableLocations(); }
@Test(groups = { "integration", "live" }, singleThreaded = true) public void testCreateImage() throws RunNodesException, InterruptedException, ExecutionException { ComputeService computeService = view.getComputeService(); Optional<ImageExtension> imageExtension = computeService.getImageExtension(); assertTrue(imageExtension.isPresent(), "image extension was not present"); Template template = getNodeTemplate(); NodeMetadata node = Iterables.getOnlyElement(computeService.createNodesInGroup("test-create-image", 1, template)); checkReachable(node); logger.info("Creating image from node %s, started with template: %s", node, template); ImageTemplate newImageTemplate = imageExtension.get().buildImageTemplateFromNode("test-create-image", node.getId()); Image image = imageExtension.get().createImage(newImageTemplate).get(); logger.info("Image created: %s", image); assertEquals("test-create-image", image.getName()); imageId = image.getId(); computeService.destroyNode(node.getId()); Optional<? extends Image> optImage = getImage(); assertTrue(optImage.isPresent()); }
@Test(groups = { "integration", "live" }, dependsOnMethods = "testCreateSecurityGroup") public void testCreateNodeWithSecurityGroup() throws RunNodesException, InterruptedException, ExecutionException { ComputeService computeService = view.getComputeService(); Optional<SecurityGroupExtension> securityGroupExtension = computeService.getSecurityGroupExtension(); assertTrue(securityGroupExtension.isPresent(), "security group extension was not present"); NodeMetadata node = getOnlyElement(computeService.createNodesInGroup(nodeGroup, 1, options().securityGroups(groupId))); try { Set<SecurityGroup> groups = securityGroupExtension.get().listSecurityGroupsForNode(node.getId()); assertEquals(groups.size(), 1, "node has " + groups.size() + " groups"); assertEquals(getOnlyElement(groups).getId(), groupId); } finally { computeService.destroyNodesMatching(inGroup(node.getGroup())); } }
@Test(groups = { "integration", "live" }, singleThreaded = true, dependsOnMethods = "testCreateImage") public void testSpawnNodeFromImage() throws RunNodesException { ComputeService computeService = view.getComputeService(); Optional<? extends Image> optImage = getImage(); assertTrue(optImage.isPresent()); NodeMetadata node = Iterables.getOnlyElement(computeService.createNodesInGroup("test-create-image", 1, view .getComputeService() // fromImage does not use the arg image's id (but we do need to set location) .templateBuilder().imageId(optImage.get().getId()).fromImage(optImage.get()).build())); checkReachable(node); view.getComputeService().destroyNode(node.getId()); }
@Test public void testDefaultTemplateBuilder() throws IOException { Template defaultTemplate = view.getComputeService().templateBuilder().build(); assertEquals(defaultTemplate.getImage().getOperatingSystem().getVersion(), "10.04"); assertEquals(defaultTemplate.getImage().getOperatingSystem().is64Bit(), true); assertEquals(defaultTemplate.getImage().getOperatingSystem().getFamily(), OsFamily.UBUNTU); assertEquals(getCores(defaultTemplate.getHardware()), 0.5d); }
@Test(enabled = true) //, dependsOnMethods = "testCompareSizes") public void testAutoIpAllocation() throws Exception { ComputeServiceContext context = null; TemplateOptions options = client.templateOptions(); context.getComputeService().createNodesInGroup(group, 1, options); assertEquals(nodes.size(), 1, "One node should have been created"); NodeMetadata node = Iterables.get(nodes, 0); String region = node.getLocation().getParent().getId(); Set<String> publicIps = node.getPublicAddresses(); assertFalse(Iterables.isEmpty(publicIps), String.format("no public addresses attached to node %s", node)); assertEquals(Iterables.size(publicIps), 1); PublicIpInstanceIdPair ipidpair = Iterables.get(ipidpairs, 0); assertEquals(region + "/" + ipidpair.getInstanceId(), node.getId()); context.getComputeService().destroyNodesMatching(NodePredicates.inGroup(group)); ec2.getElasticIPAddressApi().get().describeAddressesInRegion(region, ipidpair.getPublicIp()); assertTrue(Iterables.isEmpty(ipidcheck), String.format("there should be no address pairs (%s)", Iterables.toString(ipidcheck))); } finally { context.getComputeService().destroyNodesMatching(NodePredicates.inGroup(group)); if (context != null) context.close();
+ ".ebs-template; this property should be in the format defined in TemplateBuilderSpec"); InstanceApi instanceClient = view.unwrapApi(EC2Api.class) .getInstanceApi().get(); ElasticBlockStoreApi ebsClient = view.unwrapApi(EC2Api.class) .getElasticBlockStoreApi().get(); final Template template = view.getComputeService().templateBuilder().from(ebsTemplate).build(); Location zone = Iterables.find(view.getComputeService().listAssignableLocations(), new Predicate<Location>() { ebsClient.deleteVolumeInRegion(volume.getRegion(), volume.getId()); template.getOptions().as(EC2TemplateOptions.class)// NodeMetadata node = Iterables.getOnlyElement(client.createNodesInGroup(group, 1, template)); assertTrue(device.isDeleteOnTermination()); assertEquals(volumeSize, volume.getSize()); assertTrue(device.isDeleteOnTermination()); volume = Iterables.getOnlyElement(ebsClient.describeVolumesInRegion(node.getLocation().getParent().getId(), client.destroyNodesMatching(NodePredicates.inGroup(group)); ebsClient.deleteSnapshotInRegion(snapshot.getRegion(), snapshot.getId());
@Test(enabled = false) public void testCreateNodeWithGeneratedKeyPairAndOverriddenLoginUserWithTemplateBuilder() throws Exception { Builder<HttpRequest, HttpResponse> requestResponseMap = ImmutableMap.<HttpRequest, HttpResponse> builder(); requestResponseMap.put(describeRegionsRequest, describeRegionsResponse); requestResponseMap.put(describeAvailabilityZonesRequest, describeAvailabilityZonesResponse); requestResponseMap.put(describeImagesRequest, describeImagesResponse); requestResponseMap.put(createKeyPairRequest, createKeyPairResponse); requestResponseMap.put(createSecurityGroupRequest, createSecurityGroupResponse); requestResponseMap.put(describeSecurityGroupFilteredRequest, describeSecurityGroupFilteredResponse); requestResponseMap.put(describeSecurityGroupRequest, describeSecurityGroupResponse); requestResponseMap.put(authorizeSecurityGroupIngressRequest22, authorizeSecurityGroupIngressResponse); requestResponseMap.put(authorizeSecurityGroupIngressRequestGroup, authorizeSecurityGroupIngressResponse); requestResponseMap.put(runInstancesRequest, runInstancesResponse); requestResponseMap.put(describeInstanceRequest, describeInstanceResponse); requestResponseMap.put(describeInstanceMultiIdsRequest, describeInstanceMultiIdsResponse); requestResponseMap.put(describeImageRequest, describeImagesResponse); requestResponseMap.put(createTagsRequest, createTagsResponse); ComputeService apiThatCreatesNode = requestsSendResponses(requestResponseMap.build()); NodeMetadata node = Iterables.getOnlyElement( apiThatCreatesNode.createNodesInGroup("test", 1, apiThatCreatesNode.templateBuilder().from("osDescriptionMatches=.*fedora.*,loginUser=ec2-user").build())); assertEquals(node.getCredentials().getUser(), "ec2-user"); assertTrue(node.getCredentials().getOptionalPrivateKey().isPresent()); }
@Test public void testAndExperiment() { ComputeServiceContext context = null; try { context = computeContextForKnownArgumentsAndConstantPassword(); assertEquals(context.getComputeService().listAssignableLocations().size(), 4); } finally { if (context != null) context.close(); } }
@Test public void testCreateNodeWhileUserSpecifiesKeyPair() throws Exception { Builder<HttpRequest, HttpResponse> requestResponseMap = ImmutableMap.<HttpRequest, HttpResponse> builder() NodeMetadata node = Iterables.getOnlyElement(apiThatCreatesNode.createNodesInGroup("test", 1, keyPairName("fooPair").overrideLoginPrivateKey("privateKey").blockUntilRunning(false))); assertTrue(node.getCredentials().getOptionalPrivateKey().isPresent());
public void testCreateNodeWithGeneratedKeyPairAndOverriddenLoginUser() throws Exception { Builder<HttpRequest, HttpResponse> requestResponseMap = ImmutableMap.<HttpRequest, HttpResponse> builder(); requestResponseMap.put(describeRegionsRequest, describeRegionsResponse); requestResponseMap.put(describeAvailabilityZonesRequest, describeAvailabilityZonesResponse); requestResponseMap.put(describeImagesRequest, describeImagesResponse); requestResponseMap.put(createKeyPairRequest, createKeyPairResponse); requestResponseMap.put(createSecurityGroupRequest, createSecurityGroupResponse); requestResponseMap.put(describeSecurityGroupFilteredRequest, describeSecurityGroupFilteredResponse); requestResponseMap.put(describeSecurityGroupRequest, describeSecurityGroupResponse); requestResponseMap.put(authorizeSecurityGroupIngressRequest22, authorizeSecurityGroupIngressResponse); requestResponseMap.put(authorizeSecurityGroupIngressRequestGroup, authorizeSecurityGroupIngressResponse); requestResponseMap.put(runInstancesRequest, runInstancesResponse); requestResponseMap.put(describeInstanceRequest, describeInstanceResponse); requestResponseMap.put(describeInstanceMultiIdsRequest, describeInstanceMultiIdsResponse); requestResponseMap.put(describeImageRequest, describeImagesResponse); requestResponseMap.put(createTagsRequest, createTagsResponse); ComputeService apiThatCreatesNode = requestsSendResponses(requestResponseMap.build()); NodeMetadata node = Iterables.getOnlyElement(apiThatCreatesNode.createNodesInGroup("test", 1, blockUntilRunning(false).overrideLoginUser("ec2-user"))); assertEquals(node.getCredentials().getUser(), "ec2-user"); System.out.println(node.getImageId()); assertTrue(node.getCredentials().getOptionalPrivateKey().isPresent()); }
@SuppressWarnings("CheckReturnValue") public void testStartHS1Instance() throws Exception { Template template = view.getComputeService().templateBuilder() .fromHardware(EC2HardwareBuilder.hs1_8xlarge().build()).osFamily(OsFamily.AMZN_LINUX).build(); assert template != null : "The returned template was null, but it should have a value."; assertEquals(template.getHardware().getProviderId(), InstanceType.HS1_8XLARGE); assertEquals(template.getImage().getUserMetadata().get("virtualizationType"), "hvm"); assertEquals(template.getImage().getUserMetadata().get("hypervisor"), "xen"); template.getOptions().runScript(Statements.newStatementList(AdminAccess.standard(), InstallJDK.fromOpenJDK())); String group = PREFIX + "cccluster"; view.getComputeService().destroyNodesMatching(NodePredicates.inGroup(group)); // TODO make this not lookup an explicit region client.getPlacementGroupApi().get().deletePlacementGroupInRegion(null, "jclouds#" + group + "#us-east-1"); try { Set<? extends NodeMetadata> nodes = view.getComputeService().createNodesInGroup(group, 1, template); NodeMetadata node = getOnlyElement(nodes); Reservation<? extends RunningInstance> reservation = getOnlyElement(client.getInstanceApi().get().describeInstancesInRegion(null, node.getProviderId())); getOnlyElement(reservation); } catch (RunNodesException e) { System.err.println(e.getNodeErrors().keySet()); Throwables.propagate(e); } finally { view.getComputeService().destroyNodesMatching(NodePredicates.inGroup(group)); } }
AWSInstanceApi instanceApi = view.unwrapApi(AWSEC2Api.class).getInstanceApi().get(); view.getComputeService().destroyNodesMatching(inGroup(group)); TemplateOptions options = view.getComputeService().templateOptions(); noSshContext = createView(setupProperties(), ImmutableSet.<Module> of(new Log4JLoggingModule())); Set<? extends NodeMetadata> nodes = noSshContext.getComputeService().createNodesInGroup(group, 1, options); assert first.getCredentials().credential == null : first; AWSRunningInstance instance = getInstance(instanceApi, first.getProviderId()); assertEquals(instance.getKeyName(), "jclouds#" + group); Map<? extends NodeMetadata, ExecResponse> responses = view.getComputeService() .runScriptOnNodesMatching( runningInGroup(group), exec("echo hello"), .privateKey(keyPair.get("private")).build()).wrapInInitScript(false).runAsRoot(false)); ExecResponse hello = getOnlyElement(responses.values()); assertEquals(hello.getOutput().trim(), "hello"); noSshContext.close(); view.getComputeService().destroyNodesMatching(inGroup(group));
@Test public void testWindowsAdminWorks() throws Exception { String group = "winadm"; // Spin up a new node. Make sure to open the RDP port 3389 Template template = view.getComputeService().templateBuilder().from(windowsTemplate).options(inboundPorts(3389)) .build(); try { NodeMetadata node = Iterables.getOnlyElement(view.getComputeService().createNodesInGroup(group, 1, template)); assertEquals(node.getCredentials().getUser(), "Administrator"); assertFalse(Strings.isNullOrEmpty(node.getCredentials().getPassword())); } finally { view.getComputeService().destroyNodesMatching(NodePredicates.inGroup(group)); } }
@Test public void testFastestTemplateBuilder() throws IOException { Template template = view.getComputeService().templateBuilder().fastest().build(); assertEquals(getCores(template.getHardware()), 16.0d); assertEquals(template.getHardware().getRam(), 1); assertEquals(getSpace(template.getHardware()), 25.0d); assertEquals(template.getHardware().getVolumes().get(0).getType(), Volume.Type.LOCAL); }
@Test(enabled = true, dependsOnMethods = { "testListNodes", "testGetNodesWithDetails", "testListNodesByIds" }) public void testDestroyNodes() { int toDestroy = refreshNodes().size(); Set<? extends NodeMetadata> destroyed = client.destroyNodesMatching(inGroup(group)); assertEquals(toDestroy, destroyed.size()); for (NodeMetadata node : filter(client.listNodesDetailsMatching(all()), inGroup(group))) { assert node.getStatus() == Status.TERMINATED : node; assert view.utils().credentialStore().get("node#" + node.getId()) == null : "credential should have been null for " + "node#" + node.getId(); } }
@Test(enabled = true, dependsOnMethods = "testSuspendResume") public void testListNodes() throws Exception { for (ComputeMetadata node : client.listNodes()) { assert node.getProviderId() != null : node; assert node.getLocation() != null : node; assertEquals(node.getType(), ComputeType.NODE); } }
@Test public void testTemplateBuilderCanUseImageId() throws Exception { Template defaultTemplate = view.getComputeService().templateBuilder().build(); view.close(); setupContext(); Template template = view.getComputeService().templateBuilder().imageId(defaultTemplate.getImage().getId()) .locationId(defaultTemplate.getLocation().getId()).build(); assertEquals(template.getImage(), defaultTemplate.getImage()); }