Utilizzare gli schemi

Uno schema descrive le specifiche di un modello Deployment Manager. Se esiste uno schema per un modello, Deployment Manager lo utilizza per applicare le modalità di interazione degli utenti con il modello corrispondente. Gli schemi definiscono un insieme di regole che un file di configurazione deve soddisfare se vuole utilizzare un determinato modello.

Oltre a definire le regole di un modello, gli schemi consentono anche agli utenti di interagire con i modelli che scrivi, senza dover esaminare e conoscere ogni livello dei modelli. Gli utenti possono semplicemente esaminare i requisiti definiti nello schema per scoprire quali proprietà sono impostabili o richieste per il rispettivo modello.

Ad esempio, potresti creare uno schema in cui il modello corrispondente deve sempre definire un insieme specifico di proprietà obbligatorie e ognuna di queste proprietà ha le proprie specifiche. Una proprietà deve essere una stringa, un'altra deve essere un numero intero inferiore a 100 e così via. Se un utente vuole applicare il tuo modello nella sua configurazione, esamina lo schema e imposta le proprietà corrette nella sua configurazione.

Prima di iniziare

Schema di esempio

Lo schema di esempio è scritto per il motore di modelli Jinja. Se utilizzi un motore di modelli diverso, le estensioni dei file sono diverse e la sintassi del modello può essere diversa.

Si tratta di un semplice file di schema denominato vm-instance-with-network.jinja.schema:

info:
  title: VM Template
  author: Jane
  description: Creates a new network and instance
  version: 1.0

imports:
- path: vm-instance.jinja # Must be a relative path

required:
- IPv4Range

properties:
  IPv4Range:
    type: string
    description: Range of the network

  description:
    type: string
    default: "My super great network"
    description: Description of network

Lo schema si applica a questo modello, vm-instance-with-network.jinja:

resources:
- name: vm-1
  type: vm-instance.jinja

- name: a-new-network
  type: compute.v1.network
  properties:
    IPv4Range: {{ properties['IPv4Range'] }}
    description: {{ properties['description'] }}

Se un utente volesse utilizzare questo modello nella propria configurazione, può esaminare lo schema per scoprire che esiste una proprietà obbligatoria che deve definire (IPv4Range) e una proprietà facoltativa (description) che può omettere o includere. Un utente potrebbe quindi creare un file di configurazione come questo, assicurandosi di fornire una proprietà denominata IPv4Range:

imports:
- path: vm-instance-with-network.jinja

resources:
- name: vm-1
  type: vm-instance-with-network.jinja
  properties:
    IPv4Range: 10.0.0.1/16

Struttura di uno schema

Di seguito è riportato un esempio di documento dello schema. Deployment Manager consiglia di scrivere gli schemi in formato YAML, ma puoi anche scriverli in formato JSON e verranno accettati da Deployment Manager.

Deployment Manager accetta schemi scritti in base alla bozza 4 delle specifiche dello schema JSON.

<mongodb.py.schema>
info:
  title: MongoDB Template
  author: Jane
  description: Creates a MongoDB cluster
  version: 1.0

imports:
  - path: helper.py
    name: mongodb_helper.py

required:
  - name

properties:
  name:
    type: string
    description: Name of your Mongo Cluster

  size:
    type: integer
    default: 2
    description: Number of Mongo Slaves

  zone:
    type: string
    default: us-central1-a
    description: Zone to run
    metadata: gce-zone

Un file di schema valido è un file di schema JSON con l'aggiunta di due campi di primo livello, info e imports. Di seguito è riportata una breve descrizione di ogni campo e dei relativi contenuti validi.

informazioni

La proprietà info contiene metainformazioni sullo schema. Sono incluse informazioni quali titolo, numero di versione, descrizione e così via.

Come minimo, fornisci un titolo e una descrizione in questa proprietà.

importazioni

Il campo imports contiene un elenco di file corrispondenti necessari per i modelli che utilizzano questo schema. Quando carichi un modello con uno schema che contiene un elenco di importazioni, Deployment Manager verifica che tutti i file nella proprietà imports siano stati caricati insieme al modello.

