
    hAK                        d dl Z d dlZd dlmZmZmZmZmZ d dlm	Z	m
Z
mZmZmZmZmZmZmZmZ d dlmZmZ d dlmZ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"m#Z#m$Z$ d d
l%m&Z& d dl'm(Z(  ejR                   ejT                  e+            Z, edde-fde-fdeee.ef      fg      Z/de
j`                  de.de-fdZ1	 d@de
j`                  de-dee	jd                     fdZ3de
j`                  de.dee   dee   de.de.de.fdZ4de-dee.ef   dee.   d ee.   d!eee.ef      d"eee.ef      de-fd#Z5de
j`                  d$e.de.de-de-de-d%eee.      dee   dee   d&e/fd'Z6e jn                  e jp                   e jr                  e jt                        d&e;fd(                     Z< e$d)ejz                  ej|                  e<e&j~                  d* e# e"dej                  j                  d+j                   ej                   e
j`                         ,            -      d.d/0       e"d1ej                  d23       e"d4ej                  j                  d)5      d23       e"d6ej                  d23       e"d7ej                  d23       e"d8ej                  j                  d9:      d.d9d;gd9<       e"d=ej                  d.3      g>      g?      ZJy)A    N)AnyDictList
NamedTupleOptional)
apiconfigcontractentitlementsevent_logger
exceptionslockmessagesstatusutil)ServiceWithDependencies_dependencies)EnableOptionsEnableResult_enable)EnabledService_enabled_services)_is_attached)cli_util)ProArgumentProArgumentGroup
ProCommand)HelpCategory)machine_token_EnableOneServiceResultsuccessneeds_rebooterrorcfgvariant
assume_yesc                 p   t        j                  |      }t        j                  |       }t	        j
                  | |j                               }|s |t        j                         y t        |       j                  }t        |       j                  }|D ]   }	t        | |	j                  |d||d ||	       " y )NF)	r$   ent_namer%   access_onlyr&   json_output
extra_argsenabled_servicesall_dependencies)r   &create_interactive_only_print_functionr   get_machine_token_filer
   get_enabled_by_default_servicesr   r   NO_SERVICES_TO_AUTO_ENABLEr   r,   r   services_enable_one_servicename)
r$   r%   r&   r*   interactive_only_printmachine_token_fileservices_to_be_enabledr,   r-   enable_by_default_services
             5/usr/lib/python3/dist-packages/uaclient/cli/enable.py_auto_enable_servicesr:   0   s     &LL '==cB%EE,,. "xBBC(->>$S)22%; 
!.33!#--
	

    r)   progress_objectc                    t        j                  |      }t        j                  | d||      }d}d}	 t	        j
                  d      5  |j                  |      \  }}ddd       |sB||j                  |j                  }	nt        j                  }	t        j                  d|	      t        dgg dg 	      S # 1 sw Y   ]xY w# t        $ r}t	        j                          |d}~ww xY w)
a  
    Landscape gets special treatment because it currently not supported by our
    enable API. This function is a temporary workaround until we have a proper
    API for enabling landscape, which will happen after Landscape is fully
    integrated with the contracts backend.
    	landscape)called_namer)   r+   FNzcli.enable._enable_landscape)lock_holder)progress)servicereason)enableddisabledreboot_requiredr   )r   ProgressWrapperr   LandscapeEntitlementr   	RetryLockenable	Exceptionclear_lock_file_if_presentmessager   GENERIC_UNKNOWN_ISSUEr   EntitlementNotEnabledErrorr   )
r$   r)   r+   r<   rA   r>   r!   fail_reasonerC   s
             r9   _enable_landscaperR   S   s    ""?3H11	I GK^^6
 	G $-#3#3X#3#F G[	G "{':':'F ((F33F33
 	
 EB !	G 	G  '')s/   C 
B< C <CC 	C,C''C,rB   r-   r,   r?   service_titlec                    g }g }|D 	cg c]  }	|	j                    }
}	t        fd|D        d       }|b|j                  D 	cg c]  }	|	j                   |
v r|	j                    }}	|j                  D 	cg c]  }	|	j                   |
vr|	j                    }}	|D ]  }t	        j
                  | j                  d      }t        j                  | |      }t        j                  j                  ||      }|st	        j                  |      rtt        j                  ||       |D ]f  }t        j                  | |      }t        j                  j                  ||      }t	        j                  |      rQt        j                   ||       t        fd|D        d       }|t        j                  |       }t        j                  | |j"                        }t	        j
                  | j                  d      }t        j                  j                  ||      }|st	        j                  |      st        j                  ||      y y y c c}	w c c}	w c c}	w )Nc              3   B   K   | ]  }|j                   k(  s|  y wN)r4   ).0srB   s     r9   	<genexpr>z1prompt_for_dependency_handling.<locals>.<genexpr>   s     :q'(9:s   z features.block_disable_on_enable)r	   path_to_value)service_being_enabledincompatible_service)msg)r[   required_servicec              3   v   K   | ]0  }|j                   k(  r|j                  r|j                  k7  r| 2 y wrV   r4   variant_enabledvariant_name)rW   rX   rB   r%   s     r9   rY   z1prompt_for_dependency_handling.<locals>.<genexpr>   s:      	
vv !!')	 	
s   69)r4   nextincompatible_with
depends_onr   is_config_value_truer$   r   	get_titler   INCOMPATIBLE_SERVICEformatprompt_for_confirmationr   IncompatibleServiceStopsEnableREQUIRED_SERVICERequiredServiceStopsEnablerb   )r$   rB   r-   r,   r?   r%   rS   incompatible_servicesrequired_servicesrX   enabled_service_namesdependenciesr\   cfg_block_disable_on_enableincompatible_service_titleuser_msgr^   required_service_titlera   to_be_enabled_titleenabled_variant_titles    `   `               r9   prompt_for_dependency_handlingrx      s    -=>QVV>>:$:DL  "33!
vv.. FF!
 !
 ",,
vv22 FF
 
 !6 &*&?&?77<'
# &2%;%;%&
" 0077"/!; 8 
 'd.J.J/
 ;;&3%? ( . 
!-!7!7=M!N,,33"/3 4 
 ++977&3!7 
 	
%	
 		O "w':*44S'7K , 6 6/66!
 '+&?&?77<'
# 0077"5!6 8 
 'd.J.J/
 ;;&9%: /
 (;"w ?!


s   I!I6!I"r*   json_responseprocessed_servicesfailed_serviceserrorswarningsc                     | rm|j                          |j                          |rdnd|d<   ||d<   ||d<   ||d<   ||d<   t        t        j                  |t        j
                  d	             y y )
Nr!   failureresultrz   r{   r|   r}   T)cls	sort_keys)sortprintjsondumpsr   DatetimeAwareJSONEncoder)r*   ry   rz   r{   r|   r}   r!   s          r9   _print_json_outputr      s     !/6)Ih.@*++:'("(h$,j!JJ11	
 r;   r(   r+   returnc	                    t        j                  |      }	t        j                  | |||      }
|
j                  |
j
                  }t        fd|D        d       }|t        j                  j                  |      } |	|j                          |	t        j                  j                  |             t        ddd||j                  |j                  d      S |s	 t        | ||||       	 |rd }nt        j$                  |	      }d
k(  rt'        | |||      }nt)        t+        ||      | |      }t-        j,                  |        |r' |	t        j.                  j                  |             n& |	t        j0                  j                  |             |j2                  }|r& |	t        j4                  j                  d             |j                  D ]
  } |	|        t        d|d       S # t        j                  $ re}t         j#                  |        |	|j                          |	t        j                  j                  |             t        ddd       cY d }~S d }~ww xY w# t        j6                  $ rj}|j8                  d   }|d   }|d   }|d   } |	|        |	t        j                  j                  |             t        ddd||||d      cY d }~S d }~wt        j                  $ rt} |	|j                          |	t        j                  j                  |             t        ddd||j                  |j:                  |j8                  d      cY d }~S d }~ww xY w)N)r%   r)   r+   c              3   z   K   | ]2  }|j                   k(  r!r|j                  r|j                  k(  r| 4 y wrV   r`   )rW   rX   	real_namer%   s     r9   rY   z&_enable_one_service.<locals>.<genexpr>  s<      	
