Actually get tags to work, and get template spec creds to overrule in-built 
ones.


Project: http://git-wip-us.apache.org/repos/asf/jclouds/repo
Commit: http://git-wip-us.apache.org/repos/asf/jclouds/commit/41523c23
Tree: http://git-wip-us.apache.org/repos/asf/jclouds/tree/41523c23
Diff: http://git-wip-us.apache.org/repos/asf/jclouds/diff/41523c23

Branch: refs/heads/jclouds-756
Commit: 41523c23e3f921f8495ae5f687b34895de806939
Parents: 2ac80c0
Author: Andrew Bayer <[email protected]>
Authored: Tue Oct 21 16:32:15 2014 -0700
Committer: Andrew Bayer <[email protected]>
Committed: Tue Oct 21 16:32:15 2014 -0700

----------------------------------------------------------------------
 .../functions/VirtualMachineToNodeMetadata.java |  1 -
 .../CloudStackComputeServiceAdapter.java        | 30 +++++++++++++-------
 2 files changed, 19 insertions(+), 12 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/jclouds/blob/41523c23/apis/cloudstack/src/main/java/org/jclouds/cloudstack/compute/functions/VirtualMachineToNodeMetadata.java
----------------------------------------------------------------------
diff --git 
a/apis/cloudstack/src/main/java/org/jclouds/cloudstack/compute/functions/VirtualMachineToNodeMetadata.java
 
b/apis/cloudstack/src/main/java/org/jclouds/cloudstack/compute/functions/VirtualMachineToNodeMetadata.java
index a9596e3..c234f9c 100644
--- 
a/apis/cloudstack/src/main/java/org/jclouds/cloudstack/compute/functions/VirtualMachineToNodeMetadata.java
+++ 
b/apis/cloudstack/src/main/java/org/jclouds/cloudstack/compute/functions/VirtualMachineToNodeMetadata.java
@@ -136,7 +136,6 @@ public class VirtualMachineToNodeMetadata implements 
Function<VirtualMachine, No
       builder.hardware(new HardwareBuilder()
         .ids(from.getServiceOfferingId() + "")
         .name(from.getServiceOfferingName() + "")
-         // .tags() TODO
         .processors(ImmutableList.of(new Processor(from.getCpuCount(), 
from.getCpuSpeed())))
         .ram((int)from.getMemory())//
         .hypervisor(from.getHypervisor())//

http://git-wip-us.apache.org/repos/asf/jclouds/blob/41523c23/apis/cloudstack/src/main/java/org/jclouds/cloudstack/compute/strategy/CloudStackComputeServiceAdapter.java
----------------------------------------------------------------------
diff --git 
a/apis/cloudstack/src/main/java/org/jclouds/cloudstack/compute/strategy/CloudStackComputeServiceAdapter.java
 
b/apis/cloudstack/src/main/java/org/jclouds/cloudstack/compute/strategy/CloudStackComputeServiceAdapter.java
index 9387844..e723f7f 100644
--- 
a/apis/cloudstack/src/main/java/org/jclouds/cloudstack/compute/strategy/CloudStackComputeServiceAdapter.java
+++ 
b/apis/cloudstack/src/main/java/org/jclouds/cloudstack/compute/strategy/CloudStackComputeServiceAdapter.java
@@ -26,7 +26,6 @@ import static 
org.jclouds.cloudstack.options.DeployVirtualMachineOptions.Builder
 import static org.jclouds.cloudstack.options.ListTemplatesOptions.Builder.id;
 import static org.jclouds.cloudstack.predicates.TemplatePredicates.isReady;
 import static 
org.jclouds.cloudstack.predicates.ZonePredicates.supportsSecurityGroups;
-import static 
org.jclouds.compute.util.ComputeServiceUtils.metadataAndTagsAsValuesOfEmptyString;
 import static org.jclouds.ssh.SshKeys.fingerprintPrivateKey;
 
 import javax.annotation.Resource;
@@ -76,6 +75,7 @@ import org.jclouds.cloudstack.options.ListTemplatesOptions;
 import org.jclouds.cloudstack.strategy.BlockUntilJobCompletesAndReturnResult;
 import org.jclouds.collect.Memoized;
 import org.jclouds.compute.ComputeServiceAdapter;
+import 
org.jclouds.compute.config.GetLoginForProviderFromPropertiesAndStoreCredentialsOrReturnNull;
 import org.jclouds.compute.functions.GroupNamingConvention;
 import org.jclouds.compute.reference.ComputeServiceConstants;
 import org.jclouds.domain.Credentials;
@@ -109,6 +109,7 @@ public class CloudStackComputeServiceAdapter implements
    private final LoadingCache<ZoneAndName, SecurityGroup> securityGroupCache;
    private final LoadingCache<String, SshKeyPair> keyPairCache;
    private final GroupNamingConvention.Factory namingConvention;
+   private final 
GetLoginForProviderFromPropertiesAndStoreCredentialsOrReturnNull 
credentialsProvider;
 
    @Inject
    public CloudStackComputeServiceAdapter(CloudStackApi client, 
Predicate<String> jobComplete,
@@ -124,7 +125,8 @@ public class CloudStackComputeServiceAdapter implements
                                           Supplier<LoadingCache<String, Zone>> 
zoneIdToZone,
                                           LoadingCache<ZoneAndName, 
SecurityGroup> securityGroupCache,
                                           LoadingCache<String, SshKeyPair> 
keyPairCache,
-                                          GroupNamingConvention.Factory 
namingConvention) {
+                                          GroupNamingConvention.Factory 
namingConvention,
+                                          
GetLoginForProviderFromPropertiesAndStoreCredentialsOrReturnNull 
credentialsProvider) {
       this.client = checkNotNull(client, "client");
       this.jobComplete = checkNotNull(jobComplete, "jobComplete");
       this.networkSupplier = checkNotNull(networkSupplier, "networkSupplier");
@@ -141,6 +143,7 @@ public class CloudStackComputeServiceAdapter implements
       this.optionsConverters = optionsConverters;
       this.zoneIdToZone = zoneIdToZone;
       this.namingConvention = namingConvention;
+      this.credentialsProvider = credentialsProvider;
    }
 
    @Override
@@ -235,17 +238,21 @@ public class CloudStackComputeServiceAdapter implements
          templateId, options);
       VirtualMachine vm = 
