Điểm:1

Ansible: Chuyển đổi chuỗi thành từ điển

lá cờ eg

Tôi đang khởi chạy Ansible từ Tower, sau đó tôi điền những người dùng mới dưới dạng văn bản:

{ tên: user1, uid: 5000 }
{ tên: user2, uid: 5001 }

Tôi muốn lặp lại những người dùng đó dưới dạng từ điển, chẳng hạn như:

- tên: Lọ in
  gỡ lỗi:
    var: "{{ item.name }}"
  with_items: "{{users.split('\n') }}"

Nhưng nó không hoạt động:

NHIỆM VỤ [Vari in] ********************************************* *************************************************** ***************************
ok: [lx-test] => (item={ name: user1, uid: 5000 }) => {
    "ansible_loop_var": "mục",
    "item": "{ name: user1, uid: 5000 }",
    "{ name: user1, uid: 5000 }": "BIẾN KHÔNG ĐƯỢC XÁC ĐỊNH!"
}
ok: [lx-test] => (item={ name: user2, uid: 5001 }) => {
    "ansible_loop_var": "mục",
    "item": "{ name: user2, uid: 5001 }",
    "{ name: user2, uid: 5001 }": "BIẾN KHÔNG ĐƯỢC XÁC ĐỊNH!"
}

Bất kỳ ý tưởng làm thế nào để chuyển đổi chuỗi đó thành một từ điển thực sự? Cảm ơn trước!

Điểm:1
lá cờ br

Cập nhật

Biểu thức dưới đây

users_list: "{{users_str.splitlines()|map('from_yaml')|list }}"

cho

danh sách người dùng:
  - tên: người dùng1
    uid: 5000
  - tên: người dùng2
    uid: 5001

Khai báo biến như thích hợp.


câu trả lời gốc

Văn bản không phải là JSON hay YAML hợp lệ. Bạn sẽ phải chia dòng và đọc từ điển từng dòng một. Chẳng hạn, với văn bản

người dùng_str: |
  { tên: user1, uid: 5000 }
  { tên: user2, uid: 5001 }

nhiệm vụ dưới đây

    - bộ_thực tế:
        users_list: "{{users_list|d([]) + [item|from_yaml] }}"
      vòng lặp: "{{users_str.splitlines() }}"

tạo danh sách từ điển

danh sách người dùng:
  - tên: người dùng1
    uid: 5000
  - tên: người dùng2
    uid: 5001

Việc lặp lại bây giờ là tầm thường

    - gỡ lỗi:
        var: item.name
      vòng lặp: "{{user_list }}"

cho

  item.name: user1
  item.name: user2
Costales avatar
lá cờ eg
Câu trả lời tuyệt vời, hoạt động hoàn hảo! Cảm ơn Vladimir rất nhiều
Francisco Rebolledo avatar
lá cờ us
Cảm ơn! giải pháp của bạn làm việc tuyệt vời. Nhưng bạn vui lòng giải thích những gì users_list: "{{ users_list|d([]) + [item|from_yaml] }}" làm gì? Cảm ơn!
lá cờ br
Chắc chắn rồi. Biểu thức nối danh sách. 'd' là bí danh của 'mặc định'. 'Mục' là một chuỗi do đó nó phải được chuyển đổi bằng bộ lọc 'from_yaml'. Bạn có thể muốn phân tách vòng lặp và tự mình xem nó.
lá cờ br
Xem mã đơn giản hóa.

Đăng câu trả lời

Hầu hết mọi người không hiểu rằng việc đặt nhiều câu hỏi sẽ mở ra cơ hội học hỏi và cải thiện mối quan hệ giữa các cá nhân. Ví dụ, trong các nghiên cứu của Alison, mặc dù mọi người có thể nhớ chính xác có bao nhiêu câu hỏi đã được đặt ra trong các cuộc trò chuyện của họ, nhưng họ không trực giác nhận ra mối liên hệ giữa câu hỏi và sự yêu thích. Qua bốn nghiên cứu, trong đó những người tham gia tự tham gia vào các cuộc trò chuyện hoặc đọc bản ghi lại các cuộc trò chuyện của người khác, mọi người có xu hướng không nhận ra rằng việc đặt câu hỏi sẽ ảnh hưởng—hoặc đã ảnh hưởng—mức độ thân thiện giữa những người đối thoại.