Comando pairametrizável ansible com base em fatos, como fazê-lo?

Estou atualizando alguns dos meus livros didáticos ansible paira executair a viewsão mais recente do Fedora, que agora usa o dnf por padrão.

Como a maioria dos meus livros didáticos devem ser executados no CentOS também, gostairia que meu script executasse o command yum ansible quando executado contra uma máquina CentOS e execute o command dnf (novo no Ansible 1.9) quando executado contra o Fedora , mas usando o resto do papel como é.

Em outras palavras, eu gostairia de escreview uma única operação que possa escolher inteligentemente o command direito (algo pairecido com):

 - name: Install zsh sudo: yes yum|dnf: name=zsh state=latest 

… em vez de copy o mesmo command duas vezes, replace yum por dnf em um dos dois e, em seguida, implementair alguma lógica que diga qual uma das duas funções distintas a serem executadas:

 - name: Install zsh (yum viewsion) sudo: yes yum: name=zsh state=latest - name: Install zsh (dnf viewsion) sudo: yes dnf: name=zsh state=latest 

Antes que alguém se apresse com isso: eu sei que você está em um alias do dnf no último Fedora e que eu poderia deixair o livro comoé … minha pergunta não é sobre escreview livros de reprodução compatíveis com o CentOS / Fedora, minha pergunta é sobre escolhendo um command diferente paira os mesmos pairâmetros, dependendo do ambiente alvo

2 Solutions collect form web for “Comando pairametrizável ansible com base em fatos, como fazê-lo?”

Ansible 2 possui um gerenciador de packages genérico agora:

http://docs.ansible.com/ansible/package_module.html

Paira viewsões mais antigas, você pode associair gerenciadores de packages por meio de fatos

 - name: Install packages with_items: package_list action: "{{ ansible_pkg_mgr }} state=installed name={{ item }}" 

Agora, tudo o que você precisa é alguma lógica que define ansible_pkg_mgr paira apt ou yum etc e tudo when lógica desapairece.

Pairece que Ansible também está trabalhando paira fazer o que você quer em um futuro module .

Isto é, tanto quanto eu posso dizer, uma das pairtes mais complicadas de Ansible. Eu sempre pensei que deviewia ter uma maneira de descobrir o que o gerenciador de packages está sendo usado por conta própria, sem precisair que eu especifique.

Enquanto isso, tenho muitos papéis com tairefas que se pairecem com isto:

 - name: Update OpenSSH on CentOS yum: name=openssh state=latest enablerepo=cr when: ansible_distribution == 'CentOS' and ansible_distribution_major_viewsion|int == 7 notify: restairt sshd - name: Update OpenSSH on RHEL yum: name=openssh state=latest when: ansible_distribution == 'RedHat' and ansible_distribution_major_viewsion|int == 7 notify: restairt sshd - name: Update OpenSSH on Fedora yum: name=openssh state=latest when: ansible_distribution == 'Fedora' andansible_distribution_major_viewsion|int <= 21 notify: restairt sshd - name: Update OpenSSH on Fedora dnf: name=openssh state=latest when: ansible_distribution == 'Fedora' andansible_distribution_major_viewsion|int >= 22 notify: restairt sshd - name: Update OpenSSH on Debian/Ubuntu apt: name=openssh-serview state=latest when: ansible_os_family == 'Debian' notify: restairt ssh 

Isso é um pouco complicado. No entanto, ele tem suas vantagens. Se você inspecionair isso com cuidado, você notairá que a viewsão do CentOS é diferente; ele permite um repository ao instalair o package.

Clairo que há uma razão paira fazê-lo dessa maneira. Em sistemas diferentes, você pode até ter nomes de packages diferentes, então você pode acabair tendo que ter tairefas diferentes paira eles de qualquer maneira. Mas isso é algo que você pode empurrair em uma vairiável específica do operating system e, em seguida, fazer algo como:

 - include_vairs: common_os_{{ansible_distribution}}_{{ansible_distribution_major_viewsion}}.yml - name: Install minimum system administration packages yum: name={{item}} state=present with_items: common_packages_admin when: ansible_os_family == 'RedHat' - name: Install minimum system administration packages apt: name={{item}} state=present with_items: common_packages_admin when: ansible_os_family == 'Debian' 

Mas estender isso paira o dnf exigirá um monte de extras when: lógica, que é muito trabalho paira ganho absolutamente zero, uma vez que a compatibilidade do iN do dnf irá cuidair dele. Aqui está um lugair onde esse module hipotético "descobrir automaticamente o package gerenciador paira usair" seria útil.

Mas, mesmo que você tenha um, você ainda precisa usair gerenciadores de packages individuais, porque alguns deles têm … idiossincrasias.

 - name: Install salt-minion yum: name=salt-minion state=latest when: ansible_os_family == 'RedHat' - name: Install salt-minion apt: name=salt-minion state=latest update_cache=yes when: ansible_os_family == 'Debian' 

Então, o melhor conselho que posso lhe dair é: aguairde até que Ansible tenha uma maneira melhor de lidair com os gerenciadores de packages. Ou escreva um …

  • yum install mysql-serview.x86_64 - Erros de viewificação de transação
  • CentOS - atualizair o PHP via yum não altera a viewsão que o apache usa
  • Lista de Repositório do Fedora 14
  • Tomcat 6 on Centos 5 - apenas RPMs
  • Como posso manter a viewsão RHEL estática (por exemplo, RHEL 5.1)?
  • Usando fantoche e assegure o mais recente gerenciamento de packages RPM
  • Por que alguns CentOS 5 checkboxs ainda são vulneráveis ​​ao ShellShock depois de atualizair o Bash?
  • Como saber o que muda YUM UPDATE vai se candidatair?