Puncte:1

Cum se analizează o hartă?

drapel hu

Încerc să creez o listă în ansible care constă din informații despre containerul docker. În primul rând, rulez un modul de comandă care returnează acest lucru în stdout:

„hartă[key1:value1 key2:value2 key3:value3]”

Cum pot analiza mai departe acest lucru pentru a obține valorile bazate pe cheia pe care o furnizez? Când folosesc un Hartă filtru, primesc asta:

"msg": "<obiect generator do_map la 0x7f3845b8a740>"

Dacă rulez listă filtru, primesc rezultate ca fiecare caracter din hartă, deci ["m", "a", "p", "[", "k", ...]

Ce filtru ar trebui să folosesc?

anx avatar
drapel fr
anx
Puteți evita analizarea dacă comanda de la care obțineți acest lucru poate scoate un format de serializare obișnuit (are opțiune `--json`?)
Michael Hampton avatar
drapel cz
Asta arată ca rezultatul unui program Go. Consultați dezvoltatorii săi pentru a vedea dacă îl puteți obține într-un format mai ușor de analizat, cum ar fi JSON. Bănuiesc că poate este rezultatul unei comenzi `docker`, dar nu ați specificat (și ar trebui să aveți). Dacă acesta este cazul, atunci utilizați opțiunea `--format` pentru a obține exact ceea ce aveți nevoie în format JSON.
Puncte:1
drapel br

De exemplu

    - set_fact:
        x: „{{ _dict|from_yaml }}”
      vars:
        _regex: „^(.*)\[(.*)\](.*)$”
        _key: „{{ stdout|regex_replace(_regex, '\1') }}”
        _val: „{{ stdout|regex_replace(_regex, '\2') }}"
        _dict: |
          {{ _key }}:
          {% pentru i în _val.split() %}
            {{ i|regex_replace(':', ':') }}
          {% endfor %}

  X:
    Hartă:
      cheia1: valoare1
      cheia2: valoare2
      cheia3: valoarea3

Dacă ar fi mai multe rânduri, de ex.

    stdout_lines:
      - „map1[key1:value1 key2:value2 key3:value3]”
      - „map2[key1:value1 key2:value2 key3:value3]”
      - „map3[key1:value1 key2:value2 key3:value3]”

ar fi posibil să combina dicționarul, de ex.

    - set_fact:
        x: „{{ x|d({})|combină(_dict|din_yaml) }}”
      buclă: „{{ stdout_lines }}”
      vars:
        _regex: „^(.*)\[(.*)\](.*)$”
        _key: „{{ item|regex_replace(_regex, '\1') }}”
        _val: „{{ item|regex_replace(_regex, '\2') }}”
        _dict: |
          {{ _key }}:
          {% pentru i în _val.split() %}
            {{ i|regex_replace(':', ':') }}
          {% endfor %}

  X:
    harta 1:
      cheia1: valoare1
      cheia2: valoare2
      cheia3: valoarea3
    harta 2:
      cheia1: valoare1
      cheia2: valoare2
      cheia3: valoarea3
    harta 3:
      cheia1: valoare1
      cheia2: valoare2
      cheia3: valoarea3

Dacă tastele se repetau, de ex.

    stdout_lines:
      - „hartă[cheie1:valoare1 cheie2:valoare2 cheie3:valoare3]”
      - „hartă[cheie1:valoare1 cheie2:valoare2 cheie3:valoare3]”
      - „hartă[cheie1:valoare1 cheie2:valoare2 cheie3:valoare3]”

ar fi posibilă concatenarea unei liste, de ex.

    - set_fact:
        x: „{{ x|d([]) + [_dict|from_yaml] }}”
      buclă: „{{ stdout_lines }}”
      vars:
        _regex: „^(.*)\[(.*)\](.*)$”
        _key: „{{ item|regex_replace(_regex, '\1') }}”
        _val: „{{ item|regex_replace(_regex, '\2') }}”
        _dict: |
          {{ _key }}:
          {% pentru i în _val.split() %}
            {{ i|regex_replace(':', ':') }}
          {% endfor %}

  X:
  - Hartă:
      cheia1: valoare1
      cheia2: valoare2
      cheia3: valoarea3
  - Hartă:
      cheia1: valoare1
      cheia2: valoare2
      cheia3: valoarea3
  - Hartă:
      cheia1: valoare1
      cheia2: valoare2
      cheia3: valoarea3

Postează un răspuns

Majoritatea oamenilor nu înțeleg că a pune multe întrebări deblochează învățarea și îmbunătățește legătura interpersonală. În studiile lui Alison, de exemplu, deși oamenii își puteau aminti cu exactitate câte întrebări au fost puse în conversațiile lor, ei nu au intuit legătura dintre întrebări și apreciere. În patru studii, în care participanții au fost implicați în conversații ei înșiși sau au citit transcrieri ale conversațiilor altora, oamenii au avut tendința să nu realizeze că întrebarea ar influența – sau ar fi influențat – nivelul de prietenie dintre conversatori.