
    gV                         d Z ddlZddlZddlZddlZddlmZ ddlmZ dddd	d
ddZ G d dej                        Z
 G d dej                        Zy)znetplan ip command line    N)CalledProcessError   )utilsz#run/systemd/netif/leases/{lease_id}ifindex)patternmethodz<var/lib/NetworkManager/internal-{lease_id}-{interface}.leasenm_connection)networkdNetworkManagerc                   $     e Zd Z fdZd Z xZS )	NetplanIpc                 *    t         |   ddd       y )Nipz'Retrieve IP information from the systemF
command_iddescriptionleafsuper__init__self	__class__s    1/usr/share/netplan/netplan_cli/cli/commands/ip.pyr   zNetplanIp.__init__*   s    D%N# 	 	%    c                     t               | _        | j                  j                  ddd      }|j	                  | j                  j
                  | j                         | j                          | j                          y )NleasesDisplay IP leasesF)helpadd_help)funccommandclass)NetplanIpLeasescommand_leases
subparsers
add_parserset_defaultsrun
parse_argsrun_command)r   p_ip_leasess     r   r(   zNetplanIp.run/   sn    -/ oo006I:? 1 A 	  d&9&9&=&=DL_L_ `r   )__name__
__module____qualname__r   r(   __classcell__r   s   @r   r   r   (   s    %

r   r   c                   *     e Zd Z fdZd Zd Z xZS )r#   c                 *    t         |   ddd       y )Nz	ip leasesr   Tr   r   r   s    r   r   zNetplanIpLeases.__init__>   s    K%8" 	 	$r   c                     | j                   j                  dd       | j                   j                  dd       | j                  | _        | j	                          | j                          y )N	interfacez1Interface for which to display IP lease settings.)r   
--root-dirzBSearch for configuration files in this root directory instead of /)parseradd_argumentcommand_ip_leasesr!   r)   r*   )r   s    r   r(   zNetplanIpLeases.runC   sa      &Y 	! 	[  &j 	! 	l **	r   c                 Z     j                   dk(  r j                           fd}t        j                         g} j                  r|d j                  gz  }|d j                   gz  }t        j                  d|       	 t        j                  |d      }i }j                  d      }|D ])  }|j                         j                  d      \  }}|||<   +  ||       y # t        $ r@ t        d j                   z  t        j                  	       t        j                  d
       Y w xY w)Nr   c           	         
fd}
fd}t         | d      d   }t         | d      d   }	  t        d|z                }t        j                  j	                  d
j
                  r)t        j                  j                  
j
                        nd|j                  
j                  |	            }t        j                  j                  |      s|j                  d
d      }t        |      5 }|j                         D ]  }t        |j                                 	 d d d        y # 1 sw Y   y xY w# t        $ rS}	t        d
j                  dt!        |	      t"        j$                         t#        j&                  d       Y d }	~	y d }	~	ww xY w)Nc                  D   t         j                  j                  dj                  d      } 	 t	        |       5 }|j                         d   j                         cd d d        S # 1 sw Y   y xY w# t        $ r&}t        j                  d| t        |              d }~ww xY w)Nz/sys/class/netr   r   zCannot read file %s: %s)ospathjoinr4   open	readlinesstrip	Exceptionloggingdebugstr)	ifindex_ffer   s      r   lease_method_ifindexzXNetplanIpLeases.command_ip_leases.<locals>.find_lease_file.<locals>.lease_method_ifindexT   s    GGLL)94>>9U	i 8A {{}Q/5578 8 8  MM";YAOs4   A0 !A$	A0 $A-)A0 -A0 0	B9!BBc                     	 t        j                  ddj                  g      } | j                         D ]  }d|v s|j	                  d      d   j                         j                         }t        j                  ddd|g      }|j                         D ]:  }d|v s|j	                  d      d   j                         j                         c c S   	 t        d
      # t        $ r}t        d	t        |      z        d }~ww xY w)NdevshowzGENERAL.CONNECTION:   conidzconnection.uuidz@Could not find a NetworkManager connection for the interface: %sz<Could not find a NetworkManager connection for the interface)	r   	nmcli_outr4   
splitlinessplitrstriprA   rB   rE   )nmcli_dev_outlineconn_idnmcli_con_outrH   r   s        r   lease_method_nm_connectionz^NetplanIpLeases.command_ip_leases.<locals>.find_lease_file.<locals>.lease_method_nm_connection]   s   
q$)OOUFDNN4S$TM - 8 8 : O/47&*jjoa&8&?&?&A&G&G&IG,1OOUFDRY<Z,[M(5(@(@(B O#4#<+/::c?1+=+D+D+F+L+L+N$NO	O   ^__ ! q#$filmnio$oppqs)   9C! A C! 3C! C! !	D*DDbackendr   r   lease_method_/ )r4   lease_idzNetworkManager/internal-zNetworkManager/dhclient-zNo lease found for interface 'z': filerN   )
lease_pathevalr<   r=   r>   root_dirabspathformatr4   isfilereplacer?   r@   printrT   rB   rE   sysstderrexit)mappingrI   rY   lease_patternlease_methodr^   r=   rG   rV   rH   r   s             r   find_lease_filez:NetplanIpLeases.command_ip_leases.<locals>.find_lease_fileS   sF   ` 'wy'9:9EM%gi&89(CL?4, >?A ww||CFJmmBGGOODMM$BY[$1$8$84>>BJ %9 %LM ww~~d+<<(BD^_D$Z -1 ! -dkkm,-- - -  QTUVQWX::'s7   C D0 +/D$D0 $D-)D0 -D0 0	F9A	FFr5   z	--mappingzcommand ip leases: running %sT)textz:No lease found for interface '%s' (not managed by Netplan)r_   rN   ,=)r4   print_usager   get_generator_pathrc   rC   rD   
subprocesscheck_outputr   rh   ri   rj   rk   rS   rA   )	r   ro   argvoutrl   	mapping_skeyvaluekeyvalues	   `        r   r8   z!NetplanIpLeases.command_ip_leasesN   s   >>V#2	h ((*+==\4==11Ddnn-- 	5t<	))$T:C IIcN	! 	!H!)//4JC GCL	! 	  " 	NQUQ_Q__fifpfpqHHQK	s    C! !AD*)D*)r,   r-   r.   r   r(   r8   r/   r0   s   @r   r#   r#   <   s    $
	K!r   r#   )__doc__rC   r<   ri   ru   r   r]   r   ra   NetplanCommandr   r#    r   r   <module>r      sd   $   	 
  )  9
 R!	
$$ (]!e** ]!r   