def import_pool(self): """Import zpool Try to import this zpool """ execute('zpool import %s' % self.name)
def export_pool(self): """Export zpool Try to export this zpool """ execute('zpool export %s' % self.name)
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])
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])
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)
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
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!='']
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
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
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
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 != '' ]
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])
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
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
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
def rename(self, name): if name.count('@') == 0: name = '%s@%s' % (self.volume, name) execute('zfs rename %s %s' % (self.name, name))
def rename(self,name): if name.count('@')==0: name = '%s@%s' % (self.volume, name) execute('zfs rename %s %s' % (self.name, name))