Um ficheiro de configuração básico pode ser suficiente para cargas de trabalho simples, mas, para arquiteturas mais complexas ou para configurações que planeia reutilizar, pode dividir a configuração em modelos.
Um modelo é um ficheiro separado que é importado e usado como um tipo numa configuração. Pode usar quantos modelos quiser numa configuração.
Os modelos permitem-lhe separar a configuração em diferentes partes que pode usar e reutilizar em diferentes implementações. Os modelos podem ser tão generalizados ou específicos quanto precisar. Com os modelos, também pode tirar partido de funcionalidades como propriedades de modelos, variáveis de ambiente, módulos e outras funcionalidades de modelos para criar ficheiros de configuração e modelos dinâmicos.
Para ver exemplos de modelos que pode usar nas suas próprias implementações, consulte o repositório do GitHub do Deployment Manager.
Antes de começar
- Se quiser usar os exemplos de linhas de comando neste guia, instale a ferramenta de linhas de comando`gcloud`.
- Se quiser usar os exemplos de API neste guia, configure o acesso à API.
- Compreenda como criar uma configuração básica.
Sintaxe do modelo
Os modelos podem ser escritos em Jinja 2.10.x ou Python 3.x. O Jinja é mais semelhante à sintaxe YAML, pelo que pode ser mais fácil escrever modelos em Jinja se tiver mais familiaridade com YAML.
Também pode escrever ficheiros de modelos em Python e tirar partido do Python para gerar programaticamente partes dos seus modelos. Por exemplo, pode usar bibliotecas Python para formatar definições de modelos. Se tiver conhecimentos de Python, este pode ser um formato mais adequado para si.
O Deployment Manager aceita modelos Jinja e Python. Pode importar modelos em ambos os idiomas na mesma configuração.
Criar um modelo básico
Um modelo é um ficheiro que cria, escrito em Jinja ou Python. Por exemplo, considere o seguinte ficheiro de configuração:
Esta configuração é válida, mas pode simplificá-la ainda mais dividindo as diferentes partes em ficheiros de modelos individuais que pode reutilizar. Para criar um modelo com base na configuração acima, extraia a secção para o recurso em questão e crie um novo ficheiro Jinja ou Python.
Os fragmentos seguintes mostram as secções dos modelos que podem simplificar a sua implementação. Para ver os modelos completos, clique em Ver no GitHub.
Jinja
Python
Os seus modelos Python têm de cumprir os seguintes requisitos:
O modelo tem de definir um método denominado
GenerateConfig(context)
ougenerate_config(context)
. Se usar ambos os nomes de métodos no mesmo modelo, o métodogenerate_config()
tem prioridade.O objeto
context
contém metadados sobre a implementação e o seu ambiente, como o nome da implementação, o projeto atual, etc. Saiba mais sobre a utilização de variáveis de ambiente específicas da implementação.O método tem de devolver um dicionário Python.
Fora isso, cabe-lhe a si gerar o conteúdo do modelo.
Exemplo
Para ver o exemplo completo em Python, consulte o repositório do GitHub do Deployment Manager.
Importar o modelo
Depois de criar um modelo, importe-o para o ficheiro de configuração para o usar.
Para importar um modelo, adicione uma secção imports
na sua configuração, seguida
do caminho relativo ou absoluto a partir do diretório atual. Por exemplo, pode importar o modelo de máquina virtual do passo anterior adicionando a seguinte linha à parte superior da configuração:
imports:
- path: path/to/my_vm_template.jinja
Se tiver um caminho de ficheiro longo, pode fornecer uma propriedade name
opcional como um alias para o ficheiro. Pode usar este nome para fazer referência ao modelo
mais tarde. Se não fornecer o nome, pode fazer referência ao modelo através de path
.
imports:
- path: path/to/my_vm_template.jinja
name: my_renamed_template.jinja
Pode combinar importações de vários modelos, independentemente de os modelos serem Jinja ou Python:
imports:
- path: path/to/my_vm_template.jinja
name: my_renamed_template.jinja
- path: special_vm.py
Se o seu modelo usar outros modelos como dependências, importe também os modelos dependentes na sua configuração:
imports:
- path: path/to/my_vm_template.jinja
- path: special_vm.py
- path: base_vm.jinja
Também pode importar ficheiros de texto para incorporar o conteúdo. Por exemplo, se criar um ficheiro denominado resource_type.txt com a seguinte string:
compute.v1.instance
Importe-o para a sua configuração e forneça o conteúdo inline da seguinte forma:
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
Implementação de modelos
Depois de importar um modelo, use-o como um tipo na sua configuração:
Jinja
Python
Se não tiver indicado um nome para o modelo, chame o modelo através do caminho do modelo:
imports:
- path: path/to/my_vm_template.jinja
resources:
- name: my-first-virtual-machine
type: path/to/my_vm_template.jinja
Implementar modelos diretamente com a ferramenta de linha de comandos
Em vez de criar um ficheiro de configuração de nível superior, o Deployment Manager oferece a capacidade de implementar um modelo diretamente na Google Cloud CLI.
Por exemplo, o pedido seguinte implementa um modelo denominado vm-template.jinja
:
gcloud deployment-manager deployments create a-single-vm --template vm-template.jinja
Se o modelo tiver propriedades do modelo,
também pode definir estas propriedades na linha de comandos através da flag --properties
:
gcloud deployment-manager deployments create my-igm \
--template vm-template.jinja \
--properties zone:us-central1-a
Tenha em atenção o seguinte:
Todos os valores são analisados como valores YAML. Por exemplo,
version: 3
é transmitido como um número inteiro. Se quiser especificá-lo como uma string, coloque aspas simples escapadas à volta do valor,version: \'3\'
.Os valores booleanos não são sensíveis a maiúsculas e minúsculas, pelo que
TRUE
,true
eTrue
são tratados da mesma forma.Tem de transmitir todas as propriedades necessárias definidas pelo modelo. Não pode fornecer apenas um subconjunto das propriedades. Se determinadas propriedades tiverem valores predefinidos, pode omitir a propriedade da linha de comandos.
Para especificar várias propriedades, indique pares de chave:valor separados por vírgulas. A ordem pela qual especifica os pares não importa. Por exemplo:
gcloud deployment-manager deployments create my-igm
--template vm-template.jinja
--properties zone:us-central1-a,machineType:n1-standard-1,image:debian-9
Depois de executar este comando, o Deployment Manager cria uma implementação com o modelo que forneceu. Pode confirmar que a implementação foi criada através da Google Cloud consola ou da CLI gcloud. Para ver informações sobre a visualização de uma implementação, leia o artigo Visualizar um manifesto.
O que se segue?
- Para ver exemplos de modelos prontos para produção, consulte os exemplos do Cloud Foundation Toolkit no GitHub.
- Use propriedades de modelos para abstrair ainda mais o seu conteúdo.
- Preencha informações sobre os seus projetos e implementações através de variáveis de ambiente.
- Adicione um modelo permanentemente ao seu projeto como um tipo composto.