name : cc_chef.cpython-39.pyc
a

'�Dg�0�
@s�UdZddlZddlZddlZddlZddlmZddlmZm	Z	m
Z
mZm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�Z4d<ed1�d2d3�Z5ed4�d5d6�Z6ee0d7�d8d9�Z7d:d;�Z8dS)=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/cache/chef�/var/backups/chefz
/var/run/chefrz#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.pemrrz/var/run/chef/client.pidT)Zssl_verify_modeZ	log_level�log_location�validation_key�validation_cert�
client_key�json_attribs�file_cache_pathZfile_backup_path�pid_file�	show_time�encrypted_data_bag_secretr)rrrrrrr)�
server_url�	node_name�environment�validation_nameZchef_licensez/etc/chef/client.rbz/usr/bin/chef-client)z-dz-iZ1800z-sZ20Zcc_chef�all�chef)�idZdistrosZ	frequencyZactivate_by_schema_keys�metacCs.tj|ddd�}|r*tj�t�r*t�t�dS)NZdelete_validation_post_execF��default)r�get_cfg_option_bool�os�path�isfile�CHEF_VALIDATION_PEM_PATH�unlink)�chef_cfgZ
delete_pem�r,�</usr/lib/python3.9/site-packages/cloudinit/config/cc_chef.py�
post_run_chefis
�r.c	Cs�t��}|��D]Z\}}|tvr.t�d|�q|dur@d||<q|tvrZt�||�||<qt�	||�||<q|�
t��tj	|d|d�tj	|ddd�|d|dd��|S)	Nz'Skipping unknown chef template key '%s'rr#rZ_defaultrr)Zgenerated_byrrrr)�CHEF_RB_TPL_DEFAULTS�copy�items�CHEF_RB_TPL_KEYS�LOG�debug�CHEF_RB_TPL_BOOL_KEYSrr%�get_cfg_option_str�updateZmake_header)�iidr+�params�k�vr,r,r-�get_template_paramsqs.
����r<)�name�cfg�cloud�args�returncCsd|vrt�d|�dS|d}t�|d�}|s8tt�}t�|t�D]}t�	|�qD|�
dt�}|�
d�}|r�|dkr�t�||�nt
j�|�s�t�d|�|�d	�}	|	�rt|j���}
t|
|�}t�}|��D]&\}
}|
tvr�|r�|�t
j�|��q�t�|�t�|	t|�nt�d
t�tj|dt d�}|�sBt�!d
�n^i}d|v�r\|d|d<d|v�r�|d}t|�"��D]}
||
||
<�qzt�|t#�$|��tj%|ddd�}t&�'t(�}|�r�|�r�t)||�}n|�r�tj%|ddd�}nd}|�rt*|�t+|�dS)z'Handler method activated by cloud-init.r z8Skipping module named %s, no 'chef' key in configurationNZdirectoriesrr�systemzWchef validation_cert provided as 'system', but validation_key path '%s' does not exist.zchef_client.rbz&No template found, not rendering to %sZfirstboot_pathr#z7First boot path empty, not writing first boot json fileZrun_list�initial_attributes�
force_installF�exec),r3r4rZget_cfg_option_list�list�	CHEF_DIRS�	itertools�chain�REQUIRED_CHEF_DIRSZ
ensure_dir�getr)�
write_filer&r'r(�warningZget_template_filename�strZ
datasourceZget_instance_idr<�setr1�CHEF_RB_TPL_PATH_KEYS�add�dirnameZensure_dirsrZrender_to_file�CHEF_RB_PATHr6�CHEF_FB_PATH�info�keys�json�dumpsr%rZis_exe�CHEF_EXEC_PATH�install_chef�run_chefr.)r=r>r?r@r+Z	chef_dirs�dZ	vkey_pathZvcertZtemplate_fnr8r9Zparam_pathsr:r;Zfb_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�tjfd|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|dkr�t�|d�}t|jt�|d
�t�|d�|d�nt	�
d|�d}|S)N�install_typeZpackagesrEFr#Zgems�version�ruby_versionTr ZomnibusrwZomnibus_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.8zrubygems1.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
dd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.distrosrZcloudinit.settingsrr|rbrGrJrtrur)rTr/�	frozensetr5rPrIrVr2rSrYrfZ	getLogger�__name__r3r"�__annotations__r.r<rNrFr^r[rqrxrZr�r}r,r,r,r-�<module>	s��
���
���
�#R��!

© 2025 Cubjrnet7