wrap sqlalchemy exceptions in a generic error
This commit is contained in:
parent
ffe08ea0c5
commit
9bdcc71733
@ -61,7 +61,6 @@ import sys
|
|||||||
import time
|
import time
|
||||||
|
|
||||||
import IPy
|
import IPy
|
||||||
from sqlalchemy import exc
|
|
||||||
|
|
||||||
# If ../nova/__init__.py exists, add ../ to Python search path, so that
|
# If ../nova/__init__.py exists, add ../ to Python search path, so that
|
||||||
# it will override what happens to be installed in /usr/(local/)lib/python...
|
# it will override what happens to be installed in /usr/(local/)lib/python...
|
||||||
@ -280,7 +279,7 @@ class UserCommands(object):
|
|||||||
arguments: name [access] [secret]"""
|
arguments: name [access] [secret]"""
|
||||||
try:
|
try:
|
||||||
user = self.manager.create_user(name, access, secret, True)
|
user = self.manager.create_user(name, access, secret, True)
|
||||||
except exc.OperationalError, e:
|
except exception.DBError, e:
|
||||||
_db_error(e)
|
_db_error(e)
|
||||||
self._print_export(user)
|
self._print_export(user)
|
||||||
|
|
||||||
@ -289,7 +288,7 @@ class UserCommands(object):
|
|||||||
arguments: name [access] [secret]"""
|
arguments: name [access] [secret]"""
|
||||||
try:
|
try:
|
||||||
user = self.manager.create_user(name, access, secret, False)
|
user = self.manager.create_user(name, access, secret, False)
|
||||||
except exc.OperationalError, e:
|
except exception.DBError, e:
|
||||||
_db_error(e)
|
_db_error(e)
|
||||||
self._print_export(user)
|
self._print_export(user)
|
||||||
|
|
||||||
|
131
contrib/nova.sh
131
contrib/nova.sh
@ -1,15 +1,14 @@
|
|||||||
#!/usr/bin/env bash
|
#!/usr/bin/env bash
|
||||||
DIR=`pwd`
|
DIR=`pwd`
|
||||||
CMD=$1
|
CMD=$1
|
||||||
SOURCE_BRANCH=lp:nova
|
if [ "$CMD" = "branch" ]; then
|
||||||
if [ -n "$2" ]; then
|
SOURCE_BRANCH=${2:-lp:nova}
|
||||||
SOURCE_BRANCH=$2
|
DIRNAME=${3:-nova}
|
||||||
|
else
|
||||||
|
DIRNAME=${2:-nova}
|
||||||
fi
|
fi
|
||||||
DIRNAME=nova
|
|
||||||
NOVA_DIR=$DIR/$DIRNAME
|
NOVA_DIR=$DIR/$DIRNAME
|
||||||
if [ -n "$3" ]; then
|
|
||||||
NOVA_DIR=$DIR/$3
|
|
||||||
fi
|
|
||||||
|
|
||||||
if [ ! -n "$HOST_IP" ]; then
|
if [ ! -n "$HOST_IP" ]; then
|
||||||
# NOTE(vish): This will just get the first ip in the list, so if you
|
# NOTE(vish): This will just get the first ip in the list, so if you
|
||||||
@ -45,7 +44,68 @@ else
|
|||||||
AUTH=dbdriver.DbDriver
|
AUTH=dbdriver.DbDriver
|
||||||
fi
|
fi
|
||||||
|
|
||||||
mkdir -p /etc/nova
|
if [ "$CMD" == "branch" ]; then
|
||||||
|
sudo apt-get install -y bzr
|
||||||
|
if [ ! -e "$DIR/.bzr" ]; then
|
||||||
|
bzr init-repo $DIR
|
||||||
|
fi
|
||||||
|
rm -rf $NOVA_DIR
|
||||||
|
bzr branch $SOURCE_BRANCH $NOVA_DIR
|
||||||
|
cd $NOVA_DIR
|
||||||
|
mkdir -p $NOVA_DIR/instances
|
||||||
|
mkdir -p $NOVA_DIR/networks
|
||||||
|
exit
|
||||||
|
fi
|
||||||
|
|
||||||
|
# You should only have to run this once
|
||||||
|
if [ "$CMD" == "install" ]; then
|
||||||
|
sudo apt-get install -y python-software-properties
|
||||||
|
sudo add-apt-repository ppa:nova-core/trunk
|
||||||
|
sudo apt-get update
|
||||||
|
sudo apt-get install -y dnsmasq-base kpartx kvm gawk iptables ebtables
|
||||||
|
sudo apt-get install -y user-mode-linux kvm libvirt-bin
|
||||||
|
sudo apt-get install -y screen euca2ools vlan curl rabbitmq-server
|
||||||
|
sudo apt-get install -y lvm2 iscsitarget open-iscsi
|
||||||
|
sudo apt-get install -y socat
|
||||||
|
echo "ISCSITARGET_ENABLE=true" | sudo tee /etc/default/iscsitarget
|
||||||
|
sudo /etc/init.d/iscsitarget restart
|
||||||
|
sudo modprobe kvm
|
||||||
|
sudo /etc/init.d/libvirt-bin restart
|
||||||
|
sudo modprobe nbd
|
||||||
|
sudo apt-get install -y python-twisted python-sqlalchemy python-mox python-greenlet python-carrot
|
||||||
|
sudo apt-get install -y python-migrate python-eventlet python-gflags python-ipy python-tempita
|
||||||
|
sudo apt-get install -y python-libvirt python-libxml2 python-routes python-cheetah
|
||||||
|
sudo apt-get install -y python-netaddr python-paste python-pastedeploy python-glance
|
||||||
|
|
||||||
|
if [ "$USE_IPV6" == 1 ]; then
|
||||||
|
sudo apt-get install -y radvd
|
||||||
|
sudo bash -c "echo 1 > /proc/sys/net/ipv6/conf/all/forwarding"
|
||||||
|
sudo bash -c "echo 0 > /proc/sys/net/ipv6/conf/all/accept_ra"
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ "$USE_MYSQL" == 1 ]; then
|
||||||
|
cat <<MYSQL_PRESEED | debconf-set-selections
|
||||||
|
mysql-server-5.1 mysql-server/root_password password $MYSQL_PASS
|
||||||
|
mysql-server-5.1 mysql-server/root_password_again password $MYSQL_PASS
|
||||||
|
mysql-server-5.1 mysql-server/start_on_boot boolean true
|
||||||
|
MYSQL_PRESEED
|
||||||
|
apt-get install -y mysql-server python-mysqldb
|
||||||
|
fi
|
||||||
|
mkdir -p $DIR/images
|
||||||
|
wget -c http://images.ansolabs.com/tty.tgz
|
||||||
|
tar -C $DIR/images -zxf tty.tgz
|
||||||
|
exit
|
||||||
|
fi
|
||||||
|
|
||||||
|
NL=`echo -ne '\015'`
|
||||||
|
|
||||||
|
function screen_it {
|
||||||
|
screen -S nova -X screen -t $1
|
||||||
|
screen -S nova -p $1 -X stuff "$2$NL"
|
||||||
|
}
|
||||||
|
|
||||||
|
if [ "$CMD" == "run" ]; then
|
||||||
|
|
||||||
cat >$NOVA_DIR/bin/nova.conf << NOVA_CONF_EOF
|
cat >$NOVA_DIR/bin/nova.conf << NOVA_CONF_EOF
|
||||||
--verbose
|
--verbose
|
||||||
--nodaemon
|
--nodaemon
|
||||||
@ -66,61 +126,6 @@ if [ "$USE_IPV6" == 1 ]; then
|
|||||||
echo "--use_ipv6" >>$NOVA_DIR/bin/nova.conf
|
echo "--use_ipv6" >>$NOVA_DIR/bin/nova.conf
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if [ "$CMD" == "branch" ]; then
|
|
||||||
sudo apt-get install -y bzr
|
|
||||||
rm -rf $NOVA_DIR
|
|
||||||
bzr branch $SOURCE_BRANCH $NOVA_DIR
|
|
||||||
cd $NOVA_DIR
|
|
||||||
mkdir -p $NOVA_DIR/instances
|
|
||||||
mkdir -p $NOVA_DIR/networks
|
|
||||||
fi
|
|
||||||
|
|
||||||
# You should only have to run this once
|
|
||||||
if [ "$CMD" == "install" ]; then
|
|
||||||
sudo apt-get install -y python-software-properties
|
|
||||||
sudo add-apt-repository ppa:nova-core/trunk
|
|
||||||
sudo apt-get update
|
|
||||||
sudo apt-get install -y dnsmasq-base kpartx kvm gawk iptables ebtables
|
|
||||||
sudo apt-get install -y user-mode-linux kvm libvirt-bin
|
|
||||||
sudo apt-get install -y screen euca2ools vlan curl rabbitmq-server
|
|
||||||
sudo apt-get install -y lvm2 iscsitarget open-iscsi
|
|
||||||
sudo apt-get install -y socat
|
|
||||||
echo "ISCSITARGET_ENABLE=true" | sudo tee /etc/default/iscsitarget
|
|
||||||
sudo /etc/init.d/iscsitarget restart
|
|
||||||
sudo modprobe kvm
|
|
||||||
sudo /etc/init.d/libvirt-bin restart
|
|
||||||
sudo modprobe nbd
|
|
||||||
sudo apt-get install -y python-twisted python-sqlalchemy python-mox python-greenlet python-carrot
|
|
||||||
sudo apt-get install -y python-daemon python-eventlet python-gflags python-ipy python-tempita
|
|
||||||
sudo apt-get install -y python-libvirt python-libxml2 python-routes python-cheetah
|
|
||||||
sudo apt-get install -y python-netaddr python-paste python-pastedeploy python-glance
|
|
||||||
|
|
||||||
if [ "$USE_IPV6" == 1 ]; then
|
|
||||||
sudo apt-get install -y radvd
|
|
||||||
sudo bash -c "echo 1 > /proc/sys/net/ipv6/conf/all/forwarding"
|
|
||||||
sudo bash -c "echo 0 > /proc/sys/net/ipv6/conf/all/accept_ra"
|
|
||||||
fi
|
|
||||||
|
|
||||||
if [ "$USE_MYSQL" == 1 ]; then
|
|
||||||
cat <<MYSQL_PRESEED | debconf-set-selections
|
|
||||||
mysql-server-5.1 mysql-server/root_password password $MYSQL_PASS
|
|
||||||
mysql-server-5.1 mysql-server/root_password_again password $MYSQL_PASS
|
|
||||||
mysql-server-5.1 mysql-server/start_on_boot boolean true
|
|
||||||
MYSQL_PRESEED
|
|
||||||
apt-get install -y mysql-server python-mysqldb
|
|
||||||
fi
|
|
||||||
wget -c http://c2477062.cdn.cloudfiles.rackspacecloud.com/images.tgz
|
|
||||||
tar -C $DIR -zxf images.tgz
|
|
||||||
fi
|
|
||||||
|
|
||||||
NL=`echo -ne '\015'`
|
|
||||||
|
|
||||||
function screen_it {
|
|
||||||
screen -S nova -X screen -t $1
|
|
||||||
screen -S nova -p $1 -X stuff "$2$NL"
|
|
||||||
}
|
|
||||||
|
|
||||||
if [ "$CMD" == "run" ]; then
|
|
||||||
killall dnsmasq
|
killall dnsmasq
|
||||||
if [ "$USE_IPV6" == 1 ]; then
|
if [ "$USE_IPV6" == 1 ]; then
|
||||||
killall radvd
|
killall radvd
|
||||||
|
@ -71,7 +71,6 @@ class NoMoreTargets(exception.Error):
|
|||||||
"""No more available blades"""
|
"""No more available blades"""
|
||||||
pass
|
pass
|
||||||
|
|
||||||
|
|
||||||
###################
|
###################
|
||||||
|
|
||||||
|
|
||||||
|
@ -22,6 +22,7 @@ Session Handling for SQLAlchemy backend
|
|||||||
from sqlalchemy import create_engine
|
from sqlalchemy import create_engine
|
||||||
from sqlalchemy.orm import sessionmaker
|
from sqlalchemy.orm import sessionmaker
|
||||||
|
|
||||||
|
from nova import exception
|
||||||
from nova import flags
|
from nova import flags
|
||||||
|
|
||||||
FLAGS = flags.FLAGS
|
FLAGS = flags.FLAGS
|
||||||
@ -43,4 +44,6 @@ def get_session(autocommit=True, expire_on_commit=False):
|
|||||||
autocommit=autocommit,
|
autocommit=autocommit,
|
||||||
expire_on_commit=expire_on_commit))
|
expire_on_commit=expire_on_commit))
|
||||||
session = _MAKER()
|
session = _MAKER()
|
||||||
|
session.query = exception.wrap_db_error(session.query)
|
||||||
|
session.flush = exception.wrap_db_error(session.flush)
|
||||||
return session
|
return session
|
||||||
|
@ -80,6 +80,24 @@ class TimeoutException(Error):
|
|||||||
pass
|
pass
|
||||||
|
|
||||||
|
|
||||||
|
class DBError(Error):
|
||||||
|
"""Wraps an implementation specific exception"""
|
||||||
|
def __init__(self, inner_exception):
|
||||||
|
self.inner_exception = inner_exception
|
||||||
|
super(DBError, self).__init__(str(inner_exception))
|
||||||
|
|
||||||
|
|
||||||
|
def wrap_db_error(f):
|
||||||
|
def _wrap(*args, **kwargs):
|
||||||
|
try:
|
||||||
|
return f(*args, **kwargs)
|
||||||
|
except Exception, e:
|
||||||
|
LOG.exception(_('DB exception wrapped'))
|
||||||
|
raise DBError(e)
|
||||||
|
return _wrap
|
||||||
|
_wrap.func_name = f.func_name
|
||||||
|
|
||||||
|
|
||||||
def wrap_exception(f):
|
def wrap_exception(f):
|
||||||
def _wrap(*args, **kw):
|
def _wrap(*args, **kw):
|
||||||
try:
|
try:
|
||||||
|
Loading…
x
Reference in New Issue
Block a user