在Ansible中,如何将活动角色中的变量组合到一个数组中?

在Ansible中,如何将活动角色中的变量组合到一个数组中?,ansible,Ansible,看一看其中一个答案,建议使用从多个源获取变量到一个数组中,这几乎是我需要的,但不完全是 我正在设置cloudfront_日志,它需要awslogs_日志:数组中的项。我希望能够为我的活动角色添加到这个数组中,所以在我的公共角色中添加Syslog,但是如果我有一个php角色,我希望它包含php日志 我想我可以让include_vars为所有角色工作,但我不知道如何让它只为构建中包含的角色工作。因此,如果我包含php角色,则包含php日志,但如果未包含,则不包含 当然,我可以静态地将数组包含在顶层,

看一看其中一个答案,建议使用从多个源获取变量到一个数组中,这几乎是我需要的,但不完全是

我正在设置cloudfront_日志,它需要awslogs_日志:数组中的项。我希望能够为我的活动角色添加到这个数组中,所以在我的公共角色中添加Syslog,但是如果我有一个php角色,我希望它包含php日志

我想我可以让include_vars为所有角色工作,但我不知道如何让它只为构建中包含的角色工作。因此,如果我包含php角色,则包含php日志,但如果未包含,则不包含

当然,我可以静态地将数组包含在顶层,但这似乎在架构上有点不合适,因为您希望角色能够处理自己的日志记录

您的角色可以使用set_fact任务将信息附加到变量。例如,假设您希望角色能够在logfiles事实中注册日志文件的路径;您可以在每个角色中执行以下操作:

- set_fact:
    logfiles: "{{ logfiles|default([]) + ['/var/log/something.log', '/var/log/anotherthing.log'] }}"
换句话说,如果角色/角色1/任务如下所示:

---
- set_fact:
    logfiles: "{{ logfiles|default([]) + ['/var/log/role1.log'] }}"
---
- set_fact:
    logfiles: "{{ logfiles|default([]) + ['/var/log/role2.log'] }}"
---
- hosts: localhost
  gather_facts: false
  roles:
    - role1
    - role2

  tasks:
    - debug:
        var: logfiles
角色/角色2/任务如下所示:

---
- set_fact:
    logfiles: "{{ logfiles|default([]) + ['/var/log/role1.log'] }}"
---
- set_fact:
    logfiles: "{{ logfiles|default([]) + ['/var/log/role2.log'] }}"
---
- hosts: localhost
  gather_facts: false
  roles:
    - role1
    - role2

  tasks:
    - debug:
        var: logfiles
然后是这样的剧本:

---
- set_fact:
    logfiles: "{{ logfiles|default([]) + ['/var/log/role1.log'] }}"
---
- set_fact:
    logfiles: "{{ logfiles|default([]) + ['/var/log/role2.log'] }}"
---
- hosts: localhost
  gather_facts: false
  roles:
    - role1
    - role2

  tasks:
    - debug:
        var: logfiles
将产生以下输出:


PLAY [localhost] ******************************************************************************

TASK [role1 : set_fact] ***********************************************************************
ok: [localhost]

TASK [role2 : set_fact] ***********************************************************************
ok: [localhost]

TASK [debug] **********************************************************************************
ok: [localhost] => {
    "logfiles": [
        "/var/log/role1.log", 
        "/var/log/role2.log"
    ]
}

PLAY RECAP ************************************************************************************
localhost                  : ok=3    changed=0    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0   

链接现在已修复