将curl PUT转换为ansible uri模块

时间:2015-03-11 20:46:08

标签: rest curl ansible

我尝试使用PUT REST调用远程将war文件部署到tomcat管理器。我已经能够用curl实现这一目标,但我想遵循ansible最佳实践并在我的剧本中使用uri模块。

这是有效的curl命令。我是从我的工作站运行的:

curl -k -X PUT -u $TOMCAT_USER:$TOMCAT_PW --upload-file someapp.war "https://$SERVER:8443/manager/text/deploy?path=/someapp&update=true"

这是我尝试完成同样的任务(也在我的工作站上运行):

- name: Push war to Tomcat manager
  uri:
    url: "https://{{ inventory_hostname }}:8443/manager/text/deploy?path=/someapp&update=true"
    src: /opt/someapp.war
    user: "{{ tomcat_manager_username }}"
    password: "{{ tomcat_manager_password }}"
    force_basic_auth: yes
    method: PUT
  delegate_to: 127.0.0.1

ansible任务以OK状态传递但它推送空文件而不是战争。我以为你可以使用src参数替换curl中的--upload-file标志(因为uri模块使用了文件模块中的所有参数),但显然情况并非如此。

有人可以指出我在这里做错了吗?

ansible version:1.8.4

http://docs.ansible.com/uri_module.html

http://tomcat.apache.org/tomcat-8.0-doc/manager-howto.html#Deploy_A_New_Application_Archive_(WAR)_Remotely

1 个答案:

答案 0 :(得分:1)

URI Module不会将src作为参数。

尝试使用body参数确保
body="{{ lookup('file','/opt/someapp.war') }}