Quando specifichi un file in questo campo di importazione, puoi ometterlo dal campo imports nella configurazione. Nell'esempio precedente, il campo imports importa un nome file vm-instance.jinja:

imports:
- path: vm-instance.jinja

Nel file di configurazione corrispondente, un utente può omettere l'importazione del file vm-instance.jinja, perché verrà importato automaticamente quando Deployment Manager esamina lo schema del modello.

I percorsi di importazione devono essere relativi alla posizione del file di schema. In questo modo puoi archiviare modelli, schemi e configurazioni nella stessa directory e assicurarti che i file abbiano importazioni valide se la directory viene condivisa o spostata.

di provisioning.

Il campo required contiene un elenco di elementi del campo delle proprietà che sono richiesti nel modello che utilizza lo schema. Gli elementi non specificati in questo campo required sono considerati facoltativi.

proprietà

Il campo properties contiene le regole dello schema JSON per questo documento. Gli elementi descritti nel campo properties possono essere impostati dagli utenti del modello. Puoi utilizzare tutte le convalide dello schema JSON supportate per queste proprietà, ad esempio:

  • type (stringa, booleano, numero intero, numero, ...)
  • default
  • minimum / exclusiveMinimum / maximum / exclusiveMaximum
  • minLength / maxLength
  • pattern
  • not X / allOf X, Y / anyOf X, Y / oneOf X, Y

Come minimo, è buona norma includere un type e un description del campo in modo che gli utenti sappiano qual è un valore accettabile per la proprietà. Per le proprietà facoltative, è anche buona prassi includere un valore default.

Leggi la documentazione sulla convalida dello schema JSON per un elenco di parole chiave di convalida.

Imposta metadati arbitrari

Per impostazione predefinita, Deployment Manager ignora tutti i campi che non sono schemi JSON validi. Se devi estendere gli schemi per includere campi o proprietà specializzati, puoi creare arbitrariamente qualsiasi proprietà e aggiungerla allo schema, a condizione che il campo o la proprietà non si sovrapponga a nessuna parola chiave di convalida dello schema JSON.

Ad esempio, puoi aggiungere un campo di metadati che annota una delle tue proprietà:

properties:
  zone:
    type: string
    default: us-central1-a
    description: Zone to run
    metadata: a-special-property

In alternativa, puoi creare una variabile speciale da utilizzare in altre applicazioni al di fuori di Deployment Manager:

properties:
  size:
    type: integer
    default: 2
    description: Number of Mongo Slaves
    variable-x: ultra-secret-sauce

Crea uno schema

Uno schema è un documento separato che prende il nome del modello che descrive. Gli schemi devono avere lo stesso nome del modello corrispondente, con .schema aggiunto alla fine:

TEMPLATE_NAME.EXTENSION.schema

Ad esempio, per un modello denominato vm-instance.py, il file schema corrispondente deve essere denominato vm-instance.py.schema. Per ogni modello può esistere un solo schema.

Gli schemi possono contenere uno o più campi descritti nella sezione Struttura di uno schema. In alternativa, puoi anche scrivere gli schemi in JSON. Per esempi di schemi JSON, consulta la documentazione Schema JSON.

Utilizza uno schema

gcloud


Quando crei un deployment utilizzando Google Cloud CLI, Deployment Manager carica automaticamente tutti i modelli pertinenti per la configurazione. Allo stesso modo, se sono presenti file di schema, identificati dal formato .schema aggiunto, Deployment Manager caricherà lo schema e convaliderà il deployment in base allo schema prima di tentare di creare risorse.

Per utilizzare uno schema, includilo nella stessa directory locale dei tuoi modelli e della tua configurazione e crea la distribuzione come faresti normalmente. gcloud CLI rileva e passa il file dello schema a Deployment Manager.

API


Segui le istruzioni per creare un deployment nell'API e includi il file di schema inline con il corpo della richiesta come se stessi includendo un modello.

Passaggi successivi