rados 命令行函数 调试 ceph python

rados 报错

cmd = json.dumps({“prefix”: “osd pool ls detail”,”format”: “json”})
r = cluster.mon_command(cmd,b””)

err:
(-22, ”, u’command not known’)

故事开局

一天下午小k 在调试 cinder 项目。 其中调用了 ceph rados 接口。
在命令行中 执行 ceph osd pool ls detail 是ok的。
但是在 rades command 接口中调用 detail 是有错误的。


cmd = json.dumps({"prefix": "osd pool ls detail","format": "json"})
r = cluster.mon_command(cmd,b"detail") 
print(r)

python learn_rados.py 
-->
(-22, '', u'command not known')

复制代码

但是更奇怪的是 osd pool ls 却可以执行成功。


cmd = json.dumps({"prefix": "osd pool ls detail","format": "json"})
r = cluster.mon_command(cmd,b"detail") 
print(r)

python learn_rados.py 
-->
(0, '["volumes","backups","nvme","rados_create_pool"]', u'')

复制代码

解决思路

搞不定,求老板,滑稽。谁让我家老板都是 码农出身。

老板告诉我,官方的 /usr/bin/ceph 可以正常执行 ceph osd pool ls detail

你可以去调试一下 python 代码呀。

命令行 调试 python

python -m pdb  /root/codes/ceph.py osd pool ls detail
复制代码

vscode 界面调试

记得在 调试设置中, 设置 命令参数

cd /root/codes ; /usr/bin/env /usr/bin/python /root/.vscode-server/extensions/ms-python.python-2020.12.424452561/pythonFiles/lib/python/debugpy/launcher 14937 -- /root/codes/ceph.py osd pool ls detail 

复制代码

解决问题


cmd = json.dumps({"prefix": "osd pool ls","detail":"detail","format": "json"})
r = cluster.mon_command(cmd,b"") 
print(r)

-->
python learn_rados.py 
(0, '[{"pool_id":1,"pool_name":"volumes","create_time":"2020-12-16 21:02:52.159080","flags":8193,"flags_names":"hashpspool,selfmanaged_snaps","type":1,"size":2,

复制代码

vscode截图

在这里插入图片描述

© 版权声明
THE END
喜欢就支持一下吧
点赞0 分享