Use-case tìm và liệt kê danh sách các template máy ảo có trong hệ thống vCenter

Một phần của tài liệu Hệ thống quản trị máy ảo cho ứng dụng công nghệ điện toán đám mây trong doanh nghiệp (Trang 83)

OrganizationList TemplateList vCenterManager vCenter VMConnection VMInfo VMTemplate Top Package::Admin Message1 loadTemplate() getAllvCenters() getVcenter_username() getVcenter_password() openConnection() getVMTemplateFromVI() InventoryNavigator searchManagedEntities() VirtualMachine search return return TemplateManager saveTemplate() return

Hình 4.15 – Lược đồ truy xuất tuần tự quá trình truy xuất và tìm kiếm máy ảo trên hê ̣ thống

 Lược đồ lớp

OrganizationListForm: lớ p mở rô ̣ng từ lớp ActionForm trong Struts , mô hình hóa các đố i tượng đa ̣i diê ̣n cho mô ̣t trang HTML . Lớp này đóng vai trò view trong mô hình MVC.

OrganizationListAction: lớ p mở rô ̣ng từ lớp ActionForm trong Struts , mô hình hóa việc nhận và xử lí từ được gửi từ lớp OrganizationListForm tới . Lớ p này đóng vai trò là controller trong mô hình MVC.

+setVirtualServers() +getVirtualServers[]() -virtualServers[] «implementation class» OrganizationListForm +execute() «implementation class» OrganizationListAction +serUrl() +getUrl() +setUsername() +getUsername() +setPassword() +getPassword() +openConnection() +getServiceInstance() +getSearchIndex() +closeConnection() +getRootFolder() +getInstanceUid() +getAllDatacenters[]() +getTheFirstDatacenter() +getParentDatacenter() +createFolder() +existFolder() +getVLAN() +createResourcePool() +getResourcePool() +moveToResourcePool() +getAlHostSystems() -si -url -username -password -rootFolder -mes[] -vm -vmInfo -vmc VMConnection +getAllVirtualMachines() +getVirtualMachineByName() +getVMPowerState() +getVirtualMachineByUuid() +getVMRemoteConsole() +createScsiSpec() +createDiskSpec() +createNicSpec() +getVMTemplateFromVI[]() +createVirtualMachine() +getDiskDeviceConfigSpec() +getDataStoreName() -_vmCon VMInfo +getAllvCenter() +getvCenterByIp() +getRowByPrimaryKey() +savevCenter() +removevCenterByPrimaryKey() vCenterManager +getAllTemplate[]() +getAllTemplateByAccountId[]() +getTemplateByUuid() +getTemplateByPrimaryKey() +saveTemplate() +removeTemplateByPrimaryKey() TemplateManager +currentSession() +closeSession() +() -CONFIG_FILE_LOCATION -cfg -sessionFactory HibernateSessionFactory +setVcenterid() +getVcenterid() +setVcenter_name() +getVcenter_name() +setVcenter_ip() +getVcenter_ip() +setVcenter_username() +getVcenter_username() +setVcenter_password() +getVcenter_password() -vcenterid -vcenter_name -vcenter_ip -vcenter_username -vcenter_password Vcenter +getTemplateid() +setTemplateid() +getDatacenter() +setDatacenter() +getVmpathname() +setVmpathname() +getName() +setName() +getGuestfullname() +setGuestfullname() +getAnnotation() +setAnnotation() +getUuid() +setUuid() +getMemorymb() +setMemorymb() +getNumcpu() +setNumcpu() +gethddkb() +setHddkb() +getMaxvcpu() +setMaxvcpu() +getMaxmemmb() +setIp() +getIp() -templateid -serverurl -datacenter -vmpathname -name -guestfullname -annotation -guestid -description -accountid -uuid -memmorymb -numcpu -hddkb -maxvcpu -maxmemb «implementation class» VMTemplate +searchManagedEntities() InventoryNavigator +listTemplate() +reviewToDeploy() +loadTemplate() +addDescription() «implementation class» TemplateListAction +getTemplates[]() +setTemplates() +getTemplateid() +setTemplateid() -templates[] -templateid «implementation class»TemplateListForm +beginTransaction() +commit() «implementation class» Session +currentSession() «implementation class» Transaction

Hình 4.16 – Lược đồ lớp trong use-case tìm kiếm và liê ̣t kê máy ảo

