使用Ansible playbook执行curl -X

28
我希望您能使用 Ansible Playbook 执行下一个命令:
curl -X POST -d@mesos-consul.json -H "Content-Type: application/json" http://marathon.service.consul:8080/v2/apps

如何运行它?

如果我运行:

- name: post to consul
  uri:
    url: http://marathon.service.consul:8080/v2/apps/
    method: POST
    body: "{{ lookup('file','mesos-consul.json') }}"
    body_format: json
    HEADER_Content-Type: "application/json"

我遇到了以下错误:

致命错误:[172.16.8.231]:失败!=> {"failed": true,"msg":"ERROR!the file_name '/home/ikerlan/Ik4-Data-Platform/ansible/playbooks/Z_PONER_EN_MARCHA/dns-consul/mesos-consul.j2' does not exist, or is not readable"}


将您的curl命令粘贴到https://curlconverter.com/ansible/中尝试。 - user3064538
1个回答

56

最佳方式是使用URI模块:

tasks:
- name: post to consul
  uri:
    url: http://marathon.service.consul:8080/v2/apps/
    method: POST
    body: "{{ lookup('file','mesos-consul.json') }}"
    body_format: json
    headers:
      Content-Type: "application/json"

由于您的JSON文件位于远程计算机上,最简单的执行方式可能是使用shell模块:

- name: post to consul
  shell: 'curl -X POST -d@/full/path/to/mesos-consul.json -H "Content-Type: application/json" http://marathon.service.consul:8080/v2/apps'

感谢@smiller171,但它尝试执行playbook中的文件'mesos-consul.json',而不是远程机器上的文件。当我执行您的模块时,出现了故障,详见描述。 - Asier Gomez
你可以使用 fetch模块 从远程节点检索json文件,然后使用URI模块,或者您可以使用"script"模块在远程节点上执行curl命令。我可以更新我的答案以说明您更喜欢的方法。 - MillerGeek
我认为使用脚本模块是运行命令最简单的方法,因为我对ansible没有太多经验,所以请您尽量用最容易理解的方式。谢谢 @smiller171 - Asier Gomez
已更新为shell模块替代方案。 - MillerGeek

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接