过滤Ansible中的Vars数组

时间:2018-04-27 13:28:14

标签: arrays nginx server ansible

目前我们有一个 huge 文件,其中包含我们所处理的每个网站的所有nginx配置。该文件大约有150行左右的网站:

- { nginx_tempalte: 'site.conf.tpl', domain: 'example.com', server: 'ServerA', enabled: true, conf_name: 'example_site'  }

我们的剧本循环每次变换2次。一旦进入sites-enabled,另一个进入符号链接。每个循环大约需要5分钟,这不是理想的。

我尝试设置一个嵌套循环,该循环接收一个已注册的变量,该变量具有来自站点的所有配置名称,并根据之前的给定变量检查它们。然而,这似乎更像是同样的方法。

我希望能帮助您过滤这些文件。

1 个答案:

答案 0 :(得分:1)

这取决于你是如何得到这个词典的。如果它是变量,您可以:

---
- name: Test
  hosts: localhost
  gather_facts: False

  # with predefined vars
  vars:

    nginx: { nginx_tempalte: 'site.conf.tpl', domain: 'example.com', server: 'ServerA', enabled: true, conf_name: 'example_site'  }

  tasks:

    - name: Fact
      set_fact:
        domain: "{{ nginx['domain'] }}"
        server: "{{ nginx['server'] }}"

    - name: Print Domain
      debug:
        var: domain

    - name: Print Server
      debug:
        var: server

并且您将同时拥有两个值:

PLAY [Test] ********************************************************************************************************************

TASK [Fact] ********************************************************************************************************************
ok: [localhost]

TASK [Print Domain] ************************************************************************************************************
ok: [localhost] => {
    "domain": "example.com"
}

TASK [Print Server] ************************************************************************************************************
ok: [localhost] => {
    "server": "ServerA"
}

PLAY RECAP *********************************************************************************************************************
localhost                  : ok=3    changed=0    unreachable=0    failed=0