Я хочу распространять различные файлы конфигурации в зависимости от версии ОС с помощью Ansible.
Я хотел бы выделить версия ОС с доступным фактом ansible_distribution , так что мне не нужно вручную назначать версию ОС.
Я бы хотел назначить эту переменную внутри плейбука, а не в каком-то дополнительном файле переменных, так как он абсолютно используется только внутри плейбука.
Думаю, мне бы хотелось что-то вроде:
- 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
Настройте по своему вкусу.