首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >无法在json_query不可用模块中搜索字符串

无法在json_query不可用模块中搜索字符串
EN

Stack Overflow用户
提问于 2019-10-22 02:17:18
回答 1查看 1.1K关注 0票数 0

团队,我有输出,并试图根据正在获取的json响应中存在的字符串来失败/传递。有什么暗示吗?

代码语言:javascript
复制
      - name: "Fetch all gpu/dgx nodes from clusters using K8s facts"
        k8s_facts:
          kubeconfig: $WORKSPACE
          kind: Node
          label_selectors:
          - nodeType=gpu
          verify_ssl: no
        register: node_list

      - debug:
          var: node_list
      - debug:
          var: node_list | json_query(query)
        vars:
          query: 'resources[].{node_name: metadata.name, nodeType: metadata.labels.nodeType}'
        failed_when: '"gpu" not in query.results'
代码语言:javascript
复制
TASK [2_k8s_validations : debug] ******************************************************************************************************************************************************************
ok: [target1] => {
    "node_list | json_query(query)": [
        {
            "nodeType": "gpu",
            "node_name": "dgx"
        },
        {
            "nodeType": "gpu",
            "node_name": "dgx"
        }
    ]
}```

任务****************************************************************************************************************:调试2_k8s_validations**************************************************致命: target1:失败!=> {"msg":“条件检查'\"gpu\”不在query.results‘中“失败。错误是:在计算条件时出错(\"gpu\“不在query.results中):无法在模板字符串中查找名称或访问属性({% if \"gpu\”不在query.results %} True {% or %} False {% endif %}).\nMake确保变量名不包含诸如'-':'AnsibleUndefined‘类型的参数不可迭代的无效字符“}

重述************************************************** target1 : ok=10 changed=5 unreachable=0 failed=1 skipped=0 rescued=0 ignored=0

代码语言:javascript
复制
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-10-23 02:54:19

您有一个误解;vars:只声明当前任务的“局部变量”。因为您刚刚声明了一个名为query的变量,而且该变量不是dict,所以它没有这样的子属性.results

您很可能希望使用set_fact:hostvars结构中断言一个新的不可接受的事实,因此您可以像您尝试的那样使用它:

代码语言:javascript
复制
  - set_fact:
      nodes_with_node_type: '{{ node_list | json_query(query) }}'
    vars:
      query: 'resources[].{node_name: metadata.name, nodeType: metadata.labels.nodeType}'

  - fail:
      msg: Expected to find at least one GPU node type
    vars:
      node_types: '{{ nodes_with_node_type | map(attribute="nodeType") | list }}'
    when: '"gpu" not in node_types'

与您的具体问题不同,您要完成的实际任务完全是胡说八道,因为k8s_facts:上的选择器明确要求nodeType=gpu --不会返回任何其他类型的节点,因此when:永远不会是真的。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58496263

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档