%PDF- %PDF-
Mini Shell

Mini Shell

Direktori : /lib/python2.7/site-packages/salt/modules/
Upload File :
Create Path :
Current File : //lib/python2.7/site-packages/salt/modules/heat.pyc

�
���^c
@@sdZddlmZmZmZddlZddlZddlmZddl	m
Z
ddlZddl
ZddlZddlZddlZeZyddlZeZWnek
r�nXeZyddlmZeZWnek
r�nXdZ\ZZZZejdej�ej e!�Z"d�Z#iZ$dd
d�Z&d�Z'd�Z(d�Z)ddddd�Z*dd�Z+ddd�Z,ddddd�Z-dddddedddd�	Z.dddddedddd�	Z/ddd�Z0dS(u�
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
i(tabsolute_importtprint_functiontunicode_literalsN(tSaltInvocationError(tsix(t	jsonutilsuparameter_defaultsu
parametersuresource_registryuevent_sinkstlevelcC@strtrdStdfS(uH
    Only load this module if heat
    is installed on this minion.
    uheaturThe heat execution module cannot be loaded: the heatclient and oslo_serialization python library is not available.(tHAS_HEATtHAS_OSLOtFalse(((s5/usr/lib/python2.7/site-packages/salt/modules/heat.pyt__virtual__Vsic	@s|r|d�nd�d��fd�}|dd�}|dd�}|dd�}|d�}|d	d
�}|dt�}	|d�}
|d
d�}|
r�|dkr�|r�tdd��n�|ri|d6|d6|d6|d	6|d
6|d6}|	rMt|d<qMn5|dkrA|
rAi|
d6|d	6}ntd��td|�}
|
d|d<|jd�ytdd|�d}Wn(tk
r�tdd|�d}nX||
}tjddj	|||��t
jj|d||�S(u�
    Set up heat credentials, returns
    `heatclient.client.Client`. Optional parameter
    "api_version" defaults to 1.

    Only intended to be used within heat-enabled modules
    u
:keystone.u	keystone.c@s%�jd|td�||��S(uq
        Checks connection_args, then salt-minion config,
        falls back to specified default value.
        uconnection_u
config.get(tgett__salt__(tkeytdefault(tconnection_argstprefix(s5/usr/lib/python2.7/site-packages/salt/modules/heat.pyRts
uuseruadminupasswordutenantu	tenant_iduauth_urluhttp://127.0.0.1:35357/v2.0uinsecureutokenuregion_nameiu"Only can use keystone admin token uwith Heat API v1uusernameutenant_nameu$No credentials to authenticate with.ukeystone.token_getuidukeystone.endpoint_getuheatuurlu	publicurlu!Calling heatclient.client.Client(u{0}, {1}, **{2})tendpointN(
tNoneR	RtTrueRtpoptKeyErrortlogtdebugtformatt
heatclienttclienttClient(tprofiletapi_versionRRtusertpasswordttenantt	tenant_idtauth_urltinsecuretadmin_tokentregion_nametkwargsttokent
heat_endpoint((RRs5/usr/lib/python2.7/site-packages/salt/modules/heat.pyt_authfsP	








	cC@s�|j�}|jd�r3tjjj|�}nbytjjj|�}Wn1tjjjk
r}t	t
j|���nX|dkr�i}nd|kp�d|kp�d|ks�t	d��n|S(u
    Parsing template
    u{uHeatTemplateFormatVersionuheat_template_versionuAWSTemplateFormatVersionu"Template format version not found.N(
tstript
startswithtsalttutilstjsontloadstyamlt	safe_loadt	YAMLErrort
ValueErrorRt	text_typeR(ttmpl_strttpltexc((s5/usr/lib/python2.7/site-packages/salt/modules/heat.pyt_parse_template�s	cC@s�ytjjj|�}Wn1tjjjk
rL}ttj|���n4X|dkrbi}nt	|t
�s�td��nx2|D]*}|tkr�tdj|���q�q�W|S(u
    Parsing template
    u6The environment is not a valid YAML mapping data type.u#environment has wrong section "{0}"N(
R,R-R0R1R2R3RR4Rt
isinstancetdicttSECTIONSR(tenv_strtenvR7tparam((s5/usr/lib/python2.7/site-packages/salt/modules/heat.pyt_parse_environment�s	
cC@s�||d<d|d<y|jj|�}Wn4tjjk
r`}tjjtj|���n,Xx$|D]}|j	d�d|_
qhW|SdS(u
    Get event for stack
    ustack_idu
resource_nameu/iN(RteventstlistRR7tHTTPNotFoundtCommandErrorRR4tsplitt
stack_name(th_clienttstack_idt
event_argsR@R7tevent((s5/usr/lib/python2.7/site-packages/salt/modules/heat.pyt_get_stack_events�s


ii<c@s�|r6dj|�dj|�f��fd�}n	d�}|d}d}d}	xytr�t|d|d	id
d6|d6�}
t|
�dkr�|d
7}n�d}t|
ddd�}xj|
D]b}t|dd�|kr�t|dd�}|	td|d|�}
||�r(||
fSq�q�W|dkr�|jj|�}|j	}|	td|d|�}
||�r�||
fSd}nt
j|�||8}|dkrXdj|�}d}
||
fSqXWdS(u
    Polling stack events
    u
{0}_FAILEDu{0}_COMPLETEc@s
|�kS(N((ta(tstop_status(s5/usr/lib/python2.7/site-packages/salt/modules/heat.pyt<lambda>�scS@s|jd�p|jd�S(Nu	_COMPLETEu_FAILED(tendswith(RK((s5/usr/lib/python2.7/site-packages/salt/modules/heat.pyRM�si<iu
 Stack %(name)s %(status)s 
RGRHuascusort_dirumarkerii����uidu
resource_nameuuresource_statustnametstatusiuTimeout expiredN(RRRJtlentgetattrRR:tstacksRtstack_statusttimetsleep(RFREtactiontpoll_periodttimeouttmarkert
stop_checkttimeout_sectno_event_pollstmsg_templateR@RIRTtmsgtstack((RLs5/usr/lib/python2.7/site-packages/salt/modules/heat.pyt_poll_for_events�sF	
	

			
	

cC@s�i}t|�}x�|jj�D]�}i}x#|jD]}|d||d<q8Wi|jd6|jd6|jd6|jd6|jd6|j	d6|d	6||j<q"W|S(
u�
    Return a list of available stack (heat stack-list)

    profile
        Profile to use

    CLI Example:

    .. code-block:: bash

        salt '*' heat.list_stack profile=openstack1
    uhrefurelustatusuidunameucreationuownerureasonulinks(
R)RSRAtlinksRTtidREt
creation_timetstack_ownertstack_status_reason(RtretRFR`Rbtlink((s5/usr/lib/python2.7/site-packages/salt/modules/heat.pyt
list_stacks






cC@st|�}|s$itd6dd6Sy�i}|jj|�}i}x#|jD]}|d||d<qOWi|jd6|jd6|jd6|jd	6|j	d
6|j
d6|jd6|d
6||j<t|d<Wn/t
jjk
ritd6dj|�d6SX|S(u�
    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
    uresultuParameter name missing or Noneucommentuhrefurelustatusuidunameucreationuownerureasonu
parametersulinksuNo stack {0}(R)R	RSRRbRTRcRERdReRft
parametersRRR7RBR(RORRFRgR`RbRh((s5/usr/lib/python2.7/site-packages/salt/modules/heat.pyt
show_stack>s4






c
	C@s�t|�}itd6dd6}|s>t|d<d|d<|Sy|jj|�Wnvtjjk
r�t|d<dj|�|d<nCtjj	k
r�}t
j|�t|d<tj
|�|d<nX|dtkr�|S|dkr�y+t||ddd	|d
|�\}}Wnqtjjk
rCdj|�|d<|Stk
r�}	t
jdj|	��t|d<d
j|	�|d<|SX|dkr�t|d<dj||�|d<q�dj|�|d<n|S(ut
    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
    uresultuucommentuParameter name missing or NoneuNo stack {0}iRWuDELETERXRYuDeleted stack {0}.uDelete failed {0}u{0}u
DELETE_FAILEDuDeleted stack FAILED'{0}'{1}.(R)RR	RStdeleteRR7RBRt
HTTPForbiddenRt	exceptionRR4RaRCt	Exception(
ROtpollRYRRFRgt	forbiddenRTR_tex((s5/usr/lib/python2.7/site-packages/salt/modules/heat.pytdelete_stacknsH







c	!C@sr|dkr7|dk	r7tjjjdd�|}nt|�}	itd6dd6}
|sfi}n|rtjjj�}t	dd|ddd	|d
dddddd
ddddddddt
dd�\}}
}t	dd|d|ddd	|d|
ddddd
ddddddtdddt
dddd�}|dr�tjjj|d��x}tjjj
|j��}tjjj|�yt|�}Wn0tk
r�}t
|
d<dj|�|
d<nXWdQXqt
|
d<d j||�|
d<nt
|
d<d!|
d<|
dt
kr-|
Si}||d"<y|	jj|�WnGtk
r�}tjd#j|��t
|
d<d#j|�|
d<|
SXi}|r@tjjj�}t	dd|ddd	|d
dddddd
ddddddddt
dd�\}}
}t	dd|d|ddd	|d|
ddddd
ddddddtdddt
dddd�}|drtjjj|d��x}tjjj
|j��}tjjj|�yt|�}Wn0tk
r}t
|
d<dj|�|
d<nXWdQXq@t
|
d<d$j||�|
d<n|
dt
krT|
Si|d%6|d&6|d'6|d"6|d(6|d)6}y|	jj|�WnGtk
r�}tjd*j|��t
|
d<d+j|�|
d<|
SX|d,krHt|	|d-d.d/|d0|�\}}|d1krHt
|
d<d2j||�|
d<qHn|
dtkrnd3j|�|
d<n|
S(4u
    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 misspelled version is still supported for backward compatibility, but will
        be removed in Salt Neon.

    uNeonu{Please use the 'environment' parameter instead of the misspelled 'enviroment' parameter which will be removed in Salt Neon.uresultuucommentufile.get_managedROttemplatetsourcetsource_hashRtgrouptmodetsaltenvubasetcontexttdefaultstskip_verifyR&ufile.manage_filetsfnRgt
source_sumtbackuptmakedirstshow_changestcontentstdir_modeuruError parsing template {0}NuCan not open template: {0} {1}uCan not open templateutemplateuTemplate not valid {0}u"Can not open environment: {0}, {1}u
stack_nameudisable_rollbacku
parametersuenvironmentutimeout_minsuCreate failed {0}u{0}iRWuCREATERXRYu
CREATE_FAILEDuCreated stack FAILED'{0}'{1}.uCreated stack '{0}'.(RR,R-tversionst
warn_untilR)RtfilestmkstempRR	tfopentstringutilst
to_unicodetreadtsafe_rmR8R3RRStvalidateRoRRnR?tcreateRa(ROt
template_filetenvironmentRjRptrollbackRYRt
enviromentRFRgttemplate_tmp_filettsfnR~tcomment_ttemplate_manage_resultttfp_R6RtRrR&R=tenvironment_tmp_filetesfntenvironment_manage_resulttefp_R<tfieldsRTR_((s5/usr/lib/python2.7/site-packages/salt/modules/heat.pytcreate_stack�s
/	
	

	

 






	

 



c	!C@s�|d kr7|d k	r7tjjjdd�|}nt|�}	itd6dd6}
|sut|
d<d|
d<|
S|s�i}n|r#tjjj	�}t
dd|d	d d
|dd dd d
d dd dddd dd dtdd �\}}
}t
dd|d|dd d
|d|
dd d
d dd dddd dtd	d dtdd dd �}|drtjjj|d��x}tjjj
|j��}tjjj|�yt|�}Wn0tk
r�}t|
d<dj|�|
d<nXWd QXq7t|
d<d!j||�|
d<nt|
d<d"|
d<|
dtkrK|
Si}||d#<y|	jj|�WnGtk
r�}tjd$j|��t|
d<d$j|�|
d<|
SXi}|r^tjjj	�}t
dd|d	d d
|dd dd d
d dd dddd dd dtdd �\}}
}t
dd|d|dd d
|d|
dd d
d dd dddd dtd	d dtdd dd �}|dr;tjjj|d��x}tjjj
|j��}tjjj|�yt|�}Wn0tk
r1}t|
d<dj|�|
d<nXWd QXq^t|
d<d%j||�|
d<n|
dtkrr|
Si|d&6|d'6|d#6|d(6|d)6}y|	jj||�WnGtk
r�}tjd*j|��t|
d<d*j|�|
d<|
SX|d+krbt|	|d,d-d.|d/|�\}}|d0krbt|
d<d1j||�|
d<qbn|
dtkr�d2j|�f|
d<n|
S(3u
    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 misspelled version is still supported for backward compatibility, but will
        be removed in Salt Neon.

    uNeonu{Please use the 'environment' parameter instead of the misspelled 'enviroment' parameter which will be removed in Salt Neon.uresultuucommentuParameter name missing or Noneufile.get_managedRORtRuRvRRwRxRyubaseRzR{R|R&ufile.manage_fileR}RgR~RR�R�R�R�uruError parsing template {0}NuCan not open template: {0} {1}uCan not open templateutemplateuTemplate not valid {0}u"Can not open environment: {0}, {1}udisable_rollbacku
parametersuenvironmentutimeout_minsuUpdate failed {0}iRWuUPDATERXRYu
UPDATE_FAILEDuUpdated stack FAILED'{0}'{1}.uUpdated stack '{0}'.(RR,R-R�R�R)RR	R�R�RR�R�R�R�R�R8R3RRSR�RoRRnR?tupdateRa(ROR�R�RjRpR�RYRR�RFRgR�R�R~R�R�R�R6RtRrR&R=R�R�R�R�R<R�RTR_((s5/usr/lib/python2.7/site-packages/salt/modules/heat.pytupdate_stackss/	


	

	

 






	

 



cC@st|�}|s$itd6dd6Sy|jj|�}Wn]tjjk
rkitd6dj|�d6Stjjk
r�itd6dj|�d6SXd|kr�t	j
jj|�}nt
j|ddd	t�}td
|�}i|d6td6|d6}|S(
u�
    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
    uresultuParameter name missing or NoneucommentuNo stack with {0}uBad request fot stack {0}uheat_template_versiontindentitensure_asciiuhashutil.digestutemplateuchecksum(R)R	RSRtRR7RBRt
BadRequestR,R-R0t	safe_dumpRtdumpsRR(RORRFtget_templateRttchecksumRg((s5/usr/lib/python2.7/site-packages/salt/modules/heat.pyttemplate_stack9s0
(uparameter_defaultsu
parametersuresource_registryuevent_sinks(1t__doc__t
__future__RRRRUtloggingtsalt.exceptionsRtsalt.extRtsalt.utils.filesR,tsalt.utils.jsontsalt.utils.stringutilstsalt.utils.versionstsalt.utils.yamlR	RRRtImportErrorRtoslo_serializationRR;tPARAMETER_DEFAULTSt
PARAMETERStRESOURCE_REGISTRYtEVENT_SINKStbasicConfigtDEBUGt	getLoggert__name__RR
t__opts__RR)R8R?RJRaRiRkRsR�R�R�(((s5/usr/lib/python2.7/site-packages/salt/modules/heat.pyt<module>)s\



	
I			20B	�	�

Zerion Mini Shell 1.0