Esempio n. 1
0
    def import_pool(self):
        """Import zpool

        Try to import this zpool

        """
        execute('zpool import %s' % self.name)
Esempio n. 2
0
    def export_pool(self):
        """Export zpool

        Try to export this zpool

        """
        execute('zpool export %s' % self.name)
Esempio n. 3
0
    def set_property(self, key, value):
        """Set property value

        Set value for a ZFS property, validated and formatted

        """
        skip_quotes="True"
        if key not in ZFS_PROPERTIES:
            raise ZFSError('Invalid property name')

        if key in ZFS_READONLY_PROPERTIES:
            raise ZFSError('Readonly property: %s' % key)

        if key in ZFS_PROPERTY_VALIDATORS:
            if not ZFS_PROPERTY_VALIDATORS[key](value):
                raise ZFSError('Unknown value for property %s: %s' % (key, value))

        if key in ZFS_BOOLEAN_PROPERTIES:
            value = value and 'on' or 'off'
            skip_quotes = True

        elif value == None:
            value = 'none'

        if skip_quotes:
            execute(['zfs', 'set', '%s=%s' % (key, value), self.name])
        else:
            execute(['zfs', 'set', '%s="%s"' % (key, value), self.name])
Esempio n. 4
0
    def export_pool(self):
        """Export zpool

        Try to export this zpool

        """
        execute('zpool export %s' % self.name)
Esempio n. 5
0
    def import_pool(self):
        """Import zpool

        Try to import this zpool

        """
        execute('zpool import %s' % self.name)
Esempio n. 6
0
    def set_property(self, key, value):
        """Set property value

        Set value for a ZFS property, validated and formatted

        """
        skip_quotes = "True"
        if key not in ZFS_PROPERTIES:
            raise ZFSError('Invalid property name')

        if key in ZFS_READONLY_PROPERTIES:
            raise ZFSError('Readonly property: %s' % key)

        if key in ZFS_PROPERTY_VALIDATORS:
            if not ZFS_PROPERTY_VALIDATORS[key](value):
                raise ZFSError('Unknown value for property %s: %s' %
                               (key, value))

        if key in ZFS_BOOLEAN_PROPERTIES:
            value = value and 'on' or 'off'
            skip_quotes = True

        elif value == None:
            value = 'none'

        if skip_quotes:
            execute(['zfs', 'set', '%s=%s' % (key, value), self.name])
        else:
            execute(['zfs', 'set', '%s="%s"' % (key, value), self.name])
Esempio n. 7
0
    def remove_snapshot(self, value):
        """Remove existing snapshot

        Remove a existing snapshot matching provided name

        Raises ZFSError if provided snapshot did not exist
        """
        if isinstance(value, basestring):
            name = '%s@%s' % (self.name, value)
            if name not in self.snapshots:
                raise ZFSError('No such snapshot: %s' % name)
        elif isinstance(value, ZFSSnapshot):
            name = value.name

        execute('zfs destroy %s' % name)
Esempio n. 8
0
    def remove_snapshot(self, value):
        """Remove existing snapshot

        Remove a existing snapshot matching provided name

        Raises ZFSError if provided snapshot did not exist
        """
        if isinstance(value, basestring):
            name = '%s@%s' % (self.name, value)
            if name not in self.snapshots:
                raise ZFSError('No such snapshot: %s' % name)
        elif isinstance(value, ZFSSnapshot):
            name = value.name

        execute('zfs destroy %s' % name)
Esempio n. 9
0
    def create_snapshot(self, tag=None):
        """Create named snapshots

        Creates a new snapshot with provided name

        Raises ZFSError if named snapshot exists
        """
        if tag is None:
            tag = datetime.now().strftime(SNAPSHOT_DATE_FORMAT)

        name = '%s@%s' % (self.name, tag)
        if name in self.snapshots:
            raise ZFSError('Snapshot already exists: %s' % name)

        execute('zfs snapshot %s' % name)
        return tag
Esempio n. 10
0
    def filesystems(self):
        """List of filesystems

        Return list of ZFS objects for filesystems in this pool

        """
        return [ZFS(fs) for fs in execute('zfs list -Hr -o name %s' % self.name) if fs!='']
Esempio n. 11
0
    def get_property(self, key):
        """Return property value

        Return value for a ZFS property, validated and formatted

        """
        if key not in ZFS_PROPERTIES:
            raise ZFSError('Invalid property name')

        value = None
        cmd = 'zfs get -H %s %s' % (key, self.name)
        for line in execute(cmd):
            try:
                volume, field, value, flags = line.split(None, 3)
                if volume == self.name and field == key:
                    break
            except ValueError:
                continue

            value = None

        if value in (
                None,
                'none',
        ):
            return None

        if value == '-' and key in ZFS_OPTIONAL_PROPERTIES:
            return None

        if key in ZFS_BOOLEAN_PROPERTIES:
            return value == 'on'

        return value
Esempio n. 12
0
    def create_snapshot(self, tag=None):
        """Create named snapshots

        Creates a new snapshot with provided name

        Raises ZFSError if named snapshot exists
        """
        if tag is None:
            tag = datetime.now().strftime(SNAPSHOT_DATE_FORMAT)

        name = '%s@%s' % (self.name, tag)
        if name in self.snapshots:
            raise ZFSError('Snapshot already exists: %s' % name)

        execute('zfs snapshot %s' % name)
        return tag
