HEX
Server: Apache/2.4.67 (Debian)
System: Linux vps-b2547eb4 6.1.0-41-cloud-amd64 #1 SMP PREEMPT_DYNAMIC Debian 6.1.158-1 (2025-11-09) x86_64
User: root (0)
PHP: 8.2.31
Disabled: NONE
Upload Files
File: //lib/python3/dist-packages/cloudinit/sources/helpers/__pycache__/openstack.cpython-311.pyc
�

܍~c�e���ddlZddlZddlZddlZddlZddlmZddlmZm	Z	m
Z
mZmZddl
mZddlmZeje��Zdd�dfd	ejifd
d�dfd�Zd
ZdZdZdZdZdZdZdZdZdZeeeeeeeefZ dZ!Gd�de"��Z#Gd�d��Z$Gd�dej%���Z&Gd�d e&��Z'Gd!�d"e&��Z(d$d#�Z)dS)%�N)�log)�net�sources�subp�
url_helper�util)�BrokenMetadata)�ec2�network_configc��|S�N���xs �E/usr/lib/python3/dist-packages/cloudinit/sources/helpers/openstack.py�<lambda>rs��1����meta_js�authorized_keysc��|Sr
rrs rrrs��q�r)zetc/network/interfaceszmeta.jszroot/.ssh/authorized_keys))zlocal-hostname�hostnameF)�instance-id�uuidT�latestz
2012-08-10z
2013-04-04z
2013-10-17z
2015-10-15z
2016-06-30z
2016-10-06z
2017-02-22z
2018-08-27)
N�bgpovs�bridge�	cascading�dvs�ethernet�hw_veb�hyperv�ovs�phy�tap�	vhostuser�vifc��eZdZdS)�NonReadableN)�__name__�
__module__�__qualname__rrrr)r)Qs�������Drr)c�,�eZdZd�Zd�Zd�Zd�Zd�ZdS)�SourceMixinc��|jsdS|j�di��}|���D]\}}||kr|cS�dS)Nzblock-device-mapping)�ec2_metadata�get�items)�self�name�bdm�ent_name�devices     r�_ec2_name_to_devicezSourceMixin._ec2_name_to_deviceVse��� �	��4���#�#�$:�B�?�?��"%�)�)�+�+�	�	��X�v��x����
�
�
� ��trc�x�d}|jdkrd}tj|j�|����S)N�public_keys��public-keys)�versionr�normalize_pubkey_data�metadatar1)r3r4s  r�get_public_ssh_keyszSourceMixin.get_public_ssh_keys_s:�����<�1��� �D��,�T�]�->�->�t�-D�-D�E�E�Erc��d}	d|z}|dkrd|z}tj|��}|r|d}n#tj$rYnwxYw|S)NzLABEL=%s�swapzTYPE=%sr)r�find_devs_withr�ProcessExecutionError)r3r4r7�criteria�dev_entriess     r�_os_name_to_devicezSourceMixin._os_name_to_deviceess����	�!�T�*�H��v�~�~�$��-���-�h�7�7�K��
(�$�Q������)�	�	�	��D�	�����
s�.3�A�Ac�(�|sdS|�d��sd|z}tj�|��r|S|�tj�|����}|rt�d||��|SdS)N�/z/dev/%szRemapped device name %s => %s)�
startswith�os�path�exists�
_remap_device�basename�LOG�debug)r3r7�remappeds   r�_validate_device_namez!SourceMixin._validate_device_namers����	��4�� � ��%�%�	(���'�F�
�7�>�>�&�!�!�	��M��%�%�b�g�&6�&6�v�&>�&>�?�?���	��I�I�5�v�x�H�H�H��O��trc��|sdS|g}|dkr|�dd��|dkr|�d��d}t�d|��|D]0}|�|��}|�|��}|rn�1|sNt�d|��|D]0}|�|��}|�|��}|rn�1|sdSt�d||��|S)N�rootr�amiz(Using ec2 style lookup to find device %sz.Using openstack style lookup to find device %szMapped %s to device %s)�insert�appendrPrQr8rSrG)r3r4�namesr7�ns     r�device_name_to_devicez!SourceMixin.device_name_to_device�s@���	��4�����6�>�>��L�L��E�"�"�"��5�=�=��L�L�� � � ����	�	�<�e�D�D�D��	�	�A��-�-�a�0�0�F��/�/��7�7�F��
���
��	��I�I�F��N�N�N��
�
���0�0��3�3���3�3�F�;�;�����E���	��4��I�I�.��f�=�=�=��MrN)r*r+r,r8r@rGrSr[rrrr.r.Usb���������F�F�F�����������rr.c��eZdZd�Zejd���Zejdd���Zejd���Zejd���Z	d�Z
dd�Zd	�Zd
S)�
BaseReaderc��||_dSr
)�	base_path)r3r_s  r�__init__zBaseReader.__init__�s
��"����rc��dSr
r�r3�base�add_onss   r�
_path_joinzBaseReader._path_join�����rFc��dSr
r�r3rL�decodes   r�
_path_readzBaseReader._path_read�rfrc��dSr
r�r3s r�_fetch_available_versionsz$BaseReader._fetch_available_versions�rfrc��dSr
rrls r�_read_ec2_metadatazBaseReader._read_ec2_metadata�rfrc�Z�	|���}n:#t$r-}t�d|j|��g}Yd}~nd}~wwxYwd�tt
t����D��}t}|D]	}||vr�|}t�d||��|S)Nz4Unable to read openstack versions from %s due to: %sc��g|]}|��Srr)�.0�vs  r�
<listcomp>z4BaseReader._find_working_version.<locals>.<listcomp>�s��<�<�<�1�Q�<�<�<rzSelected version '%s' from %s)	rm�	ExceptionrPrQr_�reversed�list�OS_VERSIONS�	OS_LATEST)r3�versions_available�e�	supported�selected_version�potential_versions      r�_find_working_versionz BaseReader._find_working_version�s���	$�!%�!?�!?�!A�!A�����	$�	$�	$��I�I�F����
�
�
�
"$�����������
	$����=�<���k�):�):� ;� ;�<�<�<�	�$��!*�	�	�� �(:�:�:��0����	�	�+���	
�	
�	
�
 �s��
A�#A	�	Ac��|�dd���d��}|�d��}d�|D��}|std|z���|j|jdg|�R�}|�||���S)N�content_pathrrIc�0�g|]}t|���|��Sr)�len)rr�ps  rrtz1BaseReader._read_content_path.<locals>.<listcomp>�s#��9�9�9�a�#�a�&�&�9��9�9�9rz!Item %s has no valid content path�	openstack�ri)r1�lstrip�splitr	rer_rj)r3�itemrirL�path_pieces�valid_piecess      r�_read_content_pathzBaseReader._read_content_path�s����x�x���+�+�2�2�3�7�7���j�j��o�o��9�9�;�9�9�9���	O� �!D��!M�N�N�N��t��t�~�{�I�[�I�I�I�����t�F��3�3�3rc����tjtjtt
tf������fd�}ddd�}|������}|���D]�\}\}}}��	�j
|��}d}d}	��|��}d}nR#t$rE}	|st�d	||	��nt�d
||	��Yd}	~	nd}	~	wwxYw|r|std|z���|r7|r5	||��}n(#t $r}	t#d|�d
|	����|	�d}	~	wwxYw|r|||<��|d}
d|
vrM|
d}	t%j|��|
d<n,#t(t*f$r}	t#d|	z��|	�d}	~	wwxYwi}|
�dg��}
|
D]P}d|vr�|d}	��|��||<�)#t $r}	t#d|�d
|	����|	�d}	~	wwxYw||d<|
�dd��}|rC	��|d���}||d<n%#t$r}	t#d|	z��|	�d}	~	wwxYw	|
dd|d<n#t0$rYnwxYw����|d<t4D]:\}}}|r||
vrt#d|z���||
vr|
�|��|
|<�;|S)z�Reads a version 2 formatted location.

        Return a dict with metadata, userdata, ec2-metadata, dsmode,
        network_config, files and version (2).

        If not a valid location, raise a NonReadable exception.
        )�
