我想制作一个将一些文件复制到客户端的ansible任务。 将复制哪个文件由客户端体系结构(x86或i386)决定。 没有代码重复的最佳方法是什么?
我的意思是,如果我只使用一个任务就会很棒:
name: copy file
copy: src={{ src }} dest={{ dest }}
有一些操纵。
答案 0 :(得分:3)
您可以使用Jinja2 if expressions:
vars:
src: "{{ 'file_amd64.tar.gz' if ansible_architecture == 'x86_64' else 'file_i386.tar.gz' }}"
tasks:
- name: copy file
copy: src={{ src }} dest={{ dest }}
答案 1 :(得分:1)
您可以将系统特定设置存储在以架构命名的vars文件中。
在您的角色中,您的文件x86.yml
包含内容:
...
copySrc: fileA
copyDest: /some/path/A
---
同样适用于i386.yml
:
...
copySrc: fileB
copyDest: /some/path/B
---
然后使用系统事实ansible_architecture
包含正确的文件:
- include_vars: "{{ ansible_architecture }}.yml"
- name: Copy file
copy:
src={{ copySrc }}
dest={{ copyDest }}
答案 2 :(得分:0)
我最终这样做了:
我在files
目录中有2个目录:x86_64
和i386
。
每个都包含my_file
(包含相关内容)。
我的角色包含以下任务:
name: copy file
copy: src={{ ansible_architecture }}/my_file dest={{ dest }}