Рейтинг:1

Как разобрать карту?

флаг hu

Я пытаюсь создать список в недоступном, который состоит из некоторой информации о контейнере докеров. Во-первых, я запускаю командный модуль, который возвращает это в стандартный вывод:

"карта [ключ1:значение1 ключ2:значение2 ключ3:значение3]"

Как я могу проанализировать это, чтобы получить значения на основе предоставленного ключа? Когда я использую карта фильтр, я получаю это:

"msg": "<do_map объекта генератора по адресу 0x7f3845b8a740>"

Если я запускаю список filter, я просто получаю вывод как каждый символ на карте, поэтому ["m", "a", "p", "[", "k", ...]

Какой фильтр следует использовать?

anx avatar
флаг fr
anx
Вы можете обойти синтаксический анализ, если команда, из которой вы получаете это, может выводить какой-либо общий формат сериализации (у нее есть опция `--json`?)
Michael Hampton avatar
флаг cz
Это похоже на вывод какой-то программы Go. Свяжитесь с разработчиками, чтобы узнать, можете ли вы получить его в каком-то более удобном для анализа формате, таком как JSON. Я бы предположил, что, возможно, это вывод какой-то команды `docker`, но вы не указали (а должны были указать). Если это так, используйте параметр --format, чтобы получить именно то, что вам нужно, в формате JSON.
Рейтинг:1
флаг br

Например

    - set_fact:
        х: "{{ _dict|from_yaml }}"
      вары:
        _regex: '^(.*)\[(.*)\](.*)$'
        _key: "{{ stdout|regex_replace(_regex, '\1') }}"
        _val: "{{ stdout|regex_replace(_regex, '\2') }}"
        _дикт: |
          {{ _ключ }}:
          {% для i в _val.split() %}
            {{ я|regex_replace(':', ': ') }}
          {% конец для %}

дает

  Икс:
    карта:
      ключ1: значение1
      ключ2: значение2
      ключ3: значение3

Если бы было больше строк, например.

    стандартные_линии:
      - "карта1[ключ1:значение1 ключ2:значение2 ключ3:значение3]"
      - "карта2[ключ1:значение1 ключ2:значение2 ключ3:значение3]"
      - "карта3[ключ1:значение1 ключ2:значение2 ключ3:значение3]"

было бы возможно комбинировать словарь, например

    - set_fact:
        х: "{{ х|d({})|объединить(_dict|from_yaml) }}"
      цикл: "{{ stdout_lines }}"
      вары:
        _regex: '^(.*)\[(.*)\](.*)$'
        _key: "{{ item|regex_replace(_regex, '\1') }}"
        _val: "{{ item|regex_replace(_regex, '\2') }}"
        _дикт: |
          {{ _ключ }}:
          {% для i в _val.split() %}
            {{ я|regex_replace(':', ': ') }}
          {% конец для %}

дает

  Икс:
    карта1:
      ключ1: значение1
      ключ2: значение2
      ключ3: значение3
    карта2:
      ключ1: значение1
      ключ2: значение2
      ключ3: значение3
    карта3:
      ключ1: значение1
      ключ2: значение2
      ключ3: значение3

Если ключи повторялись, например.

    стандартные_линии:
      - "карта[ключ1:значение1 ключ2:значение2 ключ3:значение3]"
      - "карта[ключ1:значение1 ключ2:значение2 ключ3:значение3]"
      - "карта[ключ1:значение1 ключ2:значение2 ключ3:значение3]"

можно было бы объединить список, например.

    - set_fact:
        х: "{{ х|d([]) + [_dict|from_yaml] }}"
      цикл: "{{ stdout_lines }}"
      вары:
        _regex: '^(.*)\[(.*)\](.*)$'
        _key: "{{ item|regex_replace(_regex, '\1') }}"
        _val: "{{ item|regex_replace(_regex, '\2') }}"
        _дикт: |
          {{ _ключ }}:
          {% для i в _val.split() %}
            {{ я|regex_replace(':', ': ') }}
          {% конец для %}

дает

  Икс:
  - карта:
      ключ1: значение1
      ключ2: значение2
      ключ3: значение3
  - карта:
      ключ1: значение1
      ключ2: значение2
      ключ3: значение3
  - карта:
      ключ1: значение1
      ключ2: значение2
      ключ3: значение3

Ответить или комментировать

Большинство людей не понимают, что склонность к познанию нового открывает путь к обучению и улучшает межличностные связи. В исследованиях Элисон, например, хотя люди могли точно вспомнить, сколько вопросов было задано в их разговорах, они не чувствовали интуитивно связи между вопросами и симпатиями. В четырех исследованиях, в которых участники сами участвовали в разговорах или читали стенограммы чужих разговоров, люди, как правило, не осознавали, что задаваемый вопрос повлияет — или повлиял — на уровень дружбы между собеседниками.