Điểm:2

Tìm kiếm danh sách Dicts bằng cách sử dụng danh sách các mục và tìm xem mục đó có tồn tại dưới thuộc tính 'giá trị' hay không. Chỉ lưu trữ các Mục KHÔNG được tìm thấy dưới dạng danh sách mới

lá cờ in

Điều này đã được dậm chân cho tôi trong một thời gian tốt bây giờ. Hy vọng các bạn có thể giúp đỡ.

Tôi có một danh sách các ký tự đã đăng ký như ví dụ bên dưới (Đây là những 'đối tượng' từ Tường lửa)

"các đối tượng": [
      { 
         "tên": "Kiểm tra 1",  
         "type": "ip-netmask", 
         "giá trị": "8.8.8.8"
      },
      { 
         "tên": "Kiểm tra 2", 
         "type": "ip-netmask", 
         "giá trị": "8.8.4.4"
      }
   ]
}

Sử dụng danh sách địa chỉ IP được gọi là 'nguồn', tôi hiện có thể tìm kiếm 'giá trị' trong 'đối tượng' để xem chúng có tồn tại hay không. Nếu chúng được tìm thấy, tôi tạo một danh sách mới bằng cách sử dụng set_fact và điền vào danh sách này 'tên' của đối tượng được liên kết với 'giá trị' được tìm thấy. Điều này đang làm việc tốt.

Vấn đề tôi đang cố gắng giải quyết là làm thế nào tôi có thể tạo danh sách mới với 'nguồn' KHÔNG được tìm thấy trong quá trình tìm kiếm giá trị của tôi.

Mã làm việc của tôi để tìm 'nguồn' hiện có và lưu trữ dưới dạng tên như sau:

lọ
nguồn: ['8.8.8.8','8.8.4.4']

nhiệm vụ:

  - name: Tìm nạp tất cả các đối tượng và lưu trữ kết quả
     panos_object_facts:
      nhà cung cấp: "{{cli }}"
      device_group: DG_Test
      tên_regex: '.*'
      object_type: 'địa chỉ'
      đăng ký: kết quả 

 - tên: Kết quả tìm kiếm cho các nguồn của chúng tôi và lưu trữ dưới dạng danh sách nếu tìm thấy
     set_fact:
        hiện tại_source_addr: "{{hiện_source_addr|mặc định([]) + [(result.objects | selectattr('value', 'search', item ) | list | first).name ] }}"   
      with_items: "{{nguồn }}"
    - gỡ lỗi: var=current_source_addr

Điều này trả về một ví dụ như dưới đây:

"current_source_addr": "['Test1', 'Test2']"

Ví dụ dưới đây là mã tôi đang thử nghiệm để tạo danh sách mới chỉ chứa 'nguồn' KHÔNG được tìm thấy. Điều này không hoạt động như mong đợi.

lọ
nguồn: ['8.8.8.8','8.8.4.4','4.4.4.4'] 

# 4.4.4.4 không tồn tại trong danh sách các đối tượng 'dicts' của chúng tôi #

nhiệm vụ:

  - name: Tìm nạp tất cả các đối tượng và lưu trữ kết quả
     panos_object_facts:
      nhà cung cấp: "{{cli }}"
      device_group: DG_Test
      tên_regex: '.*'
      object_type: 'địa chỉ'
      đăng ký: kết quả 

  - tên: Kết quả tìm kiếm cho các nguồn của chúng tôi và lưu trữ dưới dạng danh sách nếu KHÔNG tìm thấy 
      set_fact:
        non_current_source_addr: "{{ non_current_source_addr|default([]) + [item] }}"
      with_items: "{{nguồn }}"
      khi: mục không có trong result.objects | selectattr('giá trị', 'tìm kiếm', mục ) | danh sách
   - gỡ lỗi: var=non_current_source_addr

Điều này trả về một ví dụ như dưới đây:

"non_current_source_addr": "[u'8.8.8.8', u'8.8.4.4', AnsibleUndefined]"

Điều kiện là đúng vì mục thứ 3 không được tìm thấy như mong đợi, nhưng biến của tôi đang được đặt với tất cả các mục trong danh sách 'nguồn' + 'AnsibleUndefined' cho mục nhập không tồn tại.

Có cách nào để danh sách mới này CHỈ chứa mục không tìm thấy '4.4.4.4' không? Điều này sẽ cho phép tôi sử dụng danh sách mới để tạo các đối tượng bị thiếu.

Drusstheledg3 avatar
lá cờ in
Xin lỗi đó là một lỗi đánh máy. Đây chỉ là những ví dụ. Danh sách thực tế của dicts 'đối tượng' có khoảng 2000 mục. Như đã đề cập, phần đầu tiên của mã hoạt động như dự định trong môi trường trực tiếp của chúng tôi.
Drusstheledg3 avatar
lá cờ in
Cảm ơn phản hồi của Vladimir. Tôi đã chỉnh sửa bài đăng để hy vọng bây giờ nó dễ hiểu hơn.
Điểm:1
lá cờ br

Hỏi: "Danh sách mới chỉ chứa mục không tìm thấy '4.4.4.4'."

Đáp: Ví dụ

    - gỡ lỗi:
        msg: "{{nguồn|sự khác biệt(_giá trị) }}"
      lọ:
        _values: "{{đối tượng|bản đồ(thuộc tính='giá trị')|danh sách }}"

cho

  tin nhắn:
  - 4.4.4.4
Drusstheledg3 avatar
lá cờ in
Rất cám ơn vì đã phản hồi nhanh chóng. Điều này làm việc một điều trị!

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