【问题标题】:How to loop through similar vars files in an Ansible playbook如何在 Ansible 剧本中循环遍历类似的 vars 文件
【发布时间】:2019-05-31 06:03:58
【问题描述】:

我需要创建一个单一的 ansible playbook,它将遍历单个目录中的多个 vars 文件,并在 rest API POST 中单独使用每个配置。

理想情况下,使用以下 vars 文件...

/my/vars/dir
  - my_pen.yml
      pen:
        color: "blue"

  - her_pen.yml
      pen:
        color: "red"

  - his_pen.yml
      pen:
        color: "green"

...我的剧本将为每支笔执行一个 POST。不幸的是,所有文件都包含相同对象类型的配置,因此 include_vars 任务只会保留“his_pen”的配置。

我已经能够使用 find 获得目录中所有文件的列表:

- name: "find config files"
  find:
    paths: /path/to/config/files
    patterns: '*.yml'
  register: config_files

我有一个可以做 POST 的任务:

- name: Do post
  uri:
    url: "{{ rest_api_endpoint }}"
    method: POST
    user: "{{ username }}"
    password: "{{ password }}"
    body: "{{ pen }}"
    body_format: json
    return_content: yes
    status_code: 200
  register: post_result

现在我只需要将两者融合。这可能吗?我无法更改文件结构,所以我必须使用现有的。

想法?

【问题讨论】:

    标签: ansible


    【解决方案1】:

    让我们先创建 pen 列表,然后循环该列表。下面的戏

    - set_fact:
        pens: "{{ pens|default([]) + [ lookup('file', item)|from_yaml ] }}"
      loop: "{{ lookup('fileglob', 'vars/*.yml', wantlist=True) }}"
    - debug:
        msg: "{{ item }}"
      loop: "{{ pens }}"
    

    给予(删节):

    ok: [localhost] => (item={'pen': {'color': u'blue'}}) => {
        "msg": {
            "pen": {
                "color": "blue"
            }
        }
    }
    ok: [localhost] => (item={'pen': {'color': u'green'}}) => {
        "msg": {
            "pen": {
                "color": "green"
            }
        }
    }
    ok: [localhost] => (item={'pen': {'color': u'red'}}) => {
        "msg": {
            "pen": {
                "color": "red"
            }
        }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-08-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-11-01
      相关资源
      最近更新 更多