Un file di configurazione di base potrebbe essere sufficiente per carichi di lavoro semplici, ma per per architetture complesse o per le configurazioni che prevedi di riutilizzare, suddividere la configurazione in modelli.
Un modello è un file separato che viene importato e utilizzato come tipo in un 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 diversi deployment. I modelli possono essere generali o specifici in base alle tue esigenze. Con i modelli, puoi anche sfruttare funzionalità come proprietà modello, variabili di ambiente, moduli, e altre funzionalità del modello per creare modelli e configurazione 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 a riga di comando presenti in questa guida, installa lo strumento a riga di comando "gcloud".
- Se vuoi utilizzare gli esempi di API in questa guida, configura l'accesso API.
- Scopri come creare una configurazione di base.
Sintassi del modello
I modelli possono essere scritti in Jinja 2.10.x o Python 3.x. Jinja esegue una mappatura più precisa della sintassi YAML, quindi potrebbe essere più facile scrivere 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 più adatto a te.
Deployment Manager accetta i modelli sia Jinja che Python. Puoi importare i modelli in entrambe le lingue nella stessa configurazione.
Creazione di un modello di base
Un modello è un file creato da te, scritto in Jinja o Python. Ad esempio: considera il seguente file di configurazione:
Questa configurazione è valida, ma puoi semplificarla ulteriormente suddividendo le diverse parti come singoli file modello che puoi riutilizzare. Per creare un modello in base alla configurazione precedente, estrai la sezione relativa alla risorsa in questione e crea un nuovo file Jinja o Python.
I seguenti snippet mostrano le sezioni dei modelli che possono semplificare per il deployment. Per i modelli completi, fai clic su Visualizza su GitHub.
Jinja
Python
I modelli Python devono soddisfare i seguenti requisiti:
Il modello deve definire un metodo chiamato
GenerateConfig(context)
ogenerate_config(context)
. Se utilizzi entrambi i nomi di metodo nello stesso modello, il metodogenerate_config()
ha la precedenza.L'oggetto
context
contiene i metadati relativi al deployment e al tuo ambiente, ad esempio il nome del deployment, il progetto corrente e così via. Scopri di più sull'utilizzo di variabili di ambiente specifiche per il deployment.Il metodo deve restituire un dizionario Python.
A parte questo, spetta a te generare i contenuti del tuo modello.
Esempio
Per l'esempio completo di Python, 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
alla configurazione, seguita dal percorso relativo o assoluto dalla directory corrente. Ad esempio,
può importare il modello di macchina virtuale dal passaggio precedente aggiungendo
riga seguente all'inizio della configurazione:
imports:
- path: path/to/my_vm_template.jinja
Se il percorso del 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 le importazioni di più modelli, indipendentemente dal fatto che siano in 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 stringa seguente:
compute.v1.instance
Importalo nella tua configurazione e fornisci i contenuti in linea in questo modo:
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
Modelli di deployment
Dopo aver importato un modello, utilizzalo come tipo nella configurazione:
Jinja
Python
Se non hai specificato un nome per il modello, chiamalo utilizzando il metodo percorso 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 nella CLI Google Cloud.
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 tuo modello contiene proprietà modello,
puoi impostarle anche 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 che:
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
eTrue
vengono trattati allo stesso modo.Devi trasmettere tutte le proprietà obbligatorie definite dal modello. Non puoi solo un sottoinsieme delle proprietà. Se alcune proprietà hanno valori 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 il modello che hai fornito. Puoi confermare che il deployment è stato creato utilizzando la console Google Cloud o gcloud CLI. Per informazioni sulla visualizzazione di un leggere il deployment, Visualizzazione di un file manifest.
Passaggi successivi
- Per esempi di modelli pronti per la produzione, consulta la Esempi di Cloud Foundation Toolkit in GitHub.
- Utilizza le proprietà del modello per astrarre ulteriormente i contenuti.
- Compila le informazioni sui tuoi progetti e sui tuoi deployment utilizzando le variabili di ambiente.
- Aggiungi definitivamente un modello al progetto come tipo composto.