TemplateListForm: lớ p mở rô ̣ng từ lớp ActionForm trong Struts , mô hình hóa các đối tượng đại diện cho một trang HTML . Lớp này thể hiê ̣n viê ̣c hiê ̣n thi ̣ danh sách các template trong hê ̣ thống và đóng vai trò view trong mô hình

MVC.

TemplateListAction: lớ p mở rô ̣ng từ lớp ActionForm trong Struts , mô hình hóa việc nhận và xử lí từ được gửi từ lớp TemplateListForm tớ i, nhâ ̣n xử lí các yêu cầu liê ̣t kê về số lượng các template đang trong hê ̣ thống . Lớp này đóng vai trò là controller trong mô hình MVC.

vCenterManager:lớp này đóng vai trò hỗ trợ cho quá trình truy xuất tới các thông tin về đối tượng vCenter Server trong hê ̣ thống , giúp tách phần mã nguồn xử lí tách khỏi phần controller của các lớp liên quan tới vCenter như

vCenterListAction và vCenterEditAction, cho phép thao tác với cơ sở dữ liê ̣u ở nền dưới.

TemplateManager:lớp này đóng vai trò hỗ trợ cho quá trình truy xuất tới các thông tin về đối tượng VMTemplate trong hệ thống , giúp tách phần mã nguồn xử lí tách ra khỏi phần controlle r của các lớp liên quan tới VMTemplate như TemplateEditAction và TemplateListAction.

vCenter: lớp này mô hình hóa thông tin về vCenter Server trong hê ̣ thống của VMware vSphere.

VMTemplate: lớ p này mô hình hóa thông tin về mô ̣t template má y ảo trong hê ̣ thống VMware vSphere.

VMConnection: lớ p này đóng vai trò hỗ trợ cho viê ̣c truy xuất tới hê ̣ thống VMware vSphere, cho phép tương tác và làm viê ̣c với các đối tượng được quản lí bởi hệ thống ảo hóa như VirtualMachine, ResourcePool.

VMInfo: lớ p này đóng vai trò hỗ trợ cho viê ̣c truy xuất tới thông tin của mô ̣t máy ảo nằm trong hệ thống VMware vSphere.

4.16 Thiết kế cơ sở dƣ̃ liê ̣u

4.17 Lƣơ ̣c đồ mối quan hê ̣ giƣ̃a các thƣ̣c thể

Department departmentid departmentname virtualdatacenter description Account accountid departmentid userrightid accountname username password address email creditcard phone VMTemplate templateid accountid vcenterserverid serverurl datacenter vmpathname uuid name guestfullname annotation guestid description memorymb numcpu hddkb maxvcpu maxmemmb localnetwork corporatenetwork VMLease vmleaseid accountid templateid uuid vmname vmleasehour vmnetwork description VirtualServer virtualserverid accountid templateid uuid ip servername numcpu memorymb hddkb starttime completetime Constant constantid constantname constantvalue vCenter vcenterserverid vcenter_name vcenter_ip vcenter_username vcenter_password

4.18 Mô tả chi tiết về cơ sở dƣ̃ liê ̣u tƣơng ƣ́ng với đối tƣợng sƣ̉ du ̣ng

Thực thể Tên lớp Mô tả

Department Department Đa ̣i điê ̣n cho mô ̣t phòng ban, hay mô ̣t tổ chức trên thực tế. Ở trong mỗi mô ̣t tổ chức này, có nhu cầu sử dụng các máy ảo. Mỗi mô ̣t tổ chức khi được ta ̣o ra lần đầu sẽ gắn với mô ̣t Resource Pool trong hê ̣ thống.

Account Account Đa ̣i diê ̣n cho mô ̣t tài khoản người sử dụng trong hệ thống. Tài khoản này phải thuô ̣c mô ̣t Department cu ̣ thể nào đó. Tài khoản này khi truy cập sẽ được quyền khởi ta ̣o máy ảo ở trên Resource Pool với tên tương tự như tên của Department ở trên.

vCenter vCenter Đa ̣i diê ̣n cho mô ̣t máy chủ quản tri ̣ trong hê ̣ thống của VMware. Thông tin của máy chủ này sẽ được sử dụng để truy xuất, tìm kiếm các máy ảo cũng như tiến hành khởi tạo máy ảo trong hệ thống. VMTemplate VMTemplate Đa ̣i diê ̣n cho mô ̣t máy ảo hoă ̣c mô ̣t

