首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何在ansible中的特定主机上运行特定任务

如何在ansible中的特定主机上运行特定任务
EN

Stack Overflow用户
提问于 2015-08-10 14:18:17
回答 3查看 64K关注 0票数 35

我的清单文件的内容-

代码语言:javascript
复制
[webservers]
x.x.x.x ansible_ssh_user=ubuntu

[dbservers]
x.x.x.x ansible_ssh_user=ubuntu

在我的tasks文件中,它是公共角色,即它将在两台主机上运行,但我希望在主机not服务器上运行以下任务,而不是在清单文件中定义的dbservers中运行以下任务

代码语言:javascript
复制
- name: Install required packages
  apt: name={{ item }} state=present
  with_items:
    - '{{ programs }}'
  become: yes
  tags: programs

什么时候模块是有帮助的,还是有其他方法?我怎么能这样做呢?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2015-08-10 14:33:51

如果您希望在所有主机上运行您的角色,但仅限于webservers组的单个任务,那么-就像您已经建议的那样- when是您的朋友。

你可以像这样定义一个条件:

代码语言:javascript
复制
when: inventory_hostname in groups['webservers']
票数 64
EN

Stack Overflow用户

发布于 2017-11-03 01:10:37

谢谢,这对我也有帮助。

主机文件:

代码语言:javascript
复制
[production]
host1.dns.name

[internal]
host2.dns.name

requirements.yml文件:

代码语言:javascript
复制
- 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
票数 11
EN

Stack Overflow用户

发布于 2020-05-17 17:43:33

在某些情况下要考虑的另一种选择是-

代码语言:javascript
复制
delegate_to: hostname

还有一个来自ansible文档的例子,循环遍历一个组。https://docs.ansible.com/ansible/latest/user_guide/playbooks_delegation.html -

代码语言:javascript
复制
- hosts: app_servers

  tasks:
    - name: gather facts from db servers
      setup:
      delegate_to: "{{item}}"
      delegate_facts: True
      loop: "{{groups['dbservers']}}"
票数 9
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31912748

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档