Ansible - Como condicionar execução a versão do Sistema Operacional.

1. Ansible - Como condicionar execução a versão do Sistema Operacional.

Thiago Boeira
tcboeira

(usa Debian)

Enviado em 21/12/2020 - 13:37h

Amigos,
Boa Tarde!

Bem, antes de tudo, não sabia onde buscar ajuda. Depois, aqui no VOL não encontrei uma classificação correta, então, caso seja necessário, eu reedito para encaminhar corretamente.

Bom, como diz o titulo da mensagem, "Ansible - Como condicionar execução a versão do Sistema Operacional", estou a inicial a aplicação de Ansible em nosso parque. Hoje temos cerca de umas 90/100 estações de trabalho Linux, onde a maioria é de diversos sabores.
A ideia, depois dos ocorridos a cerca de segurança pelo mundo, é unificar a gestão, gerencia, suporte e manutenção das mesmas.

Antes de levar ao campo de produção, criei um LAB com rede separada a fim de simular o nosso parque bem como prever algumas necessidades e claro, treinar, por que é muito chato esses arquivos "YML" hehehehe
O LAB é o seguinte:
192.168.129.242 - server - Ubuntu 18.04
192.168.129.125 - client 1 - Ubuntu 18.04
192.168.129.109 - client 2 - Ubuntu 20.04

Neste esteio, fui realizando uma série de testes, e adequando tudo certo. MAS travei justamente no penúltimo teste, que é: Se for uma versão de Ubuntu faça X, se for outra versão, faça Y

Meu arquivo "teste.yml" é o seguinte:

---
- hosts: all
remote_user: meuuser
become: true
gather_facts: True
tasks:
- name: "TESTE TESTE TESTE TESTE TESTE TESTE"
ansible.builtin.debug:
var: ansible_facts
command: "init 6"
when: ansible_facts['distribution_version'] == "18.04"

- name: "2 2 2 2 2 2 2 2 2"
ansible.builtin.debug:
var: ansible_facts
command: "ls -l /home"
when: ansible_facts['distribution_version'] == "20.04"


Notadamente, esta alterado em alguns itens, pois fui adicionando conforme exemplos que fui encontrando na Internet, mas todos sem sucesso.
Me ocorre sempre esse erro:

$ ansible-playbook playbooks/playbook_019.yml -i inventario/inventory
/usr/lib/python2.7/dist-packages/ansible/parsing/vault/__init__.py:44: CryptographyDeprecationWarning: Python 2 is no longer supported by the Python core team. Support for it is now deprecated in cryptography, and will be removed in the next release.
from cryptography.exceptions import InvalidSignature
[WARNING]: Ignoring invalid attribute: var

[WARNING]: Ignoring invalid attribute: ansible.builtin.debug


PLAY [all] **********************************************************************************************************************************************************************************************************************************

TASK [Gathering Facts] **********************************************************************************************************************************************************************************************************************
ok: [192.168.129.125]
[WARNING]: Module invocation had junk after the JSON data: AttributeError("module 'platform' has no attribute 'dist'")

ok: [192.168.129.109]

TASK [2 2 2 2 2 2 2 2 2] ********************************************************************************************************************************************************************************************************************
fatal: [192.168.129.109]: FAILED! => {"msg": "The conditional check 'ansible_facts['distribution'] == \"Ubuntu\"' failed. The error was: error while evaluating conditional (ansible_facts['distribution'] == \"Ubuntu\"): 'dict object' has no attribute 'distribution'\n\nThe error appears to have been in '/home/administrador/ansible/playbooks/playbook_019.yml': line 10, column 5, but may\nbe elsewhere in the file depending on the exact syntax problem.\n\nThe offending line appears to be:\n\n\n - name: \"2 2 2 2 2 2 2 2 2\"\n ^ here\n"}
changed: [192.168.129.125]

TASK [3 3 3 3 3 3 3 3 3 3 3 3] **************************************************************************************************************************************************************************************************************
skipping: [192.168.129.125]

PLAY RECAP **********************************************************************************************************************************************************************************************************************************
192.168.129.109 : ok=1 changed=0 unreachable=0 failed=1
192.168.129.125 : ok=2 changed=1 unreachable=0 failed=0



A mensagem de erro sempre aparece, embora para o client 1 - Ubuntu 18.04 - ele sempre executa. Já pra o 2, não.


A versão do Ansible é:
[email protected]:~/ansible$ ansible --version
/usr/lib/python2.7/dist-packages/ansible/parsing/vault/__init__.py:44: CryptographyDeprecationWarning: Python 2 is no longer supported by the Python core team. Support for it is now deprecated in cryptography, and will be removed in the next release.
from cryptography.exceptions import InvalidSignature
ansible 2.5.1
config file = /etc/ansible/ansible.cfg
configured module search path = [u'/home/administrador/.ansible/plugins/modules', u'/usr/share/ansible/plugins/modules']
ansible python module location = /usr/lib/python2.7/dist-packages/ansible
executable location = /usr/bin/ansible
python version = 2.7.17 (default, Sep 30 2020, 13:38:04) [GCC 7.5.0]



Bem, eu já li e re li a documentação da ferramenta. Já simulei sem errar, uma dezenas de testes - todas sem sucesso.
Tentei buscar uma luz na Internet inteira, e não obtive sucesso. Evidente deve ser falha de busca minha, mas sigo a procurar e testar sem sucesso.

Por isso, venho a pedir ajuda aos amigos.

Um grande abraço, e fico a disposição para mais detalhes.

Desde já, muito obrigado!