%PDF- %PDF-
Mini Shell

Mini Shell

Direktori : /proc/227033/root/lib/python2.7/site-packages/salt/cloud/clouds/
Upload File :
Create Path :
Current File : //proc/227033/root/lib/python2.7/site-packages/salt/cloud/clouds/cloudstack.pyo

�
���^c@@s�dZddlmZmZmZddlZddlZddljZddl	Z
ddlZ
ddlTddl
mZddlmZddlmZddlmZyWdd	lmZeej�ed
�kr�ddlZejjjd�neZWne k
re!ZnXej"e#�Z$ee%e&��Z%ee'e&��Z'ee(e&��Z(ee)e&��Z)ee*e&��Z*ee+e&��Z+ee,e&��Z,ee-e&��Z-ee.e&��Z.ee/e&��Z/ee0e&��Z0dZ1d
�Z2d�Z3d�Z4d�Z5d�Z6d�Z7d�Z8d�Z9d�Z:d�Z;d�Z<d�Z=d�Z>ddd�Z@d�ZAd�ZBdS(u�
CloudStack Cloud Module
=======================

The CloudStack cloud module is used to control access to a CloudStack based
Public Cloud.

:depends: libcloud >= 0.15

Use of this module requires the ``apikey``, ``secretkey``, ``host`` and
``path`` parameters.

.. code-block:: yaml

    my-cloudstack-cloud-config:
      apikey: <your api key >
      secretkey: <your secret key >
      host: localhost
      path: /client/api
      driver: cloudstack

i(tabsolute_importtprint_functiontunicode_literalsN(t*(tnamespaced_function(tSaltCloudSystemExit(tLooseVersion(tsix(tCloudStackNetworku1.4.0u/etc/ssl/certs/YaST-CA.pemu
cloudstackcC@s*t�tkrtSt�tkr&tStS(uP
    Set up the libcloud functions and check for CloudStack configurations.
    (tget_configured_providertFalsetget_dependenciest__virtualname__(((s@/usr/lib/python2.7/site-packages/salt/cloud/clouds/cloudstack.pyt__virtual__Ns
cC@stjttptd�S(u/
    Return the first configured instance.
    uapikeyu	secretkeyuhostupath(uapikeyu	secretkeyuhostupath(tconfigtis_provider_configuredt__opts__t__active_provider_name__R(((s@/usr/lib/python2.7/site-packages/salt/cloud/clouds/cloudstack.pyR	[s	cC@stjtitd6�S(u*
    Warn if dependencies aren't met.
    ulibcloud(Rtcheck_driver_dependenciesRtHAS_LIBS(((s@/usr/lib/python2.7/site-packages/salt/cloud/clouds/cloudstack.pyRfscC@sKttj�}tjdt�tdtdt�}|tkr�yddl	}t|j
_Wq�tt
fk
r�td��q�Xn|dtjdt�tdt�d	tjd
t�tdt�dtjdt�tdtdt�d
tjdt�tdt�dtjdt�tdt�dtjdt�tdddt��S(u5
    Return a conn object for the passed VM data
    uverify_ssl_certtdefaultt
search_globaliNuCCould not disable SSL certificate verification. Not loading module.tkeyuapikeytsecretu	secretkeytsecureusecurethostuhosttpathupathtportuport(t
get_drivertProvidert
CLOUDSTACKRtget_cloud_config_valueR	RtTrueR
tlibcloud.securitytsecuritytVERIFY_SSL_CERTtImportErrortAttributeErrorRtNone(tdrivertverify_ssl_certtlibcloud((s@/usr/lib/python2.7/site-packages/salt/cloud/clouds/cloudstack.pytget_connps:			cC@ss|j�}tjd|tdd�}xE|D]=}tj|�tj|j�tj|j�fkr.|Sq.WdS(u)
    Return the node location to use
    ulocationRiN(tlist_locationsRRRRt	text_typetidtname(tconntvm_t	locationstloctlocation((s@/usr/lib/python2.7/site-packages/salt/cloud/clouds/cloudstack.pytget_location�s

3cC@sEtjd|tdt�}|r=tjd|tddg�StSdS(uL
    Return a list of security groups to use, defaulting to ['default']
    usecuritygroup_enabledRu
securitygroupudefaultN(RRRR R
(R/R0tsecuritygroup_enabled((s@/usr/lib/python2.7/site-packages/salt/cloud/clouds/cloudstack.pytget_security_groups�scC@s4tjd|tdtjd|tdt�dt�S(u$
    Return the password to use
    upasswordRupasswdR(RRRR
(R0((s@/usr/lib/python2.7/site-packages/salt/cloud/clouds/cloudstack.pytget_password�scC@stjdt�tdt�S(u3
    Returns the ssh private key for VM access
    uprivate_keyR(RRR	RR
(((s@/usr/lib/python2.7/site-packages/salt/cloud/clouds/cloudstack.pytget_key�scC@s'tjd|t�}|r|StSdS(u#
    Return the keypair to use
    ukeypairN(RRRR
(R0tkeypair((s@/usr/lib/python2.7/site-packages/salt/cloud/clouds/cloudstack.pytget_keypair�scC@s6y|jd}Wntk
r1|jd}nX|S(u�
    Return the IP address of the VM
    If the VM has  public IP as defined by libcloud module then use it
    Otherwise try to extract the private IP and use that one.
    i(t
public_ipst	Exceptiontprivate_ips(tdatatip((s@/usr/lib/python2.7/site-packages/salt/cloud/clouds/cloudstack.pytget_ip�s

cC@s-tjd|t�}|dk	r%|StSdS(uC
    Return the networkid to use, only valid for Advanced Zone
    u	networkidN(RRRR&R
(R0t	networkid((s@/usr/lib/python2.7/site-packages/salt/cloud/clouds/cloudstack.pyt
get_networkid�scC@s�y|j�}Wntk
r1tjd�tSXtjd|t�}|sQtSxE|D]=}tj	|�tj	|j
�tj	|j�fkrX|SqXWtjd|�tS(u$
    Return the project to use.
    uECannot get projects, you may need to update libcloud to 0.15 or lateru	projectidu$Couldn't find project %s in projects(tex_list_projectsR%tlogtwarningR
RRRRR,R-R.(R/R0tprojectstprojidtproject((s@/usr/lib/python2.7/site-packages/salt/cloud/clouds/cloudstack.pytget_project�s


3cC@s�y=|dr<tjttpd|dd|�tkr<tSWntk
rPnXtddddj|d�d	td
dtdd
|ddddg�dtd�tj	d|d�t
�}i|dd6t||�d6t||�d6t
||�d6}t||�}|tk	r.||d<nt|�tk	rSt|�|d<nt|�tk	r�t|�|d<td8d8d8|dd8d8�f|d<nt||�tk	r�t||�|d<n|j�}|dj|d<|dj|d<tddddj|d�d	td
ditdd|ddddddg�d6dtd�t|�}|rz||d<n|d|d<i}t|�}|r�x�|D]�}d |kr�d!j|dt|��|d <ntddd"dj|d �d	td
dii|d d6|d#d$6|d%d6d6�y&|j|d%|d �||d#<Wq�tk
r�}	tjd&|d |	d'tj�tSXq�Wni}y|j|�}
Wn4tk
r�}	tjd(|d|	d'tj�tSXxztj |�D]i}y|j!|
|||�Wq�tk
ra}	tjd)|j"d d*�|	d+tj#tj��tSXq�Wtj$d,|td-d.�}t%|
�|d/<|
j&d0|d0<t'�|d1<td2|t�}
|
j(|
j)�d0|
j&kr�|
j&d0=ntj	d3|d�tj*d4|dt+j,|
j)��tddd5d6j|d�d	td
dtdd7|ddddg�dtd�|
S(9u-
    Create a single VM from a data dict
    uprofileu
cloudstackR0ucloud.fire_eventueventustarting createusalt/cloud/{0}/creatingunametsock_dirusock_dirtargsucloud.filter_eventucreatinguproviderudrivert	transportu	transportuCreating Cloud VM %suimageusizeulocationuex_security_groupsu
ex_keynameu
networkidsunetworksuprojecturequesting instanceusalt/cloud/{0}/requestingu
requestingukwargsuex_displaynameuVirtualNameu{0}-{1}urequesting volumeu
DeviceNameudeviceu
VolumeSizeu~Error creating volume %s on CLOUDSTACK

The following exception was thrown by libcloud when trying to requesting a volume: 
%stexc_info_on_loglevelu~Error creating %s on CLOUDSTACK

The following exception was thrown by libcloud when trying to run the initial deployment: 
%su{Error attaching volume %s on CLOUDSTACK

The following exception was thrown by libcloud when trying to attach a volume: 
%suUNKNOWNtexc_infoussh_usernameRurootussh_hostupasswordukey_filenameucloud.bootstrapuCreated Cloud VM '%s'u'%s' VM creation details:
%sucreated instanceusalt/cloud/{0}/createducreatedN(-Rtis_profile_configuredRRR
R%t	__utils__tformatRDtinfoR*t	get_imagetget_sizeR4R6R:RBRR&RItcopyR.tcloudstack_displaynametblock_device_mappingstlent
create_volumeR<terrortloggingtDEBUGtcreate_nodeRtiterkeyst
attach_volumetgettisEnabledForRR@textraR8tupdatet__dict__tdebugtpprinttpformat(R0R/tkwargstsgt
event_datatdisplaynametvolumestex_blockdevicemappingstex_blockdevicemappingtexcR>tdevice_nametssh_usernametret((s@/usr/lib/python2.7/site-packages/salt/cloud/clouds/cloudstack.pytcreate
s�	


"	



#




	


"cC@sN|dkrtd��ntddddj|�dtdd	i|d
6�|sat�}nt||�}|d$kr�tjd|�n|j	|�}|d$kr�tjd|�nx�|D]�}|j
d
dkrtjd|j
d
|j�q�ntjd|j�tddddj|j�dtdd	i|jd
6�|j
|�sstjd|j�tStjd|j�tddddj|j�dtdd	i|jd
6�tjd|j�tddddj|j�dtdd	i|jd
6�|j|�s3tjd|j�tStjd|j�tddddj|j�dtdd	i|jd
6�q�Wtjd|�|j|�}|s�tjd|�tStjd|�tjjjd td�}tddd!dj|�dtdd	i|d
6�td"tkrJtjjj|jd#�ntS(%u4
    Delete a single VM, and all of its volumes
    ufunctionuEThe destroy action must be called with -d, --destroy, -a or --action.ucloud.fire_eventueventudestroying instanceusalt/cloud/{0}/destroyingRJusock_dirRKunameuUnable to find the VM %su#Unable to find volumes of the VM %suvolume_typeuDATADISKuIgnoring volume type %s: %suDetaching volume: %sudetaching volumeusalt/cloud/{0}/detachinguFailed to Detach volume: %suDetached volume: %sudetached volumeusalt/cloud/{0}/detacheduDestroying volume: %sudestroying volumeuFailed to Destroy volume: %suDestroyed volume: %sudestroyed volumeusalt/cloud/{0}/destroyeduDestroying VM: %suFailed to Destroy VM: %suDestroyed VM: %sumasterudestroyed instanceudelete_sshkeysiN(RRPRQRR*tget_nodeR&RDRZtlist_volumesRbRRR.t
detach_volumeR
tdestroy_volumetdestroy_nodetsalttutilsteventt	SaltEventR tcloudt
remove_sshkeyR;(R.R/tcalltnodeRltvolumeRrR{((s@/usr/lib/python2.7/site-packages/salt/cloud/clouds/cloudstack.pytdestroy�s�






cC@stjd|tdt�S(u�
    Return the block device mapping:

    ::

        [{'DeviceName': '/dev/sdb', 'VirtualName': 'ephemeral0'},
          {'DeviceName': '/dev/sdc', 'VirtualName': 'ephemeral1'}]
    ublock_device_mappingsR(RRRR (R0((s@/usr/lib/python2.7/site-packages/salt/cloud/clouds/cloudstack.pyRWs	cC@stjd|tdt�S(u>
    Return display name of VM:

    ::
        "minion1"
    ucloudstack_displaynameR(RRRR (R0((s@/usr/lib/python2.7/site-packages/salt/cloud/clouds/cloudstack.pyRVs(Ct__doc__t
__future__RRRRfR[tsalt.configRtsalt.utils.cloudRytsalt.utils.eventtsalt.cloud.libcloudfuncstsalt.utils.functoolsRtsalt.exceptionsRtsalt.utils.versionsRt
_LooseVersiontsalt.extRt#libcloud.compute.drivers.cloudstackRR)t__version__R!R"t
CA_CERTS_PATHtappendR RR$R
t	getLoggert__name__RDRttglobalsRTRStavail_locationstavail_imagestavail_sizestscriptt
list_nodestlist_nodes_fulltlist_nodes_selectt
show_instanceRR
R	RR*R4R6R7R8R:R@RBRIRsR&R�RWRV(((s@/usr/lib/python2.7/site-packages/salt/cloud/clouds/cloudstack.pyt<module>s`



	
		
	/							
			�^	

Zerion Mini Shell 1.0