You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@jclouds.apache.org by an...@apache.org on 2016/10/05 14:04:19 UTC
jclouds-labs git commit: wip
Repository: jclouds-labs
Updated Branches:
refs/heads/fix/AzureTemplateBuilderLiveTest 8d0cd4d85 -> 5b832bfc6
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/5b832bfc
Tree: http://git-wip-us.apache.org/repos/asf/jclouds-labs/tree/5b832bfc
Diff: http://git-wip-us.apache.org/repos/asf/jclouds-labs/diff/5b832bfc
Branch: refs/heads/fix/AzureTemplateBuilderLiveTest
Commit: 5b832bfc663aef9c4f4cf42c4a6839ac36f79bf9
Parents: 8d0cd4d
Author: Andrea Turli <an...@gmail.com>
Authored: Wed Oct 5 12:45:06 2016 +0200
Committer: Andrea Turli <an...@gmail.com>
Committed: Wed Oct 5 12:45:19 2016 +0200
----------------------------------------------------------------------
.../arm/AzureComputeProviderMetadata.java | 8 +-
.../arm/compute/AzureComputeServiceAdapter.java | 154 ++++++++++---------
.../CreateResourceGroupThenCreateNodes.java | 23 ++-
.../compute/AzureComputeServiceLiveTest.java | 14 +-
4 files changed, 102 insertions(+), 97 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/5b832bfc/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 9eeaac9..5224410 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
@@ -29,6 +29,9 @@ import static org.jclouds.azurecompute.arm.config.AzureComputeProperties.RESOURC
import static org.jclouds.azurecompute.arm.config.AzureComputeProperties.STORAGE_API_VERSION;
import static org.jclouds.azurecompute.arm.config.AzureComputeProperties.TCP_RULE_FORMAT;
import static org.jclouds.azurecompute.arm.config.AzureComputeProperties.TCP_RULE_REGEXP;
+import static org.jclouds.compute.config.ComputeServiceProperties.IMAGE_AUTHENTICATE_SUDO;
+import static org.jclouds.compute.config.ComputeServiceProperties.IMAGE_LOGIN_USER;
+import static org.jclouds.compute.config.ComputeServiceProperties.TEMPLATE;
import static org.jclouds.compute.config.ComputeServiceProperties.TIMEOUT_NODE_TERMINATED;
import static org.jclouds.oauth.v2.config.CredentialType.CLIENT_CREDENTIALS_SECRET;
import static org.jclouds.oauth.v2.config.OAuthProperties.CREDENTIAL_TYPE;
@@ -91,8 +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("jclouds.image.login-user", "jclouds:Password1!");
- properties.put("jclouds.image.authenticate-sudo", "true");
+ 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(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/5b832bfc/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 5ee484d..b50e5f0 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,7 +16,6 @@
*/
package org.jclouds.azurecompute.arm.compute;
-import java.util.Arrays;
import java.util.Collection;
import java.util.List;
import java.util.Set;
@@ -27,6 +26,7 @@ import javax.inject.Named;
import javax.inject.Singleton;
import org.jclouds.azurecompute.arm.AzureComputeApi;
+import org.jclouds.azurecompute.arm.AzureComputeProviderMetadata;
import org.jclouds.azurecompute.arm.compute.config.AzureComputeServiceContextModule.AzureComputeConstants;
import org.jclouds.azurecompute.arm.compute.functions.VMImageToImage;
import org.jclouds.azurecompute.arm.compute.options.AzureTemplateOptions;
@@ -82,6 +82,9 @@ 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;
@@ -132,7 +135,7 @@ public class AzureComputeServiceAdapter implements ComputeServiceAdapter<Virtual
NetworkInterfaceCard nic = createNetworkInterfaceCard(subnetId, name, locationName);
StorageProfile storageProfile = createStorageProfile(name, template.getImage(), templateOptions.getBlob());
HardwareProfile hardwareProfile = HardwareProfile.builder().vmSize(template.getHardware().getId()).build();
- OSProfile osProfile = createOsProfile(name, templateOptions.getLoginUser(), templateOptions.getPublicKey());
+ OSProfile osProfile = createOsProfile(name, templateOptions);
NetworkProfile networkProfile = NetworkProfile.builder().networkInterfaces(ImmutableList.of(IdReference.create(nic.id()))).build();
VirtualMachineProperties virtualMachineProperties = VirtualMachineProperties.builder()
.licenseType(null) // TODO
@@ -152,67 +155,6 @@ public class AzureComputeServiceAdapter implements ComputeServiceAdapter<Virtual
return new NodeAndInitialCredentials<VirtualMachine>(virtualMachine, name, null);
}
- private OSProfile createOsProfile(String computerName, String loginUser, String publicKey) {
- String adminUsername = Objects.firstNonNull(loginUser, "jclouds");
- OSProfile.Builder builder = OSProfile.builder().adminUsername(adminUsername).computerName(computerName);
- if (publicKey !=null) {
- OSProfile.LinuxConfiguration linuxConfiguration = OSProfile.LinuxConfiguration.create("true",
- OSProfile.LinuxConfiguration.SSH.create(Arrays.asList(
- OSProfile.LinuxConfiguration.SSH.SSHPublicKey.create(
- String.format("/home/%s/.ssh/authorized_keys", adminUsername),
- publicKey)
- ))
- );
- builder.linuxConfiguration(linuxConfiguration);
- }
- return builder.build();
- }
-
- private NetworkInterfaceCard createNetworkInterfaceCard(String subnetId, String name, String locationName) {
- final PublicIPAddressApi ipApi = api.getPublicIPAddressApi(azureGroup);
-
- PublicIPAddressProperties properties =
- PublicIPAddressProperties.builder()
- .publicIPAllocationMethod("Static")
- .idleTimeoutInMinutes(4)
- .build();
-
- String publicIpAddressName = "public-address-" + name;
- PublicIPAddress ip = ipApi.createOrUpdate(publicIpAddressName, locationName, ImmutableMap.of("testkey", "testvalue"), 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);
-
- final NetworkInterfaceCardProperties networkInterfaceCardProperties =
- NetworkInterfaceCardProperties.builder()
- .ipConfigurations(ImmutableList.of(
- IpConfiguration.builder()
- .name("ipConfig-" + name)
- .properties(IpConfigurationProperties.builder()
- .privateIPAllocationMethod("Dynamic")
- .publicIPAddress(IdReference.create(ip.id()))
- .subnet(IdReference.create(subnetId))
- .build())
- .build()))
- .build();
-
- String networkInterfaceCardName = "jc-nic-" + name;
- return api.getNetworkInterfaceCardApi(azureGroup).createOrUpdate(networkInterfaceCardName, locationName, networkInterfaceCardProperties, ImmutableMap.of("jclouds", "livetest"));
- }
-
- private StorageProfile createStorageProfile(String name, Image image, String blob) {
- ImageReference imageReference = ImageReference.builder()
- .publisher(image.getProviderId())
- .offer(image.getName())
- .sku(image.getVersion())
- .version("latest")
- .build();
- VHD vhd = VHD.create(blob + "vhds/" + name + ".vhd");
- OSDisk osDisk = OSDisk.create(null, name, vhd, "ReadWrite", "FromImage", null);
- return StorageProfile.create(imageReference, osDisk, ImmutableList.<DataDisk>of()); }
-
@Override
public Iterable<VMHardware> listHardwareProfiles() {
@@ -295,10 +237,13 @@ public class AzureComputeServiceAdapter implements ComputeServiceAdapter<Virtual
List<StorageService> storages = api.getStorageAccountApi(azureGroup).list();
for (StorageService storage : storages) {
String name = storage.name();
- String key = api.getStorageAccountApi(azureGroup).getKeys(name).key1();
+ StorageService storageService = api.getStorageAccountApi(azureGroup).get(name);
+ if (storageService != null && storageService.storageServiceProperties().provisioningState().equals("Succeded")) {
+ String key = api.getStorageAccountApi(azureGroup).getKeys(name).key1();
List<VMImage> images = BlobHelper.getImages("jclouds", azureGroup, storage.name(), key,
- "custom", storage.location());
+ "custom", storage.location());
osImages.addAll(images);
+ }
}
return osImages;
}
@@ -394,14 +339,81 @@ public class AzureComputeServiceAdapter implements ComputeServiceAdapter<Virtual
@Override
public Iterable<VirtualMachine> listNodesByIds(final Iterable<String> ids) {
- return null; // TODO
- /*
- return Iterables.filter(listNodes(), new Predicate<VMDeployment>() {
+ return filter(listNodes(), new Predicate<VirtualMachine>() {
@Override
- public boolean apply(final VMDeployment input) {
- return Iterables.contains(ids, input.virtualMachine().name());
+ public boolean apply(VirtualMachine virtualMachine) {
+ return contains(ids, virtualMachine.id());
}
});
- */
+ }
+
+
+ private OSProfile createOsProfile(String computerName, AzureTemplateOptions templateOptions) {
+ Iterable<String> splittedImageLoginUser = Splitter.on(":").split(AzureComputeProviderMetadata.defaultProperties().getProperty(IMAGE_LOGIN_USER));
+ String defaultLoginUser = Iterables.get(splittedImageLoginUser, 0);
+ String defaultLoginPassword = Iterables.get(splittedImageLoginUser, 1);
+ String adminUsername = Objects.firstNonNull(templateOptions.getLoginUser(), defaultLoginUser);
+ String adminPassword = Objects.firstNonNull(templateOptions.getLoginPassword(), defaultLoginPassword);
+ OSProfile.Builder builder = OSProfile.builder().adminUsername(adminUsername).computerName(computerName);
+ // prefer public key over password
+ if (templateOptions.getPublicKey() != null) {
+ OSProfile.LinuxConfiguration linuxConfiguration = OSProfile.LinuxConfiguration.create("true",
+ OSProfile.LinuxConfiguration.SSH.create(ImmutableList.of(
+ OSProfile.LinuxConfiguration.SSH.SSHPublicKey.create(
+ String.format("/home/%s/.ssh/authorized_keys", adminUsername),
+ templateOptions.getPublicKey())
+ ))
+ );
+ builder.linuxConfiguration(linuxConfiguration);
+ } else {
+ builder.adminPassword(adminPassword);
+ }
+ return builder.build();
+ }
+
+ private NetworkInterfaceCard createNetworkInterfaceCard(String subnetId, String name, String locationName) {
+ final PublicIPAddressApi ipApi = api.getPublicIPAddressApi(azureGroup);
+
+ PublicIPAddressProperties properties =
+ PublicIPAddressProperties.builder()
+ .publicIPAllocationMethod("Static")
+ .idleTimeoutInMinutes(4)
+ .build();
+
+ 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);
+
+ final NetworkInterfaceCardProperties networkInterfaceCardProperties =
+ NetworkInterfaceCardProperties.builder()
+ .ipConfigurations(ImmutableList.of(
+ IpConfiguration.builder()
+ .name("ipConfig-" + name)
+ .properties(IpConfigurationProperties.builder()
+ .privateIPAllocationMethod("Dynamic")
+ .publicIPAddress(IdReference.create(ip.id()))
+ .subnet(IdReference.create(subnetId))
+ .build())
+ .build()))
+ .build();
+
+ String networkInterfaceCardName = "jc-nic-" + name;
+ return api.getNetworkInterfaceCardApi(azureGroup).createOrUpdate(networkInterfaceCardName, locationName, networkInterfaceCardProperties, ImmutableMap.of("jclouds", name));
+ }
+
+ private StorageProfile createStorageProfile(String name, Image image, String blob) {
+ ImageReference imageReference = ImageReference.builder()
+ .publisher(image.getProviderId())
+ .offer(image.getName())
+ .sku(image.getVersion())
+ .version("latest")
+ .build();
+ VHD vhd = VHD.create(blob + "vhds/" + name + ".vhd");
+ OSDisk osDisk = OSDisk.create(null, name, vhd, "ReadWrite", "FromImage", null);
+ return StorageProfile.create(imageReference, osDisk, ImmutableList.<DataDisk>of());
}
}
http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/5b832bfc/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/compute/strategy/CreateResourceGroupThenCreateNodes.java
----------------------------------------------------------------------
diff --git a/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/compute/strategy/CreateResourceGroupThenCreateNodes.java b/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/compute/strategy/CreateResourceGroupThenCreateNodes.java
index a7900ec..0840689 100644
--- a/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/compute/strategy/CreateResourceGroupThenCreateNodes.java
+++ b/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/compute/strategy/CreateResourceGroupThenCreateNodes.java
@@ -175,14 +175,15 @@ public class CreateResourceGroupThenCreateNodes extends CreateNodesWithGroupEnco
StorageService storageService = api.getStorageAccountApi(resourceGroupName).get(storageAccountName);
if (storageService != null) return storageService;
- URI uri = api.getStorageAccountApi(resourceGroupName).create(storageAccountName, locationName, ImmutableMap.of("property_name",
- "property_value"), ImmutableMap.of("accountType", StorageService.AccountType.Standard_LRS.toString()));
+ URI uri = api.getStorageAccountApi(resourceGroupName).create(storageAccountName, locationName, ImmutableMap.of("jclouds",
+ name), ImmutableMap.of("accountType", StorageService.AccountType.Standard_LRS.toString()));
retry(new Predicate<URI>() {
@Override
public boolean apply(URI uri) {
return ParseJobStatus.JobStatus.DONE == api.getJobApi().jobStatus(uri);
}
- }, 60 * 1 * 1000 /* 1 minute timeout */).apply(uri);
+ }, 60 * 2 * 1000 /* 2 minutes timeout */).apply(uri);
+ // TODO check provisioning state of the primary
storageService = api.getStorageAccountApi(resourceGroupName).get(storageAccountName);
return storageService;
}
@@ -199,20 +200,18 @@ public class CreateResourceGroupThenCreateNodes extends CreateNodesWithGroupEnco
* If sanitized name is more than 24 characters, storage account is first 10 chars of sanitized name plus 4 random chars plus last 10 chars of sanitized name.
*/
public static String generateStorageAccountName(String name) {
- String storageAccountName = name.replaceAll("[^a-z0-9]", "");
- int nameLength = storageAccountName.length();
+ String random = UUID.randomUUID().toString().substring(0, 4);
+ String storageAccountName = new StringBuilder().append(name).append(random).toString();
+ String sanitizedStorageAccountName = storageAccountName.replaceAll("[^a-z0-9]", "");
+ int nameLength = sanitizedStorageAccountName.length();
if (nameLength >= 3 && nameLength <= 24) {
- return storageAccountName;
+ return sanitizedStorageAccountName;
}
- String random = UUID.randomUUID().toString().replaceAll("[^a-z0-9]", "").substring(0, 4);
- if (nameLength < 3) {
- storageAccountName = new StringBuilder().append(storageAccountName).append(random).toString();
- }
if (nameLength > 24) {
- storageAccountName = shorten(storageAccountName, random);
+ sanitizedStorageAccountName = shorten(storageAccountName, random);
}
- return storageAccountName;
+ return sanitizedStorageAccountName;
}
private static String shorten(String storageAccountName, String random) {
http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/5b832bfc/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 eaa9ac2..81edddb 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
@@ -22,14 +22,12 @@ import java.util.concurrent.ExecutionException;
import java.util.concurrent.TimeUnit;
import org.jclouds.azurecompute.arm.AzureComputeProviderMetadata;
-import org.jclouds.azurecompute.arm.compute.options.AzureTemplateOptions;
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.domain.TemplateBuilder;
import org.jclouds.compute.internal.BaseComputeServiceLiveTest;
import org.jclouds.compute.predicates.NodePredicates;
import org.jclouds.domain.LoginCredentials;
@@ -93,8 +91,8 @@ public class AzureComputeServiceLiveTest extends BaseComputeServiceLiveTest {
properties.setProperty(TIMEOUT_PORT_OPEN, scriptTimeout + "");
properties.setProperty(TIMEOUT_NODE_TERMINATED, scriptTimeout + "");
properties.setProperty(TIMEOUT_NODE_SUSPENDED, scriptTimeout + "");
- properties.put(RESOURCE_GROUP_NAME, "a4");
- properties.put(TEMPLATE, "locationId=northeurope");
+ 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");
AzureLiveTestUtils.defaultProperties(properties);
@@ -104,14 +102,6 @@ public class AzureComputeServiceLiveTest extends BaseComputeServiceLiveTest {
}
@Override
- protected Template buildTemplate(TemplateBuilder templateBuilder) {
- Template template = templateBuilder.imageVersionMatches("16.04.0-LTS").build();
- AzureTemplateOptions options = template.getOptions().as(AzureTemplateOptions.class);
- options.authorizePublicKey("ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDNnvPZ25wZK19grrbal6R5JP1hLRBUuNh86KxZVMAFkGd5ouVSgO9dFajHZ45Q4mbaTkdOiqf7otMLDzkaztEa7oLK7Jso0Y0LOi+nT4gf38rvbEF5mq069G9b9XqlNleaGnpLuTN54iEK8c4TWZxIJqgelHEHhjp7V1asmilBbpZDmwA5cTt9vGJIhqA/BptKH3folZKeAQjRa1ZRSwSQUnk9rBKn4PKSRDojVa9A9jKt4qboJh5q7ZjtE8z+665F/4TgLzElTXUA8+uUFGpuynMSmQEt301e18dXAl+vBr8fMiThcoVVbdVdqdjXsw75fMXPAgqhjrw8k3+0/4P9 andrea@bigmac.local");
- return template;
- }
-
- @Override
protected Template refreshTemplate() {
return this.template = addRunScriptToTemplate(this.buildTemplate(this.client.templateBuilder()));
}