%PDF- %PDF-
Mini Shell

Mini Shell

Direktori : /lib/python3/dist-packages/cloudinit/config/__pycache__/
Upload File :
Create Path :
Current File : //lib/python3/dist-packages/cloudinit/config/__pycache__/cc_mounts.cpython-312.pyc

�

��f�H��$�UdZddlZddlZddlZddlZddlZddlmZmZm	Z	m
Z
mZddlm
Z
mZddlmZddlmZddlmZddlmZd	d
gegd�Zeed<d
Zej4e�ZdZej4e�ZdZdZdZ dZ!ejDe#�Z$d�Z%d�Z&d�Z'd7d�Z(d7d�Z)de*de	e*dee*e*fde+fd�Z,d8d�Z-de*de*ddfd �Z.d9d!�Z/d"�Z0de
ee*ee*e*fee*ffd#�Z1d$ee	ee	e*dee*e*fd%ee*e*fd&ee	e*d'edeee*fd(�Z2d$eee*deee*fd)�Z3d$eee*d*e*dee*e*fd%ee*e*fd'edeee*fd+�Z4d,eee*deee*fd-�Z5d,eee*ddfd.�Z6d/e+d0e+d1ee*ddfd2�Z7d3e*d4ed'ed5e8ddf
d6�Z9y):z-Mounts: Configure mount points and swap files�N)�Dict�List�Optional�Tuple�cast)�subp�util)�Cloud)�Config)�
MetaSchema)�PER_INSTANCE�	cc_mounts�all)�id�distros�	frequency�activate_by_schema_keys�metaz&^([x]{0,1}[shv]d[a-z][0-9]*|sr[0-9]+)$z^.+:.*z
/etc/fstabzcomment=cloudconfig�i@c�l�|dvrydD]*}|j|�s�|jd�dk(s�*yy)N)�ami�root�swapT)�	ephemeral�ebs�:���F)�
startswith�find)�name�enumnames  �</usr/lib/python3/dist-packages/cloudinit/config/cc_mounts.py�is_meta_device_namer#.sB���&�&��)����?�?�8�$����3��2�)=����c�0�tj|�ryy)NTF)�NETWORK_NAME_RE�match)r s r"�is_network_devicer(:s�����T�"��r$c��t|�d|��d|��g}|D]+}|�|��}tjj|�s�)|cSy)N�pz-part)�str�os�path�exists)�device_path�partition_number�potential_suffixes�suffix�potential_partition_devices     r"�_get_nth_partition_for_devicer4AsW�����!�#�%�'���
%�.��/:�F�%C�"�
�7�7�>�>�4�5�-�-�.�r$c��tjj|�jd�d}tjj	d|�}|�Otjj	|tjj|�jd�d�}tjj|�S)N�/rz/sys/block/)r,r-�realpath�split�joinr.)r/�partition_path�device_name�sys_paths    r"�_is_block_devicer=Ns����'�'�"�"�;�/�5�5�c�:�2�>�K��w�w�|�|�M�;�7�H��!��7�7�<�<��b�g�g�&�&�~�6�<�<�S�A�"�E�
���7�7�>�>�(�#�#r$c�:�tjd|�|}|dk(rd}tjd�t|�r|Stj|�\}}|}|r.|j||�}||k7rtjd||�t
|�r9||�}|sy|jd�sd|��}tjd||�ntj|�rd|��}d}|�
t|d	�}nt||�}|�yt||�r|�|S|Sy)
Nz+Attempting to determine the real name of %sr�
ephemeral0z2Adjusted mount option from ephemeral to ephemeral0zMapped device alias %s to %sr6z/dev/zMapped metadata name %s to %s�)�LOG�debugr(r	�expand_dotted_devname�getr#r�DEVICE_NAME_REr'r4r=)�	startname�transformer�aliases�devnamer/r0�origr:s        r"�sanitize_devnamerKXs-���I�I�;�Y�G��G��+�����	�	�F�G���#���$(�$>�$>�w�$G�!�K�!��D���k�k�+�{�;���;���I�I�4�d�K�H��;�'�!�+�.�����%�%�c�*�'2�4�K��	�	�1�4��E����	�*�'2�4�K��N���6�{�A�F��6��)�
���!����^�4��%�!�!���r$�original�	sanitized�
fstab_devs�returnc��||k7rtjd||�|�tjd|�y||vrtjd|||�yy)z*Get if the sanitized device name is valid.zchanged %s => %sz+Ignoring nonexistent default named mount %sFz&Device %s already defined in fstab: %sT)rArB)rLrMrNs   r"�sanitized_devname_is_validrQ�s_���H���	�	�$�h�	�:����	�	�?��J��	�j�	 ��	�	�4���y�!�	
�
�r$c	���|�tj�d}|dz}d||d�}|�|�|}nk|retj|�}|j|j
z}||d<|�t
t|dz�|�}n||dzkDrt|dz�}n|�|}||d<|dtzkr|}nB|d	tzkr
dtz}n,ttj|tz��tz}t
||�}||d
<i}	|j�D]*\}
}t|t�rd|tzz|	|
<�&||	|
<�,tj!d|	d
|	d
|	d|	d|	d�|S)N�total��na)�avail�max_in�memrV�g�������?�max��sizez%s MBzCsuggest %s swap for %s memory with '%s' disk given max=%s [max=%s]'rXrW)r	�read_meminfor,�statvfs�f_frsize�f_bfree�min�int�GB�round�math�sqrt�items�
isinstance�MBrArB)�memsize�maxsize�fsys�sugg_max�infor^rV�minsizer\�pinfo�k�vs            r"�suggested_swapsizers�s������#�#�%�g�.����{�H��W�W�=�D��|�����	
��*�*�T�"��� � �7�?�?�2����W�
��?��#�e�a�i�.�(�3�G�
����
&��%�#�+�&�G�	�����D��K���R�����	�2��7�	��b�&����	�	�'�B�,�/�0�2�5���w�� �D��D��L��E��
�
�����1��a����!�b�&�)�E�!�H��E�!�H�	��I�I�M�
�f�
�
�e��
�g��
�h��
�e��
��Kr$�fnamer\c�����d���fd�}tjj|�}tj|�tj
|�d��dk(r1t
jddd|g�t
jdd	|g��d
k(r"tj�dkr|||d�n	|||d
�tjj|�rtj|d�	t
jd|g�y#tj$r"tjd�|||d�Y��wxYw#tj$rtj|��wxYw)zSize is in MiB.z6Failed to create swapfile '%s' of size %sMB via %s: %sc�h��tjd|�|�|dk(r
ddd|z|g}n(|dk(rddd|zdd	|zg}ntjd
��	tj|d��y#tj$r4}tj	�||||�tj|��d}~wwxYw)
Nz3Creating swapfile in '%s' on fstype '%s' using '%s'�	fallocatez-lz%sM�ddzif=/dev/zerozof=%szbs=1Mzcount=%sz:Missing dependency: 'dd' and 'fallocate' are not availableT)�capture)rArBr�ProcessExecutionErrorrnr	�del_file)rtr\�method�cmd�e�errmsg�fstypes     ��r"�create_swapz$create_swapfile.<locals>.create_swap�s�����	�	�A����		
��[� ���e�d�l�E�:�C�
�t�^����%����T�!��C��,�,�L��
�	��I�I�c�4�(���)�)�	��H�H�V�U�D�&�!�4��M�M�%� ���	�s�A*�*B1�=/B,�,B1r@�btrfs�truncatez-s�0�chattrz+C�xfs)rY�rxrwz4fallocate swap creation failed, will attempt with ddi��mkswapN)r,r-�dirnamer	�
ensure_dir�get_mount_infor�kernel_versionrzrArnr.�chmodr{)rtr\r��swap_dirrr�s    @@r"�create_swapfiler��s4���F�F��<�w�w���u�%�H��O�O�H��
�
 �
 ��
