【问题标题】:Looping through variable containing Ansible host group in delegate_to statement在 delegate_to 语句中循环包含 Ansible 主机组的变量
【发布时间】:2019-04-26 02:03:53
【问题描述】:

我的 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 命令填充应该在我设置为预任务的 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】:

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

    - 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
    

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

    【讨论】:

    • 是的,我想我只是通过发出调试消息msg: "{{ groups['dev_web'] }}" 解决了这个问题,它也删除了你在说什么,因为它给了我1.1.1.6 我想要的。感谢您的帮助。
    • 你真的根本不需要debug 任务,也不需要你正在创建的变量。
    • 我遇到的问题是因为我们有不同的环境(Dev、Stage、Prod),所以我在下面有一个when 语句来根据用户是否通过来确定要运行的服务器在开发、阶段或产品中。感谢您的提示,我得到了它的工作,只需将主机设置为host: {{ env }}_web。再次感谢您的帮助。
    猜你喜欢
    • 2018-05-25
    • 2013-12-27
    • 1970-01-01
    • 1970-01-01
    • 2017-03-22
    • 1970-01-01
    • 2019-08-08
    • 1970-01-01
    • 2014-11-21
    相关资源
    最近更新 更多