以nova为例
1:进入nova_api容器查看nova进程
docker exec -it -uroot nova_api bash
(nova-api)[root@bjjdkg-control01 /]# ps -ef | grep nova
nova 1 0 0 Jan14 ? 00:00:00 dumb-init --single-child -- kolla_start
nova 7 1 0 Jan14 ? 00:21:03 /var/lib/kolla/venv/bin/python /var/lib/kolla/venv/bin/nova-api
nova 40 7 0 Jan14 ? 00:02:15 /var/lib/kolla/venv/bin/python /var/lib/kolla/venv/bin/nova-api
nova 41 7 0 Jan14 ? 00:02:18 /var/lib/kolla/venv/bin/python /var/lib/kolla/venv/bin/nova-api
nova 42 7 0 Jan14 ? 00:02:20 /var/lib/kolla/venv/bin/python /var/lib/kolla/venv/bin/nova-api
nova 43 7 0 Jan14 ? 00:02:21 /var/lib/kolla/venv/bin/python /var/lib/kolla/venv/bin/nova-api
nova 44 7 0 Jan14 ? 00:02:22 /var/lib/kolla/venv/bin/python /var/lib/kolla/venv/bin/nova-api
nova 45 7 0 Jan14 ? 00:00:00 /var/lib/kolla/venv/bin/python /var/lib/kolla/venv/bin/nova-api
nova 46 7 0 Jan14 ? 00:00:00 /var/lib/kolla/venv/bin/python /var/lib/kolla/venv/bin/nova-api
nova 47 7 0 Jan14 ? 00:00:00 /var/lib/kolla/venv/bin/python /var/lib/kolla/venv/bin/nova-api
nova 48 7 0 Jan14 ? 00:00:00 /var/lib/kolla/venv/bin/python /var/lib/kolla/venv/bin/nova-api
nova 49 7 0 Jan14 ? 00:00:00 /var/lib/kolla/venv/bin/python /var/lib/kolla/venv/bin/nova-api
root 109 86 0 16:47 pts/0 00:00:00 grep --color=auto nova
2:退出容器,修改nova_api配置文件config.json,如下:
vim /etc/kolla/nova-api/config.json
{
"command": "nova-api",
"config_files": [
{
"source": "/var/lib/kolla/config_files/nova.conf",
"dest": "/etc/nova/nova.conf",
"owner": "nova",
"perm": "0600"
} ],
"permissions": [
{
"path": "/var/log/kolla/nova",
"owner": "nova:nova",
"recurse": true
}
]
}
修改nova-api为:"command": "sleep infinity"
之后重启nova_api 容器
3:进入容器,进行打断点
以nova resize功能处打断点,如下:
路径/var/lib/kolla/venv/lib/python2.7/site-packages/nova/api/openstack/compute/
编辑servers.py文件
@wsgi.response(202)
@wsgi.expected_errors((400, 401, 403, 404, 409))
@wsgi.action('resize')
@validation.schema(schema_servers.resize)
def _action_resize(self, req, id, body):
"""Resizes a given instance to the flavor size requested."""
import pdb;pdb.set_trace() ###在此处打断点
resize_dict = body['resize']
flavor_ref = str(resize_dict["flavorRef"])
kwargs = {}
helpers.translate_attributes(helpers.RESIZE, resize_dict, kwargs)
self._resize(req, id, flavor_ref, **kwargs)
4:启动nova服务
(nova-api)[root@control01 /]# /var/lib/kolla/venv/bin/python /var/lib/kolla/venv/bin/nova-api
5:执行resize 操作
nova resize 52e424e6-e47d-4759-a35d-8b46a0433c77 c8063675-ebf1-4c74-978d-a2645d6071d8
6:容器内部会自动进入pdb代码调试环境
(nova-api)[root@bjjdkg-control01 /]# /var/lib/kolla/venv/bin/python /var/lib/kolla/venv/bin/nova-api
> /var/lib/kolla/venv/lib/python2.7/site-packages/nova/api/openstack/compute/servers.py(1039)_action_resize()
-> resize_dict = body['resize']
(Pdb)
(Pdb)
7:打印变量。执行下一步
(nova-api)[root@bjjdkg-control01 /]# /var/lib/kolla/venv/bin/python /var/lib/kolla/venv/bin/nova-api
> /var/lib/kolla/venv/lib/python2.7/site-packages/nova/api/openstack/compute/servers.py(1039)_action_resize()
-> resize_dict = body['resize']
(Pdb)
(Pdb) n
> /var/lib/kolla/venv/lib/python2.7/site-packages/nova/api/openstack/compute/servers.py(1040)_action_resize()
-> flavor_ref = str(resize_dict["flavorRef"])
(Pdb) n
> /var/lib/kolla/venv/lib/python2.7/site-packages/nova/api/openstack/compute/servers.py(1042)_action_resize()
-> kwargs = {}
(Pdb) p flavor_ref
'c8063675-ebf1-4c74-978d-a2645d6071d8'
(Pdb)
8:pdb基本使用
参数
n 程序执行下一步
p 打印变量
q 退出pdb调试
s 跟n相似,但是如果当前有一个函数调用,那么s会进入被调用的函数体中
j 跳转到指定行数
c 程序继续运行,直到遇见断点