B
    ?F[                 @   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   :lib/python3.7/site-packages/boto/ec2/blockdevicemapping.py__init__   s    zBlockDeviceType.__init__c             C   s   d S )Nr   )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   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.member)r(   )r)   )r   r*   r(   r+   r   r   r   autoscale_build_list_params   s    z.BlockDeviceMapping.autoscale_build_list_paramsc             C   s  d}x| D ]}d||f }||d| < | | }|j rD|j |d| < n|jrXd|d| < n|jrl|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
W d S )N   z%s.%dz%s.DeviceNamez%s.VirtualNamer'   z%s.NoDevicez%s.Ebs.SnapshotIdz%s.Ebs.VolumeSizer   z%s.Ebs.DeleteOnTerminationZfalsez%s.Ebs.VolumeTypez%s.Ebs.Iopsz%s.Ebs.Encrypted)r   r   r   r
   r	   r   r   r   )r   r*   r(   iZdev_namer+   Z	block_devr   r   r   r)      s2    


z%BlockDeviceMapping._build_list_params)N)r'   )r'   )r'   )
r   r   r   r    r   r   r   r,   r-   r)   r   r   r   r   r!   Z   s   




r!   N)objectr   ZEBSBlockDeviceTyper"   r!   r   r   r   r   <module>   s   >