Ë
    x[h¾4  ã                   ó  — U d Z ddlZddlZddlZddlZddl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 ddlmZ ddlmZ dd	lmZ d
ZdZdZdddœZdZdZdZdZdddeddeddddddœZ  e!dg«      Z" e!g d¢«      Z# e!g e jI                  «       ¢e"¢e#¢d‘d‘d‘d ‘d!‘«      Z%d"Z&d#Z'd$Z( ejR                  e*«      Z+d%d&ged'gd(œZ,ee-d)<   d*„ Z.d+„ Z/d,„ Z0d-e1d.ed/ed0e2d1df
d2„Z3d3„ Z4d4ed0e2fd5„Z5	 d:d4efd6„Z6d/efd7„Z7d1ee1   fd8„Z8d9„ Z9y);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                 ó´   — t        j                  | dd¬«      }|r>t        j                  j	                  t
        «      rt        j                  t
        «       y y y )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   sC   € Ü×)Ñ)ØÐ/¸ô€Jñ ”b—g‘g—n‘nÔ%=Ô>Ü
�	‰	Ô*Õ+ð ?€zó    c           	      óØ  — t         j                  «       }|j                  «       D ]g  \  }}|t        vrt        j                  d|«       Œ%|€d ||<   Œ-|t        v rt        j                  ||«      ||<   ŒOt        j                  ||«      ||<   Œi |j                  t        j                  «       t        j                  |d| ¬«      t        j                  |dd¬«      |d   |d   dœ«       |S )	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ð —‘Ó ò A‰ˆˆ1ØÔ$Ñ$Ü�I‰IÐ?ÀÔCØØˆ9ØˆF�1ŠIð Ô)Ñ)Ü ×4Ñ4°X¸qÓA��q’	ä ×3Ñ3°H¸aÓ@��q’	ðAð ‡M�Mä ×,Ñ,Ó.Ü×0Ñ0Ø˜+¨sôô  ×2Ñ2Ø˜-°ôð # <Ñ0Ø'Ð(9Ñ:ñ	
ôð €Mr<   c            	      ól  — t         j                  «       D �]  \  } }t        j                  j	                  | «      sŒ't        j
                  | «      D ]Þ  }t        j                  j	                  t        j                  j                  ||«      «      r6t        j                  dt        j                  j                  | |«      |«       Œvt        j                  dt        j                  j                  | |«      |«       t        j                  t        j                  j                  | |«      |«       Œà �Œ y)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Ó!;ó KÑˆ�Ü�7‰7�>‰>˜'Õ"ÜŸJ™J wÓ/ò K�Ü—7‘7—>‘>¤"§'¡'§,¡,¨|¸XÓ"FÔGÜ—I‘IØNÜŸ™Ÿ™ W¨hÓ7Ø$ôð
 Ü—	‘	Ø&Ü—G‘G—L‘L ¨(Ó3Ø ôô
 —‘œBŸG™GŸL™L¨°(Ó;¸\ÕJòKñKr<   ÚnameÚcfgÚcloudÚargsÚreturnc                 ó   — d|vrt         j                  d| «       y|d   }t        j                  |d«      }|st	        t
        «      }t        j                  |t        «      D ]  }t        j                  |«       Œ t        «        |j                  dt        «      }|j                  d«      }|rQ|dk7  rt        j                  ||«       n5t        j                  j!                  |«      st         j#                  d|«       t        j$                  |d	t&        ¬
«      }	|j)                  d«      }
|
r¸t+        |j,                  j/                  «       «      }t1        ||«      }t3        «       }|j5                  «       D ]?  \  }}|t6        v sŒ|sŒ|j9                  t        j                  j;                  |«      «       ŒA t        j<                  |«       t?        j@                  |
|	|«       nt         j#                  d|	«       t        j$                  |dtB        ¬
«      }|st         jE                  d«       nfi }d|v r|d   |d<   d|v r+|d   }t	        |jG                  «       «      D ]
  }||   ||<   Œ t        j                  |tI        jJ                  |«      «       t        jL                  |dd¬
