基于java创建虚拟机
baseUrl:vSphere地址
1.获取session
public String testSession() { String param = "username:password"; String header = Base64.getEncoder().encodeToString(param.getBytes(StandardCharsets.UTF_8)); Object ret = Forest.post(baseUrl + "/rest/com/vmware/cis/session") .setSslSocketFactoryBuilder(new MySSLSocketFactoryBuilder()) .addHeader("Authorization", "Basic " + header) .execute(); JSONObject jsonObject = JSONObject.parseObject(JSONObject.toJSONString(ret)); System.out.println(jsonObject); return jsonObject.getString("value"); }
2.获取 Datacenter
@Test public void testGetDatacenter(){ String session = testSession(); String url = baseUrl + "/rest/vcenter/datacenter"; Object ret = Forest.get(url) .setSslSocketFactoryBuilder(new MySSLSocketFactoryBuilder()) .addHeader("vmware-api-session-id", session) .execute(); JSONObject jsonObject = JSONObject.parseObject(JSONObject.toJSONString(ret)); System.out.println(jsonObject); }
3.获取Datastore
@Test public void testGetDatastore(){ String session = testSession(); String url = baseUrl + "/rest/vcenter/datastore"; Object ret = Forest.get(url) .setSslSocketFactoryBuilder(new MySSLSocketFactoryBuilder()) .addHeader("vmware-api-session-id", session) .execute(); JSONObject jsonObject = JSONObject.parseObject(JSONObject.toJSONString(ret)); System.out.println(jsonObject); }
4.获取Folder
@Test public void testGetFolder(){ String session = testSession(); String url = baseUrl + "/rest/vcenter/folder"; Object ret = Forest.get(url) .setSslSocketFactoryBuilder(new MySSLSocketFactoryBuilder()) .addHeader("vmware-api-session-id", session) .addQuery("filter.type", "VIRTUAL_MACHINE") .execute(); JSONObject jsonObject = JSONObject.parseObject(JSONObject.toJSONString(ret)); System.out.println(jsonObject); }
5.获取Host
@Test public void testGetHost(){ String session = testSession(); String url = baseUrl + "/rest/vcenter/host"; Object ret = Forest.get(url) .setSslSocketFactoryBuilder(new MySSLSocketFactoryBuilder()) .addHeader("vmware-api-session-id", session) .execute(); JSONObject jsonObject = JSONObject.parseObject(JSONObject.toJSONString(ret)); System.out.println(jsonObject); }
6.获取Network
@Test public void testGetNetwork(){ String session = testSession(); String url = baseUrl + "/rest/vcenter/network"; Object ret = Forest.get(url) .setSslSocketFactoryBuilder(new MySSLSocketFactoryBuilder()) .addHeader("vmware-api-session-id", session) .addQuery("filter.names", "b3369eb6-91a6-4387-8ca5-9ac90537d99e") .execute(); JSONObject jsonObject = JSONObject.parseObject(JSONObject.toJSONString(ret)); JSONArray jsonArray = jsonObject.getJSONArray("value"); JSONObject json = JSONObject.parseObject(JSONObject.toJSONString(jsonArray.get(0))); String network = json.getString("network"); System.out.println(network); System.out.println(jsonObject); }
7.创建vm
@Test public void vmTest() throws Exception { VMCreateSpec vm = new VMCreateSpec(); //虚拟机名称 vm.setName("test-s"); //操作系统 vm.setGuest_OS("COREOS_64"); //虚拟机硬件版本 vm.setHardware_version("VMX_17"); //虚拟机安置信息 PlacementSpec placementSpec = new PlacementSpec(); placementSpec.setHost("host-4049"); placementSpec.setDatastore("datastore-4050"); placementSpec.setFolder("group-v4040"); vm.setPlacement(placementSpec); //cpu信息 CpuSpec cpuSpec = new CpuSpec(); cpuSpec.setCount(1); cpuSpec.setCores_per_socket(1); cpuSpec.setHot_add_enabled(false); cpuSpec.setHot_remove_enabled(false); vm.setCpu(cpuSpec); //内存信息 MemorySpec memorySpec = new MemorySpec(); memorySpec.setSize_MiB(2048); memorySpec.setHot_add_enabled(true); vm.setMemory(memorySpec); //磁盘信息 DiskSpec diskSpec = new DiskSpec(); diskSpec.setType("SCSI"); /* TODO 注释部分为新建磁盘 DiskSpec.VmdkSpec vmdkSpec = new DiskSpec.VmdkSpec(); vmdkSpec.setCapacity(20 * Constants.GB); vmdkSpec.setName("test-1"); diskSpec.setNew_vmdk(vmdkSpec);*/ //基于vmdk文件创建虚拟机 DiskSpec.VmdkBacking vmdkBacking = new DiskSpec.VmdkBacking(); vmdkBacking.setType("VMDK_FILE"); vmdkBacking.setVmdk_file("[datastore2] test-q/test-q.vmdk");//文件路径 diskSpec.setBacking(vmdkBacking); vm.setDisks(Arrays.asList(diskSpec)); //网络信息 EthernetSpec ethernetSpec = new EthernetSpec(); EthernetSpec.EthernetBackingSpec ethernetBackingSpec = new EthernetSpec.EthernetBackingSpec(); ethernetBackingSpec.setType(EthernetBackingTypeEnum.STANDARD_PORTGROUP.getStatus()); ethernetBackingSpec.setNetwork("network-4011"); ethernetSpec.setStart_connected(true) .setMac_type(MacAddressTypeEnum.GENERATED.getStatus()) .setBacking(ethernetBackingSpec); vm.setNics(Arrays.asList(ethernetSpec)); //光驱信息 // CdromSpec cdromSpec = new CdromSpec(); // cdromSpec.setStart_connected(true); // CdromSpec.CdromBackingSpec cdromBackingSpec = new CdromSpec.CdromBackingSpec(); // cdromBackingSpec.setType(CdromBackingTypeEnum.ISO_FILE.getStatus()); // cdromBackingSpec.setIso_file("[datastore1] iso/CentOS-7-x86_64-Minimal-1804.iso"); // cdromSpec.setBacking(cdromBackingSpec); // vm.setCdroms(Arrays.asList(cdromSpec)); JSONObject json = new JSONObject(); json.put("spec", vm); System.out.println(JSONObject.toJSONString(json)); String session = testSession(); String url = baseUrl + "/rest/vcenter/vm"; Object ret = Forest.post(url) .setSslSocketFactoryBuilder(new MySSLSocketFactoryBuilder()) .addHeader("vmware-api-session-id", session) .addHeader("Content-type", "application/json") .addBody(JSONObject.toJSONString(json)) .execute(); JSONObject jsonObject = JSONObject.parseObject(JSONObject.toJSONString(ret)); System.out.println("返回值:::" + jsonObject); }
以上
为创建虚拟机代码