Ansible:通过HTTP安装tarball

Ansible:通过HTTP安装tarball,http,installation,ansible,Http,Installation,Ansible,我想扩展我的ansible playbook,以便在我的Debian 7机器上安装/验证phantomjs和wkhtmltopdf的安装。这两个程序都可以通过HTTP以打包tarball的形式提供。我知道get_url模块,但它不解包,如果我添加一些shell命令来解包和移动二进制文件,我怀疑每次运行ansible时,tarball都会被下载、解包和再次移动,从而导致不必要的网络流量 我怎样才能解决这个问题?我应该创建一个.deb文件并使用apt命令运行它,还是应该创建一个新的ansible模块

我想扩展我的ansible playbook,以便在我的Debian 7机器上安装/验证phantomjs和wkhtmltopdf的安装。这两个程序都可以通过HTTP以打包tarball的形式提供。我知道get_url模块,但它不解包,如果我添加一些shell命令来解包和移动二进制文件,我怀疑每次运行ansible时,tarball都会被下载、解包和再次移动,从而导致不必要的网络流量


我怎样才能解决这个问题?我应该创建一个.deb文件并使用apt命令运行它,还是应该创建一个新的ansible模块来安装tarball,或者是否有我忽略的东西?

如果您下载特定版本(例如
foo_1.2.3.tar.gz
而不是
foo_latest.tar.gz
),您可以通过保留下载的tarball来实现这一点:

- name: Gets tarball
  sudo: yes
  sudo_user: "{{ deploy_user }}"
  get_url:
    url="http://some.host/some_tarball-{{ tarball_version }}.tar.gz"
    dest="/home/{{ deploy_user }}/"
  register: new_archive

- name: Unarchive source
  sudo: yes
  sudo_user: "{{ deploy_user }}"
  unarchive:
    src="/home/{{ deploy_user }}/some_tarball-{{ tarball_version }}.tar.gz"
    dest="/home/{{ deploy_user }}/app/"
    copy=no
  when: new_archive|changed

根据您的环境更改变量。

您还可以使用unarchive模块直接从HTTP源解压缩tar文件


-名称:直接从HTTP源下载并解压缩
无归档:
src:“http://your_tarball_to_download.tar.gz"
dest:“/home/dest\u目录”
抄送:没有


关于非归档模块的更多信息可以在文档中找到

Nice,我没有仔细查看get_url文档,它们非常明确地指出,文件只有在dest不存在时才被下载。是否有关于
changed
过滤器的文档,我只能找到使用它的示例,但没有解释?事实上,如果变量注册在返回“changed”的任务中,则
changed
为真。这意味着在运行任务时,某些内容已“更改”。在我们的例子中,这意味着该文件不存在且未下载。它不是特定于
get\u url
,它是一个可以应用于变量的过滤器(请参阅)。请注意,文件传输已中断,您是安全的,因为只有在传输成功后,
get\u url
才会将文件复制到指定的目标。注意之二:我修复了错误的非归档src文件名。请使用
version\u added 2.0
更新您的答案,并记住
copy=
已被弃用。谢谢您,Konstantin Suvorov。我知道
copy=
不推荐使用
remote\u src
。但是,使用
remote\u src=yes
为我去除
http://
中的第二个
/
,这里的其他人也报告了该问题
https://github.com/ansible/ansible-modules-core/issues/4498