Получить третий элемент документа JSON через JQ и BASH / SHELL - PullRequest
0 голосов
/ 30 сентября 2019

У меня есть несколько экземпляров в AWS. Я хочу получить эти приложения через специальный тег.

Моя команда AWS CLI, через тег IAMOWNER:

aws ec2 describe-instances --filters "Name=instance-state-name,Values=running" "Name=tag:Owner,Values=IAMOWNER" --query "Reservations[*].Instances[*].[InstanceId,PrivateIpAddress,Tags[?Key=='Name'].Value[]]" --region us-west-2

Вывод этой команды:

[
    [
        [
            "i-d21eei21e912e0e91",
            "192.168.1.203",
            [
                "mycentralapplication-DEV-10"
            ]
        ]
    ],
    [
        [
            "i-ddaswed1e12415155",
            "192.168.1.210",
            [
                "mycentralapplication-DEV-103"
            ]
        ]
    ],
    [
        [
            "i-dass1241211agh354",
            "192.168.1.202",
            [
                "myindexapplication-DEV-53"
            ]
        ]
    ],
    [
        [
            "i-2143214251assaa11",
            "192.168.1.211",
            [
                "myserviceapplication-DEV-52"
            ]
        ]
    ],
    [
        [
            "i-d2112421521assas1",
            "192.168.1.207",
            [
                "mycentralapplication-DEV-10"
            ]
        ]
    ],
    [
        [
            "i-sadas11112424111a",
            "192.168.1.196",
            [
                "myapplication-DEV-106"
            ]
        ]
    ]
]

Вопрос. Как я могу получить элементы, например, mycentralapplication через jq библиотеку в bash или shell? Например, я должен получить только mycentralapplication на выходе

[
    [
        [
            "i-d21eei21e912e0e91",
            "192.168.1.203",
            [
                "mycentralapplication-DEV-10"
            ]
        ]
    ],
    [
        [
            "i-ddaswed1e12415155",
            "192.168.1.210",
            [
                "mycentralapplication-DEV-103"
            ]
        ]
    ],
    [
        [
            "i-d2112421521assas1",
            "192.168.1.207",
            [
                "mycentralapplication-DEV-10"
            ]
        ]
    ]
]

Как я могу это сделать?

aws ec2 describe-instances --filters "Name=instance-state-name,Values=running" "Name=tag:Owner,Values=IAMOWNER" --query "Reservations[*].Instances[*].[InstanceId,PrivateIpAddress,Tags[?Key=='Name'].Value[]]" --region us-west-2 | jq -r "mycentralapplication"

В этом случае я возвращаю ошибку. Вопрос, возможно ли решить эту задачу через jq? Или я должен использовать grep и т.д ...?

Ответы [ 2 ]

2 голосов
/ 30 сентября 2019

Вы можете использовать этот jq-скрипт:

aws ... | jq 'map(select(.[][][]?|contains("mycentralapplication")))'

Это выбирает все элементы вложенных массивов, содержащие строку mycentralapplication

1 голос
/ 30 сентября 2019

Используйте это.

aws ec2 describe-instances --filters "Name=tag:Name,Values=mycentralapplication"   "Name=instance-state-name,Values=running"   |  jq -r   ".Reservations[] | .Instances[] | .NetworkInterfaces[] | .PrivateIpAddresses[] | .PrivateIpAddress "

Посмотрите на полный вывод

aws ec2 describe-instances --filters "Name=tag:Name,Values=mycentralapplication"

, вы увидите, как я вытягиваю значения.

...