U
    W¨+d   ã                   @   s’   d Z ddlZddlZddlmZmZ ddlmZ ddlm	Z	 ddl
mZmZ ddlZddlmZ dd	d
ddgZG dd„ deƒZG dd„ deƒZdS )z4
High-level abstraction of an EC2 order for servers
é    N)ÚServerÚ	ServerSet)ÚIObject)ÚConfig)Ú
get_domainÚ
set_domain)ÚStringIOzm1.smallzm1.largez	m1.xlargez	c1.mediumz	c1.xlargec                   @   s–   e Zd Zdd„ Zdd„ Zdd„ Zd!dd	„Zd"d
d„Zd#dd„Zd$dd„Z	d%dd„Z
d&dd„Zd'dd„Zd(dd„Zdd„ Zd)dd„Zdd„ Zdd „ ZdS )*ÚItemc                 C   s@   d | _ d | _d | _d| _d | _d | _g | _d | _d | _d | _	d S )Nr   )
ÚregionÚnameÚinstance_typeÚquantityÚzoneÚamiÚgroupsÚkeyÚec2Úconfig©Úself© r   ú6/tmp/pip-unpacked-wheel-dlxw5sjy/boto/mashups/order.pyÚ__init__&   s    zItem.__init__c                 C   s   || j |< d S ©N©Zuserdata)r   r   Úvaluer   r   r   Úset_userdata2   s    zItem.set_userdatac                 C   s
   | j | S r   r   )r   r   r   r   r   Úget_userdata5   s    zItem.get_userdataNc                 C   s4   |r|| _ n$dd„ tj ¡ D ƒ}| j|dd| _ d S )Nc                 S   s   g | ]}||j |jf‘qS r   )r   Zendpoint)Ú.0Úrr   r   r   Ú
<listcomp><   s     z#Item.set_region.<locals>.<listcomp>zChoose Region©Úprompt)r
   Úbotor   ZregionsÚchoose_from_list)r   r
   Úlr   r   r   Ú
set_region8   s    zItem.set_regionc                 C   s   |r|| _ n|  d¡| _ d S )NÚName)r   Ú
get_string)r   r   r   r   r   Úset_name?   s    zItem.set_namec                 C   s   |r|| _ n|  td¡| _ d S )NzInstance Type)r   r$   ÚInstanceTypes)r   r   r   r   r   Úset_instance_typeE   s    zItem.set_instance_typer   c                 C   s    |dkr|| _ n|  d¡| _ d S )Nr   ZQuantity)r   Zget_int)r   Únr   r   r   Úset_quantityK   s    zItem.set_quantityc                 C   s4   |r|| _ n$dd„ | j ¡ D ƒ}| j|dd| _ d S )Nc                 S   s   g | ]}||j |jf‘qS r   )r   Ústate)r   Úzr   r   r   r    U   s     z!Item.set_zone.<locals>.<listcomp>zChoose Availability Zoner!   )r   r   Zget_all_zonesr$   )r   r   r%   r   r   r   Úset_zoneQ   s    zItem.set_zonec                 C   s4   |r|| _ n$dd„ | j ¡ D ƒ}| j|dd| _ d S )Nc                 S   s   g | ]}||j |jf‘qS r   )ÚidÚlocation)r   Úar   r   r   r    \   s     z Item.set_ami.<locals>.<listcomp>z
Choose AMIr!   )r   r   Zget_all_imagesr$   )r   r   r%   r   r   r   Úset_amiX   s    zItem.set_amic                 C   s@   |r| j  |¡ n*dd„ | j ¡ D ƒ}| j  | j|dd¡ d S )Nc                 S   s   g | ]}||j |jf‘qS r   )r   Údescription)r   Úsr   r   r   r    c   s     z"Item.add_group.<locals>.<listcomp>zChoose Security Groupr!   )r   Úappendr   Zget_all_security_groupsr$   )r   Úgroupr%   r   r   r   Ú	add_group_   s    zItem.add_groupc                 C   s4   |r|| _ n$dd„ | j ¡ D ƒ}| j|dd| _ d S )Nc                 S   s   g | ]}||j d f‘qS )Ú )r   )r   Úkr   r   r   r    j   s     z Item.set_key.<locals>.<listcomp>zChoose Keypairr!   )r   r   Zget_all_key_pairsr$   )r   r   r%   r   r   r   Úset_keyf   s    zItem.set_keyc                 C   sˆ   | j  d¡s@| j  d¡ | j  dd| jj¡ | j  dd| jj¡ | j  d¡sX| j  d¡ tƒ }|r„| j  dd|¡ | j  dd| j¡ d S )NZCredentialsÚaws_access_key_idÚaws_secret_access_keyZPyamiZserver_sdb_domainZserver_sdb_name)	r   Úhas_sectionÚadd_sectionÚsetr   r=   r>   r   r   )r   Z
sdb_domainr   r   r   Úupdate_configm   s    zItem.update_configc                 C   s   |s|   d¡}t|d| _d S )NzSpecify Config file)Úpath)Úget_filenamer   r   )r   Zconfig_pathr   r   r   Ú
set_configy   s    
zItem.set_configc                 C   s   t ƒ }| j |¡ | ¡ S r   )r   r   ÚwriteÚgetvalue)r   r6   r   r   r   Úget_userdata_string~   s    zItem.get_userdata_stringc                 K   s(  |  d| j¡| _| js|  ¡  | j ¡ | _|  d| j¡| _| jsH|  ¡  |  d| j¡| _| jsf|  ¡  |  d| j	¡| _	| j	s„|  
¡  |  d| j¡| _| js¢|  ¡  |  d| j¡| _| jsÀ|  ¡  |  d| j¡| _| jsÞ|  ¡  |  d| j¡| _| jsü|  ¡  |  d	| j¡| _| js|  ¡  |  ¡  d S )
Nr
   r   r   r   r   r   r   r   r   )Úgetr
   r&   Úconnectr   r   r)   r   r+   r   r0   r   r-   r   r4   r   r9   r   r<   r   rE   rB   )r   Úparamsr   r   r   Úenterƒ   s:    z
