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

daf*_*ero 5 python curl kerberos httprequest 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
Run Code Online (Sandbox Code Playgroud)

但是现在,我想使用Python脚本来做到这一点。

我使用的Python 请求库没有问题,直到我必须传递参数时为止。

我正在关注此信息http://docs.python-requests.org/en/latest/user/quickstart/#passing-parameters-in-urls,但显然这是行不通的,因为这不是领班API期望的方式接收参数。

那么,有什么想法可以以Foreman可以理解的方式传递参数吗?

在此先感谢您的帮助!

daf*_*ero 3

Sorry, I found out the way to do it but I forgot to post it. The next code would do the trick:

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())
Run Code Online (Sandbox Code Playgroud)