最近在看cinder的源码, 搭环境遇到各种坑, 在此记录一下.
版本: stable/newton
软件环境:
pycharm --> remote interupter --> 远端control1
(想法)
直接让IDE置身于整个openstack中
(pre0)
要先搭建一套完整的N版的openstack
(pre1)
我的环境是centos7.3, 系统默认的python版本是2.7.5.
安装pyenv --> pyenv install 2.7.5 (可以修改pyenv文件而使用sohu的python包)
(1)
mkdir -p /path/to/openstack && cd /path/to/openstack
(2)
git clone https://github.com/openstack/cinder.git
(3)切换分支
cd cinder
查看分支:git branch -a
切换至newton: git checkout remotes/origin/stable/newton
(4) 创建环境
关键点:不要用pyenv的virtualenv创建虚拟环境, 因为不能在IDE里修改site-packages
cd /path/to/openstack
pyenv local 2.7.5
cd cinder/tools
python install_venv.py
tips:
(1)cinder的requirements没有pymysql, 需要自行安装 tools/with_venv.sh pip install pymysql
(2)后续对虚拟的包环境的安装全部要运行tools/with_venv.sh来操作
结果:
所有的包全部安装在/path/to/openstack/cinder/.venv下
再映射一下deployment即可.
先从remote下载下来, 之后全部是IDE修改自动上传
(7) 运行, 以cinder-scheduler为例(因为现在在搞这个,哈哈):
1.仿照cat `which cinder-scheduler`创建文件0/run.py
2.配置cinder.conf
(6) 最近在研究IntanceLocalityFilter, 各种故障,总结如下:
1.cinder.conf的相关配置必须完整如下:
scheduler_default_filters = InstanceLocalityFilter,AvailabilityZoneFilter,CapacityFilter,CapabilitiesFilter
nova_catalog_admin_info = compute:nova:adminURL
nova_catalog_info = compute:nova:publicURL
os_privileged_user_auth_url = http://YOURSELF:35357
os_privileged_user_name = cinder
os_privileged_user_password = CINDERPASSWORD
os_privileged_user_tenant = service
原因:不细说了, 只能说真的是垃圾代码
2.需要安装一下cinder到site-package, 要不然找不到各种filter插件
cd /path/to/openstack/cinder
tools/with_venv.sh python setup.py install
2. cinder自带的requirements里python-novaclient是:
but, 你运行会发现找不到IntanceLocalityFilter.
原因: 见cinder/computer/nova.py LINE:24
使用tools/install_venv.py安装的版本是9.x.x, 你会发现cinder/.venv/lib/python2.7/site-packages/novaclient/*根本就没service_catalog
解决办法:
centos的rpm版本安装的是6.0.1
s0, 指定安装6.0.1的novaclient即可:
tools/with_venv.sh pip install python-novaclient==6.0.1
会自动卸载9.x.x版本而安装6.0.1
再查看cinder/.venv/lib/python2.7/site-packages/novaclient/, 已经有了文件service_catalog.py自此,全部解决