基于满足条件Ansible填充变量

基于满足条件Ansible填充变量,ansible,Ansible,有人知道一篇好文章解释了如何根据满足的条件填充变量吗 例如: - name: test file: path: "{{ item.path }}" state: directory owner: "{{ item.owner }}" group: "{{ item.group }}" mode: 0755 loop: - { path: "{{ file_location }}", owner: "{{ user }}", group:

有人知道一篇好文章解释了如何根据满足的条件填充变量吗

例如:

- 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 }}"  }
tasks:
  - name: "shut down Debian flavored systems"
    command: /sbin/shutdown -t now
    when: ansible_facts['os_family'] == "Debian"
当机器名为XXX时,需要使用名为“X”的用户和组填充第一个:
所有者:“{{user}}”,组:“{{group}}”

然后,当机器名为YYY时,用名为“Y”的用户和组填充第二个:
所有者:“{{user}}”,组:“{{group}}”

我还没有尝试过任何东西,因为我不确定如何解决这个问题,任何指向文档或示例的指针都将不胜感激


谢谢

您可以使用
set\u 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 }}"

:

有时,您可能希望跳过特定主机上的特定步骤。如果操作系统是一个特定的版本,这可能是一件简单的事情,比如不安装特定的软件包;如果文件系统已满,则可能是执行一些清理步骤

在Ansible with the when子句中很容易做到这一点,它包含一个没有双花括号的原始Jinja2表达式(请参见group_by–基于事实创建Ansible组)。其实很简单:

tasks:
  - name: "shut down Debian flavored systems"
    command: /sbin/shutdown -t now
    when: ansible_facts['os_family'] == "Debian"
Q:“当机器名为XXX时,填充所有者:“x”。然后当机器名为YYY时,填充所有者:“y”。”

A:可以用。例如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'
,或者可以使用


请参阅。

当机器名为XXX时
——这指的是ansible主机?@error404 correct谢谢,我只是想确认一下。弗拉基米尔·博特卡(Vladimir Botka)提出的以下建议应该得到采纳preferred@error404谢谢,我会试一试的谢谢,我会试一试的。