Ansible: status de retorno da última tarefa

0

Estou usando este comando para ter um retorno das tarefas em ansible.

Para ver se eles são bem-sucedidos ou não.

Este é um exemplo do meu código em um manual:

- name: Install JDK8
  shell: cd /tmp/install/ && tar -zxvf jdk-8u51-linux-x64.tar.gz

- name: Echo Install JDK8
  shell: echo $?

Quando eu executo o manual do terminal, não tenho nenhum valor de retorno.

Você pode obter um retorno com o comando echo?

    
por Antonio Padez 30.08.2018 / 15:40

2 respostas

1

Tentando obter o $? no contexto Ansible que você nos mostra, ter o estado de sucesso do último comando dado ao Ansible para executar remotamente não funcionará.

O $? variável é para retornar o status do último comando executado no shell atual.

Na configuração que você está mostrando, você não tem garantia de que o último comando em execução seja o mostrado no Ansible, nem o mesmo shell e, possivelmente, dependendo da configuração do cliente ssh, nem mesmo a mesma sessão ssh.

De acordo com o exemplo no guia oficial Ansible: para fazer outra coisa se a última tarefa / comando executado for bem-sucedida ou não, você faz:

tasks:
  - command: /bin/false
    register: result
    ignore_errors: True

  - command: /bin/something
    when: result is failed

  - command: /bin/something_else
   when: result is succeeded

Para mais detalhes, consulte Documentação - > Ansible- > Condicionais

    
por 30.08.2018 / 15:44
0

Os dois comandos shell no seu código são executados em shells diferentes, o que significa que o ansible sairá do primeiro shell e iniciará um novo para o segundo comando.

Se você precisar do valor de retorno de um comando shell, ele será armazenado em result.rc :

- name: Install JDK8
  shell: cd /tmp/install/ && tar -zxvf jdk-8u51-linux-x64.tar.gz
  register: result
  ignore_errors: true
- debug:
    msg: "The return value was: {{ result.rc }}"

shell tarefas são ruins para idempotência, você pode tentar usar, por exemplo, o módulo package .

    
por 30.08.2018 / 17:24