File: //usr/lib/python3/dist-packages/cloudinit/__pycache__/gpg.cpython-39.pyc
a
��`d
� @ sV d Z ddlmZ ddlmZ ddlZe�e�Zdd� Z ddd �Z
d
d� Zdd
d�ZdS )z0gpg.py - Collection of gpg key related functions� )�log)�subpNc
C s\ zt j ddd| gdd�\}}W n8 t jyV } zt�d| |� d}W Y d}~n
d}~0 0 |S )z*Export gpg key, armoured key gets returned�gpgz--exportz--armourT��capturez&Failed to export armoured key "%s": %sN)r �ProcessExecutionError�LOG�debug)�key�armour�_�error� r �//usr/lib/python3/dist-packages/cloudinit/gpg.py�
export_armour s �r �� r c
C s� t �d| |� ddd| d| g}|du r,g }d}d}t|�}|d7 }z$tj|d d
� t �d| ||� W dS tjy� } z|}W Y d}~n
d}~0 0 z&t|�}t �d|j|� t�|� W q< t y� } z"t
d
| |||f �|�W Y d}~q<d}~0 0 q<dS )a� Receive gpg key from the specified keyserver.
Retries are done by default because keyservers can be unreliable.
Additionally, there is no way to determine the difference between
a non-existant key and a failure. In both cases gpg (at least 2.2.4)
exits with status 2 and stderr: "keyserver receive failed: No data"
It is assumed that a key provided to cloud-init exists on the keyserver
so re-trying makes better sense than failing.
@param key: a string key fingerprint (as passed to gpg --recv-keys).
@param keyserver: the keyserver to request keys from.
@param retries: an iterable of sleep lengths for retries.
Use None to indicate no retries.z&Importing key '%s' from keyserver '%s'r z--no-ttyz--keyserver=%sz--recv-keysNr r Tr z/Imported key '%s' from keyserver '%s' on try %dz6Import failed with exit code %d, will try again in %ssz@Failed to import key '%s' from keyserver '%s' after %d tries: %s)r r �iterr r �next� exit_code�time�sleep�
StopIteration�
ValueError) r
� keyserver�retries�cmdZtrynumr
Zsleeps�e�naplenr r r �recv_key s>