Hi, I am trying to update an object on an rest api endpoing and I need to
build the proper json structure.
I am getting unwanted extra sets of quotes in my activateRegions list and I
do not know how to remove them or build this in another way.. i'm really
close just missing something.. any thoughts or help is welcome, thanks
---
- hosts: localhost
vars:
cloud_environment_exists: [ { "associatedClouds": [
{ "preference": "VISIBLE_UNLOCKED",
"regionDisplayName": "S1-01", "regionId":
"18", "regionName": "S1-01",
"resourcePlacementScript": null,
"resourceValidationScript": null }, {
"preference": "VISIBLE_UNLOCKED",
"regionDisplayName": "S2-01", "regionId": "19",
"regionName": "S2-01",
"resourcePlacementScript": null,
"resourceValidationScript": null }, {
"preference": "VISIBLE_UNLOCKED",
"regionDisplayName": "S3-01", "regionId": "110",
"regionName": "MY-CP-S3-01",
"resourcePlacementScript": null,
"resourceValidationScript": null } ],
"description": "Environment 1 ", "id": "2510",
"name": "Environment 1", }, {
"associatedClouds": [ { "preference":
"VISIBLE_UNLOCKED", "regionDisplayName": "S1-01",
"regionId": "28", "regionName":
"S1-01", "resourcePlacementScript": null,
"resourceValidationScript": null },
{ "preference": "VISIBLE_UNLOCKED",
"regionDisplayName": "S2-01", "regionId": "91",
"regionName": "S2-01",
"resourcePlacementScript": null,
"resourceValidationScript": null }, {
"preference": "VISIBLE_UNLOCKED",
"regionDisplayName": "S3-01", "regionId": "181",
"regionName": "MY-CP-S3-01",
"resourcePlacementScript": null,
"resourceValidationScript": null } ],
"description": "Environment 2 ", "id": "2511",
"name": "Environment 2", } ]
tasks:
- debug:
msg: "{{cloud_environment_exists|json_query(query)}}"
loop: "{{cloud_environment_exists}}"
loop_control:
loop_var: envs
label: a
index_var : i
vars:
query: "[?name=='{{ envs.name }}'].associatedClouds[].regionId"
# Prepare the update body for a uri module post call to REST API
- set_fact:
update:
{"name":"sdf","description":"sdf","planId":"2500","contractId":"2147","depEnvId":"","activateRegions":[],"defaultStorageSize":0,"agreeToContract":false,"sendActivationEmail":false,"importApps":[],"tenantId":14334}
# Update the region list to be compliant with the expected body content for
the REST call, create a list of elements in the form
"activateRegions":[{"regionId":"18"},{"regionId":"29"},{"regionId":"114"}]
- set_fact:
truc: '{{truc|default({})| combine({envs.name:
[prefix]|product(cloud_environment_exists|json_query(query))|map("join")|product(suffix)|map("join")|list
} )}}'
loop: "{{cloud_environment_exists}}"
loop_control:
loop_var: envs
label: a
index_var : i
vars:
query: "[?name=='{{ envs.name }}'].associatedClouds[].regionId"
prefix: '{"regionId":'
suffix: "}"
#Print the expected merge update string, output is not what I want, it has
"activateRegions":["{"regionId":"18"}","{"regionId":"29"}","{"regionId":"114"}"]
instead of [{"regionId":"18"},{"regionId":"29"},{"regionId":"114"}] ...
there is an extra pair of double quotes on each of the elements of the
activateRegions list...
- debug:
msg: "{{update|combine({'activateRegions': truc[envs.name] }) }}"
loop: "{{cloud_environment_exists}}"
loop_control:
loop_var: envs
--
You received this message because you are subscribed to the Google Groups
"Ansible Project" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
To view this discussion on the web visit
https://groups.google.com/d/msgid/ansible-project/ff14277f-bf6b-4f8a-b9b3-f7d80943a68ao%40googlegroups.com.