JQ возвращает только один блок CIDR из AWS CLI - PullRequest
1 голос
/ 05 апреля 2020

Я пытаюсь прочитать блоки CIDR из VPC в AWS на AWS CLI. Я буду использовать это в сценарии, когда я закончу. Я использую jq для анализа информации:

 aws ec2 describe-vpcs --region=us-east-1  | jq -r '.Vpcs[].CidrBlock'
10.200.3.0/24

Однако jq возвращает только один из двух блоков CIDR в VP C. Это оригинал json:

{
  "Vpcs": [
    {
      "CidrBlock": "10.200.3.0/24",
      "DhcpOptionsId": "dopt-d0aa95ab",
      "State": "available",
      "VpcId": "vpc-00de11103235ec567",
      "OwnerId": "046480487130",
      "InstanceTenancy": "default",
      "Ipv6CidrBlockAssociationSet": [
        {
          "AssociationId": "vpc-cidr-assoc-09f19d81c2e4566b9",
          "Ipv6CidrBlock": "2600:1f18:1f7:300::/56",
          "Ipv6CidrBlockState": {
            "State": "associated"
          },
          "NetworkBorderGroup": "us-east-1"
        }
      ],
      "CidrBlockAssociationSet": [
        {
          "AssociationId": "vpc-cidr-assoc-0511a5d459f937899",
          "CidrBlock": "10.238.3.0/24",
          "CidrBlockState": {
            "State": "associated"
          }
        },
        {
          "AssociationId": "vpc-cidr-assoc-05ad73e8c515a470f",
          "CidrBlock": "100.140.0.0/27",
          "CidrBlockState": {
            "State": "associated"
          }
        }
      ],
      "IsDefault": false,
      "Tags": [
        {
          "Key": "environment",
          "Value": "int01"
        },
        {
          "Key": "Name",
          "Value": "company-int01-vpc"
        },
        {
          "Key": "project",
          "Value": "company"
        }
      ]
    }
  ]
}

Почему jq возвращает только часть информации, которую я ищу? Мне нужно получить все блоки VP C CIDR на выходе.

Ответы [ 3 ]

1 голос
/ 05 апреля 2020

и это инвариантное решение:

aws ... | jq -r '.. | if type == "object" and has("CidrBlock") then .CidrBlock else empty end'

и, вдохновленный ответом jq170727 , менее выразительная форма:

aws ... | jq -r '.. | objects | .CidrBlock // empty'
1 голос
/ 05 апреля 2020

У вас есть два ключа CidrBlock и CidrBlockAssociationSet в массиве Vpcs.

aws ec2 describe-vpcs --region=us-east-1  | jq -r '.Vpcs[] | .CidrBlock, .CidrBlockAssociationSet[].CidrBlock'

10.200.3.0/24
10.238.3.0/24
100.140.0.0/27
0 голосов
/ 05 апреля 2020

Вот фильтр, вдохновленный ответом Дмитрия , который немного короче: .. | .CidrBlock? | values

Попробуйте онлайн!

...