template máy ảo trong hê ̣ thống. Đây là mô ̣t máy ảo với cấu hình về phần cứng và phần mềm được thiết lâ ̣p tiêu chuẩn, sẵn sàng cho quá trình khởi tạo ra các máy ảo mới từ nó.

VirtualServer VirtualServer Đa ̣i diê ̣n cho mô ̣t máy chủ ảo được khởi tạo từ VMTemplate. Đây là máy ảo được khởi ta ̣o bởi người sử du ̣ng trong hê ̣ thống với các cấu hình được tùy biến từ VMTemplate, như số lượng vi xử lý, dung lượng bô ̣ nhớ hay dung lượng ổ đĩa.

VMLease VMLease Đa ̣i diê ̣n cho mô ̣t máy ảo với thời gian sử dụng được chọn lựa trước. Khi máy ảo được khởi ta ̣o và bâ ̣t lần đầu tiên sẽ được tính là bắt đầu hoạt động. Thời gian thuê/sử du ̣ng thực tế được xác đi ̣nh ngay từ ban đầu. Mục đích chính của viê ̣c thiết lâ ̣p này là giúp tiết kiê ̣m tài nguyên ha ̣n chế của hê ̣ thống.

Constant Constant Đa ̣i diê ̣n cho mô ̣t số thông tin cố đi ̣nh được thiết lâ ̣p trong hê ̣ thống như quyền của người sử dụng.

Bảng 4.7 – Bảng mô tả chi tiết các bảng trong cơ sở dữ liệu và đối tượng tương ứng với các bảng

4.19 Mã hóa chi tiết một use-case điển hình

4.20 Thiết lâ ̣p kết nối tới controller trong struts-config.xml

Servlet controller nhâ ̣n các yêu cầu xử lý từ phía trình duyê ̣t web của máy trạm, đi ̣nh hướng cả yêu cầu tới các lớp đóng vai trò xử lý yêu cầu trong ứng du ̣ng . Trong Struts framework, struts-config.xml có chức năng như mô ̣t controller , sẽ đi ̣nh hướng các yêu cầu ở các URL cu ̣ thể vào các action class cu ̣ thể.

<form-bean name="templateListForm" type="viapp.vps.form.TemplateListForm"/> <action path="/ListTemplate" input="/vps/ListTemplate.jsp" attribute="templateListForm" name="templateListForm" parameter="do" scope="request" type="viapp.vps.action.TemplateListAction">

<forward name="showTemplateList" path="/vps/ListTemplate.jsp" />

<forward name="showRefreshTemplate" path="/ListTemplate.do?do=listTemplate"/> </action>

4.21 Mã hóa giao diện web

Giao diê ̣n web trong Struts framework bao gồm hai thành phần kết hợp với nhau là các trang Java Server Pages chứa mã HTML , Javascript, Stylesheet và mô ̣t lớp mở rô ̣ng từ lớp ActionForm có các thuô ̣c tính và phương thức tương ứng với các đối tượng trong trang Java Server Pages.

<tableid="vtable"width="800"> <tr>

<td></td> <td>Name</td> <td>Description</td> <td>Action</td>

</tr><logic:iteratename="templateListForm"property="templates"id="vmtemplate"> <tr>

<tdalign="center">

<html:linkaction="/EditVMLease.do?do=editVMLease"

paramName="vmtemplate"

paramProperty="templateid"

paramId="templateid"><imgsrc="<html:rewritepage='/images/power/mycloud.png'/>">

Deploy</html:link>

<td><bean:writename="vmtemplate"property="name"/></td> <td><bean:writename="vmtemplate"property="description"/></td> <td><html:linkaction="/EditTemplate.do?do=editTemplate"

paramName="vmtemplate"

paramProperty="templateid"

paramId="templateid">Update</html:link> <html:linkaction="/EditTemplate.do?do=removeTemplate"

paramName="vmtemplate"

paramProperty="templateid"

paramId="templateid">Remove</html:link> </td>

</tr>

</logic:iterate> <tr>

<tdcolspan="4"align="left">* select icon to deploy virtual machine</td> </tr>

<logic:notPresentname="vmtemplate"> <tr>

