Creazione di un modello di base

Mantieni tutto organizzato con le raccolte Salva e classifica i contenuti in base alle tue preferenze.

Un file di configurazione di base potrebbe essere sufficiente per carichi di lavoro semplici, ma per architetture più complesse o per configurazioni che intendi riutilizzare, puoi suddividere la configurazione in modelli.

Un modello è un file separato importato e utilizzato come tipo in una configurazione. Puoi utilizzare tutti i modelli che vuoi in una configurazione.

I modelli ti consentono di separare la configurazione in diverse parti che puoi utilizzare e riutilizzare in deployment diversi. I modelli possono essere generici o specifici in base alle tue esigenze. Con i modelli, puoi anche sfruttare funzionalità quali proprietà del modello, variabili di ambiente, moduli e altre funzionalità dei modelli per creare file di configurazione e di modello dinamici.

Per esempi di modelli utilizzabili nei tuoi deployment, consulta il repository GitHub di Deployment Manager.

Prima di iniziare

Sintassi dei modelli

I modelli possono essere scritti in Jinja 2.10.x o in Python 3.x. Jinja esegue una mappatura più stretta alla sintassi YAML, quindi potrebbe essere più facile scrivere modelli in Jinja se hai più familiarità con YAML.

Puoi anche scrivere file modello in Python e sfruttare i vantaggi di Python per generare in modo programmatico parti dei tuoi modelli. Ad esempio, puoi utilizzare le librerie Python per formattare le definizioni dei modelli. Se hai familiarità con Python, potrebbe essere il formato migliore per te.

Deployment Manager accetta entrambi i modelli Jinja e Python. Puoi importare modelli in entrambe le lingue nella stessa configurazione.

Creazione di un modello di base

Un modello è un file che hai creato, scritto in Jinja o Python. Ad esempio, considera il seguente file di configurazione:

# Copyright 2016 Google Inc. All rights reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
#     http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.

resources:
- name: vm-created-by-deployment-manager
  type: compute.v1.instance
  properties:
    zone: us-central1-a
    machineType: zones/us-central1-a/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

Questa configurazione è valida, ma puoi semplificarla ulteriormente suddividendo diverse parti come singoli file modello che puoi riutilizzare. Per creare un modello in base alla configurazione riportata sopra, esegui il pull della sezione per la risorsa in questione e crea un nuovo file Jinja o Python.

I seguenti snippet mostrano le sezioni di modelli che possono semplificare il deployment. Per visualizzare i modelli completi, fai clic su Visualizza su GitHub.

Jinja

- name: vm-template
  type: compute.v1.instance
  properties:
    zone: us-central1-a
    machineType: zones/us-central1-a/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

I modelli Python devono soddisfare i seguenti requisiti:

A parte questo, spetta a te generare i contenuti del tuo modello.

Esempio

resources.append({
    'name': 'vm-template',
    'type': 'compute.v1.instance',
    'properties': {
        'zone': 'us-central1-a',
        'machineType': 'zones/us-central1-a/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 Python completo, consulta il repository GitHub di Deployment Manager.

Importazione del modello

Dopo aver creato un modello, importalo nel file di configurazione per utilizzarlo. Per importare un modello, aggiungi una sezione imports nella configurazione, seguita dal percorso relativo o assoluto della directory corrente. Ad esempio, puoi importare il modello di macchina virtuale dal passaggio precedente aggiungendo la seguente riga all'inizio della configurazione:

imports:
  - path: path/to/my_vm_template.jinja

Se hai un percorso file lungo, puoi fornire una proprietà name facoltativa come alias per il file. Puoi utilizzare questo nome per fare riferimento al modello in un secondo momento. Se non fornisci il nome, puoi fare riferimento al modello utilizzando path.

imports:
  - path: path/to/my_vm_template.jinja
    name: my_renamed_template.jinja

Puoi combinare e abbinare le importazioni di più modelli, indipendentemente dal fatto che i modelli siano Jinja o Python:

imports:
  - path: path/to/my_vm_template.jinja
    name: my_renamed_template.jinja
  - path: special_vm.py

Se il modello utilizza altri modelli come dipendenze, importa anche i modelli dipendenti nella configurazione:

imports:
  - path: path/to/my_vm_template.jinja
  - path: special_vm.py
  - path: base_vm.jinja

Puoi anche importare file di testo per incorporare i contenuti. Ad esempio, se crei un file denominato resource_type.txt con la seguente stringa:

compute.v1.instance

Importalo nella tua configurazione e fornisci i contenuti in linea come segue:

imports:
- path: resource_type.txt

resources:
- name: my-vm
  type: {{ imports["resource_type.txt"] }} # Resolves to "compute.v1.instance"
  properties:
    zone: us-central1-a
    machineType: zones/us-central1-a/machineTypes/f1-micro
    disks:
    - deviceName: boot
      type: PERSISTENT
      boot: true
      autoDelete: true
      initializeParams:
        sourceImage: projects/debian-cloud/global/images/family/debian-9
    networkInterfaces:
    - network: global/networks/default
      accessConfigs:
      - name: External NAT
        type: ONE_TO_ONE_NAT

Deployment dei modelli

Dopo aver importato un modello, utilizzalo come tipo nella configurazione:

Jinja

imports:
- path: vm-template.jinja

resources:
- name: my-vm
  type: vm-template.jinja

Python

imports:
- path: vm-template.py

resources:
- name: my-vm
  type: vm-template.py

Se non hai specificato un nome per il modello, chiamalo utilizzando il percorso del modello:

imports:
- path: path/to/my_vm_template.jinja

resources:
- name: my-first-virtual-machine
  type: path/to/my_vm_template.jinja

Deployment di modelli direttamente con lo strumento a riga di comando

Anziché creare un file di configurazione di primo livello, Deployment Manager offre la possibilità di eseguire il deployment di un modello direttamente in Google Cloud CLI.

Ad esempio, la richiesta seguente esegue il deployment di un modello denominato vm-template.jinja:

gcloud deployment-manager deployments create a-single-vm --template vm-template.jinja

Se il tuo modello ha proprietà del modello, puoi anche impostare queste proprietà sulla riga di comando utilizzando il flag --properties:

gcloud deployment-manager deployments create my-igm \
    --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 passato come un numero intero. Se vuoi specificarlo come stringa, racchiudi il valore version: \'3\' tra virgolette singole con escape.

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

  • Devi trasmettere tutte le proprietà obbligatorie definite dal modello. Non puoi fornire solo un sottoinsieme delle proprietà. Se alcune proprietà hanno valori predefiniti, 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 il modello che hai fornito. Puoi verificare che il deployment sia stato creato utilizzando Google Cloud Console o l'interfaccia a riga di comando gcloud. Per informazioni sulla visualizzazione di un deployment, leggi Visualizzare un manifest.

Passaggi successivi