HEX
Server: Apache
System: Linux server2.voipitup.com.au 4.18.0-553.109.1.lve.el8.x86_64 #1 SMP Thu Mar 5 20:23:46 UTC 2026 x86_64
User: posscale (1027)
PHP: 8.2.30
Disabled: exec,passthru,shell_exec,system
Upload Files
File: //opt/saltstack/salt/lib/python3.10/site-packages/salt/modules/__pycache__/heat.cpython-310.pyc
o

�N�gZd�@sZdZddlZddlZddlZddlZddlZddlZddlZddl	m
Z
dZzddlZdZWn	e
y7YnwdZz
ddlmZdZWn	e
yMYnwdZ\ZZZZejejd�e�e�Zd	d
�Zd$dd
�Zdd�Zdd�Zdd�Z	d%dd�Z d&dd�Z!d'dd�Z"d(dd�Z#								d)dd�Z$								d)d d!�Z%d'd"d#�Z&dS)*a�
Module for handling OpenStack Heat calls

.. versionadded:: 2017.7.0

:depends:   - heatclient Python module
:configuration: This module is not usable until the user, password, tenant, and
    auth URL are specified either in a pillar or in the minion's config file.
    For example::

        keystone.user: admin
        keystone.password: verybadpass
        keystone.tenant: admin
        keystone.insecure: False   #(optional)
        keystone.auth_url: 'http://127.0.0.1:5000/v2.0/'
        # Optional
        keystone.region_name: 'RegionOne'

    If configuration for multiple OpenStack accounts is required, they can be
    set up as different configuration profiles:
    For example::

        openstack1:
          keystone.user: admin
          keystone.password: verybadpass
          keystone.tenant: admin
          keystone.auth_url: 'http://127.0.0.1:5000/v2.0/'

        openstack2:
          keystone.user: admin
          keystone.password: verybadpass
          keystone.tenant: admin
          keystone.auth_url: 'http://127.0.0.2:5000/v2.0/'

    With this configuration in place, any of the heat functions can make use of
    a configuration profile by declaring it explicitly.
    For example::

        salt '*' heat.flavor_list profile=openstack1
�N)�SaltInvocationErrorFT)�	jsonutils)Zparameter_defaults�
parametersZresource_registryZevent_sinks)�levelcCstrtrdSdS)zH
    Only load this module if heat
    is installed on this minion.
    �heat)FzrThe heat execution module cannot be loaded: the heatclient and oslo_serialization python library is not available.)�HAS_HEAT�HAS_OSLO�r	r	�E/opt/saltstack/salt/lib/python3.10/site-packages/salt/modules/heat.py�__virtual__Psr�csX|r|d�nd�d��fdd�	}|dd�}|dd�}|d	d�}|d
�}|dd�}|d
d�}	|d�}
|dd�}|
rC|dkrC|sCtd��|rU||||||d�}|	rTd|d
<n|dkra|
ra|
|d�}ntd��td|�}
|
d|d<|�d�ztdd|�d}Wnty�tdd|�d}Ynw||
}t�d|||�tjj|fd|i|��S) z�
    Set up heat credentials, returns
    `heatclient.client.Client`. Optional parameter
    "api_version" defaults to 1.

    Only intended to be used within heat-enabled modules
    z
:keystone.z	keystone.Ncs��d|td�||��S)zq
        Checks connection_args, then salt-minion config,
        falls back to specified default value.
        Zconnection_z
config.get)�get�__salt__)�key�default��connection_args�prefixr	r
r
ns�z_auth.<locals>.get�userZadmin�password�tenant�	tenant_id�auth_urlzhttp://127.0.0.1:35357/v2.0�insecureF�token�region_namerz2Only can use keystone admin token with Heat API v1)�usernamerrrrZtenant_nameT)rrz$No credentials to authenticate with.zkeystone.token_get�idzkeystone.endpoint_getr�urlZ	publicurlz.Calling heatclient.client.Client(%s, %s, **%s)Zendpoint�N)	rr�pop�KeyError�log�debug�
heatclient�clientZClient)�profile�api_versionrr
rrrrrrZadmin_tokenr�kwargsrZ
heat_endpointr	rr
�_auth`s\	

	




��
�
��r)c
Cs�|��}|�d�rtjj�|�}n%z	tjj�|�}Wntjjjy/}zt	t
|���d}~ww|dur6i}d|vsFd|vsFd|vsFt	d��|S)�
    Parsing template
    �{NZHeatTemplateFormatVersion�heat_template_versionZAWSTemplateFormatVersionz"Template format version not found.)�strip�
startswith�salt�utils�json�loads�yaml�	safe_load�	YAMLError�
ValueError�str)Ztmpl_str�tpl�excr	r	r
�_parse_template�s 
��r:c
Cs�z	tjj�|�}Wntjjjy}ztt|���d}~ww|dur&i}n	t|t�s/td��|D]}|t	vr?td|�d���q1|S)r*Nz6The environment is not a valid YAML mapping data type.zenvironment has wrong section "�")
r/r0r3r4r5r6r7�
isinstance�dict�SECTIONS)�env_str�envr9�paramr	r	r
�_parse_environment�s��
�rBc
Csr||d<d|d<z|jjdi|��}Wntjjy)}ztj�t|���d}~ww|D]
}|�d�d|_q,|S)z
    Get event for stack
    �stack_idN�
resource_name�/rr	)	�events�listr$r9�HTTPNotFound�CommandErrorr7�split�
stack_name)�h_clientrC�
event_argsrFr9�eventr	r	r
�_get_stack_events�s��rO��<cs0|r|�d�|�d�f��fdd�}ndd�}|d}d}d}		t||d
|d�d�}
|
s1|d
7}n/d}t|
ddd�}|
D]"}t|dd�|kr_t|dd�}|	t||d�}
||�r_||
fSq=|dkr|j�|�}|j}|	t||d�}
||�r}||
fSd}t�|�||8}|dkr�|�d�}d}
||
fSq )z
    Polling stack events
    �_FAILED�	_COMPLETEcs|�vSrr	��a�Zstop_statusr	r
�
stop_check�sz$_poll_for_events.<locals>.stop_checkcSs|�d�p	|�d�S)NrSrR)�endswithrTr	r	r
rW�srQrz
 Stack %(name)s %(status)s 
TZasc)Zsort_dir�marker)rCrMr���rNrD�Zresource_status)�name�status�zTimeout expired)rO�getattrr=�stacksr
�stack_status�time�sleep)rLrK�action�poll_period�timeoutrYrWZtimeout_secZno_event_pollsZmsg_templaterFrNra�msg�stackr	rVr
�_poll_for_events�sL�
�

�ric	Csfi}t|�}|j��D]%}i}|jD]
}|d||d<q|j|j|j|j|j|j	|d�||j<q|S)z�
    Return a list of available stack (heat stack-list)

    profile
        Profile to use

    CLI Example:

    .. code-block:: bash

        salt '*' heat.list_stack profile=openstack1
    �href�rel)r]rr\�creation�owner�reason�links)
r)r`rGrorarrK�
creation_time�stack_owner�stack_status_reason)r&�retrLrhro�linkr	r	r
�
list_stack's

�	ruc	Cs�t|�}|sddd�Sz4i}|j�|�}i}|jD]
}|d||d<q|j|j|j|j|j|j	|j
|d�||j<d|d<W|Stjj
yRdd	|��d�YSw)
z�
    Return details about a specific stack (heat stack-show)

    name
        Name of the stack

    profile
        Profile to use

    CLI Example:

    .. code-block:: bash

        salt '*' heat.show_stack name=mystack profile=openstack1
    F�Parameter name missing or None��result�commentrjrk)r]rr\rlrmrnrroTrx�	No stack )r)r`r
rorarrKrprqrrrr$r9rH)r\r&rLrsrhrortr	r	r
�
show_stackFs.

�

��r{c

Cs�t|�}ddd�}|sd|d<d|d<|Sz|j�|�Wn8tjjy3d|d<d|��|d<Yn#tjjyU}zt�|�d|d<t	|�|d<WYd	}~nd	}~ww|ddur^|S|d
kr�z
t
||d||d�\}}Wn7tjjy�d
|�d�|d<|YSty�}	zt�d|	�d|d<|	�|d<|WYd	}	~	Sd	}	~	ww|dkr�d|d<d|�d|�d�|d<|Sd
|�d�|d<|S)as
    Delete a stack (heat stack-delete)

    name
        Name of the stack

    poll
        Poll and report events until stack complete

    timeout
        Stack creation timeout in minute

    profile
        Profile to use

    CLI Examples:

    .. code-block:: bash

        salt '*' heat.delete_stack name=mystack poll=5 \
                 profile=openstack1
    Tr[rwFrxrvryrzNrZDELETE�rdrerfzDeleted stack �.zDelete failed %sZ
DELETE_FAILEDzDeleted stack FAILED'�')
r)r`�deleter$r9rHZ
HTTPForbiddenr"�	exceptionr7rirI�	Exception)
r\�pollrfr&rLrsZ	forbiddenrarg�exr	r	r
�delete_stackosP

��
�
���r�cCstt|�}ddd�}	|s
i}|r�tjj��}
td|
d|dddddddddddd�\}}}
td	d.id
|
�d|�dd�d
|�d|�dd�dd�dd�dd�dd�dd�dd�dd�dd�dd�dd��}|dr�tjj�|
d��<}tjj�|�	��}tjj�
|
�zt|�}Wnty�}zd|	d<d|��|	d<WYd}~nd}~wwWd�n1s�wYnd|	d<d�
||
�|	d<nd|	d<d|	d<|	ddur�|	Si}||d<z|jjd.i|��Wn&t�y}zt�d |�d|	d<d!|��|	d<|	WYd}~Sd}~wwi}|�r�tjj��}td|d|dddddddddddd�\}}}
td	d.id
|�d|�dd�d
|�d|�dd�dd�dd�dd�dd�dd�dd�dd�dd�dd�dd��}|d�r�tjj�|d��=}tjj�|�	��}tjj�
|�zt|�}Wnt�y�}zd|	d<d|��|	d<WYd}~nd}~wwWd�n	1�s�wYnd|	d<d"�
||
�|	d<|	ddu�r�|	S||||||d#�}z|jjd.i|��Wn$t�y}zt�d$|�d|	d<|�|	d<|	WYd}~Sd}~ww|d%k�r)t||d&||d'�\}}|d(k�r)d|	d<d)|�d*|�d+�|	d<|	ddu�r8d,|�d-�|	d<|	S)/a�
    Create a stack (heat stack-create)

    name
        Name of the new stack

    template_file
        File of template

    environment
        File of environment

    parameters
        Parameter dict used to create the stack

    poll
        Poll and report events until stack complete

    rollback
        Enable rollback on create failure

    timeout
        Stack creation timeout in minutes

    profile
        Profile to build on

    CLI Example:

    .. code-block:: bash

        salt '*' heat.create_stack name=mystack \
                 template_file=salt://template.yaml \
                 environment=salt://environment.yaml \
                 parameters="{"image": "Debian 8", "flavor": "m1.small"}" \
                 poll=5 rollback=False timeout=60 profile=openstack1

    .. versionadded:: 2017.7.5,2018.3.1

        The spelling mistake in parameter `enviroment` was corrected to `environment`.
        The `enviroment` spelling mistake has been removed in Salt 3000.

    Tr[rw�file.get_managedN�baseF�r\�template�source�source_hashZsource_hash_namer�group�mode�attrs�saltenv�context�defaultsZskip_verifyr(�file.manage_filer\�sfnrsr��
source_sumrr�r�r�r��backup�makedirsr��show_changes�contents�dir_moderx�r�Error parsing template ry�Can not open template: {} {}�Can not open template�Template not valid %s�Template not valid � Can not open environment: {}, {})rK�disable_rollbackrr��environment�timeout_minszCreate failed %srZCREATEr|Z
CREATE_FAILEDzCreated stack FAILED'r~r}zCreated stack '�'.r	)r)r/r0�files�mkstempr�fopen�stringutils�
to_unicode�read�safe_rmr:r6�formatr`�validater�r"r�rB�createri�r\Z
template_filer�rr�Zrollbackrfr&rLrsZtemplate_tmp_fileZtsfnr�Zcomment_Ztemplate_manage_resultZtfp_r8r�r�r(r@Zenvironment_tmp_fileZesfnZenvironment_manage_resultZefp_r?�fieldsrargr	r	r
�create_stack�st5
���������	�
���
���������	
������������	�
���
����
�����	��

��


�
r�cCs�t|�}ddd�}	|sd|	d<d|	d<|	S|si}|r�tjj��}
td|
d	|d	d	d	d	d	d	d
d	d	dd	d�\}}}
tdd0id
|
�d|�dd	�d|�d|�dd	�dd	�dd	�dd	�dd
�dd	�dd�dd	�dd�dd	�dd	��}|dr�tjj�|
d��<}tjj�|�	��}tjj�
|
�zt|�}Wnty�}zd|	d<d|��|	d<WYd	}~nd	}~wwWd	�n1s�wYnd|	d<d�
||
�|	d<nd|	d<d |	d<|	ddur�|	Si}||d<z|jjd0i|��Wn&t�y}zt�d!|�d|	d<d"|��|	d<|	WYd	}~Sd	}~wwi}|�r�tjj��}td|d	|d	d	d	d	d	d	d
d	d	dd	d�\}}}
tdd0id
|�d|�dd	�d|�d|�dd	�dd	�dd	�dd	�dd
�dd	�dd�dd	�dd�dd	�dd	��}|d�r�tjj�|d��=}tjj�|�	��}tjj�
|�zt|�}Wnt�y�}zd|	d<d|��|	d<WYd	}~nd	}~wwWd	�n	1�s�wYnd|	d<d#�
||
�|	d<|	ddu�r�|	S|||||d$�}z|jj|fi|��Wn&t�y}zt�d%|�d|	d<d&|��|	d<|	WYd	}~Sd	}~ww|d'k�r7t||d(||d)�\}}|d*k�r7d|	d<d+|�d,|�d-�|	d<|	ddu�rGd.|�d/�f|	d<|	S)1a�
    Update a stack (heat stack-template)

    name
        Name of the  stack

    template_file
        File of template

    environment
        File of environment

    parameters
        Parameter dict used to update the stack

    poll
        Poll and report events until stack complete

    rollback
        Enable rollback on update failure

    timeout
        Stack creation timeout in minutes

    profile
        Profile to build on

    CLI Example:

    .. code-block:: bash

        salt '*' heat.update_stack name=mystack \
                 template_file=salt://template.yaml \
                 environment=salt://environment.yaml \
                 parameters="{"image": "Debian 8", "flavor": "m1.small"}" \
                 poll=5 rollback=False timeout=60 profile=openstack1

    .. versionadded:: 2017.7.5,2018.3.1

        The spelling mistake in parameter `enviroment` was corrected to `environment`.
        The `enviroment` spelling mistake has been removed in Salt 3000.

    Tr[rwFrxrvryr�Nr�r�r�r\r�rsr�r�rr�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�)r�rr�r�r�zUpdate failed %szUpdate failed rZUPDATEr|Z
UPDATE_FAILEDzUpdated stack FAILED'r~r}zUpdated stack 'r�r	)r)r/r0r�r�rr�r�r�r�r�r:r6r�r`r�r�r"r�rB�updaterir�r	r	r
�update_stack}sz5
���������	�
���
���������	
������������	�
���
����
�����	����


�
r�cCs�t|�}|sddd�Sz|j�|�}Wn%tjjy&dd|��d�YStjjy8dd|��d�YSwd|vrEtjj	�
|�}ntj|ddd�}t
d	|�}|d
|d�}|S)z�
    Return template a specific stack (heat stack-template)

    name
        Name of the stack

    profile
        Profile to use

    CLI Example:

    .. code-block:: bash

        salt '*' heat.template_stack name=mystack profile=openstack1
    FrvrwzNo stack with zBad request fot stack r,r^)�indent�ensure_asciizhashutil.digestT)r�rx�checksum)r)r`r�r$r9rHZ
BadRequestr/r0r3Z	safe_dumpr�dumpsr)r\r&rLZget_templater�r�rsr	r	r
�template_stackOs 
�r�)Nr)NrPrQNr)NN)NrrQN)NNNNrFrQN)'�__doc__�loggingrbZsalt.utils.filesr/Zsalt.utils.jsonZsalt.utils.stringutilsZsalt.utils.versionsZsalt.utils.yamlZsalt.exceptionsrrr$�ImportErrorrZoslo_serializationrr>ZPARAMETER_DEFAULTSZ
PARAMETERSZRESOURCE_REGISTRYZEVENT_SINKS�basicConfig�DEBUG�	getLogger�__name__r"rr)r:rBrOrirur{r�r�r�r�r	r	r	r
�<module>sr)��

O
�
;

)@
�Q
�S