summaryrefslogtreecommitdiffstats
path: root/bin
diff options
context:
space:
mode:
authorRyan Lane <laner@controller>2010-12-22 23:47:31 +0000
committerRyan Lane <laner@controller>2010-12-22 23:47:31 +0000
commit5012ccb22724c2f7fb0fcdcb7b146d5d5e61337d (patch)
tree3d44d084647c86c41cc189d3a8bf8bcdedba3ef7 /bin
parente893be0a8d32cf1eb2c91187b81a6febf90e5b7c (diff)
parent3f37287c1adfe35756c58938ea8d826181bad2e2 (diff)
downloadnova-5012ccb22724c2f7fb0fcdcb7b146d5d5e61337d.tar.gz
nova-5012ccb22724c2f7fb0fcdcb7b146d5d5e61337d.tar.xz
nova-5012ccb22724c2f7fb0fcdcb7b146d5d5e61337d.zip
Merge from trunk, and resolve conflict with nova/auth/ldapdriver.py
Diffstat (limited to 'bin')
-rwxr-xr-xbin/nova-api23
-rwxr-xr-xbin/nova-combined65
-rwxr-xr-xbin/nova-compute18
-rwxr-xr-xbin/nova-dhcpbridge3
-rwxr-xr-xbin/nova-import-canonical-imagestore3
-rwxr-xr-xbin/nova-instancemonitor3
-rwxr-xr-xbin/nova-manage87
-rwxr-xr-xbin/nova-network18
-rwxr-xr-xbin/nova-objectstore3
-rwxr-xr-xbin/nova-scheduler18
-rwxr-xr-xbin/nova-volume18
11 files changed, 179 insertions, 80 deletions
diff --git a/bin/nova-api b/bin/nova-api
index a9c53dbcd..1c671201e 100755
--- a/bin/nova-api
+++ b/bin/nova-api
@@ -17,10 +17,10 @@
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
-"""
-Nova API daemon.
-"""
+"""Starter script for Nova API."""
+
+import gettext
import os
import sys
@@ -32,9 +32,13 @@ possible_topdir = os.path.normpath(os.path.join(os.path.abspath(sys.argv[0]),
if os.path.exists(os.path.join(possible_topdir, 'nova', '__init__.py')):
sys.path.insert(0, possible_topdir)
+gettext.install('nova', unicode=1)
+
+from nova import api
from nova import flags
from nova import utils
-from nova import server
+from nova import wsgi
+
FLAGS = flags.FLAGS
flags.DEFINE_integer('osapi_port', 8774, 'OpenStack API port')
@@ -43,15 +47,10 @@ flags.DEFINE_integer('ec2api_port', 8773, 'EC2 API port')
flags.DEFINE_string('ec2api_host', '0.0.0.0', 'EC2 API host')
-def main(_args):
- from nova import api
- from nova import wsgi
+if __name__ == '__main__':
+ utils.default_flagfile()
+ FLAGS(sys.argv)
server = wsgi.Server()
server.start(api.API('os'), FLAGS.osapi_port, host=FLAGS.osapi_host)
server.start(api.API('ec2'), FLAGS.ec2api_port, host=FLAGS.ec2api_host)
server.wait()
-
-
-if __name__ == '__main__':
- utils.default_flagfile()
- server.serve('nova-api', main)
diff --git a/bin/nova-combined b/bin/nova-combined
new file mode 100755
index 000000000..c6a04f7e9
--- /dev/null
+++ b/bin/nova-combined
@@ -0,0 +1,65 @@
+#!/usr/bin/env python
+# vim: tabstop=4 shiftwidth=4 softtabstop=4
+
+# Copyright 2010 United States Government as represented by the
+# Administrator of the National Aeronautics and Space Administration.
+# All Rights Reserved.
+#
+# Licensed under the Apache License, Version 2.0 (the "License"); you may
+# not use this file except in compliance with the License. You may obtain
+# a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+# License for the specific language governing permissions and limitations
+# under the License.
+
+"""Combined starter script for Nova services."""
+
+import eventlet
+eventlet.monkey_patch()
+
+import os
+import sys
+
+# 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...
+possible_topdir = os.path.normpath(os.path.join(os.path.abspath(sys.argv[0]),
+ os.pardir,
+ os.pardir))
+if os.path.exists(os.path.join(possible_topdir, 'nova', '__init__.py')):
+ sys.path.insert(0, possible_topdir)
+
+from nova import api
+from nova import flags
+from nova import service
+from nova import utils
+from nova import wsgi
+
+
+FLAGS = flags.FLAGS
+flags.DEFINE_integer('osapi_port', 8774, 'OpenStack API port')
+flags.DEFINE_string('osapi_host', '0.0.0.0', 'OpenStack API host')
+flags.DEFINE_integer('ec2api_port', 8773, 'EC2 API port')
+flags.DEFINE_string('ec2api_host', '0.0.0.0', 'EC2 API host')
+
+
+if __name__ == '__main__':
+ utils.default_flagfile()
+ FLAGS(sys.argv)
+
+ compute = service.Service.create(binary='nova-compute')
+ network = service.Service.create(binary='nova-network')
+ volume = service.Service.create(binary='nova-volume')
+ scheduler = service.Service.create(binary='nova-scheduler')
+ #objectstore = service.Service.create(binary='nova-objectstore')
+
+ service.serve(compute, network, volume, scheduler)
+
+ server = wsgi.Server()
+ server.start(api.API('os'), FLAGS.osapi_port, host=FLAGS.osapi_host)
+ server.start(api.API('ec2'), FLAGS.ec2api_port, host=FLAGS.ec2api_host)
+ server.wait()
diff --git a/bin/nova-compute b/bin/nova-compute
index ac6378f75..d2d352da2 100755
--- a/bin/nova-compute
+++ b/bin/nova-compute
@@ -17,10 +17,12 @@
# License for the specific language governing permissions and limitations
# under the License.
-"""
- Twistd daemon for the nova compute nodes.
-"""
+"""Starter script for Nova Compute."""
+import eventlet
+eventlet.monkey_patch()
+
+import gettext
import os
import sys
@@ -32,14 +34,12 @@ possible_topdir = os.path.normpath(os.path.join(os.path.abspath(sys.argv[0]),
if os.path.exists(os.path.join(possible_topdir, 'nova', '__init__.py')):
sys.path.insert(0, possible_topdir)
+gettext.install('nova', unicode=1)
+
from nova import service
-from nova import twistd
from nova import utils
-
if __name__ == '__main__':
utils.default_flagfile()
- twistd.serve(__file__)
-
-if __name__ == '__builtin__':
- application = service.Service.create() # pylint: disable=C0103
+ service.serve()
+ service.wait()
diff --git a/bin/nova-dhcpbridge b/bin/nova-dhcpbridge
index 17c62da0a..81b9b6dd3 100755
--- a/bin/nova-dhcpbridge
+++ b/bin/nova-dhcpbridge
@@ -21,6 +21,7 @@
Handle lease database updates from DHCP servers.
"""
+import gettext
import logging
import os
import sys
@@ -33,6 +34,8 @@ possible_topdir = os.path.normpath(os.path.join(os.path.abspath(sys.argv[0]),
if os.path.exists(os.path.join(possible_topdir, 'nova', '__init__.py')):
sys.path.insert(0, possible_topdir)
+gettext.install('nova', unicode=1)
+
from nova import context
from nova import db
from nova import flags
diff --git a/bin/nova-import-canonical-imagestore b/bin/nova-import-canonical-imagestore
index 4ed9e8365..036b41e48 100755
--- a/bin/nova-import-canonical-imagestore
+++ b/bin/nova-import-canonical-imagestore
@@ -21,6 +21,7 @@
Download images from Canonical Image Store
"""
+import gettext
import json
import os
import tempfile
@@ -37,6 +38,8 @@ possible_topdir = os.path.normpath(os.path.join(os.path.abspath(sys.argv[0]),
if os.path.exists(os.path.join(possible_topdir, 'nova', '__init__.py')):
sys.path.insert(0, possible_topdir)
+gettext.install('nova', unicode=1)
+
from nova import flags
from nova import utils
from nova.objectstore import image
diff --git a/bin/nova-instancemonitor b/bin/nova-instancemonitor
index 9b6c40e82..5dac3ffe6 100755
--- a/bin/nova-instancemonitor
+++ b/bin/nova-instancemonitor
@@ -21,6 +21,7 @@
Daemon for Nova RRD based instance resource monitoring.
"""
+import gettext
import os
import logging
import sys
@@ -34,6 +35,8 @@ possible_topdir = os.path.normpath(os.path.join(os.path.abspath(sys.argv[0]),
if os.path.exists(os.path.join(possible_topdir, 'nova', '__init__.py')):
sys.path.insert(0, possible_topdir)
+gettext.install('nova', unicode=1)
+
from nova import utils
from nova import twistd
from nova.compute import monitor
diff --git a/bin/nova-manage b/bin/nova-manage
index 62eec8353..599e02a7e 100755
--- a/bin/nova-manage
+++ b/bin/nova-manage
@@ -53,6 +53,7 @@
CLI interface for nova management.
"""
+import gettext
import logging
import os
import sys
@@ -68,7 +69,10 @@ possible_topdir = os.path.normpath(os.path.join(os.path.abspath(sys.argv[0]),
if os.path.exists(os.path.join(possible_topdir, 'nova', '__init__.py')):
sys.path.insert(0, possible_topdir)
+gettext.install('nova', unicode=1)
+
from nova import context
+from nova import crypto
from nova import db
from nova import exception
from nova import flags
@@ -93,47 +97,43 @@ class VpnCommands(object):
self.manager = manager.AuthManager()
self.pipe = pipelib.CloudPipe()
- def list(self):
- """Print a listing of the VPNs for all projects."""
+ def list(self, project=None):
+ """Print a listing of the VPN data for one or all projects.
+
+ args: [project=all]"""
print "%-12s\t" % 'project',
print "%-20s\t" % 'ip:port',
+ print "%-20s\t" % 'private_ip',
print "%s" % 'state'
- for project in self.manager.get_projects():
+ if project:
+ projects = [self.manager.get_project(project)]
+ else:
+ projects = self.manager.get_projects()
+ # NOTE(vish): This hits the database a lot. We could optimize
+ # by getting all networks in one query and all vpns
+ # in aother query, then doing lookups by project
+ for project in projects:
print "%-12s\t" % project.name,
-
- try:
- s = "%s:%s" % (project.vpn_ip, project.vpn_port)
- except exception.NotFound:
- s = "None"
- print "%-20s\t" % s,
-
- vpn = self._vpn_for(project.id)
+ ipport = "%s:%s" % (project.vpn_ip, project.vpn_port)
+ print "%-20s\t" % ipport,
+ ctxt = context.get_admin_context()
+ vpn = db.instance_get_project_vpn(ctxt, project.id)
if vpn:
- command = "ping -c1 -w1 %s > /dev/null; echo $?"
- out, _err = utils.execute(command % vpn['private_dns_name'],
- check_exit_code=False)
- if out.strip() == '0':
- net = 'up'
- else:
- net = 'down'
- print vpn['private_dns_name'],
- print vpn['node_name'],
- print vpn['instance_id'],
+ address = None
+ state = 'down'
+ if vpn.get('fixed_ip', None):
+ address = vpn['fixed_ip']['address']
+ if project.vpn_ip and utils.vpn_ping(project.vpn_ip,
+ project.vpn_port):
+ state = 'up'
+ print address,
+ print vpn['host'],
+ print vpn['ec2_id'],
print vpn['state_description'],
- print net
-
+ print state
else:
print None
- def _vpn_for(self, project_id):
- """Get the VPN instance for a project ID."""
- for instance in db.instance_get_all(context.get_admin_context()):
- if (instance['image_id'] == FLAGS.vpn_image_id
- and not instance['state_description'] in
- ['shutting_down', 'shutdown']
- and instance['project_id'] == project_id):
- return instance
-
def spawn(self):
"""Run all VPNs."""
for p in reversed(self.manager.get_projects()):
@@ -146,6 +146,21 @@ class VpnCommands(object):
"""Start the VPN for a given project."""
self.pipe.launch_vpn_instance(project_id)
+ def change(self, project_id, ip, port):
+ """Change the ip and port for a vpn.
+
+ args: project, ip, port"""
+ project = self.manager.get_project(project_id)
+ if not project:
+ print 'No project %s' % (project_id)
+ return
+ admin = context.get_admin_context()
+ network_ref = db.project_get_network(admin, project_id)
+ db.network_update(admin,
+ network_ref['id'],
+ {'vpn_public_address': ip,
+ 'vpn_public_port': int(port)})
+
class ShellCommands(object):
def bpython(self):
@@ -292,6 +307,14 @@ class UserCommands(object):
is_admin = False
self.manager.modify_user(name, access_key, secret_key, is_admin)
+ def revoke(self, user_id, project_id=None):
+ """revoke certs for a user
+ arguments: user_id [project_id]"""
+ if project_id:
+ crypto.revoke_certs_by_user_and_project(user_id, project_id)
+ else:
+ crypto.revoke_certs_by_user(user_id)
+
class ProjectCommands(object):
"""Class for managing projects."""
diff --git a/bin/nova-network b/bin/nova-network
index d1fb55261..0143846a7 100755
--- a/bin/nova-network
+++ b/bin/nova-network
@@ -17,10 +17,12 @@
# License for the specific language governing permissions and limitations
# under the License.
-"""
- Twistd daemon for the nova network nodes.
-"""
+"""Starter script for Nova Network."""
+import eventlet
+eventlet.monkey_patch()
+
+import gettext
import os
import sys
@@ -32,14 +34,12 @@ possible_topdir = os.path.normpath(os.path.join(os.path.abspath(sys.argv[0]),
if os.path.exists(os.path.join(possible_topdir, 'nova', '__init__.py')):
sys.path.insert(0, possible_topdir)
+gettext.install('nova', unicode=1)
+
from nova import service
-from nova import twistd
from nova import utils
-
if __name__ == '__main__':
utils.default_flagfile()
- twistd.serve(__file__)
-
-if __name__ == '__builtin__':
- application = service.Service.create() # pylint: disable-msg=C0103
+ service.serve()
+ service.wait()
diff --git a/bin/nova-objectstore b/bin/nova-objectstore
index 00ae27af9..9fbe228a2 100755
--- a/bin/nova-objectstore
+++ b/bin/nova-objectstore
@@ -21,6 +21,7 @@
Twisted daemon for nova objectstore. Supports S3 API.
"""
+import gettext
import os
import sys
@@ -32,6 +33,8 @@ possible_topdir = os.path.normpath(os.path.join(os.path.abspath(sys.argv[0]),
if os.path.exists(os.path.join(possible_topdir, 'nova', '__init__.py')):
sys.path.insert(0, possible_topdir)
+gettext.install('nova', unicode=1)
+
from nova import flags
from nova import utils
from nova import twistd
diff --git a/bin/nova-scheduler b/bin/nova-scheduler
index 4d1a40cf1..f4c0eaed6 100755
--- a/bin/nova-scheduler
+++ b/bin/nova-scheduler
@@ -17,10 +17,12 @@
# License for the specific language governing permissions and limitations
# under the License.
-"""
- Twistd daemon for the nova scheduler nodes.
-"""
+"""Starter script for Nova Scheduler."""
+import eventlet
+eventlet.monkey_patch()
+
+import gettext
import os
import sys
@@ -32,14 +34,12 @@ possible_topdir = os.path.normpath(os.path.join(os.path.abspath(sys.argv[0]),
if os.path.exists(os.path.join(possible_topdir, 'nova', '__init__.py')):
sys.path.insert(0, possible_topdir)
+gettext.install('nova', unicode=1)
+
from nova import service
-from nova import twistd
from nova import utils
-
if __name__ == '__main__':
utils.default_flagfile()
- twistd.serve(__file__)
-
-if __name__ == '__builtin__':
- application = service.Service.create()
+ service.serve()
+ service.wait()
diff --git a/bin/nova-volume b/bin/nova-volume
index e7281d6c0..ad3ddc405 100755
--- a/bin/nova-volume
+++ b/bin/nova-volume
@@ -17,10 +17,12 @@
# License for the specific language governing permissions and limitations
# under the License.
-"""
- Twistd daemon for the nova volume nodes.
-"""
+"""Starter script for Nova Volume."""
+import eventlet
+eventlet.monkey_patch()
+
+import gettext
import os
import sys
@@ -32,14 +34,12 @@ possible_topdir = os.path.normpath(os.path.join(os.path.abspath(sys.argv[0]),
if os.path.exists(os.path.join(possible_topdir, 'nova', '__init__.py')):
sys.path.insert(0, possible_topdir)
+gettext.install('nova', unicode=1)
+
from nova import service
-from nova import twistd
from nova import utils
-
if __name__ == '__main__':
utils.default_flagfile()
- twistd.serve(__file__)
-
-if __name__ == '__builtin__':
- application = service.Service.create() # pylint: disable-msg=C0103
+ service.serve()
+ service.wait()