设为首页 收藏本站
云服务器等爆品抢先购,低至4.2元/月
查看: 1510|回复: 0

[经验分享] openstack nova 源码分析1

[复制链接]

尚未签到

发表于 2018-6-2 14:39:40 | 显示全部楼层 |阅读模式
  这是nova源码的setup脚本,有些我加了 注释,当然很多我也不是很明白希望大家一起探讨。


  • import gettext  
  • import glob  
  • import os  
  • import subprocess  
  • import sys  

  • from setuptools import find_packages  
  • from setuptools.command.sdist import sdist  

  • # In order to run the i18n commands for compiling and  
  • # installing message catalogs, we use DistUtilsExtra.  
  • # Don't make this a hard requirement, but warn that  
  • # i18n commands won't be available if DistUtilsExtra is  
  • # not installed...  
  • try:  
  •     from DistUtilsExtra.auto import setup  
  • except ImportError:  
  •     from setuptools import setup  
  •     print "Warning: DistUtilsExtra required to use i18n builders. "
  •     print "To build nova with support for message catalogs, you need "
  •     print "  https://launchpad.net/python-distutils-extra >= 2.18"

  • gettext.install('nova', unicode=1)  

  • from nova.utils import parse_mailmap, str_dict_replace  
  • from nova import version  

  • if os.path.isdir('.bzr'):   #判断路径  
  •     with open("nova/vcsversion.py", 'w') as version_file: #with as用法,用version_file来代替,可读写打开文件,  
  •         vcs_cmd = subprocess.Popen(["bzr", "version-info", "--python"],  
  •                                    stdout=subprocess.PIPE)  
  •          #创建一个指针实例(打开进程文件指针)  
  •         vcsversion = vcs_cmd.communicate()[0]#其中有2个参数见下面注释  
  •         """
  •         def communicate(self, input=None):  
  •          
  •                     来自subProcess的Popen的解释  
  •         Interact with process: Send data to stdin.  Read data from  
  •         stdout and stderr, until end-of-file is reached.  Wait for  
  •         process to terminate.  The optional input argument should be a  
  •         string to be sent to the child process, or None, if no data  
  •         should be sent to the child.  

  •         communicate() returns a tuple (stdout, stderr)."""
  •         version_file.write(vcsversion)#即时向其中写入  
  •          
  • '''''注意  这个version_file
  • (This file is automatically generated by generate_version_info  
  • It uses the current working tree to determine the revision.  
  • So don't edit it. :)  
  • )  
  • ''''  


  • class local_sdist(sdist):  
  •     """Customized sdist hook - builds the ChangeLog file from VC first"""
  •     #构建changlogFile  
  •     def run(self):  
  •         if os.path.isdir('.bzr'):  
  •             # We're in a bzr branch  
  •             env = os.environ.copy()  
  •             env['BZR_PLUGIN_PATH'] = os.path.abspath('./bzrplugins')  
  •             #创建一个指针实例(打开进程文件指针)  
  •             log_cmd = subprocess.Popen(["bzr", "log", "--novalog"],  
  •                                        stdout=subprocess.PIPE, env=env)  
  •             #打开上面给的给的目录你会发现有个novalog文件里面有一个Init.py  
  •             #而这个.py证明这是一个模块  
  •             changelog = log_cmd.communicate()[0]  
  •             #下面这4行代码,求高人指点啊  
  •             mailmap = parse_mailmap()  
  •               
  •             with open("ChangeLog", "w") as changelog_file:  
  •                 changelog_file.write(str_dict_replace(changelog, mailmap))  
  •         sdist.run(self)  
  • nova_cmdclass = {'sdist': local_sdist}  


  • try:  
  •     from sphinx.setup_command import BuildDoc  

  •     class local_BuildDoc(BuildDoc):  
  •         def run(self):  
  •             for builder in ['html', 'man']:  
  •                 self.builder = builder  
  •                 self.finalize_options()  
  •                 BuildDoc.run(self)  
  •     nova_cmdclass['build_sphinx'] = local_BuildDoc  

  • except:  
  •     pass


  • try:  
  •     #我猜想应该是抽取目录吧  
  •       
  •     from babel.messages import frontend as babel  
  •     nova_cmdclass['compile_catalog'] = babel.compile_catalog  
  •     nova_cmdclass['extract_messages'] = babel.extract_messages  
  •     nova_cmdclass['init_catalog'] = babel.init_catalog  
  •     nova_cmdclass['update_catalog'] = babel.update_catalog  
  • except:  
  •     pass

  • #是指找到数据文件?求高人指点  
  • def find_data_files(destdir, srcdir):  
  •     package_data = []  
  •     files = []  
  •     for d in glob.glob('%s/*' % (srcdir, )):  
  •         if os.path.isdir(d):  
  •             package_data += find_data_files(  
  •                                  os.path.join(destdir, os.path.basename(d)), d)  
  •         else:  
  •             files += [d]  
  •     package_data += [(destdir, files)]  
  •     return package_data  
  • #这个可能就是程序打包的部分里面的知识了,scripts是指指定目录下的脚本  
  • setup(name='nova',  
  •       version=version.canonical_version_string(),  
  •       description='cloud computing fabric controller',  
  •       author='OpenStack',  
  •       author_email='nova@lists.launchpad.net',  
  •       url='http://www.openstack.org/',  
  •       cmdclass=nova_cmdclass,  
  •       packages=find_packages(exclude=['bin', 'smoketests']),  
  •       include_package_data=True,  
  •       test_suite='nose.collector',  
  •       data_files=find_data_files('share/nova', 'tools'),  
  •       scripts=['bin/nova-ajax-console-proxy',  
  •                'bin/nova-api',  
  •                'bin/nova-compute',  
  •                'bin/nova-console',  
  •                'bin/nova-dhcpbridge',  
  •                'bin/nova-direct-api',  
  •                'bin/nova-logspool',  
  •                'bin/nova-manage',  
  •                'bin/nova-network',  
  •                'bin/nova-objectstore',  
  •                'bin/nova-scheduler',  
  •                'bin/nova-spoolsentry',  
  •                'bin/stack',  
  •                'bin/nova-volume',  
  •                'bin/nova-vncproxy',  
  •                'tools/nova-debug'],  
  •         py_modules=[])  

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-508175-1-1.html 上篇帖子: openstack Folsom版本安装 下篇帖子: openstack nova 源码下载
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表