Un file di configurazione di base potrebbe essere sufficiente per workload semplici, ma per architetture più complesse o per configurazioni che prevedi di riutilizzare, puoi suddividere la configurazione in modelli.
Un modello è un file separato che viene 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 generali o specifici a seconda delle tue esigenze. Con i modelli, puoi anche sfruttare funzionalità come le proprietà dei modelli, le variabili di ambiente, i moduli e altre funzionalità dei modelli per creare file di configurazione e di modello dinamici.
Per esempi di modelli che puoi utilizzare nei tuoi deployment, consulta il repository GitHub di Deployment Manager.
Prima di iniziare
- Se vuoi utilizzare gli esempi di riga di comando in questa guida, installa lo strumento a riga di comando `gcloud`.
- Se vuoi utilizzare gli esempi di API in questa guida, configura l'accesso alle API.
- Scopri come creare una configurazione di base.
Sintassi dei modelli
I modelli possono essere scritti in Jinja 2.10.x o Python 3.x. Jinja è più simile alla sintassi YAML, quindi potrebbe essere più facile scrivere modelli in Jinja se hai più familiarità con YAML.
Puoi anche scrivere file di modello in Python e sfruttare Python per generare programmaticamente parti dei tuoi modelli. Ad esempio, puoi utilizzare le librerie Python per formattare le definizioni dei modelli. Se hai familiarità con Python, questo potrebbe essere un formato migliore per te.
Deployment Manager accetta sia i modelli Jinja sia quelli Python. Puoi importare modelli in entrambe le lingue nella stessa configurazione.
Creazione di un modello di base
Un modello è un file che crei, scritto in Jinja o Python. Considera ad esempio il seguente file di configurazione:
Questa configurazione è valida, ma puoi semplificarla ulteriormente suddividendo le diverse parti in singoli file di modello che puoi riutilizzare. Per creare un modello basato sulla configurazione sopra, estrai la sezione per la risorsa in questione e crea un nuovo file Jinja o Python.
I seguenti snippet mostrano le sezioni dei modelli che possono semplificare il deployment. Per i modelli completi, fai clic su Visualizza su GitHub.
Jinja
Python
I modelli Python devono soddisfare questi requisiti:
Il modello deve definire un metodo denominato
GenerateConfig(context)ogenerate_config(context). Se utilizzi entrambi i nomi dei metodi nello stesso modello, il metodogenerate_config()ha la precedenza.L'oggetto
contextcontiene metadati sul deployment e sul tuo ambiente, come il nome del deployment, il progetto attuale e così via. Scopri di più sull'utilizzo delle variabili di ambiente specifiche per il deployment.Il metodo deve restituire un dizionario Python.
A parte questo, spetta a te generare i contenuti del modello.
Esempio
Per l'esempio completo di Python, consulta il repository GitHub di Deployment Manager GitHub.
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 dalla 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, è possibile fare riferimento al modello utilizzando il path.
imports:
- path: path/to/my_vm_template.jinja
name: my_renamed_template.jinja
Puoi combinare le importazioni di più modelli, indipendentemente dal fatto che 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 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
Python
Se non hai fornito 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 dei 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 seguente richiesta esegue il deployment di un modello denominato vm-template.jinja:
gcloud deployment-manager deployments create a-single-vm --template vm-template.jinja
Se il modello ha proprietà del modello,
puoi impostarle anche nella riga di comando utilizzando il --properties
flag:
gcloud deployment-manager deployments create my-igm \
--template vm-template.jinja \
--properties zone:us-central1-a
Tieni presente che:
Tutti i valori vengono analizzati come valori YAML. Ad esempio,
version: 3viene passato come numero intero. Se vuoi specificarlo come stringa, inserisci virgolette singole con escape intorno al valore,version: \'3\'.I valori booleani non fanno distinzione tra maiuscole e minuscole, quindi
TRUE,trueeTruevengono trattati allo stesso modo.Devi passare tutte le proprietà obbligatorie definite dal modello. Non puoi fornire solo un sottoinsieme delle proprietà. Se determinate proprietà hanno valori predefiniti, puoi ometterle dalla riga di comando.
Per specificare più proprietà, fornisci coppie chiave:valore separate da virgole. L'ordine in cui specifichi le coppie non è importante. 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 la Google Cloud console o gcloud CLI. Per informazioni sulla visualizzazione di un deployment, consulta Visualizzazione di un manifest.
Passaggi successivi
- Per esempi di modelli pronti per la produzione, consulta gli esempi di Cloud Foundation Toolkit in GitHub.
- Utilizza le proprietà dei modelli per astrarre ulteriormente i contenuti.
- Compila le informazioni sui progetti e sui deployment utilizzando le variabili di ambiente.
- Aggiungi un modello in modo permanente al progetto come tipo composito.