3

我无法弄清楚如何group_by在我的剧本中使用。我有一个受限于 RHEL6 的角色,我有兴趣了解如何group_by将 RHEL6 机器与 RHEL5 机器分开。我制作了一个复合键,在我的调试任务中我可以看到它已正确设置。但是即使调试任务吐出的复合键是“RedHat-6”,playbook 也会跳过该部分hosts: RedHat-6


- hosts: abc
  user: myuser
  sudo: yes
  gather_facts: yes
  tasks:
     - group_by: key={{ ansible_distribution }}-{{ ansible_distribution_version | truncate(1, True, '') }}
     - debug: "msg={{ ansible_distribution }}-{{ ansible_distribution_version | truncate(1, True, '') }}"

- hosts: RedHat-6
  user: myuser
  sudo: yes
  gather_facts: yes
  roles:
    - somerhel6onlyrole

(我的剧本中还有一个关于 RedHat-5 的部分,但它只是调用fail

我永远无法让 group_by 主机匹配,它总是跳过。输出如下所示:

TASK: [debug msg={{ansible_distribution}}-{{ansible_distribution_version | truncate(1, True, '')}}] ***
ok: [abchost1] => {
    "msg": "RedHat-6"
}
ok: [abchost2] => {
    "msg": "RedHat-6"
}

PLAY [RedHat-6] ***************************************************************
skipping: no hosts matched

PLAY [RedHat-5] ***************************************************************
skipping: no hosts matched

我使用 group_by 是错误的还是误解了它的目的?我对ansible比较陌生;我使用的版本是 1.5.3。同样,我可以通过简单地以不同的方式验证来解决问题,但我想知道如何正确使用 group_by。预先感谢您的帮助!

4

1 回答 1

3

您已经很接近了,但您需要按如下方式引用密钥:

tasks:
 - group_by: key="{{ ansible_distribution }}-{{ ansible_distribution_version | truncate(1, True, '') }}"

这是由于 group_by 模块中的错误。公关在这里:https ://github.com/ansible/ansible/pull/7273

于 2014-05-04T02:59:29.430 回答