Multiple blueprints can be composed into one master blueprint which specifies the deployment model for multiple included blueprints, by using
includeAfter parameters. This allows you to scale your deployment and release models with any number of blueprints. During the implementation of a composed blueprint, the CLI will work through the blueprints in the sequence defined, merging the questions into a single list and applying any custom values that were defined in the composed blueprint. For more information on the YAML fields that enable composable blueprints, see [IncludeBefore/IncludeAfter fields for composability]((xl-platform//concept/blueprint-yaml-format/#includebeforeincludeafter-fields-for-composability).
Here is a testable blueprint which uses composability to include blueprints and set override files and parameter values:
apiVersion: xl/v2 kind: Blueprint metadata: name: Composed blueprint for K8S provisioning version: 2.0 spec: parameters: - name: Provider type: Select prompt: Which K8S cluster provider do you want to use options: - label: Amazon value: EKS - label: Google Cloud value: GKE - label: Azure value: AKS - existing cluster - name: KubeApp type: Confirm prompt: Do you want to deploy an application to the Kubernetes environment? # includeBefore: # - blueprint: kubernetes/environment # fileOverrides: # - path: xebialabs/kubernetes-environment.yaml.tmpl # renameTo: xebialabs/k8s-environment.yaml includeAfter: - blueprint: kubernetes/environment includeIf: !expr "Provider == 'existing cluster'" fileOverrides: - path: xebialabs/kubernetes-environment.yaml.tmpl renameTo: xebialabs/k8s-environment.yaml - blueprint: aws/basic-eks-cluster includeIf: !expr "Provider == 'EKS'" - blueprint: azure/basic-aks-cluster includeIf: !expr "Provider == 'AKS'" - blueprint: gcp/basic-gke-cluster includeIf: !expr "Provider == 'GKE'" - blueprint: kubernetes/application includeIf: !expr "KubeApp" parameterOverrides: - name: KubernetesApplicationName value: !expr "Provider == 'existing cluster' ? KubernetesName + '-app' : Provider + '-app'" fileOverrides: - path: xebialabs/kubernetes-application.yaml.tmpl renameTo: xebialabs/k8s-application.yaml
If you run this blueprint in your environment you will be able to see the order of questions defined by the blueprint parameters, and the
includeAfter blueprints with their overridden values.