<tdcolspan="9">No template found</td> </tr>

</logic:notPresent> </table>

Bảng 4.9 – Bảng mô tả mã hóa một trang jsp theo cách viết Struts

Lớp TemplateListForm gắn với danh sách các đối tượng trong Java Serve r Pages ở phần giao diê ̣n web.

publicclassTemplateListFormextends ActionForm {

private VMTemplate[] templates = new VMTemplate[0];

private Integer templateId;

public TemplateListForm() {super();}

public VMTemplate[] getTemplates(){returnthis.templates;}

publicvoid setTemplates(VMTemplate[] tpl){this.templates=tpl;}

publicvoid setTemplateid(Integer id){this.templateId = id;}

public Integer getTemplateid(){returnthis.templateId;}}

Bảng 4.10 – Bảng mô tả mã hóa đối tượng form trong Struts

Mô ̣t yêu cầu truy xuất từ giao diê ̣n Java Ser ver Pages ở trên , sẽ được xử lý tại controller thông qua việc chuyển hướng yêu cầu tới một phương thức của mô ̣t lớp mở rô ̣ng từ lớp Action hoă ̣c lớp DispatchAction.

publicclass TemplateListAction extends DispatchAction{ //Action {

/** Logger for this class and subclasses */

protectedfinal Logger log = Logger.getLogger(getClass());

private String serverURL = ""; //vCenter Server address

private String userName= "";

private String password= "";

private String serverIp="";

public ActionForward listTemplate(ActionMapping mapping, ActionForm inForm,

HttpServletRequest request, HttpServletResponse response) throws Exception{

log.debug("TemplateListAction.execute()");

HttpSession session = request.getSession();

Integer accountid =(Integer)session.getAttribute("CUST_ID");

TemplateListForm listForm = (TemplateListForm)inForm;

TemplateManager manager = new TemplateManager();

listForm.setTemplates(manager.getAllTemplates());

return mapping.findForward("showTemplateList"); }

public ActionForward loadTemplate(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response){

try{

System.out.println("updateTemplateFromVI");

//call VMware server, and update the vmtemplate table

HttpSession session = request.getSession();

Integer accountid =(Integer)session.getAttribute ("CUST_ID");

vCenterManager vCM = new vCenterManager();

Vcenter[] vcenters = vCM.getAllvCenters();

for(int i=0; i<vcenters.length;i++){

if(vcenters[i].getVcenter_ip()!=null){

serverURL = "https://" + vcenters[i].getVcenter_ip() + "/sdk";}else{

serverURL = "https://" + vcenters[i].getVcenter_name() + "/sdk";}

userName = vcenters[i].getVcenter_username();

password = vcenters[i].getVcenter_password();

VMInfo vmInfo = new VMInfo(vmc);

TemplateListForm listForm = (TemplateListForm)form; listForm.setTemplates(

vmInfo.getVMTemplateFromVI(accountid));

VMTemplate[] templates = listForm.getTemplates();

if(templates.length>0){

TemplateManager manager = new TemplateManager();

for(int j=0;j<templates.length;j++){

if(manager.getTemplateByUUid(

templates[j].getUuid())==null) manager.saveTemplate(templates[j]);

} }

}

}catch(Exception ex){ex.printStackTrace();}

return mapping.findForward("showRefreshTemplate"); }

}

Bảng 4.11 – Bảng mô tả mã hóa đối tượng action trong Struts

4.22 Mã hóa truy xuất thông tin về các máy ảo mẫu từ hệ thống ảo hóa

Thiết lâ ̣p kết nối tới máy chủ ảo hóa vCenter Server:

publicstaticvoid openConnection(String url, String username, String password) throws Exception{

si = new ServiceInstance(new URL(url), username, password, true);}

Bảng 4.12 – Bảng mô tả kết nối với máy chủ ảo hóa

Một danh sách các máy ảo trong hệ thống được liệt kê dựa trên phép tìm kiếm các đối tượng được quản lý bởi vCenter Server:

public VirtualMachine[] getAllVirtualMachines(Folder rootFolder)throws Exception{

ManagedEntity[] vms = new InventoryNavigator(rootFolder)

.searchManagedEntities(new String[][]

{ {"VirtualMachine", "name" }, }, true);

if(vms.length>0){

VirtualMachine[] vm = new VirtualMachine[vms.length];

for(int i=0;i<vms.length;i++){

vm[i]=(VirtualMachine)vms[i]; }

return vm; }elsereturnnull; }

