Puncte:1

Ansible: convertiți șirul în dicționar

drapel eg

Lansez Ansible din Tower, apoi completez noii utilizatori sub formă de text:

{ nume: utilizator1, uid: 5000 }
{ nume: utilizator2, uid: 5001 }

Aș dori să repet acești utilizatori ca un dicționar, ceva de genul:

- nume: Print vars
  depanare:
    var: „{{ item.name }}”
  with_items: „{{ users.split('\n') }}”

Dar nu merge:

SARCINA [Print vars] ********************************************* **************************************************** **********************
ok: [lx-test] => (item={ nume: utilizator1, uid: 5000 }) => {
    "ansible_loop_var": "articol",
    "item": "{ nume: utilizator1, uid: 5000 }",
    "{ name: user1, uid: 5000 }": "VARIABILA NU ESTE DEFINITĂ!"
}
ok: [lx-test] => (item={ nume: user2, uid: 5001 }) => {
    "ansible_loop_var": "articol",
    "item": "{ nume: utilizator2, uid: 5001 }",
    "{ name: user2, uid: 5001 }": "VARIABILA NU ESTE DEFINITĂ!"
}

Aveți idee cum să convertiți acel șir într-un dicționar real? Mulțumesc anticipat!

Puncte:1
drapel br

Actualizați

Expresia de mai jos

users_list: „{{ users_str.splitlines()|hartă('from_yaml')|listă }}”

lista_utilizatori:
  - nume: utilizator1
    uid: 5000
  - nume: utilizator2
    uid: 5001

Declarați variabila ca adecvat.


Răspunsul original

Textul nu este nici JSON, nici YAML valid. Va trebui să împărțiți rândurile și să citiți dicționarele rând cu rând. De exemplu, având în vedere textul

user_str: |
  { nume: utilizator1, uid: 5000 }
  { nume: utilizator2, uid: 5001 }

sarcina de mai jos

    - set_fact:
        users_list: „{{ users_list|d([]) + [articol|from_yaml] }}”
      buclă: „{{ users_str.splitlines() }}”

creează lista de dicționare

lista_utilizatori:
  - nume: utilizator1
    uid: 5000
  - nume: utilizator2
    uid: 5001

Iterația este banală acum

    - depanare:
        var: item.name
      buclă: „{{ listă_utilizatori }}”

  item.name: utilizator1
  item.name: user2
Costales avatar
drapel eg
Răspuns minunat, funcționează perfect! Multumesc mult Vladimir
Francisco Rebolledo avatar
drapel us
Mulțumiri! soluțiile tale au funcționat minunat. Dar ați explica, vă rog, ce face users_list: „{{ users_list|d([]) + [item|from_yaml] }}”? Mulțumiri!
drapel br
Sigur. Expresia concatenează lista. „d” este un alias pentru „default”. „Articolul” este un șir, prin urmare trebuie convertit de filtrul „from_yaml”. Poate doriți să descompuneți bucla și să o vedeți singur.
drapel br
Vezi codul simplificat.

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.