首页 > 解决方案 > Ansible Inventory - 在循环中使用组中的主机条目

问题描述

背景:我有一个由先前运行的进程构建的动态 ansible 库存,直到此任务完成后我才知道 IP。我有 2 个组:库存文件中定义的数据库服务器和 Web 服务器。我要完成的具体任务是创建 some_user@'dynamic_ip_of_webserver_group'。

我想我很接近,但有些事情不太对劲。在我的 dbserver 角色主要任务中,我有:

- name: Create DB User
      mysql_user:
        name: dbuser
        host: "{{ item }}"
        password: "{{ mysql_wordpress_password }}"
        priv: "someDB.*:ALL"
      with_items:
        - "{{ ansible_hostname }}"
        - 127.0.0.1
        - ::1
        - localhost
        - "{{ hostvars[groups['webservers']] }}"

这会出错:

TASK [dbservers : Create DB User] *******************************************************************************************************************************************************************
fatal: [10.10.10.13]: FAILED! => {"msg": "ansible.vars.hostvars.HostVars object has no element [u'10.10.10.30', u'10.10.10.240']"}

它显示了正确的 IP,只有 2 个,所以这两个都是正确的。我认为它试图将库存项目作为对象而不是实际输入来访问?

库存文件:

[webservers]
10.10.10.30
10.10.10.240

标签: ansibleansible-inventory

解决方案


简单地:

- "{{ groups['webservers'] }}"

这是有效的,因为with_items扁平化了列表的第一个嵌套级别。


推荐阅读