x[h4 UdZddlZddlZddlZddlZddlZddlmZddlm Z m Z m Z m Z m Z ddlmZddlmZddlmZddlmZdd lmZd Zd Zd Zd ddZdZdZdZdZdddedded ddddd Z e!dgZ"e!gdZ#e!ge jIe"e#dddd d!Z%d"Z&d#Z'd$Z(ejRe*Z+d%d&ged'gd(Z,ee-d)<d*Z.d+Z/d,Z0d-e1d.ed/ed0e2d1df d2Z3d3Z4d4ed0e2fd5Z5 d:d4efd6Z6d/efd7Z7d1ee1fd8Z8d9Z9y);z7Chef: module that configures, starts and installs chef.N)List)subp temp_utils templater url_helperutil)Cloud)Config) MetaSchema)Distro) PER_ALWAYS1.8) /etc/chefz /var/log/chefz /var/lib/chef/var/chef/cache/var/chef/backupz /var/run/chef)rrr)z/var/cache/chefz/var/backups/chefz#https://www.chef.io/chef/install.shz/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_locationvalidation_keyvalidation_cert client_key json_attribsfile_cache_pathfile_backup_pathpid_file show_timeencrypted_data_bag_secretr)rrrrrrr server_url node_name environmentvalidation_name chef_licensez/etc/chef/client.rbz/usr/bin/chef-client)z-dz-i1800z-s20cc_chefallchef)iddistros frequencyactivate_by_schema_keysmetactj|dd}|r>tjj t rtj t yyy)Ndelete_validation_post_execFdefault)rget_cfg_option_boolospathisfileCHEF_VALIDATION_PEM_PATHunlink)chef_cfg delete_pems :/usr/lib/python3/dist-packages/cloudinit/config/cc_chef.py post_run_chefr;gsC))/Jbggnn%=> *+?zc tj}|jD]g\}}|tvrtj d|%|d||<-|t vrtj||||<Otj||||<i|jtjtj|d|tj|dd|d|dd|S) Nz'Skipping unknown chef template key '%s'r r0r!_defaultrr") generated_byr r!rr") CHEF_RB_TPL_DEFAULTScopyitemsCHEF_RB_TPL_KEYSLOGdebugCHEF_RB_TPL_BOOL_KEYSrr2get_cfg_option_strupdate make_header)iidr8paramskvs r:get_template_paramsrNos ! & & (F A1 $ $ II? C  9F1I)) 44XqAq  33Ha@q  A MM ,,.00+s 22-#<0'(9:   Mr<c ltjD]\}}tjj |s'tj |D]}tjj tjj ||r6tjdtjj |||vtjdtjj |||tjtjj |||y)zEMigrate legacy chef backup and cache directories to new config paths.z4Ignoring migration of %s. File already exists in %s.zMoving %s to %s.N) CHEF_DIR_MIGRATIONrBr3r4existslistdirjoinrDrEshutilmove)old_dir migrated_dirfilenames r:migrate_chef_config_dirsrYs!3!9!9!;K 77>>' "JJw/ K77>>"'',,|X"FGIIN Wh7$  &GGLL(3   BGGLL(;\J KKr<namecfgcloudargsreturnc d|vrtjd|y|d}tj|d}|st t }t j|tD]}tj|t|jdt}|jd}|rQ|dk7rtj||n5tjj!|stj#d|tj$|d t& } |j)d } | rt+|j,j/} t1| |} t3} | j5D]?\}}|t6vs|s| j9tjj;|Atj<| t?j@| | | ntj#d | tj$|d tB }|stjEdnfi}d|vr|d|d<d|vr+|d}t |jGD] }||||< tj|tIjJ|tjL|dd }tOjPtR}|r|r tU||}n|rtjL|dd }nd}|rtW|tY|yy)z'Handler method activated by cloud-init.r(z8Skipping module named %s, no 'chef' key in configurationN directoriesrrsystemzWchef validation_cert provided as 'system', but validation_key path '%s' does not exist. config_pathr0zchef_client.rbz&No template found, not rendering to %sfirstboot_pathz7First boot path empty, not writing first boot json filerun_listinitial_attributes force_installFexec)-rDrErget_cfg_option_listlist CHEF_DIRS itertoolschainREQUIRED_CHEF_DIRS ensure_dirrYgetr6 write_filer3r4r5warningrG CHEF_RB_PATHget_template_filenamestr datasourceget_instance_idrNsetrBCHEF_RB_TPL_PATH_KEYSadddirname ensure_dirsrrender_to_file CHEF_FB_PATHinfokeysjsondumpsr2ris_exeCHEF_EXEC_PATH install_chefrun_chefr;)rZr[r\r]r8 chef_dirsd vkey_pathvcert cfg_filename template_fnrJrK param_pathsrLrM fb_filename initial_jsonrerf installedruns r:handlersS F  6{H((=AI O __Y(: ;  -/GHI LL* +E H  OOIu - * KK; **-L--.>?K%""2245$S(3e LLN 4DAq))a 23 4 %  lFC !? ,1134 8"4Q"7 Q 8  TZZ %=>,,/5M N+I  5(+ &&xG h r<ctjdtg}d|vr|d}t|tt fr|j |nlt|tr|j|nJtjdt||j tn|j ttj|dy)NzRunning chef-clientexec_argumentszRUnknown type %s provided for chef 'exec_arguments' expected list, tuple, or stringFcapture) rDrEr isinstanceritupleextendrtappendrqtypeCHEF_EXEC_DEF_ARGSr)r8cmdcmd_argss r:rrsII#$  C8#,- hu . JJx # & JJx KKX   JJ) * %&IIc5!r<distroc ~|j}|jdd}tj|j d5}t j j||}|jd|tj||dtjd d|i|cd d d S#1swYy xYw) 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. basename subp_blobT)dir needs_exeri)moder]N) rApoprtempdirget_tmp_exec_pathr3r4rSinsertrrpr)blobrr]kwargsrtmpdtmpfs r:subp_blob_in_tempfilers 99;Dzz*k2H     $ $ &$ . ww||D(+ At d/yy-d-f- ...s A!B33B<c|t}|t}|g}nd|g}tj||j}t |||ddS)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. z-v)urlretrieszchef-omnibus-installF)rrr]rr) OMNIBUS_URLOMNIBUS_URL_RETRIESrreadurlcontentsr)rrromnibus_versionr]contents r:install_chef_from_omnibusr'sa {%o&  S':CCG   '  r<cftj|dd}tj|dd}|dk(rctj|dd}tj|dt}t |||j tj|dd }|S|dk(r|j j d g|S|d k(rYtj|d }t|j tj|d tj|d||Stjd|d}|S)N install_typepackagesrgFr0gemsversion ruby_versionTr(omnibusr omnibus_urlomnibus_url_retries)rrrrzUnknown chef install type '%s') rrGr2RUBY_VERSION_DEFAULTinstall_chef_from_gemsrinstall_packagesrget_cfg_option_intrDrq)r\r8rr chef_versionrrs r:rrFs)**.*L  " "8VU CCv..xDI .. n&:  |\5<<H&&xF J  # %%vh/ J  "11(>. ) &5~F 77>>/ * ',6H ,&     r<)NNN):__doc__rkrloggingr3rTtypingr cloudinitrrrrrcloudinit.cloudr cloudinit.configr cloudinit.config.schemar cloudinit.distrosr cloudinit.settingsr rrjrmrPrrr6r}r@ frozensetrFrxrrCrrrr getLogger__name__rDr-__annotations__r;rNrYrtrirrrrrrrrr<r:rs>  CC!#.$)  $)+ 4 5) &..( (**!% ";-0!    " " $                % '5g! w &x j, FK(U U 6U %U tU U p",..d.(=A >B$s)" r<