|
|
|
@ -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)])
|
|
|
|
|