%PDF- %PDF-
Mini Shell

Mini Shell

Direktori : /usr/lib/python2.7/site-packages/salt/cloud/clouds/
Upload File :
Create Path :
Current File : //usr/lib/python2.7/site-packages/salt/cloud/clouds/dimensiondata.pyo

�
���^c@@sNdZddlmZmZmZddlZddlZddlZddlm	Z
y�ddlZddlm
Z
mZddlmZddlmZddlmZdd	lmZddlmZddlmZe
ej�e
d
�krddlZejjjd�neZ Wne!k
r8e"Z nXddl#Tdd
l$m%Z%ddl&Z'ddl(j)Z)ddl*m+Z+m,Z,m-Z-yddl.m/Z/eZ0Wne!k
r�e"Z0nXe%e1e2��Z1e%e3e2��Z3e%e4e2��Z4e%e5e2��Z5e%e6e2��Z6e%e7e2��Z7e%e8e2��Z8e%e9e2��Z9e%e:e2��Z:e%e;e2��Z;e%e<e2��Z<e%e=e2��Z=e%e>e2��Z>ej?e@�ZAdZBd�ZCd�ZDd�ZEd�ZFd�ZGddd�ZId�ZJd�ZKd�ZLdd�ZMdd�ZNd�ZOdd�ZPd�ZQdS(u
Dimension Data Cloud Module
===========================

This is a cloud module for the Dimension Data Cloud,
using the existing Libcloud driver for Dimension Data.

.. code-block:: yaml

    # Note: This example is for /etc/salt/cloud.providers
    # or any file in the
    # /etc/salt/cloud.providers.d/ directory.

    my-dimensiondata-config:
      user_id: my_username
      key: myPassword!
      region: dd-na
      driver: dimensiondata

