Quantum Server启动流程
来源:互联网 发布:java两年工作经验面试 编辑:程序博客网 时间:2024/05/17 09:07
本文地址:http://blog.csdn.net/spch2008/article/details/9284217
有关upstart-job的内容已经在linux sysvinit与upstart说过了。
第一:quantum-server.conf
service quantum-server start命令,将执行quantum-server.conf中脚本。
description "Quantum server"author "Chuck Short <zulcss@ubuntu.com>"start on runlevel [2345]stop on runlevel [016]chdir /var/runpre-start script mkdir -p /var/run/quantum chown quantum:root /var/run/quantumend scriptscript [ -r /etc/default/quantum-server ] && . /etc/default/quantum-server [ -r "$QUANTUM_PLUGIN_CONFIG" ] && CONF_ARG="--config-file $QUANTUM_PLUGIN_CONFIG" exec start-stop-daemon --start --chuid quantum --exec /usr/bin/quantum-server -- \ --config-file /etc/quantum/quantum.conf \ --log-file /var/log/quantum/server.log $CONF_ARGend script
script段中,首先判断/etc/default/quantum-server文件是否存在,如果存在,执行该文件,对QUANTUM_PLUGIN_CONFIG设置值。
QUANTUM_PLUGIN_CONFIG="/etc/quantum/plugins/openvswitch/ovs_quantum_plugin.ini"其次,判断QUANTUM_PLUGIN_CONFIG是否为空,若不为空,则设置CONF_ARG为 --config-file $QUANTUM_PLUGIN_CONFIG
第三行,执行/usr/bin/quantum-server脚本,并传入后面的参数,相当于
/usr/bin/quantum-server -- \ --config-file /etc/quantum/quantum.conf \ --log-file /var/log/quantum/server.log --config-file /etc/quantum/plugins/openvswitch/ovs_quantum_plugin.ini
第二:quantum-server
/usr/bin/quantum-sersver
import eventletimport osimport syssys.path.insert(0, os.getcwd())from quantum.server import main as servereventlet.monkey_patch()server()导入quantum.server中main,然后调用main。
第三:quantum-server main
/usr/share/pyshared/quantum/server/__init__.py
from quantum import servicedef main(): # the configuration will be read into the cfg.CONF global data structure config.parse(sys.argv) if not cfg.CONF.config_file: sys.exit("ERROR: Unable to find configuration file via the default" " search paths (~/.quantum/, ~/, /etc/quantum/, /etc/) and" " the '--config-file' option!") try: quantum_service = service.serve_wsgi(service.QuantumApiService) quantum_service.wait() except RuntimeError, e: sys.exit("ERROR: %s" % e)sys.argv为传入的参数,打印出来为:
['/usr/bin/quantum-server', '--', '--config-file', '/etc/quantum/quantum.conf', '--log-file', '/var/log/quantum/server.log', '--config-file', '/etc/quantum/plugins/openvswitch/ovs_quantum_plugin.ini']
首先进行参数的解析,这不是本文的重点,所以先略过。
第四: service.py
def serve_wsgi(cls): service = cls.create() service.start() return servicecls为传入的service.QuantumApiService类,创建service对象,然后调用start函数启用服务。
class WsgiService(object): def __init__(self, app_name): self.app_name = app_name self.wsgi_app = None def start(self): self.wsgi_app = _run_wsgi(self.app_name) def wait(self): self.wsgi_app.wait()class QuantumApiService(WsgiService): @classmethod def create(cls): app_name = "quantum" config.setup_logging(cfg.CONF) service = cls(app_name) return serviceQuantumApiService继承WsgiService,创建对象后,调用父类start方法。
#app_name quantumdef _run_wsgi(app_name): app = config.load_paste_app(app_name) server = wsgi.Server("Quantum") #绑定套接字 server.start(app, cfg.CONF.bind_port, cfg.CONF.bind_host) return server
load_paste_app("quantum")加载/etc/quantum/api-paste.ini中的quantum段。同时,取得/etc/quantum/quantum.conf中配置的bind_port与bind_host。
[composite:quantum]use = egg:Paste#urlmap/: quantumversions/v2.0: quantumapi_v2_0返回urlmap应用。
第四:wsgi.py
quantum\wsgi.py
class Server(object): def __init__(self, name, threads=1000): self.pool = eventlet.GreenPool(threads) self.name = name def start(self, application, port, host='0.0.0.0', backlog=128): socket = eventlet.listen((host, port), backlog=backlog) self.pool.spawn_n(self._run, application, socket) def wait(self): try: self.pool.waitall() except KeyboardInterrupt: pass def _run(self, application, socket): logger = logging.getLogger('eventlet.wsgi.server') eventlet.wsgi.server(socket, application, custom_pool=self.pool, log=WritableLogger(logger))
有关eventlet的概念与用法,下次再发。
- Quantum Server启动流程
- Jwebsocket Server启动流程
- neutron server启动流程
- Quantum 基础知识及服务启动
- android system server 启动流程
- android system server 启动流程
- Quantum
- 【openstack】Quantum消息处理流程简析
- 【openstack】Quantum(Folsom版)中update_floatingIP流程
- neutron-server的启动流程(一)
- neutron-server的启动流程(二)
- Android系统启动流程 六--system server启动
- kafka broker启动流程和server结构
- quantum-l3无法启动 setting network faild invalid argument.
- OpenStack L版 neutron server的启动流程三
- OpenStack L版 neutron server的启动流程 四
- neutron-server服务启动流程-基于mitaka版本
- 【neutron源码分析】neutron-server启动流程分析
- 软件研发那些事儿——把自己树立成靶子
- 记录路径的搜索——HDU1026 Ignatius and the Princess I
- css中标签的定义
- CSS:文字阴影(各浏览器)
- s3c6410 linux gadget hid驱动
- Quantum Server启动流程
- 医疗界又有新创新:3D生物打印
- 贵州茅台开始电商之路
- 盘点即将推出智能手表的科技巨头
- 贸易电商即将启动
- android-BroadcastReceiver 发送有序广播
- 黑马程序员—集合
- 向页面发送请求来发送短信
- FFMPEG源码分析(1)----初版--持续更新