@Override 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()); String domainName = template.getOptions().as(SoftLayerTemplateOptions.class).getDomainName(); VirtualGuest newGuest = VirtualGuest.builder().domain(domainName).hostname(name).build(); ProductOrder order = ProductOrder.builder().packageId(productPackageSupplier.get().getId()) .location(template.getLocation().getId()).quantity(1).useHourlyPricing(true).prices(getPrices(template)) .virtualGuests(newGuest).build(); logger.debug(">> ordering new virtualGuest domain(%s) hostname(%s)", domainName, name); ProductOrderReceipt productOrderReceipt = client.getVirtualGuestClient().orderVirtualGuest(order); VirtualGuest result = get(productOrderReceipt.getOrderDetails().getVirtualGuests(), 0); logger.trace("<< virtualGuest(%s)", result.getId()); logger.debug(">> awaiting login details for virtualGuest(%s)", result.getId()); boolean orderInSystem = loginDetailsTester.apply(result); logger.trace("<< virtualGuest(%s) complete(%s)", result.getId(), orderInSystem); checkState(orderInSystem, "order for guest %s doesn't have login details within %sms", result, Long.toString(guestLoginDelay)); result = client.getVirtualGuestClient().getVirtualGuest(result.getId()); Password pw = get(result.getOperatingSystem().getPasswords(), 0); return new NodeAndInitialCredentials<VirtualGuest>(result, result.getId() + "", LoginCredentials.builder().user(pw.getUsername()).password( pw.getPassword()).build()); }
@Override public NodeAndInitialCredentials<Server> createNodeWithGroupEncodedIntoName(String tag, String name, Template template) { // create the backend object using parameters from the template. Server from = client.createServerInDC(template.getLocation().getId(), name, Integer.parseInt(template.getImage().getProviderId()), Integer.parseInt(template.getHardware().getProviderId())); return new NodeAndInitialCredentials<Server>(from, from.id + "", LoginCredentials.builder().user(from.loginUser) .password(from.password).build()); }
@Override 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()); String domainName = template.getOptions().as(SoftLayerTemplateOptions.class).getDomainName(); VirtualGuest newGuest = VirtualGuest.builder().domain(domainName).hostname(name).build(); ProductOrder order = ProductOrder.builder().packageId(productPackageSupplier.get().getId()) .location(template.getLocation().getId()).quantity(1).useHourlyPricing(true).prices(getPrices(template)) .virtualGuests(newGuest).build(); logger.debug(">> ordering new virtualGuest domain(%s) hostname(%s)", domainName, name); ProductOrderReceipt productOrderReceipt = client.getVirtualGuestClient().orderVirtualGuest(order); VirtualGuest result = get(productOrderReceipt.getOrderDetails().getVirtualGuests(), 0); logger.trace("<< virtualGuest(%s)", result.getId()); logger.debug(">> awaiting login details for virtualGuest(%s)", result.getId()); boolean orderInSystem = loginDetailsTester.apply(result); logger.trace("<< virtualGuest(%s) complete(%s)", result.getId(), orderInSystem); checkState(orderInSystem, "order for guest %s doesn't have login details within %sms", result, Long.toString(guestLoginDelay)); result = client.getVirtualGuestClient().getVirtualGuest(result.getId()); Password pw = get(result.getOperatingSystem().getPasswords(), 0); return new NodeAndInitialCredentials<VirtualGuest>(result, result.getId() + "", LoginCredentials.builder().user(pw.getUsername()).password( pw.getPassword()).build()); }
@Override public NodeAndInitialCredentials<ServerInfo> createNodeWithGroupEncodedIntoName(String tag, String name, Template template) { long bootSize = (long) (template.getHardware().getVolumes().get(0).getSize() * 1024 * 1024 * 1024l); logger.debug(">> creating boot drive bytes(%d)", bootSize); DriveInfo drive = client .createDrive(new Drive.Builder().name(template.getImage().getId()).size(bootSize).build()); logger.debug("<< drive(%s)", drive.getUuid()); logger.debug(">> imaging boot drive source(%s)", template.getImage().getId()); client.imageDrive(template.getImage().getId(), drive.getUuid(), ImageConversionType.GUNZIP); boolean success = driveNotClaimed.apply(drive); logger.debug("<< imaged (%s)", success); if (!success) { client.destroyDrive(drive.getUuid()); throw new IllegalStateException("could not image drive in time!"); } template.getOptions().userMetadata(ComputeServiceConstants.NODE_GROUP_KEY, tag); Server toCreate = small(name, drive.getUuid(), defaultVncPassword).mem(template.getHardware().getRam()) .cpu((int) (template.getHardware().getProcessors().get(0).getSpeed())) .tags(template.getOptions().getTags()).userMetadata(template.getOptions().getUserMetadata()).build(); ServerInfo from = client.createServer(toCreate); client.startServer(from.getUuid()); from = client.getServerInfo(from.getUuid()); return new NodeAndInitialCredentials<ServerInfo>(from, from.getUuid(), LoginCredentials.builder() .password(defaultVncPassword).build()); }
/** * {@inheritDoc} */ @Override public NodeAndInitialCredentials<VServerMetadata> createNodeWithGroupEncodedIntoName( String group, String name, Template template) { // Find vsys (how? create new? default to first found?) // Target network DMZ/SECURE1/SECURE2 (how? default to DMZ?) // Determine remaining params: [vserverType,diskImageId,networkId] // what if no vsys exists yet? Location.AU(.contractId) creates 3? tier // skeleton vsys and DMZ is picked? String id = api.getVirtualSystemApi().createServer(name, template.getHardware().getName(), template.getImage().getId(), template.getLocation().getId()); // wait until fully created (i.e. transitions to stopped status) serverCreated.apply(id); resumeNode(id); VServerMetadata server = getNode(id); //do we need this? server.setTemplate(template); String user = template.getImage().getOperatingSystem().getFamily() == OsFamily.WINDOWS ? "Administrator" : "root"; return new NodeAndInitialCredentials<VServerMetadata>(server, id, LoginCredentials.builder().identity(user) .password(server.getInitialPassword()).build()); }
@Override public NodeAndInitialCredentials<ServerInfo> createNodeWithGroupEncodedIntoName(String tag, String name, Template template) { long bootSize = (long) (template.getHardware().getVolumes().get(0).getSize() * 1024 * 1024 * 1024l); AffinityType affinityType = AffinityType.HDD; if (template.getOptions() instanceof CloudSigmaTemplateOptions) { CloudSigmaTemplateOptions options = CloudSigmaTemplateOptions.class.cast(template.getOptions()); affinityType = options.getDiskDriveAffinity(); } logger.debug(">> imaging boot drive source(%s) bytes(%d) affinityType(%s)", template.getImage().getId(), bootSize, affinityType); DriveInfo drive = client.cloneDrive(template.getImage().getId(), template.getImage().getId(), new CloneDriveOptions().size(bootSize).affinity(affinityType)); boolean success = driveNotClaimed.apply(drive); logger.debug("<< image(%s) complete(%s)", drive.getUuid(), success); if (!success) { client.destroyDrive(drive.getUuid()); throw new IllegalStateException("could not image drive in time!"); } Server toCreate = Servers.small(name, drive.getUuid(), defaultVncPassword).mem(template.getHardware().getRam()) .cpu((int) (template.getHardware().getProcessors().get(0).getSpeed())).build(); logger.debug(">> creating server"); ServerInfo from = client.createServer(toCreate); logger.debug("<< created server(%s)", from.getUuid()); logger.debug(">> starting server(%s)", from.getUuid()); client.startServer(from.getUuid()); return new NodeAndInitialCredentials<ServerInfo>(from, from.getUuid(), LoginCredentials.builder() .password(defaultVncPassword).authenticateSudo(true).build()); }
@Override public NodeAndInitialCredentials<ServerInfo> createNodeWithGroupEncodedIntoName(String tag, String name, Template template) { long bootSize = (long) (template.getHardware().getVolumes().get(0).getSize() * 1024 * 1024 * 1024l); logger.debug(">> creating boot drive bytes(%d)", bootSize); DriveInfo drive = client .createDrive(new Drive.Builder().name(template.getImage().getId()).size(bootSize).build()); logger.debug("<< drive(%s)", drive.getUuid()); logger.debug(">> imaging boot drive source(%s)", template.getImage().getId()); client.imageDrive(template.getImage().getId(), drive.getUuid(), ImageConversionType.GUNZIP); boolean success = driveNotClaimed.apply(drive); logger.debug("<< imaged (%s)", success); if (!success) { client.destroyDrive(drive.getUuid()); throw new IllegalStateException("could not image drive in time!"); } Server toCreate = small(name, drive.getUuid(), defaultVncPassword).mem(template.getHardware().getRam()) .cpu((int) (template.getHardware().getProcessors().get(0).getSpeed())) .tags(template.getOptions().getTags()).userMetadata(template.getOptions().getUserMetadata()).build(); ServerInfo from = client.createServer(toCreate); client.startServer(from.getUuid()); from = client.getServerInfo(from.getUuid()); return new NodeAndInitialCredentials<ServerInfo>(from, from.getUuid(), LoginCredentials.builder() .password(defaultVncPassword).build()); }
@Override public NodeAndInitialCredentials<MachineInDatacenter> createNodeWithGroupEncodedIntoName(String group, String name, Template template) { LoginCredentials.Builder credentialsBuilder = LoginCredentials.builder(); CreateMachineOptions options = new CreateMachineOptions(); options.name(name); options.packageName(template.getHardware().getProviderId()); options.metadata(metadataAndTagsAsCommaDelimitedValue(template.getOptions())); String datacenterId = template.getLocation().getId(); String datasetURN = template.getImage().getProviderId(); logger.debug(">> creating new machine datacenter(%s) datasetURN(%s) options(%s)", datacenterId, datasetURN, options); Machine machine = sdcClient.getMachineClientForDatacenter(datacenterId).createWithDataset(datasetURN, options); logger.trace("<< machine(%s)", machine.getId()); MachineInDatacenter machineInDatacenter = new MachineInDatacenter(machine, datacenterId); //TODO machineInDatacenter.metadata for password if (template.getOptions().getLoginPrivateKey() != null){ credentialsBuilder.privateKey(template.getOptions().getLoginPrivateKey()); } return new NodeAndInitialCredentials<MachineInDatacenter>(machineInDatacenter, machineInDatacenter.slashEncode(), credentialsBuilder.build()); }
@Override public NodeAndInitialCredentials<MachineInDatacenter> createNodeWithGroupEncodedIntoName(String group, String name, Template template) { LoginCredentials.Builder credentialsBuilder = LoginCredentials.builder(); CreateMachineOptions options = new CreateMachineOptions(); options.name(name); options.packageName(template.getHardware().getProviderId()); options.metadata(metadataAndTagsAsCommaDelimitedValue(template.getOptions())); String datacenterId = template.getLocation().getId(); String datasetURN = template.getImage().getProviderId(); logger.debug(">> creating new machine datacenter(%s) datasetURN(%s) options(%s)", datacenterId, datasetURN, options); Machine machine = cloudApiApi.getMachineApiForDatacenter(datacenterId).createWithDataset(datasetURN, options); logger.trace("<< machine(%s)", machine.getId()); MachineInDatacenter machineInDatacenter = new MachineInDatacenter(machine, datacenterId); //TODO machineInDatacenter.metadata for password if (template.getOptions().getLoginPrivateKey() != null){ credentialsBuilder.privateKey(template.getOptions().getLoginPrivateKey()); } return new NodeAndInitialCredentials<MachineInDatacenter>(machineInDatacenter, machineInDatacenter.slashEncode(), credentialsBuilder.build()); }
@Override public NodeAndInitialCredentials<ServerInfo> createNodeWithGroupEncodedIntoName(String tag, String name, Template template) { long bootSize = (long) (template.getHardware().getVolumes().get(0).getSize() * 1024 * 1024 * 1024l); logger.debug(">> creating boot drive bytes(%d)", bootSize); DriveInfo drive = client .createDrive(new Drive.Builder().name(template.getImage().getId()).size(bootSize).build()); logger.debug("<< drive(%s)", drive.getUuid()); logger.debug(">> imaging boot drive source(%s)", template.getImage().getId()); client.imageDrive(template.getImage().getId(), drive.getUuid(), ImageConversionType.GUNZIP); boolean success = driveNotClaimed.apply(drive); logger.debug("<< imaged (%s)", success); if (!success) { client.destroyDrive(drive.getUuid()); throw new IllegalStateException("could not image drive in time!"); } Server toCreate = small(name, drive.getUuid(), defaultVncPassword).mem(template.getHardware().getRam()) .cpu((int) (template.getHardware().getProcessors().get(0).getSpeed())) .tags(template.getOptions().getTags()).userMetadata(template.getOptions().getUserMetadata()).build(); ServerInfo from = client.createServer(toCreate); client.startServer(from.getUuid()); from = client.getServerInfo(from.getUuid()); return new NodeAndInitialCredentials<ServerInfo>(from, from.getUuid(), LoginCredentials.builder() .password(defaultVncPassword).build()); }
@Override public NodeAndInitialCredentials<MachineInDatacenter> createNodeWithGroupEncodedIntoName(String group, String name, Template template) { LoginCredentials.Builder credentialsBuilder = LoginCredentials.builder(); CreateMachineOptions options = new CreateMachineOptions(); options.name(name); options.packageName(template.getHardware().getProviderId()); options.metadata(metadataAndTagsAsCommaDelimitedValue(template.getOptions())); String datacenterId = template.getLocation().getId(); String datasetURN = template.getImage().getProviderId(); logger.debug(">> creating new machine datacenter(%s) datasetURN(%s) options(%s)", datacenterId, datasetURN, options); Machine machine = cloudApiApi.getMachineApiForDatacenter(datacenterId).createWithDataset(datasetURN, options); logger.trace("<< machine(%s)", machine.getId()); MachineInDatacenter machineInDatacenter = new MachineInDatacenter(machine, datacenterId); //TODO machineInDatacenter.metadata for password if (template.getOptions().getLoginPrivateKey() != null){ credentialsBuilder.privateKey(template.getOptions().getLoginPrivateKey()); } return new NodeAndInitialCredentials<MachineInDatacenter>(machineInDatacenter, machineInDatacenter.slashEncode(), credentialsBuilder.build()); }
/** * {@inheritDoc} */ @Override public NodeAndInitialCredentials<VServerMetadata> createNodeWithGroupEncodedIntoName( String group, String name, Template template) { String id = api.getVirtualSystemApi().createServer(name, template.getHardware().getName(), template.getImage().getId(), template.getLocation().getId()); // wait until fully created (i.e. transitions to stopped status) checkState(serverCreated.apply(id), "node %s not reaching STOPPED state after creation", id); resumeNode(id); // don't wait until fully started, template "optionToNotBlock" takes care of that VServerMetadata server = getNode(id); // do we need this? server.setTemplate(template); String user = template.getImage().getOperatingSystem().getFamily() == OsFamily.WINDOWS ? "Administrator" : "root"; return new NodeAndInitialCredentials<VServerMetadata>(server, id, LoginCredentials.builder().identity(user) .password(server.getInitialPassword()).build()); }
/** * {@inheritDoc} */ @Override public NodeAndInitialCredentials<VServerMetadata> createNodeWithGroupEncodedIntoName( String group, String name, Template template) { String id = api.getVirtualSystemApi().createServer(name, template.getHardware().getName(), template.getImage().getId(), template.getLocation().getId()); // wait until fully created (i.e. transitions to stopped status) checkState(serverCreated.apply(id), "node %s not reaching STOPPED state after creation", id); resumeNode(id); // don't wait until fully started, template "optionToNotBlock" takes care of that VServerMetadata server = getNode(id); // do we need this? server.setTemplate(template); String user = template.getImage().getOperatingSystem().getFamily() == OsFamily.WINDOWS ? "Administrator" : "root"; return new NodeAndInitialCredentials<VServerMetadata>(server, id, LoginCredentials.builder().identity(user) .password(server.getInitialPassword()).build()); }
@Override public NodeAndInitialCredentials<Server> createNodeWithGroupEncodedIntoName(String tag, String name, Template template) { // create the backend object using parameters from the template. Server from = client.createServerInDC(template.getLocation().getId(), name, Integer.parseInt(template.getImage().getProviderId()), Integer.parseInt(template.getHardware().getProviderId())); return new NodeAndInitialCredentials<Server>(from, from.id + "", LoginCredentials.builder().user(from.loginUser) .password(from.password).build()); }
@Override public NodeAndInitialCredentials<Server> createNodeWithGroupEncodedIntoName(String group, String name, Template template) { Server server = client .createServer(name, Integer.parseInt(template.getImage().getProviderId()), Integer.parseInt(template .getHardware().getProviderId()), withMetadata(metadataAndTagsAsCommaDelimitedValue(template.getOptions()))); return new NodeAndInitialCredentials<Server>(server, server.getId() + "", LoginCredentials.builder().password( server.getAdminPass()).build()); }
@Override public NodeAndInitialCredentials<Server> createNodeWithGroupEncodedIntoName(String group, String name, Template template) { NewServerResponse server = client.createServer(name, checkNotNull(template.getImage().getProviderId(), "imageId"), checkNotNull(template.getHardware() .getProviderId(), "hardwareId")); return new NodeAndInitialCredentials<Server>(server.getServer(), server.getServer().getId() + "", LoginCredentials.builder().password(server.getNewInstanceRequest().getCreateOptions().getPassword()) .build()); }
@Override public NodeAndInitialCredentials<Server> createNodeWithGroupEncodedIntoName(String group, String name, Template template) { template.getOptions().userMetadata(ComputeServiceConstants.NODE_GROUP_KEY, group); Server server = client .createServer(name, Integer.parseInt(template.getImage().getProviderId()), Integer.parseInt(template .getHardware().getProviderId()), withMetadata(metadataAndTagsAsCommaDelimitedValue(template.getOptions()))); return new NodeAndInitialCredentials<Server>(server, server.getId() + "", LoginCredentials.builder().password( server.getAdminPass()).build()); }
@Override public NodeAndInitialCredentials<Instance> createNodeWithGroupEncodedIntoName(String tag, String name, Template template) { Instance instance = client.createInstance(template.getImage().getProviderId(), CreateInstanceOptions.Builder .named(name).hardwareProfile(template.getHardware().getId()).realm(template.getLocation().getId())); LoginCredentials creds = null; if (instance.getAuthentication() != null && instance.getAuthentication() instanceof PasswordAuthentication) { creds = PasswordAuthentication.class.cast(instance.getAuthentication()).getLoginCredentials(); } return new NodeAndInitialCredentials<Instance>(instance, instance.getId(), creds); }
@Override public NodeAndInitialCredentials<Server> createNodeWithGroupEncodedIntoName(String group, String name, Template template) { Server server = client.createServer(name, template.getImage().getId(), template.getHardware().getId(), withMetadata(template.getOptions().getUserMetadata()).withSecurityGroup(group)); return new NodeAndInitialCredentials<Server>(server, server.getId() + "", LoginCredentials.builder().password( server.getAdminPass()).build()); }
@Override public NodeAndInitialCredentials<Server> createNodeWithGroupEncodedIntoName(String group, String name, Template template) { Server server = client .createServer(name, Integer.parseInt(template.getImage().getProviderId()), Integer.parseInt(template .getHardware().getProviderId()), withMetadata(metadataAndTagsAsCommaDelimitedValue(template.getOptions()))); return new NodeAndInitialCredentials<Server>(server, server.getId() + "", LoginCredentials.builder().password( server.getAdminPass()).build()); }