unarchive的ansible本地文件路径

时间:2015-03-05 21:17:21

标签: ansible ansible-playbook

我认为这是一个相当常见的任务,即获取本地存档文件,将其传输到服务器并在那里提取它。我正在使用unarchive模块,但是以优雅的方式处理本地文件名总是不同,因为文件名包含软件版本。例如,这是一本剧本的摘录:

- name: Upload code
  unarchive: src={{payload_file}} dest={{install_dir}}

我可以运行它并使用-e来设置变量:

ansible-playbook -e payload_file=/tmp/payload-4.2.1.zip -i production deploy.yml

我的问题是这是处理这种情况的最佳方法?所有文档都有硬编码的示例文件名和路径,我还没有看到文档中的任何证据表明每个部署的变量都会有所不同。

1 个答案:

答案 0 :(得分:2)

虽然在命令行上传递额外的args会起作用,但我通常不喜欢打字来运行这项工作 - 这就是说我不认为你的解决方案不优雅或不好无论如何。

但是,如果您愿意稍微改变一下您的流程,则可以避免在调用您的剧本时添加选项。

选项1:将payload-version.zip文件放在目录中,并使用glob定位该目录。该目录中的任何文件都将被取消归档(如果只有一个文件,则会实现相同的行为):

- name: Upload code
  unarchive: src={{item}} dest={{install_dir}}
  with_fileglob:
    - /tmp/payloads/*

选项2:将版本化文件符号链接为简单的通用名称payload-latest.zip,并将其与您的游戏一起定位(使用修改日期或为元数据设置事实)。我假设您有一个构建过程或脚本来生成zip,因此添加一个步骤以将构建版本符号链接到payload-latest.zip并将其作为目标中的目标。