관리-도구
편집 파일: DataSourceMAAS.cpython-39.opt-1.pyc
a ����'�Dgi;����������������������@���s��d�dl�Z�d�dlZd�dlZd�dlZd�dlmZmZmZ�d�dlm Z �d�dl mZ�e�e �ZdZg�d�ZG�dd��dej�ZG�d d ��d e�Zdd��Zd d��Zdd��Zddeddfdd�Zdd��ZG�dd��de�ZG�dd��de�ZeejffeejejffgZdd��Ze dk�rdd��Z e ���dS�)�����N)�sources� url_helper�util)�KlibcNetworkConfigSource)�NetworkConfigSourcez 2012-03-01))�meta-data/instance-idr���FF)�meta-data/local-hostnamer���FF)�meta-data/public-keysr ���FT)zmeta-data/vendor-data�vendor-dataTT)� user-datar���TTc�������������������@���sh���e�Zd�ZdZdZdZdZdZdZdd��Z e dd ���Zd d��Zdd ��Z dd��Zdd��Zdd��Zdd��ZdS�)�DataSourceMAASz� DataSourceMAAS reads instance information from MAAS. Given a config metadata_url, and oauth tokens, it expects to find files under the root named: instance-id user-data hostname vendor-data �MAASN�x����2���c�����������������C���s:���t�j�|�|||��d�|�_tj�|jd�|�_t|�j �|�_ d�S�)NZmaas)r���� DataSource�__init__�base_url�os�path�join�seed_dir�get_id_from_ds_cfg�ds_cfg�id_hash)�self�sys_cfgZdistro�paths��r����D/usr/lib/python3.9/site-packages/cloudinit/sources/DataSourceMAAS.pyr���2���s����zDataSourceMAAS.__init__c�����������������C���s���|�j�st|�j�|�_�|�j�S��N)� _oauth_helper�get_oauth_helperr����r���r���r���r����oauth_helper8���s����zDataSourceMAAS.oauth_helperc�����������������C���s���t�j�|��}d||�jf�S�)Nz%s [%s])r���r����__str__r���)r����rootr���r���r���r$���>���s����zDataSourceMAAS.__str__c�������������� ���C���s����|�j�}z|��|�jt|�j���W�dS��ty2���Y�n6�tyf�}�zt�d|�j|����W�Y�d�}~n d�}~0�0�|�dd��}|s|dS�z4|�� |�s�W�dS�|��|t ||�jj|�j dd���W�dS��ty����t�td|��Y�dS�0�d�S�)NTz%s was malformed: %s�metadata_urlF����)�read_file_or_urlr����retriesz$Failed fetching metadata from url %s)r���� _set_datar����read_maas_seed_dir�MAASSeedDirNone�MAASSeedDirMalformed�LOG�warning�get�wait_for_metadata_service�read_maas_seed_urlr#����readurlr���� Exceptionr���Zlogexc)r���Zmcfg�exc�urlr���r���r���� _get_dataB���s8���� �� zDataSourceMAAS._get_datac�������������� ���C���sl���||�_�|\}}}||�_||�_|rhzt�|�|�_W�n6�tyf�}�zt�d|��d�|�_W�Y�d�}~n d�}~0�0�d�S�)Nz"Invalid content in vendor-data: %s) r���Zuserdata_raw�metadatar���Zconvert_vendordataZvendordata_raw� ValueErrorr.���r/���)r���r6����dataZud�md�vd�er���r���r���r*���i���s���� zDataSourceMAAS._set_datac�����������������C���s ���d|�j��S�)z/Return the subplatform metadata source details.z seed-dir (%s))r���r"���r���r���r����_get_subplatformv���s����zDataSourceMAAS._get_subplatformc�����������������C���s����|�����}|jdkrdS�t���}|�d�}d|tf�}|g}|�jj||j|jd�\}}|rft � d|��nt �d|tt���|����t |�S�)Nr���F�/z%s/%s/meta-data/instance-id)�urlsZmax_wait�timeoutzUsing metadata source: '%s'z(Giving up on md from %s after %i seconds)Zget_url_paramsZmax_wait_seconds�time� monotonic�rstrip� MD_VERSIONr#���Zwait_for_urlZtimeout_secondsr.����debugZcritical�int�bool)r���r6���Z url_paramsZ starttimeZ check_urlr@���Z _responser���r���r���r1���z���s(���� � �z(DataSourceMAAS.wait_for_metadata_servicec�����������������C���s0���|�j�du�rdS�t�|d|�jfi��}|�j�t|�kS�)a��locally check if the current system is the same instance. MAAS doesn't provide a real instance-id, and if it did, it is still only available over the network. We need to check based only on local resources. So compute a hash based on Oauth tokens.NF� datasource)r���r���Zget_cfg_by_path�dsnamer���)r���r���Zncfgr���r���r����check_instance_id����s���� z DataSourceMAAS.check_instance_id)�__name__� __module__�__qualname__�__doc__rJ���r���r ���Zurl_max_waitZurl_timeoutr����propertyr#���r$���r7���r*���r>���r1���rK���r���r���r���r���r������s��� ' r���c�����������������������s0���e�Zd�ZejejejejfZ��fdd�Z ���Z S�)�DataSourceMAASLocalc��������������������s,���t������st�d��dS�t�d��t�����S�)NzNo initramfs applicable configFz!Found initramfs applicable config)r���Z is_applicabler.���rF����superr7���r"����� __class__r���r���r7�������s ���� zDataSourceMAASLocal._get_data)rL���rM���rN���r���ZCMD_LINEZ SYSTEM_CFGZDSZ INITRAMFSZnetwork_config_sourcesr7���� __classcell__r���r���rS���r���rQ�������s����rQ���c��������������������s*���d}t���fdd�|D���}tjf�i�|��S�)z�Return an oauth helper instance for values in cfg. @raises ValueError from OauthUrlHelper if some required fields have true-ish values but others do not.)�consumer_key�consumer_secret� token_key�token_secretc��������������������s���g�|�]}|����|�f�qS�r����r0���)�.0�r��cfgr���r���� <listcomp>���������z$get_oauth_helper.<locals>.<listcomp>)�dictr���ZOauthUrlHelper)r^����keys�kwargsr���r]���r���r!�������s����r!���c��������������������s4���d}d����fdd�|D���}dt�|�d������S�)z;Given a config, generate a unique identifier for this node.)rV���rX���rY�����c��������������������s���g�|�]}����|d���qS�)��rZ���)r[����f�r���r���r���r_�������r`���z&get_id_from_ds_cfg.<locals>.<listcomp>zv1:zutf-8)r����hashlibZsha256�encodeZ hexdigest)r����fieldsZidstrr���rg���r���r�������s����r���c�����������������C���sL���|���d�r|�dd���}�tj�|��r4tt�|���dkr<td��td|��d�d�S�)N�file://����r���z%s: not a directoryz file://%s)�version)� startswithr���r����isdir�len�listdirr,���r2���)Zseed_dr���r���r���r+�������s ���� r+���c�����������������C���s��|du�rt�j}|��d�r$|�dd��}�i�}tD�]�\}}} } |du�rNd|�|f�}nd|�||f�}zXt�|�}|||||d�} | ���r�| r�| j||<�q�t�| j�||<�nt � d|| j��W�q,�t�j�y�}�z<|jdkr�| s�t d ||f��|�n|jdkr�|�W�Y�d}~q,d}~0�0�q,t||��S�) a��� Read the maas datasource at seed_url. read_file_or_url is a method that should provide an interface like util.read_file_or_url Expected format of seed_url is are the following files: * <seed_url>/<version>/meta-data/instance-id * <seed_url>/<version>/meta-data/local-hostname * <seed_url>/<version>/user-data If version is None, then <version>/ will not be used. Nr?������z%s/%sz%s/%s/%s)r)���rA����ssl_detailsz4Fetching from %s resulted in an invalid http code %si���zMissing required %s: %s)r���r(����endswith� DS_FIELDSr���Zfetch_ssl_details�ok�contentsZ decode_binaryr.���r/����codeZUrlErrorr-����check_seed_contents)Zseed_urlr(���rA���rm���r���r)���r;���r���Z _dictnameZbinary�optionalr6���rs���Zrespr=���r���r���r���r2�������sB���� �� �� r2���c����������� ������C���s����i�}g�}t�D�]j\}}}}||�vr0|s|�|��qd|v�rj|�d�\}} } ||vrXi�||<�|�|�||�| <�q|�|�||<�qt|�dkr�td|���|r�td||f���d}|�d�r�t��}tj |�d�|td�}||u�r�td��|�d �|�d �|fS�)z�Validate if dictionary content valid as a return for a datasource. Either return a (userdata, metadata, vendordata) tuple or Raise MAASSeedDirMalformed or MAASSeedDirNone r?���r���z%s: no data files foundz%s: missing files %sNr ���)�default�allowedz%vendor-data was not loadable as yaml.r���� meta-data) ru����append� partitionrp���r,���r-���r0����objectr���Z load_yaml) ZcontentZseed�ret�missingZspathZdpathZ_binaryrz����top�_�pZvd_data�errr���r���r���ry��� ��s4���� �ry���c�������������������@���s���e�Zd�ZdS�)r,���N�rL���rM���rN���r���r���r���r���r,���0��s���r,���c�������������������@���s���e�Zd�ZdS�)r-���Nr����r���r���r���r���r-���4��s���r-���c�����������������C���s���t��|�t�S�r���)r���Zlist_from_depends�datasources)Zdependsr���r���r����get_datasource_list@��s����r�����__main__c���������������������s��ddl�}�ddl}ddl}|�jdd�}|jddddd��|jd d ddd��|jdd d dd��|jddddd��|jddddd��|jdddtd��|jddd�}dD�](\}}|j||d�}|jddddd��q�|���}|j |j |j|jd �} |j du��r<d!D�]@} d"| �d#�}tj�|�r�t�|tj�r�|j�d$|���||_ q�|j �r�t�|j �}d%|v��rf|d%�d&�}| ���D�]*} | |v��rn| | �du��rn|| �| | <��qn|jdu��r�d'|v��r�|d'�|_|jdu��r�|j�d(��|�d)��t| ���fd*d+���fd,d-������fd.d/���|jd0k�r�|j�d1|j����j}|jd�d2k�sN|j�d3��r`t|j�\}}}nt|j|j |d4d5�\}}}t!d6��t!|du��r�d7n|�"����t!d8��|�|��t!d9��|�|du��r�d7n|��nH|jd:k�r�|j��n0|jd;k�r|j�#d2��sd<|j�|_��|j��dS�)=z� Call with single argument of directory or http or https url. If url is given additional arguments are allowed, which will be interpreted as consumer_key, token_key, token_secret, consumer_secret r���NzInteract with MAAS DS)�descriptionz--config�filezspecify DS config file)�metavar�helpr{���z--ckey�keyzthe consumer key to auth withz--tkeyzthe token key to auth withz--csecZsecretzthe consumer secret (likely '')re���z--tseczthe token secret to auth withz--apiverrm���z the apiver to use ( can be used)�subcommands�subcmd)�title�dest))�crawlzcrawl the datasource)r0���zdo a single GET of provided url)� check-seedzread and verify seed at url)r����r6���zthe datasource url�?)r�����nargsr{���)rV���rX���rY���rW���)Z91_kernel_cmdline_urlZ90_dpkg_maasz/etc/cloud/cloud.cfg.d/z.cfgzUsed config in %s. rI���r ���r&���z)Must provide a url or a config with url. r'���c��������������������s�����j�|�dd�jS�)Nr'���)r)���)r3���rw����r6���)r#���r���r����geturl���s����zmain.<locals>.geturlc��������������������s���t�d|���|�����f���d�S�)Nz== %s == %s )�print�decoder����)r����r���r����printurl���s����zmain.<locals>.printurlc��������������������st���|���d�rh�|��������D�]J}|��d�r:��d|�|f���q|dkrT��d|�df���q�d|�|f���qn�|���d�S�)Nr?���z%s%sr}���z meta-data/)rt���r����� splitlines)r6����line)r����r����r����r���r���r�������s���� zmain.<locals>.crawlr����zChecking seed at %s r?���rk�������)rm���r(���r)���z=== user-data ===zN/Az=== meta-data ===z=== vendor-data ===r0���r����z%s/)$�argparse�pprint�sys�ArgumentParser�add_argumentrE����add_subparsers� add_parser� parse_argsZckeyZtkeyZtsecZcsecZconfigr���r����exists�access�R_OK�stderr�writer���Z read_confrb���r6����exitr!���r����r3���rn���r+���r2���Zapiverr����r����rt���)r����r����r�����parserZsubcmds�namer����r�����argsZcreds�fnameZfpathr^���r����r3���Zuserdatar8���r<���r���)r����r����r#���r����r����mainF��s������������� � r����)!rh���Zloggingr���rB���Z cloudinitr���r���r���Zcloudinit.net.cmdliner���Zcloudinit.sourcesr���Z getLoggerrL���r.���rE���ru���r���r���rQ���r!���r���r+���r2���ry���r4���r,���r-���ZDEP_FILESYSTEMZDEP_NETWORKr����r����r����r���r���r���r����<module> ���s@��� � � :' � �