(一)Openstack系列之 如何修改 并且调试 观察效果
来源:互联网 发布:淘宝刷买家秀平台 编辑:程序博客网 时间:2024/05/17 21:38
一、Openstack 如何修改代码并且观察效果
写这篇文章是为了给Openstack 新手提供一些基本的帮助,例如哪里修改,怎么修改,修改了之后如何重启等等。
1 文件的位置
现在网上的安装方法基本都是通过配置安装源安装,那么安装后的Openstack工程的程序文件在哪呢?以nova为例:
/usr/share/pyshared/nova
这个目录下的结构是不是十分熟悉,对,基本跟在eclipse下浏览工程的结构一模一样,这就是安装openstack后源代码路径。再看下面的目录:
/usr/lib/python2.7/dist-package/nova
这里就是nova工程经过编译后的文件,其中的py文件是上面那个目录中对应文件的链接而已。
2 动手修改python文件
当我们知道了源文件和编译文件位置之后,那我们就很容易的修改程序以满足我们自己的要求。以修改nova操作权限判断流程为例。nova创建虚拟机时,会调用nova/compute/api.py中API类的_check_create_policies方法根据policy.json文件内容进行操作权限的判断,而该方法最终会调用nova/policy.py中的enforce方法:
如果我们想知道程序运行到此时,context中到底有什么内容,那么我们可以修改文件如下,注意对比上面代码新增的4行:
LOG =logging.getLogger(_name_);
LOG.debug(‘*’*20)
LOG.debug(credentials)
LOG.debug(‘*’*20)
Raise exception.PolicyNotAuthorized(action=action)
需要注意是:要在文件的开头处将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 sudoservice $i restart; done
随便调用任意一个nova命令,如nova list,将会得到以下输出:
说明我们的修改生效。打开日志,可以看到context中的具体内容。
路径为/var/log/nova-*.log.
- (一)Openstack系列之 如何修改 并且调试 观察效果
- 【设计心理学】人如何观察?(一)
- 调试笔记之观察中断
- OpenStack应用系列一
- 功耗调试之如何调试功耗(一)
- windows程序员进阶系列:《软件调试》之堆 (一)
- Android 系统默认参数的修改之系列(一)
- 【Java】多线程系列(一)之共享数据修改
- 如何观察数据库表修改的量
- 如何安装OpenStack Manila (一)
- openstack源码分析(一)------------如何入手
- OpenStack入门之 OpenStack Cloud Administrator Guide(一)
- OpenStack之Glance笔记(一)
- OpenStack之RPC调用(一)
- OpenStack之RESTful API调用(一)
- Openstack之KeyStone学习(一)
- openstack之kvm学习(一)
- openstack(一)之虚拟化简介
- 用select接收数据的方法
- Red Hat Enterprise Linux AS release 4 配置YUM(rhel as 4 安装yum)
- linux yum 安装
- 一次性向mysql数据库中插入6000条数据 测试代码
- 坐标求三角形类
- (一)Openstack系列之 如何修改 并且调试 观察效果
- VS工程配置输出debug版dll及copy到指定目录,执行bat脚本的方法
- 【OFBiz】通过jquery的Ajax获取json数据
- 在TreeView中增加右键菜单功能
- Android 资源文件中@、@android:type、@*、?、@+含义和区别
- DownloadManager
- Atlas源码剖析(八)
- android:layout_gravity和android:gravity的区别
- 一个".java"源文件中是否可以包括多个类(不是内部类)?有什么限制?