排除包含 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
鉴于以下清单:
[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