
    p
fQ-                         d dl Z d dlZ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 d dlmZmZmZmZmZ d dlmZ d dlmZmZ d dlmZ d dlmZ d dlmZ d	 Z G d
 de       Z! G d de       Z"y)    N)version)_AGENT_DROP_IN_FILE_SLICE_DROP_IN_FILE_CPU_ACCOUNTING_DROP_IN_FILE_CPU_QUOTA_DROP_IN_FILE_MEMORY_ACCOUNTINGLOGCOLLECTOR_SLICE)ProtocolError)
get_osutilsystemd)PersistFirewallRulesHandler)get_protocol_util)HANDLER_COMPLETE_NAME_PATTERNc                 Z    t         j                  d   dk\  rt        |       S t        |       S )Nr      )sysversion_infoinput	raw_input)messages    H/usr/lib/python3/dist-packages/azurelinuxagent/pa/deprovision/default.py
read_inputr   &   s,    
aW~
 !!    c                       e Zd ZddZd Zy)DeprovisionActionNc                 >    |g }|i }|| _         || _        || _        y Nfuncargskwargs)selfr   r   r    s       r   __init__zDeprovisionAction.__init__1   s+    <D>F		r   c                 P     | j                   | j                  i | j                   y r   r   r!   s    r   invokezDeprovisionAction.invoke:   s    		499,,r   )NN)__name__
__module____qualname__r"   r%    r   r   r   r   0   s    -r   r   c                       e Zd Zd Zd Zd Zd Zd Zd Zd Z	d Z
d	 Zd
 Zd Zd Zd Zd ZddZd Zd ZddZd Zd Zed        Zed        Zy)DeprovisionHandlerc                     t               | _        t               | _        d| _        t        j
                  t
        j                  | j                         y )NF)r
   osutilr   protocol_utilactions_runningsignalSIGINThandle_interrupt_signalr$   s    r   r"   zDeprovisionHandler.__init__?   s6     l.0$fmmT%A%ABr   c                     |j                  d       |j                  t        | j                  j                               y )NzOWARNING! root password will be disabled. You will not be able to login as root.)appendr   r-   del_root_passwordr!   warningsactionss      r   r5   z$DeprovisionHandler.del_root_passwordE   s3     A 	B 	()F)FGHr   c                 T   	 | j                   j                         }|j                  }|j                  dj                  |             |j                  t        | j                  j                  |g             y # t        $ r% |j                  d       |j                  d       Y y w xY w)Nz"WARNING! ovf-env.xml is not found.zWARNING! Skip delete user.z?WARNING! {0} account and entire home directory will be deleted.)	r.   get_ovf_envr	   r4   usernameformatr   r-   del_account)r!   r7   r8   ovfenvr;   s        r   del_userzDeprovisionHandler.del_userK   s    	''335F ?? ,-3VH-=	?()@)@*25 	6  	OO@AOO89	s   A9 9+B'&B'c                     |j                  d       |j                  t        t        j                  t	        j
                         g             y )Nz0WARNING! All SSH host key pairs will be deleted.)r4   r   fileutilrm_filesconfget_ssh_key_globr6   s      r   regen_ssh_host_keyz%DeprovisionHandler.regen_ssh_host_keyZ   s:    JK():):..013 	4r   c                     |j                  d       |j                  t        | j                  j                               y )Nz-WARNING! The waagent service will be stopped.)r4   r   r-   stop_agent_servicer6   s      r   rG   z%DeprovisionHandler.stop_agent_service_   s+    GH()G)GHIr   c                     t        j                         t        j                         g}|j                  t	        t
        j                  |             y r   )rC   get_lib_dirget_ext_log_dirr4   r   rA   rm_dirs)r!   r7   r8   dirss       r   del_dirszDeprovisionHandler.del_dirsc   s8      "D$8$8$:;()9)94@Ar   c                     dt        j                         g}|j                  t        t        j
                  |             |j                  t        t        j
                  g d             y )Nz/root/.bash_history)z/etc/random.seedz/var/db/host.randomz/etc/isakmpd/local.pubz/etc/isakmpd/private/local.keyz/etc/iked/private/local.keyz/etc/iked/local.pub)rC   get_agent_log_filer4   r   rA   rB   )r!   r7   r8   filess       r   	del_fileszDeprovisionHandler.del_filesg   sU    &(?(?(AB():):EBC 	():):*AB 	Cr   c                 ~    |j                  d       dg}|j                  t        t        j                  |             y )Nz*WARNING! /etc/resolv.conf will be deleted.z/etc/resolv.conf)r4   r   rA   rB   )r!   r7   r8   files_to_dels       r   
