使用环境变量的Google Deployment Manager模板

时间:2017-05-18 14:02:01

标签: google-compute-engine

我有一个名为dev.yaml的模板,如下所示:

24.64.208.134 :      24128  : 3
71.228.199.109 :     37091  : 1
72.197.8.56 :    9258  : 1
75.117.31.43 :   3122  : 1
99.248.20.48 :   48725  : 1
207.68.178.56 :      80  : 1

请注意,我正在对区域和项目进行硬编码。我希望那些来自这些环境变量。

imports:
- path: generate_config.py

resources:
- name: application_vm
  type: generate_config.py
  properties:
    zone: europe-west1-d
    project: cpb1234567

generate_config.py如下所示:

CLOUDSDK_COMPUTE_ZONE=europe-west1-d
GCP_PROJ_ID=cpb1234567

我从属性中获取区域和项目,因此可行。

但是,如何从环境变量中获取区域和项目?

我似乎无法在Python模板中执行此操作:

#!/usr/bin/env python

COMPUTE_URL_BASE = 'https://www.googleapis.com/compute/v1/'

def generate_config(context):

  resources = [{
      'name': context.env['name'],
      'type': 'compute.v1.instance',
      'properties': {
          'zone': context.properties['zone'],
          'machineType': ''.join([COMPUTE_URL_BASE, 
                                  'projects/', 
                                  context.properties['project'],
                                  '/zones/',
                                  context.properties['zone'],
                                  '/machineTypes/n1-standard-1']),
          'disks': [{
              'deviceName': 'boot',
              'type': 'PERSISTENT',
              'boot': True,
              'autoDelete': True,
              'initializeParams': {
                  'sourceImage': ''.join([COMPUTE_URL_BASE, 
                                          'projects/',
                                          context.properties['project'],
                                          '/global/images/jre-10gb-debian-jessie'])
              }
          }],
          'networkInterfaces': [{
              'network': ''.join([COMPUTE_URL_BASE, 
                                  'projects/',
                                  context.properties['project'],
                                  '/global/networks/default']),
              'accessConfigs': [{
                  'name': 'External NAT',
                  'type': 'ONE_TO_ONE_NAT'
              }]
          }]
      }
  }]
  return {'resources': resources}

导入失败。

在YAML中,尚不清楚哪种语法可行。

非常感谢

1 个答案:

答案 0 :(得分:0)

虽然不是这样的答案,但更多信息在这里:

https://groups.google.com/forum/#!topic/gce-discussion/Md7rCo1ZMJY