I have a JSON file like
{
"Changes": [{
"Action": "UPSERT",
"ResourceRecordSet": {
"Name": "RESOURCE_NAME",
"Type": "A",
"TTL": 60,
"ResourceRecords": [{
"Value": "RESOURCE_HOSTS"
}]
}
}]
}
where I need to replace .Changes[].ResourceRecordSet.Name
and .Changes[].ResourceRecordSet.ResourceRecords[]
dynamically.
So, I wrote a script to replace required values with jq
.
#!/bin/bash -xe
RESOURCE_NAME="example.com"
RESOURCE_HOSTS="1.1.1.1,2.2.2.2,"
cat resource-changes.json | \
jq '.Changes[].ResourceRecordSet.Name=env.RESOURCE_NAME' | \
jq 'del(.Changes[].ResourceRecordSet.ResourceRecords[])' \
> resource-changes.$$.json && \
mv resource-changes.$$.json resource-changes.json
for host in $(echo "$RESOURCE_HOSTS" | tr "," "\n"); do
cat resource-changes.json | \
jq --arg theHost $host '.Changes[].ResourceRecordSet.ResourceRecords |= (. + [{"Value":$theHost}])' \
> resource-changes.$$.json
mv resource-changes.$$.json resource-changes.json
done
jq '.' resource-changes.json
Which works fine and I can get required replacements. Though the script looks quite long and complicated IMO. Also, I do not really like joggling with temporary files. I'm looking for a way to simplify the script. Appreciate any comments!
jq
tag. Do not have enough power for it.. \$\endgroup\$