
    g,
                         d dl Z d dlmZmZmZmZmZmZ d dlm	Z	  e j                   ej                  e            ZdZdZdZ G d de	      Zy)	    N)config
exceptionshttplogsecret_managerutil)AutoAttachInstancez/dev/lxd/sockz/1.0/ubuntu-proz/1.0/ubuntu-pro/tokenc                   b    e Zd Zedefd       ZdefdZdedefdZdej                  de
fdZy)	LXDAutoAttachInstancereturnc                      y)NT selfs    5/usr/lib/python3/dist-packages/uaclient/clouds/lxd.py	is_viablezLXDAutoAttachInstance.is_viable   s        c                      y)zSYes, but only once - is_pro_license_present doesn't
        support wait_for_changeTr   r   s    r   should_poll_for_pro_licensez1LXDAutoAttachInstance.should_poll_for_pro_license   s     r   wait_for_changec                x   |rt        j                         t        j                  t        dt
              }|j                  dk7  rAt        j                  dt        j                  |j                  |j                               y|j                  j                  dd      d	k7  rt        j                  d
       yy)NGET   z4LXD instance API returned error for ubuntu-pro query)codebody)extraFguest_attachoffonzNguest_attach config is not turned on. The machine will not try to auto-attach.T)r   CancelProLicensePollingr   unix_socket_requestLXD_INSTANCE_API_SOCKET_PATH$LXD_INSTANCE_API_ENDPOINT_UBUNTU_PROr   LOGerrorr   r   r   	json_dictgetinfo)r   r   resps      r   is_pro_license_presentz,LXDAutoAttachInstance.is_pro_license_present   s    4466''(0

 99IIFiiTYYTYY?    >>ne4<HH` r   cfgc                    t        j                  t        dt              }|j                  dk(  rt        j                         |j                  dk(  rt        j                         |j                  dk7  rDt        j                  |j                  dj                  t        t              |j                        |j                  j                  dd      }t        j                  j                  |       |S )	z{
        Cloud-specific implementation of acquiring the pro token using whatever
        method suits the platform
        POSTi  i  r   zunix://{}{})r   urlr   guest_token )r   r!   r"   0LXD_INSTANCE_API_ENDPOINT_UBUNTU_PRO_GUEST_TOKENr   r   LXDAutoAttachNotAvailableLXDAutoAttachNotAllowedExternalAPIErrorformatr   r&   r'   r   secrets
add_secret)r   r+   r)   r/   s       r   acquire_pro_tokenz'LXDAutoAttachInstance.acquire_pro_token1   s    
 ''(<

 996688YY#4466YY#--YY!((0D YY  nn((;))+6r   N)__name__
__module____qualname__propertyboolr   r   r*   r   UAConfigstrr8   r   r   r   r   r      sQ    4  T 
 $ 4V__  r   r   )logginguaclientr   r   r   r   r   r   uaclient.cloudsr	   	getLoggerreplace_top_level_logger_namer9   r$   r"   r#   r1   r   r   r   r   <module>rE      sP     H H .g:::8DE. '8 $3J 0=. =r   