【问题标题】:How to update arguments of a role using host vars values in Ansible?如何使用 Ansible 中的主机变量值更新角色的参数?
【发布时间】:2021-04-19 12:21:25
【问题描述】:

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

剧本:

- 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 下使用的。任何建议将不胜感激。

【问题讨论】:

  • 宿主变量AID是字符串还是字符串列表?在这两种情况下 - 您需要拆分 AID 中的值以获得字符串列表 - 然后遍历列表项并将其添加到带有标签的字典 datadog_config.tags 中:“{{ ['AID:'] | product(AID) | map('join') | list }}" - 见itix.fr/blog/ansible-add-prefix-suffix-to-list
  • AID 值更新为字符串值。
  • 所以你需要将“AID: 100 101 ..”中的字符串部分拆分成一个[100,101,...]的列表,然后加上前缀(如果你真的需要的话)。我会在执行期间添加它)而不是 product()...

标签: ansible ansible-2.x datadog


【解决方案1】:

正如@TRW 在 cmets 中所说,使用它应该可以解决问题:

- 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 }}"

【讨论】:

    猜你喜欢
    • 2015-04-27
    • 2019-11-01
    • 2023-02-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-10-03
    • 2020-09-07
    相关资源
    最近更新 更多