
    x[h4                        % S r SSKrSSKrSSKrSSKrSSKrSSKJr  SSKJ	r	J
r
JrJrJr  SSKJr  SSKJr  SSKJr  SSKJr  SS	KJr  S
rSrSrSSS.rSrSrSrSrSSS\SS\SSSSSS.r \!" S/5      r"\!" / SQ5      r#\!" / \ RI                  5       Q\"Q\#QSPSPSPS PS!P5      r%S"r&S#r'S$r(\RR                  " \*5      r+S%S&/\S'/S(.r,\\-S)'   S* r.S+ r/S, r0S-\1S.\S/\S0\2S1S4
S2 jr3S3 r4S4\S0\24S5 jr5 S:S4\4S6 jjr6S/\4S7 jr7S1\\1   4S8 jr8S9 r9g);z7Chef: module that configures, starts and installs chef.    N)List)subp
temp_utils	templater
url_helperutil)Cloud)Config)
MetaSchema)Distro)
PER_ALWAYS1.8)	/etc/chefz/var/log/chefz/var/lib/chef/var/chef/cache/var/chef/backupz/var/run/chef)r   r   r   )z/var/cache/chefz/var/backups/chefz#https://www.chef.io/chef/install.sh   z/etc/chef/validation.pemz/etc/chef/firstboot.jsonz:verify_nonez:infoz/var/log/chef/client.logz/etc/chef/client.pemz/var/run/chef/client.pidT)ssl_verify_mode	log_levellog_locationvalidation_keyvalidation_cert
client_keyjson_attribsfile_cache_pathfile_backup_pathpid_file	show_timeencrypted_data_bag_secretr   )r   r   r   r   r   r   r   
server_url	node_nameenvironmentvalidation_namechef_licensez/etc/chef/client.rbz/usr/bin/chef-client)z-dz-i1800z-s20cc_chefallchef)iddistros	frequencyactivate_by_schema_keysmetac                     [         R                  " U SSS9nU(       aD  [        R                  R	                  [
        5      (       a  [        R                  " [
        5        g g g )Ndelete_validation_post_execFdefault)r   get_cfg_option_boolospathisfileCHEF_VALIDATION_PEM_PATHunlink)chef_cfg
