#!/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_ADDRESS
gce_service_account_pem_file_path = SERVICE_ACCOUNT_PRIVATE_SSH_KEY
gce_project_id = GCP_PROJECT_ID

[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 = external
