%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/vultrpy.pyc

�
���^c@@sydZddlmZmZmZddlZddlZddlZddlj	Z	ddl
mZddlm
ZddlmZmZeje�ZdZiZd�Zd	�Zdd
�Zdd�Zdd�Zddd
�Zdd�Zdd�Zd�Z d�Z!ddd�Z"d�Z#d�Z$d�Z%dd�Z&d�Z'd�Z(dddde)d�Z*dS(u5
Vultr Cloud Module using python-vultr bindings
==============================================

.. versionadded:: 2016.3.0

The Vultr cloud module is used to control access to the Vultr VPS system.

Use of this module only requires the ``api_key`` parameter.

Set up the cloud configuration at ``/etc/salt/cloud.providers`` or
``/etc/salt/cloud.providers.d/vultr.conf``:

.. code-block:: yaml

    my-vultr-config:
      # Vultr account api key
      api_key: <supersecretapi_key>
      driver: vultr

Set up the cloud profile at ``/etc/salt/cloud.profiles`` or
``/etc/salt/cloud.profiles.d/vultr.conf``:

.. code-block:: yaml

    nyc-4gb-4cpu-ubuntu-14-04:
      location: 1
      provider: my-vultr-config
      image: 160
      size: 95
      enable_private_network: True

This driver also supports Vultr's `startup script` feature.  You can list startup
scripts in your account with

.. code-block:: bash

    salt-cloud -f list_scripts <name of vultr provider>

That list will include the IDs of the scripts in your account.  Thus, if you
have a script called 'setup-networking' with an ID of 493234 you can specify
that startup script in a profile like so:

.. code-block:: yaml

    nyc-2gb-1cpu-ubuntu-17-04:
      location: 1
      provider: my-vultr-config
      image: 223
      size: 13
      startup_script_id: 493234

