Copiando arquivos de configuração diferentes dependendo do sistema operacional

2

Eu quero distribuir diferentes arquivos de configuração dependendo da versão do sistema operacional usando o Ansible.

Gostaria de distinguir a versão do sistema operacional com o fato ansioso ansible_distribution para que eu não precise atribuir manualmente uma versão do sistema operacional.

O problema que tenho é que não sei onde especificar qual versão do arquivo de configuração deve ser usada para uma versão específica do sistema operacional. Eu gostaria de atribuir essa variável dentro do playbook e não em algum arquivo variável adicional, uma vez que é absolutamente usado apenas dentro deste playbook.
Eu acho que gostaria de algo como:

- ansible_distribution == "Debian"
  - vars:
    vimrc_file = "vimrc.DEBIAN"
- ansible_distribution == "Ubuntu"
  - vars:
    vimrc_file = "vimrc.UBUNTU"

mas eu não tenho certeza se o Ansible funciona assim (ou se funciona como se você fosse usá-lo assim)

Atualmente, uso o seguinte, que obviamente é terrível por vários motivos:

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

(Eu só estou começando a usar Ansible e ainda estou tentando descobrir se é mesmo a ferramenta certa para o que eu quero fazer, então, por favor, desculpe o meu uso horrível de Ansible)

EDIT : Acabei de perceber que este é um exemplo terrível, já que eu poderia usar apenas

/ansible/files/vimrc.{{ ansible_distribution }}

para a fonte do arquivo.
Como eu atribuiria as variáveis corretas se o arquivo DESTINATION fosse diferente em um SO diferente?

    
por Ansgar 07.12.2016 / 22:47

1 resposta

0

Um exemplo de manual de jogo com uma lista de dicionários:

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

Personalize ao seu gosto.

    
por 08.12.2016 / 05:52