
    d                         d dl Z d dlZ d dlZd dlmZ d dlmc mZ d dlmc mZ d dl	mc m
c mZ d dlmc m
c mZ d dlmZ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 dlmZ d d	lmZ  G d
 de      Zy)    N)datetime)elapsed_millisecondsWALAEventOperation)ProvisionErrorProtocolError)ustr)OVF_FILE_NAME)OvfEnv)ProvisionHandler)cloud_init_is_enabledc                   8     e Zd Z fdZ fdZddZddZ xZS )CloudInitProvisionHandlerc                 *    t         t        |           y )N)superr   __init__)self	__class__s    H/usr/lib/python3/dist-packages/azurelinuxagent/pa/provision/cloudinit.pyr   z"CloudInitProvisionHandler.__init__)   s    '79    c                     	 t         t        |          rt        j                  d       y t        j                         }t        j                  d       | j                          | j                  j                          | j                  dd       | j                         }| j                          t        j                  d       | j                          | j                  dj                  | j!                               dt#        |             y # t$        $ rt}d	j                  t'        |      | j!                               }t        j(                  |       | j                  d
t'        |             | j                  |       Y d }~y d }~ww xY w)Nz)Provisioning already completed, skipping.z&Running CloudInit provisioning handlerProvisioningStartingzFinished provisioningz-Provisioning with cloud-init succeeded ({0}s)T)
is_successdurationz/Provisioning with cloud-init failed: {0} ({1}s)ProvisioningFailed)r   r   check_provisioned_fileloggerinfor   utcnowwait_for_ovfenvprotocol_utilget_protocolreport_not_readywait_for_ssh_host_keywrite_provisionedreport_readyreport_eventformat_get_uptime_secondsr   r   r   error)r   	utc_start
thumbprintemsgr   s        r   runzCloudInitProvisionHandler.run,   s;   	.LNGH )IKK@A  "++-!!.*=335J""$KK/0MTTUYUmUmUop-i8  :  	CJJ4PQ7TXTlTlTnoCLL!!"6Q@c"	s   'D C$D 	FA*FFc           
         t         j                  j                  t        j                         t
              }d}d}t        d|      D ]  }t         j                  j                  |      r<	 t        t        j                  |            }| j                  |j                          y||dz
  k  sg||z  dk(  rWt#        j$                  dj                  |||z
  |             t'               st#        j(                  d       t+        |d	z  |      }t-        j.                  |        t        d
j                  |||z              # t        $ r)}t        dj                  |t!        |                  d}~ww xY w)zQ
        Wait for cloud-init to copy ovf-env.xml file from provision ISO
        
   @  r   Nz&OVF xml could not be parsed [{0}]: {1}   zhWaiting for cloud-init to copy ovf-env.xml to {0} [{1} retries remaining, sleeping {2}s between retries]z(cloud-init does not appear to be enabled   z7Giving up, ovf-env.xml was not copied to {0} after {1}s)ospathjoinconfget_lib_dirr	   rangeisfiler
   fileutil	read_filehandle_provision_guest_agentprovision_guest_agentr   r   r(   r   r   r   r   warnmintimesleep)	r   	max_retry
sleep_timeovf_file_pathlogging_intervalmax_logging_intervalretryovf_envpes	            r   r    z)CloudInitProvisionHandler.wait_for_ovfenvH   sg    T%5%5%7G"1i( 	+Eww~~m,H$X%7%7%FGG55g6S6ST 9q=(//14==CVM4=4E4>>@A  56"KK(RS+./?!/CEY+Z(JJz*-	+.  **0&1:Z1G+IJ 	J# % H( *66<f]=A"X7GH HHs   *9E	E4$E//E4c                    t        j                         }t        j                         }d}d}t        d|      D ]  }t        j
                  j                  |      r_t        j                  dj                  |             	 | j                  d      }t        j                  dj                  |             |c S ||d	z
  k  s||z  dk(  rWt        j                  d
j                  |||z
  |             t               st        j                  d       t        |dz  |      }t        j                   |        t        dj                  |||z              # t        $ r' t        j                  dj                  |             Y w xY w)z>
        Wait for cloud-init to generate ssh host key
        r1   r2   r   zssh host key found at: {0}F)chk_errzThumbprint obtained from : {0}z!Could not get thumbprint from {0}r3   zdWaiting for ssh host key be generated at {0} [{1} attempts remaining, sleeping {2}s between retries]z(cloud-init does not appear to be runningr4   z7Giving up, ssh host key was not found at {0} after {1}s)r8   get_ssh_host_keypair_typeget_ssh_key_public_pathr:   r5   r6   r;   r   r   r(   get_ssh_host_key_thumbprintr   r@   r   rA   rB   rC   )	r   rD   rE   keypair_typer6   rG   rH   rI   r,   s	            r   r$   z/CloudInitProvisionHandler.wait_for_ssh_host_keyj   st    557++-"1i( 	'Eww~~d#8??EFR!%!A!A%!A!PJKK @ G G MN%% y1}$++q0KK !AAG8AE8I8BBDE
 12$NO'*+;a+?AU'V$

:&'	'(  **0&1:Z1G+IJ 	J & RKK C J J4 PQRs    7E-FF)i  r3   )__name__
__module____qualname__r   r/   r    r$   __classcell__)r   s   @r   r   r   (   s    :8 JDJr   r   )r5   os.pathrB   r   azurelinuxagent.common.confcommonr8   azurelinuxagent.common.loggerr   %azurelinuxagent.common.utils.fileutilutilsr<   &azurelinuxagent.common.utils.shellutil	shellutilazurelinuxagent.common.eventr   r    azurelinuxagent.common.exceptionr   r   azurelinuxagent.common.futurer   $azurelinuxagent.common.protocol.utilr	   &azurelinuxagent.common.protocol.ovfenvr
   $azurelinuxagent.pa.provision.defaultr   ,azurelinuxagent.pa.provision.cloudinitdetectr   r    r   r   <module>rf      sQ   ( 
    * * . . 8 8 : : Q J . > 9 A N`J 0 `Jr   