用于取消归档的 ansible 本地文件路径
Posted
技术标签:
【中文标题】用于取消归档的 ansible 本地文件路径【英文标题】:ansible local file path for unarchive 【发布时间】:2015-03-05 21:17:21 【问题描述】:我认为这是一项相当常见的任务,即获取本地存档文件,将其传输到服务器,然后在那里解压缩。我为此使用了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
我的问题是这是处理这种情况的最佳方法吗?所有文档都有硬编码的示例文件名和路径,我在文档中没有看到任何证据表明每个部署都可以直接设置不同的变量。
【问题讨论】:
我们将版本号定义为 host_var 中的变量,或者更常见的是 group_var 文件中的变量。然后,当我们想要测试一个新包时,我们只需更新 test/staging group_vars 文件中的版本,当我们准备升级生产时,我们更新生产 group_vars 文件。 【参考方案1】:虽然在命令行上传递额外的 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
并在你的游戏中定位它。
【讨论】:
以上是关于用于取消归档的 ansible 本地文件路径的主要内容,如果未能解决你的问题,请参考以下文章