|
|
@ -51,6 +51,27 @@ options:
|
|
|
|
required: false
|
|
|
|
required: false
|
|
|
|
default: null
|
|
|
|
default: null
|
|
|
|
aliases: []
|
|
|
|
aliases: []
|
|
|
|
|
|
|
|
service_account_email:
|
|
|
|
|
|
|
|
version_added: 1.5.1
|
|
|
|
|
|
|
|
description:
|
|
|
|
|
|
|
|
- service account email
|
|
|
|
|
|
|
|
required: false
|
|
|
|
|
|
|
|
default: null
|
|
|
|
|
|
|
|
aliases: []
|
|
|
|
|
|
|
|
pem_file:
|
|
|
|
|
|
|
|
version_added: 1.5.1
|
|
|
|
|
|
|
|
description:
|
|
|
|
|
|
|
|
- path to the pem file associated with the service account email
|
|
|
|
|
|
|
|
required: false
|
|
|
|
|
|
|
|
default: null
|
|
|
|
|
|
|
|
aliases: []
|
|
|
|
|
|
|
|
project_id:
|
|
|
|
|
|
|
|
version_added: 1.5.1
|
|
|
|
|
|
|
|
description:
|
|
|
|
|
|
|
|
- your GCE project ID
|
|
|
|
|
|
|
|
required: false
|
|
|
|
|
|
|
|
default: null
|
|
|
|
|
|
|
|
aliases: []
|
|
|
|
name:
|
|
|
|
name:
|
|
|
|
description:
|
|
|
|
description:
|
|
|
|
- identifier when working with a single instance
|
|
|
|
- identifier when working with a single instance
|
|
|
@ -90,6 +111,8 @@ options:
|
|
|
|
aliases: []
|
|
|
|
aliases: []
|
|
|
|
|
|
|
|
|
|
|
|
requirements: [ "libcloud" ]
|
|
|
|
requirements: [ "libcloud" ]
|
|
|
|
|
|
|
|
notes:
|
|
|
|
|
|
|
|
- Either I(name) or I(instance_names) is required.
|
|
|
|
author: Eric Johnson <erjohnso@google.com>
|
|
|
|
author: Eric Johnson <erjohnso@google.com>
|
|
|
|
'''
|
|
|
|
'''
|
|
|
|
|
|
|
|
|
|
|
@ -119,10 +142,14 @@ EXAMPLES = '''
|
|
|
|
machine_type: n1-standard-1
|
|
|
|
machine_type: n1-standard-1
|
|
|
|
image: debian-6
|
|
|
|
image: debian-6
|
|
|
|
zone: us-central1-a
|
|
|
|
zone: us-central1-a
|
|
|
|
|
|
|
|
service_account_email: unique-email@developer.gserviceaccount.com
|
|
|
|
|
|
|
|
pem_file: /path/to/pem_file
|
|
|
|
|
|
|
|
project_id: project-id
|
|
|
|
tasks:
|
|
|
|
tasks:
|
|
|
|
- name: Launch instances
|
|
|
|
- name: Launch instances
|
|
|
|
local_action: gce instance_names={{names}} machine_type={{machine_type}}
|
|
|
|
local_action: gce instance_names={{names}} machine_type={{machine_type}}
|
|
|
|
image={{image}} zone={{zone}}
|
|
|
|
image={{image}} zone={{zone}} service_account_email={{ service_account_email }}
|
|
|
|
|
|
|
|
pem_file={{ pem_file }} project_id={{ project_id }}
|
|
|
|
register: gce
|
|
|
|
register: gce
|
|
|
|
- name: Wait for SSH to come up
|
|
|
|
- name: Wait for SSH to come up
|
|
|
|
local_action: wait_for host={{item.public_ip}} port=22 delay=10
|
|
|
|
local_action: wait_for host={{item.public_ip}} port=22 delay=10
|
|
|
@ -150,9 +177,6 @@ EXAMPLES = '''
|
|
|
|
|
|
|
|
|
|
|
|
import sys
|
|
|
|
import sys
|
|
|
|
|
|
|
|
|
|
|
|
USER_AGENT_PRODUCT="Ansible-gce"
|
|
|
|
|
|
|
|
USER_AGENT_VERSION="v1beta15"
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
try:
|
|
|
|
try:
|
|
|
|
from libcloud.compute.types import Provider
|
|
|
|
from libcloud.compute.types import Provider
|
|
|
|
from libcloud.compute.providers import get_driver
|
|
|
|
from libcloud.compute.providers import get_driver
|
|
|
@ -171,25 +195,6 @@ except ImportError:
|
|
|
|
"msg='GCE module requires python's 'ast' module, python v2.6+'")
|
|
|
|
"msg='GCE module requires python's 'ast' module, python v2.6+'")
|
|
|
|
sys.exit(1)
|
|
|
|
sys.exit(1)
|
|
|
|
|
|
|
|
|
|
|
|
# Load in the libcloud secrets file
|
|
|
|
|
|
|
|
try:
|
|
|
|
|
|
|
|
import secrets
|
|
|
|
|
|
|
|
except ImportError:
|
|
|
|
|
|
|
|
secrets = None
|
|
|
|
|
|
|
|
ARGS = getattr(secrets, 'GCE_PARAMS', ())
|
|
|
|
|
|
|
|
KWARGS = getattr(secrets, 'GCE_KEYWORD_PARAMS', {})
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if not ARGS or not 'project' in KWARGS:
|
|
|
|
|
|
|
|
print("failed=True " + \
|
|
|
|
|
|
|
|
"msg='Missing GCE connection parametres in libcloud secrets file.'")
|
|
|
|
|
|
|
|
sys.exit(1)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def unexpected_error_msg(error):
|
|
|
|
|
|
|
|
"""Create an error string based on passed in error."""
|
|
|
|
|
|
|
|
msg='Unexpected response: HTTP return_code['
|
|
|
|
|
|
|
|
msg+='%s], API error code[%s] and message: %s' % (
|
|
|
|
|
|
|
|
error.http_code, error.code, str(error.value))
|
|
|
|
|
|
|
|
return msg
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def get_instance_info(inst):
|
|
|
|
def get_instance_info(inst):
|
|
|
|
"""Retrieves instance information from an instance object and returns it
|
|
|
|
"""Retrieves instance information from an instance object and returns it
|
|
|
@ -353,9 +358,14 @@ def main():
|
|
|
|
zone = dict(choices=['us-central1-a', 'us-central1-b',
|
|
|
|
zone = dict(choices=['us-central1-a', 'us-central1-b',
|
|
|
|
'us-central2-a', 'europe-west1-a', 'europe-west1-b'],
|
|
|
|
'us-central2-a', 'europe-west1-a', 'europe-west1-b'],
|
|
|
|
default='us-central1-a'),
|
|
|
|
default='us-central1-a'),
|
|
|
|
|
|
|
|
service_account_email = dict(),
|
|
|
|
|
|
|
|
pem_file = dict(),
|
|
|
|
|
|
|
|
project_id = dict(),
|
|
|
|
)
|
|
|
|
)
|
|
|
|
)
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
gce = gce_connect(module)
|
|
|
|
|
|
|
|
|
|
|
|
image = module.params.get('image')
|
|
|
|
image = module.params.get('image')
|
|
|
|
instance_names = module.params.get('instance_names')
|
|
|
|
instance_names = module.params.get('instance_names')
|
|
|
|
machine_type = module.params.get('machine_type')
|
|
|
|
machine_type = module.params.get('machine_type')
|
|
|
@ -368,13 +378,6 @@ def main():
|
|
|
|
zone = module.params.get('zone')
|
|
|
|
zone = module.params.get('zone')
|
|
|
|
changed = False
|
|
|
|
changed = False
|
|
|
|
|
|
|
|
|
|
|
|
try:
|
|
|
|
|
|
|
|
gce = get_driver(Provider.GCE)(*ARGS, datacenter=zone, **KWARGS)
|
|
|
|
|
|
|
|
gce.connection.user_agent_append("%s/%s" % (
|
|
|
|
|
|
|
|
USER_AGENT_PRODUCT, USER_AGENT_VERSION))
|
|
|
|
|
|
|
|
except Exception, e:
|
|
|
|
|
|
|
|
module.fail_json(msg=unexpected_error_msg(e), changed=False)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
inames = []
|
|
|
|
inames = []
|
|
|
|
if isinstance(instance_names, list):
|
|
|
|
if isinstance(instance_names, list):
|
|
|
|
inames = instance_names
|
|
|
|
inames = instance_names
|
|
|
@ -418,5 +421,6 @@ def main():
|
|
|
|
|
|
|
|
|
|
|
|
# import module snippets
|
|
|
|
# import module snippets
|
|
|
|
from ansible.module_utils.basic import *
|
|
|
|
from ansible.module_utils.basic import *
|
|
|
|
|
|
|
|
from ansible.module_utils.gce import *
|
|
|
|
|
|
|
|
|
|
|
|
main()
|
|
|
|
main()
|
|
|
|