Esempio n. 13
0
    def get_property(self, key):
        """Return property value

        Return value for a ZFS property, validated and formatted

        """
        if key not in ZFS_PROPERTIES:
            raise ZFSError('Invalid property name')

        value = None
        cmd = 'zfs get -H %s %s' % (key, self.name)
        for line in execute(cmd):
            try:
                volume, field, value, flags = line.split(None, 3)
                if volume == self.name and field == key:
                    break
            except ValueError:
                continue

            value = None

        if value in (None, 'none',):
            return None

        if value == '-' and key in ZFS_OPTIONAL_PROPERTIES:
            return None

        if key in ZFS_BOOLEAN_PROPERTIES:
            return value == 'on'

        return value
Esempio n. 14
0
def poolnames():
    """Pool name list

    Return list of ZPool names

    """
    names = []
    for line in execute('zpool list -H'):
        names.append(line.split()[0])
    return names
Esempio n. 15
0
def poolnames():
    """Pool name list

    Return list of ZPool names

    """
    names = []
    for line in execute('zpool list -H'):
        names.append(line.split()[0])
    return names
Esempio n. 16
0
    def filesystems(self):
        """List of filesystems

        Return list of ZFS objects for filesystems in this pool

        """
        return [
            ZFS(fs) for fs in execute('zfs list -Hr -o name %s' % self.name)
            if fs != ''
        ]
Esempio n. 17
0
    def set_property(self, property, value):
        """Set property value

        Set value of a zpool entry, validated and formatted

        """
        if property not in ZPOOL_PROPERTIES:
            raise ZFSError('Invalid property name')

        if property in ZPOOL_READONLY_PROPERTIES:
            raise ZFSError('Readonly property: %s' % property)

        if property in ZPOOL_PROPERTY_VALIDATORS:
            if not ZPOOL_PROPERTY_VALIDATORS[property](value):
                raise ZFSError('Unknown value for property %s: %s' % (property, value))

        if property in ZPOOL_BOOLEAN_PROPERTIES:
            value = value and 'on' or 'off'

        elif value == None:
            value = 'none'

        execute(['zpool', 'set', '%s="%s"' % (property, value), self.name])
Esempio n. 18
0
    def set_property(self, property, value):
        """Set property value

        Set value of a zpool entry, validated and formatted

        """
        if property not in ZPOOL_PROPERTIES:
            raise ZFSError('Invalid property name')

        if property in ZPOOL_READONLY_PROPERTIES:
            raise ZFSError('Readonly property: %s' % property)

        if property in ZPOOL_PROPERTY_VALIDATORS:
            if not ZPOOL_PROPERTY_VALIDATORS[property](value):
                raise ZFSError('Unknown value for property %s: %s' %
                               (property, value))

        if property in ZPOOL_BOOLEAN_PROPERTIES:
            value = value and 'on' or 'off'

        elif value == None:
            value = 'none'

        execute(['zpool', 'set', '%s="%s"' % (property, value), self.name])
Esempio n. 19
0
    def snapshots(self):
        """List of snapshots

        Returns list of existing snapshots as ZFSSnapshot objects

        """
        snapshots = []
        for name in execute('zfs list -Hrt snapshot -o name %s' % self.name):
            if name == '':
                continue

            snapshot = ZFSSnapshot(name)
            if snapshot.volume == self.name:
                snapshots.append(snapshot)

        return snapshots
Esempio n. 20
0
    def snapshots(self):
        """List of snapshots

        Returns list of existing snapshots as ZFSSnapshot objects

        """
        snapshots = []
        for name in execute('zfs list -Hrt snapshot -o name %s' % self.name):
            if name == '':
                continue

            snapshot = ZFSSnapshot(name)
            if snapshot.volume == self.name:
                snapshots.append(snapshot)

        return snapshots
Esempio n. 21
0
    def get_property(self, property):
        """Return property value

        Return value of a zpool entry, validated and formatted

        """
        if property not in ZPOOL_PROPERTIES:
            raise ZFSError('Invalid property name')

        value = ' '.join(execute('zpool list -H -o %s %s' % (property, self.name)))

        if value == '-' and property in ZPOOL_OPTIONAL_PROPERTIES:
            return None

        if property in ZPOOL_BOOLEAN_PROPERTIES:
            return value == 'on'

        if property == 'health' and value not in ZPOOL_HEALTH_STATES:
            raise ZFSError('Unknown health state for pool %s: %s' % (self.name, value))

        return value
Esempio n. 22
0
    def get_property(self, property):
        """Return property value

        Return value of a zpool entry, validated and formatted

        """
        if property not in ZPOOL_PROPERTIES:
            raise ZFSError('Invalid property name')

        value = ' '.join(
            execute('zpool list -H -o %s %s' % (property, self.name)))

        if value == '-' and property in ZPOOL_OPTIONAL_PROPERTIES:
            return None

        if property in ZPOOL_BOOLEAN_PROPERTIES:
            return value == 'on'

        if property == 'health' and value not in ZPOOL_HEALTH_STATES:
            raise ZFSError('Unknown health state for pool %s: %s' %
                           (self.name, value))

        return value
Esempio n. 23
0
 def rename(self, name):
     if name.count('@') == 0:
         name = '%s@%s' % (self.volume, name)
     execute('zfs rename %s %s' % (self.name, name))
Esempio n. 24
0
 def rename(self,name):
     if name.count('@')==0:
         name = '%s@%s' % (self.volume, name)
     execute('zfs rename %s %s' % (self.name, name))