Как обрабатывать разные хосты на задачи в одной игре в ansible? - PullRequest
1 голос
/ 06 мая 2020

Я новичок в Ansible (ansible 2.9.6) и недавно начал работать над дизайном / структурой каталогов для проекта. Моя задача - настроить оборудование (в частности, разные устройства Cisco) в тестовой лаборатории для поддержки тестовых случаев.

Я хотел бы иметь один файл site.yml, содержащий ВСЕ 20+ тестов. Идея заключалась бы в том, что пользователь на основе параметров мог бы выполнить все, несколько или один тестовый пример для определенного типа устройства c поставщика (Cisco 4507, Cisco 3850 и т. Д.) Через site.yml.

Изначально я структурировал site.yml как одну игру с 20 задачами, которые включали роль для каждого тестового примера (ntp, lldp, vlans и т. Д.) И помечены соответствующим образом. Однако мне не удалось использовать разные хосты для каждой задачи (тестового примера), которая необходима. Каждый тестовый пример должен использовать собственное подмножество устройств. Вот пример:

ansible -playbook -i inventory / network_staging site.yml --tags = ntp -e type = C4507

~ /site.yml

---
- name: Test Cases
  hosts: all
  gather_facts: false
  connection: local
  tasks:
    - name: ntp role
       hosts: "{{type}}_ntpTC"
       include_role:
         name: ntp
       tags:
         - ntp
    - name: vlan role
       hosts: "{{type}}_vlanTC"
       include_role:
         name: vlan
       tags:
         - vlan

Мой текущий site.yaml имеет несколько воспроизведений, каждая из которых представляет собой тестовый пример и использует соответствующие хосты. Однако мне нужно будет использовать разные устройства для выполнения задач из группы хоста, в зависимости от роли / тестового примера. Вот пример:

ansible -playbook -i inventory / network_staging site.yml --tags = ntp, vlan -e type = C4507

~ / site.yml

---
- name: NTP Test Case
  hosts: "{{type}}_ntpTC"
  gather_facts: false
  connection: local

  tasks:
    - name: ntp role
      include_role:
        name: ntp
      tags:
        - ntp

- name: VLAN Test Case
  hosts: "{{type}}_vlanTC"
  gather_facts: false
  connection: local

  tasks:
    - name: vlan role
      include_role:
        name: vlan
      tags:
        - vlan

~ / inventory / network_staging / hosts / cisco

###main.yml inventory list
## IPs defined in ~/inventories/network_staging/host_vars/SW6.yml   SW7.yml and SW8.yml

##Cisco 4507 Test Cases
#NTP Test Case
[C4507_ntpTC]
SW8
#VLAN Test Case
[C4507_vlanTC]
SW7
SW6

~ / roles / ntp /tasks/main.yml

---
# Tasking for NTP Test Case
- name: import ntp.yml
  tags:
    - ntp

~ / roles / ntp / tasks / ntp.yml

---
- name: show NTP
  ios_command:
    commands:
      - <insert ntp show status commands on SW8 here….>

~ / роли /vlan/tasks/main.yml

---
# Tasking for VLAN Test Case
- name: import vlan.yml
  tags:
    - vlan

~ / roles / vlan / tasks / vlan.yml

---
- name: configure VLAN SW7
  ios_command:
    commands:
      - <insert vlan access switchport configuration here for SW7….>

- name: configure VLAN SW6
  ios_command:
    commands:
      - <insert vlan access switchport configuration here for SW6….>
      - <insert ping SW7 here>

ВОПРОС 1: Могу ли я использовать разные хосты для задач в одной игре в моем первоначальном дизайне?

ВОПРОС 2: Является ли мой текущий дизайн лучшим дизайном для того, что я пытаюсь выполнить sh?

ВОПРОС 3: В моем файле ролей / <> / tasks / <>. Yml для моего текущего проекта мне нужно выполнить другую задачу на разных устройствах, чтобы выполнить sh роль тестового примера. Я определил свою группу инвентаризации хоста, которая включает все устройства, которые потребуются, но как мне указать конкретный хост c для определенной задачи?

1 Ответ

1 голос
/ 06 мая 2020

Вы можете попробовать, включив оператор when. Например: enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...