首页 > 解决方案 > ansible查找挖掘:列表对象没有属性

问题描述

团队,我无法理解或解决此错误。我的任务是从变量中提取服务器名称并使用 dig 模块执行 dns 查找。任何提示?完全相同的任务在本地 ubuntu 桌面上工作,但是当我通过 jenkins/container/ubuntu 映像运行它时它没有。

      - name: Validate DNS record lookup for {{ api_server_public_names }}
        debug: msg="{{ lookup('dig', '{{ api_server_public_names }}' )}}"
        vars:
          dns_response: "{{ lookup('dig', '{{ api_server_public_names }}' )}}"
        failed_when: not dns_response
 TASK [services-pre-install-checks : Validate DNS record lookup for [u'test.customer.com']] ***
  Thursday 31 October 2019  22:05:34 +0000 (0:00:00.037)       0:00:02.890 ****** 
  fatal: [localhost]: FAILED! => {"msg": "An unhandled exception occurred while running the lookup plugin 'dig'. Error was a <type 'exceptions.AttributeError'>, original message: 'list' object has no attribute 'startswith'"}
15:05:34  

标签: ansibleansible-2.xansible-facts

解决方案


api_server_public_names是一个列表,不能直接在查找中使用。您将需要循环变量:

    - name: Validate DNS record lookup
      debug: msg="{{ lookup('dig', '{{ item }}' )}}"
      vars:
        dns_response: "{{ lookup('dig', '{{ item }}' )}}"
      failed_when: not dns_response
      loop: "{{ api_server_public_names }}"

但是请注意,您failed_when将无法按预期工作。您可能需要做类似的事情failed_when: dns_response == "NXDOMAIN"


推荐阅读