def server_resize(): test_id = request.args.get('test_id') if not request.json: abort(401) flavor_name = request.json['flavor'] server_name = request.json['server'] sess = _create_session(int(test_id)) nova = nova_cli.Client('2.1', session=sess) flavor = nova.flavors.find(name=flavor_name) servers = nova.servers.list(search_opts={"name": server_name}) if flavor and servers and len(servers): server = servers[0] if server.flavor['id'] == flavor.id: abort(401) else: server.resize(flavor=flavor.id) db = Session() server_dao = db.query(OSServer).filter( OSServer.uid == server.id).first() flavor_dao = db.query(OSFlavor).filter( OSFlavor.uid == flavor.id).first() _create_test_log( db, test_id, 'Server %s RESIZE %s' % (repr(server_dao), repr(flavor_dao))) server_dao.flavor_alt = server_dao.flavor server_dao.flavor = flavor_dao db.add(server_dao) db.commit() return jsonify(success=True), 201 else: abort(404)
def server_create(): if not request.json: abort(400) test_id = request.args.get('test_id') db = Session() sess = _create_session(int(test_id)) nova = nova_cli.Client(session=sess, version='2.1') glance = glance_cli.Client('2', session=sess) neutron = neutron_cli.Client(session=sess) flavor = nova.flavors.find(name=request.json['flavor']) image = list( glance.images.list(filters={"name": request.json['image']}))[0] network = neutron.find_resource('network', request.json['network']) server = nova.servers.create(name=request.json['name'], flavor=flavor.id, image=image.id, network=network['id']) if server: server_dao = _server_dao_create( db, server, test_id, image=_image_dao_create(db, image, test_id, True), flavor=_flavor_dao_create(db, flavor, test_id, True), network=_network_dao_create(db, network, test_id, True)) _create_test_log(db, test_id, 'Server CREATE %s' % repr(server_dao)) db.commit() return jsonify(_os_server_to_json(server)), 201 else: abort(401)
def server_confirm_or_reject_resize(): test_id = request.args.get('test_id') if not request.json: abort(401) confirm = request.json['confirm'] server_name = request.json['server'] sess = _create_session(int(test_id)) nova = nova_cli.Client('2.1', session=sess) servers = nova.servers.list(search_opts={"name": server_name}) if servers and len(servers): server = servers[0] db = Session() server_dao = db.query(OSServer).filter( OSServer.uid == server.id).first() if confirm: server.confirm_resize() _create_test_log(db, test_id, 'Server %s CONFIRM RESIZE' % repr(server_dao)) server_dao.flavor_alt = None else: server.revert_resize() _create_test_log(db, test_id, 'Server %s REVERT RESIZE' % repr(server_dao)) server_dao.flavor = server.flavor_alt server_dao.flavor_alt = None db.commit() return jsonify(success=True), 201 else: abort(404)
def server_rebuild(): test_id = request.args.get('test_id') if not request.json: abort(401) server_name = request.json['server'] image_name = request.json['image'] sess = _create_session(int(test_id)) nova = nova_cli.Client('2.1', session=sess) servers = nova.servers.list(search_opts={"name": server_name}) glance = glance_cli.Client('2', session=sess) images = list(glance.images.list(filters={"name": image_name})) if servers and len(servers) and images and len(images): server = servers[0] image = images[0] db = Session() image_dao = _image_dao_create(db, image, test_id, True) server_dao = db.query(OSServer).filter( OSServer.uid == server.id).first() if not server_dao: abort(404) server_dao.image = image_dao server.rebuild(image) db.add(server_dao) db.commit() return jsonify(success=True) else: abort(401)
def server_list(): test_id = request.args.get('test_id') sess = _create_session(int(test_id)) nova = nova_cli.Client(session=sess, version='2.1') servers = nova.servers.list() result = list() for server in servers: result.append(_os_server_to_json(server)) return jsonify(result), 201
def image_list(): test_id = request.args.get('test_id') sess = _create_session(int(test_id)) glance = glance_cli.Client('2', session=sess) images = glance.images.list() result = list() for image in images: result.append(_os_image_to_json(image)) return jsonify(result), 201
def flavor_list(): test_id = request.args.get('key') sess = _create_session(int(test_id)) nova = nova_cli.Client(session=sess, version='2.1') flavors = nova.flavors.list() result = list() for flavor in flavors: result.append(_os_flavor_to_json(flavor)) return jsonify(result), 201
def network_list(): test_id = request.args.get('test_id') sess = _create_session(int(test_id)) neutron = neutron_cli.Client(session=sess) networks = neutron.list_networks() result = list() for network in networks['networks']: result.append(_os_network_to_json(network)) return jsonify(result), 201
def server_details(): test_id = request.args.get('test_id') server_name = request.args.get('server_name') sess = _create_session(int(test_id)) nova = nova_cli.Client(session=sess, version='2.1') servers = nova.servers.list(search_opts={"name": server_name}) if servers and len(servers): return jsonify(_os_server_to_json(servers[0])), 201 else: abort(404)
def tests(test_id, server_name): sess = _create_session(test_id) nova = nova_cli.Client('2.1', session=sess) servers = nova.servers.list(search_opts={"name": server_name}) server = servers[0] nova.servers.live_migrate(server=server, host=None, block_migration=False, disk_over_commit=False) return jsonify(success=True)
def image_delete(): test_id = request.args.get('test_id') image_name = request.args.get('image_name') sess = _create_session(int(test_id)) glance = glance_cli.Client('2', session=sess) db = Session() image_dao = db.query(OSImage).filter(OSImage.name == image_name).first() glance.images.delete(image_dao.uid) _create_test_log(db, test_id, 'Image DELETE %s' % repr(image_dao)) db.delete(image_dao) db.commit() return jsonify(success=True)
def volume_details(test_id): name = request.args.get('volume_name') sess = _create_session(test_id) cinder = cinder_cli.Client(CINDER_VERSION, session=sess) volumes = cinder.volumes.list(search_opts={"name": name}) if volumes and len(volumes): volume = volumes[0] print(dir(volume)) print(volume.attachments) return jsonify(_volume_to_json(volume)) else: abort(404)
def host_list(test_id): sess = _create_session(test_id) nova = nova_cli.Client('2.1', session=sess) hosts = nova.hypervisors.list() if hosts and len(hosts): host = hosts[0] return jsonify({ "text": str(dir(host)), "hostname": host.hypervisor_hostname, "ip": host.host_ip, "id": host.id }) return jsonify()
def volume_detach(test_id): if not request.json: abort(401) name = request.json['name'] sess = _create_session(test_id) cinder = cinder_cli.Client(CINDER_VERSION, session=sess) volumes = cinder.volumes.list(search_opts={"name": name}) if volumes and len(volumes): volume = volumes[0] cinder.volumes.detach(volume) return jsonify(success=True) else: abort(404)
def flavor_details(): test_id = request.args.get('test_id') flavor_name = request.args.get('flavor_name') flavor_id = request.args.get('flavor_id') search_opts = {} if flavor_name: search_opts['name'] = flavor_name if flavor_id: search_opts['id'] = flavor_id sess = _create_session(int(test_id)) nova = nova_cli.Client(session=sess, version='2.1') flavor = nova.flavors.find(**search_opts) if flavor: return jsonify(_os_flavor_to_json(flavor)), 201 abort(404)
def flavor_delete(): test_id = request.args.get('test_id') flavor_name = request.args.get('flavor_name') sess = _create_session(int(test_id)) nova = nova_cli.Client(session=sess, version='2.1') flavor = nova.flavors.find(name=flavor_name) nova.flavors.delete(flavor) if flavor: db = Session() flavor_dao = db.query(OSFlavor).filter( OSFlavor.name == flavor.name).first() _create_test_log(db, test_id, 'Flavor DELETE %s' % repr(flavor_dao)) db.delete(flavor_dao) db.commit() return jsonify(success=True)
def volume_delete(test_id): name = request.args.get('volume_name') sess = _create_session(test_id) cinder = cinder_cli.Client(CINDER_VERSION, session=sess) volumes = cinder.volumes.list(search_opts={"name": name}) if volumes and len(volumes): volume = volumes[0] id = volume.id cinder.volumes.delete(volume) transaction = Session() volume_dao = transaction.query(OSVolume).filter(OSVolume.uid == id).first() _create_test_log(transaction, test_id, 'Volume %s DELETE' % repr(volume_dao)) transaction.delete(volume_dao) transaction.commit() return jsonify(success=True) else: abort(404)
def volume_attach(test_id): if not request.json: abort(401) name = request.json['name'] server_name = request.json['server'] mountpoint = request.json['mountpoint'] sess = _create_session(test_id) cinder = cinder_cli.Client(CINDER_VERSION, session=sess) volumes = cinder.volumes.list(search_opts={"name": name}) nova = nova_cli.Client(NOVA_VERSION, session=sess) servers = nova.servers.list(search_opts={"name": server_name}) if volumes and len(volumes) and servers and len(servers): server = servers[0] volume = volumes[0] cinder.volumes.attach(volume, server.id, mountpoint=mountpoint) return jsonify(success=True) else: abort(404)
def server_migrate(): test_id = request.args.get('test_id') if not request.json: abort(401) server_name = request.json['server'] sess = _create_session(test_id) nova = nova_cli.Client('2.1', session=sess) servers = nova.servers.list(search_opts={"name": server_name}) if servers and len(servers): server = servers[0] nova.servers.migrate(server) db = Session() server_dao = db.query(OSServer).filter( OSServer.uid == server.id).first() _create_test_log(db, test_id, 'Server %s MIGRATE' % repr(server_dao)) db.commit() return jsonify(success=True) else: abort(401)
def flavor_create(): if not request.json: abort(400) test_id = request.args.get('key') sess = _create_session(int(test_id)) nova = nova_cli.Client(session=sess, version='2.1') flavor = nova.flavors.create(name=request.json['name'], ram=request.json['ram'], vcpus=request.json['vcpus'], disk=request.json['disk']) if flavor: db = Session() flavor_dao = _flavor_dao_create(flavor, test_id, db) _create_test_log(db, test_id, 'Flavor CREATE %s' % repr(flavor_dao)) db.commit() return jsonify(_os_flavor_to_json(flavor)), 201 else: abort(401)
def image_details(): test_id = request.args.get('test_id') image_name = request.args.get('image_name') image_id = request.args.get('image_id') search_opts = {} if image_name: search_opts['name'] = image_name if image_id: search_opts['id'] = image_id sess = _create_session(int(test_id)) glance = glance_cli.Client('2', session=sess) images = glance.images.list(filters=search_opts) if images: result = list() for image in images: result.append(_os_image_to_json(image)) if len(result): return jsonify(result[0]), 201 abort(404)
def network_details(): test_id = request.args.get('test_id') network_name = request.args.get('network_name') network_id = request.args.get('network_id') search_opts = {} if network_name: search_opts['name'] = network_name if network_id: search_opts['id'] = network_id sess = _create_session(int(test_id)) neutron = neutron_cli.Client(session=sess) networks = neutron.list_networks(**search_opts) if networks and networks['networks']: result = list() for network in networks['networks']: result.append(_os_network_to_json(network)) if len(result): return jsonify(result[0]), 201 abort(404)
def volume_extend(test_id): if not request.json: abort(401) name = request.json['name'] size = request.json['size'] sess = _create_session(test_id) cinder = cinder_cli.Client(CINDER_VERSION, session=sess) volumes = cinder.volumes.list(search_opts={"name": name}) if volumes and len(volumes): volume = volumes[0] cinder.volumes.extend(volume, size) transaction = Session() volume_dao = transaction.query(OSVolume).filter(OSVolume.uid == volume.id).first() volume_dao.size = size transaction.add(volume_dao) transaction.commit() return jsonify(_volume_to_json(volume_dao)), 201 else: abort(404)
def server_delete(): test_id = request.args.get('test_id') server_name = request.args.get('server_name') sess = _create_session(int(test_id)) nova = nova_cli.Client('2.1', session=sess) servers = nova.servers.list(search_opts={"name": server_name}) if servers and len(servers): server = servers[0] nova.servers.delete(server.id) db = Session() server_dao = db.query(OSServer).filter( OSServer.name == server_name).first() if server_dao: db.delete(server_dao) _create_test_log(db, test_id, 'Server DELETE %s' % repr(server_dao)) db.commit() return jsonify(success=True) else: return abort(404)
def server_shelve_offload(): test_id = request.args.get('test_id') if not request.json: abort(401) server_name = request.json["server"] sess = _create_session(int(test_id)) nova = nova_cli.Client('2.1', session=sess) servers = nova.servers.list(search_opts={"name": server_name}) if servers and len(servers): server = servers[0] server.shelve_offload() db = Session() server_dao = db.query(OSServer).filter( OSServer.uid == server.id).first() _create_test_log(db, test_id, 'Server %s SHELVE OFFLOAD' % repr(server_dao)) db.commit() return jsonify(success=True) else: abort(404)
def volume_create(test_id): if not request.json: abort(401) name = request.json['name'] size = request.json['size'] availability_zone = request.json['zone'] sess = _create_session(test_id) cinder = cinder_cli.Client(CINDER_VERSION, session=sess) result = cinder.volumes.create(name=name, size=size, availability_zone=availability_zone) if result: volumes = cinder.volumes.list(search_opts={"id": result.id}) if volumes and len(volumes): volume = volumes[0] transaction = Session() _volume_dao_create(transaction, test_id, volume) transaction.commit() return jsonify(_volume_to_json(volume)) else: abort(501) else: abort(501)
def image_create(): if not request.json: abort(400) test_id = request.args.get('test_id') sess = _create_session(int(test_id)) glance = glance_cli.Client('2', session=sess) image = glance.images.create( name=request.json['name'], disk_format=request.json['disk_format'], container_format=request.json['container_format']) if image: data = request.json["data"] decoded_data = base64.b64decode(data) with tempfile.NamedTemporaryFile() as temp: temp.write(decoded_data) glance.images.upload(image.id, temp) db = Session() image_dao = _image_dao_create(db, image, test_id) _create_test_log(db, test_id, 'Image CREATE %s' % repr(image_dao)) db.commit() return jsonify(_os_image_to_json(image)), 201 else: abort(401)
def volume_list(test_id): sess = _create_session(test_id) cinder = cinder_cli.Client(CINDER_VERSION, session=sess) volumes = cinder.volumes.list() return jsonify(list(map(_volume_to_json, volumes)))