【问题标题】:how to retrieve/parse results from ansible k8s modules using with_items on multiple fields如何在多个字段上使用 with_items 从 ansible k8s 模块中检索/解析结果
【发布时间】:2019-10-21 19:25:20
【问题描述】:

团队, 我的任务在 json 输出中运行良好,但我只想查找 pod 名称和命名空间,而不是输出整个 pod json 输出。所以,我正在使用 debug 来提取 pod 名称,但不确定如何将所有 pod 名称沿边命名空间拉出..

有什么提示吗?我无法从这里理解:extracting a variable from json output then debug and register the outout with ansible

      - name: "Get a list of all pods from any namespace"
        k8s_facts:
          kind: Pod
          namespace: webhook
          kubeconfig: $WORKSPACE
          verify_ssl: no
        register: pod_list
      - debug:
          var: pod_list

      - name: list names and namespaces
        debug:
          msg: "{{ pod_list.resources[0].metadata.name }}"

输出:

TASK [3_validations_on_ssh : list names and namespaces] *******************************************************************************************************************************
ok: [target1] => {
    "msg": "k8s-webhook-auth-xxxx1"
}

查找 pod 的示例输出 sn-p 如下:类似地,它会继续查找 pod_lsit 中的其他 pod


TASK [3_validations_on_ssh : debug] *****************************************************
ok: [target1] => {
    "pod_list": {
        "changed": false,
        "failed": false,
        "resources": [
            {
                "apiVersion": "v1",
                "kind": "Pod",
                "metadata": {
                    "creationTimestamp": "2019-10-11T18:44:04Z",
                    "generateName": "k8s-webhook-auth-",
                    "labels": {
                        "app": "k8s-webhook-auth",
                        "controller-revision-hash": "666c6cb69d",
                        "pod-template-generation": "20",
                        "release": "k8s-webhook-auth"
                    },
                    "name": "k8s-webhook-auth-xxxx1",
                    "namespace": "webhook",
                    "ownerReferences": [
                        {
                            "apiVersion": "apps/v1",
                            "blockOwnerDeletion": true,
                            "controller": true,
                            "kind": "DaemonSet",
                            "name": "k8s-webhook-auth",
                            "uid": "1e9-8e9b-ac1f6b4ea082"
                        }
                    ],
                    "resourceVersion": "47592900",
                    "selfLink": "/api/v1/namespaces/webhook/pods/k8s-webhook-auth-5jx6w",
                    "uid": "1e9-8e9b-ac1f6b4ea082"
                },

预期输出:

k8s-webhook-auth-xxxx1 webhook
k8s-webhook-auth-xxxx2 webhook
k8s-webhook-auth-xxxx3 webhook

【问题讨论】:

    标签: ansible ansible-2.x ansible-facts


    【解决方案1】:

    我认为您需要一个循环来获得您正在寻找的确切输出,但这意味着它不会出现在单个“消息”中,而是每个 pod 一个消息中,例如:

     - debug:
        msg: "{{ item.metadata.name }} {{ item.metadata.namespace }}"
      loop: "{{ pod_list.resources }}"
    

    另一个选项是使用您需要的数据创建一个新对象。我将在下面给出 2 个示例,但有很多不同的选择。这些示例使用debug 来显示输出,但您可能希望使用set_fact

     - debug:
        var: pod_list | json_query('resources[].[metadata.name, metadata.namespace]')
    
     - debug:
        var: pod_list | json_query(query)
      vars:
        query: 'resources[].{name: metadata.name, namespace: metadata.namespace}'
    

    编辑:更多示例

    要限制循环中的输出,请查看loop control 文档。下面是一个使用 pod 名称的示例:

    - debug:
        msg: "{{ item.metadata.name }} {{ item.metadata.namespace }}"
      loop: "{{ pod_list.resources }}"
      loop_control:
        label: "{{ item.metadata.name }}"
    

    要将输出分配给新变量,请使用set_fact。请注意,如果与循环结合使用,您的结果将是多个对象的列表。下面是使用上述debug 任务之一的示例:

    - set_fact:
        pods: "{{ pod_list | json_query(query) }}"
      vars:
        query: 'resources[].{name: metadata.name, namespace: metadata.namespace}'
    
    - debug:
        var: pods
    

    【讨论】:

    • 你让我的日子过得很好。非常感谢。作品!你介意列出 set_fact 解决方案吗?
    • 在循环示例中:反馈正在获取节点名称,但同时它仍然输出所有剩余的巨大输出。不知道如何忽略它,只列出名称。调试示例有效
    • 不用担心 - 我已经为 set_fact 添加了一些示例,并限制了循环中的输出量
    猜你喜欢
    • 1970-01-01
    • 2021-09-02
    • 2020-02-06
    • 1970-01-01
    • 1970-01-01
    • 2022-11-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多