有人知道一篇很好的文章来解释如何根据满足的条件填充变量吗?
示例:
- name: test
file:
path: "{{ item.path }}"
state: directory
owner: "{{ item.owner }}"
group: "{{ item.group }}"
mode: 0755
loop:
- { path: "{{ file_location }}", owner: "{{ user }}", group: "{{ group }}" }
- { path: "{{ configfile_path }}", owner: "{{ user }}", group: "{{ group }}" }
当计算机名为XXX时,需要使用用户和名为“ X”的组填充第一个owner: "{{ user }}", group: "{{ group }}"
。
然后将第二个:owner: "{{ user }}", group: "{{ group }}"
填充到名为YYY的计算机上的用户和组“ yy”
我还没有尝试过任何东西,因为我不确定如何解决这个问题,任何对文档或示例的指导将不胜感激。
谢谢
答案 0 :(得分:1)
Q:“在计算机名为XXX时填充所有者:“ x”...。在计算机名为YYY时填充所有者:“ y”...。“
A:可以使用inventory。例如INI格式
$ cat hosts
XXX owner='x' group='x'
YYY owner='y' group='y'
或YAML
$ cat hosts
---
hosts:
XXX:
owner: 'x'
group: 'x'
YYY:
owner: 'y'
group: 'y'
,或者可以使用host_vars
$ tree host_vars
host_vars
├── XXX
├── YYY
$ cat host_vars/XXX
owner: 'x'
group: 'x'
$ cat host_vars/YYY
owner: 'y'
group: 'y'
答案 1 :(得分:0)
您可以使用set_fact
模块和when
子句来做到这一点。
简介
- 该模块允许设置新变量。
- 像设置模块发现的事实一样,逐个主机设置变量。
- 这些变量将在ansible-playbook运行期间供后续播放使用。
- set_fact: one_fact: something other_fact: "{{ local_var * 2 }}" another_fact: "{{ some_registered_var.results | map(attribute='ansible_facts.some_fact') | list }}"
when:
有时您可能想跳过特定主机上的特定步骤。如果操作系统是特定版本,这可能就像不安装特定软件包那样简单,或者如果文件系统已满,则可能执行一些清理步骤。
在Ansible中,使用when子句很容易做到这一点,该子句包含不带双花括号的原始Jinja2表达式(请参阅group_by –根据事实创建Ansible组)。实际上很简单:
tasks: - name: "shut down Debian flavored systems" command: /sbin/shutdown -t now when: ansible_facts['os_family'] == "Debian"