用于取消存档的本地文件路径

ansible local file path for unarchive

我有一个我认为相当常见的任务,即获取本地存档文件,将其传输到服务器,然后在那里解压缩。我正在为此使用 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

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

虽然在命令行上传递额外的 args 会起作用,但我通常不喜欢必须键入 运行 工作——这就是说我不认为你的解决方案不雅或无论如何都不好。

但是,如果您愿意稍微更改流程,则可以避免在调用 playbook 时添加选项。

选项 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 并在你的游戏中定位它。