Назад | Перейти на главную страницу

Копирование разных файлов конфигурации в зависимости от операционной системы

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

Настройте по своему вкусу.