vv"%%!..G*C 	
s   8;)titleFrB   )typerB   rM   message_code)r!   r"   r#   )r?   r%   rS   )r&   r>   )r+   r<   )rB   r%   r)   )r<   r$   install)	operationTrC   coder   additional_infor   rB   rM   r   r   )r   r.   r   entitlement_factoryr4   r   rc   r   ALREADY_ENABLEDri   r]   ENABLE_FAILEDr    rx   r   UbuntuProErrorLOG	exceptionCLIEnableDisableProgressrR   r   r   r   ACCESS_ENABLED_TMPLENABLED_TMPLrF   ENABLE_REBOOT_REQUIRED_TMPLrO   r   msg_code)r$   r(   r%   r)   r&   r*   r+   r,   r-   r5   ent	ent_titlealready_enabledr]   rQ   rA   enable_resultr"   rM   rC   err_codeerr_msgerr_infor   s     `                    @r9   r3   r3      s    &LL 
*
*C I		I	
%	
 	O "&&--I->sww'x55<<9<MN&!#77 #		
 		
 	*  $'*S
H88JOH#-% (	M $$# +
  (M 	#",,33)3D #%%,,9,= %44"44;;' <  %-- 	,G"7+	, '%
 	
u (( 
	MM!"155)"&&--I-> +" 
	@ 00 
""8,&>/+,w'x55<<9<MN&!#" (#+

 
	
 $$ 
quu%x55<<9<MN&!#55 !

#$#4#4

 
	

sR   $H 7D	I< I9AI4.I94I9<M>AK4.M>4M>
A)M93M>9M>c                d   g }g }g }g }t         j                  dd}| j                  dk(  }t        j                  |      }	t        | dd      }
| j                  }| j                  }| j                  }|
r|rt        j                  dd      |
r|rt        j                  dd	      |r|rt        j                  dd	       |	t        j                         	 t        j                  |d
       t/        |      j0                  sbt        j2                         } |	|j*                         |j'                  d|j*                  |j4                  d       t7        ||||||d       y|rt9        |dd|      S t        | dg       }|st        j:                         t=        j>                  ||      \  }}tA        |      jB                  }tE        |      jF                  }d}t=        jH                  ||      D ]  }tK        |||
||||jM                  d      ||	      }|jN                  r$|j'                  |       |jP                  sOd|d<   Ud}|j'                  |       |jR                  u|j'                  |jR                          |red}||z  }t=        jT                  ||      } |	|j*                         |j'                  dd|j*                  |j4                  |jV                  d       t        jX                  |      }|j[                          t7        |||||||       |rdS dS # t        j                  t        j                   f$ r` t"        j%                  dd       |j'                  dt        j(                  j*                  t        j(                  j,                  d       Y w xY w)z^Perform the enable action on a named entitlement.

    @return: 0 on success, 1 otherwise
    F)_schema_versionr"   r   r%    --access-only	--variant)option1option2--auto)verbosezFailed to refresh contractT)exc_infosystem)r   rM   r   )r!      )r$   r%   r&   r*   rB   r+   r"   Nr   r   r   ).r   JSON_SCHEMA_VERSIONri   r   r.   getattrr)   r&   autor   InvalidOptionCombinationr   REFRESH_CONTRACT_ENABLEr
   refreshConnectivityErrorr   r   warningappendE_REFRESH_CONTRACT_FAILUREr]   r4   r   is_attached_and_contract_validContractExpiredErrorr   r   r:   NoServicesToEnabler   get_valid_entitlement_namesr   r,   r   r2   order_entitlements_for_enablingr3   getr!   r"   r#   *create_enable_entitlements_not_found_errorr   UAContractClientupdate_activity_token)argsr$   kwargsrz   r{   r|   r}   ry   r*   r5   r%   r)   r&   r   expired_errnamesentitlements_foundentitlements_not_foundr,   r-   retr(   r   errcontract_clients                            r9   action_enabler     s    OFH (;;M
 ++'K
 &LL dIr*G""KJ99D;11#[
 	
 411
 	
 t11#X
 	
 8;;<
