引用模板的输出
Referencing output of a template
我有一个 Deployment Manager 脚本如下:
cluster.py 创建一个 kubernetes 集群,当脚本 运行 仅用于 k8 集群创建时,它是成功的——所以这意味着 cluster.py 在创建时没有问题k8 集群
cluster.py
也公开输出:
cluster.py的一小段如下:
outputs.append({
'name': 'v1endpoint' ,
'value': type_name + type_suffix })
return {'resources': resources, 'outputs': outputs}
如果我尝试以 $(ref.dmcluster.v1endpoint)
的形式访问 dmnginxservice
资源中公开的输出,我会收到错误消息,因为找不到资源
imports:
- path: cluster.py
- path: nodeport.py
resources:
- name: dmcluster
type: cluster.py
properties:
zone: us-central1-a
- name: dmnginxservice
type: nodeport.py
properties:
cluster: $(ref.dmcluster.v1endpoint)
image: gcr.io/pr1/nginx:latest
port: 342
nodeport: 32123
ERROR: (gcloud.deployment-manager.deployments.create) Error in Operation [operation-1519960432614-566655da89a70-a2f917ad-69eab05a]: errors:
- code: CONDITION_NOT_MET
message: Referenced resource yaml%dmcluster could not be found. At resource
gke-cluster-dmnginxservice.
我尝试重现一个类似的实现,我已经能够毫无问题地部署它,使用与输出完全相同的语法。
我部署了 2 个 VM 和一个新网络。我会 post 你我的代码,也许你会发现一些关于输出的有趣提示。
- 第一个 VM 作为第二个 VM 的输出名称并使用来自网络的引用
- 第二个 VM 从第一个 VM 的输出中填充的属性中获取名称
- 由于引用,网络是第一个创建的网络。
请记住:
This can get tricky because the order of creation for resources is important; you cannot add virtual machine instances to a network that does not exist, or attach non-existent persistent disks. Furthermore, by default, Deployment Manager creates all resources in parallel, so there is no guarantee that dependent resources are created in the correct order.
我会跳过那是一样的。如果您提供您的代码,我可以尝试帮助您调试它,但从错误代码来看,DM 似乎不知道第一个元素已创建,但从提供的信息中不清楚原因。
此外,如果我是你,我会尝试明确设置 dmnginxservice
取决于 dmcluster
使用 metadata。这样你就可以仔细检查它是否真的在等待第一个资源。
更新
我已经能够使用更简单的配置重现错误,这基本上取决于我如何引用变量,行为不同并且由于某种原因 属性 扩展为 $(ref.yaml%vm-1.paolo)
,它似乎项目和集群引用的组合造成了麻烦。
#'name': context.properties["debug"],WORKING
#'name': context.env["project"],WORKING
'name': context.properties["debug"]+context.env["project"],#NOT WORKING
你可以查看配置here,如果你需要的话。
我有一个 Deployment Manager 脚本如下: cluster.py 创建一个 kubernetes 集群,当脚本 运行 仅用于 k8 集群创建时,它是成功的——所以这意味着 cluster.py 在创建时没有问题k8 集群
cluster.py
也公开输出:
cluster.py的一小段如下:
outputs.append({
'name': 'v1endpoint' ,
'value': type_name + type_suffix })
return {'resources': resources, 'outputs': outputs}
如果我尝试以 $(ref.dmcluster.v1endpoint)
的形式访问 dmnginxservice
资源中公开的输出,我会收到错误消息,因为找不到资源
imports:
- path: cluster.py
- path: nodeport.py
resources:
- name: dmcluster
type: cluster.py
properties:
zone: us-central1-a
- name: dmnginxservice
type: nodeport.py
properties:
cluster: $(ref.dmcluster.v1endpoint)
image: gcr.io/pr1/nginx:latest
port: 342
nodeport: 32123
ERROR: (gcloud.deployment-manager.deployments.create) Error in Operation [operation-1519960432614-566655da89a70-a2f917ad-69eab05a]: errors:
- code: CONDITION_NOT_MET
message: Referenced resource yaml%dmcluster could not be found. At resource
gke-cluster-dmnginxservice.
我尝试重现一个类似的实现,我已经能够毫无问题地部署它,使用与输出完全相同的语法。
我部署了 2 个 VM 和一个新网络。我会 post 你我的代码,也许你会发现一些关于输出的有趣提示。
- 第一个 VM 作为第二个 VM 的输出名称并使用来自网络的引用
- 第二个 VM 从第一个 VM 的输出中填充的属性中获取名称
- 由于引用,网络是第一个创建的网络。
请记住:
This can get tricky because the order of creation for resources is important; you cannot add virtual machine instances to a network that does not exist, or attach non-existent persistent disks. Furthermore, by default, Deployment Manager creates all resources in parallel, so there is no guarantee that dependent resources are created in the correct order.
我会跳过那是一样的。如果您提供您的代码,我可以尝试帮助您调试它,但从错误代码来看,DM 似乎不知道第一个元素已创建,但从提供的信息中不清楚原因。
此外,如果我是你,我会尝试明确设置 dmnginxservice
取决于 dmcluster
使用 metadata。这样你就可以仔细检查它是否真的在等待第一个资源。
更新
我已经能够使用更简单的配置重现错误,这基本上取决于我如何引用变量,行为不同并且由于某种原因 属性 扩展为 $(ref.yaml%vm-1.paolo)
,它似乎项目和集群引用的组合造成了麻烦。
#'name': context.properties["debug"],WORKING
#'name': context.env["project"],WORKING
'name': context.properties["debug"]+context.env["project"],#NOT WORKING
你可以查看配置here,如果你需要的话。