관리-도구
편집 파일: DataSourceOpenNebula.cpython-39.opt-1.pyc
a ����'�Dg�>����������������������@���s ��d�dl�Z�d�dlZd�dlZd�dlZd�dlZd�dlZd�dlZd�dlZd�dlm Z m Z mZmZm Z �e�e�ZdZdZdgZdZG�dd��dej�ZG�d d ��d e�ZG�dd��de�ZG�d d��d�Zdd��Zdd��Zdd��Zddd�Zddd�Zdd��Z eZ!eej"ffgZ#dd��Z$dS�)�����N)� atomic_helper�net�sources�subp�utilziid-dsopennebulaZnobody� context.sh)Z EPOCHREALTIMEZEPOCHSECONDSZRANDOMZLINENOZSECONDS�_ZSRANDOMZ__vc�������������������@���sF���e�Zd�ZdZdd��Zdd��Zdd��Zdd ��Zed d���Z dd d�Z dS�)�DataSourceOpenNebulaZ OpenNebulac�����������������C���s4���t�j�|�|||��d�|�_tj�|jd�|�_d�|�_d�S�)NZ opennebula) r���� DataSource�__init__�seed�os�path�join�seed_dir�network)�selfZsys_cfg�distro�paths��r����J/usr/lib/python3.9/site-packages/cloudinit/sources/DataSourceOpenNebula.pyr���/���s����zDataSourceOpenNebula.__init__c�����������������C���s���t�j�|��}d||�j|�jf�S�)Nz%s [seed=%s][dsmode=%s])r���r ����__str__r����dsmode)r����rootr���r���r���r���5���s����zDataSourceOpenNebula.__str__c����������� ������C���s���dt�i}d�}d�}t}d|�jv�r*|�j�d�}|�jg}|�t����|D�]�}zLtj� |�j�rht ||�j|d�}n(|�d�r�t jt ||�jd�}t�||�}W�nZ�ty����Y�qBY�nF�ty��}�z|�W�Y�d�}~n(d�}~0��tjy����t�d|��Y�n0�|rB|}t�d|����q qB|�sdS�|d �} t�| |g�} |��|�d �|�j�d�g�|�_|�jtjk�rZdS�||�_|�d�|�_| |�_|�d �|�_dS�)Nzinstance-id� parseuser��asuserz/dev)r���r���z%s was not mountablezfound datasource in %sF�metadataZDSMODEr����network-interfaces�userdataT) �DEFAULT_IID�DEFAULT_PARSEUSERZds_cfg�getr����extend�find_candidate_devsr ���r����isdir�read_context_disk_dirr���� startswith� functools�partialr���Zmount_cb�NonContextDiskDir�BrokenContextDiskDirZMountFailedError�LOG�warning�debugZ mergemanydictZ_determine_dsmoder���r���ZDSMODE_DISABLEDr���r���r���Zuserdata_raw) r����defaults�resultsr���r���Z candidatesZcdevZpartially_applied_func�excZmdr���r���r���� _get_data9���sZ���� � ��zDataSourceOpenNebula._get_datac�����������������C���s$���|�j�|�jv�rd}nd}d||�jf�S�)z/Return the subplatform metadata source details.zseed-dirzconfig-diskz%s (%s))r���r���)r���Zsubplatform_typer���r���r����_get_subplatformv���s����z%DataSourceOpenNebula._get_subplatformc�����������������C���s���|�j�d�ur|�j�S�d�S�d�S��N)r���)r���r���r���r����network_config~���s���� z#DataSourceOpenNebula.network_configFc�����������������C���s.���|d�u�r|�j�tjkrd}nd}tj�|�||�S�)NTF)r���r���ZDSMODE_NETWORKr ����get_hostname)r���ZfqdnZ resolve_ipZ metadata_onlyr���r���r���r6�������s ����z!DataSourceOpenNebula.get_hostnameN)FFF)�__name__� __module__�__qualname__Zdsnamer���r���r2���r3����propertyr5���r6���r���r���r���r���r ���+���s���= r ���c�������������������@���s���e�Zd�ZdS�)r*���N�r7���r8���r9���r���r���r���r���r*�������s���r*���c�������������������@���s���e�Zd�ZdS�)r+���Nr;���r���r���r���r���r+�������s���r+���c�������������������@���sp���e�Zd�Zddd�Zdd��Zdd��Zdd ��Zd d��Zdd ��Zdd��Z dd��Z dd��Zdd��Zddd�Z dd��ZdS�)�OpenNebulaNetworkNc�����������������C���s|���||�_�|d�u�rt|�}t�dd��t|���dd��d�D���|�_i�|�_|���D�],\}}t� d|�}|rJ|� d�|�j|���<�qJd�S�)Nc�����������������S���s���g�|�]}|�qS�r���r�����.0�kr���r���r���� <listcomp>����s����z.OpenNebulaNetwork.__init__.<locals>.<listcomp>c�����������������S���s���t��|�d��S�)N����)r���Znatural_sort_key)r?���r���r���r����<lambda>���������z,OpenNebulaNetwork.__init__.<locals>.<lambda>)�keyz ^(.+)_MAC$rA���)�context�get_physical_nics_by_mac�collections�OrderedDict�sorted�items�ifaces�context_devname�re�match�group�lower)r���rE���r���Zsystem_nics_by_macr?����v�mr���r���r���r�������s �������zOpenNebulaNetwork.__init__c�����������������C���s"���d��dd��|�d�dd���D���S�)N�.c�����������������S���s���g�|�]}t�t|d����qS�)����)�str�int)r>����cr���r���r���r@�������rC���z,OpenNebulaNetwork.mac2ip.<locals>.<listcomp>�:����)r����split)r����macr���r���r����mac2ip����s����zOpenNebulaNetwork.mac2ipc�����������������C���s\���i�}|���|dd����}|�|�j�dd������|r:||d<�|���|dd����}|rX||d<�|S�)N�dns��ZDNS� addresses� search_domain�search)� get_fieldrZ���r#���rE���r"���)r����dev�nameserversr]���r`���r���r���r����get_nameservers����s����z!OpenNebulaNetwork.get_nameserversc�����������������C���s���|���|d�S�)N�mtu�rb����r���rc���r���r���r����get_mtu����s����zOpenNebulaNetwork.get_mtuc�����������������C���s���|���|d|��|��S�)N�ip)rb���r\���)r���rc���r[���r���r���r����get_ip����s����zOpenNebulaNetwork.get_ipc�����������������C���s<���g�}|���|d�}|r|�|��|���|d�}|r8|�|��|S�)N�ip6�ip6_ula)rb����append)r���rc���� addresses6rl���rm���r���r���r����get_ip6����s���� zOpenNebulaNetwork.get_ip6c�����������������C���s���|���|dd�S�)NZip6_prefix_lengthZ64rg���rh���r���r���r����get_ip6_prefix����s����z OpenNebulaNetwork.get_ip6_prefixc�����������������C���s���|���|d�S�)N�gatewayrg���rh���r���r���r����get_gateway����s����zOpenNebulaNetwork.get_gatewayc�����������������C���s���|���|d|���|d��S�)NZip6_gateway�gateway6rg���rh���r���r���r����get_gateway6����s�����zOpenNebulaNetwork.get_gateway6c�����������������C���s���|���|dd�S�)N�maskz 255.255.255.0rg���rh���r���r���r����get_mask����s����zOpenNebulaNetwork.get_maskc�����������������C���s*���|�j��d�||f�����}|dv�r&|S�|S�)z�return the field name in context for device dev. context stores <dev>_<NAME> (example: eth0_DOMAIN). an empty string for value will return default.r���)Nr^���)rE���r"���r����upper)r���rc����name�default�valr���r���r���rb�������s������� zOpenNebulaNetwork.get_fieldc��������������������s6��i�}d|d<�i�|d<�i�}|�j����D��]\}}|���}|�j�||�}i�}d|i|d<�g�|d<�|��|�}tt�|��}|d�� |�� ||�d�|���|��|�} | r�|��|���|d�� ��fdd �| D����|��|�} | r�| |d <�|��|�}|r�||d<�|��|�}|�r||d<�|��|�} | �r | |d <�|||<�q"||d<�|S�)NrY����version� ethernetsZ macaddressrN���r_����/c��������������������s���g�|�]}|d������qS�)r~���r���)r>����i�Zprefix6r���r���r@��� ��rC���z.OpenNebulaNetwork.gen_conf.<locals>.<listcomp>Zgateway4rt���rd���rf���)rK���rJ���rP���rL���r"���rw���rU���r���Zipv4_mask_to_net_prefixrn���rk���rp���rq���r#���rs���ru���re���ri���)r���Znetconfr}���r[���rc���Zc_devZdevconfrv����prefixro���rr���rt���rd���rf���r���r����r����gen_conf����sD���� � zOpenNebulaNetwork.gen_conf)N)N)r7���r8���r9���r���r\���re���ri���rk���rp���rq���rs���ru���rw���rb���r����r���r���r���r���r<�������s��� r<���c������������������C���s@���g�}�dD�]2}t��|�}|����|D�]}||�vr"|��|��q"q|�S�)zE Return a list of devices that may contain the context disk. )z LABEL=CONTEXTzLABEL=CDROMzTYPE=iso9660)r���Zfind_devs_with�sortrn���)Zcombined�f�devs�dr���r���r���r$���&��s���� r$���c�����������������C���s ���dd|�gS�)NZsudoz-ur�����userr���r���r����switch_user_cmd5��s����r����c�������������������C���s ���t��d�S�)zDprint the shell environment variables within delimiters to be parsedz� printf "%s\0" _start_ [ $0 != 'sh' ] && set -o posix set [ $0 != 'sh' ] && set +o posix printf "%s\0" _start_ )�textwrap�dedentr���r���r���r���� varprinter9��s�����r����c����������� ������C���s��d|�����v�rt�d��t��d|���t���d�}g�}|durBt|�}|�ddg��tj||d�j}i�}|�d �d d��}|d�|d��}}t d d��t �|�D���} t dd��t �|�D���} t| ����� t| �����D�]6}|tv�r�q�| �|�}|dur�|| �|�kr�|||<�q�|S�)a<��run content and return environment variables which changed WARNING: the special variable _start_ is used to delimit content a context.sh that defines this variable might break in unexpected ways compatible with posix shells such as dash and ash and any shell which supports `set -o posix` s���_start_�zYUser defined _start_ variable in context.sh, this may breakcloud-init in unexpected ways.z{ %s : } > /dev/null � N�shz-e)�dataz_start_�rA���r���rY���c�����������������s���s���|�]}|j�d�dd�V��qdS���=rA���)�maxsplitN�rZ����r>����variabler���r���r���� <genexpr>}��s���z%parse_shell_config.<locals>.<genexpr>c�����������������s���s���|�]}|j�d�dd�V��qdS�r����r����r����r���r���r���r�������s���)�encoder,���r-���r����r����r#���r����stdoutrZ����dict�shlex�set�keys�union� EXCLUDED_VARSr"���) �contentr���Zbcmd�cmd�output�retZsections�beforeZafterZpre_envZpost_envrD����valuer���r���r����parse_shell_configF��sB����������� r����c�������������� ���C���s���i�}t�D�]&}tj�|�|�}tj�|�r|||<�q|sDtd|�df���i�}di�d�}d|v��r>|dur�zt�|��W�n6�ty��}�zt dj |d��|�W�Y�d}~n d}~0�0�z(tj�|�d�} t�| �} t | |d�}W�nh�tj�y�}�zt d |��|�W�Y�d}~n<d}~0��t�y:�}�ztd |��|�W�Y�d}~n d}~0�0�ntd��|�sP|S�||d<�d}d |v��rld }nd|v��rzd}|�r�|�|����}dd��|D��|d�d<�dD�]&} | |v��r�|| �|d�d<���qАq�d|v��r�|d�|d<�nd|v��r�|d�|d<�d|v��rZ|�d|�d��}|dk�rZzt�|d��|d<�W�n�t�yX���t�d��Y�n0�dd��|D��}|�r�t||�}|���|d<�|S�)z� read_context_disk_dir(source_dir): read source_dir and return a tuple with metadata dict and user-data string populated. If not a valid dir, raise a NonContextDiskDir z%s: %szno files foundN)r���r���r���z'configured user '{user}' does not existr����r���zError processing context.sh: %szError reading context.sh: %szMissing context.shr���ZSSH_KEYZSSH_PUBLIC_KEYc�����������������S���s"���g�|�]}t�|�r|�d��s|�qS�)�#)�lenr'���)r>����liner���r���r���r@������s���z)read_context_disk_dir.<locals>.<listcomp>zpublic-keys)ZSET_HOSTNAMEZHOSTNAMEZ PUBLIC_IPZ IP_PUBLICZETH0_IPzlocal-hostnameZ USER_DATAr���ZUSERDATAZUSERDATA_ENCODINGZUSER_DATA_ENCODING�base64z"Failed base64 decoding of userdatac�����������������S���s���g�|�]}t��d�|�r|�qS�)z ^ETH\d+_IP.*$)rM���rN���r=���r���r���r���r@������rC���r���)�CONTEXT_DISK_FILESr ���r���r����isfiler*����pwd�getpwnam�KeyErrorr+����formatr���Zload_text_filer����r���ZProcessExecutionError�IOErrorr"���� splitlinesr���Zb64d� TypeErrorr,���r-���r<���r����)Z source_dirr���r����found�af�fnrE���r0����er���r����Zssh_key_var�linesr?����encodingZipaddr_keysZonetr���r���r���r&������s����� ��� ���� � � r&���c��������������������s"���t����}t��fdd�|���D���S�)Nc��������������������s$���g�|�]\}}��j��|�r||f�qS�r���)Z networkingZis_physical)r>���rR����n�r���r���r���r@������rC���z,get_physical_nics_by_mac.<locals>.<listcomp>)r���Zget_interfaces_by_macr����rJ���)r���r����r���r����r���rF������s�����rF���c�����������������C���s���t��|�t�S�r4���)r���Zlist_from_depends�datasources)Zdependsr���r���r����get_datasource_list���s����r����)N)N)%rG���r(���Zloggingr ���r����rM���r����r����Z cloudinitr���r���r���r���r���Z getLoggerr7���r,���r ���r!���r����r����r ���r ���� Exceptionr*���r+���r<���r$���r����r����r����r&���rF���ZDataSourceOpenNebulaNetZDEP_FILESYSTEMr����r����r���r���r���r����<module>���s8��� c� G ` �