meraki_network - Add support for disableRemoteStatusPage (#48971)

* Add support for disableRemoteStatusPage
- New feature in the Meraki API
- Yes, it's a double negative, I may fix at some point

* Remove double negative
- All disables became enable and logic is reversed
- This isn't yet tested

* Switching computers!!!

* Apply changes to make the logic work, even reversed

* Attempt to fix some formatting errors

* Add documentation fragment

* Fix whitespace

* Add disable_my_meraki back, with deprecation notice

* Edit changelog notice

* Update deprecation version

* Update example to be a block and change deprecation message.

* Remove duplicate delegate_to

* Change deprecation notice.
pull/57154/head
Kevin Breit 6 years ago committed by Nathaniel Case
parent 79bb7bde5f
commit 4df53f869e

@ -0,0 +1,2 @@
minor_changes:
- meraki_network - Add support for disabling remote status page on a network.

@ -71,9 +71,24 @@ options:
disable_my_meraki: disable_my_meraki:
description: > description: >
- Disables the local device status pages (U[my.meraki.com](my.meraki.com), U[ap.meraki.com](ap.meraki.com), U[switch.meraki.com](switch.meraki.com), - Disables the local device status pages (U[my.meraki.com](my.meraki.com), U[ap.meraki.com](ap.meraki.com), U[switch.meraki.com](switch.meraki.com),
U[wired.meraki.com](wired.meraki.com)) U[wired.meraki.com](wired.meraki.com)).
- Mutually exclusive of C(enable_my_meraki).
- Will be deprecated in Ansible 2.13 in favor of C(enable_my_meraki).
type: bool type: bool
version_added: '2.7' version_added: '2.7'
enable_my_meraki:
description: >
- Enables the local device status pages (U[my.meraki.com](my.meraki.com), U[ap.meraki.com](ap.meraki.com), U[switch.meraki.com](switch.meraki.com),
U[wired.meraki.com](wired.meraki.com)).
- Ansible 2.7 had this parameter as C(disable_my_meraki).
type: bool
version_added: '2.9'
enable_remote_status_page:
description:
- Enables access to the device status page (U(http://device LAN IP)).
- Can only be set if C(enable_my_meraki:) is set to C(yes).
type: bool
version_added: '2.9'
author: author:
- Kevin Breit (@kbreit) - Kevin Breit (@kbreit)
@ -81,19 +96,19 @@ extends_documentation_fragment: meraki
''' '''
EXAMPLES = r''' EXAMPLES = r'''
- delegate_to: localhost
block:
- name: List all networks associated to the YourOrg organization - name: List all networks associated to the YourOrg organization
meraki_network: meraki_network:
auth_key: abc12345 auth_key: abc12345
state: query state: query
org_name: YourOrg org_name: YourOrg
delegate_to: localhost
- name: Query network named MyNet in the YourOrg organization - name: Query network named MyNet in the YourOrg organization
meraki_network: meraki_network:
auth_key: abc12345 auth_key: abc12345
state: query state: query
org_name: YourOrg org_name: YourOrg
net_name: MyNet net_name: MyNet
delegate_to: localhost
- name: Create network named MyNet in the YourOrg organization - name: Create network named MyNet in the YourOrg organization
meraki_network: meraki_network:
auth_key: abc12345 auth_key: abc12345
@ -103,7 +118,6 @@ EXAMPLES = r'''
type: switch type: switch
timezone: America/Chicago timezone: America/Chicago
tags: production, chicago tags: production, chicago
delegate_to: localhost
- name: Create combined network named MyNet in the YourOrg organization - name: Create combined network named MyNet in the YourOrg organization
meraki_network: meraki_network:
auth_key: abc12345 auth_key: abc12345
@ -122,7 +136,6 @@ EXAMPLES = r'''
org_name: YourOrg org_name: YourOrg
net_name: MyNet net_name: MyNet
enable_vlans: yes enable_vlans: yes
delegate_to: localhost
''' '''
RETURN = r''' RETURN = r'''
@ -166,6 +179,11 @@ data:
returned: success returned: success
type: bool type: bool
sample: true sample: true
disableRemoteStatusPage:
description: Disables access to the device status page.
returned: success
type: bool
sample: true
''' '''
import os import os
@ -210,8 +228,10 @@ def main():
timezone=dict(type='str'), timezone=dict(type='str'),
net_name=dict(type='str', aliases=['name', 'network']), net_name=dict(type='str', aliases=['name', 'network']),
state=dict(type='str', choices=['present', 'query', 'absent'], default='present'), state=dict(type='str', choices=['present', 'query', 'absent'], default='present'),
disable_my_meraki=dict(type='bool'),
enable_vlans=dict(type='bool'), enable_vlans=dict(type='bool'),
disable_my_meraki=dict(type='bool', removed_in_version=2.13),
enable_my_meraki=dict(type='bool'),
enable_remote_status_page=dict(type='bool'),
) )
# the AnsibleModule object will be our abstraction working with Ansible # the AnsibleModule object will be our abstraction working with Ansible
@ -220,6 +240,8 @@ def main():
# supports check mode # supports check mode
module = AnsibleModule(argument_spec=argument_spec, module = AnsibleModule(argument_spec=argument_spec,
supports_check_mode=False, supports_check_mode=False,
mutually_exclusive=[('disable_my_meraki', 'enable_my_meraki'),
]
) )
meraki = MerakiModule(module, function='network') meraki = MerakiModule(module, function='network')
@ -247,6 +269,8 @@ def main():
if not meraki.params['net_name'] and not meraki.params['net_id']: if not meraki.params['net_name'] and not meraki.params['net_id']:
if meraki.params['enable_vlans']: if meraki.params['enable_vlans']:
meraki.fail_json(msg="The parameter 'enable_vlans' requires 'net_name' or 'net_id' to be specified") meraki.fail_json(msg="The parameter 'enable_vlans' requires 'net_name' or 'net_id' to be specified")
if meraki.params['enable_my_meraki'] is True and meraki.params['enable_remote_status_page'] is False:
meraki.fail_json(msg='enable_my_meraki must be true when setting enable_remote_status_page')
# if the user is working with this module in only check mode we do not # if the user is working with this module in only check mode we do not
# want to make any changes to the environment, just return the current # want to make any changes to the environment, just return the current
@ -265,8 +289,19 @@ def main():
payload['tags'] = construct_tags(meraki.params['tags']) payload['tags'] = construct_tags(meraki.params['tags'])
if meraki.params['timezone']: if meraki.params['timezone']:
payload['timeZone'] = meraki.params['timezone'] payload['timeZone'] = meraki.params['timezone']
if meraki.params['disable_my_meraki'] is not None: if meraki.params['enable_my_meraki'] is not None:
if meraki.params['enable_my_meraki'] is True:
payload['disableMyMerakiCom'] = False
else:
payload['disableMyMerakiCom'] = True
elif meraki.params['disable_my_meraki'] is not None:
payload['disableMyMerakiCom'] = meraki.params['disable_my_meraki'] payload['disableMyMerakiCom'] = meraki.params['disable_my_meraki']
if meraki.params['enable_remote_status_page'] is not None:
if meraki.params['enable_remote_status_page'] is True:
payload['disableRemoteStatusPage'] = False
# meraki.fail_json(msg="Debug", payload=payload)
else:
payload['disableRemoteStatusPage'] = True
# manipulate or modify the state as needed (this is going to be the # manipulate or modify the state as needed (this is going to be the
# part where your module will do what it needs to do) # part where your module will do what it needs to do)

@ -118,7 +118,7 @@
- disable_vlan_idempotent is not changed - disable_vlan_idempotent is not changed
- disable_vlan_idempotent.data is defined - disable_vlan_idempotent.data is defined
- name: Create network with type wireless - name: Create network with type wireless and disable my.meraki.com
meraki_network: meraki_network:
auth_key: '{{ auth_key }}' auth_key: '{{ auth_key }}'
state: present state: present
@ -126,10 +126,11 @@
net_name: IntTestNetworkWireless net_name: IntTestNetworkWireless
type: wireless type: wireless
timezone: America/Chicago timezone: America/Chicago
disable_my_meraki: yes
delegate_to: localhost delegate_to: localhost
register: create_net_wireless register: create_net_wireless
- name: Create network with type wireless and check for idempotency - name: Create network with type wireless, disable my.meraki.com, and check for idempotency
meraki_network: meraki_network:
auth_key: '{{ auth_key }}' auth_key: '{{ auth_key }}'
state: present state: present
@ -137,6 +138,7 @@
net_name: IntTestNetworkWireless net_name: IntTestNetworkWireless
type: wireless type: wireless
timezone: America/Chicago timezone: America/Chicago
disable_my_meraki: yes
delegate_to: localhost delegate_to: localhost
register: create_net_wireless_idempotent register: create_net_wireless_idempotent
@ -154,7 +156,7 @@
- appliance - appliance
- switch - switch
timezone: America/Chicago timezone: America/Chicago
disable_my_meraki: yes enable_my_meraki: no
delegate_to: localhost delegate_to: localhost
register: create_net_combined register: create_net_combined
@ -164,10 +166,69 @@
state: present state: present
org_name: '{{test_org_name}}' org_name: '{{test_org_name}}'
net_name: IntTestNetworkCombined net_name: IntTestNetworkCombined
disable_my_meraki: no enable_my_meraki: yes
delegate_to: localhost delegate_to: localhost
register: enable_meraki_com register: enable_meraki_com
- name: Disable my.meraki.com for next test
meraki_network:
auth_key: '{{ auth_key }}'
state: present
org_name: '{{test_org_name}}'
net_name: IntTestNetworkCombined
enable_my_meraki: no
delegate_to: localhost
- name: Enable remote status page
meraki_network:
auth_key: '{{ auth_key }}'
state: present
org_name: '{{test_org_name}}'
net_name: IntTestNetworkCombined
enable_remote_status_page: yes
delegate_to: localhost
register: disable_remote_status
- debug:
msg: '{{disable_remote_status}}'
- assert:
that:
- disable_remote_status.data.disableRemoteStatusPage == False
- name: Disable remote status page
meraki_network:
auth_key: '{{ auth_key }}'
state: present
org_name: '{{test_org_name}}'
net_name: IntTestNetworkCombined
enable_remote_status_page: no
delegate_to: localhost
register: enable_remote_status
- debug:
msg: '{{enable_remote_status}}'
- assert:
that:
- enable_remote_status.data.disableRemoteStatusPage == True
- name: Test status pages are mutually exclusive when on
meraki_network:
auth_key: '{{ auth_key }}'
state: present
org_name: '{{test_org_name}}'
net_name: IntTestNetworkCombined
enable_my_meraki: yes
enable_remote_status_page: no
delegate_to: localhost
register: status_exclusivity
ignore_errors: yes
- assert:
that:
- '"must be true when setting" in status_exclusivity.msg'
- name: Create network with one tag - name: Create network with one tag
meraki_network: meraki_network:
auth_key: '{{ auth_key }}' auth_key: '{{ auth_key }}'
@ -241,6 +302,7 @@
- '"IntTestNetworkSwitch" in create_net_switch.data.name' - '"IntTestNetworkSwitch" in create_net_switch.data.name'
- '"IntTestNetworkSwitchOrgID" in create_net_switch_org_id.data.name' - '"IntTestNetworkSwitchOrgID" in create_net_switch_org_id.data.name'
- '"IntTestNetworkWireless" in create_net_wireless.data.name' - '"IntTestNetworkWireless" in create_net_wireless.data.name'
- create_net_wireless.data.disableMyMerakiCom == True
- create_net_wireless_idempotent.changed == False - create_net_wireless_idempotent.changed == False
- create_net_wireless_idempotent.data is defined - create_net_wireless_idempotent.data is defined
- '"first_tag" in create_net_tag.data.tags' - '"first_tag" in create_net_tag.data.tags'

Loading…
Cancel
Save