Как проанализировать атрибуты, которые содержат точки с --format для вывода событий Docker? - PullRequest
2 голосов
/ 28 мая 2019

Я пытаюсь проанализировать docker events вывод и отформатировать его, используя аргумент --format. Он работает для базовых атрибутов, однако мне не удается использовать атрибуты, содержащие точки, например, из Docker Swarm.

Вот пример:

$ docker events --since=5m --until=1s --filter type=container --format '{{ json . }}'
{
  "status": "oom",
  "id": "23916078dbf062b02edf36ae1de3cdd6d439d11cad29acc72daffcc1ac8981b9",
  "from": "(redacted)",
  "Type": "container",
  "Action": "oom",
  "Actor": {
    "ID": "23916078dbf062b02edf36ae1de3cdd6d439d11cad29acc72daffcc1ac8981b9",
    "Attributes": {
      "com.docker.stack.namespace": "beta-client",
      "com.docker.swarm.node.id": "woxyp548c8yat5nizwzmar6ia",
      "com.docker.swarm.service.id": "5j72edfv4sda554gqu0paaxu2",
      "com.docker.swarm.service.name": "beta-client_task",
      "com.docker.swarm.task": "",
      "com.docker.swarm.task.id": "ib57fy6em8hz1cfbrua518r2i",
      "com.docker.swarm.task.name": "beta-client_task.1.ib57fy6em8hz1cfbrua518r2i",
      "image": "(redacted)",
      "name": "beta-client_task.1.ib57fy6em8hz1cfbrua518r2i"
    }
  },
  "scope": "local",
  "time": 1559032467,
  "timeNano": 1559032467083181300
}

Я хотел бы получить атрибут com.docker.stack.namespace в Actor.Attributes (без использования внешнего инструмента, такого как jq).

Но точки в имени атрибута не позволяют мне получить доступ к этому атрибуту, и его цитирование, похоже, не работает:

$ docker events --since=5m --until=1s --filter type=container --format '{{ .Actor.Attributes."com.docker.stack.namespace" }}'
Error parsing format: template: :1: bad character U+0022 '"'

Спасибо за вашу помощь!

1 Ответ

1 голос
/ 29 мая 2019

Нельзя использовать ., если в имени параметра также есть .. Попробуйте index, что-то вроде следующего:

--format '{{ index .Actor.Attributes "com.docker.stack.namespace" }}'
...