Commit 66eddfd4 by Michael DeHaan

Merge branch 'nova-compute-enhancements' of git://github.com/emonty/ansible into devel

Conflicts:
	lib/ansible/module_utils/openstack.py
	library/cloud/nova_compute
parents b413a7d7 f3357099
......@@ -54,3 +54,16 @@ def openstack_argument_spec():
else:
spec['login_tenant_name'] = dict(required=True)
return spec
def openstack_find_nova_addresses(addresses, ext_tag, key_name=None):
ret = []
for (k, v) in addresses.iteritems():
if key_name and k == key_name:
ret.extend([addrs['addr'] for addrs in v])
else:
for interface_spec in v:
if 'OS-EXT-IPS:type' in interface_spec and interface_spec['OS-EXT-IPS:type'] == ext_tag:
ret.append(interface_spec['addr'])
return ret
......@@ -99,6 +99,7 @@ def main():
module.params['login_password'],
module.params['login_tenant_name'],
module.params['auth_url'],
region_name=module.params['region_name'],
service_type='compute')
try:
nova.authenticate()
......
......@@ -28,6 +28,8 @@ try:
except:
import simplejson as json
from ansible.module_utils.openstack import *
###################################################
# executed with no parameters, return the list of
# all groups and hosts
......@@ -57,12 +59,12 @@ if not config:
sys.exit('Unable to find configfile in %s' % ', '.join(NOVA_CONFIG_FILES))
client = nova_client.Client(
version = config.get('openstack', 'version'),
username = config.get('openstack', 'username'),
api_key = config.get('openstack', 'api_key'),
auth_url = config.get('openstack', 'auth_url'),
config.get('openstack', 'version'),
config.get('openstack', 'username'),
config.get('openstack', 'api_key'),
config.get('openstack', 'project_id'),
config.get('openstack', 'auth_url'),
region_name = config.get('openstack', 'region_name'),
project_id = config.get('openstack', 'project_id'),
auth_system = config.get('openstack', 'auth_system')
)
......@@ -70,20 +72,20 @@ if len(sys.argv) == 2 and (sys.argv[1] == '--list'):
groups = {}
# Cycle on servers
for f in client.servers.list():
private = [ x['addr'] for x in getattr(f, 'addresses').itervalues().next() if x['OS-EXT-IPS:type'] == 'fixed']
public = [ x['addr'] for x in getattr(f, 'addresses').itervalues().next() if x['OS-EXT-IPS:type'] == 'floating']
for server in client.servers.list():
private = openstack_find_nova_addresses(getattr(server, 'addresses'), 'fixed', 'private')
public = openstack_find_nova_addresses(getattr(server, 'addresses'), 'floating', 'public')
# Define group (or set to empty string)
group = f.metadata['group'] if f.metadata.has_key('group') else 'undefined'
group = server.metadata['group'] if server.metadata.has_key('group') else 'undefined'
# Create group if not exist
if group not in groups:
groups[group] = []
# Append group to list
if f.accessIPv4:
groups[group].append(f.accessIPv4)
if server.accessIPv4:
groups[group].append(server.accessIPv4)
continue
if public:
groups[group].append(''.join(public))
......@@ -104,8 +106,8 @@ elif len(sys.argv) == 3 and (sys.argv[1] == '--host'):
results = {}
ips = []
for instance in client.servers.list():
private = [ x['addr'] for x in getattr(instance, 'addresses').itervalues().next() if x['OS-EXT-IPS:type'] == 'fixed']
public = [ x['addr'] for x in getattr(instance, 'addresses').itervalues().next() if x['OS-EXT-IPS:type'] == 'floating']
private = openstack_find_nova_addresses(getattr(instance, 'addresses'), 'fixed', 'private')
public = openstack_find_nova_addresses(getattr(instance, 'addresses'), 'floating', 'public')
ips.append( instance.accessIPv4)
ips.append(''.join(private))
ips.append(''.join(public))
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment