Current File : //proc/self/root/usr/lib/python3/dist-packages/cloudinit/__pycache__/socket.cpython-312.pyc |
�
Nh� � � � d Z ddlZddlZddlZddlZddlmZ ddlmZ ddl m
Z
ej e� Z
defd�Z G d� d � Zy)
z#A module for common socket helpers.� N)�suppress)�performance)�DEFAULT_RUN_DIR�messagec � � t j j dd� }|sy|d dk( r|j ddd� n|d dk7 rt d � �t j
t
j t
j t
j z � 5 }t j d
t | � � |j |� |j | j d� � ddd� y# 1 sw Y yxY w)z[Send a sd_notify message.
:param message: sd-notify message (must be valid ascii)
�
NOTIFY_SOCKET� Nr �@� � �/zUnsupported socket typezSending sd_notify(%s)�ascii)�os�environ�get�replace�OSError�socket�AF_UNIX�
SOCK_DGRAM�SOCK_CLOEXEC�LOG�info�str�connect�sendall�encode)r �socket_path�socks �2/usr/lib/python3/dist-packages/cloudinit/socket.py� sd_notifyr! s� � �
�*�*�.�.��"�5�K��� �Q��3� ����C��q�)�
�Q��3� ��/�0�0� �������)�)�F�,?�,?�?�
� .�
����(�#�g�,�7����[�!����W�^�^�G�,�-�.� .� .�s
�AC0�0C9c �4 � e Zd ZdZdefd�Zdefd�Zd� Zd� Zy) �
SocketSyncz<A two way synchronization protocol over Unix domain sockets.�namesc �0 � d| _ d| _ d| _ d| _ d| _ |D �ci c]F }|t j
t
j t
j t
j z � ��H c}| _ t j t � d�dd�� | j j � D ]O \ }}t � d|� d �}t t � 5 t j |� d
d
d
� |j# |� �Q y
c c}w # 1 sw Y �"xY w)an Initialize a synchronization context.
1) Ensure that the socket directory exists.
2) Bind a socket for each stage.
Binding the sockets on initialization allows receipt of stage
"start" notifications prior to the cloud-init stage being ready to
start.
:param names: stage names, used as a unique identifiers
r r Fz/sharei� T)�mode�exist_ok�/share/z.sockN)�stage�remote�first_exception�systemd_exit_code�experienced_any_errorr r r r �socketsr �makedirsr �itemsr �FileNotFoundError�remove�bind)�selfr$ �namer r s r �__init__zSocketSync.__init__- s� � � ��
����!���!"���%*��"�
�
� �
�&�-�-����� 1� 1�F�4G�4G� G��
�
��� ����'�v�.�U�T�J��,�,�,�,�.� #�J�D�$�,�-�W�T�F�%�@�K��+�,�
'�� � �+�&�
'��I�I�k�"� #��
�
'�
'�s �AD�D�D r) c �L � || j vrt d|� �� �|| _ | S )a� Set the stage before entering context.
This enables the context manager to be initialized separately from
each stage synchronization.
:param stage: the name of a stage to synchronize
Example:
sync = SocketSync("stage 1", "stage 2"):
with sync("stage 1"):
pass
with sync("stage 2"):
pass
zInvalid stage name: )r. �
ValueErrorr) )r4 r) s r �__call__zSocketSync.__call__M s/ � � ����$��3�E�7�;�<�<���
��� c �� � t j t j j � � rt
j
d� yd| _ t d| j � d�� | j | j }t j d| j � �� 5 |j d� \ }| _ ddd� dk7 r+| j ddd� t! d t# |� � d
�� �t$ � d| j � d�t# | j � k7 r+| j ddd� t! d
| j � �� �t d| j � d�� | S # 1 sw Y ��xY w)z�Wait until a message has been received on this stage's socket.
Once the message has been received, enter the context.
z:Stdin is a tty, so skipping stage synchronization protocolNr zDSTATUS=Waiting on external services to complete before starting the z stage.zWaiting to start stage � s startzReceived invalid message: [�]r( z-return.sockz Unexpected path to unix socket: zSTATUS=Running (z stage))r �isatty�sys�stdin�filenor r r, r! r) r. r �Timed�recvfromr* �__exit__r8 r r )r4 r �chunks r � __enter__zSocketSync.__enter__a sO � �
�9�9�S�Y�Y�%�%�'�(��H�H�L�
�
�!"����
,�,0�J�J�<�w�
@�
� �|�|�D�J�J�'��
�
�
�!8�����E�
F� 2�!%���q�!1��E�4�;� 2� �u���M�M�$��d�+��:�3�u�:�,�a�H�I�I�� ���
�
�|�<�
@�C��K�K�E
�
�
�M�M�$��d�+��?����}�M�N�N��$�T�Z�Z�L��8�9���! 2� 2�s �#E'�'E0c � � d| j � �}|r`d| _ d| _ t |� � d|j � �}d}| j
s|| _ t j |� t d|� �� | j xs t | j � | _ | j | j }|j | j � |j d|� d| j � d �j � � |j � y)
z.Notify the socket that this stage is complete.z,Completed socket interaction for boot stage r Tz in zkfatal error, run "systemctl status cloud-init-main.service" and "cloud-init status --long" for more detailszSTATUS=zecho 'z'; exit �;)r) r, r- �repr�tb_framer+ r �fatalr! �boolr. r r* r r �close)r4 �exc_type�exc_val�exc_tbr �statusr s r rD zSocketSync.__exit__� s� � �@�����M���%&�D�"�)-�D�&��W�
��d�6�?�?�*;�<�F�B�
� �'�'�'-��$��I�I�f�����x�(�)�%)�%?�%?� &
�4��"�"�D
��"� �|�|�D�J�J�'�����T�[�[�!�
����W�I�X�d�&<�&<�%=�Q�?�F�F�H�
�
�
�
�� r: N) �__name__�
__module__�__qualname__�__doc__r r6 r9 rF rD � r: r r# r# * s) � �F�#�s� #�@�c� �(%�N#r: r# )rU �loggingr r r? �
contextlibr � cloudinitr �cloudinit.settingsr � getLoggerrR r r r! r# rV r: r �<module>r\ sG �� )� � �
�
� � !� .��g����!��.�s� .�6A� Ar: