Как извлечь / проанализировать результаты из модулей ANSIBLE K8S, используя with_items для нескольких полей - PullRequest
0 голосов
/ 21 октября 2019

Team, Моя задача работает нормально с выводом json, но я просто хочу искать имя модуля и пространство имен вместо вывода всего вывода pod json. Итак, я использую отладку, чтобы вытащить имя модуля, но не уверен, как вывести все имена модулей вдоль бокового пространства имен.

любой намек? Я не могу понять отсюда: извлечение переменной из вывода json, затем отладка и регистрация вывода с откликом 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"
}

sampleНиже приведен фрагмент вывода, который ищет модуль: аналогично он продолжается для других модулей в pod_lsit


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

1 Ответ

1 голос
/ 22 октября 2019

Я думаю, вам понадобится цикл для получения точного результата, который вы ищете, но это означает, что он будет не в одном «сообщении», а в одном сообщении на модуль, например:

 - 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 . Вот пример использования имени модуля:

- 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
...