ansible одна и та же книга игр для разных linux дистрибутивов - PullRequest
0 голосов
/ 02 мая 2020

Мы разработали ansible playbook для узлов, на которых установлена ​​Ubuntu.

Теперь нам нужно воспроизвести ту же Playbook на новых машинах (узлах) для другого клиента, который использует Centos.

Проблема в том, что для Centos Ansible использует модуль Yum (который использует менеджер пакетов yum для установки модуля). В нашей настоящей книге мы явно используем модуль apt.

Что рекомендует Ansible для лучшего управления этим сценарием?

  • Лучше ли переписать версию сборника пьес для Centos?
  • Или это лучше оставить ту же книгу и динамически использовать «apt» в Ubuntu? или Yum on centos?
  • Есть ли другое более подходящее решение?

Ответы [ 2 ]

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

Общепринятым подходом является написание одной книги игр для нескольких дистрибутивов с рядом условий внутри книги игр или просто отдельные задачи c, определяемые дистрибутивом, в разные файлы и включение этих файлов в основную роль, подобную этой

# Perform distro-specific tasks.
- include_tasks: setup-"{{ ansible_distribution }}".yml

Таким образом, в файлах setup-Ubuntu.yml, setup-CentOS.yml et c вы сохраните все действия, указанные c для определенного Linux. Также обратите внимание на роли Герлинггуя, такие как эта в качестве подходящего примера.

В случае, если вы хотите просто установить или удалить пакет, не используя более сложные способности из apt или yum, вы можете использовать пакетный модуль , что довольно просто, но если этого достаточно для вас, вы получите один и тот же код для различных Linux вариантов.

Кроме того, вы должны принять во внимание, что в Ubuntu и CentOS многие файлы (включая файлы конфигурации и двоичные файлы программы) расположены в разных местах. Поэтому, если вы решили работать с модулем пакета, вы можете иметь дело со спецификацией distro c, используя внешние файлы следующим образом:

- name: Load a variable file based on the OS type, or a default if not found.
  include_vars: "{{ item }}"
  with_first_found:
    - "{{ ansible_distribution }}-vars.yaml"
    - "{{ ansible_os_family }}-vars.yaml"
    - default-vars.yaml

После этой задачи вы можете использовать переменные, определенные в упомянутых файлах инициализируются значениями, указанными c для вашей платформы, как это

- name: Apply some config template
  template:
    src: my_config_template.j2
    dest: "{{ distro_specific_destination }}"
    validate: "{{ distro_specific_command }} %s"
1 голос
/ 02 мая 2020

Проблема в том, что для Centos Ansible использует модуль Yum (который использует менеджер пакетов yum для установки модуля). В нашей настоящей книге мы, очевидно, используем модуль apt.

Возможно, вам лучше использовать модуль package, который выберет соответствующий менеджер пакетов, соответствующий целевой машине. Тогда вам просто нужно поддерживать списки имен пакетов для каждого дистрибутива, но сами задачи могут быть идентичными.

То есть вы можете написать что-то вроде:

- hosts: all
  tasks:
    - name: Set OS distribution dependent variables
      include_vars: "os_{{ ansible_facts['distribution'] }}.yml"

    - name: install required packages
      package:
        name: "{{ required_packages }}"
        state: installed

И рядом с вашим у playbook есть файлы os_Ubuntu.yml и os_CentOS.yml, и в этих файлах устанавливается переменная required_packages.

...