car.3205 发表于 2015-4-18 08:48:21

虚拟化平台cloudstack(8)——从UI开始

UI
  ucloudstack采用的是前后端分离的架构,就是说前端可以选择使用web、swing甚至其它的界面,都可以。
  我们来看cloudstack的UI信息吧,所有的cloudstack的UI都在{cloudstack_home}/cloudstack/ui目录下。

  用firefox打开工程,打开firebug,找到login.js,在100行加上断点。

  执行登录,这时就会触发断点,让我们看看发生了什么:

  最终是使用jquery的ajax来提交post请求给服务器端,也就是说,manager server提供给我们的是一组API,我们可以通过http的请求方式提交请求。

处理http请求
  看完了前端,我们继续看一下后端处理。
  在web.xml中,我们看到所有的api/请求都会到ApiServlet中处理。



   
apiServlet
com.cloud.api.ApiServlet
5

   
apiServlet   
/api/*

  在ApiServlet中,重点看下



    @Override
public void init(ServletConfig config) throws ServletException {
SpringBeanAutowiringSupport.processInjectionBasedOnServletContext(this, config.getServletContext());
}
  这样在web容器中就可以查看spring中使用注解的接口了。
  说实话这块感觉设计的挺一般的,一个servlet里边承担了太多的任务,我打了个断点在



processRequest(req, resp);
  这个方法中,但是一个登录的操作就走了四次断点,一个退出操作又走了两次,不清楚这块为什么这样设计。
  而且很多业务代码都在这个类中操作,感觉很冗余。但这个不是我们重点关心的问题。

CloudStack API提供的三种角色


[*]管?理?员?。?获?得?云?的?所?有?功?能?,包?括?虚?拟?和?物?理?资?源?管?理?。?
[*]域?管?理?员?。?进?入?到?虚?拟?资?源?的?云?属?于?管?理?员?的?域?。
[*]用?户?。?只?访?问?允?许?用?户?管?理?的?功?能?,虚?拟?实?例?,存?储?,和?网?络?。?

API文档的地址
  http://cloudstack.apache.org/docs/api/
  可以看到不同角色的API的地址,进去之后,可以看到每个API的详细描述。

处理简单列举一下4.1中API的新特性
  在VM中重新配置物理网络
  支持IPV6
  扩展VMX设置
  重新设置SSH密钥来访问虚拟机
  在4.1中改变的API命令:





API Commands


Description






createNetworkOffering



The following request parameters have been added:



[*]

isPersistent
[*]

startipv6
[*]

endipv6
[*]

ip6gateway
[*]

ip6cidr






listNetworkOfferings

listNetworks



The following request parameters have been added:



[*]

isPersistent

This parameter determines if the network or network offering listed are persistent or not.
[*]

ip6gateway
[*]

ip6cidr






createVlanIpRange



The following request parameters have been added:



[*]

startipv6
[*]

endipv6
[*]

ip6gateway
[*]

ip6cidr






deployVirtualMachine



The following parameter has been added: ip6Address.

The following parameter is updated to accept the IPv6 address: iptonetworklist.





CreateZoneCmd



The following parameter have been added: ip6dns1, ip6dns2.





listRouters

listVirtualMachines



For nic responses, the following fields have been added.



[*]

ip6address
[*]

ip6gateway
[*]

ip6cidr






listVlanIpRanges



For nic responses, the following fields have been added.



[*]

startipv6
[*]

endipv6
[*]

ip6gateway
[*]

ip6cidr






listRouters

listZones



For DomainRouter and DataCenter response, the following fields have been added.



[*]

ip6dns1
[*]

ip6dns2






addF5LoadBalancer

configureNetscalerLoadBalancer

addNetscalerLoadBalancer

listF5LoadBalancers

configureF5LoadBalancer

listNetscalerLoadBalancers



The following response parameter is removed: inline.





listFirewallRules

createFirewallRule



The following request parameter is added: traffictype (optional).





listUsageRecords



The following response parameter is added: virtualsize.





deleteIso



The following request parameter is added: forced (optional).





createStoragePool



The following request parameters are made mandatory:



[*]

podid
[*]

clusterid






createAccount



The following new request parameters are added: accountid, userid





createUser



The following new request parameter is added: userid





createDomain



The following new request parameter is added: domainid





listZones



The following request parameters is added: securitygroupenabled



  同时添加了一些新的API




[*]

createEgressFirewallRules (creates an egress firewall rule on the guest network.)
[*]

deleteEgressFirewallRules (deletes a egress firewall rule on the guest network.)
[*]

listEgressFirewallRules (lists the egress firewall rules configured for a guest network.)
[*]

resetSSHKeyForVirtualMachine (Resets the SSHkey for virtual machine.)
[*]

addBaremetalHost (Adds a new host.)
[*]

addNicToVirtualMachine (Adds a new NIC to the specified VM on a selected network.)
[*]

removeNicFromVirtualMachine (Removes the specified NIC from a selected VM.)
[*]

updateDefaultNicForVirtualMachine (Updates the specified NIC to be the default one for a selected VM.)
[*]

addRegion (Registers a Region into another Region.)
[*]

updateRegion (Updates Region details: ID, Name, Endpoint, User API Key, and User Secret Key.)
[*]

removeRegion (Removes a Region from current Region.)
[*]

listRegions (List all the Regions. Filter them by using the ID or Name.)
[*]

getUser (This API can only be used by the Admin. Get user details by using the API Key.)

配置8096端口
  8096端?口?, 不?需?要?验?证?即?可?进?行?API调?用?. 在?所?有?的?3.0.1版?本?全?新?安?装?时?, 这?个?端?口?都?是?默?认?被?禁?用?的?. 你?可?以?通?过?下?面?的?设?置?启?用?8096(或?使?用?其?它?端?口?号?):



[*]

确?保?第?一?个?管?理?服?务?器?安?装?并?运?行?.
[*]

设?置?你?期?望?的?端?口?号?到?全?局?配?置?参?数? integration.api.port.
[*]

重?启?管?理?服?务?器?.
[*]

在?管?理?服?务?器?的?节?点?上?, 创?建?一?个?防?火?墙?规?则?以?便?允?许?访?问?这?个?端?口?.


使用API请求
  所?有?CloudStack API请?求?都?是?以?HTTP GET/POST形?式?提?交?, 同?时?附?上?相?关?的?命?令?和?参?数?. 无?论?是?HTTP或?HTTPS, 一?个?请?求?都?有?以?下?内?容?组?成?:




[*]

CloudStack API URL: 这?是?Web服?务?API入?口?(例?如?, http://www.cloud.com:8080/client/api)
[*]

命?令?: 你?想?要?执?行?的?Web服?务?命?令?, 比?如?开?启?一?个?虚?拟?机?或?创?建?一?个?磁?盘?卷?
[*]

参?数?: 命?令?所?需?的?任?何?必?要?或?可?选?的?参?数?
  一?个?API GET请?求?的?样?例?看?起?来?像?这?样?:



http://localhost:8080/client/api?command=deployVirtualMachine&serviceOfferingId=1&diskOfferingId=1&templateId=2&zoneId=4&apiKey=miVr6X7u6bN_sdahOBpjNejPgEsT35eXq-jB8CG20YI3yaxXcgpyuaIRmFI_EJTVwZ0nUkkJbPmY3y2bciKwFQ&signature=Lxx1DM40AjcXU%2FcaiK8RAP0O1hU%3D
  更容易读的方式:



http://localhost:8080/client/api
?command=deployVirtualMachine
&serviceOfferingId=1
&diskOfferingId=1
&templateId=2
&zoneId=4 &apiKey=miVr6X7u6bN_sdahOBpjNejPgEsT35eXqjB8CG20YI3yaxXcgpyuaIRmFI_EJTVwZ0nUkkJbPmY3y2bciKwFQ
&signature=Lxx1DM40AjcXU%2FcaiK8RAP0O1hU%3D
页: [1]
查看完整版本: 虚拟化平台cloudstack(8)——从UI开始