root_typesc�D��i}��d|d��dtjf|d<��d|d��dd�f|d<��d|d	��d�f|d
<��d|d��d�f|d<��d|d
��d�f|d<|S)Nr�zmeta_data.jsonTr?�	user_dataFc��|Sr
rrs rrz7BaseReader.read_v2.<locals>.datafiles.<locals>.<lambda>�s��!�r�userdatazvendor_data.json�
vendordatazvendor_data2.json�vendordata2znetwork_data.json�networkdata)rer�	load_json)r=�files�load_json_anytyper3s  ��r�	datafilesz%BaseReader.read_v2.<locals>.datafiles�s�����E�����W�6F�G�G����
!�E�*������W�k�B�B����!�E�*������W�6H�I�I��!�#�E�,������W�6I�J�J��!�$�E�-� �����W�6I�J�J��!�$�E�-� �
�Lrr�)r�r=NFTz*Failed reading optional path %s due to: %sz+Failed reading mandatory path %s due to: %szMissing mandatory path: %s�Failed to process path �: r?�random_seedz.Badly formatted metadata random_seed entry: %sr�rLzFailed to read provided file rr�z(Failed to read network configuration: %s�meta�dsmodezec2-metadatazNo '%s' entry in metadata)�	functools�partialrr��dictrw�strrr2rer_rj�IOErrorrPrQr)rur	�base64�	b64decode�
ValueError�	TypeErrorr1r��KeyErrorro�
KEY_COPIES)r3r��results�datar4rL�required�
translator�foundr{r?r�r��metadata_filesr��net_item�content�
target_key�
source_key�is_requiredr�s`                   @r�read_v2zBaseReader.read_v2�s]����&�-��N��d�C�'8�
�
�
��	�	�	�	�	�	�B��
�
���y��3�3�5�5�6�6��48�J�J�L�L�	%�	%�0�T�/�D�(�J��?�?�4�>�4�8�8�D��D��E�
����t�,�,�������
�
�
����I�I�D�d�A������I�I�E�t�Q�������������

�����
G��
G�!�">��"E�F�F�F��
��
��%�:�d�+�+�D�D�� ����(�.�;?�4�4���C��������������
%� $���
���:�&���H�$�$�"�=�1�K�
�*0�*:�;�*G�*G���'�'���	�*�
�
�
�$�D�q�H���������
������!���g�r�2�2��"�		�		�D��T�!�!����<�D�
�"�5�5�d�;�;��d�����
�
�
�$�n�=A�T�T�1�1�E���������
����!����
�<�<� 0�$�7�7���	�
��1�1�(�4�1�H�H��,3��(�)�)���
�
�
�$�>�!�D���������
����	� (�� 0�� :�G�H�����	�	�	��D�	����#'�"9�"9�";�";����6@�	@�	@�1�Z��[��
O�z��9�9�$�%@�:�%M�N�N�N��X�%�%�'/�|�|�J�'?�'?���$���s��B2�2
D�<;C<�<D�D+�+
E�5E�E�0F�F1�F,�,F1�G7�7
H�H�H�=I�
I<�$I7�7I<�J�
J�JN�F)
r*r+r,r`�abc�abstractmethodrerjrmrorr�r�rrrr]r]�s�������#�#�#�	��
�
���
�	��
�
�
���
�	��
�
���
�	��
�
���
� � � �:4�4�4�4�G�G�G�G�Grr])�	metaclassc�>��eZdZ�fd�Zd�Zdd�Zd�Zd�Zd�Z�xZ	S)	�ConfigDriveReaderc�f��tt|���|��d|_dSr
)�superr�r`�	_versions)r3r_�	__class__s  �rr`zConfigDriveReader.__init__fs-���
���&�&�/�/�	�:�:�:�����rc�N�|gt|��z}tjj|�Sr
)rwrKrL�join)r3rcrd�
componentss    rrezConfigDriveReader._path_joinjs#���V�d�7�m�m�+�
��w�|�Z�(�(rFc�.�tj||���S)Nr�)r�	load_filerhs   rrjzConfigDriveReader._path_readns���~�d�6�2�2�2�2rc���|j�O|�|jd����fd�tj���D��}t|��|_|jS)Nr�c���g|]@}tj�tj�������>|��ASr)rKrL�isdirr�)rr�drLs  �rrtz?ConfigDriveReader._fetch_available_versions.<locals>.<listcomp>tsK��������7�=�=�����d�!3�!3�4�4�����r)r�rer_rK�listdir�sorted)r3r�rLs  @rrmz+ConfigDriveReader._fetch_available_versionsqsi����>�!��?�?�4�>�;�?�?�D�������D�)�)����E�
$�E�]�]�D�N��~�rc��|�|jddd��}tj�|��siS	tj|�|����S#t$r}td|�d|����|�d}~wwxYw)Nr
rzmeta-data.jsonr�r�)
rer_rKrLrMrr�rjrur	)r3rLr{s   rroz$ConfigDriveReader._read_ec2_metadata|s�������N�E�8�-=�
�
���w�~�~�d�#�#�	��I�
��~�d�o�o�d�&;�&;�<�<�<���
�
�
�$�n�7;�t�t�Q�Q�?���������
���s�&A'�'
B�1B�Bc��i}t���D]A}|�|j|��}tj�|��r|||<�Bt|��dkrtd|jz���i}t�	��D]�\}\}}}||vr|||}	|�
|��}n%#t$r}	td|z��|	�d}	~	wwxYw	||��||<�a#t$r}	td|�d|	����|	�d}	~	wwxYwtj|��||<��|d}
|d}|�d	|
��}
|
r#|
���}d
�|D��|d	<d|vr|d|d<d|d
�}
d|vr|d|
d<|�dd��|
d<i|
d<|
S)z�Reads a version 1 formatted location.

        Return a dict with metadata, userdata, dsmode, files and version (1).

        If not a valid path, raise a NonReadable exception.
        rz%s: no files foundzFailed to read: %sNr�r�rrr<c�Z�g|](}t|���|�d���&|��)S)�#)r�rJ)rr�lines  rrtz-ConfigDriveReader.read_v1.<locals>.<listcomp>�sJ��!�!�!���t�9�9�!�&*�_�_�S�%9�%9�!��!�!�!rrr;)r=r?r�z	user-datarr�r�)�FILES_V1�keysrer_rKrLrMr�r)r2rjr�r	ru�copy�deepcopyr1�
