public NodeAndInitialCredentials createNodeWithGroupEncodedIntoName()

in providers/softlayer/src/main/java/org/jclouds/softlayer/compute/strategy/SoftLayerComputeServiceAdapter.java [128:247]


   public NodeAndInitialCredentials<VirtualGuest> createNodeWithGroupEncodedIntoName(String group, String name,
         Template template) {
      checkNotNull(template, "template was null");
      checkNotNull(template.getOptions(), "template options was null");
      checkArgument(template.getOptions().getClass().isAssignableFrom(SoftLayerTemplateOptions.class),
              "options class %s should have been assignable from SoftLayerTemplateOptions",
              template.getOptions().getClass());

      SoftLayerTemplateOptions templateOptions = template.getOptions().as(SoftLayerTemplateOptions.class);
      String domainName = templateOptions.getDomainName();
      String diskType = templateOptions.getDiskType() == null ? DEFAULT_DISK_TYPE : templateOptions.getDiskType();
      boolean hourlyBillingFlag = templateOptions.isHourlyBillingFlag()  == null ? true : templateOptions.isHourlyBillingFlag();
      Integer portSpeed = templateOptions.getPortSpeed();
      Set<VirtualGuestNetworkComponent> networkComponents = portSpeed != null ?
              ImmutableSet.of(VirtualGuestNetworkComponent.builder().speed(portSpeed).build()) :
              ImmutableSet.<VirtualGuestNetworkComponent>of();
      final Datacenter datacenter = Datacenter.builder().name(template.getLocation().getId()).build();
      final String imageId = template.getImage().getId();
      int cores = (int) template.getHardware().getProcessors().get(0).getCores();
      String notes = getNotes(templateOptions);

      VirtualGuest.Builder<?> virtualGuestBuilder = VirtualGuest.builder()
              .domain(domainName)
              .hostname(name)
              .hourlyBillingFlag(hourlyBillingFlag)
              .startCpus(cores)
              .maxMemory(template.getHardware().getRam())
              .datacenter(datacenter)
              .localDiskFlag(isLocalDisk(diskType))
              .networkComponents(networkComponents);

      // set operating system or blockDeviceTemplateGroup
      Optional<OperatingSystem> optionalOperatingSystem = tryExtractOperatingSystemFrom(imageId);
      if (optionalOperatingSystem.isPresent()) {
         virtualGuestBuilder.operatingSystem(optionalOperatingSystem.get());
      // the imageId specified is an id of a public/private/flex image
      } else {
         VirtualGuestBlockDeviceTemplateGroup blockDeviceTemplateGroup = VirtualGuestBlockDeviceTemplateGroup
                 .builder().globalIdentifier(imageId).build();
         virtualGuestBuilder.blockDeviceTemplateGroup(blockDeviceTemplateGroup);
      }
      // set multi-disks
      if (!templateOptions.getBlockDevices().isEmpty()) {
         List<VirtualGuestBlockDevice> blockDevices = getBlockDevices(templateOptions.getBlockDevices(), diskType);
         virtualGuestBuilder.blockDevices(blockDevices);
      }
      // set dedicatedAccountHostOnlyFlag
      if (templateOptions.isDedicatedAccountHostOnlyFlag() != null) {
         virtualGuestBuilder.dedicatedAccountHostOnly(templateOptions.isDedicatedAccountHostOnlyFlag());
      }
      // set privateNetworkOnlyFlag
      if (templateOptions.isPrivateNetworkOnlyFlag() != null) {
         virtualGuestBuilder.privateNetworkOnlyFlag(templateOptions.isPrivateNetworkOnlyFlag());
      }
      // set primaryNetworkComponent.networkVlan.id
      if (templateOptions.getPrimaryNetworkComponentNetworkVlanId() != null) {
         int primaryNetworkComponentNetworkVlanId = templateOptions.getPrimaryNetworkComponentNetworkVlanId();
         virtualGuestBuilder.primaryNetworkComponent(
                 VirtualGuestNetworkComponent.builder()
                         .networkVlan(NetworkVlan.builder().id(primaryNetworkComponentNetworkVlanId).build())
                         .build());
      }
      // set primaryBackendNetworkComponent.networkVlan.id
      if (templateOptions.getPrimaryBackendNetworkComponentNetworkVlanId() != null) {
         int primaryBackendNetworkComponentNetworkVlanId = templateOptions.getPrimaryBackendNetworkComponentNetworkVlanId();
         virtualGuestBuilder.primaryBackendNetworkComponent(
                 VirtualGuestNetworkComponent.builder()
                         .networkVlan(NetworkVlan.builder().id(primaryBackendNetworkComponentNetworkVlanId).build())
                         .build());
      }
      // set postInstallScriptUri
      if (templateOptions.getPostInstallScriptUri() != null) {
         // Specifies the uri location of the script to be downloaded and run after installation is complete.
         virtualGuestBuilder.postInstallScriptUri(templateOptions.getPostInstallScriptUri());
      }
      // set userData
      if (templateOptions.getUserData() != null) {
         virtualGuestBuilder.virtualGuestAttribute(VirtualGuestAttribute.builder().value(templateOptions.getUserData()).build());
      }
      // set sshKeys
      if (!templateOptions.getSshKeys().isEmpty()) {
         Set<SecuritySshKey> sshKeys = Sets.newHashSet();
         for (int sshKeyId : templateOptions.getSshKeys()) {
            sshKeys.add(SecuritySshKey.builder().id(sshKeyId).build());
         }
         virtualGuestBuilder.sshKeys(sshKeys);
      }

      VirtualGuest virtualGuest = virtualGuestBuilder.build();
      logger.debug(">> creating new VirtualGuest(%s)", virtualGuest);
      VirtualGuest result = api.getVirtualGuestApi().createVirtualGuest(virtualGuest);
      logger.trace("<< VirtualGuest(%s)", result.getId());

      // tags
      if (!templateOptions.getTags().isEmpty()) {
         api.getVirtualGuestApi().setTags(result.getId(), templateOptions.getTags());
      }

      // notes
      if (!Strings.isNullOrEmpty(notes)) {
         api.getVirtualGuestApi().setNotes(result.getId(), notes);
      }

      logger.debug(">> awaiting login details for virtualGuest(%s)", result.getId());
      boolean orderInSystem = loginDetailsTester.apply(result);
      logger.trace("<< VirtualGuest(%s) complete(%s)", result.getId(), orderInSystem);

      if (!orderInSystem) {
         logger.warn("VirtualGuest(%s) doesn't have login details within %sms so it will be destroyed.", result,
              Long.toString(guestLoginDelay));
         api.getVirtualGuestApi().deleteVirtualGuest(result.getId());
         throw new IllegalStateException(format("VirtualGuest(%s) is being destroyed as it doesn't have login details" +
                 " after %sms. Please, try by increasing `jclouds.softlayer.virtualguest.login_details_delay` and " +
                 " try again", result, Long.toString(guestLoginDelay)));
      }
      result = api.getVirtualGuestApi().getVirtualGuest(result.getId());
      Password pwd = get(result.getOperatingSystem().getPasswords(), 0);
      return new NodeAndInitialCredentials<VirtualGuest>(result, result.getId() + "",
              LoginCredentials.builder().user(pwd.getUsername()).password(pwd.getPassword()).build());
   }