我想在Python中编写一个脚本,它给出了两个参数:host& hostgroup,使用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可以理解的方式传递参数?
在此先感谢任何帮助将不胜感激!
答案 0 :(得分:2)
抱歉,我找到了办法,但我忘记发布了。 下一个代码可以解决这个问题:
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())
答案 1 :(得分:1)
确保知道您是否正在使用theForeman API的v1或v2 /如果您可以选择使用Hammer,也可以查看它。
使用CURL,使用API(使用RHOS)在Foreman上创建新主机的语法如下所示:
curl -i -X POST POST -H“Content-Type:application / json”-d“{\”host \“:{\”operatingsystem_id \“:\”2 \“,\”r:\“ 10.0.0.20 \“,\”mac \“:\”52:53:00:1e:69:69 \“,\”domain_id \“:\”1 \“,\”puppet_proxy_id \“:\”1 \ “,”\“name \”:\“testhost1 \”,\“medium_id \”:\“7 \”,\“architecture_id \”:\“1 \”,\“ptable_id \”:\“12 \”} }“ - user 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