splitlines)r3r�r4rL�md�keyr��default�contentsr{�keydatar�linesr�s              r�read_v1zConfigDriveReader.read_v1�s[�����M�M�O�O�	#�	#�D��?�?�4�>�4�8�8�D��w�~�~�d�#�#�
#�"��d����u�:�:��?�?��2�d�n�E�F�F�F�
��2:�.�.�2B�2B�	1�	1�.�T�-�C��W��u�}�}��T�{��M�#���t�4�4�H�H���M�M�M�(�)=��)D�E�E�1�L�����M�����)�j��2�2�B�s�G�G�� ����(�.�;?�4�4���C�������������
�-��0�0��3����&�'���Y�-���+�+�m�W�5�5���	��&�&�(�(�E�!�!�!�!�!�!�B�}���G�#�#� '�
� 6�B�}����
�
���w��� '�� 1�G�H��&�k�k�+�r�:�:��
�������s0�9C�
C1�C,�,C1�5D�
D)�D$�$D)r�)
r*r+r,r`rerjrmror��
__classcell__�r�s@rr�r�es�������������)�)�)�3�3�3�3�	�	�	����G�G�G�G�G�G�Grr�c�:��eZdZd	�fd�	Zd�Zd
d�Zd�Zd�Z�xZS)�MetadataReaderN�c����tt|���|��||_t	|��|_t
|��|_d|_dSr
)	r�r�r`�ssl_details�float�timeout�int�retriesr�)r3�base_urlr�r�r�r�s     �rr`zMetadataReader.__init__�sN���
�n�d�#�#�,�,�X�6�6�6�&����W�~�~����7�|�|�������rc�(�|j�|jSg}|�|jd��}|�|d���}|���D].}|���}|s�|�|���/||_|jS)Nr�Tr�)r�rer_rjr��striprX)r3r��version_pathr�r�s     rrmz(MetadataReader._fetch_available_versions�s����>�%��>�!������t�~�{�C�C���/�/�,�t�/�<�<���&�&�(�(�	�	�D��:�:�<�<�D��
���L�L����������~�rFc��d�}tj||j|j|j|���}|r|j���S|jS)Nc�p�	t|j��}|dkrdSn#ttf$rYnwxYwdS)Ni�FT)r��coder�r�)�
_request_args�causer�s   r�should_retry_cbz2MetadataReader._path_read.<locals>.should_retry_cb�sS��
��5�:�����3�;�;� �5����z�*�
�
�
���
�����4s��3�3)r�r�r��exception_cb)r�readurlr�r�r�r�ri)r3rLrir��responses     rrjzMetadataReader._path_read�sh��	�	�	��%���L��(��L�(�
�
�
���	%��$�+�+�-�-�-��$�$rc�&�tj|g|�R�Sr
)r�combine_urlrbs   rrezMetadataReader._path_joins���%�d�5�W�5�5�5�5rc�N�tj|j|j|j���S)N)r�r�r�)r
�get_instance_metadatar�r�r�rls rroz!MetadataReader._read_ec2_metadatas,���(��(��L��L�
�
�
�	
r)Nr�r�r�)	r*r+r,r`rmrjreror�r�s@rr�r��s~�������������
�
�
�%�%�%�%�.6�6�6�
�
�
�
�
�
�
rr�c
����� �|�dSgd�gd�d�� |�dg��}|�dg��}|�dg��}g}i�d}d	}g}|D�]�g}	t� fd
�����D����}
d�vr�d|
d<d}��d��r2��d�����}|��d
<|
�d��|�d
�dd�}�fd�|D��D�]z}
t� fd�|
���D����}|
ddkr|�ddi��n�|
ddkr|�ddi��n�|
ddvr|�d|
di��n�|
ddvr,|�d|
�d��d���nL|
ddvrB|
�ddi��|�d|
�d��d���|
ddvr|
�dd i��|
dd!krd |d!<|
dd"krd |d"<|	�|����||
�d#|	i���dd$vr�i}|r||d%<����D]8\}}|d&kr�|�d'��r|�||i���9||z}|d(z
}|�|
d)d*tj�d&��f��|
�||d+���||d<n�dd,vr��d-�d.�d/��}|
�|�d/�d0d1���|�|
d-d*�d-f��|�|
dd2�d/z�d-f��|��d0|d3���nH�dtvr!t�d4�d��|
�d5|d6���|�|
��|�|d
<��d7�|D��}|s|�r	|�tj
��}����D]C\}}|�d��r�|�d8��|vr||d8|d<�D|D]L}|�d%��}|std9|z���||vrtd:|z���|||d<�M|D]J\}
}�}t|t t"f��r��fd;�|D��|
|<�6��|dz|
|<�Ktj��}|r%|D]"}
|
d|vr||
d|
d%<d<|
d<�#|D]0}|}
|
�dd=i��|�|
���1d(|d>�S)?a)Return a dictionary of network_config by parsing provided
       OpenStack ConfigDrive NetworkData json format

    OpenStack network_data.json provides a 3 element dictionary
      - "links" (links are network devices, physical or virtual)
      - "networks" (networks are ip network configurations for one or more
                    links)
      -  services (non-ip services, like dns)

    networks and links are combined via network items referencing specific
    links via a 'link_id' which maps to a links 'id' field.

    To convert this format to network_config yaml, we first iterate over the
    links and then walk the network list to determine if any of the networks
    utilize the current link; if so we generate a subnet entry for the device

    We also need to map network_data.json fields to network_config fields. For
    example, the network_data links 'id' field is equivalent to network_config
    'name' field for devices.  We apply more of this mapping to the various
    link types that we encounter.

    There are additional fields that are populated in the network_data.json
    from OpenStack that are not relevant to network_config yaml, so we
    enumerate a dictionary of valid keys for network_yaml and apply filtering
    to drop these superflous keys from the network_config yaml.
    N)r4�type�mac_address�subnets�params�mtu)r��address�netmask�	broadcast�metric�gateway�pointopoint�scope�dns_nameservers�
dns_search�routes)�physical�subnet�links�networks�serviceszbond%drc3�:�K�|]\}}|�dv�||fV��dS)r	Nr�rr�krs�
valid_keyss   �r�	<genexpr>z#convert_net_json.<locals>.<genexpr>PsC�����
�
��q�!�q�J�z�4J�/J�/J�Q��F�/J�/J�/J�/J�
�
rr4�ethernet_mac_address�idr�)r4�macrr�c�8��g|]}|d�dk�|��S)�linkrr)rrrZrs  �rrtz$convert_net_json.<locals>.<listcomp>fs+���G�G�G�a�q��y�D��J�/F�/F��/F�/F�/Frc3�:�K�|]\}}|�dv�||fV��dS)r
Nrrs   �rrz#convert_net_json.<locals>.<genexpr>gsC��������1�a�a�:�h�;O�6O�6O��A��6O�6O�6O�6O��r�	ipv4_dhcp�dhcp4�	ipv6_dhcp�dhcp6)�
ipv6_slaaczipv6_dhcpv6-stateless�ipv6_dhcpv6-stateful)�ipv4�staticr �
ip_address)r�r�)�ipv6�static6z	accept-raFr#)rrTrr"r�)�bondr��
bond_linksr$r;�bond_interfacesz%s)r�r4)�vlan�	vlan_link�.�vlan_id�vlan_mac_address)r4r*r�z%%s.%s)rr4z9Unknown network_data link type (%s); treating as physicalr	)r�r�c�L�g|]!}|�d��dk�d|v�|��"S)r�r	r4)r1)rrr�s  rrtz$convert_net_json.<locals>.<listcomp>�s8������Q�U�U�6�]�]�j�8�8�V�1�_�_��_�_�_rrz#No mac_address or name entry for %sz"Unable to find a system nic for %sc�2��g|]}��|dz��S)r4r)rr�target�fmt�link_id_infos  ��rrtz$convert_net_json.<locals>.<listcomp>�s5������;A�C�,�v�.�v�6�6���r�
infiniband�
nameserver)r=�config)r1r�r2�lower�updaterXrJr�r��KNOWN_PHYSICAL_TYPESrP�warningr�get_interfaces_by_macr��
isinstancerw�tuple�get_ib_hwaddrs_by_interface)!�network_json�
known_macsrrr
�link_updates�
bond_name_fmt�bond_numberr3r��cfg�
link_mac_addr�curinfo�networkr
r�rrs�	link_namer4�
need_names�_link_id�infor�rr��targets�ib_known_hwaddrs�servicer/rr0rs!                             @@@@r�convert_net_jsonrLs�������6���t�
�
�
�
�
�
���J�0
���W�b�)�)�E����
�B�/�/�H����
�B�/�/�H��L��L��M��K�
�F��w.�w.�����
�
�
�
�#�z�z�|�|�
�
�
�
�
���T�>�>��v�,�C��K��
��8�8�*�+�+�	5� �H�H�%;�<�<�B�B�D�D�M�'4�L��d��$��G�G�F�O�O� ��t�*���L�	
�
��H�G�G�G�8�G�G�G�'	#�'	#�G������#*�=�=�?�?������F��v��+�-�-��
�
�v�w�/�0�0�0�0����K�/�/��
�
�v�w�/�0�0�0�0����%���
�
�
�v�w�v��7�8�8�8�8����$6�6�6��
�
� (�#*�;�;�|�#<�#<����������$7�7�7��
�
�K��/�0�0�0��
�
� )�#*�;�;�|�#<�#<�������v��"G�G�G��
�
�K��.�/�/�/��v��&�(�(�!%��v���v��&�(�(�!%��v���N�N�6�"�"�"�"��
�
�I�w�'�(�(�(���<�8�#�#��F��
6�(5��}�%��
�
���
*�
*���1���$�$���\�\�&�)�)�*��M�M�1�a�&�)�)�)��
&��3�I��1��K�

