a 'Dg0 @sUdZddlZddlZddlZddlZddlmZddlmZm Z m Z m Z m Z ddl mZddlmZddlmZddlmZdd lmZd Zegd Zed gZd ZdZdZdZdddeddedddddd Ze dgZ!e gdZ"e e#e$e!e"gdZ%dZ&dZ'egdZ(e)e*Z+d d!ged"gd#Z,ee-d$<d%d&Z.d'd(Z/e0eee1dd)d*d+Z2d,d-Z3ee1d.d/d0Z4dr?r@r+Z chef_dirsdZ vkey_pathZvcertZ template_fnr8r9Z param_pathsr:r;Z fb_filenameZ initial_jsonrCrDZ installedrunr,r,r-handlesr                 r^cCstdtg}d|vrl|d}t|ttfr:||qvt|trP||qvt dt ||t n |t t j |dddS)NzRunning chef-clientZexec_argumentszRUnknown type %s provided for chef 'exec_arguments' expected list, tuple, or stringFcapture) r3r4rY isinstancerFtupleextendrNappendrMtypeCHEF_EXEC_DEF_ARGSr)r+cmdZcmd_argsr,r,r-r[s      r[)distror@cKs|}|dd}tj|ddN}tj||}|d|t j ||ddt 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) r0poprZtempdirZget_tmp_exec_pathr&r'joininsertrrLr)blobrhr@kwargsriZtmpdZtmpfr,r,r-subp_blob_in_tempfiles  rq)rhcCsP|dur t}|durt}|dur&g}nd|g}tj||dj}t|||dddS)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)urlretrieszchef-omnibus-installF)rhror@rir`) OMNIBUS_URLOMNIBUS_URL_RETRIESrZreadurlcontentsrq)rhrrrsomnibus_versionr@Zcontentr,r,r-install_chef_from_omnibuss rx)r?cCst|dd}tj|ddd}|dkrbt|dd}t|dt}t|||jtj|dd d}n`|dkrz|jd gnH|d krt|d }t|jt|d t|d|dnt d|d}|S)N install_typeZpackagesrEFr#Zgemsversion ruby_versionTr ZomnibusrwZ omnibus_urlZomnibus_url_retries)rhrrrsrwzUnknown chef install type '%s') rr6r%RUBY_VERSION_DEFAULTinstall_chef_from_gemsrhinstall_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 rc Cs|t|tjds*td|dtjdsFtd|d|rptjdddd|dd d d d g d dntjgdd ddS)N /usr/bin/gemz/usr/bin/gem%sz /usr/bin/rubyz/usr/bin/ruby%sinstallr z-v %s--no-ri --no-rdoc--bindir/usr/bin-qFr_)rrr rrrrr)r~rr&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[rqrxrZrr}r,r,r,r- s           #R !