I have two files:
aws.json:
{
"access_key_id": "MYSECRETKEYID",
"secret_access_key": "mysecretaccesskey"
}
model.json:
{
"access_key_id": "FREDSACCESSKEY",
"secret_access_key": "fredssecretaccesskey",
"ntp_servers_string": "1.2.3.4, 5.6.7.8",
"metrics_ip": null,
"pagerduty_enabled": false,
"blobstore_type": "s3",
"s3_blobstore_options": {
"endpoint": "https://s3.amazonaws.com",
"bucket_name": "s3-mybucket",
"access_key_id": "vault-supplied-key",
"secret_access_key": "vault-supplied-key",
"signature_version": "4",
"region": "us-east-1"
},
"database_type": "external"
}
and I would like to use jq to update a couple of values in the s3_blobstore_options key to the end result is this:
result.json:
{
"access_key_id": "FREDSACCESSKEY",
"secret_access_key": "fredssecretaccesskey",
"ntp_servers_string": "1.2.3.4, 5.6.7.8",
"metrics_ip": null,
"pagerduty_enabled": false,
"blobstore_type": "s3",
"s3_blobstore_options": {
"endpoint": "https://s3.amazonaws.com",
"bucket_name": "s3-mybucket",
"access_key_id": "MYSECRETKEYID",
"secret_access_key": "mysecretaccesskey",
"signature_version": "4",
"region": "us-east-1"
},
"database_type": "external"
}
The following code works perfectly, if the values are not nested:
jq --argfile override aws.json '. + $override' model.json > result.json
Anyone know how to tell jq that I want to update the lower-level keys pairs, and not touch the upper level ones (i.e. FREDSACCESSKEY)?