merged trunkand fixed conflicts and pep error
This commit is contained in:
@@ -12,6 +12,7 @@ include nova/cloudpipe/bootscript.sh
|
|||||||
include nova/cloudpipe/client.ovpn.template
|
include nova/cloudpipe/client.ovpn.template
|
||||||
include nova/compute/fakevirtinstance.xml
|
include nova/compute/fakevirtinstance.xml
|
||||||
include nova/compute/interfaces.template
|
include nova/compute/interfaces.template
|
||||||
|
include nova/db/sqlalchemy/migrate_repo/migrate.cfg
|
||||||
include nova/virt/interfaces.template
|
include nova/virt/interfaces.template
|
||||||
include nova/virt/libvirt*.xml.template
|
include nova/virt/libvirt*.xml.template
|
||||||
include nova/tests/CA/
|
include nova/tests/CA/
|
||||||
|
|||||||
100
bin/nova-manage
100
bin/nova-manage
@@ -62,7 +62,6 @@ import time
|
|||||||
|
|
||||||
import IPy
|
import IPy
|
||||||
|
|
||||||
|
|
||||||
# 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...
|
||||||
possible_topdir = os.path.normpath(os.path.join(os.path.abspath(sys.argv[0]),
|
possible_topdir = os.path.normpath(os.path.join(os.path.abspath(sys.argv[0]),
|
||||||
@@ -84,9 +83,9 @@ from nova import rpc
|
|||||||
from nova import utils
|
from nova import utils
|
||||||
from nova.api.ec2.cloud import ec2_id_to_id
|
from nova.api.ec2.cloud import ec2_id_to_id
|
||||||
from nova.auth import manager
|
from nova.auth import manager
|
||||||
from nova import rpc
|
|
||||||
from nova.cloudpipe import pipelib
|
from nova.cloudpipe import pipelib
|
||||||
from nova.api.ec2 import cloud
|
from nova.db import migration
|
||||||
|
|
||||||
|
|
||||||
logging.basicConfig()
|
logging.basicConfig()
|
||||||
FLAGS = flags.FLAGS
|
FLAGS = flags.FLAGS
|
||||||
@@ -479,82 +478,6 @@ class NetworkCommands(object):
|
|||||||
int(vpn_start), fixed_range_v6)
|
int(vpn_start), fixed_range_v6)
|
||||||
|
|
||||||
|
|
||||||
class InstanceCommands(object):
|
|
||||||
"""Class for mangaging VM instances."""
|
|
||||||
|
|
||||||
def live_migration(self, ec2_id, dest):
|
|
||||||
"""live_migration"""
|
|
||||||
|
|
||||||
ctxt = context.get_admin_context()
|
|
||||||
instance_id = cloud.ec2_id_to_id(ec2_id)
|
|
||||||
|
|
||||||
if FLAGS.connection_type != 'libvirt':
|
|
||||||
msg = _('Only KVM is supported for now. Sorry!')
|
|
||||||
raise exception.Error(msg)
|
|
||||||
|
|
||||||
if FLAGS.volume_driver != 'nova.volume.driver.AOEDriver':
|
|
||||||
instance_ref = db.instance_get(ctxt, instance_id)
|
|
||||||
if len(instance_ref['volumes']) != 0:
|
|
||||||
msg = _(("""Volumes attached by ISCSIDriver"""
|
|
||||||
""" are not supported. Sorry!"""))
|
|
||||||
raise exception.Error(msg)
|
|
||||||
|
|
||||||
rpc.call(ctxt,
|
|
||||||
FLAGS.scheduler_topic,
|
|
||||||
{"method": "live_migration",
|
|
||||||
"args": {"instance_id": instance_id,
|
|
||||||
"dest": dest,
|
|
||||||
"topic": FLAGS.compute_topic}})
|
|
||||||
|
|
||||||
msg = 'Migration of %s initiated. ' % ec2_id
|
|
||||||
msg += 'Check its progress using euca-describe-instances.'
|
|
||||||
print msg
|
|
||||||
|
|
||||||
|
|
||||||
class HostCommands(object):
|
|
||||||
"""Class for mangaging host(physical nodes)."""
|
|
||||||
|
|
||||||
def list(self):
|
|
||||||
"""describe host list."""
|
|
||||||
|
|
||||||
# To supress msg: No handlers could be found for logger "amqplib"
|
|
||||||
logging.basicConfig()
|
|
||||||
|
|
||||||
service_refs = db.service_get_all(context.get_admin_context())
|
|
||||||
hosts = [h['host'] for h in service_refs]
|
|
||||||
hosts = list(set(hosts))
|
|
||||||
for host in hosts:
|
|
||||||
print host
|
|
||||||
|
|
||||||
def show(self, host):
|
|
||||||
"""describe cpu/memory/hdd info for host."""
|
|
||||||
|
|
||||||
result = rpc.call(context.get_admin_context(),
|
|
||||||
FLAGS.scheduler_topic,
|
|
||||||
{"method": "show_host_resource",
|
|
||||||
"args": {"host": host}})
|
|
||||||
|
|
||||||
# Checking result msg format is necessary, that will have done
|
|
||||||
# when this feture is included in API.
|
|
||||||
if type(result) != dict:
|
|
||||||
print 'Unexpected error occurs'
|
|
||||||
elif not result['ret']:
|
|
||||||
print '%s' % result['msg']
|
|
||||||
else:
|
|
||||||
cpu = result['phy_resource']['vcpus']
|
|
||||||
mem = result['phy_resource']['memory_mb']
|
|
||||||
hdd = result['phy_resource']['local_gb']
|
|
||||||
|
|
||||||
print 'HOST\t\tPROJECT\t\tcpu\tmem(mb)\tdisk(gb)'
|
|
||||||
print '%s\t\t\t%s\t%s\t%s' % (host, cpu, mem, hdd)
|
|
||||||
for p_id, val in result['usage'].items():
|
|
||||||
print '%s\t%s\t\t%s\t%s\t%s' % (host,
|
|
||||||
p_id,
|
|
||||||
val['vcpus'],
|
|
||||||
val['memory_mb'],
|
|
||||||
val['local_gb'])
|
|
||||||
|
|
||||||
|
|
||||||
class ServiceCommands(object):
|
class ServiceCommands(object):
|
||||||
"""Enable and disable running services"""
|
"""Enable and disable running services"""
|
||||||
|
|
||||||
@@ -609,6 +532,21 @@ class LogCommands(object):
|
|||||||
print re.sub('#012', "\n", "\n".join(lines))
|
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):
|
class VolumeCommands(object):
|
||||||
"""Methods for dealing with a cloud in an odd state"""
|
"""Methods for dealing with a cloud in an odd state"""
|
||||||
|
|
||||||
@@ -648,6 +586,7 @@ class VolumeCommands(object):
|
|||||||
"volume_id": volume['id'],
|
"volume_id": volume['id'],
|
||||||
"mountpoint": volume['mountpoint']}})
|
"mountpoint": volume['mountpoint']}})
|
||||||
|
|
||||||
|
|
||||||
CATEGORIES = [
|
CATEGORIES = [
|
||||||
('user', UserCommands),
|
('user', UserCommands),
|
||||||
('project', ProjectCommands),
|
('project', ProjectCommands),
|
||||||
@@ -656,10 +595,9 @@ CATEGORIES = [
|
|||||||
('vpn', VpnCommands),
|
('vpn', VpnCommands),
|
||||||
('floating', FloatingIpCommands),
|
('floating', FloatingIpCommands),
|
||||||
('network', NetworkCommands),
|
('network', NetworkCommands),
|
||||||
('instance', InstanceCommands),
|
|
||||||
('host', HostCommands),
|
|
||||||
('service', ServiceCommands),
|
('service', ServiceCommands),
|
||||||
('log', LogCommands),
|
('log', LogCommands),
|
||||||
|
('db', DbCommands),
|
||||||
('volume', VolumeCommands)]
|
('volume', VolumeCommands)]
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -40,3 +40,4 @@ FLAGS.blades_per_shelf = 4
|
|||||||
FLAGS.iscsi_num_targets = 8
|
FLAGS.iscsi_num_targets = 8
|
||||||
FLAGS.verbose = True
|
FLAGS.verbose = True
|
||||||
FLAGS.sql_connection = 'sqlite:///nova.sqlite'
|
FLAGS.sql_connection = 'sqlite:///nova.sqlite'
|
||||||
|
FLAGS.use_ipv6 = True
|
||||||
|
|||||||
@@ -17,7 +17,7 @@
|
|||||||
# See the License for the specific language governing permissions and
|
# See the License for the specific language governing permissions and
|
||||||
# limitations under the License.
|
# limitations under the License.
|
||||||
|
|
||||||
|
import gettext
|
||||||
import os
|
import os
|
||||||
import unittest
|
import unittest
|
||||||
import sys
|
import sys
|
||||||
|
|||||||
Reference in New Issue
Block a user