Então, eu sei que posso fazer algo assim:
sitelist: &sites
- www.foo.com
- www.bar.com
anotherlist: *sites
E têm sitelist
e anotherlist
ambos contêm www.foo.com
e www.bar.com
. No entanto, o que eu realmente quero é que anotherlist
a também contêm www.baz.com
, sem ter que repetir www.foo.com
e www.baz.com
.
Isso me dá um erro de sintaxe no analisador YAML:
sitelist: &sites
- www.foo.com
- www.bar.com
anotherlist: *sites
- www.baz.com
Apenas usando âncoras e aliases, não parece possível fazer o que eu quero sem adicionar outro nível de subestrutura, como:
sitelist: &sites
- www.foo.com
- www.bar.com
anotherlist:
- *sites
- www.baz.com
O que significa que o consumidor deste arquivo YAML deve estar ciente disso.
Existe uma maneira pura do YAML de fazer algo assim? Ou terei que usar algum processamento pós-YAML, como a implementação da substituição de variável ou levantamento automático de certos tipos de subestrutura? Já estou fazendo esse tipo de pós-processamento para lidar com alguns outros casos de uso, então não sou totalmente avesso a isso. Mas meus arquivos YAML serão escritos por humanos, não gerados por máquina, então eu gostaria de minimizar o número de regras que precisam ser memorizadas por meus usuários em cima da sintaxe YAML padrão.
Eu também gostaria de poder fazer o mesmo com mapas:
namedsites: &sites
Foo: www.foo.com
Bar: www.bar.com
moresites: *sites
Baz: www.baz.com
Fiz uma pesquisa nas especificações YAML e não consegui encontrar nada, então suspeito que a resposta seja apenas "não, você não pode fazer isso". Mas se alguém tiver alguma ideia, isso seria ótimo.
EDIT: Como não houve respostas, estou presumindo que ninguém descobriu nada que eu não tenha na especificação YAML e que isso não pode ser feito na camada YAML. Portanto, estou abrindo a questão para a ideia de pós-processamento do YAML para ajudar com isso, caso alguém encontre essa questão no futuro.