Item.enter)N)N)N)r   )N)N)N)N)N)Ú__name__Ú
__module__Ú__qualname__r   r   r   r&   r)   r+   r-   r0   r4   r9   r<   rB   rE   rH   rL   r   r   r   r   r	   $   s   








r	   c                   @   s.   e Zd Zdd„ Zdd„ Zdd„ Zddd	„Zd
S )ÚOrderc                 C   s   g | _ d | _d S r   )ÚitemsÚreservationr   r   r   r   r   ¤   s    zOrder.__init__c                 K   s"   t ƒ }|jf |Ž | j |¡ d S r   )r	   rL   rQ   r7   )r   rK   Úitemr   r   r   Úadd_item¨   s    zOrder.add_itemc              	   C   sN   t dƒ t ƒ  t dƒ | jD ],}t d|j|j|j|jj|j|jjf ƒ qd S )Nz*This Order consists of the following itemsz#QTY	NAME	TYPE
AMI		Groups			KeyPairz%s	%s	%s	%s	%s	%s)	ÚprintrQ   r   r   r   r   r1   r   r   )r   rS   r   r   r   Údisplay­   s    
  ÿzOrder.displayTc           	   
   C   s   t ƒ d kr$tdƒ |  d¡}t|ƒ tƒ }| jD ]²}|jjd|j|j	j
| ¡ |j|j|jj
d}|r¨dd„ |jD ƒ}| d¡t|ƒkr¨t|ƒ t d¡ d	d„ |jD ƒ}|jD ]2}tƒ }|j
|_
|j|_||_| ¡  | |¡ q®q0t|ƒdkrø|d
 S |S d S )NzSDB Persistence Domain not setzSpecify SDB Domainé   )Z	min_countÚ	max_countZkey_nameÚ	user_dataZsecurity_groupsr   Z	placementc                 S   s   g | ]
}|j ‘qS r   )r.   ©r   Úir   r   r   r    Á   s     zOrder.place.<locals>.<listcomp>Zrunningé   c                 S   s   g | ]}|  ¡ ‘qS r   )ÚupdaterZ   r   r   r   r    Å   s     r   )r   rU   r(   r   r   rQ   r   Úrunr   r   r   rH   r   r   r   Z	instancesÚcountÚlenÚtimeÚsleepr   r1   Zinstance_idrR   Úsaver7   )	r   ÚblockZdomain_namer6   rS   r   Zstatesr[   Úserverr   r   r   Úplaceµ   s:    


  ý

zOrder.placeN)T)rM   rN   rO   r   rT   rV   rf   r   r   r   r   rP   ¢   s   rP   )Ú__doc__r#   Zboto.ec2Zboto.mashups.serverr   r   Zboto.mashups.iobjectr   Zboto.pyami.configr   Zboto.sdb.persistr   r   ra   Zboto.compatr   r*   r	   rP   r   r   r   r   Ú<module>   s   ~