在delegate_to语句中循环包含Ansible主机组的变量

问题描述 投票:0回答:1

我的Ansible计划中有一个变量,我设置如此 -

 pre_tasks:

  - name: Hosts
    debug:
      msg: "dev_web"
    register: web_server_group

在我的主机文件中,我有一个这样的条目 -

[dev_web]
1.1.1.6

在我的Ansible计划中,我有一个delegate_to命令,它试图通过使用为组名定义的web_server_group变量在该dev_web组内的主机上运行。

- name: Folder creation
  file:
    path: /tmp/dummy
    owner: apache
    group: apache
    mode: 0770
    state: directory
  delegate_to: "{{ web_server_group }}"

这给了我这个错误 -

UNREACHABLE! => {"changed": false, "msg": "Failed to connect to the host via ssh: ssh: Could not resolve hostname web_server_group: Name or service not known", "unreachable": true}

有没有办法让delegate_to命令填充应该在我设置为pre-task的web_server_group变量中的主机?

我尝试用这个替换delegate_to命令 -

  delegate_to: '{{ item }}'
  with_items: "{{ groups['web_server_group'] }}"

但我得到这个错误 -

FAILED! => {"msg": "'dict object' has no attribute 'web_server_group'"}

还有另一种方法可以实现这个或类似的东西吗?

谢谢。

ansible
1个回答
1
投票

我不太清楚你要做什么。具体来说,我不知道你要用这​​个来完成什么:

- name: Hosts
  debug:
    msg: "dev_web"
  register: web_server_group

这将创建一个名为web_server_group的变量,其中包含以下内容:

{
    "changed": false, 
    "failed": false, 
    "msg": "dev_web"
}

您已经有一个名为dev_web的组,它似乎包含您要尝试定位的主机。

如果要在特定主机组上运行任务,只需创建定位该组的播放。例如:

- hosts: dev_web
  tasks:
    - name: Folder creation
      file:
        path: /tmp/dummy
        owner: apache
        group: apache
        mode: 0770
        state: directory

这将在/tmp/dummy组中的所有主机上创建dev_web目录。这里没有任何理由使用代表团。

© www.soinside.com 2019 - 2024. All rights reserved.