del_resolvzDeprovisionHandler.del_resolvt   s1    DE*+():):LIJr   c                 |   |j                  d       g d}|j                  t        t        j                  |             |j                  t        t        j                  dg             |j                  t        t        j                  dg             |j                  t        t        j                  dg             y )Nz,WARNING! Cached DHCP leases will be deleted.)z/var/lib/dhclientz/var/lib/dhcpcdz/var/lib/dhcpz/var/db/dhclient.leases.*z(/var/lib/NetworkManager/dhclient-*.leasez/run/systemd/netif/leases/*)r4   r   rA   rK   rB   )r!   r7   r8   dirs_to_dels       r   del_dhcp_leasez!DeprovisionHandler.del_dhcp_leasey   s    FGO()9)9;GH 	():):*E)FH 	I 	():):*T)UW 	X 	():):*G)HJ 	Kr   c           	      
   t        j                  t        j                               D cg c]  }t         j                  j                  t         j                  j                  t        j                         |            r1t        j                  t        |      t        j                  |      s| }}|D ]F  }t         j                  j                  t        j                         |      }t        j                  t         j                  j                  |dd            }|t        j                  t         j                  j                  |dd            z  }|t        j                  t         j                  j                  |dd            z  }|t        j                  t         j                  j                  |d            z  }t        |      dkD  s|j                  t        t         j"                  |             I y c c}w )Nstatusz*.statusconfigz
*.settingsHandlerStatusmrseqr   )oslistdirrC   rI   pathisdirjoinrematchr   r   is_agent_pathgloblenr4   r   rA   rB   )r!   r7   r8   dext_dirsext_dirext_baserP   s           r   del_ext_handler_filesz(DeprovisionHandler.del_ext_handler_files   s[   !zz$*:*:*<= 6!ww}}RWW\\$2B2B2Da%HI!>BN#11!4  6 6
   	LGww||D$4$4$6@HIIbggll8XzJKETYYrww||HhMNNETYYrww||HhPQQETYYrww||Hg>??E5zA~01B1BEJK	L6s   BH c                    g d}g d}t        j                         }|D cg c]"  }t        j                  j	                  ||      $ c}D cg c]#  }t        j                  j                  |      r|% }}|D ]8  }	|t        j                  t        j                  j	                  ||	            z  }: t        |      dkD  r*|j                  t        t        j                  |             y y c c}w c c}w )N)zHostingEnvironmentConfig.xmlIncarnation	partitionProtocolzSharedConfig.xmlWireServerEndpoint)zExtensions.*.xmlzExtensionsConfig.*.xmlzGoalState.*.xmlr   )rC   rI   r]   r_   ra   isfilere   rf   r4   r   rA   rB   )
r!   r7   r8   known_filesknown_files_globlib_dirkffrP   ps
             r   del_lib_dir_filesz$DeprovisionHandler.del_lib_dir_files   s    

 ""$9DE2RWW\\'2.E.q77>>!,  . . " 	9ATYYrww||GQ788E	9 u:>NN,X->->FG  F.s   'C-(C2c                     dg}|j                  t        | j                  j                  |             |j                  t        | j                  j                  |             y )Nzlocalhost.localdomain)r4   r   r-   set_hostnameset_dhcp_hostname)r!   r7   r8   	localhosts       r   reset_hostnamez!DeprovisionHandler.reset_hostname   sP    ,-	()A)A)24 	5()F)F)24 	5r   c                    g }g }| j                  ||       t        j                         r| j                  ||       | j	                  ||       | j                  ||       t        j                         r| j                  ||       | j                  ||       | j                  ||       | j                  ||       |r| j                  ||       | j                  |       | j                  |       ||fS r   )rG   rC   get_regenerate_ssh_host_keyrE   rW   r}   get_delete_root_passwordr5   rM   rQ   rT   r?   del_persist_firewall_rulesremove_agent_cgroup_config)r!   deluserr7   r8   s       r   setupzDeprovisionHandler.setup   s    '2++-##Hg6Hg.Hg.((*""8W5h(x)'*MM(G,''0''0  r   c                     g }g }| j                  ||       | j                  ||       | j                  ||       | j                  |       | j	                  |       ||fS r   )rW   rx   rk   r   r   r6   s      r   setup_changed_unique_idz*DeprovisionHandler.setup_changed_unique_id   sc    Hg.x1""8W5''0''0  r   c                     | j                  |      \  }}| j                  |       | j                  |      r| j                  |       y y )N)force)r   do_warningsdo_confirmation
do_actions)r!   r   r   r7   r8   s        r   runzDeprovisionHandler.run   sE     JJw/'"e,OOG$ -r   c                 n    | j                         \  }}| j                  |       | j                  |       y)a  
        Clean-up files and directories that may interfere when the VM unique
        identifier has changed.

        While users *should* manually deprovision a VM, the files removed by
        this routine will help keep the agent from getting confused
        (since incarnation and extension settings, among other items, will
        no longer be monotonically increasing).
        N)r   r   r   r6   s      r   run_changed_unique_idz(DeprovisionHandler.run_changed_unique_id   s1     !88:'" r   c                 N    d| _         |D ]  }|j                           d| _         y )NTF)r/   r%   )r!   r8   actions      r   r   zDeprovisionHandler.do_actions   s*    # 	FMMO	$r   c                 d    |ryt        d      }|j                         j                  d      rdS dS )NTzDo you want to proceed (y/n)yF)r   lower
startswith)r!   r   confirms      r   r   z"DeprovisionHandler.do_confirmation   s1    ;<}}11#6tAEAr   c                 (    |D ]  }t        |        y r   )print)r!   r7   warnings      r   r   zDeprovisionHandler.do_warnings  s     	G'N	r   c                 r    | j                   s t        d       t        j                  d       t        d       y )NzDeprovision is interrupted.r   z&Deprovisioning may not be interrupted.)r/   r   r   exit)r!   signumframes      r   r2   z*DeprovisionHandler.handle_interrupt_signal  s+    ##/0HHQK78r   c           
          t        j                         }| j                  t        t        j
                  |t        j                  j                  t        j                         t         j                        g             y r   )r   get_service_file_pathr4   r   rA   rB   r]   r_   ra   rC   rI   BINARY_FILE_NAME)r8   agent_network_service_paths     r   r   z-DeprovisionHandler.del_persist_firewall_rules  s^    %@%V%V%X"():):*DbggllSWScScSe*E*V*VGX *YZ 	[r   c           
         t        j                         }t        j                  j	                  |t
              }t        j                  j	                  |t              }t        j                  j	                  |t              }t        j                  j	                  |t              }t        j                         }t        j                  j	                  |t              }| j                  t        t        j                  |||||g             y r   )r   get_agent_drop_in_pathr]   r_   ra   r   r   r   r   get_unit_file_install_pathr   r4   r   rA   rB   )r8   agent_drop_in_path
slice_pathcpu_accounting_pathcpu_quota_pathmem_accounting_pathunit_file_install_pathlog_collector_slice_paths           r   r   z-DeprovisionHandler.remove_agent_cgroup_config  s     %;;=WW\\"46OP
 ggll+=?[\&8:QR ggll+=?^_ ")!C!C!E#%77<<0FHZ#[ ():):*46I>[n*B*DE 	Fr   N)FF)F)r&   r'   r(   r"   r5   r?   rE   rG   rM   rQ   rT   rW   rk   rx   r}   r   r   r   r   r   r   r   r2   staticmethodr   r   r)   r   r   r+   r+   >   s    CI64
JBCK
K"L H25!4
!%!%B [ [ F Fr   r+   )#re   os.pathr]   rb   r0   r   azurelinuxagent.common.confcommonrC   %azurelinuxagent.common.utils.fileutilutilsrA   azurelinuxagent.commonr   )azurelinuxagent.common.cgroupconfiguratorr   r   r   r   r    azurelinuxagent.common.exceptionr	   azurelinuxagent.common.osutilr
   r   -azurelinuxagent.common.persist_firewall_rulesr   $azurelinuxagent.common.protocol.utilr   azurelinuxagent.ga.exthandlersr   r   objectr   r+   r)   r   r   <module>r      sa   (   	  
 * * 8 8 *Q Q : = U B H"- -gF gFr   