summaryrefslogtreecommitdiffstats
path: root/bin
diff options
context:
space:
mode:
authorHisaharu Ishii <ishii.hisaharu@lab.ntt.co.jp>2011-01-21 20:04:02 +0900
committerHisaharu Ishii <ishii.hisaharu@lab.ntt.co.jp>2011-01-21 20:04:02 +0900
commitd55e281efef06dbbcfec9ef4aad4ed0bac9a9368 (patch)
tree4ae24944e609ae20092e8e6a2219b6da963de4c4 /bin
parent3294d3f98cb78b169656711c73547e1cf0527432 (diff)
parent14edbd55e667b16b8d46c0230b11ccd964f5742f (diff)
downloadnova-d55e281efef06dbbcfec9ef4aad4ed0bac9a9368.tar.gz
nova-d55e281efef06dbbcfec9ef4aad4ed0bac9a9368.tar.xz
nova-d55e281efef06dbbcfec9ef4aad4ed0bac9a9368.zip
Merged with rev597
Diffstat (limited to 'bin')
-rwxr-xr-xbin/nova-direct-api2
-rwxr-xr-xbin/nova-manage72
-rwxr-xr-xbin/stack10
3 files changed, 79 insertions, 5 deletions
diff --git a/bin/nova-direct-api b/bin/nova-direct-api
index e7dd14fb2..173b39bdb 100755
--- a/bin/nova-direct-api
+++ b/bin/nova-direct-api
@@ -49,7 +49,7 @@ if __name__ == '__main__':
utils.default_flagfile()
FLAGS(sys.argv)
- direct.register_service('compute', compute_api.ComputeAPI())
+ direct.register_service('compute', compute_api.API())
direct.register_service('reflect', direct.Reflection())
router = direct.Router()
with_json = direct.JsonParamsMiddleware(router)
diff --git a/bin/nova-manage b/bin/nova-manage
index b5842b595..a347e86ce 100755
--- a/bin/nova-manage
+++ b/bin/nova-manage
@@ -79,9 +79,12 @@ from nova import exception
from nova import flags
from nova import log as logging
from nova import quota
+from nova import rpc
from nova import utils
+from nova.api.ec2.cloud import ec2_id_to_id
from nova.auth import manager
from nova.cloudpipe import pipelib
+from nova.db import migration
logging.basicConfig()
@@ -94,6 +97,16 @@ flags.DECLARE('vpn_start', 'nova.network.manager')
flags.DECLARE('fixed_range_v6', 'nova.network.manager')
+def param2id(object_id):
+ """Helper function to convert various id types to internal id.
+ args: [object_id], e.g. 'vol-0000000a' or 'volume-0000000a' or '10'
+ """
+ if '-' in object_id:
+ return ec2_id_to_id(object_id)
+ else:
+ return int(object_id)
+
+
class VpnCommands(object):
"""Class for managing VPNs."""
@@ -519,6 +532,61 @@ class LogCommands(object):
print re.sub('#012', "\n", "\n".join(lines))
+class DbCommands(object):
+ """Class for managing the database."""
+
+ def __init__(self):
+ pass
+
+ def sync(self, version=None):
+ """Sync the database up to the most recent version."""
+ return migration.db_sync(version)
+
+ def version(self):
+ """Print the current database version."""
+ print migration.db_version()
+
+
+class VolumeCommands(object):
+ """Methods for dealing with a cloud in an odd state"""
+
+ def delete(self, volume_id):
+ """Delete a volume, bypassing the check that it
+ must be available.
+ args: volume_id_id"""
+ ctxt = context.get_admin_context()
+ volume = db.volume_get(ctxt, param2id(volume_id))
+ host = volume['host']
+ if volume['status'] == 'in-use':
+ print "Volume is in-use."
+ print "Detach volume from instance and then try again."
+ return
+
+ rpc.cast(ctxt,
+ db.queue_get_for(ctxt, FLAGS.volume_topic, host),
+ {"method": "delete_volume",
+ "args": {"volume_id": volume['id']}})
+
+ def reattach(self, volume_id):
+ """Re-attach a volume that has previously been attached
+ to an instance. Typically called after a compute host
+ has been rebooted.
+ args: volume_id_id"""
+ ctxt = context.get_admin_context()
+ volume = db.volume_get(ctxt, param2id(volume_id))
+ if not volume['instance_id']:
+ print "volume is not attached to an instance"
+ return
+ instance = db.instance_get(ctxt, volume['instance_id'])
+ host = instance['host']
+ rpc.cast(ctxt,
+ db.queue_get_for(ctxt, FLAGS.compute_topic, host),
+ {"method": "attach_volume",
+ "args": {"instance_id": instance['id'],
+ "volume_id": volume['id'],
+ "mountpoint": volume['mountpoint']}})
+
+
CATEGORIES = [
('user', UserCommands),
('project', ProjectCommands),
@@ -528,7 +596,9 @@ CATEGORIES = [
('floating', FloatingIpCommands),
('network', NetworkCommands),
('service', ServiceCommands),
- ('log', LogCommands)]
+ ('log', LogCommands),
+ ('db', DbCommands),
+ ('volume', VolumeCommands)]
def lazy_match(name, key_value_tuples):
diff --git a/bin/stack b/bin/stack
index 7a6ce5960..25caca06f 100755
--- a/bin/stack
+++ b/bin/stack
@@ -22,6 +22,7 @@
import eventlet
eventlet.monkey_patch()
+import json
import os
import pprint
import sys
@@ -38,7 +39,6 @@ if os.path.exists(os.path.join(possible_topdir, 'nova', '__init__.py')):
sys.path.insert(0, possible_topdir)
import gflags
-from nova import utils
FLAGS = gflags.FLAGS
@@ -106,8 +106,12 @@ def do_request(controller, method, params=None):
'X-OpenStack-Project': FLAGS.project}
req = urllib2.Request(url, data, headers)
- resp = urllib2.urlopen(req)
- return utils.loads(resp.read())
+ try:
+ resp = urllib2.urlopen(req)
+ except urllib2.HTTPError, e:
+ print e.read()
+ sys.exit(1)
+ return json.loads(resp.read())
if __name__ == '__main__':