예제 #1
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)
예제 #2
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)
예제 #3
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)
예제 #4
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)
예제 #5
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)
예제 #6
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)
예제 #7
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)
예제 #8
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)
예제 #9
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)
예제 #10
0
def _network_dao_create(sess, network, test_id, or_update=False):
    network_dao = OSNetwork()
    if or_update:
        network_result = sess.query(OSNetwork).filter(
            OSNetwork.name == network['name']).first()
        if network_result:
            network_dao = network_result

    network_dao.uid = network['id']
    network_dao.name = network['name']
    network_dao.project_uid = network['project_id']
    network_dao.test_id = int(test_id)

    sess.add(network_dao)

    if not or_update:
        _create_test_log(sess, test_id,
                         'Network CREATE %s' % repr(network_dao))

    return network_dao
예제 #11
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)
예제 #12
0
def _volume_dao_create(transaction, test_id, volume, or_update=False):
    volume_dao = OSVolume()
    if or_update:
        volume_result = transaction.query(OSVolume).filter(OSVolume.name == volume.name).first()
        if volume_result:
            volume_dao = volume_result

    volume_dao.test_id = test_id
    volume_dao.uid = volume.id
    volume_dao.name = volume.name
    volume_dao.size = volume.size
    volume_dao.availability_zone = volume.availability_zone
    volume_dao.status = volume.status

    transaction.add(volume_dao)

    if not or_update:
        _create_test_log(transaction, test_id, 'Volume %s CREATE' % repr(volume_dao))

    return volume_dao
예제 #13
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)