我想用Python写一个脚本,给出两个参数,host &;使用Foreman API (http://theforeman.org/api/apidoc/v1/hosts/update.html)更改主机的主机组。
cURL命令,它是这样做的(它工作!):
curl -s -H "Accept:application/json" -X PUT --insecure --negotiate -u : -d "host[hostgroup_id]=ZZZZZ" https://foreman.mydomain.com:443/api/hosts/XXXX
但是现在,我想用一个Python脚本来做。
我使用Python 请求库没有问题,直到我到达我必须传递参数的部分。
我正在跟踪此信息http://docs.python-requests.org/en/latest/user/quickstart/#passing-parameters-in-urls,但显然这不起作用,因为这不是Foreman的API期望接收参数的方式。
那么,我该如何以Foreman能理解的方式传递参数呢?
提前感谢任何帮助将不胜感激!
对不起,我找到了这样做的方法,但我忘了发布它。下一段代码就可以了:
def updateHost(host_id, new_hostgroup_id):
url = "https://foreman.mydomain.com:443/api/hosts/" + host_id
payload = {'host[hostgroup_id]': new_hostgroup_id}
headers = {'Accept': 'application/json'}
r = requests.put(url, data=payload, headers=headers, verify=False, uth=HTTPKerberosAuth())
if (r.status_code != requests.codes.ok):
raise BadStatusCodeRequest("HTTP Request status code error: " + r.raise_for_status())
确保知道你使用的是v1还是v2的foreman API/你也可能想看看使用Hammer,如果这是一个选项。
使用CURL,使用API(使用RHOS)在Foreman上创建新主机的语法如下:
curl - i - x发布帖子- h - d"application/json - type:{"主机":{"operatingsystem_id ","2 ","r: "10.0.0.20 ","mac ","52:53:00:1e: 69:69 ","domain_id ":"1 ","puppet_proxy_id ":"1 ","名字 ": " testhost1 ","medium_id ": " 7 ","architecture_id ":"1 ","ptable_id ": " 12 "}}"——用户youradminuser: youradminpassword http://yourhostname.openhealthmodel.com/api/hosts
参见theForeman api v2
特别是在HOST和HOSTGROUP上的GET和POST:你可以像这样迭代你现有的主机:
curl -X GET -H "Content-Type:application/json" -H "Accept: application/json"——user youradminuser:youradminpassword http://yourhostname.openhealthmodel.com/api/hosts