Aller au contenu
Edouard Topin's Blog
Construire un service IaaS gouverné avec VCF Automation 9.1 All Apps / Série 06/07

VCF Automation 9.1 All Apps : gérer un CI CMDB comme Custom Resource

Modélise un CI CMDB avec Create, Read, Destroy, resynchronisation et bascule contrôlée depuis l’abonnement Event Broker transitoire.

Edouard Topin
7 min de lecture
Cycle Create, Read et Destroy d’un CI CMDB géré comme Custom Resource dans VCF Automation 9.1.

Un abonnement Event Broker sait réagir à la création d’une VM, mais il ne rend pas le CI CMDB visible comme une composante du service. Si le CI manque, dérive ou refuse sa suppression, le déploiement ne porte aucun état dédié permettant à l’opérateur de comprendre ce qui s’est passé. Une Custom Resource change ce contrat : l’objet externe devient une ressource gérée avec son propre cycle Create, Read et Destroy.

Dans ce sixième volet, Custom.CMDB.CI rejoint le Blueprint WebShop. Nous allons concevoir son schéma, trois workflows Orchestrator idempotents, une action de resynchronisation et surtout une bascule mono-writer depuis l’abonnement CMDB transitoire de l’article Event Broker.

Custom.CMDB.CICreate · Read · DestroyUn seul writer

TL;DR

  • Choisis New schema pour une API REST sans objet d’inventaire Orchestrator ; Read devient alors obligatoire et relit la vérité externe.
  • Utilise une clé stable deploymentIdentity + logicalName, jamais le seul nom d’affichage, et rends Create comme Destroy idempotents.
  • Supprime les anciens déploiements de test, désactive l’abonnement CMDB writer, puis active la Custom Resource. Les deux mécanismes ne doivent jamais écrire simultanément.

Du callback à une ressource de premier rang

Une subscription répond à un événement ; une Custom Resource représente un objet. Ce choix convient lorsque le CI est une partie obligatoire du service livré, que son état doit être lisible depuis le déploiement et que sa suppression doit être orchestrée avec celle de la VM. L’abonnement peut rester utile pour une notification ou un audit, mais ne doit plus créer ni mettre à jour le CI.

Broadcom décrit deux modèles dans la documentation Custom Resources in VCFA Blueprints. Orchestrator inventory type expose un objet SDK connu du plug-in ; Create doit retourner cet objet, pas une primitive. New schema expose des propriétés définies en YAML ou JSON Schema et exige un workflow Read. Pour une CMDB appelée en REST sans plug-in d’inventaire, New schema est le chemin le plus direct.

États Requested, Managed, Degraded, Reconciled et Retired du CI CMDB.
Read observe la dérive ; l’action Day‑2 la répare ; Destroy applique la politique de retrait sans changer d’identité.

Dynamic Types devient intéressant si les opérateurs doivent parcourir les CI dans l’inventaire Orchestrator et les sélectionner comme objets typés. Il n’est pas nécessaire pour exposer chaque API REST. Commence par le contrat minimal et ajoute un type dynamique seulement lorsque la navigation d’inventaire crée une vraie valeur.

Définir un schéma minimal

Le type doit commencer par Custom. et rester unique. Ne recopie pas le modèle complet de la CMDB : le déploiement n’a besoin que des entrées métier et de quelques sorties observables.

type: object
properties:
  deploymentIdentity:
    type: string
  logicalName:
    type: string
  environment:
    type: string
    enum: [dev, test, prod]
  owner:
    type: string
  costCenter:
    type: string
  criticality:
    type: string
    enum: [low, medium, high]
  externalId:
    type: string
    readOnly: true
  lifecycleState:
    type: string
    readOnly: true
  lastSync:
    type: string
    readOnly: true
  configurationHash:
    type: string
    readOnly: true
  ownerMechanism:
    type: string
    enum: [custom-resource]
    readOnly: true
required: [deploymentIdentity, logicalName, environment, owner, costCenter]

Les sorties restent petites et non sensibles. Ni token, ni mot de passe, ni réponse HTTP complète ne doit revenir dans les propriétés ou logs. La connexion CMDB utilise HTTPS/TLS, valide le nom d’hôte et une chaîne de certificats approuvée dans le truststore approprié. Ne désactive jamais la vérification, même pour diagnostiquer un certificat expiré ; corrige la chaîne et surveille sa rotation.

Les bindings automatiques ne sont pas disponibles pour CCI.Supervisor.Resource dans le périmètre documenté. La VM et le CI reçoivent donc des inputs métier communs. Le mécanisme exact qui fournit deploymentIdentity doit être observé et validé dans l’éditeur 9.1 ; ne recycle pas un ancien chemin resourceId issu d’Aria Automation 8.x.

Écrire Create, Read et Destroy comme des convergences

Create doit supporter un retry après timeout. Il calcule une clé stable, recherche le CI, puis crée ou met à jour uniquement les champs dont ce service est propriétaire.

key = stableKey(deploymentIdentity, logicalName)
ci  = cmdb.findByKey(key)

if ci is absent:
  ci = cmdb.create(key, managedValues)
else:
  ci = cmdb.updateManagedFields(ci, managedValues)

return externalId, lifecycleState, lastSync,
       hash(managedValues), ownerMechanism="custom-resource"

Read reçoit externalId, appelle la CMDB avec un timeout court et retourne l’état observé. Un 404 devient MISSING. Une erreur transitoire produit une erreur récupérable ; elle ne fabrique pas un état vert. Read ne recrée jamais le CI, car une lecture qui écrit annulerait une suppression volontaire sans audit. Quelques centaines de ressources pollées suffisent à charger une API : limite les champs, les retries et mesure la latence.

