Этого нельзя сделать в самом YAML, т. Е. В
спецификация, которая говорит о включении вложенных файлов или переменных
расширение.
Возможно, что программа, которая загружает YAML, делает что-то вроде
это, но есть некоторые проблемы с указанным вами синтаксисом.
${env}
выглядит как шаблон, который вы ожидаете заменить
staging
во время загрузки. Однако из вашего примера неясно,
вы всегда ожидаете замены полного скалярного узла, или если это
можно сделать в среднем скаляре, и если да, то каков механизм побега
(т.е. как указать что-то во включенном файле, что приводит к
строка ${env}
в вашей программе).
Вы должны явно пометить IMO скаляры, которые
нуждается в расширении шаблона. Вы можете превратить ваш first.yaml
пример в
env: !v env
где интерпретация тега !v
занимает полный скаляр. И если вы
хотите расширение с помощью скаляров, вы используете другой тег и тем более
опция подробного шаблона, которую вы использовали.
xyz: !t This is a more verbose ${env} specficication
Вы можете подумать, что вам больше не нужно беспокоиться о побеге, потому что если
тега нет, ${env}
не интерпретируется, но это не
case: у вас все еще могут быть скаляры, для которых нужны некоторые ${...}
шаблоны
перевод и прочее - нет.
Ваш тег !Include
также имеет некоторые проблемы. Это хорошо что ты
сделать вещи явными, используя тег. Некоторые программы, такие как Symfony, делают
этот вид включения путем магической интерпретации специальных ключей и скалярных
синтаксис (но это может быть результатом необходимости обходить
неполный PHP YAML парсер использования).
Но при передаче параметров возникнут некоторые проблемы:
! Включить /templates/first.yaml, переменные: {env: staging}
будет интерпретироваться так, как будто вы написали один огромный ключ со встроенной запятой.
Ваш YAML эквивалентен
- ! Включить "/templates/first.yaml, variable": {env: staging}
И я не думаю, что это то, что вы хотите.
Вы, вероятно, должны сделать параметр для !Include
явной последовательностью:
- ! Включить [/templates/first.yaml, переменные: {env: staging}]
в этом случае важен порядок параметров. Или используйте сопоставления для каждого параметра:
- ! Включить {file: /templates/second.yaml, переменные: {env: production}}
Как все это должно быть реализовано, зависит от вашего языка программирования и используемого вами синтаксического анализатора.