Я пытаюсь проанализировать вывод файла состояния терраформирования.
{
"version": 3,
"terraform_version": "0.9.3",
"serial": 0,
"lineage": "ae1f2572-8fa6-4977-be73-3deac7529eff",
"modules": [
{
"path": [
"root"
],
"outputs": {
"elb_dns_name": {
"sensitive": false,
"type": "string",
"value": "web-elb-1019323532.us-east-1.elb.amazonaws.com"
}
},
"resources": {},
"depends_on": []
},
{
"path": [
"root",
"elb"
],
"outputs": {
"dns_name": {
"sensitive": false,
"type": "string",
"value": "web-elb-1019323532.us-east-1.elb.amazonaws.com"
}
},
"depends_on": []
},
{
"path": [
"root",
"sg"
],
"outputs": {
"security_group_id": {
"sensitive": false,
"type": "string",
"value": "sg-5a677425"
}
},
"depends_on": []
},
{
"path": [
"root",
"web"
],
"outputs": {
"web_instance_ids": {
"sensitive": false,
"type": "string",
"value": "i-03676fa6ba43fbb9f,i-09f51a313146856cd"
},
"web_public_ips": {
"sensitive": false,
"type": "string",
"value": "34.207.194.186,34.203.236.205"
}
},
"depends_on": []
}
]
}
Я хотел бы вернуть один объект json, в котором имена выходных данных являются ключами, а значения - выходными значениями. Как в этом примере ...
{
"elb_dns_name": "web-elb-1019323532.us-east-1.elb.amazonaws.com",
"dns_name": "web-elb-1019323532.us-east-1.elb.amazonaws.com",
"security_group_id": "sg-5a677425",
"web_instance_ids": "i-03676fa6ba43fbb9f,i-09f51a313146856cd",
"web_public_ips": "34.207.194.186,34.203.236.205"
}
Я могу вернуть только отдельные объекты, используя этот .modules[] | .outputs | to_entries | map({(.key) : .value.value }) | add.
{
"elb_dns_name": "web-elb-1019323532.us-east-1.elb.amazonaws.com"
}
{
"dns_name": "web-elb-1019323532.us-east-1.elb.amazonaws.com"
}
{
"security_group_id": "sg-5a677425"
}
{
"web_instance_ids": "i-03676fa6ba43fbb9f,i-09f51a313146856cd",
"web_public_ips": "34.207.194.186,34.203.236.205"
}
Поэтому по какой-то причине я не могу публиковать сообщения, потому что stackoverflow говорит, что у меня слишком много кода и недостаточно деталей ... так что теперь я делаю запись в дневнике, чтобы набрать достаточно, чтобы я мог нажать кнопку отправки ... любой минута ... любое количество персонажей сейчас ...
Итак, когда я не создаю Code Pipelines на работе, мне очень нравится играть в dota2. Только я думаю, что у меня это довольно дерьмово. Я имею в виду, что у меня 1200 часов в игре, а я все еще как мусор с 1.5k MMR.
@shellter Я думаю, что в этом случае потребовалось включить весь набор данных. Если вы посмотрите на запрос, который я пробовал, и на найденное мной решение, вы увидите, что мне пришлось начинать все сначала. Я мог бы обрезать ключ ресурсов, который составляет большую часть текста, но я не чувствовал, что включение всего объекта было плохим делом, и я все еще не делаю этого.

В итоге я нашел решение, но это заняло больше времени, чем должно было (часы). В принципе, если в какой-то момент вы потеряете , в своих списках, значит, вы где-то напортачили.
Это то, что я использовал .modules | map(.outputs | to_entries[] | {(.key): .value.value}) | add
Это работает, но может быть лучше.
Использование map_values дает более простой (или, по крайней мере, более короткий) фильтр и может быть более эффективным:
.modules | map(.outputs | map_values(.value) ) | add
Не слишком много кода, слишком много данных. Вы ожидаете, что читатели проанализируют весь ваш набор данных о проблемах, тогда как ваша проблема должна быть продемонстрирована в 1/2, 1/3, 1/4 данных, которые вы включили. Прочтите, пожалуйста, про минимальный воспроизводимый пример ;-). Удачи.