delete_pems     :/usr/lib/python3/dist-packages/cloudinit/config/cc_chef.pypost_run_chefr;   g   sF    ))/J bggnn%=>>
		*+ ?z    c           
         [         R                  5       nUR                  5        Hl  u  p4U[        ;  a  [        R                  SU5        M'  Uc  S X#'   M0  U[        ;   a  [        R                  " X5      X#'   MT  [        R                  " X5      X#'   Mn     UR                  [        R                  " 5       [        R                  " USU S9[        R                  " USSS9US   US   S.5        U$ )	Nz'Skipping unknown chef template key '%s'r    r0   r!   _defaultr   r"   )generated_byr    r!   r   r"   )CHEF_RB_TPL_DEFAULTScopyitemsCHEF_RB_TPL_KEYSLOGdebugCHEF_RB_TPL_BOOL_KEYSr   r2   get_cfg_option_strupdatemake_header)iidr8   paramskvs        r:   get_template_paramsrN   o   s    !&&(F  $$II?C9FI )) 44XA	 33H@	 ! MM ,,.00+s  22- #<0'(9:	
 Mr<   c            	         [         R                  5        GH(  u  p[        R                  R	                  U 5      (       d  M,  [        R
                  " U 5       H  n[        R                  R	                  [        R                  R                  X5      5      (       a6  [        R                  S[        R                  R                  X5      U5        Mz  [        R                  S[        R                  R                  X5      U5        [        R                  " [        R                  R                  X5      U5        M     GM+     g)zEMigrate legacy chef backup and cache directories to new config paths.z4Ignoring migration of %s. File already exists in %s.zMoving %s to %s.N)CHEF_DIR_MIGRATIONrB   r3   r4   existslistdirjoinrD   rE   shutilmove)old_dirmigrated_dirfilenames      r:   migrate_chef_config_dirsrY      s    !3!9!9!;77>>'""JJw/77>>"'',,|"FGGIINW7$
 		&GGLL3 
 BGGLL;\J 0 "<r<   namecfgcloudargsreturnc                    SU;  a  [         R                  SU 5        gUS   n[        R                  " US5      nU(       d  [	        [
        5      n[        R                  " U[        5       H  n[        R                  " U5        M     [        5         UR                  S[        5      nUR                  S5      nU(       aW  US:w  a  [        R                  " Xx5        O:[        R                  R!                  U5      (       d  [         R#                  SU5        [        R$                  " US	[&        S
9n	UR)                  S5      n
U
(       a  [+        UR,                  R/                  5       5      n[1        X5      n[3        5       nUR5                  5        HH  u  pU[6        ;   d  M  U(       d  M  UR9                  [        R                  R;                  U5      5        MJ     [        R<                  " U5        [>        R@                  " XU5        O[         R#                  SU	5        [        R$                  " US[B        S
9nU(       d  [         RE                  S5        On0 nSU;   a  US   US'   SU;   a-  US   n[	        URG                  5       5       H  nUU   UU'   M     [        R                  " U[H        RJ                  " U5      5        [        RL                  " USSS
9n[N        RP                  " [R        5      nU(       a  U(       a  [U        X$5      nO U(       a  [        RL                  " USSS
9nOSnU(       a  [W        U5        [Y        U5        gg)z'Handler method activated by cloud-init.r(   z8Skipping module named %s, no 'chef' key in configurationNdirectoriesr   r   systemzWchef validation_cert provided as 'system', but validation_key path '%s' does not exist.config_pathr0   zchef_client.rbz&No template found, not rendering to %sfirstboot_pathz7First boot path empty, not writing first boot json filerun_listinitial_attributesforce_installFexec)-rD   rE   r   get_cfg_option_listlist	CHEF_DIRS	itertoolschainREQUIRED_CHEF_DIRS
ensure_dirrY   getr6   
write_filer3   r4   r5   warningrG   CHEF_RB_PATHget_template_filenamestr
datasourceget_instance_idrN   setrB   CHEF_RB_TPL_PATH_KEYSadddirnameensure_dirsr   render_to_fileCHEF_FB_PATHinfokeysjsondumpsr2   r   is_exeCHEF_EXEC_PATHinstall_chefrun_chefr;   )rZ   r[   r\   r]   r8   	chef_dirsd	vkey_pathvcertcfg_filenametemplate_fnrJ   rK   param_pathsrL   rM   fb_filenameinitial_jsonre   rf   	installedruns                         r:   handler      s    S		F	
 	6{H ((=AIO	__Y(:; < -/GHILL*+E HOOI-	**KK; **-L --.>?K%""2245$S3 eLLNDA))aa 23 # 	%  FC<lK ))"LK JK!'/
';L$8+!)*>!?,1134"4Q"7Q 5TZZ%=> ,,/5M N+I5+	&&xG
h r<   c                    [         R                  S5        [        /nSU ;   a  U S   n[        U[        [
        45      (       a  UR                  U5        Oq[        U[        5      (       a  UR                  U5        OJ[         R                  S[        U5      5        UR                  [        5        OUR                  [        5        [        R                  " USS9  g )NzRunning chef-clientexec_argumentszRUnknown type %s provided for chef 'exec_arguments' expected list, tuple, or stringFcapture)rD   rE   r   
isinstanceri   tupleextendrt   appendrq   typeCHEF_EXEC_DEF_ARGSr   )r8   cmdcmd_argss      r:   r   r      s    II#$
C8#,-hu..JJx #&&JJx KK X	 JJ)*

%&IIc5!r<   distroc                 ~   UR                  5       nUR                  SS5      n[        R                  " UR	                  5       SS9 n[
        R                  R                  XT5      nUR                  SU5        [        R                  " X`SS9  [        R                  " S
SU0UD6sS	S	S	5        $ ! , (       d  f       g	= f)zWrite blob to a tempfile, and call subp with args, kwargs. Then cleanup.

'basename' as a kwarg allows providing the basename for the file.
The 'args' argument to subp will be updated with the full path to the
filename as the first argument.
basename	subp_blobT)dir	needs_exer   i  )moder]   N )rA   popr   tempdirget_tmp_exec_pathr3   r4   rS   insertr   rp   r   )blobr   r]   kwargsr   tmpdtmpfs          r:   subp_blob_in_tempfiler     s     99;Dzz*k2H			$$&$
	ww||D+At/yy-d-f-
 
 
s   AB..
B<c                     Uc  [         nUc  [        nUc  / nOSU/n[        R                  " XS9R                  n[        U UUSSS9$ )aK  Install an omnibus unified package from url.

@param url: URL where blob of chef content may be downloaded. Defaults to
    OMNIBUS_URL.
@param retries: Number of retries to perform when attempting to read url.
    Defaults to OMNIBUS_URL_RETRIES
@param omnibus_version: Optional version string to require for omnibus
    install.
z-v)urlretrieszchef-omnibus-installF)r   r   r]   r   r   )OMNIBUS_URLOMNIBUS_URL_RETRIESr   readurlcontentsr   )r   r   r   omnibus_versionr]   contents         r:   install_chef_from_omnibusr   '  s_     {%o&  S:CCG ' r<   c                 h   [         R                  " USS5      n[         R                  " USSS9nUS:X  ab  [         R                  " USS 5      n[         R                  " US[        5      n[	        XTU R
                  5        [         R                  " USS	S9nU$ US:X  a  U R
                  R                  S
/5        U$ US:X  aY  [         R                  " US5      n[        U R
                  [         R                  " US5      [         R                  " US5      US9  U$ [        R                  SU5        SnU$ )Ninstall_typepackagesrg   Fr0   gemsversionruby_versionTr(   omnibusr   omnibus_urlomnibus_url_retries)r   r   r   r   zUnknown chef install type '%s')r   rG   r2   RUBY_VERSION_DEFAULTinstall_chef_from_gemsr   install_packagesr   get_cfg_option_intrD   rq   )r\   r8   r   r   chef_versionr   r   s          r:   r   r   F  s'   **.*L 
"
"8VU
CCv..xDI..n&:
 	|5<<H &&xF J 
	#%%vh/ J 
	"11(<MN!<<''-@++H6KL+		
 J 	4lCJr<   c                 H    SU -  SU -  /nU S:X  a  UR                  S5        U$ )Nzruby%sz
ruby%s-devr   )zlibopenssl-ruby1.8zrubygems1.8)r   )r   pkgss     r:   get_ruby_packagesr   g  s0    ')<'+ABD%9:Kr<   c                    UR                  [        U 5      5        [        R                  R	                  S5      (       d  [
        R                  " SU -  S5        [        R                  R	                  S5      (       d  [
        R                  " SU -  S5        U(       a"  [        R                  " SSSSU-  SS	S
SS/	SS9  g [        R                  " / SQSS9  g )N/usr/bin/gemz/usr/bin/gem%sz/usr/bin/rubyz/usr/bin/ruby%sinstallr(   z-v %s--no-ri	--no-rdoc--bindir/usr/bin-qFr   )r   r   r(   r   r   r   r   r   )r   r   r3   r4   rQ   r   sym_linkr   )r   r   r   s      r:   r   r   o  s    
-l;<77>>.))&5~F77>>/**',6H		,&
 	
 				 	
r<   )NNN):__doc__rk   r   loggingr3   rT   typingr   	cloudinitr   r   r   r   r   cloudinit.cloudr	   cloudinit.configr
   cloudinit.config.schemar   cloudinit.distrosr   cloudinit.settingsr   r   rj   rm   rP   r   r   r6   r}   r@   	frozensetrF   rx   r   rC   rr   r   r   	getLogger__name__rD   r-   __annotations__r;   rN   rY   rt   ri   r   r   r   r   r   r   r   r   r<   r:   <module>r      s   >    	   C C ! # . $ ) 	 $  )+  4 5 ) &..( (**!%   ";-0 !
  			"	"	$			 
	 			
 		 		 		 		  %'5  ! w &x	j , FK(U  U 6 U % U t U  U p",. .d .( =A> B$s) "
r<   