Configuration déclarative

Import au démarrage

Sur cette page

L’image TOSIAM contient la commande tosiam-config. Quand on lui donne un répertoire de configuration, son point d’entrée l’applique à chaque démarrage, une fois le serveur configuré (ou monté de version) : c’est un tosiam-config apply --all-realms contre le serveur lui-même. Comme le plan est recalculé à chaque fois, un démarrage sans changement de la configuration n’écrit rien.

Le déroulement :

  1. le serveur démarre, se configure ou monte de version comme d’habitude ;
  2. seul le serveur d’ordinal 0 du StatefulSet (tosiam-0) applique la configuration ; les autres la reçoivent par le config store ;
  3. pendant l’import, le serveur reste non prêt : il ne reçoit pas de trafic avant d’avoir la configuration voulue ;
  4. sur un échec, le conteneur s’arrête (et Kubernetes le relance), ou bien démarre sans la configuration, au choix.

L’import demande TOSIAM_AUTO_CONFIGURE=true : sans lui, il est ignoré, et le journal le dit.

Variables d’environnement de l’image#

Faites défiler le tableau
VariableDéfautRôle
TOSIAM_CONFIG_IMPORT_DIR—Répertoire de la configuration (tosiam.yaml, realms/…)
TOSIAM_CONFIG_IMPORT_ARCHIVE—À la place du répertoire : archive .tar.gz de la configuration
TOSIAM_CONFIG_IMPORT_PRUNEnonemanaged : supprime les objets du périmètre géré absents des fichiers
TOSIAM_CONFIG_IMPORT_ON_ERRORfailfail : le conteneur s’arrête sur un échec ; continue : le serveur démarre sans la configuration, et l’échec est journalisé
TOSIAM_CONFIG_IMPORT_USERNAMEamadminCompte de l’import

Le mot de passe du compte est lu dans le fichier /run/secrets/tosiam/config-import-password, à défaut dans amadmin-password. Le répertoire et l’archive s’excluent : donnez l’un ou l’autre. Le répertoire ou l’archive doit contenir tosiam.yaml.

Secrets#

Les références ${file:…} des fichiers sont lues dans le conteneur. Montez les secrets en fichiers, par exemple un Secret Kubernetes, et faites-les pointer dessus :

yaml
    userpassword: ${file:/run/secrets/tosiam-config/app1-secret}

Les références ${env:…} lisent les variables d’environnement du conteneur.

Avec le chart Helm#

Le chart tosiam règle ces variables par ses valeurs configImport (préfixées par am. dans le chart tosiam-stack).

  1. Mettez la configuration dans une archive, puis dans un ConfigMap. Un ConfigMap monté est plat : il ne peut pas contenir l’arborescence realms/… elle-même. Sa taille est limitée à 1 Mo.

    bash
    tar czf config.tar.gz -C tosiam-config .
    kubectl create configmap tosiam-config --from-file=config.tar.gz
  2. Mettez les secrets référencés par ${file:/run/secrets/tosiam-config/<clé>} dans un Secret :

    bash
    kubectl create secret generic tosiam-config-secrets --from-literal=app1-secret='…'
  3. Activez l’import :

    bash
    helm upgrade sso oci://ghcr.io/theopensourceitrust/charts/tosiam-stack --reuse-values \
      --set am.configImport.enabled=true \
      --set am.configImport.archive.configMap=tosiam-config \
      --set am.configImport.secret=tosiam-config-secrets \
      --set am.configImport.revision="$(git rev-parse --short HEAD)"

Un changement du ConfigMap ne relance pas les pods. Pour publier une nouvelle configuration, mettez à jour le ConfigMap puis changez configImport.revision, par exemple avec l’empreinte git de la configuration : le StatefulSet redémarre, et le pod 0 applique la nouvelle configuration.

Faites défiler le tableau
ValeurDéfautRôle
configImport.enabledfalseActive l’import au démarrage
configImport.archive.configMap / .key— / config.tar.gzConfigMap qui contient l’archive .tar.gz de la configuration
configImport.volume—À la place de l’archive : volume qui contient le répertoire de la configuration (PVC, CSI…), au format d’un volume de pod sans son nom
configImport.secret—Secret monté sous /run/secrets/tosiam-config, cible des références ${file:…}
configImport.prunenonenone ou managed
configImport.onErrorfailfail ou continue
configImport.username / .passwordSecretamadmin / —Compte de l’import ; sans passwordSecret, le mot de passe d’amadmin
configImport.revision—Changer cette valeur relance le StatefulSet

Lancer la commande dans un pod#

La commande sert aussi à la main, par exemple pour calculer un plan depuis un pod :

bash
kubectl exec tosiam-0 -- sh -c 'tosiam-config plan --server http://$(hostname -f):8080/tosiam \
    --dir /tmp/config --all-realms --password-file /run/secrets/tosiam/amadmin-password'

L’URL doit être le nom complet du pod : le serveur refuse 127.0.0.1 et localhost.

Mis à jour le