*�1�
-�F�
����	�	�:�t�S�%�0�1��	�	�8�T�5�)�*�
���4�.�.�0�7�:��E�4��&�	+���t�[�1�

�w�w�~�~�e���
�
�5�%� ���	�	�8�U�#�$���)�)�	+��H�H�K�L���t�T�*�	+���%�%���
�
�e��
��s�5
D
�5E�
2E�E�*E/c���tjj|�}t|�j	�dk(r;	tj�d}tj|�t|||��}tt|dz��}|stjd�ytjtjdt||g�	�|S#t$rtjd�YywxYw)
z�
    fname: full path string of filename to setup
    size: the size to create. set to "auto" for recommended
    maxsize: the maximum size
    �autorSz)Not creating swap: failed to read meminfoN)rlrkrjrz'Not creating swap: suggested size was 0zSetting up swap file)�msg�func�args)r,r-r�r+�lowerr	r]�IOErrorrArBr�rsrb�log_timer�)rtr\rkr�rj�mibsizes      r"�setup_swapfiler�s����w�w���u�%�H�
�4�y����F�"�	��'�'�)�'�2�G�
	
����!�!��7�G�
���#�d�e�n�%�&�G���	�	�;�<���M�M��	�	�"�
��W�
�	��L��+�	��I�I�A�B��	�s�C�C6�5C6c���t|t�stjd�y|j	dd�}|j	dd�}|j	dd�}|r|stjd�ytjj|�r�tjjd	�stjd
|�|S	tjd	�j�D]0}|j|dz�s�tjd|�|cStjd
|�	t|t�r|dk7rtj|�}t|t�rtj|�}t!|||��S#t$rtjd|�|cYSwxYw#t$r }tjd|�Yd}~yd}~wwxYw)zahandle the swap config, calling setup_swap if necessary.
    return None or (filename, size)
    z%input for swap config was not a dict.N�filenamez	/swap.imgr\rrkzno need to setup swapz/proc/swapsz:swap file %s exists, but no /proc/swaps exists, being safe� zswap file %s already in usez+swap file %s exists, but not in /proc/swapsz.swap file %s exists. Error reading /proc/swapsr�)rtr\rkzfailed to setup swap: %s)rh�dictrA�warningrDrBr,r-r.r	�load_text_file�
