Reputation: 151
I have a problem with a jq command, i have tried to parse all my :
Add some filter:
And then do an update:
But with this command, i'm destroying my json
I have the following input (terraform state):
state.json
{
"version": 4,
"terraform_version": "0.13.4",
"serial": 1,
"lineage": "xxx",
"resources": [
{
"module": "module.cname[\"tiger2\"]",
"mode": "managed",
"type": "service",
"name": "service",
"xxx" : "xxx"
},
{
"module": "module.cname[\"tiger2\"]",
"mode": "managed",
"type": "user",
"name": "other1",
"xxx" : "xxx"
},
{
"module": "module.cname[\"tiger1\"]",
"mode": "managed",
"type": "project",
"name": "other2",
"xxx" : "xxx"
}
]
}
I want to change it to:
{
"version": 4,
"terraform_version": "0.13.4",
"serial": 1,
"lineage": "xxx",
"resources": [
{
"module": "module.cname[\"tiger2\"]", # Filter one
"mode": "managed",
"type": "new_service", # Only this one
"name": "service", # filter two
"xxx" : "xxx"
},
{
"module": "module.cname[\"tiger2\"]",
"mode": "managed",
"type": "user",
"name": "other1",
"xxx" : "xxx"
},
{
"module": "module.cname[\"tiger2\"]",
"mode": "managed",
"type": "project",
"name": "other2",
"xxx" : "xxx"
}
]
}
I have tried:
< tfplan.json jq --arg MODULE_SEARCH 'module.cname["tiger2"]' \
--arg FILTER_SEARCH service \
--arg TO_UPDATE new_service \
'.resources[] | if .module == $MODULE_SEARCH and .name == $FILTER_SEARCH then (.type |=$TO_UPDATE) else . end'
Which give me:
{
"module": "module.cname[\"tiger2\"]",
"mode": "managed",
"type": "new_service",
"name": "service",
"xxx": "xxx"
}
{
"module": "module.cname[\"tiger2\"]",
"mode": "managed",
"type": "user",
"name": "other1",
"xxx" : "xxx"
}
{
"module": "module.cname[\"tiger2\"]",
"mode": "managed",
"type": "project",
"name": "other2",
"xxx" : "xxx"
}
I have two issues with this:
Thanks
Upvotes: 1
Views: 971
Reputation: 26592
You just need to add an equal sign :
< tfplan.json jq --arg MODULE_SEARCH 'module.cname["tiger2"]' \
--arg FILTER_SEARCH service \
--arg TO_UPDATE new_service \
'.resources[] |= if .module == $MODULE_SEARCH and
.name == $FILTER_SEARCH
then .type |= $TO_UPDATE
else . end'
Upvotes: 2