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