Definizione delle proprietà del modello

Uno dei vantaggi dei modelli è la possibilità di creare e definire proprietà di modelli personalizzati. Modello sono variabili arbitrarie definite nei file modello. Qualsiasi un file di configurazione o un file modello che utilizza il modello in questione possono fornisci un valore per la proprietà del modello senza modificare il modello . In questo modo puoi astrarre la proprietà in modo da modificare il suo valore per ogni configurazione univoca senza aggiornare il modello sottostante.

Ad esempio, la riga seguente specifica una proprietà del modello nell'URL del tipo di macchina:

machineType: zones/{{ properties["zone"] }}/machineTypes/n1-standard-1

In una configurazione che utilizza questo modello, puoi impostare il valore di zone nella sezione properties del modello:

imports:
- path: vm_template.jinja

resources:
- name: my-vm
  type: vm_template.jinja
  properties:
    zone: us-central1-a

Deployment Manager saprà passare il valore di zone al modello sottostante.

Prima di iniziare

Creazione di una proprietà modello

Per creare una proprietà per il modello:

Jinja

In Jinja, definisci una proprietà utilizzando la seguente sintassi:

{{ properties["PROJECT_NAME"] }}

Ad esempio:

- name: vm-{{ env["deployment"] }}
  type: compute.v1.instance
  properties:
    zone: us-central1-a
    machineType: zones/{{ properties["zone"] }}/machineTypes/n1-standard-1
    disks:
    - deviceName: boot
      type: PERSISTENT
      boot: true
      autoDelete: true
      initializeParams:
        sourceImage: projects/debian-cloud/global/images/family/debian-11
    networkInterfaces:
    - network: global/networks/default

Python

In Python, definisci una proprietà utilizzando la seguente sintassi:

  context.properties["PROPERTY_NAME"]

Ad esempio:

resources.append({
    'name': 'vm-' + context.env['deployment'],
    'type': 'compute.v1.instance',
    'properties': {
        'zone': 'us-central1-a',
        'machineType': ''.join(['zones/', context.properties['zone'],
                                '/machineTypes/n1-standard-1']),
        'disks': [{
            'deviceName': 'boot',
            'type': 'PERSISTENT',
            'boot': True,
            'autoDelete': True,
            'initializeParams': {
                'sourceImage':
                    'projects/debian-cloud/global/images/family/debian-11'
            }
        }],
        'networkInterfaces': [{
            'network': 'global/networks/default'
        }]
    }

})

Per l'esempio completo di Python, consulta il repository GitHub di Deployment Manager.

Impostazione dei valori per le proprietà del modello nella configurazione di primo livello

Nella configurazione di primo livello, puoi impostare i valori per le proprietà del modello utilizzando la sintassi:

imports:
- path: vm_template.jinja

resources:
- name: my-vm
  type: vm_template.jinja
  properties:
    zone: us-central1-a

Devi impostare i valori di tutte le proprietà del modello nel modello. Ad esempio: Se un modello ha le proprietà del modello zone, image e network, devi e definire i valori per tutte queste proprietà nella configurazione di primo livello.

Se alcune proprietà del modello hanno valori predefiniti, ti consigliamo di utilizzare schemas per impostarli. Una proprietà del modello con un valore predefinito può essere omessa dalla configurazione di primo livello se il valore predefinito è appropriato per il deployment.

Impostazione dei valori per le proprietà del modello nella riga di comando

Anziché fornire i valori per le proprietà del modello nell'importazione del file principale il modello, Deployment Manager offre la possibilità di impostare questi valori direttamente in Google Cloud CLI. Puoi saltare la creazione del file YAML di primo livello. Deployment Manager genererà automaticamente una configurazione di primo livello per il deployment in base alle informazioni contenute nella richiesta.

Ad esempio, supponiamo che tu abbia il seguente modello con una proprietà del modello chiamata zone:

- name: vm-{{ env["deployment"] }}
  type: compute.v1.instance
  properties:
    zone: us-central1-a
    machineType: zones/{{ properties["zone"] }}/machineTypes/n1-standard-1
    disks:
    - deviceName: boot
      type: PERSISTENT
      boot: true
      autoDelete: true
      initializeParams:
        sourceImage: projects/debian-cloud/global/images/family/debian-11
    networkInterfaces:
    - network: global/networks/default

Con Google Cloud CLI, puoi passare direttamente il file modello e specificare i valori delle proprietà del modello nella riga di comando. Per esempio, la seguente richiesta passa nel modello e specifica zone direttamente dalla riga di comando:

gcloud deployment-manager deployments create a-single-vm --template vm_template.jinja \
    --properties zone:us-central1-a

Tieni presente quanto segue:

  • Tutti i valori vengono analizzati come valori YAML. Ad esempio, version: 3 viene trasmesso sotto forma di numero intero. Se vuoi specificarla come stringa, inserisci il carattere di escape singolo. tra virgolette intorno al valore, version: \'3\'.

  • I valori booleani non fanno distinzione tra maiuscole e minuscole, pertanto TRUE, true e True vengono trattati allo stesso modo.

  • Devi passare tutte le proprietà obbligatorie definite dal modello. Non puoi solo un sottoinsieme delle proprietà. Se alcune proprietà hanno impostazioni predefinite puoi omettere la proprietà dalla riga di comando.

Per specificare più proprietà, fornisci coppie chiave-valore separate da virgole. Non importa in quale ordine specifichi le coppie. Ad esempio:

gcloud deployment-manager deployments create my-igm \
    --template vm_template.jinja \
    --properties zone:us-central1-a,machineType:n1-standard-1,image:debian-9

Dopo aver eseguito questo comando, Deployment Manager crea un deployment utilizzando che hai fornito. Puoi confermare che il deployment è stato creato utilizzando la console Google Cloud o gcloud CLI. Per informazioni su come visualizzare un deployment, consulta Visualizzare un manifest.

Passaggi successivi