splitlinesr�	Exceptionr+�human2bytesr�)�swapcfgrtr\rk�liner~s      r"�handle_swapcfgr�5s����g�t�$����;�<���K�K�
�K�0�E��;�;�v�q�!�D��k�k�)�T�*�G��U��	�	�)�*��	�w�w�~�~�e���w�w�~�~�m�,��I�I�L��
��L�
	��+�+�M�:�E�E�G�
!���?�?�5�3�;�/��I�I�;�U�C� �L�
!�
�I�I�C�U�K�3��d�C� �T�V�^��#�#�D�)�D��g�s�#��&�&�w�/�G��E��g�F�F���	��K�K�@�%�
��L�		���3����.��2�2���3�s7�:F�	F�#F�;AF?�!F<�;F<�?	G(�G#�#G(c�B�g}i}g}tjjt�rrt	j
t�j
�D]H}t|vr|j|��|j�}|s�0|||d<|j|��J|||fS)asParse /etc/fstab.

    Parse fstab, ignoring any lines containing "comment=cloudconfig".
    :return: A 3-tuple containing:
        - A list of lines exactly as they appear in fstab
        - A dictionary with key being the first token in the line
          and value being the entire line
        - A list of any lines that were ignored due to "comment=cloudconfig"
    r)
r,r-r.�
FSTAB_PATHr	r�r��MNT_COMMENT�appendr8)�fstab_linesrN�
fstab_removedr��tokss     r"�parse_fstabr�es����K��J��M�	�w�w�~�~�j�!��'�'�
�3�>�>�@�	)�D��d�"��$�$�T�*���:�:�<�D��&*�
�4��7�#��"�"�4�(�	)��
�M�1�1r$�mounts�device_aliases�default_fields�cloudc��g}|D]�}t|t�stjd|��*t	|d�}t||j|��}t|||�r
|g|ddz}	n|}	t|	�D]!\}
}|�	||
|	|
<�t	|	|
�|	|
<�#|	|t|	�dz
}	|j|	���|S)aSanitize mounts to ensure we can work with devices in config.

    Specifically:
     - Ensure the mounts configuration is a list of lists
     - Transform and sanitize device names
     - Ensure all tokens are strings
     - Add default options to any lines without options
    z%Mount option not a list, ignoring: %sr�rHr@N)rh�listrAr�r+rK�device_name_to_devicerQ�	enumerate�lenr�)r�rNr�r�r��
