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

在delegate_to语句中循环通过包含Ansible主机组的变量,ansible,Ansible,我的Ansible计划中有一个变量,我是这样设置的- pre_tasks: - name: Hosts debug: msg: "dev_web" register: web_server_group 在我的主机文件中,我有这样一个条目- [dev_web] 1.1.1.6 在我的Ansible plan中,我有一个delegate\u to命令,该命令试图通过使用组名中定义的web\u server\u group变量在该dev\u web组内的主机上运

我的Ansible计划中有一个变量,我是这样设置的-

 pre_tasks:

  - name: Hosts
    debug:
      msg: "dev_web"
    register: web_server_group
在我的主机文件中,我有这样一个条目-

[dev_web]
1.1.1.6
在我的Ansible plan中,我有一个
delegate\u to
命令,该命令试图通过使用组名中定义的
web\u server\u group
变量在该dev\u 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}
FAILED! => {"msg": "'dict object' has no attribute 'web_server_group'"}
有没有办法让delegate_to命令填充我设置为预任务的web_server_组变量中的主机

我尝试用以下命令替换
delegate\u to
命令-

  delegate_to: '{{ item }}'
  with_items: "{{ groups['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}
FAILED! => {"msg": "'dict object' has no attribute 'web_server_group'"}
有没有其他方法可以实现这一点或类似的事情


谢谢。

我不太清楚你想做什么。具体来说,我不知道你想用这个来实现什么:

- name: Hosts
  debug:
    msg: "dev_web"
  register: web_server_group
这将创建一个名为
web\u server\u group
的变量,其内容如下:

{
    "changed": false, 
    "failed": false, 
    "msg": "dev_web"
}
您已经有了一个名为
dev\u web
的组,该组似乎正好包含您试图锁定的主机

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

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

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

是的,我想我只是通过制作调试消息
msg:{{groups['dev_web']}}}
,这也删除了您所说的内容,因为它会给我
1.1.1.6
,就像我想要的那样。谢谢你的帮助。你根本不需要调试任务,也不需要你正在创建的变量。我遇到的问题是因为我们有不同的环境(Dev,Stage,Prod),所以我在下面有一个
when
语句,根据用户是否传入Dev,Stage,或者prod。多亏了你的提示,我让它工作了,只需将主机设置为
host:{{{env}}}\uweb
。再次感谢你的帮助。