in aliyun-ecs/src/main/java/org/jclouds/aliyun/ecs/compute/ECSComputeServiceAdapter.java [98:147]
public NodeAndInitialCredentials<Instance> createNodeWithGroupEncodedIntoName(String group, String name, Template template) {
String instanceType = template.getHardware().getId();
String regionId = template.getLocation().getId();
String imageId = template.getImage().getId();
ECSServiceTemplateOptions templateOptions = template.getOptions().as(ECSServiceTemplateOptions.class);
String keyPairName = templateOptions.getKeyPairName();
String securityGroupId = Iterables.getOnlyElement(templateOptions.getGroups());
String vSwitchId = templateOptions.getVSwitchId();
Instance.InternetChargeType internetChargeType = Instance.InternetChargeType.fromValue(templateOptions.getInternetChargeType());
int internetMaxBandwidthOut = templateOptions.getInternetMaxBandwidthOut();
String instanceChargeType = templateOptions.getInstanceChargeType();
Map<String, String> tags = ComputeServiceUtils.metadataAndTagsAsValuesOfEmptyString(templateOptions);
tags = new ImmutableMap.Builder()
.putAll(tags)
.put(vSwitchId, "")
.build();
TagOptions tagOptions = TagOptions.Builder.tags(tags);
InstanceRequest instanceRequest = api.instanceApi().create(regionId, RegionAndId.fromSlashEncoded(imageId).id(), securityGroupId, name, instanceType,
CreateInstanceOptions.Builder
.vSwitchId(vSwitchId)
.internetChargeType(internetChargeType.toString())
.internetMaxBandwidthOut(internetMaxBandwidthOut)
.instanceChargeType(instanceChargeType)
.instanceName(name)
.keyPairName(keyPairName)
.tagOptions(tagOptions)
);
String regionAndInstanceId = slashEncodeRegionAndId(regionId, instanceRequest.getInstanceId());
if (!instanceSuspendedPredicate.apply(regionAndInstanceId)) {
final String message = format("Instance %s was not created correctly. The associated resources created for it will be destroyed", instanceRequest.getInstanceId());
logger.warn(message);
cleanupResources.cleanupNode(RegionAndId.create(regionId, instanceRequest.getInstanceId()));
cleanupResources.cleanupSecurityGroupIfOrphaned(regionId, securityGroupId);
}
api.instanceApi().allocatePublicIpAddress(regionId, instanceRequest.getInstanceId());
api.instanceApi().powerOn(instanceRequest.getInstanceId());
Instance instance = Iterables.get(api.instanceApi().list(regionId, ListInstancesOptions.Builder.instanceIds(instanceRequest.getInstanceId())), 0);
// Safe to pass null credentials here, as jclouds will default populate
// the node with the default credentials from the image, or the ones in
// the options, if provided.
return new NodeAndInitialCredentials(instance,
slashEncodeRegionAndId(regionId, instanceRequest.getInstanceId()), null);
}