Я хочу распространять разные файлы конфигурации в зависимости от версии ОС с помощью Ansible.
Хочу выделить версию ОС с помощью доступного факта ansible_distribution так что мне не нужно вручную назначать версию ОС.
У меня проблема в том, что я не знаю, где указать, какую версию файла конфигурации использовать для конкретной версии ОС.
Я хотел бы назначить эту переменную внутри playbook, а не в каком-то дополнительном файле переменных, так как он абсолютно используется только внутри playbook.
Думаю, мне бы хотелось что-то вроде:
- ansible_distribution == "Debian"
- vars:
vimrc_file = "vimrc.DEBIAN"
- ansible_distribution == "Ubuntu"
- vars:
vimrc_file = "vimrc.UBUNTU"
но я не уверен, работает ли Ansible так (или если да, если вы должны использовать его таким образом)
В настоящее время я использую следующее: очевидно является ужасный по нескольким причинам:
---
- hosts: servers,workstations
tasks:
- name: Ensure vim is installed
apt: name=vim state=latest
- shell: echo "vimrc.DEBIAN"
changed_when: false
register: vimrc
- name: "Copy Debian vimrc file"
copy: src=/ansible/files/{{ vimrc.stdout }} dest=/etc/vim/vimrc
when: ansible_distribution == "Debian"
with_items: vimrc.stdout
- shell: echo "vimrc.UBUNTU"
changed_when: false
register: vimrc
- name: "Copy Ubuntu vimrc file"
copy: src=/ansible/files/{{ vimrc.stdout }} dest=/etc/vim/vimrc
when: ansible_distribution == "Ubuntu"
with_items: vimrc.stdout
...
(Я только начинаю использовать Ansible и все еще пытаюсь понять, подходит ли он вообще для того, что я хочу сделать, поэтому, пожалуйста, извините за мое ужасное использование Ansible)
РЕДАКТИРОВАТЬ: Я только что понял, что это ужасный пример, так как я мог бы просто использовать
/ansible/files/vimrc.{{ ansible_distribution }}
для источника файла.
Как мне назначить правильные переменные, если файл DESTINATION отличается в разных ОС?
Пример плейбука со списком словарей:
---
- hosts: localhost
connection: local
vars:
distribution_settings:
- distribution: "MacOSX"
vimrc_file: "vimrc.MACOSX"
vimrc_location: "/destination/path/on/mac"
- distribution: "Debian"
vimrc_file: "vimrc.DEBIAN"
vimrc_location: "/destination/path/on/debian"
tasks:
- set_fact:
current_distribution_settings: "{{ distribution_settings | selectattr('distribution', 'equalto', ansible_distribution) | list }}"
- debug:
var: current_distribution_settings[0].vimrc_file
- debug:
var: current_distribution_settings[0].vimrc_location
Настройте по своему вкусу.