e, ;; 557{/ &?? + 4 4	
 		
 $#	
 	
 D)R(E++--
 	00<(->>$S)22
C @@ , %JJ|$

 >>%%h/""04n-C""8,||'fll+-,0 11EE"
 	sww' 77 ##&#6#6	
 //4O))+ 1U ((**C*CD 	
04@ #>>BB ( C C H H	
	
s   L, ,A?N/.N/rJ      z, r   )optionsstore*)helpactionnargsr   
store_true)r   r   z--assume-yes)commandr   z--betaz--formatcli)defaultr   )r   r   choicesr   r   )	arguments)r   descriptionr   help_categoryhelp_positionargument_groupsrV   )Kr   loggingtypingr   r   r   r   r   uaclientr   r	   r
   r   r   r   r   r   r   r   +uaclient.api.u.pro.services.dependencies.v1r   r   %uaclient.api.u.pro.services.enable.v1r   r   r   -uaclient.api.u.pro.status.enabled_services.v1r   r   (uaclient.api.u.pro.status.is_attached.v1r   uaclient.clir   uaclient.cli.commandsr   r   r   uaclient.cli.parserr   uaclient.filesr   	getLoggerreplace_top_level_logger_name__name__r   boolstrr    UAConfigr:   AbstractProgressrR   rx   r   r3   verify_json_format_argsassert_rootassert_attached&_raise_enable_disable_unattached_errorintr   CLI_ROOT_ENABLECLI_ENABLE_DESC
QUICKSTARTCLI_ENABLE_SERVICEri   joinvalid_servicesCLI_ENABLE_ACCESS_ONLYCLI_ASSUME_YESCLI_ENABLE_AUTOCLI_ENABLE_BETACLI_FORMAT_DESCCLI_ENABLE_VARIANTenable_command r;   r9   <module>r     s     8 8   
 B ! K K , (g:::8DE$	D		(4S>*+  
	 
 
  
N 7;	)	)) c223	)XY	YY 23Y >*	Y
 Y Y Yx

S>
 S	
 #Y	

 c3h 
 4S>"
 
8_
	_
_
 _
 	_

 _
 _
 c#_
 >*_
 23_
 _
D 
!!	(IIJYS Y K  "Yx 		!	!(())!44;; $		7L77OFOO<MN! < 
 #	 #!88'
 "!00777I'
 !11'
 !11'
 !11888G""FO! !44"M+-	
/7r;   