Python脚本使用Foreman的API更新主机

时间:2014-07-15 16:40:26

标签: python curl httprequest kerberos theforeman

我想在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可以理解的方式传递参数?

在此先感谢任何帮助将不胜感激!

2 个答案:

答案 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