o
    ȷe                     @   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 g d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)StringIO)z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   I/var/www/ideatree/venv/lib/python3.10/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 r   r   )r   r   r   r   r   get_userdata5   s   
zItem.get_userdataNc                 C   s6   |r|| _ d S dd tj D }| j|dd| _ d S )Nc                 S      g | ]	}||j |jfqS r   )r   endpoint).0rr   r   r   
<listcomp><       z#Item.set_region.<locals>.<listcomp>zChoose Regionprompt)r
   botor   regionschoose_from_list)r   r
   lr   r   r   
set_region8      
zItem.set_regionc                 C   s   |r|| _ d S | d| _ d S )NName)r   
get_string)r   r   r   r   r   set_name?   s   
zItem.set_namec                 C   s    |r|| _ d S | 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	|| _ d S | d| _ d S )Nr   Quantity)r   get_int)r   nr   r   r   set_quantityK   s   
zItem.set_quantityc                 C   6   |r|| _ d S dd | j D }| j|dd| _ d S )Nc                 S   r   r   )r   state)r!   zr   r   r   r#   U   r$   z!Item.set_zone.<locals>.<listcomp>zChoose Availability Zoner%   )r   r   get_all_zonesr)   )r   r   r*   r   r   r   set_zoneQ   r,   zItem.set_zonec                 C   r6   )Nc                 S   r   r   )idlocation)r!   ar   r   r   r#   \   r$   z Item.set_ami.<locals>.<listcomp>z
Choose AMIr%   )r   r   get_all_imagesr)   )r   r   r*   r   r   r   set_amiX   r,   zItem.set_amic                 C   sB   |r
| j | d S dd | j D }| j | j|dd d S )Nc                 S   r   r   )r   description)r!   sr   r   r   r#   c   r$   z"Item.add_group.<locals>.<listcomp>zChoose Security Groupr%   )r   appendr   get_all_security_groupsr)   )r   groupr*   r   r   r   	add_group_   s   zItem.add_groupc                 C   r6   )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   get_all_key_pairsr)   )r   r   r*   r   r   r   set_keyf   r,   zItem.set_keyc                 C   s   | j ds | j d | j dd| jj | j dd| jj | j ds,| j d t }|rD| j dd| | j dd| j d S d S )NCredentialsaws_access_key_idaws_secret_access_keyPyamiserver_sdb_domainserver_sdb_name)	r   has_sectionadd_sectionsetr   rK   rL   r   r   )r   
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   config_pathr   r   r   
set_configy   s   
zItem.set_configc                 C   s   t  }| j| | S r   )r   r   writegetvalue)r   rA   r   r   r   get_userdata_string~   s   zItem.get_userdata_stringc                 K   s&  | d| j| _| js|   | j | _| d| j| _| js$|   | d| j| _| js3|   | d| j	| _	| j	sB| 
  | d| j| _| jsQ|   | d| j| _| js`|   | d| j| _| jso|   | 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   r1   r   r:   r   r5   r   r?   r   rE   r   rI   r   rX   rT   )r   paramsr   r   r   enter   s:   z
Item.enterr   )r   )__name__
__module____qualname__r   r   r   r+   r/   r1   r5   r:   r?   rE   rI   rT   rX   r[   r_   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di | | j| d S )Nr   )r	   r_   rd   rB   )r   r^   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)	printrd   r   r   r   r   r;   r   r   )r   rf   r   r   r   display   s   

zOrder.displayTc           	   
   C   s   t  d u rtd | d}t| t }| jD ]Y}|jjd|j|j	j
| |j|j|jj
d}|rTdd |jD }|dt|krTt| td d	d |jD }|jD ]}t }|j
|_
|j|_||_|  || qWqt|dkr||d
 S |S )NzSDB Persistence Domain not setzSpecify SDB Domain   )	min_count	max_countkey_name	user_datasecurity_groupsr   	placementc                 S   s   g | ]}|j qS r   )r7   r!   ir   r   r   r#      s    zOrder.place.<locals>.<listcomp>running   c                 S   s   g | ]}|  qS r   )updaterq   r   r   r   r#      s    r   )r   rh   r.   r   r   rd   r   runr   r   r   r[   r   r   r   	instancescountlentimesleepr   r;   instance_idre   saverB   )	r   blockdomain_namerA   rf   r"   statesrr   serverr   r   r   place   s8   




zOrder.placeN)T)r`   ra   rb   r   rg   ri   r   r   r   r   r   rc      s
    rc   )__doc__r'   boto.ec2boto.mashups.serverr   r   boto.mashups.iobjectr   boto.pyami.configr   boto.sdb.persistr   r   rz   boto.compatr   r0   r	   rc   r   r   r   r   <module>   s   ~