Per creare estensioni che forniscano funzionalità aggiuntive di VMware Cloud Director ai tenant, i provider di servizi possono utilizzare l'API di VMware Cloud Director.

Le entità definite rappresentano le risorse esterne che VMware Cloud Director può gestire. Gli sviluppatori di estensioni e plug-in dell'interfaccia utente possono creare entità definite in fase di runtime consentendo alle estensioni e ai plug-in dell'interfaccia utente di archiviare e manipolare le informazioni specifiche dell'estensione in VMware Cloud Director. Se si crea un'estensione che deve archiviare uno stato o riferimenti a risorse esterne, l'estensione può utilizzare entità definite in fase di runtime anziché un database locale. Ad esempio, un'estensione Kubernetes può archiviare informazioni sui cluster Kubernetes che gestisce nelle entità definite in fase di runtime. L'estensione può quindi fornire API di estensione per la gestione di tali cluster utilizzando le informazioni delle entità definite in fase di runtime.

È possibile accedere alle entità definite in fase di runtime solo tramite l'API di VMware Cloud Director. Gli utenti con privilegi di amministratore possono monitorare e osservare il modo in cui funzionano le estensioni verificando lo stato delle entità definite create dalle estensioni. Gli stati delle entità definite possono anche contribuire a risolvere i problemi relativi alle estensioni.

Tipo di entità definita

In fase di runtime, si definisce lo schema delle informazioni che è possibile archiviare utilizzando le entità definite. Lo schema viene definito nel tipo di entità tramite un documento JSON. Quando si crea un tipo di entità definito, si crea un nuovo tipo di VMware Cloud Director personalizzato simile alle macchine virtuali e alle vApp che è possibile gestire tramite le estensioni e i comportamenti. Ad esempio, se si considera il tipo di entità NativeContainerCluster, ogni istanza di questo tipo contiene informazioni su un cluster Kubernetes specifico. Per ottenere le informazioni sul cluster, l'istanza di VMware Cloud Director Container Service Extension comunica con VMware Cloud Director tramite l'API di VMware Cloud Director e fornisce le informazioni necessarie agli utenti.

Dopo aver creato un'istanza di un tipo di entità definito, non è più possibile modificare il tipo, lo schema e i comportamenti. Per aggiungere nuove funzionalità al tipo di entità, è necessario creare una nuova versione del tipo. Quando un'istanza di entità definita si basa su una versione precedente del tipo di entità, è possibile aggiornare l'entità definita in modo che utilizzi una versione successiva del tipo impostando la proprietà del tipo dell'entità sull'ID del nuovo tipo. Quando si crea un'entità definita, nella chiamata API, i contenuti della proprietà dell'entità devono corrispondere allo schema JSON specificato nel tipo di entità. È possibile concedere l'accesso a un tipo di entità solo a utenti e organizzazioni specifici. È possibile impostare restrizioni di accesso diverse per le diverse versioni di un tipo di entità.

Lo schema del tipo di entità può specificare l'accesso ai diversi campi del contenuto. È possibile contrassegnare le proprietà come public, protected o private.

Tabella 1. Controllo dell'accesso alle proprietà del tipo di entità
Stato proprietà Controllo accessi
Public Tutti gli utenti possono visualizzare e modificare il campo.
Protected Tutti gli utenti possono visualizzare il campo. Solo gli utenti con accesso Controllo completo possono creare e modificare il campo. Gli utenti devono disporre del diritto Controllo completo amministratore: TYPE o di entrambi i diritti Controllo completo: TYPE e ACL controllo completo.
Private Solo gli utenti con accesso Controllo completo possono visualizzare, creare e modificare il campo. Gli utenti devono disporre del diritto Controllo completo amministratore: TYPE o di entrambi i diritti Controllo completo: TYPE e ACL controllo completo
Ad esempio, lo schema JSON per la proprietà dell'entità clusterState può essere il seguente.
"clusterState" : {
  "type" : "string",
  "x-vcloud-restricted" : "protected"
}

Interfacce e comportamenti

