Construcción properties-default-sources
La construcción properties-default-sources es análoga a la construcción parameters-default-sources. Mientras que la construcción parameters-default-sources permite la reutilización de parámetros existentes (de otros StyleBooks) en un StyleBook, la construcción properties-default-sources permite al usuario especificar propiedades de un componente basándose en fuentes existentes.
Las propiedades de un componente pueden distribuirse en varias secciones del StyleBook. Por ejemplo, las propiedades pueden provenir de parámetros de objeto, sustituciones que devuelven un objeto, propiedades de otros componentes o salidas de otros componentes. En tales casos, es necesario redefinir las propiedades que aparecen en otras secciones del StyleBook en la definición del componente. Claramente, esto es redundante y puede dar lugar a errores. Para solucionar este problema, se puede utilizar la construcción properties-default-sources. La construcción properties-default-sources es una lista donde cada elemento identifica una fuente para algunas propiedades del componente.
Por ejemplo, considere un componente que crea una configuración de lbvserver. Este componente debe definir las propiedades del lbvserver de la siguiente manera.
parameters:
-
name: lb
type: ns::lbvserver
components:
-
name: lb-comp
type: ns::lbvserver
properties:
name: $parameters.lb.name
ipv46: $parameters.lb.ipv46
port: $parameters.lb.port
servicetype: $parameters.lb.servicetype
lbmethod: $parameters.lb.lbmethod
En el ejemplo anterior, observe que los valores de todas las propiedades definidas en la sección de componentes se toman del objeto $parameters.lb. Aunque se toman de una única fuente, las propiedades se definen de nuevo en el StyleBook. Además, si se añade un nuevo subparámetro al objeto $parameters.lb que sea relevante para la configuración del lbvserver, es necesario actualizar el componente lb-comp para añadir la nueva propiedad que corresponda al nuevo subparámetro.
Para evitar redefinir propiedades y para obtener todas las propiedades relevantes de un componente sin listarlas explícitamente en la sección de propiedades, se puede utilizar la construcción properties-default-sources. El ejemplo anterior se puede escribir de la siguiente manera.
parameters:
-
name: lb
type: ns::lbvserver
components:
-
name: lb-comp
type: ns::lbvserver
properties-default-sources:
- $parameters.lb
En el ejemplo anterior, el uso de la construcción properties-default-sources conduce a una reducción en el tamaño de la definición del componente, y esto permite definir un componente de forma concisa. Además, cada vez que cambia la fuente de las propiedades del componente, los cambios se reflejan automáticamente. Por ejemplo, cuando se añade una nueva propiedad, digamos "persistencetype", en el objeto $parameters.lb, esta propiedad se añade a la configuración de lb-comp por defecto, ya que persistencetype es una propiedad de lbvserver. Así, la construcción properties-default-sources proporciona una interfaz dinámica para definir los componentes sin preocuparse por los cambios que se produzcan en las fuentes de las propiedades del componente.
Cálculo de las propiedades del componente
Esta sección describe cómo se obtienen las propiedades si se utiliza la construcción properties-default-sources en un componente. Primero, el compilador de StyleBooks identifica la lista de propiedades para un componente basándose en su tipo (en el ejemplo anterior, lbvserver). A continuación, el compilador obtiene estas propiedades de las múltiples fuentes en el orden en que están definidas (en la sección properties-default-sources del componente). Si una propiedad existe en varias fuentes, la propiedad que aparece en la última fuente tiene prioridad sobre las demás. Finalmente, una propiedad obtenida mediante la construcción properties-default-sources puede ser anulada en la sección de propiedades del componente. Es importante tener en cuenta que la definición de una sección de componente debe tener al menos una sección properties-default-sources o una sección de propiedades. Puede tener ambas.