5

我想用 Python 编写一个脚本,给定两个参数主机和主机组,使用 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但显然这不起作用,因为这不是工头的 API 期望的方式接收参数。

那么,任何想法如何以工头可以理解的方式传递参数?

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

4

2 回答 2

3

抱歉,我找到了方法,但我忘记发布了。下一个代码可以解决问题:

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())
于 2014-11-13T13:18:45.253 回答
2

确保知道您使用的是 Foreman 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

请参阅工头 api v2

特别是 GET 与 POST 在 HOST 与 HOSTGROUP 上:您可以像这样迭代现有主机:

curl -X GET -H "Content-Type:application/json" -H "Accept: application/json" --user youradminuser:youradminpassword http://yourhostname.openhealthmodel.com/api/hosts

于 2014-11-12T17:54:18.250 回答