首页 > 解决方案 > 如何使用 Ansible 中的主机变量值更新角色的参数?

问题描述

我正在使用 Ansible Datadog 角色并尝试在目标服务器中安装和配置 datadog 代理,但是,我被困在需要使用主机变量并使用这些变量更新剧本的一部分的地步。该变量有多个由空格分隔的值。我想确保根据变量值将这些值添加到剧本中。以下示例将有助于理解需求。

剧本:

- hosts: servers
  roles:
    - { role: datadog.datadog, become: yes }
  vars:
    datadog_api_key: "{{ DD_API_KEY }}"
    datadog_config:
      tags:
        - "AID:"{{ AID }}"

在这里,标签值 AID 使用同名的主机变量,即 AID,在某些情况下,该主机变量可以具有如下值:

AID: 100 101 102 103

有没有一种方法可以根据以下格式的变量值解析 playbook 的 while execution 标签部分。

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

我相信我不能使用模板来满足这些要求,因为配置是在角色的 vars 下使用的。任何建议将不胜感激。

标签: ansibleansible-2.xdatadog

解决方案


正如@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 }}"

推荐阅读