
    Vhj                         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 ddi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_udld
extends_documentation_fragment:
- cisco.nxos.nxos
short_description: Manages UDLD global configuration params.
description:
- Manages UDLD global configuration params.
version_added: 1.0.0
author:
- Jason Edelman (@jedelman8)
notes:
- Tested against NXOSv 7.3.(0)D1(1) on VIRL
- Unsupported for Cisco MDS
- Module will fail if the udld feature has not been previously enabled.
options:
  aggressive:
    description:
    - Toggles aggressive mode.
    choices:
    - enabled
    - disabled
    type: str
  msg_time:
    description:
    - Message time in seconds for UDLD packets or keyword 'default'.
    type: str
  reset:
    description:
    - Ability to reset all ports shut down by UDLD. 'state' parameter cannot be 'absent'
      when this is present.
    type: bool
  state:
    description:
    - Manage the state of the resource. When set to 'absent', aggressive and msg_time
      are set to their default values.
    default: present
    choices:
    - present
    - absent
    type: str
a  
# ensure udld aggressive mode is globally disabled and se global message interval is 20
- cisco.nxos.nxos_udld:
    aggressive: disabled
    msg_time: 20
    host: '{{ inventory_hostname }}'
    username: '{{ un }}'
    password: '{{ pwd }}'

# Ensure agg mode is globally enabled and msg time is 15
- cisco.nxos.nxos_udld:
    aggressive: enabled
    msg_time: 15
    host: '{{ inventory_hostname }}'
    username: '{{ un }}'
    password: '{{ pwd }}'
a  
proposed:
    description: k/v pairs of parameters passed into module
    returned: always
    type: dict
    sample: {"aggressive": "enabled", "msg_time": "40"}
existing:
    description:
        - k/v pairs of existing udld configuration
    returned: always
    type: dict
    sample: {"aggressive": "disabled", "msg_time": "15"}
end_state:
    description: k/v pairs of udld configuration after module execution
    returned: always
    type: dict
    sample: {"aggressive": "enabled", "msg_time": "40"}
updates:
    description: command sent to the device
    returned: always
    type: list
    sample: ["udld message-time 40", "udld aggressive"]
changed:
    description: check to see if a change was made on the device
    returned: always
    type: bool
    sample: true
)AnsibleModule)load_configrun_commandsmsg_time15c                 ~    g }| D ]5  }t        |t              r|j                  |       %|j                  |       7 |S N)
isinstancelistextendappend)command_listsflat_command_listcommands      h/home/dcms/DCMS/lib/python3.12/site-packages/ansible_collections/cisco/nxos/plugins/modules/nxos_udld.pyflatten_listr   {   sE      .gt$$$W-$$W-	.
     c                     i }|j                         D ]@  \  }}| j                  |      }|s|j                  |      }|rt        |      ||<   <|||<   B |S r   )itemsgetstr)key_maptablenew_dictkeyvaluenew_keys         r   apply_key_mapr!      s`    Hkkm *
U++c"IIcNE$'J!$)!* Or   c                 V   g }| j                         D ]~  \  }}|dk(  r|dk(  rdnd}|j                  |       &|dk(  s,|dk(  r:|j                  d      t        j                  d      k7  sY|j                  d       k|j                  d|z           |rd	}|j                  |       |S )
N
aggressiveenabledzudld aggressiveno udld aggressiver	   defaultno udld message-timezudld message-time z
udld reset)r   r   r   PARAM_TO_DEFAULT_KEYMAP)deltaresetexistingcommandsparamr   r   s          r   get_commands_config_udld_globalr.      s    H 	>uL +0I+='CWGOOG$j 	!<<
+/F/J/J:/VVOO$:; 4u <=	>  Or   c                     g }| j                  d      dk(  rd}|j                  |       | j                  d      t        j                  d      k7  rd}|j                  |       |S )Nr#   r$   r%   r	   r'   )r   r   r(   )r+   r,   r   s      r   get_commands_remove_udld_globalr0      s\    H||L!Y.& ||J#:#>#>z#JJ( Or   c                     d}t        | |g      d   }t        |j                  dd             }|dk(  rd}nd}t        |j                  dd             }t        ||      }|S )	Nzshow udld global | jsonr   zudld-global-modezenabled-aggressiver$   disabledzmessage-interval)r	   r#   )r   r   r   dict)moduler   
udld_tablestatusr#   intervaludlds          r   get_udld_globalr9      sj    'Gfwi03J 2D9:F%%

:>>"4d;<Hj9DKr   c            	         t        t        dddg      t        dd      t        dd      t        dd	gd	
            } t        | d      }t               }|j                  d   }|j                  d   }|j                  d   }|j                  d   }|r|dk(  r|j	                  d       t        |||      }t        d |j                         D              }t        |      }	|	}
t        |j                               j                  |	j                               }d}g }|d	k(  r*|rKt        t        |      ||	      }|j                  |       n#|dk(  rt        |	      }|r|j                  |       t        |      }|rN|j                  r|j                  d|       n.d}t        ||       t        |      }
d|v r|j!                  d       i }||d<   |	|d<   |
|d<   ||d<   ||d<   ||d<    |j                  di | y ) NFr$   r2   )requiredchoicesr   )r;   typeboolabsentpresent)r<   r&   )r#   r	   r*   stateT)argument_specsupports_check_moder#   r	   r*   rA   z,state must be present when using reset flag.)msg)r#   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   
	)changedr,   	configurer   proposedr+   	end_stateupdatesrK   warningsrF   )r3   r   r   params	fail_jsonr   r9   set
differencer.   r   r0   r   
check_mode	exit_jsonr   pop)rB   r4   rP   r#   r	   r*   rA   argsrM   r+   rN   r)   rK   r,   r   cmdsresultss                    r   mainr[      s   J0GHu51E/Hi0)D	M DQFvH|,J}}Z(HMM'"EMM'"E("KL:FDEtzz|EEHv&HI !,,X^^-=>EGH	5d5k5(SGOOG$	(	1(;OOG$!DTD9G%'/Id"G"GJ"GJ$GKGI GI"GJ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   r!   r.   r0   r9   r[   __name__rF   r   r   <module>re      su   $ A @ (R$
: 5 &t, 
$ ; | zF r   