blockUntilJobCompletesAndReturnResult.<VirtualMachine>apply(job);
       logger.debug("--- virtualmachine: %s", vm);
-      LoginCredentials.Builder credentialsBuilder = LoginCredentials.builder();
-      if (templateOptions.getKeyPair() != null) {
-         SshKeyPair keyPair = 
keyPairCache.getUnchecked(templateOptions.getKeyPair());
-         credentialsBuilder.privateKey(keyPair.getPrivateKey());
-      } else if (vm.isPasswordEnabled()) {
-         assert vm.getPassword() != null : vm;
-         credentialsBuilder.password(vm.getPassword());
+      LoginCredentials credentials = credentialsProvider.get();
+      if (credentials == null || credentials.getUser() == null) {
+         LoginCredentials.Builder credentialsBuilder = 
LoginCredentials.builder();
+         if (templateOptions.getKeyPair() != null) {
+            SshKeyPair keyPair = 
keyPairCache.getUnchecked(templateOptions.getKeyPair());
+            credentialsBuilder.privateKey(keyPair.getPrivateKey());
+         } else if (vm.isPasswordEnabled()) {
+            assert vm.getPassword() != null : vm;
+            credentialsBuilder.password(vm.getPassword());
+         }
+         credentials = credentialsBuilder.build();
       }
 
       try {
-         ImmutableMap.Builder<String, String> builder = ImmutableMap.<String, 
String> builder();
+         ImmutableMap.Builder<String, String> builder = ImmutableMap.builder();
          builder.putAll(template.getOptions().getUserMetadata());
          for (String tag : template.getOptions().getTags())
             builder.put(tag, "jclouds-empty-tag-placeholder");
@@ -259,6 +266,7 @@ public class CloudStackComputeServiceAdapter implements
             AsyncCreateResponse tagJob = 
client.getTagApi().createTags(tagOptions);
             awaitCompletion(tagJob.getJobId());
             logger.debug("<< tags added");
+            vm = client.getVirtualMachineApi().getVirtualMachine(vm.getId());
          }
          if (templateOptions.shouldSetupStaticNat()) {
              Capabilities capabilities = 
client.getConfigurationApi().listCapabilities();
@@ -289,7 +297,7 @@ public class CloudStackComputeServiceAdapter implements
           }
           throw re;
       }
-      return new NodeAndInitialCredentials<VirtualMachine>(vm, vm.getId() + 
"", credentialsBuilder.build());
+      return new NodeAndInitialCredentials<VirtualMachine>(vm, vm.getId() + 
"", credentials);
    }
 
    @Override

Reply via email to