Ansible unarchive模块 - 用于' src'的模式匹配参数

时间:2017-03-08 16:21:33

标签: deployment ansible continuous-deployment

构建配置中,CI服务器构建服务包,为其分配特定的版本,然后将其存档到文件中:服务Version.tgz

部署配置中,相同的CI服务器会下载此类可变命名的包。此配置希望复制存档,解压缩并在某些主机上部署服务。

在Ansible代码中表达:

 - name: Unpack Service on remote host
   unarchive: src="{{ src_dir }}/Service-*.tgz" dest="{{ host_dest_dir }}"

理想情况下:Ansible会尝试在模式中匹配任何带有文件名的内容。

实际上,这不起作用:

fatal: [127.0.0.1]: FAILED! => {"changed": false, "failed": true, "msg": "Unable to find '(...)/deploy/Service-*.tgz' in expected paths."}

如何让Ansible接受' src'?

的可变名称

(我想我可以通过点击目录创建一个注册真实姓名的任务,但也许这可以在 Ansible本身中完成?)

2 个答案:

答案 0 :(得分:3)

正如之前对您的问题的评论所指出的另一种方法(假设Ansible 2+)是find模块。这看起来像是:

- name: Find Service package
  find: paths="{{ src_dir }}" patterns="Service-*.tgz"
  register: find_result
- name: Unpack service on remote host
  unarchive: src="{{ item.path }}" dest="{{ host_dest_dir }}"
  with_items: "{{ find_result.files }}"

答案 1 :(得分:1)

如果您的CI服务器知道文件名并且正在运行ansible,那么您可以在命令行上设置文件名的版本,然后在您的任务中引用它:

ansible-playbook play.yml --extra-vars "version=${VERSION_FROM_CI_SERVER}"