Điểm:1

Có thể cập nhật danh sách từ điển dựa trên điều kiện nhất định

lá cờ bz

Tôi muốn cập nhật danh sách với ansible chứa các mục từ điển dựa trên các điều kiện nhất định

Ví dụ:

danh sách1:
  - {"name": "test1", "uid": 100, "gid": 250}
  - {"name": "test2", "uid": 101, "gid": 250}
  - {"name": "test3", "uid": 103, "gid": 250}
  - {"name": "test4", "uid": 104, "gid": 250}

danh sách2: [100, 101]

danh sách3: [102,103]

nếu uid khớp với một mục trong list2, nó sẽ thay đổi gid=300 và nếu khớp với list3, nó cập nhật thành 400, các mục còn lại giữ nguyên trong list1

Vui lòng đề xuất cách tôi có thể tạo list1 với các điều kiện trên

lá cờ sv
Chào mừng đến với ServerFault. Khi một câu trả lời hữu ích, vui lòng bỏ phiếu và có thể đánh dấu nó là câu trả lời đúng, nếu nó thực sự giải quyết được câu hỏi.
Điểm:1
lá cờ br

Ví dụ

    - bộ_thực tế:
        l4: "{{ l4|d([]) + [item|combine({'gid': _gid|from_yaml})] }}"
      vòng lặp: "{{list1 }}"
      lọ:
        _gid: |
          {% nếu item.uid trong list2 %}
          300
          {% elif item.uid in list3 %}
          400
          {% khác %}
          {{ item.gid }}
          {% endif %}

cho

  l4|to_yaml: |-
    - {gid: 300, tên: test1, uid: 100}
    - {gid: 300, tên: test2, uid: 101}
    - {gid: 400, tên: test3, uid: 103}
    - {gid: 250, tên: test4, uid: 104}

Cập nhật

Không cần thiết phải lặp lại danh sách trong Ansible 2.12 trở lên. Thay vào đó, hãy cập nhật danh sách trong một đường dẫn. Các biểu thức dưới đây cho cùng một kết quả

dict_default: "{{list1|items2dict(key_name='uid', value_name='gid') }}"
dict_x: "{{ dict_default|
            kết hợp(dict(list2|product([300]) + list3|product([400]))) }}"
gid_x: "{{list1|map(attribute='uid')|map('extract', dict_x)|list }}"
gid_x_update: "{{ gid_x|map('community.general.dict_kv', 'gid')|list }}"
list4: "{{list1|zip(gid_x_update)|map('combine')|list }}"
Chi tiết
dict_default:
  100: 250
  101: 250
  103: 250
  104: 250

dict_x:
  100: 300
  101: 300
  102: 400
  103: 400
  104: 250

gid_x:
  - 300
  - 300
  - 400
  - 250

gid_x_update:
  - gid: 300
  - gid: 300
  - gid: 400
  - gid: 250
Sandeep avatar
lá cờ bz
Cảm ơn Vladimir Botka, nó hoạt động với giải pháp được cung cấp

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