Python 使用Foreman';s API

Python 使用Foreman';s API,python,curl,httprequest,kerberos,theforeman,Python,Curl,Httprequest,Kerberos,Theforeman,我想用Python编写一个脚本,在给定两个参数host和hostgroup的情况下,使用Foreman API()更改主机的主机组 cURL命令执行此操作,它如下所示(它可以工作!): 但是现在,我想使用Python脚本来实现它 我使用Pythonrequest库时没有任何问题,直到我必须传递参数时到达零件 我正在关注这些信息,但显然这不起作用,因为这不是Foreman的API希望接收参数的方式 那么,我该如何以Foreman能够理解的方式传递参数呢 提前感谢您的帮助,我们将不胜感激 确保知道您

我想用Python编写一个脚本,在给定两个参数host和hostgroup的情况下,使用Foreman API()更改主机的主机组

cURL命令执行此操作,它如下所示(它可以工作!):

但是现在,我想使用Python脚本来实现它

我使用Pythonrequest库时没有任何问题,直到我必须传递参数时到达零件

我正在关注这些信息,但显然这不起作用,因为这不是Foreman的API希望接收参数的方式

那么,我该如何以Foreman能够理解的方式传递参数呢


提前感谢您的帮助,我们将不胜感激

确保知道您使用的是Foreman API的v1还是v2/若这是您的一个选项,您可能还想看看如何使用Hammer

使用CURL,使用API(使用RHOS)在Foreman上创建新主机的语法如下所示:

curl-i-X POST-H“内容类型:应用程序/json”-d“{”主机“:{”操作系统id“:”2“,”r:”10.0.0.20“,”mac“:”52:53:00:1e:69:69“,”域id“:”1“,”傀儡代理id“:”1“,”名称“:”Test1“,”媒体id“:”7“,”体系结构“:”1“,”主机id“,”12}”“--用户youradminuser:youradminpassword

请参阅Foreman api v2

特别是在主机vs主机组上获取vs.POST:您可以像这样迭代现有主机:


curl-X GET-H“Content-Type:application/json”-H“Accept:application/json”-user youradminuser:youradminpassword

对不起,我找到了方法,但忘了发布。 下一个代码将实现以下功能:

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())
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())