B
    è?F[   ã               @   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   ú1lib/python3.7/site-packages/boto/mashups/order.pyÚ__init__&   s    zItem.__init__c             C   s   || j |< d S )N)Úuserdata)r   r   Úvaluer   r   r   Úset_userdata2   s    zItem.set_userdatac             C   s
   | j | S )N)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 Zone)r   )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 AMI)r   )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   Zdescription)r   Úsr   r   r   r   c   s    z"Item.add_group.<locals>.<listcomp>zChoose Security Group)r   )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 Keypair)r   )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   Zhas_sectionZadd_sectionÚsetr   r9   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 )N)r   r   ÚwriteÚgetvalue)r   r2   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#   Zconnectr   r   r&   r   r(   r   r-   r   r*   r   r1   r   r5   r   r8   r   r?   r<   )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*   r-   r1   r5   r8   r<   r?   rB   rE   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 )N)ÚitemsÚreservation)r   r   r   r   r   ¤   s    zOrder.__init__c             K   s"   t ƒ }|jf |Ž | j |¡ d S )N)r	   rE   rJ   r3   )r   rD   Úitemr   r   r   Úadd_item¨   s    zOrder.add_itemc          	   C   sR   t dƒ t ƒ  t dƒ x6| jD ],}t d|j|j|j|jj|j|jjf ƒ qW d S )Nz*This Order consists of the following itemsz#QTY	NAME	TYPE
AMI		Groups			KeyPairz%s	%s	%s	%s	%s	%s)	ÚprintrJ   r   r   r   r   r.   r   r   )r   rL   r   r   r   Údisplay­   s    zOrder.displayTc       	   
   C   s
  t ƒ d kr$tdƒ |  d¡}t|ƒ tƒ }xÀ| 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 ƒ}x<|jD ]2}tƒ }|j
|_
|j|_||_| ¡  | |¡ q²W q2W t|ƒdkr|d
 S |S d S )NzSDB Persistence Domain not setzSpecify SDB Domainé   )Z	min_countZ	max_countZkey_nameZ	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   )Úupdate)r   rQ   r   r   r   r   Å   s    r   )r   rN   r%   r   r   rJ   r   Úrunr   r   r   rB   r   r   r   Z	instancesÚcountÚlenÚtimeZsleepr   r.   Zinstance_idrK   Zsaver3   )	r   ÚblockZdomain_namer2   rL   r   ZstatesrQ   Zserverr   r   r   Úplaceµ   s4    


zOrder.placeN)T)rF   rG   rH   r   rM   rO   rY   r   r   r   r   rI   ¢   s   rI   )Ú__doc__r    Zboto.ec2Zboto.mashups.serverr   r   Zboto.mashups.iobjectr   Zboto.pyami.configr   Zboto.sdb.persistr   r   rW   Zboto.compatr   r'   r	   rI   r   r   r   r   Ú<module>   s   ~