Ansible Как указать группы в командной строке для запуска соответствующих задач - PullRequest
0 голосов
/ 10 июля 2019

инвентарный инвентарь

# hosts
[groupA]
192.168.1.1

[groupB]
192.168.1.1
192.168.1.3

заданий по заданию:

# site.yml
---
- name: test
  hosts: all
  tasks:
   - name: taskA
     command: echo testA
     when: "'groupA' in group_names "

   - name: taskB
     command: echo testB
     when: "'groupB' in group_names "

Я хочу выполнить задачу от taskA до groupA, как это сделать? Я использую следующую команду для выполнения

ansible-playbook site.yml -l groupA -i hosts

Однако получить следующий результат - не то, чего я хочу, потому что он также выполняет taskB, но я хочу использовать только groupA для выполнения taskA.

Я не хочу использовать ansible tag, потому что у меня много roles, будет много работы, чтобы добавить каждый tag к каждому role.

PLAY [test]  *******************************************************************************************************************************************

TASK [Gathering Facts]  ********************************************************************************************************************************
ok: [192.168.1.1]

TASK [taskA]  ******************************************************************************************************************************************
changed: [192.168.1.1]

TASK [taskB]  ******************************************************************************************************************************************
changed: [192.168.1.1]

PLAY RECAP  ********************************************************************************************************************************************
192.168.1.1              : ok=3    changed=2    unreachable=0    failed=0

1 Ответ

0 голосов
/ 11 июля 2019

Q "I just want the machine inside group_B to execute Task of B...For example, the machine inside group_B only executes Task of B."

A: Проверить членство хостов в группах.См. Код ниже.

- hosts: all
  tasks:
  - name: Task of group_A
    command: bash groupA.sh
    when: inventory_hostname in groups['group_A']
  - name: Task of group_B
    command: bash groupB.sh
    when: inventory_hostname in groups['group_B']

Q: "I just want to run Task of group_B. What should my order be? ansible-playbook site.yml -l group_B -i ansible_inventory If group_A and group_B have a common ip, Task of group_A will be executed, but I only want to execute Task of group_B."

"I don't want to use ansible tag because I have a lot. roles, there will be a lot of work to add each tag to each role."

A: Используйте include_role и применитетеги (добавлено в 2.7).Такие примененные теги наследуются всеми задачами во включенной роли.См. Код ниже.

- name: Task of group_B
  include_role:
    name: role123
    apply:
      tags: group_B
  when: inventory_hostname in groups['group_B']
  tags: group_B

Запустите игру

ansible-playbook -t group_B -i ansible_inventory site.yml
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...