:maintainer: Anthony Shaw <anthonyshaw@apache.org>
:depends: libcloud >= 1.2.1
i(tabsolute_importtprint_functiontunicode_literalsN(tLooseVersion(t
NodeDrivert	NodeState(tNodeAuthPassword(tProvider(t
get_driver(tMemberu1.4.0u/etc/ssl/certs/YaST-CA.pem(t*(tnamespaced_function(tSaltCloudSystemExittSaltCloudExecutionFailuretSaltCloudExecutionTimeout(tall_matching_cidrsu
dimensiondatacC@s`t�tkrtSt�tkr&tSx3tjtd�D]\}}d|kr:q:q:q:WtS(uS
    Set up the libcloud functions and check for dimensiondata configurations.
    u	providersu
dimensiondata(tget_configured_providertFalsetget_dependenciestsixt	iteritemst__opts__t__virtualname__(tprovidertdetails((sC/usr/lib/python2.7/site-packages/salt/cloud/clouds/dimensiondata.pyt__virtual__as 
cC@stjttpdd�S(u/
    Return the first configured instance.
    u
dimensiondatauuser_idukeyuregion(uuser_idukeyuregion(tconfigtis_provider_configuredRt__active_provider_name__(((sC/usr/lib/python2.7/site-packages/salt/cloud/clouds/dimensiondata.pyRrs	cC@s$itd6td6}tjt|�S(u*
    Warn if dependencies aren't met.
    ulibcloudunetaddr(tHAS_LIBCLOUDtHAS_NETADDRRtcheck_driver_dependenciesR(tdeps((sC/usr/lib/python2.7/site-packages/salt/cloud/clouds/dimensiondata.pyR}s
cC@s�t}yUt|dd�}|dtjk}tjd|dtj|d�|d�Wn-tk
r�}tj	d|dt
j�|SX|s�dS|d}|d}|r�|r�tjd	�x�|D]�}t
||g�}|tkr�q�ntjjj|�r,tjd
|�|jj|�q�tjd|�||jkr�|jj|�q�q�Wt|�dkr�|jr�|Sn|r�||_t|�dkr�|Sn|r�||_t|�dkr�|Sntjd�tj|�dS(
Nunameuactionustateu+Loaded node data for %s:
name: %s
state: %suFailed to get nodes list: %stexc_info_on_logleveluprivate_ipsu
public_ipsuEPrivate IPs returned, but not public. Checking for misidentified IPs.u%s is a public IPu%s is a private IPuContents of the node data:(Rt
show_instanceRtRUNNINGtlogtdebugtpprinttpformatt	ExceptionterrortloggingtDEBUGtwarningtpreferred_iptsalttutilstcloudtis_public_ipt
public_ipstappendtprivate_ipst
ssh_interface(tvm_tdatatrunningtnodeterrtprivatetpublict
private_ip((sC/usr/lib/python2.7/site-packages/salt/cloud/clouds/dimensiondata.pyt_query_node_data�sN	&	





		
cC@s�y7|dr6tjttpd|d�tkr6tSWntk
rJnXtddddj|d�dtd	d
|ddddg�d
tddtd�tj	d|d�t
�}|j|d�}|jd|�}g|D]}|j
|dkr�|^q�d}|jd|�}y4g|D]}|j|dkr0|^q0d}Wn9tk
r�|jd|d|ddddd�}nXyFg|jd|d|�D]}|j|dkr�|^q�d}	Wn3ttfk
r|jd|d|�d}	nXi|dd6|d6|dd6|d 6|	d!6|d"d#6}
t|
�}tddd$d%j|d�dtd	d&|t|��d
tddtd�t|d'�}||
d'<y|j|
�}
Wn4tk
r}tjd(|d|d)tj�tSXyqtd*td+||
fd,tjd-|td.dF�d1tjd2|td.d3�d4tjd5|td.d0��}
Wn\ttfk
r�}z*yt |d�Wnt!k
r�nXWd6t!t"j#|���XnXtj$d7�t%|�d8krt&||
j'�}nt&||
j(�}tj$d9|�td:|t�d8krst&||
j'�}tj	d;|�n"t&||
j(�}tj$d;|�|s�t!d<��n||d=<||d><|d'|d?<td@|t�}|j)|
j*�d?|
j+kr|
j+d?=ntj	dA|d�tj$dB|dt,j-|
j*��tdddCdDj|d�dtd	dE|ddddg�d
tddtd�|S(Gu-
    Create a single VM from a data dict
    uprofileu
dimensiondataucloud.fire_eventueventustarting createusalt/cloud/{0}/creatingunametargsucloud.filter_eventucreatinguproviderudrivertsock_dirusock_dirt	transportu	transportuCreating Cloud VM %sulocationtlocationuimageiunetwork_domaintnametplanuADVANCEDtdescriptionutnetwork_domainuvlanudescriptionuex_descriptionuex_network_domainuex_vlanu
is_startedu
ex_is_startedurequesting instanceusalt/cloud/{0}/requestingu
requestinguauthu�Error creating %s on DIMENSIONDATA

The following exception was thrown by libcloud when trying to run the initial deployment: 
%sR!ucloud.wait_for_iptupdate_argsttimeoutuwait_for_ip_timeouttdefaultii<tintervaluwait_for_ip_intervalitmax_failuresuwait_for_ip_max_failuresNuVM is now runninguprivate_ipsuUsing IP address %sucloud.get_salt_interfaceuSalt interface set to: %suNo IP addresses could be found.u	salt_hostussh_hostupassworducloud.bootstrapuCreated Cloud VM '%s'u'%s' VM creation details:
%sucreated instanceusalt/cloud/{0}/createducreatedi�(.Rtis_profile_configuredRRRtAttributeErrort	__utils__tformatR$tinfotget_conntex_get_location_by_idtlist_imagestidtex_list_network_domainsRCt
IndexErrortex_create_network_domaint
ex_list_vlanstKeyErrort_to_event_datatlistRtcreate_nodeR(R)R*R+R>tget_cloud_config_valueRR
tdestroyRRt	text_typeR%R5R-R4R2tupdatet__dict__textraR&R'(R6tconnRBtimagestxtimagetnetwork_domainstyRFtvlantkwargst
event_datatinitial_passwordR7texct
ip_addresstsalt_ip_addresstret((sC/usr/lib/python2.7/site-packages/salt/cloud/clouds/dimensiondata.pytcreate�s�	
"
	0
'
	


'	








"
cC@s�t�}|dkr$td��n|s7d|krHtjd�tSd|kretjd�tSd|kr�tjd�tSd	|krbg}d
}|jd	�jd�}tjd|�x�|D]�}y@tjd
|�t||�}tjd|�|j	d}Wn,t
k
r=}tjd|dtj�nX|j
t|||d��q�Wnd!}tjd|�|d}	|d}
|d}|jdd!�}|jdd!�}
t|�}|j�}g|D]}|j|	kr�|^q�d}tjd|j�|j|j�t|�}tddddd|dtddtd�|j|
|||
|�}t|�}tdddd d|dtddtd�t|�S("u�
    Create a load-balancer configuration.
    CLI Example:

    .. code-block:: bash

        salt-cloud -f create_lb dimensiondata \
            name=dev-lb port=80 protocol=http \
            members=w1,w2,w3 algorithm=ROUND_ROBIN
    ufunctionu<The create_lb function must be called with -f or --function.unameu6A name must be specified when creating a health check.uportu=A port or port-range must be specified for the load-balancer.u
networkdomainu9A network domain must be specified for the load-balancer.umembersuu,uMemberList: %su
Member: %suNode: %siuFailed to get node ip: %sR!uMembers: %suprotocolu	algorithmuNetwork Domain: %sucloud.fire_eventueventucreate load_balanceru salt/cloud/loadbalancer/creatingR?R@usock_dirRAu	transportucreated load_balancerusalt/cloud/loadbalancer/createdN(RQRR$R)RtgettsplitR%tget_nodeR4R(R*R+R3R	tNonetget_lb_connRURCRTtex_set_current_network_domainRZRNRtcreate_balancert_expand_balancer(RjtcallRctmemberstiptmembersListtmemberR9R:t
networkdomainRCtporttprotocolt	algorithmtlb_connRgRhRFRktlb((sC/usr/lib/python2.7/site-packages/salt/cloud/clouds/dimensiondata.pyt	create_lb]s~	
	$


,

cC@si}|j|j�|S(uU
    Convert the libcloud load-balancer object into something more serializable.
    (R`Ra(R�Rp((sC/usr/lib/python2.7/site-packages/salt/cloud/clouds/dimensiondata.pyRy�scC@s�tjd|tdddt�}tj}|dkrBtj}nx=|D]5}ytj||�|SWqItk
r}qIqIXqIWtS(uT
    Return the preferred Internet protocol. Either 'ipv4' (default) or 'ipv6'.
    uprotocolRIuipv4t
search_globaluipv6(	RR]RRtsockettAF_INETtAF_INET6t	inet_ptonR((R6tipstprototfamilyR|((sC/usr/lib/python2.7/site-packages/salt/cloud/clouds/dimensiondata.pyR-�s	

cC@stjd|tdddt�S(uj
    Return the ssh_interface type to connect to. Either 'public_ips' (default)
    or 'private_ips'.
    u
ssh_interfaceRIu
public_ipsR�(RR]RR(R6((sC/usr/lib/python2.7/site-packages/salt/cloud/clouds/dimensiondata.pyR5�scC@sKt�}t||�}tjd|�|j|�}tjd|�|S(u�
    Stop a VM in DimensionData.

    name:
        The name of the VM to stop.

    CLI Example:

    .. code-block:: bash

        salt-cloud -a stop vm_name
    uNode of Cloud VM: %suStatus of Cloud VM: %s(RQRtR$R%tex_shutdown_graceful(RCRzRcR9tstatus((sC/usr/lib/python2.7/site-packages/salt/cloud/clouds/dimensiondata.pytstop�s
	cC@sKt�}t||�}tjd|�|j|�}tjd|�|S(u�
    Stop a VM in DimensionData.

    :param str name:
        The name of the VM to stop.

    CLI Example:

    .. code-block:: bash

        salt-cloud -a stop vm_name
    uNode of Cloud VM: %suStatus of Cloud VM: %s(RQRtR$R%t
ex_start_node(RCRzRcR9R�((sC/usr/lib/python2.7/site-packages/salt/cloud/clouds/dimensiondata.pytstart�s	cC@s�t�}ttj�}tjd|t�}tjd|t�}tjd|t�}|dk	rstj	d�n|||d|�S(u5
    Return a conn object for the passed VM data
    uregionuuser_idukeyu+DimensionData authenticating using passwordtregionN(
RRRt
DIMENSIONDATARR]RRuR$R%(R6tdriverR�tuser_idtkey((sC/usr/lib/python2.7/site-packages/salt/cloud/clouds/dimensiondata.pyRQs	cC@syt�}tjd|t�}tjd|t�}tjd|t�}|s]td��nttj�||d|�S(u,
    Return a load-balancer conn object
    uregionuuser_idukeyu4Missing dimensiondata_driver for get_lb_conn method.R�(RRR]RRt
get_driver_lbtProvider_lbR�(t	dd_driverR6R�R�R�((sC/usr/lib/python2.7/site-packages/salt/cloud/clouds/dimensiondata.pyRv.s	cC@s+|dkrdSt|t�r#|St|t�r6|St|t�rI|St|t�r\|St|t�ro|St|t�r�|St|t�r�|j	St|t
�r�g|D]}t|�^q�Si}xZt|�D]L}|j
d�r�q�nt||�}t|�rq�nt|�||<q�W|S(u�
    Convert the specified object into a form that can be serialised by msgpack as event data.

    :param obj: The object to convert.
    u_N(Rut
isinstancetbooltinttfloattstrtbytestdictRRCR[RZtdirt
startswithtgetattrtcallable(tobjtitemRktattribute_nametattribute_value((sC/usr/lib/python2.7/site-packages/salt/cloud/clouds/dimensiondata.pyRZEs6(Rt__doc__t
__future__RRRR*R�R&tsalt.utils.versionsRt
_LooseVersiontlibcloudtlibcloud.compute.baseRRRtlibcloud.compute.typesRtlibcloud.compute.providersRtlibcloud.loadbalancer.baseR	tlibcloud.loadbalancer.typesR�tlibcloud.loadbalancer.providersR�t__version__tlibcloud.securitytsecurityt
CA_CERTS_PATHR3tTrueRtImportErrorRtsalt.cloud.libcloudfuncstsalt.utils.functoolsRtsalt.utils.cloudR.tsalt.configRtsalt.exceptionsRR
RtnetaddrRRtget_sizetglobalst	get_imagetavail_locationstavail_imagestavail_sizestscriptR^treboott
list_nodestlist_nodes_fulltlist_nodes_selectR"Rtt	getLoggert__name__R$RRRRR>RqRuR�RyR-R5R�R�RQRvRZ(((sC/usr/lib/python2.7/site-packages/salt/cloud/clouds/dimensiondata.pyt<module>sv






				6	�_					

Zerion Mini Shell 1.0