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/4420/head
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,48 +96,46 @@ extends_documentation_fragment: meraki
|
||||||
'''
|
'''
|
||||||
|
|
||||||
EXAMPLES = r'''
|
EXAMPLES = r'''
|
||||||
- name: List all networks associated to the YourOrg organization
|
- delegate_to: localhost
|
||||||
meraki_network:
|
block:
|
||||||
auth_key: abc12345
|
- name: List all networks associated to the YourOrg organization
|
||||||
state: query
|
meraki_network:
|
||||||
org_name: YourOrg
|
auth_key: abc12345
|
||||||
delegate_to: localhost
|
state: query
|
||||||
- name: Query network named MyNet in the YourOrg organization
|
org_name: YourOrg
|
||||||
meraki_network:
|
- name: Query network named MyNet in the YourOrg organization
|
||||||
auth_key: abc12345
|
meraki_network:
|
||||||
state: query
|
auth_key: abc12345
|
||||||
org_name: YourOrg
|
state: query
|
||||||
net_name: MyNet
|
org_name: YourOrg
|
||||||
delegate_to: localhost
|
net_name: MyNet
|
||||||
- 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
|
||||||
state: present
|
state: present
|
||||||
org_name: YourOrg
|
org_name: YourOrg
|
||||||
net_name: MyNet
|
net_name: MyNet
|
||||||
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
|
state: present
|
||||||
state: present
|
org_name: YourOrg
|
||||||
org_name: YourOrg
|
net_name: MyNet
|
||||||
net_name: MyNet
|
type:
|
||||||
type:
|
- switch
|
||||||
- switch
|
- appliance
|
||||||
- appliance
|
timezone: America/Chicago
|
||||||
timezone: America/Chicago
|
tags: production, chicago
|
||||||
tags: production, chicago
|
- name: Enable VLANs on a network
|
||||||
- name: Enable VLANs on a network
|
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
|
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…
Reference in New Issue