Как сделать размытое имя ключа поиска рекурсивно в JQ - PullRequest
0 голосов
/ 23 сентября 2019

Мне не нравится оригинальный метод inspect для поиска определенного поля в Docker, поэтому я использую jq, чтобы найти нужную конфигурацию, например:

docker inspect test | jq '.[].NetworkSettings
docker inspect test | jq '.. | .NetworkSettings? | objects'

оба сценария могут получить результаты:

{
  "Bridge": "",
  "SandboxID": "4951989910db53c8bb8368add9ddcdf0e69cd14a9ff09ef95402850f24c5de08",
  "HairpinMode": false,
  "LinkLocalIPv6Address": "",
  "LinkLocalIPv6PrefixLen": 0,
  "Ports": {},
  "SandboxKey": "/var/run/docker/netns/4951989910db",
  "SecondaryIPAddresses": null,
  "SecondaryIPv6Addresses": null,
  "EndpointID": "",
  "Gateway": "",
  "GlobalIPv6Address": "",
  "GlobalIPv6PrefixLen": 0,
  "IPAddress": "",
  "IPPrefixLen": 0,
  "IPv6Gateway": "",
  "MacAddress": "",
  "Networks": {
    "test_default": {
      "IPAMConfig": null,
      "Links": null,
      "Aliases": [
        "f3df83d51385",
        "test"
      ],
      "NetworkID": "4b09f5c3a82cb7c9770efec1fc818eb071cf707bd60ec96202664d5282d73b6c",
      "EndpointID": "",
      "Gateway": "",
      "IPAddress": "",
      "IPPrefixLen": 0,
      "IPv6Gateway": "",
      "GlobalIPv6Address": "",
      "GlobalIPv6PrefixLen": 0,
      "MacAddress": "",
      "DriverOpts": null
    }
  }
}

но основано на том, что я полностью ввел имя конфигурации NetworkSettings правильно, есть ли способ сделать размытый ключ поиска рекурсивно и без учета регистра с помощью jq?как docker inspect test | jq '.. | search(. | match("network";"i") | objects', это не сработает, просто пример.

1 Ответ

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

С этим определением:

def blurry($f):
  ($f | ascii_upcase) as $ucf
  | to_entries[]
  | select((.key|ascii_upcase) == $ucf)
  | .value;

вы можете написать:

.. | blurry("NetworkSettings")? | objects

Blurrier

Blurriness, имеющий много оттенков, вы можете пойти дальше, например:

def veryBlurry($f):
  ($f | ascii_upcase) as $ucf
  | to_entries[]
  | select(.key | ascii_upcase | index($ucf))
  | .value;

Вы можете продолжить этот путь, например, используя регулярные выражения.

...