Entonces, sé que puedo hacer algo como esto:
sitelist: &sites
- www.foo.com
- www.bar.com
anotherlist: *sites
Y tienen sitelist
y anotherlist
ambos contienen www.foo.com
y www.bar.com
. Sin embargo, lo que realmente quiero es anotherlist
que contenga tambiénwww.baz.com
, sin tener que repetir www.foo.com
y www.baz.com
.
Hacer esto me da un error de sintaxis en el analizador YAML:
sitelist: &sites
- www.foo.com
- www.bar.com
anotherlist: *sites
- www.baz.com
Simplemente usando anclas y alias, no parece posible hacer lo que quiero sin agregar otro nivel de subestructura, como:
sitelist: &sites
- www.foo.com
- www.bar.com
anotherlist:
- *sites
- www.baz.com
Lo que significa que el consumidor de este archivo YAML debe conocerlo.
¿Existe una forma pura YAML de hacer algo como esto? ¿O tendré que usar algún procesamiento posterior a YAML, como implementar la sustitución de variables o la elevación automática de ciertos tipos de subestructura? Ya estoy haciendo ese tipo de posprocesamiento para manejar un par de otros casos de uso, por lo que no soy totalmente contrario a él. Pero mis archivos YAML serán escritos por humanos, no generados por máquinas, por lo que me gustaría minimizar la cantidad de reglas que mis usuarios deben memorizar además de la sintaxis YAML estándar.
También me gustaría poder hacer lo análogo con los mapas:
namedsites: &sites
Foo: www.foo.com
Bar: www.bar.com
moresites: *sites
Baz: www.baz.com
Hice una búsqueda a través de la especificación YAML y no pude encontrar nada, por lo que sospecho que la respuesta es simplemente "no, no puedes hacer esto". Pero si alguien tiene alguna idea, sería genial.
EDITAR: Dado que no ha habido respuestas, supongo que nadie ha detectado nada que yo no haya visto en la especificación YAML y que esto no se puede hacer en la capa YAML. Así que estoy abriendo la pregunta a la idea de posprocesar el YAML para ayudar con esto, en caso de que alguien encuentre esta pregunta en el futuro.