From d24e9ab4bb4800e78c7a4b450c9bc5aeb62dcfd0 Mon Sep 17 00:00:00 2001 From: Kevin Breit Date: Tue, 18 Jun 2019 04:22:46 -0500 Subject: [PATCH] meraki_content_filtering - Add support for querying (#57273) * Added querying functionality * Fix PEP8 and documentation * Increment version added * Fix version info --- .../meraki/meraki_content_filtering.py | 28 ++++++++-- .../meraki_content_filtering/tasks/main.yml | 54 +++++++++++++++++++ 2 files changed, 79 insertions(+), 3 deletions(-) diff --git a/lib/ansible/modules/network/meraki/meraki_content_filtering.py b/lib/ansible/modules/network/meraki/meraki_content_filtering.py index f862e98b045..5fbdccbbeb1 100644 --- a/lib/ansible/modules/network/meraki/meraki_content_filtering.py +++ b/lib/ansible/modules/network/meraki/meraki_content_filtering.py @@ -46,7 +46,7 @@ options: state: description: - States that a policy should be created or modified. - choices: [present] + choices: [present, query] default: present type: str allowed_urls: @@ -67,7 +67,12 @@ options: - Determines whether a network filters fo rall URLs in a category or only the list of top blocked sites. choices: [ top sites, full list ] type: str - + subset: + description: + - Display only certain facts. + choices: [categories, policy] + type: str + version_added: '2.9' author: - Kevin Breit (@kbreit) extends_documentation_fragment: meraki @@ -140,11 +145,12 @@ def main(): argument_spec.update( net_id=dict(type='str'), net_name=dict(type='str', aliases=['network']), - state=dict(type='str', default='present', choices=['present']), + state=dict(type='str', default='present', choices=['present', 'query']), allowed_urls=dict(type='list'), blocked_urls=dict(type='list'), blocked_categories=dict(type='list'), category_list_size=dict(type='str', choices=['top sites', 'full list']), + subset=dict(type='str', choices=['categories', 'policy']), ) # the AnsibleModule object will be our abstraction working with Ansible @@ -178,6 +184,22 @@ def main(): nets = meraki.get_nets(org_id=org_id) net_id = meraki.get_net_id(org_id, meraki.params['net_name'], data=nets) + if meraki.params['state'] == 'query': + if meraki.params['subset']: + if meraki.params['subset'] == 'categories': + path = meraki.construct_path('categories', net_id=net_id) + elif meraki.params['subset'] == 'policy': + path = meraki.construct_path('policy', net_id=net_id) + meraki.result['data'] = meraki.request(path, method='GET') + else: + response_data = {'categories': None, + 'policy': None, + } + path = meraki.construct_path('categories', net_id=net_id) + response_data['categories'] = meraki.request(path, method='GET') + path = meraki.construct_path('policy', net_id=net_id) + response_data['policy'] = meraki.request(path, method='GET') + meraki.result['data'] = response_data if module.params['state'] == 'present': payload = dict() if meraki.params['allowed_urls']: diff --git a/test/integration/targets/meraki_content_filtering/tasks/main.yml b/test/integration/targets/meraki_content_filtering/tasks/main.yml index 1030155658a..92cf19d2ad2 100644 --- a/test/integration/targets/meraki_content_filtering/tasks/main.yml +++ b/test/integration/targets/meraki_content_filtering/tasks/main.yml @@ -179,6 +179,60 @@ - blocked_category.data.blocked_url_categories | length == 1 - blocked_category.data.url_category_list_size == "topSites" + - name: Query all content filtering information + meraki_content_filtering: + auth_key: '{{auth_key}}' + org_name: '{{test_org_name}}' + net_name: '{{test_net_name}}' + state: query + delegate_to: localhost + register: query_all + + - debug: + var: query_all + + - name: Query all content filtering assertion + assert: + that: + - query_all.data.categories is defined + - query_all.data.policy is defined + + - name: Query categories + meraki_content_filtering: + auth_key: '{{auth_key}}' + org_name: '{{test_org_name}}' + net_name: '{{test_net_name}}' + state: query + subset: categories + delegate_to: localhost + register: query_categories + + - debug: + var: query_categories + + - name: Query categories assertion + assert: + that: + - query_categories.data is defined + + - name: Query content filtering policies + meraki_content_filtering: + auth_key: '{{auth_key}}' + org_name: '{{test_org_name}}' + net_name: '{{test_net_name}}' + subset: policy + state: query + delegate_to: localhost + register: query_policy + + - debug: + var: query_policy + + - name: Query contnet filtering policy assertion + assert: + that: + - query_policy.data is defined + always: - name: Reset policies meraki_content_filtering: