将模板添加为复合类型

本页面介绍了如何使用 Deployment Manager 创建复合类型。创建复合类型后,您可以在配置中调用该类型并创建部署。

复合类型是配置为相互协作的一个或多个模板,这些模板已永久添加到 Deployment Manager 中。添加后,您可以像使用 Google 拥有的类型一样使用复合类型。要详细了解类型,请阅读类型概览

例如,您可以创建一组模板来部署网络负载平衡托管实例组。您可以将这些模板作为复合类型添加到 Deployment Manager,然后像将使用其他类型一样在将来的配置中使用这些模板。

另外建议可能还对跨项目共享类型感兴趣。

准备工作

复合类型的组成部分

要创建复合类型,您必须具有顶层 Jinja 或 Python 模板或者一组最终解析为基本类型的可选支持文件。复合类型可以由本身是其他复合类型的资源组成。Deployment Manager 将在部署期间以递归方式展开这些类型。

复合类型由以下部分组成:

  • 顶层模板:在扩展期间调用类型时执行的顶层 Jinja 或 Python 模板
  • 架构JSON 架构文件,描述有关顶层模板和任何已定义的子导入的信息。
  • 导入的文件:执行所需的任何其他文件,例如辅助文件sub-templates和子模板的相关架构(如适用)。不过,这些是可选的。您的复合类型也可以只包含一个顶级模板。

创建复合类型

您可以通过注册配置的顶层模板及其关联的导入和架构来创建复合类型。使用 gcloud 或 API 创建复合类型。

另外建议您阅读介绍如何创建和调用复合类型的示例

gcloud

您必须位于存储属于此复合类型的顶层模板和子模板的目录中,才能运行此命令。

使用 gcloud CLI,发出 types create 请求,并指定顶级模板和所需的类型名称以调用此复合类型。在具有模板文件的本地目录中运行此命令。

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

其中:

  • [TYPE_NAME] 是此类型的调用名称
  • [TOP_LEVEL_TEMPLATE] 是描述此类型的顶层模板的相对路径。

API

在 API 中,发出包含 compositename 字段的 POST 请求。在 composite 字段中,定义以下项:

  • 顶层架构
  • 导入的模板的内容
  • 顶级模板的内容

该 API 请求正文的结构如下:

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]"
}

如需查看如何构建这些请求的示例,请参阅创建自动扩缩的托管实例组复合类型。如需了解详情,请参阅 insert 方法的文档。

部署复合类型

每个项目都包含类型资源,您可以根据访问权限控制文档中所述的权限访问类型。具体来说:

  • 项目编辑者和查看者以及类型编辑者可以创建和使用项目可用的类型。
  • 类型查看者可以获取类型列表和使用项目可用的类型。

您还可以将另一个项目添加为 Type Viewer,以便该项目访问您的类型。请阅读跨项目共享类型

注册复合类型后,您可以像调用 Google 管理的类型一样部署该类型:

types: [PROJECT_ID]/composite:[TYPE_NAME]

例如:

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

使用命令行工具直接部署复合类型

Deployment Manager 可以使用 Google Cloud CLI 直接部署复合类型。gcloud CLI 会自动为您生成顶级配置,而不是创建顶级配置文件。

例如,以下命令会部署名为 autoscaled-igm 的复合类型:

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

您还可以使用 --properties 标志设置复合类型的属性:

gcloud deployment-manager deployments create my-igm \
    --composite-type example-project/composite:autoscaled-igm \
    --properties zone:us-central1-a

请注意:

  • 所有值都将解析为 YAML 值。例如,version: 3 将以整数传入。如果您想将其指定为字符串,请在值的两边添加转义单引号,如 version: \'3\'

  • 布尔值不区分大小写,因此 TRUEtrueTrue 被视为同一值。

  • 您必须传入复合类型定义的所有必要属性,不能只提供一部分属性。如果某些属性具有默认值,可以从命令行中略过该属性。

要指定多个属性,请提供以逗号分隔的键值对。键值对的指定顺序不重要。例如:

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

运行此命令后,Deployment Manager 将使用您提供的复合类型创建部署。您可以确认已使用 Google Cloud 控制台或 gcloud CLI 创建部署。如需了解查看部署,请参阅查看清单

示例:创建复合类型

Deployment Manager 的 Deployment Manager GitHub 代码库提供多个示例配置,供您用作复合类型。在本示例中,您将添加一个复合类型,将负载平衡的高可用性服务部署到单个区域内的多个地区。如需了解详情,请参阅完整示例

在本示例中,顶级配置文件是 ha-service.py 文件。所有子模板都导入到架构文件中。

  1. 从 GitHub 目录下载 Python 和架构文件。忽略子目录中的所有文件和任何图表文件。
  2. 在下载了所有文件的本地目录中,运行以下命令以创建名为 ha-service-example 的新复合类型:

    gcloud beta deployment-manager types create ha-service-example --template=ha-service.py
    
  3. 获取类型列表以确认类型已成功创建:

    gcloud beta deployment-manager types list --provider composite
    
  4. 描述您的新类型:

    gcloud beta deployment-manager types describe ha-service-example --provider composite
    
  5. 创建一个用于部署您的类型的新配置。将 [PROJECT_ID] 替换为您的项目 ID:

    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
    

    将配置保存为 example-config.yaml。请注意,您不必在配置中导入任何模板。

  6. 部署新复合类型:

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

    API 返回一个以该类型创建的资源列表:

    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  []

恭喜,您成功创建了第一个复合类型!

后续步骤