Criar um modelo básico

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

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:

# 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

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

- 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

Os seus modelos Python têm de cumprir os seguintes requisitos:

Fora isso, cabe-lhe a si gerar o conteúdo do modelo.

Exemplo

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'
        }]
    }
})

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

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 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 e True 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?