Ansible uri 模块已更改_何时检查失败

Ansible uri 模块已更改_何时检查失败

我正在使用uriAnsible 模块2.0

我有这样的代码可以在 api 上进行 POST。

  - 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

我有 2 个目标服务器,它们位于不同的清单中。这对服务器 A 有效。但在服务器 B 上失败,并出现错误:

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'"}

curl如果我手动对服务器 A 和 B执行 POST,则会得到相同的响应。服务器 A 和 B 具有相同的配置。

如果我以完整详细程度运行剧本,那么在出现相关任务的错误之前,我只会看到以下几行:

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

我不明白为什么这个测试对于 Ansible 失败以及为什么它只发生在其他服务器上。

答案1

正如评论中所建议的,我使用debug模块来查看变量:

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

变量的内容是httplib2 >= 0.7 is not installed

所以我的环境缺少uri模块所需的包。根据文档,只有 Ansible 2.1 之前的版本才需要这个。

安装包python-httplib2解决了这个问题。

相关内容