Dataset.from_local_pool --> Pool.datasets

This commit is contained in:
timeshifter
2021-11-25 16:15:38 +01:00
parent 762e212892
commit de795cdba3
+24 -19
View File
@@ -20,11 +20,12 @@ Erstes Backup muss für alle notwendigen Datasets durchgeführt werden mit
def main(): def main():
verify_running_as_root() verify_running_as_root()
datasets = Dataset.from_local_pool() local_pool = Pool(config.local_pool_to_backup)
backup_pool = Pool.from_dict(config.backup_pool) datasets_to_backup = local_pool.get_datasets_not_in_list(config.do_not_backup)
backup_pool = Pool.find_from_dict(config.backup_pool)
import_pool(backup_pool) import_pool(backup_pool)
try: try:
send_datasets_to_backup_pool(backup_pool, datasets) send_datasets_to_backup_pool(backup_pool, datasets_to_backup)
finally: finally:
export_pool(backup_pool) export_pool(backup_pool)
@@ -34,9 +35,22 @@ class Pool:
self.name = name self.name = name
@cache @cache
@property
def datasets(self) -> list[Dataset]:
datasets_str = get_output_of_command(
[config.ZFS, "list", "-H", "-d", "1", "-o", "name", self.name]
)
# we omit the first return value, which is the pool, not the dataset
datasets_list = datasets_str.split("\n")[1:]
to_backup = [Dataset(d) for d in datasets_list]
return to_backup
@cache
def get_datasets_not_in_list(self, do_not_backup) -> list[Dataset]:
return [d for d in self.datasets if d.name not in do_not_backup]
@classmethod @classmethod
def from_dict(cls, backup_pools: dict[str, str]) -> Pool: def find_from_dict(cls, backup_pools: dict[str, str]) -> Pool:
print("Suche nach externer Festplatte für Backups") print("Suche nach externer Festplatte für Backups")
present_uuids = get_output_of_command(["ls", "/dev/disk/by-uuid"]) present_uuids = get_output_of_command(["ls", "/dev/disk/by-uuid"])
for pool, uuid in backup_pools.items(): for pool, uuid in backup_pools.items():
@@ -54,21 +68,6 @@ class Dataset:
def __repr__(self): def __repr__(self):
return self.name return self.name
@classmethod
def from_local_pool(cls) -> list[Dataset]:
datasets_str = get_output_of_command(
[config.ZFS, "list", "-H", "-d", "1", "-o", "name", config.local_pool_to_backup]
)
# we omit the first return value, which is the pool, not the dataset
datasets_list = datasets_str.split("\n")[1:]
to_backup = [Dataset(d) for d in datasets_list if d not in config.do_not_backup]
print(
"Folgende Datasets und alle darunter befindlichen Kinder werden gesichert:"
)
for item in to_backup:
print(" " + str(item))
return to_backup
def get_snapshots(pool): def get_snapshots(pool):
return get_output_of_command( return get_output_of_command(
@@ -256,5 +255,11 @@ def verify_running_as_root():
exit(1) exit(1)
def show_actions_to_execute(datasets: list[Dataset]):
print("Folgende Datasets und alle darunter befindlichen Kinder werden gesichert:")
for ds in datasets:
print(" " + str(ds))
if __name__ == "__main__": if __name__ == "__main__":
main() main()