«      }tO        jP                  tR        «      }|r|rtU        ||«      }n|rt        jL                  |dd¬
«      }nd}|rtW        |«       tY        |«       yy)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ô ×(Ñ(¨°=ÓA€IÙÜœ“Oˆ	Ü�_‰_˜YÔ(:Ó;ò ˆÜ�‰˜Õðô Ôà—‘Ð-Ô/GÓH€IØ�L‰LÐ*Ó+€Eñ Ø�HÒÜ�O‰O˜I uÕ-Ü—‘—‘ 	Ô*Ü�K‰Kð;àôô ×*Ñ*Ø�-¬ô€Lð ×-Ñ-Ð.>Ó?€KÙÜ�%×"Ñ"×2Ñ2Ó4Ó5ˆÜ$ S¨(Ó3ˆô “eˆØ—L‘L“Nò 	4‰DˆAˆqØÔ)Ò)ªaØ—‘¤§¡§¡°Ó 2Õ3ð	4ô 	×Ñ˜Ô%Ü× Ñ  ¨l¸FÕCä�‰Ð<¸lÔKô ×)Ñ)ØÐ"¬Lô€Kñ Ü�‰ÐJÕKàˆØ˜Ñ!Ø'/°
Ñ';ˆL˜Ñ$Ø 8Ñ+Ø!)Ð*>Ñ!?ÐÜÐ,×1Ñ1Ó3Ó4ò 8�Ø"4°QÑ"7�˜Q’ð8ä�‰˜¤T§Z¡Z°Ó%=Ô>ô ×,Ñ,Ø�/¨5ô€Mô —‘œNÓ+€IÙ™Ü˜5 (Ó+‰Ù	Ü×&Ñ& x°ÀÔG‰àˆÙ
Ü�ÔÜ�hÕð r<   c                 ó¤  — t         j                  d«       t        g}d| v r„| d   }t        |t        t
        f«      r|j                  |«       nlt        |t        «      r|j                  |«       nJt         j                  dt        |«      «       |j                  t        «       n|j                  t        «       t        j                  |d¬«       y )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ž   € Ü‡I�IÐ#Ô$ÜÐ
€CØ˜8Ñ#ØÐ,Ñ-ˆÜ�h¤¤u Ô.Ø�J‰J�xÕ Ü˜¤#Ô&Ø�J‰J�xÕ ä�K‰Kðô �X“ô	ð �J‰JÔ)Õ*à�
‰
Ô%Ô&Ü‡I�Iˆc˜5Ö!r<   Údistroc                 ó~  — |j                  «       }|j                  dd«      }t        j                  |j	                  «       d¬«      5 }t
        j                  j                  ||«      }|j                  d|«       t        j                  || d¬«       t        j                  d
d|i|¤Žcd	d	d	«       S # 1 sw Y   y	xY w)a  Write 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™   € ð �9‰9‹;€DØ�z‰z˜* kÓ2€Hä	×	Ñ	Ø×$Ñ$Ó&°$ô
ð .à	Ü�w‰w�|‰|˜D (Ó+ˆØ�‰�A�tÔÜ�‰˜˜d¨Õ/Ü�y‰yÑ-˜dÐ- fÑ-÷.÷ .ò .ús   ÁA!B3Â3B<c                 ó–   — |€t         }|€t        }|€g }nd|g}t        j                  ||¬«      j                  }t        | ||dd¬«      S )ag  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¸   '  sa   € ð €{ÜˆØ€Ü%ˆàÐØ‰à�oÐ&ˆÜ× Ñ  S°'Ô:×CÑC€GÜ ØØØØ'Øôð r<   c                 óf  — t        j                  |dd«      }t        j                  |dd¬«      }|dk(  rct        j                  |dd «      }t        j                  |dt        «      }t	        ||| j
                  «       t        j                  |dd	¬«      }|S |dk(  r| j
                  j                  d
g«       |S |dk(  rYt        j                  |d«      }t        | j
                  t        j                  |d«      t        j                  |d«      |¬«       |S t        j                  d|«       d}|S )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ô ×
"Ñ
" 8¨V¸UÔ
C€CØ�vÒä×.Ñ.¨x¸ÀDÓIˆÜ×.Ñ.Ø�nÔ&:ó
ˆô 	˜|¨\¸5¿<¹<ÔHô ×&Ñ& x°ÀÔFˆð €Jð 
˜Ò	#à�‰×%Ñ% v hÔ/ð €Jð 
˜Ò	"Ü×1Ñ1°(Ð<MÓNˆÜ!Ø—<‘<Ü×'Ñ'¨°-Ó@Ü×+Ñ+¨HÐ6KÓLØ+õ		
ð €Jô 	�‰Ð4°lÔCØˆØ€Jr<   c                 óF   — d| z  d| z  g}| dk(  r|j                  d«       |S )Nzruby%sz
ruby%s-devr   )zlibopenssl-ruby1.8zrubygems1.8)r˜   )r½   Úpkgss     r:   Úget_ruby_packagesrÉ   g  s0   € à 'Ñ)¨<¸'Ñ+AÐB€DØ�%ÒØ�‰Ð9Ô:Ø€Kr<   c                 ó–  — |j                  t        | «      «       t        j                  j	                  d«      st        j                  d| z  d«       t        j                  j	                  d«      st        j                  d| z  d«       |r$t        j                  dddd|z  dd	d
ddg	d¬«       y t        j                  g d¢d¬«       y )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Ó;Ô<Ü�7‰7�>‰>˜.Ô)Ü�‰Ð&¨Ñ5°~ÔFÜ�7‰7�>‰>˜/Ô*Ü�‰Ð'¨,Ñ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Ð ð €g×Ñ˜Ó!€ð ØˆwØØ &˜xñ	€€jó ò,ò òFKð(U �ð U ˜6ð U ¨%ð U °tð U Àó U òp"ð,.¨ð .°dó .ð( =AñØóð>˜ó ðB $ s¡)ó ó"
r<   