【问题标题】:Execute curl -X with ansible playbook使用 ansible playbook 执行 curl -X
【发布时间】:2016-06-18 07:25:23
【问题描述】:

我想使用 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"

我有下一个失败:

fatal: [172.16.8.231]: FAILED! => {"failed": true, "msg": "ERROR! thefile_name '/home/ikerlan/Ik4-Data-Platform/ansible/playbooks/Z_PONER_EN_MARCHA/dns-consul/mesos-consul.j2' does not exist, or is not readable"}

【问题讨论】:

    标签: ansible ansible-playbook ansible-2.x


    【解决方案1】:

    最好的方法是使用URI module

    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,但它尝试执行剧本的文件'mesos-consul.json',而不是远程机器,我执行你的模块时失败了,它在描述。
    • 您可以使用fetch module从远程节点获取json文件,然后使用URI模块,也可以使用“脚本”模块在远程执行curl命令节点。我可以更新我的答案以说明您喜欢的任何一个。
    • 我认为使用脚本模块是运行命令的最简单方法,我不太了解,因为我没有太多的 ansible 经验,所以我想要最简单的方法理解。谢谢@smiller171
    • 使用 shell 模块替代更新。
    猜你喜欢
    • 2017-09-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-02-19
    相关资源
    最近更新 更多