
    Vh0                         d dl mZmZmZ eZdZdZdZd dl	m
Z
 d dlmZmZmZmZ ddd	d
dZd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zedk(  r e        yy)    )absolute_importdivisionprint_functiona  
module: nxos_vrrp
extends_documentation_fragment:
- cisco.nxos.nxos
short_description: Manages VRRP configuration on NX-OS switches.
description:
- Manages VRRP configuration on NX-OS switches.
version_added: 1.0.0
author:
- Jason Edelman (@jedelman8)
- Gabriele Gerbino (@GGabriele)
notes:
- Tested against NXOSv 7.3.(0)D1(1) on VIRL
- Unsupported for Cisco MDS
- VRRP feature needs to be enabled first on the system.
- SVIs must exist before using this module.
- Interface must be a L3 port before using this module.
- C(state=absent) removes the VRRP group if it exists on the device.
- VRRP cannot be configured on loopback interfaces.
options:
  group:
    description:
    - VRRP group number.
    required: true
    type: str
  interface:
    description:
    - Full name of interface that is being managed for VRRP.
    required: true
    type: str
  interval:
    description:
    - Time interval between advertisement or 'default' keyword
    required: false
    type: str
  priority:
    description:
    - VRRP priority or 'default' keyword
    type: str
  preempt:
    description:
    - Enable/Disable preempt.
    type: bool
  vip:
    description:
    - VRRP virtual IP address or 'default' keyword
    type: str
  authentication:
    description:
    - Clear text authentication string or 'default' keyword
    type: str
  admin_state:
    description:
    - Used to enable or disable the VRRP process.
    choices:
    - shutdown
    - no shutdown
    - default
    default: shutdown
    type: str
  state:
    description:
    - Specify desired state of the resource.
    default: present
    choices:
    - present
    - absent
    type: str
a  
- name: Ensure vrrp group 100 and vip 10.1.100.1 is on vlan10
  cisco.nxos.nxos_vrrp:
    interface: vlan10
    group: 100
    vip: 10.1.100.1

- name: Ensure removal of the vrrp group config
  cisco.nxos.nxos_vrrp:
    interface: vlan10
    group: 100
    vip: 10.1.100.1
    state: absent

- name: Re-config with more params
  cisco.nxos.nxos_vrrp:
    interface: vlan10
    group: 100
    vip: 10.1.100.1
    preempt: false
    priority: 130
    authentication: AUTHKEY
z
commands:
    description: commands sent to the device
    returned: always
    type: list
    sample: ["interface vlan10", "vrrp 150", "address 10.1.15.1",
            "authentication text testing", "no shutdown"]
)AnsibleModule)get_capabilitiesget_interface_typeload_configrun_commands1001z0.0.0.0shutdown)priorityintervalvipadmin_statec                 >    d| vrd}nd}| |dg}t        ||      d   S )Nzshow runjsontext)commandoutputr   )r
   )r   moduler   commandss       h/home/dcms/DCMS/lib/python3.12/site-packages/ansible_collections/cisco/nxos/plugins/modules/nxos_vrrp.pyexecute_show_commandr      s3     #v67H)!,,    c                     i }|j                         D ]/  \  }}| j                  |      }|s|rt        |      ||<   +|||<   1 |S N)itemsgetstr)key_maptablenew_dictkeyvaluenew_keys         r   apply_key_mapr'      sS    Hkkm *
U++c"$'J!$)!* Or   c                     dj                  |       }	 t        ||      }d|j                         v ry|j                  d      }|d   j	                  d      ryy# t
        $ r Y yw xY w)	Nzshow run interface {0}invalidDNE
	interfaceTF)formatr   lowersplit
startswithKeyError)r-   r   r   bodyraw_lists        r   
is_defaultr5      sl    &--i8G#GV4

$zz$'H|&&{3 s   A %A 	A%$A%c                     dj                  |       }i } d}t        ||      }|d   d   }|j                  d      }|dv r+t        |j                  dd            }|d	k(  s|d
k(  rd}||fS |dk(  rd}||fS )Nzshow interface {0}unknownTABLE_interfaceROW_interfacer-   )ethernetportchanneleth_modelayer3accesstrunklayer2svi)r.   r   r   r    )r-   	intf_typer   r   moder3   interface_tablenames           r   get_interface_moderF      s    ")))4GID0D,-o>O{+D//?&&z8<=8twD : 
e	:r   c                 >   dj                  |      }t        ||      }d }d}|ry|j                         }t        dt	        |      dz
        D ]*  }||   j                         dj                  |       k(  s)|}, ||d  }	|	D ]  }
|
j                         dk(  sd} |S  |S )Nz%show run all | section interface.{0}$r   r      vrrp {0}no shutdown)r.   r   
splitlinesrangelenstrip)groupr   r-   r   r3   	vrf_indexr   splitted_bodyindexvrf_sectionlines              r   get_vrr_statusrU      s    5<<YGG0DIK)1c-0145 	"EU#))+z/@/@/GG!		" $IK0 	Dzz|},+	
 r   c                 ^   dj                  |       }t        ||      }i }ddddddd}	 |d	   }t        |t              r|g}|D ]J  }	|	d
   }
