it-swarm.com.ru

как запустить конкретную задачу на конкретном хосте в ansible

содержимое моего инвентарного файла -

[webservers]
x.x.x.x ansible_ssh_user=ubuntu

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

в моем файле задач, который является общей ролью, то есть он будет работать на обоих хостах, но я хочу запустить следующую задачу на веб-серверах хоста, а не в dbservers, которая определена в файле инвентаризации

- name: Install required packages
  apt: name={{ item }} state=present
  with_items:
    - '{{ programs }}'
  become: yes
  tags: programs

когда модуль полезен или есть другой способ? Как я мог это сделать? 

15
Prem Sompura

Если вы хотите запустить свою роль на всех хостах, но только в одной задаче, ограниченной группой webservers, то - как вы уже предлагали - when ваш друг.

Вы можете определить условие как:

when: inventory_hostname in groups['webservers']
31
udondan

Спасибо, это тоже мне помогает.

файл hosts:

[production]
Host1.dns.name

[internal]
Host2.dns.name

файл needs.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
2
Albert