updated_linesr��start�sanitized_devname�updated_line�index�tokens            r"�sanitize_mounts_configurationr�s����M��+���$��%��K�K�?��F���D��G���,��5�.�.��
��&�e�->�
�K�-�.��a�b��9�L��L�&�l�3�	?�L�E�5��}�&4�U�&;��U�#�&)�,�u�*=�&>��U�#�		?�	��s�<�'8�':�;�;�����\�*�5+�6�r$c���g}g}|ddd�D]M}|d�|d|vr.tjd|d�|j|d��=|j|��O|ddd�S)z�Remove any entries that have a device name that doesn't exist.

    If the second field of a mount line is None (not the string, the value),
    we skip it along with any other entries that came before it that share
    the same device name.
    Nrr@rz$Skipping nonexistent device named %s)rArBr�)r��actlist�dev_denylistr�s    r"�remove_nonexistent_devicesr��sz���G��L��t��t��!����7�?�d�1�g��5��I�I�<�d�1�g�F�����Q��(��N�N�4� �!��4�R�4�=�r$�default_mount_optionsc�L�	�tj|�}ddd|ddggd�fD]~�	�	d}t||j|��}t	|||�s�.tt|��	d<t�	fd	�|D��}|rtjd
|��n|j�	���|S)zAdd default mounts to the user provided mount configuration.

    Add them only if no other entry has the same device name
    r?z/mntr�r��2)r�noner�swr�r�rr�c3�4�K�|]}|d�dk(���y�w)rN�)�.0�cfgm�
default_mounts  �r"�	<genexpr>z,add_default_mounts_to_cfg.<locals>.<genexpr>�s$�����%
�,0�D��G�}�Q�'�'�%
�s�z-Not including %s, already previously included)�copy�deepcopyrKr�rQrr+�anyrArBr�)
r�r�rNr�r��
new_mountsr�rM�default_already_existsr�s
         @r"�add_default_mounts_to_cfgr��s�������v�&�J�	�v�v�'<�c�3�G�0��)�
��a� ��$��5�.�.��
�	�*�%��J�G�� ��Y�/�
�a��!$�%
�4:�%
�"
��"��I�I�E�u�M�����-�(�))�*�r$r�c�^�|D�cgc]}|dd|d�dt��gz|ddz��c}Scc}w)z=Add "comment=cloudconfig" to the mount options of each entry.N��,rY)r�)r��entrys  r"�add_commentr��sL�����	�b�q�	��a��z��;�-�0�1�1�E�!�"�I�=����s�"*c�X�td�|D��rtjddg�yy)z1Call 'swapon -a' if any entry has a swap fs type.c3�,K�|]}|ddk(���y�w)rTrNr�)r�r�s  r"r�z*activate_swap_if_needed.<locals>.<genexpr>�s����
3�%�5��8�v��
3�s��swapon�-aN)r�r)r�s r"�activate_swap_if_neededr��s&��
�
3�7�
3�3��	�	�8�T�"�#�4r$�uses_systemd�changes_made�dirsc�6�d}|rd}nYtj�j�D�chc]}d|vr|d��
}}tt	|�j|��}|r2t
jddg�|rt
jddg�yyycc}w)	z�Call 'mount -a' if needed.

    If changes were made, always call 'mount -a'. Otherwise, call 'mount -a'
    if any of the directories in the mount list are not already mounted.
    FT�
mountpoint�mountr��	systemctlz
daemon-reloadN)r	r��values�bool�set�
differencer)r�r�r��do_mount�val�mount_pointss      r"�mount_if_neededr��s����H�����{�{�}�+�+�-�
���s�"�
���
��
�
��D�	�,�,�\�:�;����	�	�7�D�/�"���I�I�{�O�4�5����
s�Br �cfgr�c�p�|jj�}|rdnd}ddd|ddg}|jd|�}|jdg�}tj	d	|�t�\}	}
}|jd
i�}t
||
|||�}
t|
||
||�}
t|
�}
t|
�}
t|jdi��}|r|
j|ddd
ddg�t|
�dk(rtj	d�y|
D�cgc]}dj|���}}|
D�cgc]}|djd�s�|d��}}|D]}	tj |��|D�cgc]}|j'dd���}}|D�cgc]}|j'dd���}}|D�cgc]}||vs�d|����c}|D�cgc]}||vs�d|����c}z}|	j)|�ddj|	�z}tj*t,|�|rtj	d|�ntj	d�t/|
�t1|t3|�|�ycc}wcc}w#t"$rtj$td|�Y��JwxYwcc}wcc}wcc}wcc}w)z Handle the mounts configuration.z:defaults,nofail,x-systemd.after=cloud-init.service,_netdevzdefaults,nobootwaitNr�r�r��mount_default_fieldsr�zmounts configuration is %sr�rr�r�rz No modifications to fstab needed�	r@r6z Failed to make '%s' config-mountr�z- z+ z%s
�
zChanges to fstab: %szNo changes to /etc/fstab made.)�distror�rDrArBr�r�r�r�r�r�r�r�r9rr	r�r��logexc�replace�extend�
write_filer�r�r�r�)r r�r�r�r�r��hardcoded_defaultsr�r�r�rNr�r��updated_cfg�swapfiler��	cfg_lines�dr��n�sadds�sdrops�drop�add�sops�contentss                          r"�handlers����<�<�,�,�.�L��	E�
"����f�.C�S�#�N��*-�'�'�� 2�+�N�36�'�'�(�B�2G�F��I�I�*�F�3�-8�]�*�K��]��W�W�-�r�2�N�/��
�N�N�E��K�,��*�J����K�-�[�9�K��k�*�K��c�g�g�f�b�1�2�H�����H�f�f�d�C��E�F�
�;��1��
	�	�	�4�5��/:�;�e����5�!�;�I�;�%�>�Q��1�����)=�A�a�D�>�D�>�
�D��	D��O�O�A��D�,5�5�a�Q�Y�Y�t�S�
!�5�E�5�,9�
:�q�a�i�i��c�"�
:�F�
:�$*�@�D�d�%�.?�b���K�@�#�D��s�&�'8�"�S�E�
�D��D����y�!���	�	�+�.�.�H��O�O�J��)���	�	�(�$�/��	�	�2�3��K�(��L�$�t�*�d�3��7<��>��
�	D��K�K��?��C�	D��
6��
:��@��DsH�I/�1I4�I4�I9�5J$�J)�3	J.�=J.�
	J3�J3�9$J!� J!)N)NNN)NN):�__doc__r��loggingrer,�re�typingrrrrr�	cloudinitrr	�cloudinit.cloudr
�cloudinit.configr�cloudinit.config.schemar�cloudinit.settingsr
r�__annotations__�DEVICE_NAME_FILTER�compilerE�NETWORK_NAME_FILTERr&r�r�rirc�	getLogger�__name__rAr#r(r4r=rKr+r�rQrsr�r�r�r�r�r�r�r�r�r�r�rr�r$r"�<module>rs���4����	�	�4�4� �!�#�.�+���w��!�	��j��?������.�/�����"�*�*�0�1��
�
�#��
��
���g����!��	��
�$�.�b���&�s�m��9=�c�3�h���	��&6�r;�3�;�c�;�d�;�|�D-�`2�U�4��9�d�3��8�n�d�3�i�?�@�2�4+���$�x��}�-�.�/�+��S�#�X��+���c��N�+���#��'�	+�
�+�
�$�s�)�_�
+�\�t�D��I���4��S�	�?��&!���c��O�!��!��S�#�X��!���c��N�	!�
�!�
�$�s�)�_�
!�H��d�3�i���T�$�s�)�_��$�T�$�s�)�_�$��$�6��6�&*�6�26�s�)�6�	�6�2E4��E4�6�E4�%�E4�t�E4��E4r$

Zerion Mini Shell 1.0