Adicionar um modelo como um tipo composto

Esta página descreve como criar um tipo composto com o Deployment Manager. Depois de criar um tipo composto, pode chamar esse tipo na sua configuração e criar implementações.

Um tipo composto é um ou mais modelos configurados para funcionarem em conjunto que foram adicionados permanentemente ao Deployment Manager. Depois de adicionado, pode usar um tipo composto como usaria um tipo pertencente à Google. Para saber mais sobre os tipos, leia a vista geral dos tipos.

Por exemplo, pode criar um conjunto de modelos que implementam um grupo de instâncias gerido com balanceamento de carga de rede. Adiciona esses modelos como um tipo composto ao Deployment Manager e, em seguida, pode usar o modelo em configurações futuras como usaria outros tipos.

Também pode ter interesse em Partilhar tipos entre projetos.

Antes de começar

Componentes de um tipo composto

Para criar um tipo composto, tem de ter um modelo Jinja ou Python de nível superior e, opcionalmente, um conjunto de ficheiros de apoio que, eventualmente, se resolvem em tipos base. Os tipos compostos podem ser constituídos por recursos que são, eles próprios, outros tipos compostos. O Deployment Manager expande recursivamente estes tipos durante a implementação.

Um tipo composto é composto pelos seguintes elementos:

  • Um modelo de nível superior: o modelo Jinja ou Python de nível superior executado durante a expansão quando o tipo é chamado.
  • Um esquema: o ficheiro JSON Schema que descreve informações sobre o modelo de nível superior e quaisquer subimportações definidas.
  • Ficheiros importados: todos os ficheiros adicionais necessários para a execução, como ficheiros de ajuda, submodelos> e esquemas relevantes para os submodelos, se aplicável. No entanto, esta ação é opcional. O tipo composto também pode conter apenas um modelo de nível superior.

Criar um tipo composto

Pode criar um tipo composto registando o modelo de nível superior de uma configuração e as respetivas importações e esquema associados. Crie um tipo composto usando gcloud ou a API.

Também pode ter interesse no exemplo que descreve como criar e chamar um tipo composto.

gcloud

Tem de estar no diretório onde armazenou o modelo de nível superior e os submodelos que fazem parte deste tipo composto para executar este comando.

Usando a CLI gcloud, faça um pedido types create e especifique o modelo de nível superior e o nome do tipo pretendido para chamar este tipo composto. Execute este comando no diretório local onde tem os ficheiros de modelo.

$ gcloud beta deployment-manager types create [TYPE_NAME] --template=[TOP_LEVEL_TEMPLATE]

where:

  • [TYPE_NAME] é o nome que quer dar a este tipo
  • [TOP_LEVEL_TEMPLATE] é o caminho relativo para o modelo de nível superior que descreve este tipo.

API

Na API, faça um pedido POST que contenha os campos composite e name. No campo composite, defina:

  • O esquema de nível superior
  • Os conteúdos dos seus modelos importados
  • Os conteúdos do seu modelo de nível superior

O corpo do pedido da API tem a seguinte estrutura:

POST https://www.googleapis.com/deploymentmanager/v2beta/projects/[PROJECT_ID]/global/compositeTypes

{
 "composite": {
  "files": {
   "schema": "[CONTENTS_OF_SCHEMA]",
   "imports": [
    {
     "name": "[TEMPLATE_FILE]",
     "content": "[CONTENTS_OF_TEMPLATE_FILE]"
    },
    {
     "name": "[ANOTHER_TEMPLATE_IF_NECESSARY]",
     "content": "[CONTENTS_OF_TEMPLATES]"
    }
   ],
   "template": "[TOP-LEVEL_TEMPLATE_CONTENTS]",
   "templateFileType": "[FILE_TYPE]"
  }
 },
 "name": "[TYPE_NAME]"
}

Para ver um exemplo de como criar estes pedidos, consulte o artigo Criar um tipo composto de grupo de instâncias gerido com escalonamento automático. Para mais informações, consulte a documentação do método insert.

Implementar um tipo composto

Os tipos são um recurso por projeto e são acessíveis de acordo com as autorizações descritas na documentação de Controlo de acesso. Ou seja:

  • Os editores e os visitantes de projetos, bem como os editores de tipos, podem criar e usar tipos disponíveis para esse projeto.
  • Os visualizadores de tipos podem aceder a uma lista de tipos e usar os tipos disponíveis para esse projeto.

Também pode adicionar outro projeto como visualizador de tipos para que possa aceder aos seus tipos. Leia o artigo Tipos de partilha entre projetos.

