【问题标题】:google deployment manager access nested properties with --properties argument谷歌部署管理器使用 --properties 参数访问嵌套属性
【发布时间】:2019-10-09 22:08:35
【问题描述】:

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

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

但我没有看到使用标签或 environmentVariables 等嵌套属性执行此操作的文档或示例:

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

【问题讨论】:

    标签: google-deployment-manager


    【解决方案1】:

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

    基本上使用--template my-template.py --properties zone:us-central1-f 相当于运行--config myConfig.yaml,其中YAML 是这样定义的:

    进口: - 路径:我的模板.py 资源: - 名称:一些资源 类型:my-temaplte.py 特性: 区域:us-central1-f

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

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

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

    【讨论】:

    • 无赖。我有一个明显的用例是通过命令行设置 environmentVariables 会很好,这样我就可以只拥有一个模板并更改开发和产品部署的环境变量——这对 CI\CD 来说会很好
    • 这实际上是该命令的用途,它只取决于您如何在模板中定义变量。对于 python,将变量定义为 context.properties['variable']{{ properties['variable'] }} 对于 jinja。该字段是否嵌套在模板中无关紧要,变量的来源仍将位于properties
    • 这确实存在某些障碍,例如依赖于可能具有可变长度的项目列表的字段。对于这个用例,我找不到克服这个问题的方法,但如果你使用配置 yaml 和模板,你可以设法迭代列表。我有一些例子here
    【解决方案2】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-11-15
      • 1970-01-01
      相关资源
      最近更新 更多