Destroy relit d’abord le CI. S’il est déjà absent ou retiré, il termine avec succès. S’il ne porte pas la clé et le marqueur de gestion attendus, il s’arrête pour revue humaine. Sinon, il applique la politique d’entreprise — souvent Retired plutôt qu’une suppression physique — puis relit l’état final. Le seul nom logique ne suffit jamais à décider une suppression.

Basculer vers un writer unique

Le risque principal n’est pas le YAML, mais la transition. L’abonnement iaas-vm-create-cmdb écrit déjà dans la CMDB. Activer la Custom Resource en parallèle peut produire un doublon ou une alternance de valeurs, même si les deux workflows sont séparément idempotents.

Exécute la bascule dans cet ordre :

  1. bloque les nouvelles demandes de la version précédente du Blueprint ;
  2. supprime ses déploiements de test et prouve que le nettoyage AD/CMDB historique est terminé ;
  3. recherche les CI ownerMechanism=event résiduels et les traite selon la politique ;
  4. désactive iaas-vm-create-cmdb et attends la fin de tous ses runs ;
  5. adapte iaas-vm-delete-external pour conserver AD mais ignorer les CI ownerMechanism=custom-resource ;
  6. active Custom.CMDB.CI uniquement dans prj-webshop-dev ;
  7. publie une nouvelle version du Blueprint et déploie une seule instance canari ;
  8. prouve qu’un seul CI existe avant d’élargir le partage.

Cette frontière de propriété doit être visible dans le code, la CMDB et le runbook. Une subscription d’audit peut rester active, à condition qu’elle ne réalise aucune écriture de cycle de vie.

Ajouter la ressource au Blueprint

Le fragment volontairement court partage l’identité logique et les métadonnées métier avec la VM. Sans dépendance CCI supportée, il ne suppose aucun ordre entre les deux créations.

variables:
  deploymentIdentity: ${env.deploymentName}-${env.shortDeploymentId}
  vmResourceName: webshop-${input.vmRole}-dev-${env.shortDeploymentId}

resources:
  cmdbCi:
    type: Custom.CMDB.CI
    properties:
      deploymentIdentity: ${variable.deploymentIdentity}
      logicalName: ${variable.vmResourceName}
      environment: dev
      owner: team-platform
      costCenter: cc-042
      criticality: low

La syntaxe finale doit être validée contre le schéma généré par l’instance. Le premier déploiement doit exposer externalId, lifecycleState, lastSync et configurationHash, puis une lecture directe de la CMDB doit retrouver exactement le même objet.

L’action Resynchroniser CMDB, conçue dans l’article Day‑2, réutilise le cœur de Create mais demande un motif, contrôle le projet et conserve externalId. Une panne de l’endpoint après création doit laisser la VM fonctionner et faire échouer Read de manière explicite. Après restauration, la resynchronisation retrouve le même CI et le prochain Read redevient cohérent. Une panne avant Create est différente : si le CI est obligatoire dans le Blueprint, ne promets pas un provisioning non bloquant. Observe si le déploiement échoue, reste incomplet ou part en rollback, puis inventorie les ressources partielles.

Décommissionner sans orphelin

Teste la suppression avec le Project Administrator. Observe séparément Destroy de Custom.CMDB.CI et l’abonnement DeleteSuccess responsable d’AD ; aucun ordre entre ces nettoyages ne doit être supposé. Interroge ensuite VCF Automation, VM Service, AD, IPAM/DNS et la CMDB. Le déploiement disparu de l’interface ne prouve pas que tous les systèmes externes sont propres.

Le rollback retire d’abord le partage de la nouvelle version, puis désactive les hooks et l’action sans supprimer les workflows. Inventorie toutes les instances par externalId, supprime les déploiements canaris un par un pour exercer Destroy, traite manuellement les échecs avec traçabilité et désactive la définition seulement lorsqu’aucune instance active n’en dépend. Le secret CMDB est révoqué en dernier.

Sources officielles

Le contrat produit vient des pages Broadcom sur les Custom Resources dans les Blueprints, la préparation des Blueprints aux opérations Day‑2 et les subscriptions Event Broker All Apps. La clé stable, le marqueur ownerMechanism et l’ordre de bascule restent des choix d’architecture à valider avec la CMDB et le build cible.

Identité stable

Create, Read et Destroy corrèlent le même externalId ; un nom d’affichage ne suffit pas.

Observation honnête

Read consulte la CMDB, expose la dérive et ne répare rien sans action auditée.

Bascule mono-writer

L’abonnement writer est arrêté avant le premier déploiement utilisant la Custom Resource.

La plateforme possède maintenant une VM et un CI avec des cycles de vie corrélés. Le dernier article transforme ces mécanismes en recette rejouable : chemin nominal, rôles Day‑2, panne CMDB, rollback et preuve de suppression distribuée.

Reçois le prochain par email

Les nouveaux articles et séries, envoyés à leur publication. Aucun autre courrier.

Désabonnement en un clic, à tout moment.

Retour au blog
Partager

Articles similaires

  1. 10 min de lecture

    VCF Automation 9.1 All Apps : intégrer AD et une CMDB avec Event Broker

    Conçois trois abonnements Event Broker idempotents pour synchroniser comptes ordinateur AD et CI CMDB sans bloquer le provisioning.

  2. 7 min de lecture

    VCF Automation 9.1 All Apps : gouverner les actions Day‑2

    Définis les actions Day‑2 par rôle, évite la dérive du Blueprint et ajoute une action Orchestrator de resynchronisation CMDB.

  3. 7 min de lecture

    VCF Automation 9.1 All Apps : préparer le socle du lab WebShop

    Prépare l’organisation, le projet, le namespace, le VPC, les classes, l’image et le stockage nécessaires au premier Blueprint IaaS All Apps.

Suivre le blog

Nouveaux articles, réflexions et mises à jour.