I've got this service-accounts-list.txt
file with service accounts:
serviceAccount:p12345-001@gcp-sa-logging.iam.gserviceaccount.com
serviceAccount:p12345-002@gcp-sa-logging.iam.gserviceaccount.com
serviceAccount:p12345-003@gcp-sa-logging.iam.gserviceaccount.com
serviceAccount:p12345-004@gcp-sa-logging.iam.gserviceaccount.com
serviceAccount:p12345-005@gcp-sa-logging.iam.gserviceaccount.com
and this results.json
file which I'd like to append data to:
{
"access": [
{
"role": "WRITER",
"specialGroup": "projectWriters"
},
{
"role": "OWNER",
"specialGroup": "projectOwners"
},
{
"role": "READER",
"specialGroup": "projectReaders"
}
]
}
Expected result: I'd like to add an object for each line in service-accounts-list.txt
, like so:
{
"access": [
{
"role": "WRITER",
"specialGroup": "projectWriters"
},
{
"role": "OWNER",
"specialGroup": "projectOwners"
},
{
"role": "READER",
"specialGroup": "projectReaders"
},
{
"role": "WRITER",
"userByEmail": "serviceAccount:p12345-001@gcp-sa-logging.iam.gserviceaccount.com"
},
{
"role": "WRITER",
"userByEmail": "serviceAccount:p12345-002@gcp-sa-logging.iam.gserviceaccount.com"
},
{
"role": "WRITER",
"userByEmail": "serviceAccount:p12345-003@gcp-sa-logging.iam.gserviceaccount.com"
},
{
"role": "WRITER",
"userByEmail": "serviceAccount:p12345-004@gcp-sa-logging.iam.gserviceaccount.com"
},
{
"role": "WRITER",
"userByEmail": "serviceAccount:p12345-005@gcp-sa-logging.iam.gserviceaccount.com"
}
]
}
My bash script so far looks like this:
while read p;
do
cat result.json | jq --arg email "$p" '.access += [{"role": "WRITER", "userByEmail": $email}]' > result.json
done < service-accounts-list.txt
The resulting result.json
file is actually empty. If I redirect the output to for example > result2.json
it correctly adds the last service account, like so:
{
"access": [
{
"role": "WRITER",
"specialGroup": "projectWriters"
},
{
"role": "OWNER",
"specialGroup": "projectOwners"
},
{
"role": "READER",
"specialGroup": "projectReaders"
},
{
"role": "WRITER",
"userByEmail": "serviceAccount:p12345-005@gcp-sa-logging.iam.gserviceaccount.com"
}
]
}
so it seems the jq
syntax is correct. I've tried adding the --unbuffered
flag to no avail.
What am I missing?