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
