Vamos a crear un objeto Template desde su definición en un fichero YAML. En este ejemplo vamos a hacer un Template muy sencillo, que nos va a permitir crear un recurso Deployment usando la imagen bitnami/mysql y como veremos posteriormente hemos creado varios parámetros para permitir su configuración. Partimos del fichero mysql-plantilla.yaml con el siguiente contenido:

apiVersion: template.openshift.io/v1
kind: Template
labels:
  app: deployment-mysql
metadata:
  name: mysql-plantilla
  annotations:
    description: "Plantilla para desplegar un deployment de mysql"
    iconClass: "icon-mysql-database"
    tags: "database,mysql"
objects:
- apiVersion: apps/v1
  kind: Deployment
  metadata:
    name: ${NOMBRE_APP}
  spec:
    replicas: $
    selector:
      matchLabels:
        app: mysql
    template:
      metadata:
        labels:
          app: mysql
      spec:
        containers:
          - name: ${NOMBRE_CONTENEDOR}
            image: bitnami/mysql  
            env:
            - name: MYSQL_ROOT_PASSWORD
              value: ${ROOT_PASSWORD}
            - name: MYSQL_USER
              value: ${USER}
            - name: MYSQL_PASSWORD
              value: ${PASSWORD}
            - name: MYSQL_DATABASE
              value: ${DATABASE}
            ports:
            - containerPort: 6379
              protocol: TCP
parameters:
- name: REPLICAS
  description: Número de pods creados
  value: "1"
- name: NOMBRE_APP
  description: Nombre del pod que se va a crear
  from: 'mysql[0-9]{2}'
  generate: expression
- name: NOMBRE_CONTENEDOR
  description: Nombre del contenedor que se va a crear
  value: contenedor-mysql
- name: ROOT_PASSWORD
  description: Contraseña del root de mysql
  from: '[A-Z0-9]{8}'
  generate: expression
- name: USER
  description: Nombre del usuario mysql que se va a crear
  value: usuario
- name: PASSWORD
  description: Contraseña del usuario de mysql
  from: '[A-Z0-9]{8}'
  generate: expression
- name: DATABASE
  description: Nombre de la base de datos que se va a crear
  value: nueva_bd

Veamos cada uno de los apartados que tiene la configuración:

  • labels: Indicamos las etiquetas que tendrán todos los objetos que vamos a crear.
  • metadata: Tiene las secciones que normalmente tiene esta sección en la definición de cualquier objeto. En este caso nos vamos a fijar en las anotaciones (annotations):
    • description: Definimos una descripción de lo que hace la plantilla.
    • iconClass: Indicamos el icono que se mostrará en el catálogo de aplicaciones. Más iconos.
    • tags: Etiquetas asignadas a la plantilla, que facilitan su búsqueda en el catálogo.
    • Hay más posibles anotaciones que puedes estudiar en la documentación.
  • objects: Definimos los objetos que se van a crear al instanciar la plantilla.
  • parameters: Definimos los parámetros que hemos indicado en la definición de los objetos. A la hora de instanciar la plantilla estos parámetros se pueden sobreescribir. Algunos de los atributos que podemos poner de cada parámetro:
    • name: Nombre del parámetro.
    • description: Descripción del parámetro.
    • value: Valor por defecto. Si no indico el parámetro al crear los objetos del Template tomará el valor por defecto.
    • from: Expresión regular que se usa para generar un valor aleatorio, si no indicamos el valor del parámetro. Va acompañado del atributo generate: expression.

Como vemos los parámetros se pueden indicar de dos formas:

  • ${NOMBRE_PARAMETRO}: El valor se proporciona como una cadena de caracteres. Normalmente usamos esta forma.
  • $: El valor se puede proporcionar como un valor que no sea una cadena de caracteres. Lo hemos usado para indicar el número de replicas, que en la definición tiene que ser un número entero (no se entrecomilla).

Por último para crear el objeto Template a partir de su definición, ejecutamos:

oc apply -f mysql-plantilla.yaml

Y podemos ver que realmente la hemos creado, desde la línea de comandos:

oc get templates
NAME              DESCRIPTION                                       PARAMETERS        OBJECTS
mysql-plantilla   Plantilla para desplegar un deployment de mysql   7 (3 generated)   1

Y desde el catálogo de aplicaciones:

mysql

Updated: