File: //lib/python3.9/site-packages/ansible/inventory/__pycache__/data.cpython-39.pyc
a
�)g�) � @ s� d dl mZmZmZ eZd dlZd dlmZ d dl
mZ d dlm
Z
d dlmZ d dlmZ d dlmZ d d lmZ d d
lmZ e� ZG dd� de�ZdS )
� )�absolute_import�division�print_functionN)� constants)�AnsibleError)�Group)�Host)�string_types)�Display)�combine_vars)�basedirc @ sz e Zd ZdZdd� Zdd� Zdd� Zdd � Zd
d� Zdd
� Z dd� Z
dd� Zddd�Zdd� Z
dd� Zdd� Zdd� ZdS )�
InventoryDataz�
Holds inventory data (host and group objects).
Using it's methods should guarantee expected relationships and data.
c C sH i | _ i | _i | _d | _d | _g | _dD ]}| �|� q(| �dd� d S )N)�all� ungroupedr r )�groups�hosts�_groups_dict_cache� localhost�current_source�processed_sources� add_group� add_child)�self�group� r �:/usr/lib/python3.9/site-packages/ansible/inventory/data.py�__init__* s zInventoryData.__init__c C s$ d | _ | j| j| j| j| jd�}|S )N)r r �local�sourcer )r r r r r r �r �datar r r � serialize= s �zInventoryData.serializec C sF i | _ |�d�| _|�d�| _|�d�| _|�d�| _|�d�| _d S )Nr r r r r )r �getr r r r r r r r r �deserializeH s zInventoryData.deserializec C s\ | j r| j }nJt|�}d|_d|_tj}|s:d}t�d� |�d|� |�dd� || _ |S )Nz 127.0.0.1Tz/usr/bin/pythonz�Unable to determine python interpreter from sys.executable. Using /usr/bin/python default. You can correct this by setting ansible_python_interpreter for localhostZansible_python_interpreterZansible_connectionr ) r r �address�implicit�sys�
executable�display�warning�set_variable)r �patternZnew_hostZ py_interpr r r �_create_implicit_localhostP s
z(InventoryData._create_implicit_localhostc C sF t �d� d| _t� }| jD ]:}| j| }|�|j� |jdkr|�� s| �d|j� qt� }| j �
� D ]�}|�|j� |�� }| jd |v r�t|��t| jd | jd g��r�| jd �
|� n:|js�t|�}|dks�|dkr�| jd |v r�| �d|j� |jrht| jd �� |j�|_qh|�|�D ]}t �d| � �q&i | _dS )z1 Ensure inventory basic rules, run after updates z(Reconcile groups and hosts in inventory.Nr r r � z,Found both group and host with same name: %s)r( �debugr �setr �add�nameZ
get_ancestorsr r �valuesZ
get_groups�
difference�remove_hostr% �lenr Zget_vars�vars�intersectionr) r ) r Zgroup_names�gr Z
host_names�hostZmygroups�lengthZconflictr r r �reconcile_inventoryh s0
"z!InventoryData.reconcile_inventoryc C s. | j �|d�}|du r*|tjv r*| �|�}|S )z; fetch host object using name deal with implicit localhost N)r r"