【问题标题】:Ansible, how to join multiple arrays in a single file?Ansible,如何在一个文件中加入多个数组?
【发布时间】:2020-11-03 17:43:02
【问题描述】:

使用它作为我的样板:https://github.com/modcloth/ansible-role-modcloth-sumologic-collector - 效果很好,但我正在寻找一些关于如何扩展它以满足我的预期需求的建议。我需要能够基于多个数组创建 JSON 文件。

以下是我在 SumoLogic JSON 源中需要的默认数组。

roles/sumologic/defaults/main.yml:

sumologic_collector_default_log_path:

- { name: "Auth Log", path: "/var/log/auth.log", use_multiline: false, category: "OS/Linux/Auth" }

假设我想从 group_vars/app_server.yml 向 SumoLogic JSON 文件添加一个附加文件:

- { name: "Package Log", path: "/var/log/nginx/access.log", use_multiline: fasle, category: "OS/Linux/Nginx" }

如何使用模板将上述示例合并到同一个目标文件中?

很高兴提供更多详细信息。不完全确定我的思路是否有意义,尽管我认为 set_fact 是这样做的一种方式,但我还没有足够的理解来想办法。

【问题讨论】:

    标签: ansible


    【解决方案1】:

    Ansible 使用的模板引擎 Jinja2 为您提供了轻松合并列表的选项:

    array1 + array2
    

    这是一个完整的示例剧本:

    ---
    
    - name: Testing
      hosts: localhost
      gather_facts: no
      vars:
        array1:
          - a
          - b
          - c
        array2:
          - x
          - y
          - z
      tasks:
        - debug:
            msg: "{{ array1 + array2 }}"
    
    ...
    

    输出:

    PLAY [Testing] **************************************************************** 
    
    TASK: [debug msg="{{ array1 + array2 }}"] ************************************* 
    ok: [localhost] => {
        "msg": "['a', 'b', 'c', 'x', 'y', 'z']"
    }
    
    PLAY RECAP ******************************************************************** 
    localhost                  : ok=1    changed=0    unreachable=0    failed=0
    

    【讨论】:

    • 完美! Jinja2 合并列表就是答案:{% for source in sumologic_collector_default_log_path|list + sumologic_collector_application_log_path|list %}
    猜你喜欢
    • 2018-06-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-09-29
    • 2016-10-05
    • 1970-01-01
    相关资源
    最近更新 更多