summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorsaichint <saichint@cisco.com>2018-03-06 00:06:50 -0800
committerTrishna Guha <trishnaguha17@gmail.com>2018-03-06 13:36:50 +0530
commit4ed0e5072d4e45b0993ac223929e7a8421166841 (patch)
treee1b31867c2d835fe6ae4fa3c0dfe2c7b0f58c3c2
parent51e8eab9db343177700640eb42709ba8facee035 (diff)
downloadansible-4ed0e5072d4e45b0993ac223929e7a8421166841.tar.gz
fix nxos_vrrp issues (#36930)
-rw-r--r--lib/ansible/modules/network/nxos/nxos_vrrp.py76
-rw-r--r--test/integration/targets/nxos_vrrp/tests/common/sanity.yaml45
2 files changed, 88 insertions, 33 deletions
diff --git a/lib/ansible/modules/network/nxos/nxos_vrrp.py b/lib/ansible/modules/network/nxos/nxos_vrrp.py
index 18ff5a2637..733c1dd492 100644
--- a/lib/ansible/modules/network/nxos/nxos_vrrp.py
+++ b/lib/ansible/modules/network/nxos/nxos_vrrp.py
@@ -49,31 +49,38 @@ options:
description:
- Full name of interface that is being managed for VRRP.
required: true
+ interval:
+ description:
+ - Time interval between advertisement or 'default' keyword
+ required: false
+ default: 1
+ version_added: 2.6
priority:
description:
- - VRRP priority.
+ - VRRP priority or 'default' keyword
required: false
- default: null
+ default: 100
preempt:
description:
- Enable/Disable preempt.
choices: ['True', 'False']
+ default: True
vip:
description:
- - VRRP virtual IP address.
+ - VRRP virtual IP address or 'default' keyword
required: false
default: null
authentication:
description:
- - Clear text authentication string.
+ - Clear text authentication string or 'default' keyword
required: false
default: null
admin_state:
description:
- Used to enable or disable the VRRP process.
required: false
- choices: ['shutdown', 'no shutdown']
- default: no shutdown
+ choices: ['shutdown', 'no shutdown', 'default']
+ default: shutdown
state:
description:
- Specify desired state of the resource.
@@ -121,6 +128,14 @@ from ansible.module_utils.network.nxos.nxos import get_capabilities, nxos_argume
from ansible.module_utils.basic import AnsibleModule
+PARAM_TO_DEFAULT_KEYMAP = {
+ 'priority': '100',
+ 'interval': '1',
+ 'vip': '0.0.0.0',
+ 'admin_state': 'shutdown',
+}
+
+
def execute_show_command(command, module):
if 'show run' not in command:
output = 'json'
@@ -253,12 +268,12 @@ def get_existing_vrrp(interface, group, module, name):
if parsed_vrrp['group'] == group:
parsed_vrrp['admin_state'] = get_vrr_status(group, module, name)
-
return parsed_vrrp
+
return vrrp
-def get_commands_config_vrrp(delta, group):
+def get_commands_config_vrrp(delta, existing, group):
commands = []
CMDS = {
@@ -266,32 +281,34 @@ def get_commands_config_vrrp(delta, group):
'preempt': 'preempt',
'vip': 'address {0}',
'interval': 'advertisement-interval {0}',
- 'auth': 'authentication text {0}'
+ 'auth': 'authentication text {0}',
+ 'admin_state': '{0}',
}
- vip = delta.get('vip')
- priority = delta.get('priority')
+ for arg in ['vip', 'priority', 'interval', 'admin_state']:
+ val = delta.get(arg)
+ if val == 'default':
+ val = PARAM_TO_DEFAULT_KEYMAP.get(arg)
+ if val != existing.get(arg):
+ commands.append((CMDS.get(arg)).format(val))
+ elif val:
+ commands.append((CMDS.get(arg)).format(val))
+
preempt = delta.get('preempt')
- interval = delta.get('interval')
auth = delta.get('authentication')
- admin_state = delta.get('admin_state')
- if vip:
- commands.append((CMDS.get('vip')).format(vip))
- if priority:
- commands.append((CMDS.get('priority')).format(priority))
if preempt:
commands.append(CMDS.get('preempt'))
elif preempt is False:
commands.append('no ' + CMDS.get('preempt'))
- if interval:
- commands.append((CMDS.get('interval')).format(interval))
if auth:
- commands.append((CMDS.get('auth')).format(auth))
- if admin_state:
- commands.append(admin_state)
+ if auth != 'default':
+ commands.append((CMDS.get('auth')).format(auth))
+ elif existing.get('authentication'):
+ commands.append('no authentication')
- commands.insert(0, 'vrrp {0}'.format(group))
+ if commands:
+ commands.insert(0, 'vrrp {0}'.format(group))
return commands
@@ -329,12 +346,13 @@ def main():
argument_spec = dict(
group=dict(required=True, type='str'),
interface=dict(required=True),
+ interval=dict(required=False, type='str'),
priority=dict(required=False, type='str'),
preempt=dict(required=False, type='bool'),
vip=dict(required=False, type='str'),
admin_state=dict(required=False, type='str',
- choices=['shutdown', 'no shutdown'],
- default='no shutdown'),
+ choices=['shutdown', 'no shutdown', 'default'],
+ default='shutdown'),
authentication=dict(required=False, type='str'),
state=dict(choices=['absent', 'present'], required=False, default='present')
)
@@ -349,6 +367,7 @@ def main():
interface = module.params['interface'].lower()
group = module.params['group']
priority = module.params['priority']
+ interval = module.params['interval']
preempt = module.params['preempt']
vip = module.params['vip']
authentication = module.params['authentication']
@@ -375,7 +394,7 @@ def main():
'a layer 3 port first.', interface=interface)
args = dict(group=group, priority=priority, preempt=preempt,
- vip=vip, authentication=authentication,
+ vip=vip, authentication=authentication, interval=interval,
admin_state=admin_state)
proposed = dict((k, v) for k, v in args.items() if v is not None)
@@ -389,8 +408,9 @@ def main():
delta = dict(
set(proposed.items()).difference(existing.items()))
if delta:
- command = get_commands_config_vrrp(delta, group)
- commands.append(command)
+ command = get_commands_config_vrrp(delta, existing, group)
+ if command:
+ commands.append(command)
elif state == 'absent':
if existing:
commands.append(['no vrrp {0}'.format(group)])
diff --git a/test/integration/targets/nxos_vrrp/tests/common/sanity.yaml b/test/integration/targets/nxos_vrrp/tests/common/sanity.yaml
index ae915ff573..67b7b2acd9 100644
--- a/test/integration/targets/nxos_vrrp/tests/common/sanity.yaml
+++ b/test/integration/targets/nxos_vrrp/tests/common/sanity.yaml
@@ -26,7 +26,7 @@
interface: vlan10
group: 100
vip: 10.1.100.1
- admin_state: shutdown
+ admin_state: 'no shutdown'
provider: "{{ connection }}"
register: result
@@ -42,13 +42,27 @@
that:
- "result.changed == false"
+ - name: Ensure vrrp group 100 is default
+ nxos_vrrp: &configure_def
+ interface: vlan10
+ group: 100
+ vip: default
+ admin_state: default
+ provider: "{{ connection }}"
+ register: result
+
+ - assert: *true
+
+ - name: "Conf Idempotence"
+ nxos_vrrp: *configure_def
+ register: result
+
+ - assert: *false
+
- name: Ensure removal of the vrrp group config
- # vip is required to ensure the user knows what they are removing
nxos_vrrp: &remove
interface: vlan10
group: 100
- vip: 10.1.100.1
- admin_state: shutdown
state: absent
provider: "{{ connection }}"
register: result
@@ -72,7 +86,8 @@
interface: vlan10
group: 100
vip: 10.1.100.1
- preempt: false
+ preempt: False
+ interval: 10
priority: 130
authentication: AUTHKEY
provider: "{{ connection }}"
@@ -86,6 +101,26 @@
- assert: *false
+ - name: Re-config with defaults
+ nxos_vrrp: &reconfig_def
+ interface: vlan10
+ group: 100
+ vip: default
+ preempt: True
+ interval: default
+ priority: default
+ authentication: default
+ provider: "{{ connection }}"
+ register: result
+
+ - assert: *true
+
+ - name: "Reconfig Idempotence"
+ nxos_vrrp: *reconfig_def
+ register: result
+
+ - assert: *false
+
always:
- name: remove vrrp
nxos_vrrp: *remove