Skip to content

Template Writer's Guide

Les templates Muppy sont similaires aux templates Helm.

Elles utilisent le moteur de template Jinja ( Documentation de Jinja ).

Les values des Packages Muppy sont aussi des templates. Elle sont traitées (rendered) avant les templates de configuration. Ceci permet à Muppy de mettre à jour les values à partir du Dashboard.

Les variables suivantes sont disponibles dans les values et les templates

{
    'namespace': self.namespace_id.name or '',
    'k8s_package_release_obj': self,
    'profile_obj': self.k8s_package_profile_id,
    'package_obj': self.k8s_package_id,
    'obj': Le package_release courant,
    'k8s_cluster_obj': self.k8s_cluster_id,
    'k8s_template_instance_obj': k8s_template_instance_obj,
    'vault_model': self.env['mpy.vault'],

    'values': ... uniquement dans les templates de fichier de configs
}

Vous pouvez inspectez le contenu du Package Generic Web App en parallèle à la lecture de cette documentation.

A noter:

Les variables sont le suffixe est _obj correspondent à des objets Muppy. Il est possible de parcourir le graphe d'objet en utilisant le . comme séparateur de champ.

Pour déterminer les noms des champs, vous pouvez utiliser le GUI Muppy en mode Dévelopeur.

Exemple:

Supposons que vous ayez besoin de connaitre le provider du cluster kubernetes sur lequel le package est installé.

Le cluster est disponible dans la template via k8s_cluster_obj.

Pour connaitre le nom du champ contenant le provider:

  • activer le Developer Mode
  • Ouvrez le formulaire d'un object K8s Cluster
  • Laissez votre souris immobile sur le libellé du champ Provider jusqu'à ce qu'une popup noire apparaisse comme le montre l'image suivante.

Noter le nom du champ (le field) dans la popup. Pour accéder au provider d'un cluster dans une template, vous pouvez utiliser {{ k8s_cluster_obj.provider }}

Popup de définition de champs.

Tip

Vous pouvez utilisez le . autant de fois que vous le souhaitez pour naviger dans un graphe d'objet.

Par exemple: {{ obj.k8s_cluster_id.provider }} permet de récupérer le Provider d'un cluster en partant d'une Package Release.

Helpers

Les helpers / filters suivants sont disponibles pour faciliter l'écriture des templates:

  • to_yaml (eg. {{ values.common_env_vars | to_yaml(offset=8) }} )
  • obj.get_dashboard(code) permet d'accéder à un dashboard
  • vault_model.get(vault_code)permet d'accéder à un secret stocké dans le Vault
  • Jinja builtin helpers (eg. indent)

Dashboard helpers

Resources

Les valeurs des resources du Dashboard sont disponibles

# get_resources_json() helpers allow to inject a complete resource block in a config template.
# # Example:
spec:
  replicas: 1
  ...
  template:
    metadata:
      ...
    spec:
      containers:
      - args:
        - --workers=4
        - --max-cron-threads=0
        env:
        - name: PGDATABASE
          value: cmorisse_xayoni_05f2a290
        envFrom:
        - secretRef:
            name: xayoni-05f2a290-envfile-secret
        image: registry.gitlab.com/cmorisse/appserver-xy/appserver-xy16c:0.11.0-alpha
        name: appserver-xayoni
        resources:
          {{ obj.get_dashboard('redis').get_resources_json() | to_yaml(offset=10) }}    

# Of courses resources values can be used individually. 
# This is useful to add dashboard support to a helm package using values params
# Example:
    resources:
      requests:
        memory: {{ obj.get_dashboard('redis').resources_requests_memory }}
        cpu: {{ obj.get_dashboard('redis').resources_requests_cpu }}
      limits:
        memory: {{ obj.get_dashboard('redis').resources_limits_memory }}
        cpu: {{ obj.get_dashboard('redis').resources_limits_cpu }}

Annotations

  • muppy.io/scope: package | namespace (namespaceest équivalent "helm.sh/resource-policy": keep)