Product Documentation

Nested components

May 24, 2018

Nesting a component within another component allows the nested component to create its configuration objects by referring to configuration objects or the context created by the parent component. The nested component can create one or more objects for each object created in the parent component. Nesting a component within another component does not indicate any relationship between the configuration objects created. Nesting is a way to facilitate the task of components to construct configuration objects within an existing context of the parent components.


Example:

components:

 -

   name: my-lbvserver-comp

   type: ns::lbvserver

   properties:

        name: $parameters.name + "-lb"

        servicetype: HTTP

        ipv46: $parameters.ip

        port: 80

        lbmethod: $parameters.lb-alg

        components:

                 -

                   name: my-svcg-comp

                   type: ns::servicegroup

                   properties:

                         name: $parameters.name + "-svcgrp"

                         servicetype: HTTP

                  components:

                         -

                            name: lbvserver-svg-binding-comp

                            type: ns::lbvserver_servicegroup_binding

                            properties:

                                  name: $parent.parent.properties.name

                                  servicegroupname: $parent.properties.name

                         -

                            name: members-svcg-comp

                            type: ns::servicegroup_servicegroupmember_binding

                            repeat:

                                   repeat-list: $parameters.svc-servers

                                   repeat-item: srv

                            properties:

                                    ip: $srv

                                    port: str($parameters.svc-port)

                                    servicegroupname: $parent.properties.name


In this example, multi-level nesting is used. The component my-lbvserver-comp has a child component called my-svcg-comp. And, the my-svcg-comp component has two child components within it. The my-svcg-comp component is used to create a service group configuration object on the NetScaler instance by providing values to the attributes of the built-in NITRO resource type "servicegroup." The first child component of the my-svcg component, lbvserver-svg-binding-comp, is used to bind the service group created by its parent component to the load balancing virtual server (lbvserver) created by the parent's parent component. The $parent notation, also called the parent reference, is used to refer to entities in the parent components. The second child component, members-svcg-comp, is used to bind the list of services to the service group created by the parent component. The binding is achieved by using the repeat construct of StyleBook to iterate over the list of services specified for the parameter svc-servers. For information on repeat constructs, see Repeat Construct.

You can also create the same configuration objects without using nesting of components. For more information and examples, see StyleBook to Create a Basic Load Balancing Configuration.