Módulos uri Ansible mudados_ quando a verificação falha

1

Estou usando o módulo uri do Ansible 2.0 .

Eu tenho um código como esse para tornar o POST em uma API.

  - name: Example POST
      uri:
        url: http://example.com:8001/api
        method: POST
        status_code: 201
        body_format: json
        body:
          key1: value
          key2: value2
      register: response
      changed_when: response.status == 201

Eu tenho 2 servidores de destino em diferentes inventários. Isso funciona novamente servidor A. No servidor B está com erro:

fatal: [ip]: FAILED! =>
{"failed": true, "msg": "ERROR! The conditional check 'response.status == 201' failed. 
The error was: ERROR! error while evaluating conditional (response.status == 201):
ERROR! 'dict object' has no attribute 'status'"}

Se eu fizer o POST manualmente com curl , ambos os servidores A e B darão a mesma resposta. Os servidores A e B têm configuração idêntica.

Se eu executar o livro de jogo com verbosidade completa, vejo apenas essas linhas antes do erro da tarefa em questão:

TASK [role : Example POST] ***************************************
task path: /home/ansible/roles/role/tasks/example.yaml:15
<ip> ESTABLISH SSH CONNECTION FOR USER: ansible
<ip> SSH: EXEC ssh -C -vvv -o ControlMaster=auto -o ControlPersist=60s -o KbdInteractiveAuthentication=no -o PreferredAuthentications=gssapi-with-mic,gssapi-keyex,hostbased,publickey -o PasswordAuthentication=no -o User=ansiblr -o ConnectTimeout=10 -o ControlPath=/home/ansible/.ansible/cp/ansible-ssh-%h-%p-%r 10.100.105.22 '/bin/sh -c '"'"'sudo -H -S -n -u root /bin/sh -c '"'"'"'"'"'"'"'"'echo BECOME-SUCCESS-cvyeydaqaapnnwuaukxffwmgvinzoxaq; LANG=en_US.UTF-8 LC_ALL=en_US.UTF-8 LC_MESSAGES=en_US.UTF-8 /usr/bin/python'"'"'"'"'"'"'"'"''"'"'' 

Não consigo descobrir por que este teste falha no Ansible e porque acontece apenas no outro servidor.

    
por Madoc Comadrin 31.08.2017 / 14:01

1 resposta

2

Como sugerido no comentário, usei debug module para ver a variável:

- debug:
    msg: '{{ response }}'

O conteúdo da variável foi httplib2 >= 0.7 is not installed .

Então meu ambiente estava faltando pacote que é exigido pelo módulo uri . De acordo com a documentação, isso é necessário apenas para versões do Ansible anteriores à 2.1.

A instalação do pacote python-httplib2 resolveu o problema.

    
por 31.08.2017 / 14:24