在做需求的时候发现似乎没有CM的python的重启api于是去看了下,他们自己做的CM的api的工作过程:
1.以cms为例
他的inspect_hosts调用的其实就是一个_cmd,括号里的inspectHosts 看着似乎哪里见到过,翻出官方的api文档
发现在官方的输入命令的文档里有这行语句,所以这运行的底层机制其实就是一目了然了,其实调用python方法就是官方给你添加了cmd语句,那么是怎么运行的呢?
在cms.py里找不到_cmd这个内部方法,就可以想到,他是继承了父类的这个内部方法
我们查找BaseApiResource这个基类,在types.py里可以找到也可以用查找类的命令找到
我们可以看到BaseApiResource这个类里有这个方法
这里有很多默认参数,如果你要修改可以修改,如果不修改就是默认的参数比如api_versionApiCommand是什么呢?
那么就可以很清晰的看到为什么会是/cm/commands/inspectHosts了,我们再往下追查
看到了这是更底层的调用
到这一步其实就是可以了,但是还可以往下看看这个getattr是干嘛的
说白了就是 资源.post的一个组合,这里已经写的很清楚了, is equivalent to x.y
而resource_root其实就是在初始化中@param resource_root: API resource object. 资源的一个基类
探索了这些,其实我们就可以对cms的命令进行随意的组合了
2.当然在cms中我们还发现了_put的请求也可以看下
对应的api就是
同样也是基类当中
我们看到调用的还是_call方法,这下更清楚底层的调用模式
相似的还有delete
和get
附录更新记录
后来发现还是有的,只不过clouderamanager的一些操作在service,这里记下
网友评论