diff --git a/cloud/openstack/os_server_facts.py b/cloud/openstack/os_server_facts.py index 5d61e4c18d3..bd694dbc558 100644 --- a/cloud/openstack/os_server_facts.py +++ b/cloud/openstack/os_server_facts.py @@ -15,6 +15,8 @@ # You should have received a copy of the GNU General Public License # along with this software. If not, see . +import fnmatch + try: import shade from shade import meta @@ -25,36 +27,47 @@ except ImportError: DOCUMENTATION = ''' --- module: os_server_facts -short_description: Retrieve facts about a compute instance +short_description: Retrieve facts about one or more compute instances version_added: "2.0" -author: "Monty Taylor (@emonty)" description: - - Retrieve facts about a server instance from OpenStack. + - Retrieve facts about server instances from OpenStack. notes: - - Facts are placed in the C(openstack) variable. + - This module creates a new top-level C(openstack_servers) fact, which + contains a list of servers. requirements: - "python >= 2.6" - "shade" options: server: description: - - Name or ID of the instance - required: true + - restrict results to servers with names matching + this glob expression (e.g., C). + required: false + default: None + detailed: + description: + - when true, return additional detail about servers at the expense + of additional API calls. + required: false + default: false extends_documentation_fragment: openstack ''' EXAMPLES = ''' -# Gather facts about a previously created server named vm1 +# Gather facts about all servers named C: - os_server_facts: cloud: rax-dfw - server: vm1 -- debug: var=openstack + server: web* +- debug: + var: openstack_servers ''' + def main(): argument_spec = openstack_full_argument_spec( - server=dict(required=True), + server=dict(required=False), + detailed=dict(required=False, type='bool'), ) module_kwargs = openstack_module_kwargs() module = AnsibleModule(argument_spec, **module_kwargs) @@ -64,10 +77,16 @@ def main(): try: cloud = shade.openstack_cloud(**module.params) - server = cloud.get_server(module.params['server']) - hostvars = dict(openstack=meta.get_hostvars_from_server( - cloud, server)) - module.exit_json(changed=False, ansible_facts=hostvars) + openstack_servers = cloud.list_servers( + detailed=module.params['detailed']) + + if module.params['server']: + # filter servers by name + pattern = module.params['server'] + openstack_servers = [server for server in openstack_servers + if fnmatch.fnmatch(server['name'], pattern)] + module.exit_json(changed=False, ansible_facts=dict( + openstack_servers=openstack_servers)) except shade.OpenStackCloudException as e: module.fail_json(msg=e.message) @@ -77,4 +96,3 @@ from ansible.module_utils.basic import * from ansible.module_utils.openstack import * if __name__ == '__main__': main() -