非归档文件的ansible本地文件路径

非归档文件的ansible本地文件路径,ansible,ansible-playbook,Ansible,Ansible Playbook,我有一项我认为相当常见的任务,就是获取本地存档文件,将其传输到服务器,然后在那里提取。我正在使用unarchive模块来实现这一点,但是我正在努力用一种优雅的方式来处理本地文件名总是不同的问题,因为文件名包含软件版本。例如,下面是一个剧本的摘录: - name: Upload code unarchive: src={{payload_file}} dest={{install_dir}} 我可以运行此命令并使用-e设置变量: ansible-playbook -e payload_fil

我有一项我认为相当常见的任务,就是获取本地存档文件,将其传输到服务器,然后在那里提取。我正在使用
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:将
payload version.zip
文件放在一个目录中,并以glob作为该目录的目标。该目录中的任何文件都将未归档(如果只有一个文件,则实现相同的行为):


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

我们在主机变量或组变量文件中定义了版本号。然后,当我们想要测试一个新包时,我们只需更新测试/暂存组\u vars文件中的版本,当我们准备升级生产时,我们更新生产组\u vars文件。
- name: Upload code
  unarchive: src={{item}} dest={{install_dir}}
  with_fileglob:
    - /tmp/payloads/*