
    Vh$                         d dl mZmZmZ eZdZdZdZd dl	Z	d dl
mZ d dlmZ d dlmZmZmZmZ d	 Zd
 Zd ZddZd Zedk(  r e        yy)    )absolute_importdivisionprint_functionak  
module: nxos_feature
extends_documentation_fragment:
- cisco.nxos.nxos
short_description: Manage features in NX-OS switches.
notes:
- Tested against Cisco MDS NX-OS 9.2(2)
description:
- Offers ability to enable and disable features in NX-OS.
version_added: 1.0.0
author:
- Jason Edelman (@jedelman8)
- Gabriele Gerbino (@GGabriele)
- Suhas Bharadwaj (@srbharadwaj)
options:
  feature:
    description:
    - Name of feature.
    required: true
    type: str
  state:
    description:
    - Desired state of the feature.
    required: false
    default: enabled
    choices:
    - enabled
    - disabled
    type: str
a   
- name: Ensure lacp is enabled
  cisco.nxos.nxos_feature:
    feature: lacp
    state: enabled

- name: Ensure ospf is disabled
  cisco.nxos.nxos_feature:
    feature: ospf
    state: disabled

- name: Ensure vpc is enabled
  cisco.nxos.nxos_feature:
    feature: vpc
    state: enabled
z
commands:
    description: The set of commands to be sent to the remote device
    returned: always
    type: list
    sample: ['nv overlay evpn']
N)AnsibleModule)ConnectionError)get_capabilities
get_configload_configrun_commandsc                    i }d}ddd}	 t        ||g      d   }|j                         }|D ]l  }	 t	        j
                  ||t        j                        }|j                         }	|	d   } |	d   }
| sF|
sId	|
v rd	}
| |vr|
|| <   Y||    d
k(  sb|
d	k(  sh|
|| <   n t        |dg      }t	        j                  d|      D ]  }||vsd	||<    d|vrd
|d<   |S # t        t        f$ r i cY S w xY w# t        $ r d} d}
Y w xY w)Nz&(?P<feature>\S+)\s+\d+\s+(?P<state>.*)zshow featuretext)commandoutputr   featurestate enableddisabledz| include ^feature)flagszfeature\s(.*)zfabric forwarding)r   
splitlinesKeyError
IndexErrorrematchDOTALL	groupdictAttributeErrorr	   findall)r   moduleavailable_featuresfeature_regexr   body
split_bodylinematch_featurefeature_groupr   run_cfgitems                k/home/dcms/DCMS/lib/python3.12/site-packages/ansible_collections/cisco/nxos/plugins/modules/nxos_feature.pyget_available_featuresr*   \   sd   =M(F;GFWI.q1__&
  8	HH]D"))DM)335M#I.G!'*E
 uE!!00.3"7+%g.*<)AS27&w/%8. (<'=>G

+W5 1))'0t$1 "442<./E j! 	  	GE	s"    C ?C1C.-C.1D Dc                     t        |d      }g }| |k(  }|sP|dk(  r$dj                  |      }|j                  |       |S |dk(  r"dj                  |      }|j                  |       |S )Nconfig)moder   zfeature {0}r   zno feature {0})validate_featureformatappend)proposedexistingr   r   r   commandsfeature_checkr   s           r)   get_commandsr5      sv    vH5GH(MI#**73GOOG$ O j &--g6GOOG$O    c            	      0    ddddddddd	d
ddddddd} | S )Nextended_credit
port_track	scpServer
sftpServer	sshServertacacstelnetServer)fcrxbbcredit
port-track
scp-serversftp-serversshtacacs+telnetr?   r@   rA   rB   rC   rD   rE   )r8   r9   r:   r;   r<   r=   r>   showr,    )feature_to_be_mappeds    r)   get_mds_mapping_featuresrJ      sJ     .&%'$
  .&%'$
(  r6   c                    | j                   d   }	 t        |       }|j                  di       }|j                  dd      }|j                  dd      }d|v r ddd	d
dddddddddddddddddddddd d!}n!ddd	d
ddddddddd"d#ddddddddddddd$d%d!}|j	                  d&      r
t               }|||   v r||   |   }|S # t        $ r d}d}Y w xY w)'zSome features may need to be mapped due to inconsistency
    between how they appear from "show feature" output and
    how they are configuredr   device_infonetwork_os_versionr   network_os_platformz8.1nve
vnseg_vlanhsrp_enginefabric_mcastr:   r;   sla_responder
sla_senderr<   r=   r>   elo)
nv overlayvn-segment-vlan-basedhsrpfabric multicastrA   rB   sla responder
sla senderrC   rD   rE   ethernet-link-oamrV   rW   rX   rY   rA   rB   r[   rZ   rC   rD   rE   r\   )rO   rP   rQ   rR   r:   r;   rT   rS   r<   r=   r>   rU   rF   eth-port-sec)rV   rW   rX   rY   rA   rB   rZ   r[   rC   rD   rE   r\   port-securityr^   )rO   rP   rQ   rR   r:   r;   rT   rS   r<   r=   r>   rU   r]   zDS-)paramsr   getr   
startswithrJ   )r   r-   r   inforL   
os_versionos_platformrI   s           r)   r.   r.      sx   
 mmI&G'hh}b1 __%92>
!oo&;R@
 
 $)5%$2)+!0*"#(%* $5% 2)+*!0"# (* 
B $)5%$2)+!0*"#(%*!/  $5% 2)+*!0"# (* /! 
B e$79&t,,&t,W5NW  
s   AC CCc                      t        t        dd      t        ddgd            } t        | d      }t               }t        d	|
      }t        |      }|j                  d   j                         }t        ||      }||vr|j                  d||       na||   }t        |      }t        |      }	d	|d<   t        |	|||      }
|
r/|
j                  dd       |j                  st        ||
       d|d<   
|d<    |j                  di | y )NstrT)typerequiredr   r   )choicesdefault)r   r   )argument_specsupports_check_modeF)changedwarningsr   zInvalid feature name.)msgfeatures_currently_supportedinvalid_feature)r   rm   r   zterminal dont-askr3   rH   )dictr   listr.   r_   lowerr*   	fail_jsonr5   insert
check_moder
   	exit_json)rk   r   rn   resultsr   r   r    
existstater2   r1   cmdss              r)   mainr|   	  s!   %$/Iz2IFM
 DQFvH584Gv&GMM'"((*E/@((');# 	 	
 (0
j)e$"	Hhv> KK./$$FD)!%GIGJFwr6   __main__)rG   )
__future__r   r   r   rg   __metaclass__DOCUMENTATIONEXAMPLESRETURNr   ansible.module_utils.basicr   ansible.module_utils.connectionr   Eansible_collections.cisco.nxos.plugins.module_utils.network.nxos.nxosr   r	   r
   r   r*   r5   rJ   r.   r|   __name__rH   r6   r)   <module>r      sp   $ A @ >"
 
 4 ; *Z 0Wt' T zF r6   