google 部署管理器使用 --properties 参数访问嵌套属性

google deployment manager access nested properties with --properties argument

如果我使用神社模板,我可以像这样通过命令行覆盖属性:

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

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

本质上使用 --template my-template.py --properties zone:us-central1-f 相当于 运行ning --config myConfig.yaml,其中 YAML 定义如下:

imports:
- path: my-template.py

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

--properties 标志并不意味着传递原始数据以替换非变量。

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

中获取的直接变量

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

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

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