U
    W+d                     @   s(   G d d de ZeZG dd deZdS )c                   @   s*   e Zd ZdZd
ddZdd Zdd	 ZdS )BlockDeviceTypez3
    Represents parameters for a block device.
    NFc                 C   sL   || _ || _|| _|| _|| _|| _|| _|| _|	| _|
| _	|| _
|| _d S N)
connectionephemeral_name	no_device	volume_idsnapshot_idstatusattach_timedelete_on_terminationsizevolume_typeiops	encrypted)selfr   r   r   r   r   r   r	   r
   r   r   r   r    r   ?/tmp/pip-unpacked-wheel-dlxw5sjy/boto/ec2/blockdevicemapping.py__init__   s    zBlockDeviceType.__init__c                 C   s   d S r   r   )r   nameattrsr   r   r   r   startElement8   s    zBlockDeviceType.startElementc                 C   s   |  }|dkr|| _n|dkr(|| _n|dkr<|dk| _n|dkrL|| _n|dkr`t|| _nx|dkrp|| _nh|dkr|| _nX|d	kr|dk| _	nD|d
kr|| _
n4|dkrt|| _n |dkr|dk| _nt| || d S )NZvolumeIdvirtualnameZnodevicetrueZ
snapshotidZ
volumesizer   Z
attachtimeZdeleteonterminationZ
volumetyper   r   )lowerr   r   r   r   intr   r   r	   r
   r   r   r   setattrr   r   valuer   lnamer   r   r   
endElement;   s0    zBlockDeviceType.endElement)NNFNNNNFNNNN)__name__
__module____qualname____doc__r   r   r   r   r   r   r   r      s                
r   c                   @   sH   e Zd ZdZdddZdd Zdd Zdd
dZdddZdddZ	dS )BlockDeviceMappingaG  
    Represents a collection of BlockDeviceTypes when creating ec2 instances.

    Example:
    dev_sda1 = BlockDeviceType()
    dev_sda1.size = 100   # change root volume to 100GB instead of default
    bdm = BlockDeviceMapping()
    bdm['/dev/sda1'] = dev_sda1
    reservation = image.run(..., block_device_map=bdm, ...)
    Nc                 C   s    t |  || _d| _d| _dS )zs
        :type connection: :class:`boto.ec2.EC2Connection`
        :param connection: Optional connection.
        N)dictr   r   current_namecurrent_value)r   r   r   r   r   r   f   s    
zBlockDeviceMapping.__init__c                 C   s$   |  }|dkr t| | _| jS d S )N)Zebsr   )r   r   r&   )r   r   r   r   r   r   r   r   r   p   s    
zBlockDeviceMapping.startElementc                 C   s0   |  }|dkr|| _n|dkr,| j| | j< d S )N)ZdeviceZ
devicename)itemmember)r   r%   r&   r   r   r   r   r   v   s
    zBlockDeviceMapping.endElement c                 C   s   d| }| j ||dS )Nz%sBlockDeviceMappingprefix_build_list_paramsr   paramsr+   prer   r   r   ec2_build_list_params}   s    z(BlockDeviceMapping.ec2_build_list_paramsc                 C   s   d| }| j ||dS )Nz%sBlockDeviceMappings.memberr*   r,   r.   r   r   r   autoscale_build_list_params   s    z.BlockDeviceMapping.autoscale_build_list_paramsc                 C   s  d}| D ]}d||f }||d| < | | }|j rB|j |d| < n|jrVd|d| < n|jrj|j|d| < |jr~|j|d| < |jrd	|d
| < nd|d
| < |jr|j|d| < |jd k	r|j|d| < |jd k	r|jrd	|d| < nd|d| < |d7 }qd S )N   z%s.%dz%s.DeviceNamez%s.VirtualNamer)   z%s.NoDevicez%s.Ebs.SnapshotIdz%s.Ebs.VolumeSizer   z%s.Ebs.DeleteOnTerminationfalsez%s.Ebs.VolumeTypez%s.Ebs.Iopsz%s.Ebs.Encrypted)r   r   r   r   r
   r   r   r   )r   r/   r+   iZdev_namer0   Z	block_devr   r   r   r-      s2    

z%BlockDeviceMapping._build_list_params)N)r)   )r)   )r)   )
r   r    r!   r"   r   r   r   r1   r2   r-   r   r   r   r   r#   Z   s   



r#   N)objectr   ZEBSBlockDeviceTyper$   r#   r   r   r   r   <module>   s   >