Le entità definite hanno anche interfacce che possono essere utilizzate per definire i comportamenti. Se si utilizza l'esempio di Kubernetes, ogni tipo di entità cluster dispone di un'implementazione diversa dei comportamenti definiti nell'interfaccia del cluster di container. I comportamenti del tipo di cluster Tanzu Kubernetes comunicano con vSphere per eseguire le azioni necessarie e i comportamenti del tipo di cluster di container nativo comunicano con VMware Cloud Director Container Service Extension.

Tutti gli utenti possono visualizzare le interfacce delle entità definite.

Esistono diversi modi per definire i comportamenti.

  • È possibile creare e pubblicare un workflow di vRealize Operations e creare un comportamento che richiami il workflow.
  • È possibile collegare qualsiasi funzionalità a un comportamento utilizzando un WebHook.
  • Con i comportamenti MQTT, è possibile chiamare una funzionalità in un'estensione. Utilizzando MQTT, è possibile comunicare direttamente con l'estensione e l'estensione può fornire uno stato più dettagliato.
Figura 1. Interfacce delle entità definite in fase di runtime
Il diagramma mostra che ogni tipo di entità ha un'implementazione diversa dei comportamenti definiti nell'interfaccia dell'entità definita in fase di runtime.
Le interfacce, i tipi e i comportamenti delle entità definite in fase di runtime dispongono di ID API specifici.
  • Gli ID API dell'interfaccia hanno il formato urn:vcloud:interface:vendor_name:interface_name:version.
  • Gli ID API del tipo hanno il formato urn:vcloud:type:vendor_name:type_name:version.
  • Gli ID API del comportamento hanno il formato urn:vcloud:behavior-interface:behavior_name:vendor_name:interface_name:version o urn:vcloud:behavior-type:behavior_name:vendor_name:interface_name:version.

Creazione di un'entità definita in fase di runtime

Per creare un'entità definita, iniziare configurando le risorse esterne e aggiungendo le informazioni necessarie all'entità definita. Questo processo potrebbe richiedere alcune iterazioni. Per risolvere l'entità definita, occorre verificare che i contenuti dello schema includano tutte le informazioni necessarie. Se i contenuti non corrispondono allo schema JSON specificato nel tipo, lo stato dell'entità definita diventa Resolution_Error. Se le informazioni vengono compilate correttamente, lo stato dell'entità definita diventa Resolved e l'entità è pronta per l'uso.

Poiché le attività tengono traccia di tutte le operazioni di entità definite in fase di runtime di lunga durata, è possibile utilizzare l'interfaccia utente di VMware Cloud Director per monitorare la creazione di entità definite, il richiamo del comportamento e così via. Quando lo stato di un'entità definita diventa Resolved, l'attività corrispondente nell'interfaccia utente viene visualizzata come Succeeded.

Quando si crea un'entità definita in un'organizzazione tenant, non è possibile condividere l'entità definita con i tenant di un'altra organizzazione. Se si crea un'entità definita nell'organizzazione System, è possibile condividerla con gli utenti o le organizzazioni tenant.

Chiamata API di esempio per creare un'entità definita

L'esempio illustra una chiamata API per creare una nuova entità di tipo pksContainerCluster.

POST https://host/cloudapi/1.0.0/entityTypes/urn:vcloud:type:vendorA:pksContainerCluster:1.0.0
{
   "name": "testEntity",
   "entity": {
      "cluster": {
         "name": "testCluster",
         "nodes": ["node1"]
      }
   }
}

Accesso alle istanze di entità definite

Due meccanismi complementari controllano l'accesso alle entità definite in fase di runtime.

  • Diritti: quando si crea un tipo di entità definita in fase di runtime, si crea un bundle dei diritti per tale tipo. Per fornire l'accesso a operazioni specifiche, è necessario assegnare diritti da questo bundle agli altri ruoli. Ogni bundle dispone di cinque diritti specifici per il tipo: Visualizza: TYPE, Modifica: TYPE, Controllo completo: TYPE, Vista amministratore: TYPE e Controllo completo amministratore: TYPE.

    I diritti Visualizza: TYPE, Modifica: TYPE e Controllo completo: TYPE sono validi solo in combinazione con una voce ACL.

  • Elenco di controllo di accesso (ACL): la tabella ACL contiene voci che definiscono l'accesso degli utenti a entità specifiche nel sistema. Fornisce un livello di controllo aggiuntivo sulle entità. Ad esempio, mentre un diritto Modifica: TYPE specifica che un utente può modificare le entità a cui può accedere, la tabella ACL definisce le entità a cui l'utente può accedere.

    Gli amministratori di sistema con il diritto Visualizza ACL generale possono visualizzare gli ACL assegnati a un'entità definita specifica utilizzando l'API accessControls. Per informazioni sull'API di VMware Cloud Director, vedere https://developer.vmware.com/.

    Gli amministratori di sistema con il diritto Gestisci ACL generale possono creare, modificare e rimuovere ACL specifici utilizzando l'API accessControls.