Thông tin chi tiết của các máy ảo được lấy từ máy chủ vCenter Server sẽ được phân tích và na ̣p vào đối tượng thuô ̣c kiểu VMTemplate.

VirtualMachine v = vmArray[j];

VirtualMachineConfigInfo vmInfo = v.getConfig();

VMTemplate vmTem = newVMTemplate();

vmTem.setAccountid(accountid);

Datacenter dc = _vmCon.getParentDatacenter(v);

vmTem.setDatacenter(dc.getName()); vmTem.setUuid(vmInfo.getUuid()); vmTem.setName(vmInfo.getName()); vmTem.setServerurl(VMConnection.getUrl()); vmTem.setGuestid(vmInfo.getGuestId()); vmTem.setAnnotation(vmInfo.getAnnotation()); vmTem.setGuestfullname(vmInfo.getGuestFullName()); vmTem.setVmpathname(vmInfo.getFiles().getVmPathName()); VirtualHardware vHw = vmInfo.getHardware(); vmTem.setNumcpu(vHw.getNumCPU()); vmTem.setMemorymb(vHw.getMemoryMB());

for(int k=0;k<vHw.getDevice().length;k++){

VirtualDevice vD = (vHw.getDevice())[k]; Description d = vD.getDeviceInfo();

if(d.getLabel().startsWith("Hard disk")){ VirtualDisk vDisk = (VirtualDisk)vD;

vmTem.setHddkb(vDisk.getCapacityInKB()); }

}

ComputeResource rs = (ComputeResource) new

InventoryNavigator(dc).searchManagedEntities("ComputeResource")[0];

ComputeResourceSummary rsSum = rs.getSummary(); Short maxvcpu = rsSum.getNumCpuCores();

Long maxmemmb = rsSum.getEffectiveMemory(); vmTem.setMaxvcpu(maxvcpu);

vmTem.setMaxmemmb(maxmemmb);

Bảng 4.14 – Bảng mô tả lấy thông tin chi tiết của các máy ảo từ máy chủ ảo hóa

4.23 Mã hóa quá trình lƣu trữ dữ liệu xuống cơ sở dữ liệu

Ứng dụng sử dụng Hibernate Framework để đơn giản hóa quá trình ghi dữ liê ̣u xuống cơ sở dữ liê ̣u . Các bước tiến hành để Hibernate hoạt động được cho trường hợp mã hóa bao gồm:

private static String CONFIG_FILE_LOCATION = "/hibernate.cfg.xml";

Bảng 4.15 – Bảng mô tả tệp cấu hình của Hibernate

Đi ̣nh nghĩa cơ sở dữ liê ̣u cần truy xuất và các đối tượng cần thự c hiện ghi xuống cơ sở dữ liê ̣u.

<?xmlversion='1.0'encoding='UTF-8'?>

<!DOCTYPEhibernate-configurationPUBLIC"-//Hibernate/Hibernate Configuration DTD 3.0//EN""http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">

<hibernate-configuration> <session-factory>

<!-- mysql configuration -->

<propertyname="connection.url">jdbc:mysql://localhost/vapp</property> <propertyname="connection.username">vdc_admin</property>

<propertyname="connection.password">123456</property> <propertyname="connection.driver_class">com.mysql.jdbc.Driver

</property>

<propertyname="dialect">org.hibernate.dialect.MySQLDialect

</property>

<mappingresource="viapp/account/domain/Account.hbm.xml"/> <mappingresource="viapp/account/domain/Department.hbm.xml"/> <mappingresource="viapp/vps/domain/Row.hbm.xml"/>

<mappingresource="viapp/vps/domain/GroupServer.hbm.xml"/> <mappingresource="viapp/vps/domain/VirtualServer.hbm.xml"/> <mappingresource="viapp/vps/domain/VMTemplate.hbm.xml"/> <mappingresource="viapp/vps/domain/Vcenter.hbm.xml"/> <mappingresource="viapp/utility/Constant.hbm.xml"/> <mappingresource="viapp/vps/domain/VMLease.hbm.xml"/> </session-factory>

</hibernate-configuration>

Bảng 4.16 – Bảng mô tả nội dung tệp cấu hình trong Hibernate

