a '¡Dg¿0ã @s¶UdZddlZddlZddlZddlZddlmZddlmZm Z m Z m Z m Z ddl mZddlmZddlmZddlmZdd lmZd Zegd ¢ƒZed gƒZd ZdZdZdZdddeddeddddddœ Ze dgƒZ!e gd¢ƒZ"e e #e $¡e!e"gd¢¡ƒZ%dZ&dZ'egd¢ƒZ(e )e*¡Z+d d!ged"gd#œZ,ee-d$<d%d&„Z.d'd(„Z/e0eee1dd)œd*d+„Z2d,d-„Z3ee1d.œd/d0„Z4dr?r@r+Z chef_dirsÚdZ vkey_pathZvcertZ template_fnr8r9Z param_pathsr:r;Z fb_filenameZ initial_jsonrCrDZ installedÚrunr,r,r-Úhandle”srÿ     ý     ÿ    ÿ   r^cCsˆt d¡tg}d|vrl|d}t|ttfƒr:| |¡qvt|tƒrP| |¡qvt  dt |ƒ¡| t ¡n | t ¡t j |dd�dS)NzRunning chef-clientZexec_argumentszRUnknown type %s provided for chef 'exec_arguments' expected list, tuple, or stringF©Úcapture) r3r4rYÚ isinstancerFÚtupleÚextendrNÚappendrMÚtypeÚCHEF_EXEC_DEF_ARGSr)r+ÚcmdZcmd_argsr,r,r-r[æs    ü  r[)Údistror@cKsˆ| ¡}| dd¡}tj| ¡dd��N}tj ||¡}| d|¡t j ||dd�t j fd|i|¤ŽWd ƒS1sz0Yd S) aWrite 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. ÚbasenameZ subp_blobT)ÚdirZ needs_exeriÀ)Úmoder@N) r0ÚpoprZtempdirZget_tmp_exec_pathr&r'ÚjoinÚinsertrrLr)Úblobrhr@ÚkwargsriZtmpdZtmpfr,r,r-Úsubp_blob_in_tempfileüs ÿ rq)rhcCsP|dur t}|durt}|dur&g}nd|g}tj||d�j}t|||ddd�S)agInstall 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. Nz-v)ÚurlÚretrieszchef-omnibus-installF)rhror@rir`)Ú OMNIBUS_URLÚOMNIBUS_URL_RETRIESrZreadurlÚcontentsrq)rhrrrsÚomnibus_versionr@Zcontentr,r,r-Úinstall_chef_from_omnibuss ûrx)r?cCsÆt |dd¡}tj|ddd�}|dkrbt |dd¡}t |dt¡}t|||jƒtj|dd d�}n`|dkrz|j d g¡nH|d kr²t |d ¡}t|jt |d ¡t |d¡|d�nt   d|¡d}|S)NÚ install_typeZpackagesrEFr#ZgemsÚversionÚ ruby_versionTr ZomnibusrwZ omnibus_urlZomnibus_url_retries)rhrrrsrwzUnknown chef install type '%s') rr6r%ÚRUBY_VERSION_DEFAULTÚinstall_chef_from_gemsrhÚinstall_packagesrxZget_cfg_option_intr3rM)r?r+ryr]Ú chef_versionr{rwr,r,r-rZ.s0ÿÿ   ü rZ)rAcCs&d|d|g}|dkr"| d¡|S)Nzruby%sz ruby%s-devr )zlibopenssl-ruby1.8z rubygems1.8)rc)rzZpkgsr,r,r-Úget_ruby_packagesOs r€c Cs†| t|ƒ¡tj d¡s*t d|d¡tj d¡sFt d|d¡|rptjdddd|dd d d d g d d�ntjgd¢d d�dS)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€r&r'ÚexistsrZsym_linkr)r{rrhr,r,r-r}Ws.  ÷ ô õr})NNN)9Ú__doc__rHrWZloggingr&ÚtypingrZ cloudinitrrrrrZcloudinit.cloudrZcloudinit.configr Zcloudinit.config.schemar Zcloudinit.distrosr Zcloudinit.settingsr r|rbrGrJrtrur)rTr/Ú frozensetr5rPrIrVr2rSrYrfZ getLoggerÚ__name__r3r"Ú__annotations__r.r<rNrFr^r[rqrxrZr€r}r,r,r,r-Ú sŠ      ÿ ÿÿò ÿ üÿ  ü#Rÿÿ !