我的清单文件的内容-
[webservers]
x.x.x.x ansible_ssh_user=ubuntu
[dbservers]
x.x.x.x ansible_ssh_user=ubuntu
在我的tasks文件中,它是公共角色,即它将在两台主机上运行,但我希望在主机not服务器上运行以下任务,而不是在清单文件中定义的dbservers中运行以下任务
- name: Install required packages
apt: name={{ item }} state=present
with_items:
- '{{ programs }}'
become: yes
tags: programs
什么时候模块是有帮助的,还是有其他方法?我怎么能这样做呢?
发布于 2015-08-10 14:33:51
如果您希望在所有主机上运行您的角色,但仅限于webservers
组的单个任务,那么-就像您已经建议的那样- when
是您的朋友。
你可以像这样定义一个条件:
when: inventory_hostname in groups['webservers']
发布于 2017-11-03 01:10:37
谢谢,这对我也有帮助。
主机文件:
[production]
host1.dns.name
[internal]
host2.dns.name
requirements.yml文件:
- name: install the sphinx-search rpm from a remote repo on x86_64 - internal host
when: inventory_hostname in groups['internal']
yum:
name: http://sphinxsearch.com/files/sphinx-2.2.11-1.rhel7.x86_64.rpm
state: present
- name: install the sphinx-search rpm from a remote repo on i386 - Production
when: inventory_hostname in groups['production']
yum:
name: http://sphinxsearch.com/files/sphinx-2.2.11-2.rhel6.i386.rpm
state: present
发布于 2020-05-17 17:43:33
在某些情况下要考虑的另一种选择是-
delegate_to: hostname
还有一个来自ansible文档的例子,循环遍历一个组。https://docs.ansible.com/ansible/latest/user_guide/playbooks_delegation.html -
- hosts: app_servers
tasks:
- name: gather facts from db servers
setup:
delegate_to: "{{item}}"
delegate_facts: True
loop: "{{groups['dbservers']}}"
https://stackoverflow.com/questions/31912748
复制相似问题