#!/usr/bin/python
# Copyright 2013 Google Inc.
#
# This file is part of Ansible
#
# Ansible is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# Ansible is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with Ansible.  If not, see <http://www.gnu.org/licenses/>.

# The GCE inventory script has the following dependencies:
#   1. A valid Google Cloud Platform account with Google Compute Engine
#      enabled.  See https://cloud.google.com
#   2. An OAuth2 Service Account flow should be enabled.  This will generate
#      a private key file that the inventory script will use for API request
#      authorization.  See https://developers.google.com/accounts/docs/OAuth2
#   3. Convert the private key from PKCS12 to PEM format
#      $ openssl pkcs12 -in pkey.pkcs12 -passin pass:notasecret \
#      > -nodes -nocerts | openssl rsa -out pkey.pem
#   4. The libcloud (>=0.13.3) python libray.  See http://libcloud.apache.org
#
# (See ansible/test/gce_tests.py comments for full install instructions)
#
# Author: Eric Johnson <erjohnso@google.com>

[gce]
# GCE Service Account configuration information can be stored in the
# libcloud 'secrets.py' file.  Ideally, the 'secrets.py' file will already
# exist in your PYTHONPATH and be picked up automatically with an import
# statement in the inventory script.  However, you can specify an absolute
# path to the secrets.py file with 'libcloud_secrets' parameter.
libcloud_secrets =

# If you are not going to use a 'secrets.py' file, you can set the necessary
# authorization parameters here.
gce_service_account_email_address = '{{ service_account_email }}'
gce_service_account_pem_file_path = '{{ ssh_private_key_file }}'
gce_project_id = '{{ project_id }}'
gce_zone = '{{ gce_zone | default("us-east1-b") }}'

[inventory]
# The 'inventory_ip_type' parameter specifies whether 'ansible_ssh_host' should
# contain the instance internal or external address. Values may be either
# 'internal' or 'external'. If 'external' is specified but no external instance
# address exists, the internal address will be used.
# The INVENTORY_IP_TYPE environment variable will override this value.
inventory_ip_type = {{ inventory_id_type | default('internal') }}
