Ansible 根据事实设置变量值

And*_*mas 5 ansible

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

我的意思是,如果我可以只使用一项任务,比如:

name: copy file
copy: src={{ src }} dest={{ dest }}
Run Code Online (Sandbox Code Playgroud)

经过一些操纵。

udo*_*dan 2

您可以将系统特定设置存储在以体系结构命名的 vars 文件中。

在您的角色中,您将拥有一个x86.yml包含以下内容的文件:

...

copySrc: fileA
copyDest: /some/path/A

---
Run Code Online (Sandbox Code Playgroud)

和同样的i386.yml

...

copySrc: fileB
copyDest: /some/path/B

---
Run Code Online (Sandbox Code Playgroud)

然后使用系统事实ansible_architecture包含正确的文件:

- include_vars: "{{ ansible_architecture }}.yml"

- name: Copy file
  copy:
    src={{ copySrc }}
    dest={{ copyDest }}
Run Code Online (Sandbox Code Playgroud)