Ansible根据事实设置变量值

时间:2016-01-11 07:08:31

标签: ansible

我想制作一个将一些文件复制到客户端的ansible任务。 将复制哪个文件由客户端体系结构(x86或i386)决定。 没有代码重复的最佳方法是什么?

我的意思是,如果我只使用一个任务就会很棒:

name: copy file
copy: src={{ src }} dest={{ dest }}

有一些操纵。

3 个答案:

答案 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_64i386。 每个都包含my_file(包含相关内容)。

我的角色包含以下任务:

name: copy file
copy: src={{ ansible_architecture }}/my_file dest={{ dest }}