Đi ̣nh nghĩa tê ̣p cấu hình với t ên chính xác như tên của lớp cần ghi xuống cơ sở dữ liê ̣u , với viê ̣c đi ̣nh nghĩa tên cô ̣t trong cơ sở dữ liê ̣u tương ứng với tên thuô ̣c tính cần ghi la ̣i và chính xác kiểu dữ liê ̣u tương ứng với cơ sở dữ liê ̣u.

<?xmlversion="1.0"encoding='UTF-8'?>

<!DOCTYPEhibernate-mappingPUBLIC"-//Hibernate/Hibernate Mapping DTD 3.0//EN""http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"> <hibernate-mappingpackage="viapp.vps.domain">

<classname="VMTemplate"table="VMTemplate"> <idname="templateid"

column="templateid"type="java.lang.Integer"> <generatorclass="increment"/> </id>

<propertyname="serverurl"

column="serverurl"type="java.lang.String"/> <propertyname="datacenter"

column="datacenter"type="java.lang.String"/> <propertyname="vmpathname"

column="vmpathname"type="java.lang.String"/> <propertyname="uuid"

column="uuid"type="java.lang.String"/> <propertyname="name"

column="name"type="java.lang.String"/> <propertyname="guestfullname"

column="guestfullname"type="java.lang.String"/> <propertyname="annotation"

column="annotation"type="java.lang.String"/> <propertyname="guestid"

column="guestid"type="java.lang.String"/> <propertyname="description"

column="description"type="java.lang.String"/> <propertyname="accountid"

column="accountid"type="java.lang.Integer"/> <propertyname="numcpu"

column="numcpu"type="java.lang.Integer"/> <propertyname="memorymb"

column="memorymb"type="java.lang.Integer"/> <propertyname="hddkb"

column="hddkb"type="java.lang.Long"/> <propertyname="maxvcpu"

column="maxvcpu"type="java.lang.Short"/> <propertyname="maxmemmb"

column="maxmemmb"type="java.lang.Long"/> </class>

</hibernate-mapping>

Bảng 4.17 – Bảng mô tả định nghĩa thông tin về đối tượng VMTemplate

Quá trình tiến hành ghi dữ liệu từ một đối t ượng xuống cơ sở dữ liệu thực hiê ̣n hoàn toàn tự đô ̣ng thông qua Hibernate.

/* a Hibernate session */

Session session = null;

/* we always need a transaction */

Transaction tx = null;

/* get session of the current thread */

session = HibernateSessionFactory.currentSession();

tx = session.beginTransaction();

VMTemplate tpl = new VMTemplate();

BeanUtils.copyProperties(tpl,tplValue);

session.save(tpl); tx.commit();

4.24 Chạy thử nghiệm chƣơng trình

4.25 Truy xuất hê ̣ thống với vai trò ngƣời quản tri ̣ hê ̣ thống

Hình 4.18 – Màn hình truy cập tới hệ thống VMMS

Màn hình đăng nhập với vai trò người quản trị hiển thị các chức năng như quản trị vCenter Server, quản trị các Catalogs và quản tri ̣ người sử du ̣ng.

Hình 4.19 –Màn hình sau khi đăng nhập hê ̣ thống

 Truy xuất tính năng quản tri ̣ vCenter Server

Hình 4.20 – Thông tin về máy chủ truy cập hê ̣ thống ảo hóa vCenter

Sửa hoă ̣c thêm mới thông tin về vCenter Server

Hình 4.21 – Màn hình nhập thông tin vCenter

 Truy xuất tính năng quản tri ̣ các Catalog

Sau khi cho ̣n vào liên kết quản tri ̣ Catalog , hê ̣ thống cho ta truy xuất tới danh mục các Catalog đang tồn tại trong hệ thống.

Hình 4.22 – Danh sách các máy ảo tiêu chuẩn trong hê ̣ thống

Để câ ̣p nhâ ̣t thêm các catalog mới từ hê ̣ thống , nhấp vào liên kết truy vấn các template máy ảo từ các vCenter đang đăng ký trong hê ̣ thống.

Một phần của tài liệu Hệ thống quản trị máy ảo cho ứng dụng công nghệ điện toán đám mây trong doanh nghiệp (Trang 83)

Tải bản đầy đủ (PDF)

(107 trang)