【问题标题】:Loop through hosts with ansible [duplicate]使用ansible循环访问主机[重复]
【发布时间】:2017-03-31 11:56:36
【问题描述】:

我很难找到一个有效的解决方案来循环我的库存。 我从链接意向文件开始我的剧本:

ansible-playbook -i inventory/dev.yml playbook.yml

我的剧本是这样的:

---
- hosts: localhost
  tasks:
    - name: Create VM if enviro == true
      include_role:
        name: local_vm_creator
      when: enviro == 'dev' 

因此,在加载 playbook 时,从 host_vars 读取变量 enviro 并将 when 条件设置为 dev。库存文件 dev.yml 如下所示:

[local_vm]
192.168.99.100
192.168.99.101
192.168.99.102

[local_vm_manager_1]
192.168.99.103

[local_vm_manager_2]
192.168.99.104

[local-all:children]
local_vm
local_vm_manager_1
local_vm_manager_2

我在角色 local_vm_creator 中的 main.yml 如下所示:

---
- name: Create test host
  local_action: shell docker-machine create -d virtualbox {{ item }}
  with_items:
    - node-1
    - node-2
    - node-3
    - node-4
    - node-5

- debug: msg="host is {{item}}"
  with_items:  groups['local_vm'] 

问题是我无法从 dev.yml 库存文件中获取列出的服务器。

它只是返回:

好的:[localhost] => (item=groups['local_vm']) => { “项目”:“组['local_vm']”, "msg": "主机是组['local_vm']" }

【问题讨论】:

    标签: ansible


    【解决方案1】:

    如果唯一的问题是with_items 循环,请将其替换为:

    with_items: "{{ groups['local_vm'] }}"
    

    你可以走了。 with_ 不再支持裸变量。

    【讨论】:

    • 我的组有如下所列的 hostid 和主机名: [cluster] machine1 ansible_host=10.0.0.8 machine2 ansible_host=10.2.8.8 machine3 ansible_host=10.2.9.8 。无论如何要从组中获取 ansible_host 以使用 with_items?
    • @mjm 可以使用以下语法访问主机上的变量:hostvars[item].ansible_host。关于 Ansible “魔法变量”here 的更多信息。
    • 如果其他人正在努力从官方 Ansible Github 存储库中获取 mongo 示例,那么它已经过时了,并且将裸组变量用于 with_items。
    猜你喜欢
    • 2021-12-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-06-07
    • 1970-01-01
    • 1970-01-01
    • 2018-12-28
    • 1970-01-01
    相关资源
    最近更新 更多