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