{
"data": [
{
"agent-config": {
"are-all-plugins-disabled": false,
"is-management-disabled": false,
"is-monitoring-disabled": false,
"plugins-config": null
},
"availability-config": {
"is-live-migration-preferred": null,
"recovery-action": "RESTORE_INSTANCE"
},
"availability-domain": "RRSt1",
"capacity-reservation-id": null,
"compartment-id": "ocid1.compartmeiox33bbyq",
"dedicated-vm-host-id": null,
"defined-tags": {
"Oracle-Tags": {
"CreatedBy": "ops",
"CreatedOn": "2022-01-05T19:34:56.443Z"
}
},
"display-name": "Dnode0",
"extended-metadata": {},
"fault-domain": "FAULT-DOMAIN-2",
"freeform-tags": {
"Type": "TEST-mongo"
},
"id": "ocid1.instance.oc1.me-jeozlnq7t4eqkfjlaxyq6a",
"image-id": "ocid1.image.om3jrq4i5gf4k2kq",
"instance-options": {
"are-legacy-imds-endpoints-disabled": false
},
"ipxe-script": null,
"launch-mode": "PARAVIRTUALIZED",
"launch-options": {
"boot-volume-type": "PARAVIRTUALIZED",
"firmware": "UEFI_64",
"is-consistent-volume-naming-enabled": true,
"is-pv-encryption-in-transit-enabled": false,
"network-type": "PARAVIRTUALIZED",
"remote-data-volume-type": "PARAVIRTUALIZED"
},
"lifecycle-state": "RUNNING",
"metadata": {},
"platform-config": null,
"preemptible-instance-config": null,
"region": "me-1",
"shape": "VM1",
"shape-config": {
"baseline-ocpu-utilization": null,
"gpu-description": null,
"gpus": 0,
"local-disk-description": null,
"local-disks": 0,
"local-disks-total-size-in-gbs": null,
"max-vnic-attachments": 2,
"memory-in-gbs": 15.0,
"networking-bandwidth-in-gbps": 1.0,
"ocpus": 1.0,
"processor-description": "2.0 GHz Intelu00ae Xeonu00ae Platinum 8167M (Skylake)"
},
"source-details": {
"boot-volume-size-in-gbs": null,
"boot-volume-vpus-per-gb": null,
"image-id": "ocid1.image.oc1.me-j3jrq4i5gf4k2kq",
"kms-key-id": null,
"source-type": "image"
},
"system-tags": {},
"time-created": "2022-01-05T19:34:56.894000+00:00",
"time-maintenance-reboot-due": null
},
{
"agent-config": {
"are-all-plugins-disabled": false,
"is-management-disabled": false,
"is-monitoring-disabled": false,
"plugins-config": null
},
"availability-config": {
"is-live-migration-preferred": null,
"recovery-action": "RESTORE_INSTANCE"
},
"availability-domain": "RRS-1",
"capacity-reservation-id": null,
"compartment-id": "ocid1.compartmentselksvqyp2aiox33bbyq",
"dedicated-vm-host-id": null,
"defined-tags": {
"Oracle-Tags": {
"CreatedBy": "ops",
"CreatedOn": "2022-01-05T19:38:08.746Z"
}
},
"display-name": "Application-Sandbox-WEBSERVER-20220715T184918",
"extended-metadata": {},
"fault-domain": "FAULT-DOMAIN-2",
"freeform-tags": {
"Type": "TEST-mongo"
},
"id": "ocid1.instanceathpfbjo7le5iosl4oa",
"image-id": "ocid1.image.oc1.mekdzloqgdctm3jrq4i5gf4k2kq",
"instance-options": {
"are-legacy-imds-endpoints-disabled": false
},
"ipxe-script": null,
"launch-mode": "PARAVIRTUALIZED",
"launch-options": {
"boot-volume-type": "PARAVIRTUALIZED",
"firmware": "UEFI_64",
"is-consistent-volume-naming-enabled": true,
"is-pv-encryption-in-transit-enabled": false,
"network-type": "PARAVIRTUALIZED",
"remote-data-volume-type": "PARAVIRTUALIZED"
},
"lifecycle-state": "RUNNING",
"metadata": {},
"platform-config": null,
"preemptible-instance-config": null,
"region": "me-jh-1",
"shape": "VM.Standard2.1",
"shape-config": {
"baseline-ocpu-utilization": null,
"gpu-description": null,
"gpus": 0,
"local-disk-description": null,
"local-disks": 0,
"local-disks-total-size-in-gbs": null,
"max-vnic-attachments": 2,
"memory-in-gbs": 15.0,
"networking-bandwidth-in-gbps": 1.0,
"ocpus": 1.0,
"processor-description": "2.0 GHz Intelu00ae Xeonu00ae Platinum 8167M (Skylake)"
},
"source-details": {
"boot-volume-size-in-gbs": null,
"boot-volume-vpus-per-gb": null,
"image-id": "ocid1.image.oc1.me5vkdzloqgdctm3jrq4i5gf4k2kq",
"kms-key-id": null,
"source-type": "image"
},
"system-tags": {},
"time-created": "2022-01-05T19:38:09.186000+00:00",
"time-maintenance-reboot-due": null
}
]}
可靠的调试:其中jsondata.data返回json输出
ictimecreated: "{{ jsondata.data| selectattr('display-name', 'equalto', 'MasimoSafetyNet-Sandbox-*-*' ) | list}}"
现在这实际上是一个巨大的列表,我有Key值,比如";显示名称":"Application-Sandbox-WEBSERVER-2020715T184918";
现在,我想通过仅在显示名称具有ApplicationSandbox-(*wildcard(-(*通配符(时进行选择来创建列表形式的json对象
前两个术语保持不变,只有剩下的应该是通配符,它会发生变化。如何从json对象创建列表。我尝试搜索jmespath和jinja2模板,我也尝试过,但不适合我。
列表返回后,我应该能够获得image_id 的列表
[imageid_1,imageid2_]
只有显示名称具有应用程序沙盒的图像ID
*PS如果等于"是";Application-Sandbox-WEBSERVER-2020715T184918";元素被选中,但我想添加通配符而不是WEBSERVER-20222,所以我可以使用其他类似的元素
我也在努力"{{jsondata.data|(selectattr("显示名称"、"搜索"、"应用程序沙盒--"((和(selectatt("生命周期状态"、"等于"、"运行"(|list}}">
如果要测试通配符,请使用tests搜索。例如,
selectattr('display-name', 'search', 'MasimoSafetyNet-Sandbox-*-*' )
然后映射您想要的属性
map(attribute='image-id')
测试的完整剧本示例
shell> cat pb.yml
- hosts: localhost
vars:
ictimecreated: "{{ jsondata.data|
selectattr('display-name', 'search', 'Application-Sandbox-*-*' )|
map(attribute='image-id')|
list }}"
tasks:
- include_vars:
file: data7.json
name: jsondata
- debug:
var: ictimecreated
给出
ictimecreated:
- ocid1.image.oc1.mekdzloqgdctm3jrq4i5gf4k2kq
Q:";使多个条件">
A: 简化测试数据。例如,
data:
- availability-domain: R1
display-name: a-s-node0
image-id: ocid1.image.a
lifecycle-state: RUNNING
- availability-domain: R2
display-name: a-s-node0
image-id: ocid1.image.b
lifecycle-state: STOPPED
- availability-domain: R3
display-name: n-s-node1
image-id: ocid1.image.c
lifecycle-state: STOPPED
- availability-domain: R4
display-name: n-s-node2
image-id: ocid1.image.d
lifecycle-state: RUNNING
然后,按属性显示名称选择项目,并选择属性image id
d2: "{{ data|
selectattr('display-name', 'search', 'a-s-*' )|
map(attribute='image-id')|
list }}"
给出
d2:
- ocid1.image.a
- ocid1.image.b
您可以通过管道进行选择。例如,
d3: "{{ data|
selectattr('display-name', 'search', 'a-s-*' )|
selectattr('lifecycle-state', 'eq', 'RUNNING' )|
map(attribute='image-id')|
list }}"
给出
d3:
- ocid1.image.a
在测试之前,您可能需要简化这种复杂的结构。例如,使用ansible.utils.keep_keys从字典中选择密钥
test_keys: [availability-domain, display-name, image-id, lifecycle-state]
data: "{{ jsondata.data|map('ansible.utils.keep_keys', target=test_keys)|list }}"