引用模板的输出

时间:2018-03-01 23:10:11

标签: python google-cloud-platform yaml google-kubernetes-engine google-deployment-manager

我有一个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}

如果我尝试将以下dmnginxservice资源中的公开输出作为$(ref.dmcluster.v1endpoint)访问,则会在未找到资源的情况下收到错误

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.

1 个答案:

答案 0 :(得分:1)

我试图重现一个类似的实现,我已经能够部署它,没有任何问题,使用你的输出非常相同的sintax。

我部署了2个VM和一个新网络。我会发布你的代码,也许你会找到一些关于输出的有趣提示。

  • 第一个VM传递第二个VM的名称并使用来自网络的引用
  • 第二个VM从已从第一个VM的输出中填充的属性中获取名称
  • 网络感谢引用是第一个要创建的网络。

请记住:

  

这可能会变得棘手,因为资源的创建顺序很重要;您无法将虚拟机实例添加到不存在的网络,也无法附加不存在的永久磁盘。此外,默认情况下,Deployment Manager会并行创建所有资源,因此无法保证以正确的顺序创建相关资源。

我会跳过那是一样的。如果你提供你的代码,我可以尝试帮助你调试它,但是从错误代码看来,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