From 7fed89b51d7a4aa4c3fbad29400bd1ec7848f8cf Mon Sep 17 00:00:00 2001 From: Marco Vito Moscaritolo Date: Tue, 9 Oct 2012 21:43:58 +0200 Subject: [PATCH 1/2] Improved RackSpace configuration support (needed by latest version of rackspace API) --- plugins/inventory/nova.ini | 12 ++++++++---- plugins/inventory/nova.py | 4 +++- 2 files changed, 11 insertions(+), 5 deletions(-) diff --git a/plugins/inventory/nova.ini b/plugins/inventory/nova.ini index e91136d3589..e648e5f143c 100644 --- a/plugins/inventory/nova.ini +++ b/plugins/inventory/nova.ini @@ -11,16 +11,20 @@ username = api_key = # OpenStack nova auth_url -# For use with the new RackSpace API use https://identity.api.rackspacecloud.com/v2.0/ auth_url = +# Authentication system +auth_system = + # OpenStack nova project_id -project_id = None +project_id = + +# Serverarm region name to use +region_name = # TODO: Some other options # insecure = -# region_name = # endpoint_type = -# extensions = +# extensions = # service_type = # service_name = diff --git a/plugins/inventory/nova.py b/plugins/inventory/nova.py index cbe5c72f884..eec2f2feec6 100755 --- a/plugins/inventory/nova.py +++ b/plugins/inventory/nova.py @@ -99,7 +99,9 @@ client = nova_client.Client( username = config.get('openstack', 'username'), api_key = config.get('openstack', 'api_key'), auth_url = config.get('openstack', 'auth_url'), - project_id = config.get('openstack', 'project_id') + region_name = config.get('openstack', 'region_name'), + project_id = config.get('openstack', 'project_id'), + auth_system = config.get('openstack', 'auth_system') ) if len(sys.argv) == 2 and (sys.argv[1] == '--list'): From cdb8343ec64ec0c9b7fa5662a61bd69dc7f9f7dc Mon Sep 17 00:00:00 2001 From: Marco Vito Moscaritolo Date: Tue, 9 Oct 2012 21:44:39 +0200 Subject: [PATCH 2/2] Added documentation for nova inventory system --- plugins/inventory/nova.py | 152 +++++++++++++++++++++++++++----------- 1 file changed, 110 insertions(+), 42 deletions(-) diff --git a/plugins/inventory/nova.py b/plugins/inventory/nova.py index eec2f2feec6..227ccdb67cc 100755 --- a/plugins/inventory/nova.py +++ b/plugins/inventory/nova.py @@ -1,46 +1,5 @@ #!/usr/bin/python -""" -OpenStack external inventory script -================================= - -Generates inventory that Ansible can understand by making API request to -OpenStack endpoint using the novaclient library. - -NOTE: This script assumes Ansible is being executed where the environment -variables needed for novaclient have already been set on nova.ini file - -For more details, see: https://github.com/openstack/python-novaclient - -When run against a specific host, this script returns the following variables: - os_os-ext-sts_task_state - os_addresses - os_links - os_image - os_os-ext-sts_vm_state - os_flavor - os_id - os_rax-bandwidth_bandwidth - os_user_id - os_os-dcf_diskconfig - os_accessipv4 - os_accessipv6 - os_progress - os_os-ext-sts_power_state - os_metadata - os_status - os_updated - os_hostid - os_name - os_created - os_tenant_id - os__info - os__loaded - -where some item can have nested structure. - -""" - # (c) 2012, Marco Vito Moscaritolo # # This file is part of Ansible, @@ -58,7 +17,116 @@ where some item can have nested structure. # You should have received a copy of the GNU General Public License # along with Ansible. If not, see . -###################################################################### +DOCUMENTATION = ''' +--- +inventory: nova +short_description: OpenStack external inventory script +description: + - Generates inventory that Ansible can understand by making API request to OpenStack endpoint using the novaclient library. + - | + When run against a specific host, this script returns the following variables: + os_os-ext-sts_task_state + os_addresses + os_links + os_image + os_os-ext-sts_vm_state + os_flavor + os_id + os_rax-bandwidth_bandwidth + os_user_id + os_os-dcf_diskconfig + os_accessipv4 + os_accessipv6 + os_progress + os_os-ext-sts_power_state + os_metadata + os_status + os_updated + os_hostid + os_name + os_created + os_tenant_id + os__info + os__loaded + + where some item can have nested structure. + - All information are set on B(nova.ini) file +version_added: None +options: + version: + description: + - OpenStack version to use. + required: true + default: null + choices: [ "1.1", "2" ] + username: + description: + - Username used to authenticate in OpenStack. + required: true + default: null + api_key: + description: + - Password used to authenticate in OpenStack, can be the ApiKey on some authentication system. + required: true + default: null + auth_url: + description: + - Authentication URL required to generate token. + - To manage RackSpace use I(https://identity.api.rackspacecloud.com/v2.0/) + required: true + default: null + auth_system: + description: + - Authentication system used to login + - To manage RackSpace install B(rackspace-novaclient) and insert I(rackspace) + required: true + default: null + region_name: + description: + - Region name to use in request + - In RackSpace some value can be I(ORD) or I(DWF). + required: true + default: null + project_id: + description: + - Project ID to use in connection + - In RackSpace use OS_TENANT_NAME + required: false + default: null + endpoint_type: + description: + - The endpoint type for novaclient + - In RackSpace use 'publicUrl' + required: false + default: null + service_type: + description: + - The service type you are managing. + - In RackSpace use 'compute' + required: false + default: null + service_name: + description: + - The service name you are managing. + - In RackSpace use 'cloudServersOpenStack' + required: false + default: null + insicure: + description: + - To no check security + required: false + default: false + choices: [ "true", "false" ] +author: Marco Vito Moscaritolo +notes: + - This script assumes Ansible is being executed where the environment variables needed for novaclient have already been set on nova.ini file + - For more details, see U(https://github.com/openstack/python-novaclient) +examples: + - description: List instances + code: nova.py --list + - description: Instance property + code: nova.py --instance INSTANCE_IP +''' import sys