t        ||
      }|d   dk(  rd|d<   n|d   dk(  rd|d<   |d   |k(  s8t        |||      |d<   |c S  |S # t        t        t        f$ r i cY S w xY w)Nzshow vrrp detail interface {0}rO   r   r   preemptauthenticationr   )sh_group_idsh_vip_addrsh_prioritysh_group_preemptsh_auth_textsh_adv_intervalTABLE_vrrp_groupROW_vrrp_groupDisableFEnableTr   )	r.   r   AttributeError
IndexError	TypeError
isinstancedictr'   rU   )r-   rO   r   rE   r   r3   vrrpvrrp_key
vrrp_table	each_vrrpvrrp_rowparsed_vrrps               r   get_existing_vrrprn      s    .55i@G0DD !%(%H,-
 *d# \
 	-.#Hh7y!Y.%*K	"#x/%)K	"w5()7vt)LK& K' J	2 	s   B B,+B,c                 >   g }ddddddd}dD ]  }| j                  |      }|d	k(  rZt        j                  |      }||j                  |      k7  sC|j                  |j                  |      j                  |             s|sv|j                  |j                  |      j                  |              | j                  d      }| j                  d
      }|r!|j                  |j                  d             n'|du r#|j                  d|j                  d      z          |rW|d	k7  r0|j                  |j                  d      j                  |             n"|j                  d
      r|j                  d       |r!|j	                  ddj                  |             |S )Nzpriority {0}rW   zaddress {0}zadvertisement-interval {0}zauthentication text {0}z{0})r   rW   r   r   authr   )r   r   r   r   defaultrX   Fzno rp   zno authenticationr   rI   )r   PARAM_TO_DEFAULT_KEYMAPappendr.   insert)	deltaexistingrO   r   CMDSargvalrW   rp   s	            r   get_commands_config_vrrprz     si   H #0)D > 9iin))--c2Chll3''# 6 6s ;<OOTXXc]223789 ii	"G99%&D+,	E	 3349OOTXXf-55d;<\\*+OO/0:,,U34Or   c                 ~    g }| D ]5  }t        |t              r|j                  |       %|j                  |       7 |S r   )rf   listextendrs   )command_listsflat_command_listr   s      r   flatten_listr   .  sE      .gt$$$W-$$W-	.
 r   c                 N   |j                   |    }| dk(  r$	 t        |      dk  st        |      dkD  rt        y | dk(  r$	 t        |      dk  st        |      dkD  rt        y y # t        $ r |j                  d|       Y y w xY w# t        $ r |j                  d|	       Y y w xY w)
NrO   rH      z5Warning! 'group' must be an integer between 1 and 255)msgrO   r      z8Warning! 'priority' must be an integer between 1 and 254)r   r   )paramsint
ValueError	fail_json)paramr   r%   s      r   validate_paramsr   8  s    MM% E	5zA~Uc!1   "2 
*		5zA~Uc!1   "2 
  	N  	  	Q  	s"   "A# "B #BBB$#B$c                  P   t        t        dd      t        d      t        dd      t        dd      t        dd      t        dd      t        ddg dd	      t        ddd
      t        ddgdd      	      } t        | d      }t               }dg |d}|j                  d   }|j                  d   j	                         }|j                  d   }|j                  d   }|j                  d   }|j                  d   }	|j                  d   }
|j                  d   }|j                  d   }t        |      }|j                  dd      }|dk(  r|
s|j                  d       t        |      }|dk7  r?|dk(  r:t        ||      d k(  r|j                  d!|"       |d#k(  r|j                  d$|"       t        |||      \  }}|d%k(  r|j                  d&|"       t        |||	|
|||'      }t        d( |j                         D              }t        ||||      }g }|dk(  rbt        t        |j                               j                  |j                                     }|rIt        |||      }|r:|j!                  |       n(|dk(  r#|r!|j!                  d)j#                  |      g       |rd|j%                  d*d+j#                  |      g       t'        |      }||d,<   d|d-<   |j(                  s!t+        ||       d.|v r|j-                  d*        |j.                  d/i | y )0NTr    )requiredtype)r   Fbool)r   rJ   rq   r   )r   r   choicesrq   )r   r   no_logabsentpresent)r   r   rq   )	rO   r-   r   r   rW   r   r   rX   state)argument_specsupports_check_mode)changedr   warningsr   r-   rO   r   r   rW   r   rX   r   network_apinxapiz.the "vip" param is required when state=present)r   r:   cliconfr*   z3That interface does not exist yet. Create it first.)r   r-   loopbackz'Loopback interfaces don't support VRRP.r@   z>That interface is a layer2 port.
Make it a layer 3 port first.)rO   r   rW   r   rX   r   r   c              3   0   K   | ]  \  }}|	||f  y wr    ).0kvs      r   	<genexpr>zmain.<locals>.<genexpr>  s     Etq!q}QFEs   
	zno vrrp {0}r   zinterface {0}r   r   	configurer   )rg   r   r|   r   r/   r   r   r   r   r5   rF   r   rn   set
differencerz   rs   r.   rt   r   
check_moder	   pop	exit_json)r   r   r   resultsr   r-   rO   r   r   rW   r   rX   r   device_infor   rB   rC   rE   argsproposedrv   r   ru   r   s                           r   mainr   O  s*   Du-%u51u51e&1%e,:	
 UtDHi05)TM  DQFvHRXFGMM'"Ek*002IMM'"E}}Z(H}}Z(HmmI&G
--
C]]#34N--.K"6*K//-9K	#MN"9-IJ;)#;i(E1L#   
"=#  
 $Iy&AJD$xT 	 	

 %D Etzz|EEH E64@HH	S)*55hnn6FGH.uhFG(	(	OO]11%89:O229=>?)&
!	  )h&QFwr   __main__N)
__future__r   r   r   r   __metaclass__DOCUMENTATIONEXAMPLESRETURNansible.module_utils.basicr   Eansible_collections.cisco.nxos.plugins.module_utils.network.nxos.nxosr   r   r	   r
   rr   r   r'   r5   rF   rU   rn   rz   r   r   r   __name__r   r   r   <module>r      s   $ A @ DL0
 5  	 -	"&*#L%P.] @ zF r   