i(tabsolute_importtprint_functiontunicode_literalsN(tsix(t	urlencode(tSaltCloudConfigErrortSaltCloudSystemExituvultrcC@st�tkrtStS(uA
    Set up the Vultr functions and check for configurations
    (tget_configured_providertFalset__virtualname__(((s=/usr/lib/python2.7/site-packages/salt/cloud/clouds/vultrpy.pyt__virtual__OscC@stjttpdd�S(u.
    Return the first configured instance
    uvultruapi_key(uapi_key(tconfigtis_provider_configuredt__opts__t__active_provider_name__(((s=/usr/lib/python2.7/site-packages/salt/cloud/clouds/vultrpy.pyRYs	cC@sitd<itd<itd<t|�}t|�}t|�}x=tj|�D],\}}|td|d<|td|<qRWx=tj|�D],\}}|td|d<|td|<q�Wx=tj|�D],\}}|td|d<|td|<q�WdS(u�
    Provide a place to hang onto results of --list-[locations|sizes|images]
    so we don't have to go out to the API and get them every time.
    uavail_locationsuavail_sizesuavail_imagesunameN(tDETAILStavail_locationstavail_imagestavail_sizesRt	iteritems(tconnt	locationstimagestsizestkeytlocationtimagetvm_size((s=/usr/lib/python2.7/site-packages/salt/cloud/clouds/vultrpy.pyt_cache_provider_detailsds


cC@s
td�S(u/
    return available datacenter locations
    uregions/list(t_query(R((s=/usr/lib/python2.7/site-packages/salt/cloud/clouds/vultrpy.pyR}scC@s
td�S(u*
    return available startup scripts
    ustartupscript/list(R(R((s=/usr/lib/python2.7/site-packages/salt/cloud/clouds/vultrpy.pyt
avail_scripts�scC@st�S(u(
    return list of Startup Scripts
    (R(Rtcall((s=/usr/lib/python2.7/site-packages/salt/cloud/clouds/vultrpy.pytlist_scripts�scC@s
td�S(u8
    Return available sizes ("plans" in VultrSpeak)
    u
plans/list(R(R((s=/usr/lib/python2.7/site-packages/salt/cloud/clouds/vultrpy.pyR�scC@s
td�S(u!
    Return available images
    uos/list(R(R((s=/usr/lib/python2.7/site-packages/salt/cloud/clouds/vultrpy.pyR�scK@sUi}t�}x?|D]7}i||<x$dD]}||||||<q-WqW|S(u$
    Return basic data on nodes
    uiduimageusizeustateuprivate_ipsu
public_ips(uiduimageusizeustateuprivate_ipsu
public_ips(tlist_nodes_full(tkwargstrettnodestnodetprop((s=/usr/lib/python2.7/site-packages/salt/cloud/clouds/vultrpy.pyt
list_nodes�s	


cK@s�td�}i}x�|D]�}||d}||j�||<|||d<||d||d<||d||d<||d||d	<||d
||d<||d||d
<qW|S(u"
    Return all data on nodes
    userver/listulabeluiduosuimageu	VPSPLANIDusizeustatusustateuinternal_ipuprivate_ipsumain_ipu
public_ips(Rtcopy(R"R$R#R%tname((s=/usr/lib/python2.7/site-packages/salt/cloud/clouds/vultrpy.pyR!�s
cC@stdt�td|�S(uO
    Return a list of the VMs that are on the provider, with select fields
    ucloud.list_nodes_selectuquery.selection(t	__utils__R!R
(RR((s=/usr/lib/python2.7/site-packages/salt/cloud/clouds/vultrpy.pytlist_nodes_select�sc	C@syt|dd�}i|dd6}tddddtdt|��}|jd	�d
kru|jd�d
krutS|S(u"
    Remove a node from Vultr
    RuactionuSUBIDuserver/destroytmethoduPOSTtdecodetdataubodyuutext(t
show_instanceRRt
_urlencodetgettTrue(R)R%tparamstresult((s=/usr/lib/python2.7/site-packages/salt/cloud/clouds/vultrpy.pytdestroy�s$*cO@s
td�S(u)
    Execute a "stop" action on a VM
    userver/halt(R(targsR"((s=/usr/lib/python2.7/site-packages/salt/cloud/clouds/vultrpy.pytstop�scO@s
td�S(u*
    Execute a "start" action on a VM
    userver/start(R(R6R"((s=/usr/lib/python2.7/site-packages/salt/cloud/clouds/vultrpy.pytstart�scC@sT|dkrtd��nt�}||kr4iStd||tt�||S(uC
    Show the details from the provider concerning an instance
    uactionu<The show_instance action must be called with -a or --action.ucloud.cache_node(RR!R*RR
(R)RR$((s=/usr/lib/python2.7/site-packages/salt/cloud/clouds/vultrpy.pyR/�s	cC@sRtikrt�ntj|�}yt|||SWntk
rMtSXdS(u0
    Helper function to retrieve a Vultr ID
    N(RRRt	text_typetKeyErrorR(t	which_keytavailkeytkeyname((s=/usr/lib/python2.7/site-packages/salt/cloud/clouds/vultrpy.pyt_lookup_vultrid�s

c
@s|d�kr�d�d<ntjd�tdtdt�}tjd�tdtddM�}|r�t|�t�kr�tjdt|��tS|dMk	r�t	|t
�s�td��q�n|tkr�d	}nd
}t
ddd
dj�d�dt
dd�ddddg�dtddtd�t�ddd�}|sgtjd�d�tSt�ddd�}|s�tjd�d�tSt�d d!d"�}|s�tjd#�d �tSi�dd$6|d6|d6|d"6�dd%6|d6}|r||d&<ntjd'�d�t
ddd(d)j�d�dit
dd*|t|��d+6dtddtd�y�td,d-d.d/t|��}t|jd0d1��d2kr/tjd3�d|�tjd4�t
ddd5d6j�d�di|d+6dtddtd�tSWnvtk
r�}	tjd7�d|	d8tj�t
ddd5d6j�d�di|d+6dtddtd�tSX�fd9�}
�fd:�}�fd;�}�fd<�}
t
d=|
d>tjd?�tddN���dB<t
d=|d>tjd?�tddO���dC<t
d=|d>tjd?�tddP��t
d=|
d>tjd?�tddQ��tjdDt�tdtddM�tdD<t
dE�t�}|jt�ddFdG��tjdH�d�tjdI�dtj|��t
dddJdKj�d�dt
ddL�ddddg�dtddtd�|S(Ru-
    Create a single VM from a data dict
    udriveruprovideruenable_private_networkt
search_globaltdefaultustartup_script_idu<Your Vultr account does not have a startup script with ID %su/'private_networking' should be a boolean value.uyesunoucloud.fire_eventueventustarting createusalt/cloud/{0}/creatingunameR6ucloud.filter_eventucreatinguprofiletsock_dirusock_dirt	transportu	transportuimageuavail_imagesuOSIDu/Vultr does not have an image with id or name %susizeuavail_sizesu	VPSPLANIDu-Vultr does not have a size with id or name %sulocationuavail_locationsuDCIDu1Vultr does not have a location with id or name %sulabeluhostnameuSCRIPTIDuCreating Cloud VM %surequesting instanceusalt/cloud/{0}/requestingu
requestingukwargsu
server/createR,uPOSTR.ustatusu200i,u2Error creating %s on Vultr

Vultr API returned %s
uPStatus 412 may mean that you are requesting an
invalid location, image, or size.uinstance request failedu salt/cloud/{0}/requesting/failedulError creating %s on Vultr

The following exception was thrown when trying to run the initial deployment:
%stexc_info_on_loglevelc@sYt�ddd�}tj|jdd��}|jd�rQtjd�tS|dS(u=
        Wait for the IP address to become available
        unameRuactionumain_ipu0i(R/RR9R1t
startswithttimetsleepR(R.tmain_ip(tvm_(s=/usr/lib/python2.7/site-packages/salt/cloud/clouds/vultrpy.pytwait_for_hostnamezs
c@sPt�ddd�}tj|jdd��dkrHtjd�tS|dS(u=
        Wait for the IP address to become available
        unameRuactionudefault_passwordui(R/RR9R1RERFR(R.(RH(s=/usr/lib/python2.7/site-packages/salt/cloud/clouds/vultrpy.pytwait_for_default_password�s
!
c@sPt�ddd�}tj|jdd��dkrHtjd�tS|dS(	u=
        Wait for the IP address to become available
        unameRuactionustatusuuactiveiudefault_password(R/RR9R1RERFR(R.(RH(s=/usr/lib/python2.7/site-packages/salt/cloud/clouds/vultrpy.pytwait_for_status�s
!
c@sPt�ddd�}tj|jdd��dkrHtjd�tS|dS(	u=
        Wait for the IP address to become available
        unameRuactionuserver_stateuuokiudefault_password(R/RR9R1RERFR(R.(RH(s=/usr/lib/python2.7/site-packages/salt/cloud/clouds/vultrpy.pytwait_for_server_state�s
!
ucloud.wait_for_funttimeoutuwait_for_fun_timeoutii<ussh_hostupassworduhard_timeoutucloud.bootstrapRuactionuCreated Cloud VM '%s'u'%s' VM creation details:
%sucreated instanceusalt/cloud/{0}/createducreatedNi�i�i�i�(Rtget_cloud_config_valueR
RtNonetstrRtlogterrort
isinstancetboolRR2R*tformatR>tinfotlistRR0tintR1t	ExceptiontloggingtDEBUGRtupdateR/tdebugtpprinttpformat(RHtprivate_networkingtstartup_scripttenable_private_networktosidt	vpsplanidtdcidR"R.texcRIRJRKRLR#((RHs=/usr/lib/python2.7/site-packages/salt/cloud/clouds/vultrpy.pytcreate	s�	"


 








"
uGETc
C@s�tjdt�tdt�}tjdt�tdtdd�}djd|d|d	|�}|dkrui}ntd
|d|d|d
|d|dddtd|ddddgdt�
}	d|	kr�|	dS|	S(u=
    Perform a query directly against the Vultr REST API
    uapi_keyR?umanagement_hostR@u
api.vultr.comu5https://{management_host}/v1/{path}?api_key={api_key}tmanagement_hosttpathtapi_keyu
http.queryR,R3R.theader_dicttporti�ttextR-tdecode_typeujsonthide_fieldstoptsudictN(	RRNRR
RRUROR*R2(
RiR,R.R3RkR-RjRhturlR4((s=/usr/lib/python2.7/site-packages/salt/cloud/clouds/vultrpy.pyR�s@							(+t__doc__t
__future__RRRR^RZREtsalt.configRtsalt.extRtsalt.ext.six.moves.urllib.parseRR0tsalt.exceptionsRRt	getLoggert__name__RQR	RR
RRORRRR RRR'R!R+R5R7R8R/R>RgR2R(((s=/usr/lib/python2.7/site-packages/salt/cloud/clouds/vultrpy.pyt<module>6s:	
									�

Zerion Mini Shell 1.0