Control Plane Templates

Control Plane Templates

Templates allow a cluster administrator to create reusable configurations that users may extend with their own customizations. Templates may also inerhit from other templates. As an example, if there are two teams with different control planes, say an accounting team and a website team, with a development and production configuration, then there could be a template called development and one called production and individual templates for the accounting and development teams that extend these two configurations with their own customizations. Individual control planes in the teams can customize these for the actual deployment.

graph LR; Base --> Default Default --> Production Default --> Development Development --> Accounting_Development Development --> Website_Development Production --> Accounting_Production Production --> Website_Production Accounting_Development --> A[User SMCP]

Templates follow the same configuration as a ServiceMeshControlPlane so if you get a ServiceMeshControlPlane working, you can then include it as a template. To add custom templates, create a ConfigMap called smcp-templates in the openshift-operators project. This ConfigMap will contain a collection of templates to use. The ConfigMap must then be mounted in the operator at /usr/local/share/istio-operator/templates/.

Creating the ConfigMap

To create the ConfigMap, execute the following as a cluster administrator, substituting <templates-directory> for a directory containing a collection of ServiceMeshControlPlane files to use as templates. The name of the template will match the name of the file. Templates will inherit from other templates until a template is reached which has an empty template field. Using a template name of default will override the default template for all control planes when no template is specified in a control plane.

For example, create a ServiceMeshControlPlane and instead of using oc apply to create it in the cluster, save it in a directory called <templates-directory>. Follow the instructions below to create and configure a ConfigMap containing this new template. Additional templates can be added to the ConfigMap as desired.

$ oc create configmap --from-file=<templates-directory> smcp-templates -n openshift-operators

Next, find the Maistra operator ClusterServiceVersion name.

$ oc get clusterserviceversion -n openshift-operators | grep 'Service Mesh'
maistra.v1.0.0            Red Hat OpenShift Service Mesh   1.0.0                Succeeded

Edit the ClusterServiceVersion to instruct the operator to use the smcp-templates ConfigMap.

$ oc edit clusterserviceversion -n openshift-operators maistra.v1.0.0

In the editor, add a volume mount and volume to the deployments as shown below.

 deployments:
    - name: istio-operator
      spec:
        template:
          spec:
            containers:
              volumeMounts:
                - name: discovery-cache
                  mountPath: /home/istio-operator/.kube/cache/discovery
                - name: smcp-templates
                  mountPath: /usr/local/share/istio-operator/templates/
            volumes:
              - name: discovery-cache
                emptyDir:
                  medium: Memory
              - name: smcp-templates
                configMap:
                  name: smcp-templates
  ...

You can now use templates in your ServiceMeshControlPlane by adding a template parameter to the ServiceMeshControlPlane. In the example below, we are including the default template, but you can use any template from the smcp-templates ConfigMap as well.

apiVersion: maistra.io/v1
kind: ServiceMeshControlPlane
metadata:
  name: minimal-install
spec:
  template: default