1

我有一个如下的部署管理器脚本: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.
4

1 回答 1

1

我试图重现一个类似的实现,并且我已经能够毫无问题地部署它,使用与输出完全相同的 sintax。

我部署了 2 个虚拟机和一个新网络。我会把我的代码贴给你,也许你会发现一些关于输出的有趣提示。

  • 第一个 VM 将第二个 VM 的名称作为输出传递,并使用来自网络的引用
  • 第二个 VM 使用从第一个 VM 的输出中填充的属性的名称
  • 由于引用,网络是第一个要创建的网络。

请记住:

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

我会跳过那是一样的。如果您提供代码,我可以尝试帮助您调试它,但从错误代码看来,DM 似乎不知道第一个元素已创建,但从提供的信息中不清楚原因。

此外,如果我是你,我会尝试明确设置,这dmnginxservice取决于dmcluster使用元数据。通过这种方式,您可以仔细检查它是否真的在等待第一个资源。

更新

我已经能够使用更简单的配置来重现错误,这主要取决于我引用变量的方式,行为不同,并且由于某种原因属性被扩展为$(ref.yaml%vm-1.paolo),似乎项目和集群引用的组合会导致麻烦。

#'name': context.properties["debug"],WORKING
#'name': context.env["project"],WORKING
 'name': context.properties["debug"]+context.env["project"],#NOT WORKING

您可以在此处检查配置,如果需要。

于 2018-03-02T12:50:33.087 回答