
    p
f-                         d dl Z d dlZd dlZd dlmc mZ d dlmc mc mZ d dl	m
Z
  G d de
      Z G d de      Z G d de      Z G d	 d
e      Z G d de      Z G d de      Zy)    N)DefaultOSUtilc                   V     e Zd Z fdZed        Zd Zd Zd Zd	dZ	d	dZ
d Z xZS )
Ubuntu14OSUtilc                 b    t         t        |           d| _        | j	                         | _        y )NT)superr   __init__jit_enabledget_service_nameservice_nameself	__class__s    F/usr/lib/python3/dist-packages/azurelinuxagent/common/osutil/ubuntu.pyr   zUbuntu14OSUtil.__init__   s)    nd,. 113    c                       y)Nwalinuxagent r   r   r   r
   zUbuntu14OSUtil.get_service_name$   s    r   c                 0    t        j                  dd      S )Nzservice networking startFchk_err	shellutilrunr   s    r   start_networkzUbuntu14OSUtil.start_network(   s    }}7GGr   c                     	 t        j                  d| j                  dg       y# t         j                  $ r}|j                  cY d }~S d }~ww xY w)Nservicestopr   r   run_commandr   CommandError
returncoder   cmd_errs     r   stop_agent_servicez!Ubuntu14OSUtil.stop_agent_service+   sK    	&!!9d.?.?"HI  %% 	&%%%	&   "% AA	A	Ac                     	 t        j                  d| j                  dg       y# t         j                  $ r}|j                  cY d }~S d }~ww xY w)Nr   startr   r   r#   s     r   start_agent_servicez"Ubuntu14OSUtil.start_agent_service2   sK    	&!!9d.?.?"IJ  %% 	&%%%	&r&   c                      y Nr   r   rules_filess     r   remove_rules_filesz!Ubuntu14OSUtil.remove_rules_files9       r   c                      y r+   r   r,   s     r   restore_rules_filesz"Ubuntu14OSUtil.restore_rules_files<   r/   r   c                 $    | j                  d      S )Nz/var/lib/dhcp/dhclient.*.leases)get_endpoint_from_leases_pathr   s    r   get_dhcp_lease_endpointz&Ubuntu14OSUtil.get_dhcp_lease_endpoint?   s    112STTr   ) )__name__
__module____qualname__r   staticmethodr
   r   r%   r)   r.   r1   r4   __classcell__r   s   @r   r   r      s<    4
  HUr   r   c                   $     e Zd Z fdZd Z xZS )Ubuntu12OSUtilc                 *    t         t        |           y r+   )r   r=   r   r   s    r   r   zUbuntu12OSUtil.__init__D   s    nd,.r   c                 (    | j                  ddg      S )Npidof	dhclient3_get_dhcp_pidr   s    r   get_dhcp_pidzUbuntu12OSUtil.get_dhcp_pidH   s    !!7K"899r   )r6   r7   r8   r   rD   r:   r;   s   @r   r=   r=   C   s    /:r   r=   c                   .     e Zd ZdZ fdZd Zd Z xZS )Ubuntu16OSUtilz)
    Ubuntu 16.04, 16.10, and 17.04.
    c                 T    t         t        |           | j                         | _        y r+   )r   rF   r   r
   r   r   s    r   r   zUbuntu16OSUtil.__init__P   !    nd,. 113r   c                 b    t        j                  dj                  | j                        d      S )Nzsystemctl unmask {0}Fr   r   r   formatr   r   s    r   register_agent_servicez%Ubuntu16OSUtil.register_agent_serviceT   s&    }}3::4;L;LMW\]]r   c                 b    t        j                  dj                  | j                        d      S )Nzsystemctl mask {0}Fr   rJ   r   s    r   unregister_agent_servicez'Ubuntu16OSUtil.unregister_agent_serviceW   &    }}1889J9JKUZ[[r   )r6   r7   r8   __doc__r   rL   rN   r:   r;   s   @r   rF   rF   L   s    4^\r   rF   c                   Z     e Zd ZdZ fdZddZd Zd Zd Zd Z	d Z
d	 Zd
 Zd Z xZS )Ubuntu18OSUtilz&
    Ubuntu >= 18.04 and <= 24.04
    c                 T    t         t        |           | j                         | _        y r+   )r   rR   r   r
   r   r   s    r   r   zUbuntu18OSUtil.__init___   rH   r   c                    |dz   }t        d|      D ]  }	 t        j                  g d        y# t        j                  $ r}t	        j
                  dj                  |j                               ||k  r:t	        j                  dj                  |             t        j                  |       nt	        j
                  d       Y d}~d}~ww xY w)z*
        Restart systemd-networkd
           )	systemctlrestartsystemd-networkdz3failed to restart systemd-networkd: return code {1}retrying in {0} secondsexceeded restart retriesN)ranger   r    r!   loggerwarnrK   r"   infotimesleep)r   ifnameretrieswaitretry_limitattemptr$   s          r   
