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

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

2
задан 7 December 2016 в 23:47
1 ответ

Пример сценария со списком словарей:

---                                           
- 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

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

0
ответ дан 3 December 2019 в 14:20

Теги

Похожие вопросы