partitionen können zur db mit Link auf Drive hinzugefügt werden

This commit is contained in:
Daniel 2019-05-16 21:58:18 +02:00
parent 5b551f6155
commit 2efebbbf6e
9 changed files with 42 additions and 9 deletions

View file

@ -87,7 +87,7 @@ def part_for_disk(device):
parts = [] parts = []
partdict = list() partdict = list()
keys = ['name', 'label', 'fs', 'size', 'uuid', 'mount'] keys = ['name', 'label', 'fs', 'size', 'uuid', 'mount']
device = "/dev/" + device
lsblk = subprocess.Popen( lsblk = subprocess.Popen(
["lsblk " + device + " -l -b -o NAME,LABEL,FSTYPE,SIZE,UUID,MOUNTPOINT"], ["lsblk " + device + " -l -b -o NAME,LABEL,FSTYPE,SIZE,UUID,MOUNTPOINT"],
stdout=subprocess.PIPE, stdout=subprocess.PIPE,
@ -124,7 +124,9 @@ def part_for_disk(device):
for start, end in zip(element_length, element_length[1:]): for start, end in zip(element_length, element_length[1:]):
values.append(part[start:(end - 1)].strip()) values.append(part[start:(end - 1)].strip())
partdict.append(dict(zip(keys, values))) partdict.append(dict(zip(keys, values)))
print(partdict)
return partdict
def getPartitions(device): def getPartitions(device):
partDict = [] # ist eine Liste, enthält für jede part ein dict partDict = [] # ist eine Liste, enthält für jede part ein dict

View file

@ -0,0 +1,20 @@
from dirkules import db
from dirkules.models import Drive, Partitions
from dirkules.hardware import drive as hardware_drives
from sqlalchemy.sql.expression import exists
def get_partitions(drive_id, force=False):
drive = db.session.query(Drive).get(drive_id)
partdict = hardware_drives.part_for_disk(drive.name)
for part in partdict:
part_obj = Partitions(drive.id, part.get("name"), part.get("label"), part.get("fs"), int(part.get("size")),
part.get("uuid"), part.get("mount"), drive)
existence = db.session.query(exists().where(Partitions.uuid == part_obj.uuid)).scalar()
if existence:
print(part.get("name") + " in db")
else:
print(part.get("name") + " NICHT in db")
db.session.add(part_obj)
db.session.commit()
print(drive.partitions)

View file

@ -17,7 +17,7 @@ class Drive(db.Model):
hotplug = db.Column(db.Boolean) hotplug = db.Column(db.Boolean)
state = db.Column(db.String) state = db.Column(db.String)
smart = db.Column(db.Boolean) smart = db.Column(db.Boolean)
partitions = db.relationship('Partitions', order_by="Partitions.id", backref="drives", lazy="select") partitions = db.relationship('Partitions', order_by="Partitions.id", backref="drive", lazy="select")
def __init__(self, name, model, serial, size, rota, rm, hotplug, state, smart): def __init__(self, name, model, serial, size, rota, rm, hotplug, state, smart):
self.name = name self.name = name
@ -37,11 +37,21 @@ class Partitions(db.Model):
drive_id = db.Column(db.Integer, db.ForeignKey('drives.id'), nullable=False) drive_id = db.Column(db.Integer, db.ForeignKey('drives.id'), nullable=False)
name = db.Column(db.String) name = db.Column(db.String)
fs = db.Column(db.String) fs = db.Column(db.String)
size = db.Column(db.String) size = db.Column(db.Integer)
uuid = db.Column(db.String) uuid = db.Column(db.String)
mountpoint = db.Column(db.String) mountpoint = db.Column(db.String)
label = db.Column(db.String) label = db.Column(db.String)
def __init__(self, drive_id, name, label, fs, size, uuid, mpoint, drive):
self.drive_id = drive_id
self.name = name
self.label = label
self.fs = fs
self.size = size
self.uuid = uuid
self.mountpoint = mpoint
self.drive = drive
class Time(db.Model): class Time(db.Model):
__tablename__ = 'time' __tablename__ = 'time'

View file

@ -1,6 +1,6 @@
from dirkules import scheduler from dirkules import scheduler
import datetime import datetime
import dirkules.driveManagement.driveController as drico import dirkules.hardware.drive as drico
@scheduler.task('interval', id='refresh_disks', seconds=3600, next_run_time=datetime.datetime.now()) @scheduler.task('interval', id='refresh_disks', seconds=3600, next_run_time=datetime.datetime.now())
def refresh_disks(): def refresh_disks():

View file

@ -1,12 +1,13 @@
from flask import Flask, render_template, redirect, request, url_for, flash from flask import Flask, render_template, redirect, request, url_for, flash
from dirkules import app, db from dirkules import app, db
import dirkules.driveManagement.driveController as drico import dirkules.hardware.drive as drico
import dirkules.serviceManagement.serviceManager as servMan import dirkules.serviceManagement.serviceManager as servMan
from dirkules.models import Drive, Cleaning, SambaShare from dirkules.models import Drive, Cleaning, SambaShare
import dirkules.viewManager.viewManager as viewManager import dirkules.manager.viewManager as viewManager
from dirkules.validation.validators import CleaningForm, samba_cleaning_form, SambaAddForm from dirkules.validation.validators import CleaningForm, samba_cleaning_form, SambaAddForm
from sqlalchemy import asc, collate from sqlalchemy import asc, collate
from dirkules.config import staticDir from dirkules.config import staticDir
from dirkules.manager.driveManager import get_partitions
@app.route('/', methods=['GET']) @app.route('/', methods=['GET'])
@ -72,7 +73,7 @@ def add_cleaning():
@app.route('/samba', methods=['GET']) @app.route('/samba', methods=['GET'])
def samba(): def samba():
drico.part_for_disk("/dev/sda") get_partitions(1)
shares = [] shares = []
for share in SambaShare.query.order_by(asc(collate(SambaShare.name, 'NOCASE'))).all(): for share in SambaShare.query.order_by(asc(collate(SambaShare.name, 'NOCASE'))).all():
shares.append(viewManager.db_object_as_dict(share)) shares.append(viewManager.db_object_as_dict(share))