Tabella 2. Diritti e voci ACL per le operazioni RDE
Operazione entità Opzione Descrizione
Lettura Diritto Vista amministratore: TYPE Gli utenti con questo diritto possono visualizzare tutte le entità definite in fase di runtime di questo tipo all'interno di un'organizzazione.
Diritto Visualizza: TYPE e voce ACL >= Visualizza Gli utenti con questo diritto e un ACL di livello lettura possono visualizzare le entità definite in fase di runtime di questo tipo.
Modifica Diritto Controllo completo amministratore: TYPE Gli utenti con questo diritto possono creare, visualizzare, modificare ed eliminare le entità definite in fase di runtime di questo tipo in tutte le organizzazioni.
Diritto Modifica: TYPE e voce ACL >= Modifica Gli utenti con questo diritto e un ACL di livello modifica possono creare, visualizzare e modificare le entità definite in fase di runtime di questo tipo.
Elimina Diritto Controllo completo amministratore: TYPE Gli utenti con questo diritto possono creare, visualizzare, modificare ed eliminare le entità definite in fase di runtime di questo tipo in tutte le organizzazioni.
Diritto Controllo completo: TYPE e voce ACL = Controllo completo Gli utenti con questo diritto e un ACL di livello controllo completo possono creare, visualizzare, modificare ed eliminare le entità definite in fase di runtime di questo tipo.

È possibile utilizzare l'interfaccia utente o l'API di VMware Cloud Director per pubblicare il bundle dei diritti in tutte le organizzazioni che si desidera gestiscano le entità di questo tipo. Dopo la pubblicazione del bundle dei diritti, è possibile assegnare i diritti dal bundle ai ruoli nell'organizzazione.

È possibile utilizzare l'API di VMware Cloud Director per modificare la tabella di ACL.

Accesso all'interfaccia dell'entità definita e alle operazioni relative al tipo

L'interfaccia dell'entità definita e le operazioni relative al tipo richiedono diritti specifici di cui alcuni provider di servizi potrebbero non disporre. Prima di eseguire un'operazione, verificare di disporre dei diritti necessari.

Tabella 3. Diritti per l'interfaccia dell'entità definita e le operazioni relative al tipo
Operazione Requisito
Visualizzazione ed esecuzione di query relative all'interfaccia Tutti gli utenti dispongono dei diritti necessari.
Creazione dell'interfaccia È necessario disporre del diritto Crea nuova definizione entità personalizzata.
Modifica dell'interfaccia È necessario disporre del diritto Modifica definizione entità personalizzata.
Eliminazione dell'interfaccia È necessario disporre del diritto Elimina definizione entità personalizzata.
Creazione dei tipi È necessario disporre del diritto Crea nuova definizione entità personalizzata.
Visualizzazione dei tipi Il requisito minimo è l'ACL di tipo ReadOnly.
Modifica ed eliminazione dei tipi È necessario disporre del diritto Modifica/Elimina definizione entità personalizzata e di un ACL di tipo FullControl.

Utilizzo delle entità definite in fase di runtime

Per richiamare comportamenti relativi a un'entità definita, lo stato dell'entità deve essere Resolved. Per eliminare un'entità definita, lo stato dell'entità deve essere Resolved o Resolution_Error.

È possibile modificare i tipi di entità e le interfacce solo se non dispongono di istanze. È possibile modificare il tipo di entità a cui si fa riferimento solo modificandone la versione.

Per diagnosticare i problemi relativi all'accesso alle entità definite, è possibile utilizzare le API di query ACL dell'entità e verificare i diritti necessari. Inoltre, il bundle dei diritti di un tipo di entità deve essere pubblicato nei tenant in cui si desidera che venga utilizzato.