how openstack console works
来源:互联网 发布:月球发现二战飞机知乎 编辑:程序博客网 时间:2024/06/17 03:53
看nova中instance的console,有noVNC, serial,spice, rdp,平时配置使用libvirt管理虚机,配置virttype为kvm或者qemu,一般用配noVNC的最常见,之前做VDI的时候
知道RH的spice,据说性能也不错,包括USB的pass thru等,没研究过。从页面点击到后台,console一共经历几个部分:
第一部分,horizon点击,返回连接,显示
在horizon中配置console type是auto时,
CONSOLES = SortedDict([('VNC', api.nova.server_vnc_console),
('SPICE', api.nova.server_spice_console),
('RDP', api.nova.server_rdp_console),
('SERIAL', api.nova.server_serial_console)])
会依次调用api_call,根据返回结果,知道查到当前instance支持的console类型时停止,例如是否支持vnc连接,是的话
返回vnc连接的信息,否则check是否支持spice连接,依次执行
for con_type, api_call in check_consoles.iteritems():
try:
console = api_call(request, instance.id)
对于vnc来说,api.nova.server_vnc_console, 进入nova client调用novaclient(request).servers.get_vnc_console.
第二部分,nova client 查询
def do_get_vnc_console(cs, args):#前面已经说过do_xx的格式是如何解析的
"""Get a vnc console to a server."""
server = _find_server(cs, args.server)
#这里cs为nova client,调用utils.find_resource(cs.servers, server, **find_args), 其中cs.servers对应
novaclient/v2/client.py中self.servers = servers.ServerManager(self)
调用servers.ServerManager(self)的get方法,return self._get("/servers/%s" % base.getid(server), "server")
方法,返回Server(novaclient/v2/servers.py中的Server)对象。
需要指出的是,返回的Servre对应调用self.manager.get_vnc_console,这里的manager就是ServerManager。
data = server.get_vnc_console(args.console_type)
#调用ServerManager中的get_vnc_console方法:
return self._action('os-getVNCConsole', server,{'type': console_type})[1]
继续trace的话发现会调用servers/xxxx/os-getVNCConsole,通过HttpClient发送post请求到nova-api。
第三部分,nova计算
nova-api接收到请求:
@wsgi.action('os-getVNCConsole')
def get_vnc_console(self, req, id, body):
主要的任务为:
self.compute_api.get_vnc_console(context, instance, console_type)
OK, 这里就是熟悉的nova 操作,前面记录过很多遍了,nova-api到:
connect_info = self.compute_rpcapi.get_vnc_console(context,
instance=instance, console_type=console_type)
#compute rpc发送消息,compute manager接收到进行处理,调用virt driver得到vncserver_proxyclient_address和port,
在创建instance时,生成xml的过程中(libvirt根据conf xml创建虚机),trace _get_guest_config方法:
if ((CONF.vnc_enabled and
virt_type not in ('lxc', 'uml'))):
graphics = vconfig.LibvirtConfigGuestGraphics()
graphics.type = "vnc"
graphics.keymap = CONF.vnc_keymap
graphics.listen = CONF.vncserver_listen
guest.add_device(graphics)
add_video_driver = True
这也是配置文件中vnc_enabled的来源,当然,还有对spice,serial的相应配置,至于为什么要这样,是通过kvm-qemu生成
vnc或者spice的server,在mark link中可以看到。
self.consoleauth_rpcapi.authorize_console
对console进行auth时也是一样通过rpc.call,经过nova/consoleauth下的rpc,发送请求给其中的manager接收处理,可以深入trace一把。
mark link
http://www.cnblogs.com/cpy-devops/p/4463104.html
http://www.admin-magazine.com/Archive/2013/13/Controlling-virtual-machines-with-VNC-and-Spice
- how openstack console works
- How Internet EDI Works
- How E-mail Works
- How E-mail Works
- How Google Works
- How DES works
- How Google Works
- How Google Map Works
- How NAT Works
- How 4GT Works
- How PAE X86 Works
- How Digital Photography Works
- How Tomcat Works 1
- How Tomcat Works 2
- Books - How Tomcat works
- How Tomcat Works 5
- How Tomcat Works 9
- How Tomcat Works 6
- C++常用术语及其英文翻译的含义和简单用途总结(一)
- Broken Keyboard(hash)
- Java获取随机数验证码,例454670(短信验证码,邮箱验证码)
- 编译器实践 二 之 小型的词法分析器
- LightOJ 1132 - Summing up Powers 矩阵快速幂+排列组合
- how openstack console works
- Teamcenter PSM(五)
- 求解最大子序列算法及比较
- Eclipse中部署项目到Tomcat的方法
- Java语言编写简单的QQ登录界面
- springmvc 异常处理器
- 神经网络识别车牌字符
- 《开源框架那点事儿23》:采用TinyDB组件方式开发
- Mysql出现 “ERROR 1062” 的解决方法