restart_ifzUbuntu18OSUtil.restart_ifc   s     AIQ, 
	<G	<%%&RS
	< )) <QXXY`YkYklm[(KK 9 @ @ FGJJt$KK :;<s   0CBC

Cc                 (    | j                  ddg      S )Nr@   rX   rB   r   s    r   rD   zUbuntu18OSUtil.get_dhcp_pidt   s    !!7,>"?@@r   c                 0    t        j                  dd      S )Nz systemctl start systemd-networkdFr   r   r   s    r   r   zUbuntu18OSUtil.start_networkw   s    }}?OOr   c                 0    t        j                  dd      S )Nzsystemctl stop systemd-networkdFr   r   r   s    r   stop_networkzUbuntu18OSUtil.stop_networkz   s    }}>NNr   c                 "    | j                         S r+   )r   r   s    r   start_dhcp_servicez!Ubuntu18OSUtil.start_dhcp_service}   s    !!##r   c                 "    | j                         S r+   )rj   r   s    r   stop_dhcp_servicez Ubuntu18OSUtil.stop_dhcp_service   s      ""r   c                 b    t        j                  dj                  | j                        d      S )Nzsystemctl start {0}Fr   rJ   r   s    r   r)   z"Ubuntu18OSUtil.start_agent_service   s&    }}299$:K:KLV[\\r   c                 b    t        j                  dj                  | j                        d      S )Nzsystemctl stop {0}Fr   rJ   r   s    r   r%   z!Ubuntu18OSUtil.stop_agent_service   rO   r   c           	         d}t        j                  dj                  |             d }t        j                  |      D ]  }t	        |      5 }|j                         }d d d        j                         D ]  }|j                  d      s|j                  d      d   }t        j                  |d      D cg c]  }t        |d       }	} dj                  |	 }t        j                  d	j                  |               |&t        j                  d
j                  |             |S t        j                  d       |S # 1 sw Y   xY wc c}w )Nz/run/systemd/netif/leases/*z looking for leases in path [{0}]
OPTION_245=rU         z{0}.{1}.{2}.{3}zfound endpoint [{0}]zcached endpoint found [{0}]zcached endpoint not found)r\   r^   rK   globopenread
splitlines
startswithsplittextwrapwrapint)
r   pathglobendpoint
lease_filefleaseline
option_245ioptionss
             r   r4   z&Ubuntu18OSUtil.get_dhcp_lease_endpoint   s/   06==hGH))H- 	IJj! !Q!((* I??<0!%C!3J3;==Q3OPas1bzPGP7077AHKK 6 = =h GHI	I KK5<<XFG  KK34! !
 Qs   E6EE
	      )r6   r7   r8   rP   r   rf   rD   r   rj   rl   rn   r)   r%   r4   r:   r;   s   @r   rR   rR   [   s?    4<"APO$#]\r   rR   c                   &     e Zd Z fdZddZ xZS )UbuntuOSUtilc                 *    t         t        |           y r+   )r   r   r   r   s    r   r   zUbuntuOSUtil.__init__   s    lD*,r   c                 x   |dz   }t        d|      D ]  }t        j                  dj                  |            }|dk(  r yt	        j
                  dj                  ||             ||k  r:t	        j                  dj                  |             t        j                  |       t	        j
                  d        y)z
        Restart an interface by bouncing the link. systemd-networkd observes
        this event, and forces a renew of DHCP.
        rU   z*ip link set {0} down && ip link set {0} upr   Nz&failed to restart {0}: return code {1}rY   rZ   )	r[   r   r   rK   r\   r]   r^   r_   r`   )r   ra   rb   rc   rd   re   return_codes          r   rf   zUbuntuOSUtil.restart_if   s    
 aiQ, 		8G#--(T([([\b(cdKaKK@GGP[\]$5<<TBC

4 67		8r   r   )r6   r7   r8   r   rf   r:   r;   s   @r   r   r      s    -8r   r   c                        e Zd Z fdZ xZS )UbuntuSnappyOSUtilc                 8    t         t        |           d| _        y )Nz'/apps/walinuxagent/current/waagent.conf)r   r   r   conf_file_pathr   s    r   r   zUbuntuSnappyOSUtil.__init__   s     $02Gr   )r6   r7   r8   r   r:   r;   s   @r   r   r      s    H Hr   r   )rv   r|   r_   azurelinuxagent.common.loggercommonr\   &azurelinuxagent.common.utils.shellutilutilsr   %azurelinuxagent.common.osutil.defaultr   r   r=   rF   rR   r   r   r   r   r   <module>r      so   &    . . : : ?#U] #UL:^ :\^ \?^ ?D8> 8,H Hr   