如何在多个字段上使用 with_items 从 ansible k8s 模块获得 retrieve/parse 结果
how to retrieve/parse results from ansible k8s modules using with_items on multiple fields
团队,
我的任务是 运行 输出 json 很好,但我只想查找 pod 名称和命名空间而不是输出整个 pod json 输出。所以,我正在使用调试来拉取 pod 名称,但不确定如何沿边命名空间拉取所有 pods 名称..
有什么提示吗?我无法从这里理解:
- 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 的示例输出片段如下:类似地,它继续查找 pod_lsit
中的其他 pods
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
我认为您需要一个循环来获得您正在寻找的确切输出,但这意味着它不会在单个 "message" 中,而是每个 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
团队, 我的任务是 运行 输出 json 很好,但我只想查找 pod 名称和命名空间而不是输出整个 pod json 输出。所以,我正在使用调试来拉取 pod 名称,但不确定如何沿边命名空间拉取所有 pods 名称..
有什么提示吗?我无法从这里理解:
- 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 的示例输出片段如下:类似地,它继续查找 pod_lsit
中的其他 pods
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
我认为您需要一个循环来获得您正在寻找的确切输出,但这意味着它不会在单个 "message" 中,而是每个 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