基于 public 镜像在 Softlayer 上创建虚拟机(使用 Java API 客户端)

Creating a VM on Softlayer based on public image ( using Java API client)

我正在使用 Java 客户端连接软层 API。我可以使用以下代码创建一个带有 OS 的新虚拟机。

guest.setHostname("vstest2");
guest.setDomain("softlayer.com");
guest.setStartCpus(2L);
guest.setHourlyBillingFlag(true);
guest.setLocalDiskFlag(true);
guest.setOperatingSystemReferenceCode("UBUNTU_14_64");

但是我无法通过已经存在的 public 映像创建新的 VM。

guest.setHostname("vstest2");
guest.setDomain("softlayer.com");
guest.setStartCpus(2L);
guest.setHourlyBillingFlag(true);
guest.setLocalDiskFlag(true);

Group blockDevice = new Group();
blockDevice.setGlobalIdentifier("ce3f5ea3-893a-4992-ad14-5bcd99d9b32a");
guest.setBlockDeviceTemplateGroup(blockDevice);

请帮助使用 public 映像创建新的 VM。我得到的错误是

Caused by: com.softlayer.api.ApiException$Internal: Invalid value provided for 'blockDevices'. Block devices may not be provided when using an image template.(code: SoftLayer_Exception_InvalidValue, status: 500)

我只是想根据 public 映像模板创建一个新的 VM。但是找不到办法。

我能够使用全局标识符订购 VSI:ce3f5ea3-893a-4992-ad14-5bcd99d9b32a

这里是我使用的 java 脚本:

package VirtualGuest;

import com.softlayer.api.ApiClient;
import com.softlayer.api.RestApiClient;
import com.softlayer.api.service.Location;
import com.softlayer.api.service.virtual.Guest;
import com.softlayer.api.service.virtual.guest.block.device.template.Group;

/**
 * Created by Ruber Cuellar on 5/3/2016.
 */
public class CreateObject {

    public CreateObject(){
        // Declare username and api key
        String username = "set me";
        String apiKey = "set me";
        // Get Api Client and service
        ApiClient client = new RestApiClient().withCredentials(username, apiKey);
        Guest.Service guestService = Guest.service(client);

        Guest guest = new Guest();
        guest.setHostname("rcvtest-3");
        guest.setDomain("softlayer.com");
        guest.setStartCpus(2L);
        guest.setHourlyBillingFlag(true);
        guest.setLocalDiskFlag(true);
        guest.setMaxMemory(1L);
        // Setting datacenter
        Location newLocation = new Location();
        newLocation.setName("sjc03");
        guest.setDatacenter(newLocation);
        // Setting image template
        Group blockDevice = new Group();
        blockDevice.setGlobalIdentifier("ce3f5ea3-893a-4992-ad14-5bcd99d9b32a");
        guest.setBlockDeviceTemplateGroup(blockDevice);

    try{
        Guest result = guestService.createObject(guest);
        System.out.println(result.getId());

    } catch (Exception e)
    {
        System.out.println("Error: " + e);
    }
}
    public static void main(String [] args)
    {
        new CreateObject();
    }
}

请尝试仔细检查,或者您能否提供您正在尝试的完整代码?