Общепринятым подходом является написание одной книги игр для нескольких дистрибутивов с рядом условий внутри книги игр или просто отдельные задачи 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"