谷歌部署管理器使用--properties参数

时间:2019-10-09 22:08:35

标签: google-deployment-manager

如果我使用的是Jinja模板,则可以这样通过命令行覆盖属性:

--properties zone:us-central1-a,machineType:n1-standard-1,image:debian-9

但是我看不到任何文档或示例来使用诸如标签或环境变量之类的嵌套属性来做到这一点:

resources:
  - name: resource-name
    type: 'gcp-types/cloudfunctions-v1:projects.locations.functions'
    properties:
      labels:
        testlabel1: testlabel1value
        testlabel2: testlabel2value
      environmentVariables:
        TEST: 'zzzzzzzzz'

如何设置这些属性?这不起作用:--properties labels:testlabel1:newvalue

2 个答案:

答案 0 :(得分:1)

这里的简短答案是--properties标志并不意味着将属性值传递给模板。如果没有配置文件,模板将无法运行,-properties标志用于替换配置文件。您传递的每个参数都与在配置文件中列出它们相同。

基本上使用--template my-template.py --properties zone:us-central1-f等效于运行--config myConfig.yaml,其中YAML的定义如下:

imports:
- path: my-template.py

resources:
- name: some-resource
  type: my-temaplte.py
  properties:
    zone: us-central1-f

--properties标志不是要传递原始数据来替换非变量。

尽管这不能直接回答您的问题,但通常不需要在标志中定义嵌套值。您的模板通常会调用从对象properties中获取的直接变量。

尽管如此,我确实做了一些测试,据我所知,你不能这样做。

答案 1 :(得分:0)

经过反复试验,我设法通过命令行传递了一个对象,如下所示:

--properties ^~^labels:{'testlabel1: testlabel1value','testlabel2: testlabel2value'}~environmentVariables:{'TEST: zzzzzzzzz'}
  • 此符号序列 ^〜^ 是更改定界符的方式。您必须将其放在属性的开头。有关转义的更多信息,您可以找到here
  • 我将单撇号放在单个键值对上,因为我们需要键和值之间的空间。否则,它将作为具有空值的键插入。
  • 如果您使用的是Bash shell,还应该转义 {} 符号。