Depois de registar um tipo composto, pode implementá-lo da mesma forma que chamaria tipos geridos pela Google:

types: [PROJECT_ID]/composite:[TYPE_NAME]

Por exemplo:

resources:
- name: my example-resource
  type: example-project/composite:autoscaled-igm
  properties:
  ...

Implementar um tipo composto diretamente com a ferramenta de linha de comandos

O Deployment Manager oferece a capacidade de implementar um tipo composto diretamente com a CLI gcloud. Em vez de criar um ficheiro de configuração de nível superior, a CLI gcloud gera automaticamente uma configuração de nível superior para si.

Por exemplo, o comando seguinte implementa um tipo composto denominado autoscaled-igm:

gcloud deployment-manager deployments create my-igm \
    --composite-type example-project/composite:autoscaled-igm

Também pode definir propriedades do seu tipo composto através da flag --properties:

gcloud deployment-manager deployments create my-igm \
    --composite-type example-project/composite:autoscaled-igm \
    --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 obrigatórias definidas pelo tipo composto. 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 \
    --composite-type example-project/composite:autoscaled-igm \
    --properties zone:us-central1-a,machineType:n1-standard-1,image:debian-8

Depois de executar este comando, o Deployment Manager cria uma implementação com o tipo composto que indicou. 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.

Exemplo: criar um tipo composto

O Deployment Manager oferece muitas configurações de exemplo do repositório do GitHub do Deployment Manager que pode usar como tipos compostos. Para este exemplo, vai adicionar um tipo composto que implementa um serviço de alta disponibilidade com balanceamento de carga em várias zonas numa única região. Para mais informações, consulte o exemplo completo.

Neste exemplo, o ficheiro de configuração de nível superior é o ficheiro ha-service.py. Todos os submodelos são importados nos ficheiros de esquema.

  1. Transfira os ficheiros Python e de esquema do diretório do GitHub. Omitir todos os ficheiros num subdiretório e todos os ficheiros de diagramas.
  2. No diretório local onde transferiu todos os ficheiros, execute o seguinte comando para criar um novo tipo composto denominado ha-service-example:

    gcloud beta deployment-manager types create ha-service-example --template=ha-service.py
    
  3. Obtenha uma lista de tipos para confirmar que o tipo foi criado com êxito:

    gcloud beta deployment-manager types list --provider composite
    
  4. Descreva o novo tipo:

    gcloud beta deployment-manager types describe ha-service-example --provider composite
    
  5. Crie uma nova configuração que implemente o seu tipo. Substitua [PROJECT_ID] pelo ID do seu projeto:

    resources:
    - name: ha-service-example
      type: [PROJECT_ID]/composite:ha-service-example
      properties:
        dockerImage: gcr.io/deployment-manager-examples/nodejsservicestatic
        zones:
        - us-central1-b
        - us-central1-a
    

    Guarde a configuração como example-config.yaml. Repare que não teve de importar nenhum modelo na sua configuração.

  6. Implemente o novo tipo composto:

    gcloud deployment-manager deployments create ha-service-deployment --config example-config.yaml
    

    A API devolve uma lista de recursos criados a partir do tipo:

    Waiting for create [operation-1488254932422-5498f5a950d71-2bd3b8c8-b13ddab5]...done.
    Create operation operation-1488254932422-5498f5a950d71-2bd3b8c8-b13ddab5 completed successfully.
    NAME                                            TYPE                             STATE      ERRORS  INTENT
    ha-service-deployment-lb-fr                      compute.v1.forwardingRule        COMPLETED  []
    ha-service-deployment-lb-hc                      compute.v1.httpHealthCheck       COMPLETED  []
    ha-service-deployment-lb-tp                      compute.v1.targetPool            COMPLETED  []
    ha-service-deployment-service-us-central1-a-as   compute.v1.autoscaler            COMPLETED  []
    ha-service-deployment-service-us-central1-a-igm  compute.v1.instanceGroupManager  COMPLETED  []
    ha-service-deployment-service-us-central1-a-it   compute.v1.instanceTemplate      COMPLETED  []
    ha-service-deployment-service-us-central1-b-as   compute.v1.autoscaler            COMPLETED  []
    ha-service-deployment-service-us-central1-b-igm  compute.v1.instanceGroupManager  COMPLETED  []
    ha-service-deployment-service-us-central1-b-it   compute.v1.instanceTemplate      COMPLETED  []

Parabéns, criou o seu primeiro tipo composto!

O que se segue?