对于简单工作负载而言,基本的配置文件可能已足够,但对于更为复杂的架构或打算重复使用的配置,您可以将配置拆分为多个模板。
模板是指导入到配置中并用作类型的独立文件。您可以在配置中使用任意数量的模板。
您可以借助模板将配置分成不同的部分,以便使用并在不同的部署中重复使用。模板可以根据需要进行通用化或具体化。另外,借助模板,您还可以利用模板属性、环境变量、模块和其他模板功能等功能来创建动态配置和模板文件。
如需查看可在您自己的部署中使用的模板的示例,请参阅 Deployment Manager GitHub 代码库。
准备工作
- 如果要使用本指南中的命令行示例,请安装 “gcloud” 命令行工具。
- 如果希望使用本指南中的 API 示例,请设置 API 访问权限。
- 了解如何创建基本配置。
模板语法
模板可以采用 Jinja 2.10.x 或 Python 3.x 编写。Jinja 更接近 YAML 语法,因此如果您更熟悉 YAML,在 Jinja 中编写模板会更加容易。
您还可以使用 Python 编写模板文件,并利用 Python 以编程方式生成模板的各个部分。例如,您可以使用 Python 库来格式化模板定义。如果您熟悉 Python,此格式可能更适合您。
Deployment Manager 接受 Jinja 和 Python 模板。您可以在同一配置中导入使用这两种语言的模板。
创建基本模板
模板是以 Jinja 或 Python 编写并创建的文件。以如下配置文件为例:
此配置有效,但您可以通过将不同部分分解为可以重复使用的一个个模板文件,进一步简化配置。要根据上面的配置创建模板,请提取出相关资源部分并创建一个新的 Jinja 或 Python 文件。
以下摘要显示了可简化部署的模板部分。要查看完整模板,请点击在 GitHub 上查看。
Jinja
Python
您的 Python 模板必须满足以下要求:
模板必须定义一个名为
GenerateConfig(context)
或generate_config(context)
的方法。如果您在同一模板中同时使用这两个方法名称,则generate_config()
方法的优先级更高。context
对象包含关于部署和环境的元数据,比如部署名称,当前项目等。详细了解如何使用特定于部署的环境变量。该方法必须返回 Python 字典。
除此之外,您可以自行生成模板的内容。
示例
如需了解完整的 Python 示例,请参阅 Deployment Manager GitHub 代码库。
导入模板
创建模板后,应将其导入配置文件才可使用。要导入模板,请在配置中添加 imports
部分,然后在当前目录中添加相对路径或绝对路径。例如,您可以通过在配置开头添加以下行来导入上一步中的虚拟机模板:
imports:
- path: path/to/my_vm_template.jinja
如果您的文件路径较长,则可以提供可选的 name
属性作为该文件的别名。稍后您可以使用此名称引用该模板。如果未提供名称,可以使用 path
引用模板。
imports:
- path: path/to/my_vm_template.jinja
name: my_renamed_template.jinja
无论模板是 Jinja 还是 Python 格式,您都可以混搭导入多个模板:
imports:
- path: path/to/my_vm_template.jinja
name: my_renamed_template.jinja
- path: special_vm.py
如果您的模板使用其他模板作为依存项,则还要在配置中导入依赖模板:
imports:
- path: path/to/my_vm_template.jinja
- path: special_vm.py
- path: base_vm.jinja
您还可以导入文本文件以内嵌内容。例如,如果使用以下字符串创建名为 resource_type.txt 的文件:
compute.v1.instance
将其导入您的配置并提供内嵌内容,如下所示:
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
部署模板
导入模板后,将其用作配置中的类型:
Jinja
Python
如果您没有为模板提供名称,请使用模板路径调用模板:
imports:
- path: path/to/my_vm_template.jinja
resources:
- name: my-first-virtual-machine
type: path/to/my_vm_template.jinja
使用命令行工具直接部署模板
Deployment Manager 能在 Google Cloud CLI 中直接部署模板,而不是创建顶层配置文件。
例如,以下请求部署了名为 vm-template.jinja
的模板:
gcloud deployment-manager deployments create a-single-vm --template vm-template.jinja
如果您的模板具有模板属性,还可以使用 --properties
标志在命令行中设置这些属性:
gcloud deployment-manager deployments create my-igm \
--template vm-template.jinja \
--properties zone:us-central1-a
请注意:
所有值都将解析为 YAML 值。例如,
version: 3
将以整数传入。如果您想将其指定为字符串,请在值的两边添加转义单引号,如version: \'3\'
。布尔值不区分大小写,因此
TRUE
、true
和True
被视为同一值。您必须传入模板定义的所有必需属性。您不能只提供属性的子集。如果某些属性具有默认值,可以从命令行中略过该属性。
要指定多个属性,请提供以逗号分隔的键值对。键值对的指定顺序不重要。例如:
gcloud deployment-manager deployments create my-igm
--template vm-template.jinja
--properties zone:us-central1-a,machineType:n1-standard-1,image:debian-9
运行此命令后,Deployment Manager 会利用您提供的模板创建部署。您可以使用 Google Cloud 控制台或 gcloud CLI 确认是否已创建部署。如需了解查看部署,请参阅查看清单。
后续步骤
- 如需查看可正式投入使用的模板的示例,请参阅 GitHub 中的 Cloud Foundation Toolkit 示例。
- 使用模板属性进一步提取内容。
- 使用环境变量填充有关项目和部署的信息。
- 将模板作为复合类型永久添加到项目中。