You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@jclouds.apache.org by na...@apache.org on 2016/10/10 23:39:15 UTC
[1/2] jclouds-labs git commit: wip
Repository: jclouds-labs
Updated Branches:
refs/heads/fix/AzureTemplateBuilderLiveTest 5b832bfc6 -> 4045789ef
wip
Project: http://git-wip-us.apache.org/repos/asf/jclouds-labs/repo
Commit: http://git-wip-us.apache.org/repos/asf/jclouds-labs/commit/716ab744
Tree: http://git-wip-us.apache.org/repos/asf/jclouds-labs/tree/716ab744
Diff: http://git-wip-us.apache.org/repos/asf/jclouds-labs/diff/716ab744
Branch: refs/heads/fix/AzureTemplateBuilderLiveTest
Commit: 716ab744f112e8f652f2c300e1ce5eea3df83a22
Parents: 5b832bf
Author: Ignasi Barrera <na...@apache.org>
Authored: Wed Oct 5 17:10:59 2016 +0200
Committer: Ignasi Barrera <na...@apache.org>
Committed: Wed Oct 5 17:10:59 2016 +0200
----------------------------------------------------------------------
.../arm/AzureComputeProviderMetadata.java | 4 +-
.../arm/compute/functions/VMImageToImage.java | 3 +
.../arm/filters/ApiVersionFilter.java | 12 +--
.../arm/functions/CleanupResources.java | 3 +-
.../azurecompute/arm/util/GetEnumValue.java | 1 -
.../compute/AzureComputeServiceLiveTest.java | 87 +++++++++-----------
6 files changed, 49 insertions(+), 61 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/716ab744/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/AzureComputeProviderMetadata.java
----------------------------------------------------------------------
diff --git a/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/AzureComputeProviderMetadata.java b/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/AzureComputeProviderMetadata.java
index 5224410..ef15313 100644
--- a/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/AzureComputeProviderMetadata.java
+++ b/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/AzureComputeProviderMetadata.java
@@ -94,9 +94,9 @@ public class AzureComputeProviderMetadata extends BaseProviderMetadata {
properties.put(DEFAULT_DATADISKSIZE, "100");
properties.put(IMAGE_PUBLISHERS, "Canonical,RedHat");
// Default credentials for all images
- properties.put(TEMPLATE, "osFamily=UBUNTU,os64Bit=true,osVersionMatches=16.04.0-LTS");
properties.put(IMAGE_LOGIN_USER, "jclouds:Password12345!");
- properties.put(IMAGE_AUTHENTICATE_SUDO, "true");
+ properties.put(IMAGE_AUTHENTICATE_SUDO, "true");
+ properties.put(TEMPLATE, "imageNameMatches=UbuntuServer,osVersionMatches=1[45]\\.[01][04]\\.[0-9]-LTS");
properties.put(TIMEOUT_NODE_TERMINATED, 60 * 10 * 1000);
// Api versions used in each API
properties.put(API_VERSION_PREFIX + DeploymentApi.class.getSimpleName(), "2016-02-01");
http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/716ab744/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/compute/functions/VMImageToImage.java
----------------------------------------------------------------------
diff --git a/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/compute/functions/VMImageToImage.java b/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/compute/functions/VMImageToImage.java
index 51ea075..1d2a49d 100644
--- a/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/compute/functions/VMImageToImage.java
+++ b/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/compute/functions/VMImageToImage.java
@@ -47,6 +47,7 @@ public class VMImageToImage implements Function<VMImage, Image> {
private static final String SUSE = "SUSE";
private static final String SQL_SERVER = "SQL Server";
private static final String ORACLE_lINUX = "Oracle Linux";
+ private static final String RHEL = "RHEL";
private final Supplier<Set<? extends org.jclouds.domain.Location>> locations;
@@ -150,6 +151,8 @@ public class VMImageToImage implements Function<VMImage, Image> {
family = OsFamily.WINDOWS;
} else if (label.contains(ORACLE_lINUX)) {
family = OsFamily.OEL;
+ } else if (label.contains(RHEL)) {
+ family = OsFamily.RHEL;
}
String sku = image.sku();
http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/716ab744/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/filters/ApiVersionFilter.java
----------------------------------------------------------------------
diff --git a/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/filters/ApiVersionFilter.java b/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/filters/ApiVersionFilter.java
index f03950b..904c2e8 100644
--- a/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/filters/ApiVersionFilter.java
+++ b/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/filters/ApiVersionFilter.java
@@ -58,18 +58,19 @@ public class ApiVersionFilter implements HttpRequestFilter {
checkArgument(request instanceof GeneratedHttpRequest,
"This filter can only be applied to GeneratedHttpRequest objects");
GeneratedHttpRequest generatedRequest = (GeneratedHttpRequest) request;
-
+
// Look if there is a custom api version for the current method
String commandName = config.getCommandName(generatedRequest.getInvocation());
String customApiVersion = versions.get(commandName);
-
+
if (customApiVersion == null) {
- // No custom config for the specific method. Let's look for custom config for the class
+ // No custom config for the specific method. Let's look for custom
+ // config for the class
Invokable<?, ?> invoked = generatedRequest.getInvocation().getInvokable();
String className = invoked.getOwnerType().getRawType().getSimpleName();
customApiVersion = versions.get(className);
}
-
+
if (customApiVersion != null) {
return request.toBuilder().replaceQueryParam("api-version", customApiVersion).build();
}
@@ -77,8 +78,7 @@ public class ApiVersionFilter implements HttpRequestFilter {
return request;
}
- private static final Map<String, String> versions(
- Function<Predicate<String>, Map<String, String>> filterStringsBoundByName) {
+ private static Map<String, String> versions(Function<Predicate<String>, Map<String, String>> filterStringsBoundByName) {
Map<String, String> stringBoundWithApiVersionPrefix = filterStringsBoundByName
.apply(startsWith(API_VERSION_PREFIX));
return transformKeys(stringBoundWithApiVersionPrefix, new Function<String, String>() {
http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/716ab744/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/functions/CleanupResources.java
----------------------------------------------------------------------
diff --git a/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/functions/CleanupResources.java b/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/functions/CleanupResources.java
index e035ba6..f44c761 100644
--- a/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/functions/CleanupResources.java
+++ b/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/functions/CleanupResources.java
@@ -16,8 +16,6 @@
*/
package org.jclouds.azurecompute.arm.functions;
-import autovalue.shaded.com.google.common.common.collect.Lists;
-
import java.net.URI;
import java.util.List;
import java.util.Map;
@@ -41,6 +39,7 @@ import com.google.common.base.Predicate;
import com.google.common.base.Splitter;
import com.google.common.collect.ImmutableMap;
import com.google.common.collect.Iterables;
+import com.google.common.collect.Lists;
import com.google.common.collect.Maps;
import static com.google.common.base.Preconditions.checkNotNull;
http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/716ab744/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/util/GetEnumValue.java
----------------------------------------------------------------------
diff --git a/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/util/GetEnumValue.java b/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/util/GetEnumValue.java
index 4a61613..f42bad3 100644
--- a/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/util/GetEnumValue.java
+++ b/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/util/GetEnumValue.java
@@ -20,7 +20,6 @@ import java.util.EnumSet;
public class GetEnumValue {
- @SuppressWarnings("unchecked")
public static <T extends Enum<T>> Enum<T> fromValueOrDefault(String text, Enum<T> defaultValue) {
if (text != null) {
EnumSet<T> elements = EnumSet.allOf(defaultValue.getDeclaringClass());
http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/716ab744/azurecompute-arm/src/test/java/org/jclouds/azurecompute/arm/compute/AzureComputeServiceLiveTest.java
----------------------------------------------------------------------
diff --git a/azurecompute-arm/src/test/java/org/jclouds/azurecompute/arm/compute/AzureComputeServiceLiveTest.java b/azurecompute-arm/src/test/java/org/jclouds/azurecompute/arm/compute/AzureComputeServiceLiveTest.java
index 81edddb..9caea43 100644
--- a/azurecompute-arm/src/test/java/org/jclouds/azurecompute/arm/compute/AzureComputeServiceLiveTest.java
+++ b/azurecompute-arm/src/test/java/org/jclouds/azurecompute/arm/compute/AzureComputeServiceLiveTest.java
@@ -16,49 +16,37 @@
*/
package org.jclouds.azurecompute.arm.compute;
-import java.util.Map;
+import static com.google.common.base.Preconditions.checkNotNull;
+import static org.jclouds.azurecompute.arm.config.AzureComputeProperties.RESOURCE_GROUP_NAME;
+import static org.jclouds.compute.config.ComputeServiceProperties.TIMEOUT_NODE_RUNNING;
+import static org.jclouds.compute.config.ComputeServiceProperties.TIMEOUT_NODE_SUSPENDED;
+import static org.jclouds.compute.config.ComputeServiceProperties.TIMEOUT_NODE_TERMINATED;
+import static org.jclouds.compute.config.ComputeServiceProperties.TIMEOUT_PORT_OPEN;
+import static org.jclouds.compute.config.ComputeServiceProperties.TIMEOUT_SCRIPT_COMPLETE;
+import static org.jclouds.location.reference.LocationConstants.PROPERTY_REGIONS;
+
import java.util.Properties;
-import java.util.concurrent.ExecutionException;
import java.util.concurrent.TimeUnit;
import org.jclouds.azurecompute.arm.AzureComputeProviderMetadata;
import org.jclouds.azurecompute.arm.internal.AzureLiveTestUtils;
-import org.jclouds.compute.RunScriptOnNodesException;
-import org.jclouds.compute.domain.ExecResponse;
import org.jclouds.compute.domain.NodeMetadata;
-import org.jclouds.compute.domain.OperatingSystem;
-import org.jclouds.compute.domain.Template;
import org.jclouds.compute.internal.BaseComputeServiceLiveTest;
-import org.jclouds.compute.predicates.NodePredicates;
-import org.jclouds.domain.LoginCredentials;
import org.jclouds.logging.config.LoggingModule;
import org.jclouds.logging.slf4j.config.SLF4JLoggingModule;
import org.jclouds.providers.ProviderMetadata;
-import org.jclouds.scriptbuilder.domain.Statement;
-import org.jclouds.scriptbuilder.domain.Statements;
-import org.jclouds.scriptbuilder.statements.java.InstallJDK;
-import org.jclouds.scriptbuilder.statements.login.AdminAccess;
import org.jclouds.sshj.config.SshjSshClientModule;
import org.testng.annotations.Test;
+import com.google.common.collect.ImmutableMap;
+import com.google.common.collect.ImmutableSet;
import com.google.inject.Module;
-import static com.google.common.base.Preconditions.checkNotNull;
-import static org.jclouds.azurecompute.arm.config.AzureComputeProperties.IMAGE_PUBLISHERS;
-import static org.jclouds.azurecompute.arm.config.AzureComputeProperties.RESOURCE_GROUP_NAME;
-import static org.jclouds.compute.config.ComputeServiceProperties.TEMPLATE;
-import static org.jclouds.compute.config.ComputeServiceProperties.TIMEOUT_NODE_RUNNING;
-import static org.jclouds.compute.config.ComputeServiceProperties.TIMEOUT_NODE_SUSPENDED;
-import static org.jclouds.compute.config.ComputeServiceProperties.TIMEOUT_NODE_TERMINATED;
-import static org.jclouds.compute.config.ComputeServiceProperties.TIMEOUT_PORT_OPEN;
-import static org.jclouds.compute.config.ComputeServiceProperties.TIMEOUT_SCRIPT_COMPLETE;
-
/**
* Live tests for the {@link org.jclouds.compute.ComputeService} integration.
*/
@Test(groups = "live", singleThreaded = true, testName = "AzureComputeServiceLiveTest")
public class AzureComputeServiceLiveTest extends BaseComputeServiceLiveTest {
- protected int nonBlockDurationSeconds = 30;
public AzureComputeServiceLiveTest() {
provider = "azurecompute-arm";
@@ -78,22 +66,20 @@ public class AzureComputeServiceLiveTest extends BaseComputeServiceLiveTest {
@Override
protected ProviderMetadata createProviderMetadata() {
- AzureComputeProviderMetadata pm = AzureComputeProviderMetadata.builder().build();
- return pm;
+ return AzureComputeProviderMetadata.builder().build();
}
@Override
protected Properties setupProperties() {
Properties properties = super.setupProperties();
- long scriptTimeout = TimeUnit.MILLISECONDS.convert(60, TimeUnit.MINUTES);
- properties.setProperty(TIMEOUT_SCRIPT_COMPLETE, scriptTimeout + "");
- properties.setProperty(TIMEOUT_NODE_RUNNING, scriptTimeout + "");
- properties.setProperty(TIMEOUT_PORT_OPEN, scriptTimeout + "");
- properties.setProperty(TIMEOUT_NODE_TERMINATED, scriptTimeout + "");
- properties.setProperty(TIMEOUT_NODE_SUSPENDED, scriptTimeout + "");
- properties.put(RESOURCE_GROUP_NAME, "j5s");
- properties.put(TEMPLATE, "osFamily=UBUNTU,os64Bit=true,osVersionMatches=16.04.0-LTS,locationId=northeurope");
- properties.put(IMAGE_PUBLISHERS, "Canonical");
+ String defaultTimeout = String.valueOf(TimeUnit.MILLISECONDS.convert(60, TimeUnit.MINUTES));
+ properties.setProperty(TIMEOUT_SCRIPT_COMPLETE, defaultTimeout);
+ properties.setProperty(TIMEOUT_NODE_RUNNING, defaultTimeout);
+ properties.setProperty(TIMEOUT_PORT_OPEN, defaultTimeout);
+ properties.setProperty(TIMEOUT_NODE_TERMINATED, defaultTimeout);
+ properties.setProperty(TIMEOUT_NODE_SUSPENDED, defaultTimeout);
+ properties.put(RESOURCE_GROUP_NAME, "a2");
+ properties.put(PROPERTY_REGIONS, "northeurope");
AzureLiveTestUtils.defaultProperties(properties);
checkNotNull(setIfTestSystemPropertyPresent(properties, "oauth.endpoint"), "test.oauth.endpoint");
@@ -102,24 +88,25 @@ public class AzureComputeServiceLiveTest extends BaseComputeServiceLiveTest {
}
@Override
- protected Template refreshTemplate() {
- return this.template = addRunScriptToTemplate(this.buildTemplate(this.client.templateBuilder()));
- }
-
- @Override
- protected Template addRunScriptToTemplate(Template template) {
- template.getOptions().runScript(Statements.newStatementList(new Statement[]{AdminAccess.standard(), Statements.exec("sleep 50"), InstallJDK.fromOpenJDK()}));
- return template;
- }
-
- @Override
- @Test( enabled = false)
- protected void weCanCancelTasks(NodeMetadata node) throws InterruptedException, ExecutionException {
- return;
+ protected void checkUserMetadataContains(NodeMetadata node, ImmutableMap<String, String> userMetadata) {
+ // User metadata not yet supported
}
@Override
- protected Map<? extends NodeMetadata, ExecResponse> runScriptWithCreds(String group, OperatingSystem os, LoginCredentials creds) throws RunScriptOnNodesException {
- return this.client.runScriptOnNodesMatching(NodePredicates.runningInGroup(group), Statements.newStatementList(Statements.exec("sleep 50"), InstallJDK.fromOpenJDK()), org.jclouds.compute.options.TemplateOptions.Builder.overrideLoginCredentials(creds).nameTask("runScriptWithCreds"));
+ protected void checkTagsInNodeEquals(NodeMetadata node, ImmutableSet<String> tags) {
+ // Tags not yet supported
}
+
+
+
+// @Override
+// protected Template addRunScriptToTemplate(Template template) {
+// template.getOptions().runScript(Statements.newStatementList(new Statement[]{AdminAccess.standard(), Statements.exec("sleep 50"), InstallJDK.fromOpenJDK()}));
+// return template;
+// }
+
+// @Override
+// protected Map<? extends NodeMetadata, ExecResponse> runScriptWithCreds(String group, OperatingSystem os, LoginCredentials creds) throws RunScriptOnNodesException {
+// return this.client.runScriptOnNodesMatching(NodePredicates.runningInGroup(group), Statements.newStatementList(Statements.exec("sleep 50"), InstallJDK.fromOpenJDK()), org.jclouds.compute.options.TemplateOptions.Builder.overrideLoginCredentials(creds).nameTask("runScriptWithCreds"));
+// }
}
[2/2] jclouds-labs git commit: AzureComputeServiceLiveTest passing
Posted by na...@apache.org.
AzureComputeServiceLiveTest passing
Project: http://git-wip-us.apache.org/repos/asf/jclouds-labs/repo
Commit: http://git-wip-us.apache.org/repos/asf/jclouds-labs/commit/4045789e
Tree: http://git-wip-us.apache.org/repos/asf/jclouds-labs/tree/4045789e
Diff: http://git-wip-us.apache.org/repos/asf/jclouds-labs/diff/4045789e
Branch: refs/heads/fix/AzureTemplateBuilderLiveTest
Commit: 4045789efc3541f18884c0469454f4efb9474e9a
Parents: 716ab74
Author: Ignasi Barrera <na...@apache.org>
Authored: Tue Oct 11 01:38:56 2016 +0200
Committer: Ignasi Barrera <na...@apache.org>
Committed: Tue Oct 11 01:38:56 2016 +0200
----------------------------------------------------------------------
.../arm/AzureComputeProviderMetadata.java | 2 +-
.../arm/compute/AzureComputeServiceAdapter.java | 31 ++++----
.../AzureComputeServiceContextModule.java | 30 ++++++++
.../arm/compute/functions/VMImageToImage.java | 13 ++--
.../functions/VirtualMachineToNodeMetadata.java | 77 ++++++++++++++------
.../arm/domain/VirtualMachineInstance.java | 49 ++++++++++++-
.../arm/domain/VirtualMachineProperties.java | 1 +
.../compute/AzureComputeServiceLiveTest.java | 43 +++++++----
.../arm/features/VirtualMachineApiLiveTest.java | 47 ++++--------
9 files changed, 194 insertions(+), 99 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/4045789e/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/AzureComputeProviderMetadata.java
----------------------------------------------------------------------
diff --git a/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/AzureComputeProviderMetadata.java b/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/AzureComputeProviderMetadata.java
index ef15313..86f1420 100644
--- a/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/AzureComputeProviderMetadata.java
+++ b/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/AzureComputeProviderMetadata.java
@@ -116,7 +116,7 @@ public class AzureComputeProviderMetadata extends BaseProviderMetadata {
properties.put(API_VERSION_PREFIX + "GetVirtualMachine", "2016-03-30");
properties.put(API_VERSION_PREFIX + "GetVirtualMachineInstance", "2016-03-30");
properties.put(API_VERSION_PREFIX + "CreateVirtualMachine", "2016-03-30");
- properties.put(API_VERSION_PREFIX + "ListVirtualMachines", "2016-06-01");
+ properties.put(API_VERSION_PREFIX + "ListVirtualMachines", "2015-06-15");
properties.put(API_VERSION_PREFIX + "DeleteVirtualMachine", "2016-03-30");
return properties;
http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/4045789e/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/compute/AzureComputeServiceAdapter.java
----------------------------------------------------------------------
diff --git a/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/compute/AzureComputeServiceAdapter.java b/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/compute/AzureComputeServiceAdapter.java
index b50e5f0..6e3e3bb 100644
--- a/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/compute/AzureComputeServiceAdapter.java
+++ b/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/compute/AzureComputeServiceAdapter.java
@@ -16,6 +16,12 @@
*/
package org.jclouds.azurecompute.arm.compute;
+import static com.google.common.base.Preconditions.checkState;
+import static com.google.common.collect.Iterables.contains;
+import static com.google.common.collect.Iterables.filter;
+import static org.jclouds.compute.config.ComputeServiceProperties.IMAGE_LOGIN_USER;
+import static org.jclouds.compute.config.ComputeServiceProperties.TIMEOUT_NODE_RUNNING;
+
import java.util.Collection;
import java.util.List;
import java.util.Set;
@@ -81,13 +87,6 @@ import com.google.common.collect.Lists;
import com.google.common.collect.Multimap;
import com.google.common.collect.Sets;
-import static com.google.common.base.Preconditions.checkState;
-import static com.google.common.collect.Iterables.contains;
-import static com.google.common.collect.Iterables.filter;
-import static org.jclouds.compute.config.ComputeServiceProperties.IMAGE_LOGIN_USER;
-import static org.jclouds.compute.config.ComputeServiceProperties.TIMEOUT_NODE_RUNNING;
-import static org.jclouds.util.Predicates2.retry;
-
/**
* Defines the connection between the {@link AzureComputeApi} implementation and the jclouds
* {@link org.jclouds.compute.ComputeService}.
@@ -99,20 +98,21 @@ public class AzureComputeServiceAdapter implements ComputeServiceAdapter<Virtual
@Named(ComputeServiceConstants.COMPUTE_LOGGER)
private Logger logger = Logger.NULL;
- private String azureGroup;
+ private final String azureGroup;
private final CleanupResources cleanupResources;
private final AzureComputeApi api;
private final AzureComputeConstants azureComputeConstants;
private final Supplier<Set<String>> regionIds;
private final Predicate<String> nodeRunningPredicate;
+ private final Predicate<String> publicIpAvailable;
@Inject
AzureComputeServiceAdapter(final AzureComputeApi api, final AzureComputeConstants azureComputeConstants,
CleanupResources cleanupResources, @Region Supplier<Set<String>> regionIds,
- @Named(TIMEOUT_NODE_RUNNING) Predicate<String> nodeRunningPredicate) {
+ @Named(TIMEOUT_NODE_RUNNING) Predicate<String> nodeRunningPredicate,
+ @Named("PublicIpAvailable") Predicate<String> publicIpAvailable) {
this.api = api;
this.azureComputeConstants = azureComputeConstants;
- // TODO remove this constant, use `group`
this.azureGroup = azureComputeConstants.azureResourceGroup();
logger.debug("AzureComputeServiceAdapter set azuregroup to: " + azureGroup);
@@ -120,6 +120,7 @@ public class AzureComputeServiceAdapter implements ComputeServiceAdapter<Virtual
this.cleanupResources = cleanupResources;
this.regionIds = regionIds;
this.nodeRunningPredicate = nodeRunningPredicate;
+ this.publicIpAvailable = publicIpAvailable;
}
@Override
@@ -382,11 +383,11 @@ public class AzureComputeServiceAdapter implements ComputeServiceAdapter<Virtual
String publicIpAddressName = "public-address-" + name;
PublicIPAddress ip = ipApi.createOrUpdate(publicIpAddressName, locationName, ImmutableMap.of("jclouds", name), properties);
- retry(new Predicate<String>() {
- @Override public boolean apply(String name) {
- return api.getPublicIPAddressApi(azureGroup).get(name).properties().provisioningState().equals("Succeeded");
- }
- }, 10 * 1000).apply(publicIpAddressName);
+ publicIpAvailable.apply(publicIpAddressName);
+ // Refresh after last polling
+ ip = api.getPublicIPAddressApi(azureGroup).get(publicIpAddressName);
+ checkState(ip.properties().provisioningState().equals("Succeeded"),
+ "Public IP was not provisioned in the configured timeout");
final NetworkInterfaceCardProperties networkInterfaceCardProperties =
NetworkInterfaceCardProperties.builder()
http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/4045789e/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/compute/config/AzureComputeServiceContextModule.java
----------------------------------------------------------------------
diff --git a/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/compute/config/AzureComputeServiceContextModule.java b/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/compute/config/AzureComputeServiceContextModule.java
index 896b880..7af1730 100644
--- a/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/compute/config/AzureComputeServiceContextModule.java
+++ b/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/compute/config/AzureComputeServiceContextModule.java
@@ -34,6 +34,7 @@ import org.jclouds.azurecompute.arm.compute.functions.VirtualMachineToNodeMetada
import org.jclouds.azurecompute.arm.compute.options.AzureTemplateOptions;
import org.jclouds.azurecompute.arm.compute.strategy.CreateResourceGroupThenCreateNodes;
import org.jclouds.azurecompute.arm.domain.Location;
+import org.jclouds.azurecompute.arm.domain.PublicIPAddress;
import org.jclouds.azurecompute.arm.domain.ResourceDefinition;
import org.jclouds.azurecompute.arm.domain.VMHardware;
import org.jclouds.azurecompute.arm.domain.VMImage;
@@ -232,6 +233,15 @@ public class AzureComputeServiceContextModule
return retry(new VirtualMachineInStatePredicate(api, azureGroup, ProvisioningState.DELETED), timeouts.nodeTerminated,
pollPeriod.pollInitialPeriod, pollPeriod.pollMaxPeriod);
}
+
+ @Provides
+ @Named("PublicIpAvailable")
+ protected Predicate<String> providePublicIpAvailablePredicate(final AzureComputeApi api, final AzureComputeServiceContextModule.AzureComputeConstants azureComputeConstants,
+ Timeouts timeouts, PollPeriod pollPeriod) {
+ String azureGroup = azureComputeConstants.azureResourceGroup();
+ return retry(new PublicIpAvailablePredicate(api, azureGroup), azureComputeConstants.operationTimeout(),
+ azureComputeConstants.operationPollInitialPeriod(), azureComputeConstants.operationPollMaxPeriod());
+ }
@VisibleForTesting
static class ActionDonePredicate implements Predicate<URI> {
@@ -290,5 +300,25 @@ public class AzureComputeServiceContextModule
return state == provisioningState;
}
}
+
+ @VisibleForTesting
+ static class PublicIpAvailablePredicate implements Predicate<String> {
+
+ private final AzureComputeApi api;
+ private final String azureGroup;
+
+ public PublicIpAvailablePredicate(AzureComputeApi api, String azureGroup) {
+ this.api = checkNotNull(api, "api must not be null");
+ this.azureGroup = checkNotNull(azureGroup, "azuregroup must not be null");
+ }
+
+ @Override
+ public boolean apply(String name) {
+ checkNotNull(name, "name cannot be null");
+ PublicIPAddress publicIp = api.getPublicIPAddressApi(azureGroup).get(name);
+ if (publicIp == null) return false;
+ return publicIp.properties().provisioningState().equalsIgnoreCase("Succeeded");
+ }
+ }
}
http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/4045789e/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/compute/functions/VMImageToImage.java
----------------------------------------------------------------------
diff --git a/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/compute/functions/VMImageToImage.java b/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/compute/functions/VMImageToImage.java
index 1d2a49d..5c10654 100644
--- a/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/compute/functions/VMImageToImage.java
+++ b/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/compute/functions/VMImageToImage.java
@@ -37,7 +37,6 @@ import static com.google.common.base.Preconditions.checkNotNull;
public class VMImageToImage implements Function<VMImage, Image> {
- private static final String UNRECOGNIZED = "UNRECOGNIZED";
private static final String UBUNTU = "Ubuntu";
private static final String WINDOWS = "Windows";
private static final String OPENLOGIC = "openLogic";
@@ -45,8 +44,8 @@ public class VMImageToImage implements Function<VMImage, Image> {
private static final String COREOS = "CoreOS";
private static final String OPENSUSE = "openSUSE";
private static final String SUSE = "SUSE";
- private static final String SQL_SERVER = "SQL Server";
- private static final String ORACLE_lINUX = "Oracle Linux";
+ private static final String SLES = "SLES";
+ private static final String ORACLE_lINUX = "Oracle-Linux";
private static final String RHEL = "RHEL";
private final Supplier<Set<? extends org.jclouds.domain.Location>> locations;
@@ -139,11 +138,11 @@ public class VMImageToImage implements Function<VMImage, Image> {
final String label = image.offer();
OsFamily family = OsFamily.UNRECOGNIZED;
- if (label.contains(CENTOS)) {
+ if (label.contains(CENTOS) || label.contains(OPENLOGIC)) {
family = OsFamily.CENTOS;
- } else if (label.contains(OPENLOGIC)) {
- family = OsFamily.CENTOS;
- } else if (label.contains(SUSE)) {
+ } else if (label.contains(COREOS)) {
+ family = OsFamily.COREOS;
+ } else if (label.contains(SUSE) || label.contains(SLES) || label.contains(OPENSUSE)) {
family = OsFamily.SUSE;
} else if (label.contains(UBUNTU)) {
family = OsFamily.UBUNTU;
http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/4045789e/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/compute/functions/VirtualMachineToNodeMetadata.java
----------------------------------------------------------------------
diff --git a/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/compute/functions/VirtualMachineToNodeMetadata.java b/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/compute/functions/VirtualMachineToNodeMetadata.java
index 8075f02..475d584 100644
--- a/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/compute/functions/VirtualMachineToNodeMetadata.java
+++ b/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/compute/functions/VirtualMachineToNodeMetadata.java
@@ -25,12 +25,17 @@ import javax.inject.Inject;
import javax.inject.Named;
import org.jclouds.azurecompute.arm.AzureComputeApi;
+import org.jclouds.azurecompute.arm.compute.config.AzureComputeServiceContextModule.AzureComputeConstants;
import org.jclouds.azurecompute.arm.domain.IdReference;
import org.jclouds.azurecompute.arm.domain.ImageReference;
import org.jclouds.azurecompute.arm.domain.IpConfiguration;
import org.jclouds.azurecompute.arm.domain.NetworkInterfaceCard;
import org.jclouds.azurecompute.arm.domain.VirtualMachine;
+import org.jclouds.azurecompute.arm.domain.VirtualMachineInstance;
import org.jclouds.azurecompute.arm.domain.VirtualMachineProperties;
+import org.jclouds.azurecompute.arm.domain.VirtualMachineInstance.VirtualMachineStatus;
+import org.jclouds.azurecompute.arm.domain.VirtualMachineInstance.VirtualMachineStatus.PowerState;
+import org.jclouds.azurecompute.arm.domain.VirtualMachineProperties.ProvisioningState;
import org.jclouds.collect.Memoized;
import org.jclouds.compute.domain.Hardware;
import org.jclouds.compute.domain.Image;
@@ -43,7 +48,10 @@ import org.jclouds.domain.Location;
import org.jclouds.domain.LoginCredentials;
import org.jclouds.logging.Logger;
+import autovalue.shaded.com.google.common.common.base.Joiner;
+
import com.google.common.base.Function;
+import com.google.common.base.Functions;
import com.google.common.base.Optional;
import com.google.common.base.Predicate;
import com.google.common.base.Splitter;
@@ -54,6 +62,7 @@ import com.google.common.collect.Lists;
import static com.google.common.base.Preconditions.checkNotNull;
import static com.google.common.collect.Iterables.find;
+import static com.google.common.collect.Iterables.transform;
public class VirtualMachineToNodeMetadata implements Function<VirtualMachine, NodeMetadata> {
@@ -67,19 +76,30 @@ public class VirtualMachineToNodeMetadata implements Function<VirtualMachine, N
//
// To get details about the resource(s) deployed via template, one needs to query the
// various resources after the deployment has "SUCCEEDED".
- private static final Map<VirtualMachineProperties.ProvisioningState, NodeMetadata.Status> STATUS_TO_NODESTATUS =
- ImmutableMap.<VirtualMachineProperties.ProvisioningState, NodeMetadata.Status>builder().
- put(VirtualMachineProperties.ProvisioningState.ACCEPTED, NodeMetadata.Status.PENDING).
- put(VirtualMachineProperties.ProvisioningState.READY, NodeMetadata.Status.PENDING).
- put(VirtualMachineProperties.ProvisioningState.CREATING, NodeMetadata.Status.PENDING).
- put(VirtualMachineProperties.ProvisioningState.RUNNING, NodeMetadata.Status.PENDING).
- put(VirtualMachineProperties.ProvisioningState.CANCELED, NodeMetadata.Status.TERMINATED).
- put(VirtualMachineProperties.ProvisioningState.FAILED, NodeMetadata.Status.ERROR).
- put(VirtualMachineProperties.ProvisioningState.DELETED, NodeMetadata.Status.TERMINATED).
- put(VirtualMachineProperties.ProvisioningState.SUCCEEDED, NodeMetadata.Status.RUNNING).
- put(VirtualMachineProperties.ProvisioningState.UNRECOGNIZED, NodeMetadata.Status.UNRECOGNIZED).
- build();
-
+ private static final Function<VirtualMachineProperties.ProvisioningState, NodeMetadata.Status> PROVISIONINGSTATE_TO_NODESTATUS = Functions
+ .forMap(
+ ImmutableMap.<VirtualMachineProperties.ProvisioningState, NodeMetadata.Status> builder()
+ .put(VirtualMachineProperties.ProvisioningState.ACCEPTED, NodeMetadata.Status.PENDING)
+ .put(VirtualMachineProperties.ProvisioningState.READY, NodeMetadata.Status.PENDING)
+ .put(VirtualMachineProperties.ProvisioningState.CREATING, NodeMetadata.Status.PENDING)
+ .put(VirtualMachineProperties.ProvisioningState.RUNNING, NodeMetadata.Status.PENDING)
+ .put(VirtualMachineProperties.ProvisioningState.UPDATING, NodeMetadata.Status.PENDING)
+ .put(VirtualMachineProperties.ProvisioningState.SUCCEEDED, NodeMetadata.Status.RUNNING)
+ .put(VirtualMachineProperties.ProvisioningState.DELETED, NodeMetadata.Status.TERMINATED)
+ .put(VirtualMachineProperties.ProvisioningState.CANCELED, NodeMetadata.Status.TERMINATED)
+ .put(VirtualMachineProperties.ProvisioningState.FAILED, NodeMetadata.Status.ERROR)
+ .put(VirtualMachineProperties.ProvisioningState.UNRECOGNIZED, NodeMetadata.Status.UNRECOGNIZED)
+ .build(), NodeMetadata.Status.UNRECOGNIZED);
+
+ private static final Function<VirtualMachineStatus.PowerState, NodeMetadata.Status> POWERSTATE_TO_NODESTATUS = Functions
+ .forMap(
+ ImmutableMap.<PowerState, NodeMetadata.Status> builder()
+ .put(PowerState.RUNNING, NodeMetadata.Status.RUNNING)
+ .put(PowerState.STOPPED, NodeMetadata.Status.SUSPENDED)
+ .put(PowerState.UNRECOGNIZED, NodeMetadata.Status.UNRECOGNIZED).build(),
+ NodeMetadata.Status.UNRECOGNIZED);
+
+ private final String azureGroup;
private final AzureComputeApi api;
private final GroupNamingConvention nodeNamingConvention;
private final Supplier<Map<String, ? extends Image>> images;
@@ -88,18 +108,17 @@ public class VirtualMachineToNodeMetadata implements Function<VirtualMachine, N
private final Map<String, Credentials> credentialStore;
@Inject
- VirtualMachineToNodeMetadata(
- AzureComputeApi api,
- GroupNamingConvention.Factory namingConvention,
- Supplier<Map<String, ? extends Image>> images,
- Supplier<Map<String, ? extends Hardware>> hardwares,
- @Memoized Supplier<Set<? extends Location>> locations, Map<String, Credentials> credentialStore) {
+ VirtualMachineToNodeMetadata(AzureComputeApi api, GroupNamingConvention.Factory namingConvention,
+ Supplier<Map<String, ? extends Image>> images, Supplier<Map<String, ? extends Hardware>> hardwares,
+ @Memoized Supplier<Set<? extends Location>> locations, Map<String, Credentials> credentialStore,
+ final AzureComputeConstants azureComputeConstants) {
this.api = api;
this.nodeNamingConvention = namingConvention.createWithoutPrefix();
this.images = checkNotNull(images, "images cannot be null");
this.locations = checkNotNull(locations, "locations cannot be null");
this.hardwares = checkNotNull(hardwares, "hardwares cannot be null");
this.credentialStore = credentialStore;
+ this.azureGroup = azureComputeConstants.azureResourceGroup();
}
@Override
public NodeMetadata apply(VirtualMachine virtualMachine) {
@@ -110,7 +129,21 @@ public class VirtualMachineToNodeMetadata implements Function<VirtualMachine, N
builder.hostname(virtualMachine.name());
String group = this.nodeNamingConvention.extractGroup(virtualMachine.name());
builder.group(group);
- builder.status(getStatus(virtualMachine.properties().provisioningState()));
+
+ ProvisioningState provisioningState = virtualMachine.properties().provisioningState();
+ if (ProvisioningState.SUCCEEDED.equals(provisioningState)) {
+ // If the provisioning succeeded, we need to query the *real* status of the VM
+ VirtualMachineInstance instanceDetails = api.getVirtualMachineApi(azureGroup).getInstanceDetails(virtualMachine.name());
+ builder.status(POWERSTATE_TO_NODESTATUS.apply(instanceDetails.powerState()));
+ builder.backendStatus(Joiner.on(',').join(transform(instanceDetails.statuses(), new Function<VirtualMachineStatus, String>() {
+ @Override public String apply(VirtualMachineStatus input) {
+ return input.code();
+ }
+ })));
+ } else {
+ builder.status(PROVISIONINGSTATE_TO_NODESTATUS.apply(provisioningState));
+ builder.backendStatus(provisioningState.name());
+ }
Credentials credentials = credentialStore.get("node#" + virtualMachine.name());
builder.credentials(LoginCredentials.fromCredentials(credentials));
@@ -177,10 +210,6 @@ public class VirtualMachineToNodeMetadata implements Function<VirtualMachine, N
return publicIpAddresses;
}
- private NodeMetadata.Status getStatus(VirtualMachineProperties.ProvisioningState provisioningState) {
- return STATUS_TO_NODESTATUS.get(provisioningState);
- }
-
protected Location getLocation(final String locationName) {
return find(locations.get(), new Predicate<Location>() {
@Override
http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/4045789e/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/domain/VirtualMachineInstance.java
----------------------------------------------------------------------
diff --git a/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/domain/VirtualMachineInstance.java b/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/domain/VirtualMachineInstance.java
index b0ed6d5..4e4a90b 100644
--- a/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/domain/VirtualMachineInstance.java
+++ b/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/domain/VirtualMachineInstance.java
@@ -16,13 +16,23 @@
*/
package org.jclouds.azurecompute.arm.domain;
-import com.google.auto.value.AutoValue;
-import com.google.common.collect.ImmutableList;
+import static com.google.common.collect.Iterables.filter;
+import static com.google.common.collect.Iterables.getFirst;
+import static com.google.common.collect.Iterables.transform;
+import static org.jclouds.util.Predicates2.startsWith;
+
+import java.util.Date;
import java.util.List;
+
+import org.jclouds.azurecompute.arm.domain.VirtualMachineInstance.VirtualMachineStatus.PowerState;
+import org.jclouds.azurecompute.arm.domain.VirtualMachineProperties.ProvisioningState;
+import org.jclouds.azurecompute.arm.util.GetEnumValue;
import org.jclouds.javax.annotation.Nullable;
import org.jclouds.json.SerializedNames;
-import java.util.Date;
+import com.google.auto.value.AutoValue;
+import com.google.common.base.Function;
+import com.google.common.collect.ImmutableList;
/**
* A virtual machine instance view that is valid for your subscription.
@@ -32,6 +42,19 @@ public abstract class VirtualMachineInstance {
@AutoValue
public abstract static class VirtualMachineStatus {
+
+ public static final String PROVISIONING_STATE_PREFIX = "ProvisioningState/";
+ public static final String POWER_STATE_PREFIX = "PowerState/";
+
+ public enum PowerState {
+ RUNNING,
+ STOPPED,
+ UNRECOGNIZED;
+
+ public static PowerState fromValue(final String text) {
+ return (PowerState) GetEnumValue.fromValueOrDefault(text, PowerState.UNRECOGNIZED);
+ }
+ }
@Nullable
public abstract String code();
@@ -61,6 +84,26 @@ public abstract class VirtualMachineInstance {
@Nullable
public abstract List<VirtualMachineStatus> statuses();
+
+ public ProvisioningState provisioningState() {
+ return ProvisioningState.fromValue(firstStatus(VirtualMachineStatus.PROVISIONING_STATE_PREFIX));
+ }
+
+ public PowerState powerState() {
+ return PowerState.fromValue(firstStatus(VirtualMachineStatus.POWER_STATE_PREFIX));
+ }
+
+ private String firstStatus(final String type) {
+ return getFirst(transform(filter(transform(statuses(), new Function<VirtualMachineStatus, String>() {
+ @Override public String apply(VirtualMachineStatus input) {
+ return input.code();
+ }
+ }), startsWith(type)), new Function<String, String>() {
+ @Override public String apply(String input) {
+ return input.substring(type.length());
+ }
+ }), null);
+ }
@SerializedNames({"platformUpdateDomain", "platformFaultDomain", "statuses"})
http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/4045789e/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/domain/VirtualMachineProperties.java
----------------------------------------------------------------------
diff --git a/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/domain/VirtualMachineProperties.java b/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/domain/VirtualMachineProperties.java
index e59f7c1..eb9520a 100644
--- a/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/domain/VirtualMachineProperties.java
+++ b/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/domain/VirtualMachineProperties.java
@@ -37,6 +37,7 @@ public abstract class VirtualMachineProperties {
DELETED,
SUCCEEDED,
RUNNING,
+ UPDATING,
UNRECOGNIZED;
public static ProvisioningState fromValue(final String text) {
http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/4045789e/azurecompute-arm/src/test/java/org/jclouds/azurecompute/arm/compute/AzureComputeServiceLiveTest.java
----------------------------------------------------------------------
diff --git a/azurecompute-arm/src/test/java/org/jclouds/azurecompute/arm/compute/AzureComputeServiceLiveTest.java b/azurecompute-arm/src/test/java/org/jclouds/azurecompute/arm/compute/AzureComputeServiceLiveTest.java
index 9caea43..66a6e0e 100644
--- a/azurecompute-arm/src/test/java/org/jclouds/azurecompute/arm/compute/AzureComputeServiceLiveTest.java
+++ b/azurecompute-arm/src/test/java/org/jclouds/azurecompute/arm/compute/AzureComputeServiceLiveTest.java
@@ -17,12 +17,14 @@
package org.jclouds.azurecompute.arm.compute;
import static com.google.common.base.Preconditions.checkNotNull;
+import static org.jclouds.azurecompute.arm.config.AzureComputeProperties.IMAGE_PUBLISHERS;
import static org.jclouds.azurecompute.arm.config.AzureComputeProperties.RESOURCE_GROUP_NAME;
import static org.jclouds.compute.config.ComputeServiceProperties.TIMEOUT_NODE_RUNNING;
import static org.jclouds.compute.config.ComputeServiceProperties.TIMEOUT_NODE_SUSPENDED;
import static org.jclouds.compute.config.ComputeServiceProperties.TIMEOUT_NODE_TERMINATED;
import static org.jclouds.compute.config.ComputeServiceProperties.TIMEOUT_PORT_OPEN;
import static org.jclouds.compute.config.ComputeServiceProperties.TIMEOUT_SCRIPT_COMPLETE;
+import static org.jclouds.compute.options.TemplateOptions.Builder.authorizePublicKey;
import static org.jclouds.location.reference.LocationConstants.PROPERTY_REGIONS;
import java.util.Properties;
@@ -31,10 +33,16 @@ import java.util.concurrent.TimeUnit;
import org.jclouds.azurecompute.arm.AzureComputeProviderMetadata;
import org.jclouds.azurecompute.arm.internal.AzureLiveTestUtils;
import org.jclouds.compute.domain.NodeMetadata;
+import org.jclouds.compute.domain.Template;
+import org.jclouds.compute.domain.TemplateBuilder;
import org.jclouds.compute.internal.BaseComputeServiceLiveTest;
import org.jclouds.logging.config.LoggingModule;
import org.jclouds.logging.slf4j.config.SLF4JLoggingModule;
import org.jclouds.providers.ProviderMetadata;
+import org.jclouds.scriptbuilder.domain.Statement;
+import org.jclouds.scriptbuilder.domain.Statements;
+import org.jclouds.scriptbuilder.statements.java.InstallJDK;
+import org.jclouds.scriptbuilder.statements.login.AdminAccess;
import org.jclouds.sshj.config.SshjSshClientModule;
import org.testng.annotations.Test;
@@ -51,7 +59,7 @@ public class AzureComputeServiceLiveTest extends BaseComputeServiceLiveTest {
public AzureComputeServiceLiveTest() {
provider = "azurecompute-arm";
nonBlockDurationSeconds = 300;
- group = "az-u";
+ group = "az-r";
}
@Override
@@ -78,8 +86,9 @@ public class AzureComputeServiceLiveTest extends BaseComputeServiceLiveTest {
properties.setProperty(TIMEOUT_PORT_OPEN, defaultTimeout);
properties.setProperty(TIMEOUT_NODE_TERMINATED, defaultTimeout);
properties.setProperty(TIMEOUT_NODE_SUSPENDED, defaultTimeout);
- properties.put(RESOURCE_GROUP_NAME, "a2");
- properties.put(PROPERTY_REGIONS, "northeurope");
+ properties.put(RESOURCE_GROUP_NAME, "jc");
+ properties.put(PROPERTY_REGIONS, "eastus");
+ properties.put(IMAGE_PUBLISHERS, "Canonical");
AzureLiveTestUtils.defaultProperties(properties);
checkNotNull(setIfTestSystemPropertyPresent(properties, "oauth.endpoint"), "test.oauth.endpoint");
@@ -88,25 +97,27 @@ public class AzureComputeServiceLiveTest extends BaseComputeServiceLiveTest {
}
@Override
+ protected TemplateBuilder templateBuilder() {
+ return super.templateBuilder().options(
+ authorizePublicKey(keyPair.get("public")).overrideLoginPrivateKey(keyPair.get("private")));
+ }
+
+ @Override
protected void checkUserMetadataContains(NodeMetadata node, ImmutableMap<String, String> userMetadata) {
// User metadata not yet supported
}
@Override
+ protected Template addRunScriptToTemplate(Template template) {
+ template.getOptions().runScript(
+ Statements.newStatementList(new Statement[] { AdminAccess.standard(), Statements.exec("sleep 50"),
+ InstallJDK.fromOpenJDK() }));
+ return template;
+ }
+
+ @Override
protected void checkTagsInNodeEquals(NodeMetadata node, ImmutableSet<String> tags) {
// Tags not yet supported
}
-
-
-
-// @Override
-// protected Template addRunScriptToTemplate(Template template) {
-// template.getOptions().runScript(Statements.newStatementList(new Statement[]{AdminAccess.standard(), Statements.exec("sleep 50"), InstallJDK.fromOpenJDK()}));
-// return template;
-// }
-
-// @Override
-// protected Map<? extends NodeMetadata, ExecResponse> runScriptWithCreds(String group, OperatingSystem os, LoginCredentials creds) throws RunScriptOnNodesException {
-// return this.client.runScriptOnNodesMatching(NodePredicates.runningInGroup(group), Statements.newStatementList(Statements.exec("sleep 50"), InstallJDK.fromOpenJDK()), org.jclouds.compute.options.TemplateOptions.Builder.overrideLoginCredentials(creds).nameTask("runScriptWithCreds"));
-// }
+
}
http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/4045789e/azurecompute-arm/src/test/java/org/jclouds/azurecompute/arm/features/VirtualMachineApiLiveTest.java
----------------------------------------------------------------------
diff --git a/azurecompute-arm/src/test/java/org/jclouds/azurecompute/arm/features/VirtualMachineApiLiveTest.java b/azurecompute-arm/src/test/java/org/jclouds/azurecompute/arm/features/VirtualMachineApiLiveTest.java
index 087c6ef..9cc6089 100644
--- a/azurecompute-arm/src/test/java/org/jclouds/azurecompute/arm/features/VirtualMachineApiLiveTest.java
+++ b/azurecompute-arm/src/test/java/org/jclouds/azurecompute/arm/features/VirtualMachineApiLiveTest.java
@@ -16,6 +16,10 @@
*/
package org.jclouds.azurecompute.arm.features;
+import static org.jclouds.util.Predicates2.retry;
+import static org.testng.Assert.assertNotNull;
+import static org.testng.Assert.assertTrue;
+
import java.net.URI;
import java.util.ArrayList;
import java.util.Arrays;
@@ -41,6 +45,7 @@ import org.jclouds.azurecompute.arm.domain.Subnet;
import org.jclouds.azurecompute.arm.domain.VHD;
import org.jclouds.azurecompute.arm.domain.VirtualMachine;
import org.jclouds.azurecompute.arm.domain.VirtualMachineInstance;
+import org.jclouds.azurecompute.arm.domain.VirtualMachineInstance.VirtualMachineStatus.PowerState;
import org.jclouds.azurecompute.arm.domain.VirtualMachineProperties;
import org.jclouds.azurecompute.arm.internal.BaseAzureComputeApiLiveTest;
import org.testng.Assert;
@@ -48,17 +53,11 @@ import org.testng.annotations.AfterClass;
import org.testng.annotations.BeforeClass;
import org.testng.annotations.Test;
-import com.google.common.base.Function;
import com.google.common.base.Predicate;
-import com.google.common.collect.FluentIterable;
import com.google.common.collect.ImmutableMap;
import com.google.common.collect.Iterables;
import com.google.gson.internal.LinkedTreeMap;
-import static org.jclouds.util.Predicates2.retry;
-import static org.testng.Assert.assertNotNull;
-import static org.testng.Assert.assertTrue;
-
@Test(groups = "live", testName = "VirtualMachineApiLiveTest")
public class VirtualMachineApiLiveTest extends BaseAzureComputeApiLiveTest {
@@ -146,21 +145,21 @@ public class VirtualMachineApiLiveTest extends BaseAzureComputeApiLiveTest {
@Test(dependsOnMethods = "testStart")
public void testStop() {
api().stop(vmName);
- assertTrue(stateReached("PowerState", "VM stopped"), "stop operation did not complete in the configured timeout");
+ assertTrue(stateReached(PowerState.STOPPED), "stop operation did not complete in the configured timeout");
}
@Test(dependsOnMethods = "testGet")
public void testStart() {
api().start(vmName);
- assertTrue(stateReached("PowerState", "VM running"), "start operation did not complete in the configured timeout");
+ assertTrue(stateReached(PowerState.RUNNING), "start operation did not complete in the configured timeout");
}
@Test(dependsOnMethods = "testStop")
public void testRestart() {
api().start(vmName);
- assertTrue(stateReached("PowerState", "VM running"), "start operation did not complete in the configured timeout");
+ assertTrue(stateReached(PowerState.RUNNING), "start operation did not complete in the configured timeout");
api().restart(vmName);
- assertTrue(stateReached("PowerState", "VM running"), "restart operation did not complete in the configured timeout");
+ assertTrue(stateReached(PowerState.RUNNING), "restart operation did not complete in the configured timeout");
}
@Test(dependsOnMethods = "testCreate")
@@ -180,7 +179,7 @@ public class VirtualMachineApiLiveTest extends BaseAzureComputeApiLiveTest {
@Test(dependsOnMethods = "testRestart")
public void testGeneralize() throws IllegalStateException {
api().stop(vmName);
- assertTrue(stateReached("PowerState", "VM stopped"), "restart operation did not complete in the configured timeout");
+ assertTrue(stateReached(PowerState.STOPPED), "restart operation did not complete in the configured timeout");
api().generalize(vmName);
}
@@ -261,33 +260,15 @@ public class VirtualMachineApiLiveTest extends BaseAzureComputeApiLiveTest {
return api.getNetworkInterfaceCardApi(resourceGroupName).createOrUpdate(networkInterfaceCardName, locationName, networkInterfaceCardProperties, tags);
}
- private boolean waitForState(String name, final String state, final String displayStatus) {
- return FluentIterable.from(api().getInstanceDetails(name).statuses())
- .filter(new Predicate<VirtualMachineInstance.VirtualMachineStatus>() {
- @Override
- public boolean apply(VirtualMachineInstance.VirtualMachineStatus input) {
- return input.code().substring(0, 10).equals(state);
- }
- })
- .transform(new Function<VirtualMachineInstance.VirtualMachineStatus, String>() {
- @Override
- public String apply(VirtualMachineInstance.VirtualMachineStatus input) {
- return input.displayStatus();
- }
- })
- .anyMatch(new Predicate<String>() {
- @Override
- public boolean apply(String input) {
- return input.equals(displayStatus);
- }
- });
+ private boolean waitForState(String name, final PowerState state) {
+ return api().getInstanceDetails(name).powerState().equals(state);
}
- private boolean stateReached(final String state, final String displayStatus) {
+ private boolean stateReached(final PowerState state) {
return retry(new Predicate<String>() {
@Override
public boolean apply(String name) {
- return waitForState(name, state, displayStatus);
+ return waitForState(name, state);
}
}, 60 * 4 * 1000).apply(vmName);
}