File: //usr/lib64/python3.9/site-packages/cloud_what/__pycache__/provider.cpython-39.pyc
a
X�ZhY) �
@ s� d Z ddlmZmZmZ ddlZddlZzddlmZ ddl m
Z
W n* eyn ddlm
Z ddlmZ
Y n0 ddlmZ dd lmZ dd
lmZ ddlmZ eeegZe�e�ZG dd
� d
ej�Zed�dd�Zddejfee eee!e"f d�dd�Z#ddejfee eeeeeedf d�dd�Z$ddejfee eee% d�dd�Z&edk�r�ddl'Z'e�� Z(e(�)ej*� e�+e'j,�Z-e-�)ej*� e�.d�Z/e-�0e/� e(�1e-� e&� Z2e3de2� �� ddlm
Z
e
� Z4e4�5� Z6e&e6�Z2e3de2� �� dS )zC
This module contains several utils used for VMs running on clouds
� )�Union�Tuple�ListN)�
HostCollector)�CustomFactsCollector)�MiniHostCollector)�MiniCustomFactsCollector)�BaseCloudProvider)�AWSCloudProvider)�AzureCloudProvider)�GCPCloudProviderc @ s( e Zd ZdZe�� Ze�� ZeeB ZdS )�DetectionMethodzN
Enumeration of allowed methods used for detection of cloud providers
N) �__name__�
__module__�__qualname__�__doc__�enum�auto�STRONG� HEURISTIC�ALL� r r �9/usr/lib64/python3.9/site-packages/cloud_what/provider.pyr
3 s r
)�returnc C s( i } | � t� �� � | � t� �� � | S )zx
Try to gather system facts necessary for detection of cloud provider
:return: Dictionary with system facts
)�updater �get_allr ��factsr r r �gather_system_factsB s r g �?)r � threshold�methodsr c s� � du rt � � � fdd�tD �}t�d� g }tj|v r�|D ]}|�� }|du r<|�|� q<t|�dkr�t�dj |d j
d �� |dfS t|�dkr�t�d
� q�t|�dkr�t�dj d�d
d� |D ��d�� n
t�d� tj
|v �r�g }|D ]:}|�� }t�d|j
� d|� �� ||kr�|�||f� q�|jdd� dd� dd� |D �}t|�dk�rdt�d� n"t�dj d�dd� |D ��d�� n
t�d� |dfS )aI
This method tries to detect cloud providers and return list of possible cloud providers
:param facts: Dictionary with system facts
:param threshold: Threshold using for detection of cloud provider
:param methods: The flag of methods used for detecting of cloud providers
:return: List of cloud providers
Nc s g | ]}|� ��qS r r )�.0�clsr r r �
<listcomp>d � z(_get_cloud_providers.<locals>.<listcomp>zTrying to detect cloud providerT� z:Detected one cloud provider using strong signs: {provider}r �Zproviderz-No cloud provider detected using strong signszFMore than one cloud provider detected using strong signs ({providers})z, c S s g | ]
}|j �qS r ��CLOUD_PROVIDER_ID�r! �cloud_providerr r r r# ~ r$ )Z providersz7Skipping detection of cloud provider using strong signszCloud provider z has probability: c S s | d S )Nr r )�xr r r �<lambda>� r$ z&_get_cloud_providers.<locals>.<lambda>)�key�reversec S s g | ]}|d �qS )r% r )r! �itemr r r r# � r$ z+No cloud provider detected using heuristicsz@Following cloud providers detected using heuristics: {providers}c S s g | ]
}|j �qS r r'