text: # Copyright 2016 Google Inc. All rights reserved.
  #
  # Licensed under the Apache License, Version 2.0 (the "License");
  # you may not use this file except in compliance with the License.
  # You may obtain a copy of the License at
  #
  #     http://www.apache.org/licenses/LICENSE-2.0
  #
  # Unless required by applicable law or agreed to in writing, software
  # distributed under the License is distributed on an "AS IS" BASIS,
  # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  # See the License for the specific language governing permissions and
  # limitations under the License.
  
  """Creates the virtual machine with environment variables and startup script."""
  
  COMPUTE_URL_BASE = 'https://www.googleapis.com/compute/v1/'
  
  
  def GenerateConfig(context):
    """Creates the virtual machine."""
  
    resources = [{
        'name': context.env['name'],
        'type': 'compute.v1.instance',
        'properties': {
            'zone': context.properties['zone'],
            'machineType': ''.join([COMPUTE_URL_BASE, 'projects/',
                                    context.env['project'], '/zones/',
                                    context.properties['zone'], '/machineTypes/',
                                    context.properties['machineType']]),
            'disks': [{
                'deviceName': 'boot',
                'type': 'PERSISTENT',
                'boot': True,
                'autoDelete': True,
                'initializeParams': {
                    'sourceImage': ''.join([COMPUTE_URL_BASE, 'projects/',
                                            'debian-cloud/global/',
                                            'images/family/debian-8'])
                }
            }],
            'networkInterfaces': [{
                'network': '$(ref.' + context.properties['network']
                           + '.selfLink)',
                'accessConfigs': [{
                    'name': 'External NAT',
                    'type': 'ONE_TO_ONE_NAT'
                }]
            }],
            'metadata': {
                'items': [{
                    'key': 'startup-script',
                    'value': ''.join(['#!/bin/bash\n',
                                      'INSTANCE=$(curl http://metadata.google.',
                                      'internal/computeMetadata/v1/instance/',
                                      'hostname -H "Metadata-Flavor: Google")\n',
                                      'echo "<html><header><title>Hello from ',
                                      'Deployment Manager!</title></header>',
                                      '<body><h2>Hello from $INSTANCE</h2><p>',
                                      'Deployment Manager bids you good day!</p>',
                                      '</body></html>" > index.html\n',
                                      'python -m SimpleHTTPServer 80\n'])
                }]
            }
        }
    }]
    return {'resources': resources}
  