From 8417bb4255edbc6699947650894ee80acadced9f Mon Sep 17 00:00:00 2001 From: lulzette Date: Wed, 24 Mar 2021 20:27:57 +0000 Subject: [PATCH] changes! --- index.py | 52 ------------------------ main.py | 114 ++++++++++++++++++++-------------------------------- snap-pg.py | 80 ++++++++++++++++++++++++++++++++++++ snapshot.py | 2 +- 4 files changed, 124 insertions(+), 124 deletions(-) delete mode 100644 index.py create mode 100644 snap-pg.py diff --git a/index.py b/index.py deleted file mode 100644 index 5f62bd1..0000000 --- a/index.py +++ /dev/null @@ -1,52 +0,0 @@ -#!/usr/bin/python3 - -from bottle import run, route, request, template,get ,post -import libvirt -session = libvirt.open('qemu:///system') - -def listVDS(): - VdsListVar = list() - for i in session.listDefinedDomains(): - VdsListVar.append(i) - return VdsListVar - -@route('/') -def index(): - # return 'Привет, мир!' - return str(listVDS()) - - -@get('/action') # or @route('/login') -def login(): - return ''' -
- VDS Name:
- Action (start/stop):
- Start
- Stop
- destroy
- -
- ''' - - -@post('/action') # or @route('/login', method='POST') -def do_action(): - act = request.forms.get('act') - dom = session.lookupByName(request.forms.get('username')) - - - if (act == "start"): - dom.create() - return "

Started "+request.forms.get('username')+" succesfully!

back" - elif (act == "stop"): - dom.shutdown() - return "

Stopped "+request.forms.get('username')+"

back" - elif (act == "destroy"): - dom.destroy() - return "

Destroyed "+request.forms.get('username')+"

back" - else: - return "Error" - -if __name__ == '__main__': - run(host='0.0.0.0', port=5000, debug=True) \ No newline at end of file diff --git a/main.py b/main.py index a23400a..5f62bd1 100644 --- a/main.py +++ b/main.py @@ -1,80 +1,52 @@ #!/usr/bin/python3 -import time -import argparse +from bottle import run, route, request, template,get ,post import libvirt -from lxml import etree -from lxml.builder import E +session = libvirt.open('qemu:///system') - -def parse_args(): - parser = argparse.ArgumentParser(description='Create snapshot for libvirt machine') - parser.add_argument('--name', required=True, help='Machine name') - parser.add_argument('--device', required=True, help='Device path (like vda)') - return parser.parse_args() - -def create_snapshot_node(disk_node): - device = disk_node.xpath('/domain/devices/disk/target/@dev')[0] - disk_path = disk_node.xpath('/domain/devices/disk/source/@file')[0] - - now = int(time.time()) - snap_path = disk_path.rsplit('.', 1)[0] - snap_path = f'{snap_path}-{now}.snap' - snap_name = snap_path.rsplit('/', 1)[1] - - snap = E.domainsnapshot() - snap.append(E.name(snap_name)) - - disks = E.disks() - disk = E.disk(name=device) - disk.append(E.source(file=snap_path)) - disks.append(disk) - - snap.append(disks) - return snap - -def get_disk_by_name(vm, name): - raw_xml = vm.XMLDesc(0) - xml = etree.XML(raw_xml) - disks = xml.xpath(f'/domain/devices/disk/target[@dev="{name}"]/..') - return disks[0] - -def main(): - # args = parse_args() - session = libvirt.open('qemu:///system') - tgtDom = 1 - from time import sleep +def listVDS(): + VdsListVar = list() for i in session.listDefinedDomains(): - print(i) - dom = session.lookupByName(i) - - print("Is active? "+ str(dom.isActive())) + VdsListVar.append(i) + return VdsListVar + +@route('/') +def index(): + # return 'Привет, мир!' + return str(listVDS()) + + +@get('/action') # or @route('/login') +def login(): + return ''' +
+ VDS Name:
+ Action (start/stop):
+ Start
+ Stop
+ destroy
+ +
+ ''' + + +@post('/action') # or @route('/login', method='POST') +def do_action(): + act = request.forms.get('act') + dom = session.lookupByName(request.forms.get('username')) + + + if (act == "start"): dom.create() - sleep(15) - - print(session.listDomainsID()) - print("Active? "+str(dom.isActive())) - sleep(15) + return "

Started "+request.forms.get('username')+" succesfully!

back" + elif (act == "stop"): dom.shutdown() - - sleep(15) - print("Active? "+str(dom.isActive())) - - # print(session.getHostname()) - - - - # try: - # vm = session.lookupByName(args.name) - # except libvirt.libvirtError: - # print(f'Machine with name {args.name} not found!') - # session.close() - # return - # disk = get_disk_by_name(vm, args.device) - # snapshot = create_snapshot_node(disk) - # vm.snapshotCreateXML(etree.tostring(snapshot, encoding='unicode'), - # libvirt.VIR_DOMAIN_SNAPSHOT_CREATE_DISK_ONLY | libvirt.VIR_DOMAIN_SNAPSHOT_CREATE_ATOMIC) - session.close() + return "

Stopped "+request.forms.get('username')+"

back" + elif (act == "destroy"): + dom.destroy() + return "

Destroyed "+request.forms.get('username')+"

back" + else: + return "Error" if __name__ == '__main__': - main() + run(host='0.0.0.0', port=5000, debug=True) \ No newline at end of file diff --git a/snap-pg.py b/snap-pg.py new file mode 100644 index 0000000..a23400a --- /dev/null +++ b/snap-pg.py @@ -0,0 +1,80 @@ +#!/usr/bin/python3 + +import time +import argparse +import libvirt +from lxml import etree +from lxml.builder import E + + +def parse_args(): + parser = argparse.ArgumentParser(description='Create snapshot for libvirt machine') + parser.add_argument('--name', required=True, help='Machine name') + parser.add_argument('--device', required=True, help='Device path (like vda)') + return parser.parse_args() + +def create_snapshot_node(disk_node): + device = disk_node.xpath('/domain/devices/disk/target/@dev')[0] + disk_path = disk_node.xpath('/domain/devices/disk/source/@file')[0] + + now = int(time.time()) + snap_path = disk_path.rsplit('.', 1)[0] + snap_path = f'{snap_path}-{now}.snap' + snap_name = snap_path.rsplit('/', 1)[1] + + snap = E.domainsnapshot() + snap.append(E.name(snap_name)) + + disks = E.disks() + disk = E.disk(name=device) + disk.append(E.source(file=snap_path)) + disks.append(disk) + + snap.append(disks) + return snap + +def get_disk_by_name(vm, name): + raw_xml = vm.XMLDesc(0) + xml = etree.XML(raw_xml) + disks = xml.xpath(f'/domain/devices/disk/target[@dev="{name}"]/..') + return disks[0] + +def main(): + # args = parse_args() + session = libvirt.open('qemu:///system') + tgtDom = 1 + from time import sleep + for i in session.listDefinedDomains(): + print(i) + dom = session.lookupByName(i) + + print("Is active? "+ str(dom.isActive())) + dom.create() + sleep(15) + + print(session.listDomainsID()) + print("Active? "+str(dom.isActive())) + sleep(15) + dom.shutdown() + + sleep(15) + print("Active? "+str(dom.isActive())) + + # print(session.getHostname()) + + + + # try: + # vm = session.lookupByName(args.name) + # except libvirt.libvirtError: + # print(f'Machine with name {args.name} not found!') + # session.close() + # return + # disk = get_disk_by_name(vm, args.device) + # snapshot = create_snapshot_node(disk) + # vm.snapshotCreateXML(etree.tostring(snapshot, encoding='unicode'), + # libvirt.VIR_DOMAIN_SNAPSHOT_CREATE_DISK_ONLY | libvirt.VIR_DOMAIN_SNAPSHOT_CREATE_ATOMIC) + session.close() + +if __name__ == '__main__': + main() diff --git a/snapshot.py b/snapshot.py index 506eebc..41f8711 100644 --- a/snapshot.py +++ b/snapshot.py @@ -1,5 +1,5 @@ #!/usr/bin/python3 - +# Script by Александр Дрожевский from Rebrain import time import argparse import libvirt