Exemple #1
0
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)
Exemple #2
0
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)
Exemple #3
0
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)
Exemple #4
0
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)
Exemple #5
0
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
Exemple #6
0
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
Exemple #7
0
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
Exemple #8
0
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
Exemple #9
0
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)
Exemple #10
0
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)
Exemple #11
0
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)
Exemple #12
0
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)
Exemple #13
0
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()
Exemple #14
0
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)
Exemple #15
0
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)
Exemple #16
0
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)
Exemple #17
0
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)
Exemple #18
0
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)
Exemple #19
0
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)
Exemple #20
0
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)
Exemple #21
0
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)
Exemple #22
0
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)
Exemple #23
0
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)
Exemple #24
0
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)
Exemple #25
0
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)
Exemple #26
0
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)
Exemple #27
0
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)
Exemple #28
0
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)))