我认为这是一个相当常见的任务,即获取本地存档文件,将其传输到服务器并在那里提取它。我正在使用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
我的问题是这是处理这种情况的最佳方法?所有文档都有硬编码的示例文件名和路径,我还没有看到文档中的任何证据表明每个部署的变量都会有所不同。
答案 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
并将其作为目标中的目标。