Рейтинг:0

Файл задач с общими директивами

флаг co

Как я могу установить директивы, общие для всех задач в файле, в файле фрагмента плейбука Ansible, который содержит только задачи?

# ansible/inventory/roles/os_packages/tasks/main.yaml

- name: "APT: обновить доступные пакеты из репозиториев Debian"
  сбор_фактов: ложь
  стать истинным
  стать_пользователем: корень
  подходящий:
    update_cache: правда
- имя: "APT: Установить необходимые пакеты"
  сбор_фактов: ложь
  стать истинным
  стать_пользователем: корень
  подходящий:
    имя:
      - фу
      - бар

Эти повторяющиеся директивы... collect_facts, статьи т. д. — следует указать один раз в этом файле. Но где, если нет (на данный момент?) файла, представляющего роль или игру?

# ansible/inventory/roles/os_packages/tasks/main.yaml

# Это не работает, потому что Ansible ожидает только задачи.
сбор_фактов: ложь
стать истинным
стать_пользователем: корень

- name: "APT: обновить доступные пакеты из репозиториев Debian"
  подходящий:
    update_cache: правда
- имя: "APT: Установить необходимые пакеты"
  подходящий:
    имя:
      - фу
      - бар

Файл должен состоять только из последовательности задач; уровень «роли» или уровень «игры», похоже, не занимают подходящего места в эта рекомендуемая структура каталогов.

Если бы вся пьеса была в одном файле, у каждой пьесы было бы свое собственное имя, и я бы установил директивы для пьесы. Но эти файлы задач собираются и компилируются, и в игре нет места, где я мог бы написать эти директивы.

Где должны быть директивы, которые применяются ко всем задачам в роли определиться?

Рейтинг:0
флаг th

collect_facts нецелесообразно (или невозможно) устанавливать что-либо, кроме игры, потому что это влияет только на решение на уровне игры о том, собирать ли факты.

стать и стать_пользователем являются допустимыми ключевыми словами на уровне блоков или задач, поэтому вы можете использовать блокировать чтобы применить их к списку задач (в рамках роли или иным образом):

- стать истинным
  стать_пользователем: корень
  блокировать:
    - name: "APT: обновить доступные пакеты из репозиториев Debian"
      подходящий:
        update_cache: правда
    - имя: "APT: Установить необходимые пакеты"
      подходящий:
        имя:
          - фу
          - бар

Многие ключевые слова также могут применяться при вызове ролей:

- хозяева: все
  роли:
    - имя: фу
      стать истинным
  задачи:
    - import_role:
        название: бар
      стать истинным

    - include_role:
        имя: Баз
        применять:
          стать истинным
Рейтинг:0
флаг br

Моя типичная структура каталогов:

âââ deploy-something.yml
✓ README.md
ââ запасы
â âââ prod
â â  âââ group_vars
 â  â  â â все
â â  â    âââ vars.yml
â â  â   â ââ vault.yml
â â  âââ host_vars
â â â  âââ host1.yml
â â  â  âââ host2.yml
â â  â  âââ локальный хост
â â  â  âââ vars.yml
â â    âââ хранилище
â â  âââ inventory.yml
...
ââ роли
    🔸роль 1
    ...
    ...

В этом случае я ставлю такие директивы в игру верхнего уровня. развернуть-что-то.yml:

- хозяева: все
  remote_user: доступный
  стать: да
  стать_метод: sudo
  any_errors_fatal: правда
  сериал: правда
  порядок: reverse_inventory
  роли:
  - роль1
  - роль2
флаг co
«Я помещаю такие директивы на верхний уровень…» «Если я понимаю ваш пример, этот файл представляет собой всю *playbook*. Я пытаюсь применить эти директивы к отдельной пьесе или роли; когда игра или роль представлены структурой каталогов.
Рейтинг:-1
флаг br

Вопрос: "Где должны определяться директивы, применимые ко всем задачам в роли?"

A: Короткий ответ: вне роли.

Где именно вы должны разместить ключевые слова, зависит от того, как вы используете роль. Есть больше вариантов

  • роли:
  • импорт_роль:
  • include_role:

Это выходит за рамки, чтобы объяснить все подробности здесь. Как правило, размещайте такие ключевые слова на уровне (отступа) роли. В случае include_role вы также можете применять ключевые слова. Имейте в виду, что не все ключевые слова можно применять везде. Видеть Ключевые слова сборника игр которые относятся к ролям. Например, ключевое слово collect_facts может применяться только к playbook. Одним из вариантов решения вашей проблемы может быть структура пьесы ниже

- хозяева: все
  сбор_фактов: ложь
  роли:
    - роль: os_packages
      стать истинным
      стать_пользователем: корень

Вопрос: "Как это сделать (применить такие ключевые слова на уровне роли), когда нет файла конфигурации (только каталог роли), представляющий роль?"

A: Если есть только каталог роли, представляющий роль, вы можете применять ключевые слова к блокам и задачам только внутри роли. Вы не можете применять ключевые слова к роли внутри этой роли. Для роли не существует такого понятия, как файл конфигурации.

В предыдущем ответе под уровнем я подразумеваю уровень отступа, например в коде выше, collect_facts относятся к игре, в то время как оба стать и стать_пользователем подать заявку на роль.

флаг co
«Применять такие ключевые слова на уровне роли» — да, именно об этом и возникает вопрос: Как это сделать, когда нет файла конфигурации (только каталог роли), представляющий роль?
флаг br
Вероятно, вы ищете то, чего не существует.

Ответить или комментировать

Большинство людей не понимают, что склонность к познанию нового открывает путь к обучению и улучшает межличностные связи. В исследованиях Элисон, например, хотя люди могли точно вспомнить, сколько вопросов было задано в их разговорах, они не чувствовали интуитивно связи между вопросами и симпатиями. В четырех исследованиях, в которых участники сами участвовали в разговорах или читали стенограммы чужих разговоров, люди, как правило, не осознавали, что задаваемый вопрос повлияет — или повлиял — на уровень дружбы между собеседниками.