Как я могу расширить якоря и псевдонимы YAML и получить YAML в Bash? - PullRequest
1 голос
/ 13 июня 2019

У меня есть файл yaml, внутри которого я использую якоря и псевдонимы, чтобы высушить файл. Это docker-compose файл. Простой, например следующим образом:

version: "3.4"

x-build: &build
  context: ../

services:
  api:
    build:
      <<: *build
      dockerfile: some-path/Dockerfile
    image: gcr.io/some-project/api

Я использую yq, а затем jq, чтобы преобразовать это в json и передать его в terraform, чтобы я мог повторно использовать информацию в docker-compose как источник правды.

Все псевдонимы и якоря удаляются из полученного json. Не катастрофа, но было бы намного лучше, если бы ее расширили.

Я ищу инструмент командной строки, который я могу запустить в сценарии bash, чтобы взять вышеприведенный json в качестве ввода и развернуть привязки и псевдонимы и записать результат в стандартный вывод, что-то вроде :

version: "3.4"

services:
  api:
    build:
      context: ../
      dockerfile: some-path/Dockerfile
    image: gcr.io/some-project/api

Кто-нибудь знает, как это сделать?

1 Ответ

0 голосов
/ 14 июня 2019

Почему ты не принимаешь ямл как источник истины? Вы должны взглянуть на ель . По сути это инструмент слияния yaml / json, который также можно преобразовать в json. Однако он также отбрасывает ваши якоря и псевдонимы.

Преобразование yml в json, таким образом, больше не требуется действие yq и jq:)

spruce json

Объединить yml файлы:

spruce merge file1.yml file2.yml

Ваш пример:

$ spruce merge spruce-input.yml
services:
  api:
    build:
      context: ../
      dockerfile: some-path/Dockerfile
    image: gcr.io/some-project/api
version: "3.4"
x-build:
  context: ../

$ spruce json spruce-input.yml | jq -r
{
  "services": {
    "api": {
      "build": {
        "context": "../",
        "dockerfile": "some-path/Dockerfile"
      },
      "image": "gcr.io/some-project/api"
    }
  },
  "version": "3.4",
  "x-build": {
    "context": "../"
  }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...