排除包含 localhost 的组

Exclude a group that contains localhost

鉴于以下清单:

[group1]
myserver.domain.com   ansible_ssh_user=myUser

[group2]
localhost             ansible_connection=local

我如何才能只在 group1 台主机上执行我的剧本?

当我使用--limit=group1时,它还包括localhost

我试了--limit='!group2',也没用

有什么想法吗?

提前致谢

编辑: 我正在使用 ansible 1.9.2.

您使用的是什么ansible版本?它在版本 2.1.2.0 中工作正常。

这是我的 test.inventory 文件

[group1]
myserver.domain.com   ansible_ssh_user=myUser

[group2]
localhost             ansible_connection=local

这是我的测试剧本test.yml

- name: Test limit
  hosts: all
  tasks:
      - file: path=/tmp/mydir state=directory

我得到了预期的结果 运行

ansible-playbook -i test.inventory --limit group2 test.yml

ansible-playbook -i test.inventory --limit '!group1' test.yml

我无法在你的 ansible 版本上测试它。我建议您按照以下方式更改剧本中的目标主机定义的解决方法:

所以你会有这样的东西

- name: Test limit
  hosts: "{{ hosts_nodes | default('all')}}"
  tasks:
      - file: path=/tmp/mydir state=directory

和 运行 添加额外环境变量的剧本 hosts_nodes

ansible-playbook -i test.inventory test.yml -e hosts_nodes=group1