Ошибка (она жалуется на первую строку с надписью "Hello World!"):
Вы должны сообщить нам, какую реализацию YAML вы используете. PyYAML и NimYAML оба правильно сообщают, что ошибка находится в третьей строке;вторая строка в порядке.
Я ожидаю, что значение будет распространяться.
В спецификации нет ничего, что поддерживало бы это ожидание. В спецификации указано: :
Обратите внимание, что узел псевдонима не должен указывать какие-либо свойства или содержимое, так как они уже были указаны при первом появлении узла.
Свойства являются якорями и тегами. Вы не можете поставить привязку к узлу псевдонима, так как он уже имеет привязку.
В вашем примере
---
foo: &foo "Hello World!"
bar: &bar *foo
&bar
совершенно излишен, так как вы уже можете ссылаться на "Hello World"
узел через *foo
и, следовательно, нет смысла вводить &bar
.
Чтобы ответить на ваш вопрос: Вы не можете ссылаться на якорь YAML от другого якоря YAML, потому что якорь YAML не является узлом. YAML представляет граф , то есть узлы и направленные ребра. Якоря и псевдонимы используются для ссылки на один и тот же узел несколько раз (а не для копирования значений, как вы могли бы подумать). Это также означает, что все содержимое файла YAML является содержимым. Не существует такой вещи, как объявления переменных.
Кажется, вы используете не тот инструмент для своего варианта использования. Чтобы настроить файлы YAML с внешними значениями, вы обычно используете шаблонизатор (например, SaltStack и Ansible используют Jinja) и генерируете файл YAML из шаблона. Вы можете указать свои параметры в другом файле YAML. Это четко отделяет параметры конфигурации от содержимого.