将curl API PUT转换为Ansbile Playbook

时间:2016-08-10 19:16:26

标签: api uri ansible

目前,我使用curl向我的API发送HTTP PUT:

curl -k -s -u icinga:icinga -H 'Accept: application/json' -X PUT 'https://localhost:5665/v1/objects/hosts/dbserver.example.com' -d '{ "templates": [ "generic-host" ], "attrs": { "zone": "vienna", "address": "xxx.xx.xx.x", "check_command": "hostalive", "vars.os" : "Linux", "vars.agent" : "ssh" } }' | python -m json.tool

这就像一个魅力。

我试图将此api调用转换为ansible playbook。我知道ansible提供了URI模块,所以我尝试使用它,但也许没有正确配置。

---
- name: Add new host
  uri:
      url: icinga2.example.com:5665/v1/objects/hosts/client.example.com
      method: PUT
      user: admin
      password: xxxxxxx
      body: { templates: [ "generic-host" ], attrs: { "zone": "vienna", 
"address": "172.x.x.xx", "check_command": "hostalive", "vars.os" : "Linux", "vars.agent" : "ssh" } }
      headers: "application/json"
  register: icinga_log
  when: inventory_hostname in groups ['vienna']
  with_items: "{{ groups['icinga-monitoring'] }}"

1 个答案:

答案 0 :(得分:1)

通常,您可以按照ansible生成的错误消息并修复您的语法 尝试从这个修改开始:

- name: Add new host
  uri:
    url: http://icinga2.example.com:5665/v1/objects/hosts/client.example.com
    method: PUT
    user: admin
    password: xxxxxxx
    body: '{ templates: [ "generic-host" ], attrs: { "zone": "vienna", "address": "172.x.x.xx", "check_command": "hostalive", "vars.os" : "Linux", "vars.agent" : "ssh" } }'
    body_format: json
    headers:
        Content-Type: application/json