����%���M�$�|�"4�5�5�	�
�
�
�
�J�J�&�)�<�<�=�=�=�'�G�F�O�O�
�&�\�X�
%�
%�"�;�/�/�/��i���A�D��J�J� �#�I��#'�(:�#;���
�
�
�
����k�4��k�9J� K�L�L�L�����f�h��i��8�$�{�:K�L�
�
�
�
�N�N�4�(:�#;�T�J�J�K�K�K�K��F�|�#7�7�7���� ���L����

�J�J�
�=�I�I�J�J�J��
�
�c����&-��W�T�]�#�#�������J��?�\�?����2�4�4�J�+�0�0�2�2�	7�	7�N�H�d��x�x����
���x�x����*�,�,�)�$�u�+�6��V����	(�	(�A��%�%�
�&�&�C��
L� �!F��!J�K�K�K��*�$�$� �!E��!I�J�J�J�"�3��A�f�I�I�&2�	?�	?�"�C��c�7��'�D�%�=�1�1�
?������EL�����C�����g�!6�v�!>�>��C����6�8�8���+��	+�	+�C��6�{�.�.�.�%5�c�&�k�%B��M�"�*��F����������
�
�F�L�)�*�*�*��
�
�c������F�+�+�+r)NN)*r�r�r�r�rK�	cloudinitr�loggingrrrrr�cloudinit.sourcesr	�cloudinit.sources.helpersr
�	getLoggerr*rPr�r�r�ry�	OS_FOLSOM�
OS_GRIZZLY�	OS_HAVANA�
OS_LIBERTY�
OS_NEWTON_ONE�
OS_NEWTON_TWO�OS_OCATA�OS_ROCKYrxr6r�r)r.�ABCMetar]r�r�rLrrr�<module>r[sT���
�
�
�
�
�
�
���������	�	�	�	�$�$�$�$�$�$�:�:�:�:�:�:�:�:�:�:�:�:�:�:�,�,�,�,�,�,�)�)�)�)�)�)��g���!�!�� 0���b�A��4�>�2�.�"3�[�[�"�!E�	����
�
�	��	�
�
��	�
�
��
��
�����
��
������	����"	�	�	�	�	�'�	�	�	�I�I�I�I�I�I�I�I�XA�A�A�A�A�3�;�A�A�A�A�Hl�l�l�l�l�
�l�l�l�^6
�6
�6
�6
�6
�Z�6
�6
�6
�th,�h,�h,�h,�h,�h,r