设为首页 收藏本站
查看: 2195|回复: 0

[经验分享] 如何在openstack环境中实现定制化功能

[复制链接]

尚未签到

发表于 2016-1-9 11:17:19 | 显示全部楼层 |阅读模式
本博客欢迎转发,但请保留原作者(@孔令贤HW)信息!内容系本人学习、研究和总结,如有雷同,实属荣幸!
我写这篇博客的目的是介绍一个在线修改openstack工程文件以实现对某些功能的测试(或其他一些目的)的方法。可能是我自己的水平问题,亦或者是大牛们不屑于回答这样的问题,我几乎在网上(国内)找不到类似的方法。于是研究了一点时间并最终实验成功后,不敢保留,稍作总结,希望能帮助与我有同样困惑的朋友们。
1      文件在哪
现在网上的安装方法基本都是通过配置安装源安装,那么安装后的openstack工程的程序文件在哪呢?以nova为例:
DSC0000.png
 
这个目录下的结构是不是十分熟悉,对,基本跟在eclipse下浏览工程的结构一模一样,这就是安装openstack后源代码路径。再看下面的目录:
DSC0001.png
 
这里就是nova工程经过编译后的文件,其中的py文件是上面那个目录中对应文件的链接而已。
2      动手修改python文件
知道了源文件和编译文件的位置,那么我们就能很容易的修改程序以满足我们自己的要求。以修改nova操作权限判断流程为例。nova创建虚拟机时,会调用nova/compute/api.py中API类的_check_create_policies方法根据policy.json文件内容进行操作权限的判断,而该方法最终会调用nova/policy.py中的enforce方法:
DSC0002.png
  
如果我们想知道程序运行到此时,context中到底有什么内容,那么我们可以修改文件如下,注意对比上面代码新增的4行:
DSC0003.png
 需要注意是:要在文件的开头处将logging引入,同时,定义:
LOG = logging.getLogger(__name__)
 
我们打印两行*号以便快速定位日志,同时将context内容打印出来,并显式的抛出一个异常让本次处理停止。
3      编译文件
文件修改完,必须经过编译并把源文件和编译后的文件覆盖现有工程中相应的文件。python中提供了很方便的模块对源文件进行编译,我们可以把如下内容保存到一个脚本中并执行:
(echo 'import py_compile'; echo 'py_compile.compile(r"/root/pydir/policy.py", r"/root/pydir/policy.pyc")') | python

简单解释:/root/pydir/policy.py为源文件,/root/pydir/policy.pyc是你想要将编译后的文件放在哪。
4      实验
分别将policy.py文件和policy.pyc文件替换/usr/share/pyshared/nova/policy.py和/usr/lib/python2.7/dist-packages/nova/policy.pyc(强烈建议在替换前先备份原来的文件!)

 

重启nova各个进程:

cd /etc/init.d/; for i in $( ls nova-* ); do sudo service $i restart; done

 

随便调用任意一个nova命令,如nova list,将会得到以下输出:
DSC0004.png
 

说明我们的修改生效。打开日志,看到了context中的具体内容:
DSC0005.png
 本博客欢迎转发,但请保留原作者(@孔令贤HW)信息!内容系本人学习、研究和总结,如有雷同,实属荣幸!

运维网声明 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-162129-1-1.html 上篇帖子: openstack、hadoop 下篇帖子: Openstack“单镜像多实例”的启动机制
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

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

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

扫描微信二维码查看详情

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


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


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


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



合作伙伴: 青云cloud

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