如何使用Ansible中的主机变量值更新角色的参数?

如何使用Ansible中的主机变量值更新角色的参数?,ansible,ansible-2.x,datadog,Ansible,Ansible 2.x,Datadog,我正在使用Ansible并尝试在目标服务器中安装和配置datadog代理,但是,我遇到了一个问题,需要使用主机变量并使用这些变量更新剧本的一部分。变量具有多个由空格分隔的值。我希望确保基于变量值将这些值添加到剧本中。下面的示例将有助于理解需求 剧本: - hosts: servers roles: - { role: datadog.datadog, become: yes } vars: datadog_api_key: "{{ DD_API_KEY }}&q

我正在使用Ansible并尝试在目标服务器中安装和配置datadog代理,但是,我遇到了一个问题,需要使用主机变量并使用这些变量更新剧本的一部分。变量具有多个由空格分隔的值。我希望确保基于变量值将这些值添加到剧本中。下面的示例将有助于理解需求

剧本:

- hosts: servers
  roles:
    - { role: datadog.datadog, become: yes }
  vars:
    datadog_api_key: "{{ DD_API_KEY }}"
    datadog_config:
      tags:
        - "AID:"{{ AID }}"
这里,标记值辅助使用具有相同名称的主机变量,即AID,在某些情况下,此主机变量可以具有如下值:

AID:100 101 102 103

是否有一种方法可以根据以下格式的变量值解析playbook的while executing标记部分

  tags:
    - AID: 100
    - AID: 101
    - AID: 102
    - AID: 103

我相信我不能为这些需求使用模板,因为配置是在角色的vars下使用的。如果您有任何建议,我们将不胜感激。

正如@TRW在评论中所说的,使用此选项可以实现以下目的:

- hosts: servers
  roles:
    - { role: datadog.datadog, become: yes }
  vars:
    datadog_api_key: "{{ DD_API_KEY }}"
    datadog_config:
      tags: "{{ ['AID: ']|product(AID.split())|map('join')|list }}"

主机变量
AID
是字符串还是字符串列表?在这两种情况下,您都需要拆分
AID
中的值以获得一个字符串列表,然后迭代列表项并将其添加到dict
datadog_config.tags
中,并使用以下标记:“{{{['AID:']| product(AID)| map('join')| list}”-请参阅将AID值更新为字符串值。因此,您需要拆分中的字符串部分将“AID:100 101…”添加到[100101,…]列表中,然后添加前缀(如果确实需要)。我会在执行过程中添加前缀),而不是product()。。。