Mini Shell
3
{)c}% � @ s� d dl Z d dlZejd�ZddlmZ ddlmZ ddlm Z ddl
mZmZ dd l
mZ dd
lmZ ddlmZ G dd
� d
e�ZG dd� de�ZdS )� NZblivet� )�
StorageDevice� )�stratis_info)�log_method_call)�DeviceError�StratisError)�Size)�availability)�
devicelibsc s( e Zd ZdZdZdZddgZdZdZe j
e jgZ� fdd �Z
ed
d� �Zedd
� �Zedd� �Zedd� �Zedd� �Zedd� �Zedd� �Zedd� �Zejdd� �Zedd� �Zdd� Zeed�Zed d!� �Z� fd"d#�Zd$d%� Z� fd&d'�Zd(d)� Zd0� fd*d+� Z d1� fd,d-� Z!d.d/� Z"� Z#S )2�StratisPoolDevicez A stratis pool device zstratis poolF�stratisdzstratis-cliz/dev/stratisTc s@ |j dd�| _|j dd�| _|j dd�| _tt| �j||� dS )a
:encrypted: whether this pool is encrypted or not
:type encrypted: bool
:keyword passphrase: device passphrase
:type passphrase: str
:keyword key_file: path to a file containing a key
:type key_file: str
� encryptedF�
passphraseN�key_file)�pop�
_encrypted�_StratisPoolDevice__passphrase� _key_file�superr �__init__)�self�args�kwargs)� __class__� �/usr/lib/python3.6/stratis.pyr . s zStratisPoolDevice.__init__c C s | j dd� S )z# A list of this pool block devices N)�parents)r r r r � blockdevs= s zStratisPoolDevice.blockdevsc C s | j dd� S )z' A list of this pool block filesystems N)Zchildren)r r r r �filesystemsB s zStratisPoolDevice.filesystemsc C s t dd� | jD ��S )z The size of this pool c s s | ]}|j V qd S )N)�size)�.0�parentr r r � <genexpr>K s z)StratisPoolDevice.size.<locals>.<genexpr>)�sumr )r r r r r G s zStratisPoolDevice.sizec C s4 | j r*tj| j�}|s$td| j ��|jS | jS d S )Nz'Failed to get information about pool %s)�existsr �
get_pool_info�namer Z
physical_sizer )r � pool_infor r r �_physical_sizeM s z StratisPoolDevice._physical_sizec C s t jjdd� | jD �| j�S )Nc S s g | ]
}|j �qS r )r )r! �bdr r r �
<listcomp>Y s z9StratisPoolDevice._pool_metadata_size.<locals>.<listcomp>)r �stratisZ pool_usedr r )r r r r �_pool_metadata_sizeW s z%StratisPoolDevice._pool_metadata_sizec C s0 t d�}x| jD ]}||j7 }qW || j7 }|S )Nr )r r � used_sizer- )r Z
physical_usedZ
filesystemr r r �_physical_used\ s
z StratisPoolDevice._physical_usedc C s | j | j S )z3 Free space in the pool usable for new filesystems )r) r/ )r r r r �
free_spacei s zStratisPoolDevice.free_spacec C s | j S )z# True if this device is encrypted. )r )r r r r r n s zStratisPoolDevice.encryptedc C s
|| _ d S )N)r )r r r r r r s s c C s | j S )z. Path to key file to be used in /etc/crypttab )r )r r r r r w s zStratisPoolDevice.key_filec C s
|| _ dS )z0 Set the passphrase used to access this device. N)r )r r r r r �_set_passphrase| s z!StratisPoolDevice._set_passphrase)�fsetc C s | j dkp| jotj| jtj�S )N� )r3 N)r r �os�access�R_OK)r r r r �has_key� s
zStratisPoolDevice.has_keyc s( t t| �j� | jr$| j r$td��d S )Nz0cannot create encrypted stratis pool without key)r r �_pre_creater r7 r )r )r r r r8 � s zStratisPoolDevice._pre_createc C sD t | | j| jd� dd� | jD �}tjj| j|| j| j| j d� dS )z Create the device. )�statusc S s g | ]
}|j �qS r )�path)r! r* r r r r+ � s z-StratisPoolDevice._create.<locals>.<listcomp>)r'