Fix merge changelog and merge errors in utils.py

This commit is contained in:
Vishvananda Ishaya 2010-07-14 14:39:51 -05:00
commit 67f781530c
24 changed files with 224 additions and 35 deletions

View File

@ -220,7 +220,7 @@ def methods_of(obj):
if __name__ == '__main__': if __name__ == '__main__':
utils.default_flagfile() utils.default_flagfile('/etc/nova/nova-manage.conf')
argv = FLAGS(sys.argv) argv = FLAGS(sys.argv)
script_name = argv.pop(0) script_name = argv.pop(0)
if len(argv) < 1: if len(argv) < 1:

20
debian/changelog vendored
View File

@ -1,3 +1,23 @@
nova (0.2.3-1) UNRELEASED; urgency=low
* Relax the Twisted dependency to python-twisted-core (rather than the
full stack).
* Move nova related configuration files into /etc/nova/.
* Add a dependency on nginx from nova-objectsstore and install a
suitable configuration file.
* Ship the CA directory in nova-common.
* Add a default flag file for nova-manage to help it find the CA.
* If set, pass KernelId and RamdiskId from RunInstances call to the
target compute node.
* Added --network_path setting to nova-compute's flagfile.
* Move templates from python directories to /usr/share/nova.
* Add debian/nova-common.dirs to create
var/lib/nova/{buckets,CA,images,instances,keys,networks}
* Don't pass --daemonize=1 to nova-compute. It's already daemonising
by default.
-- Vishvananda Ishaya <vishvananda@gmail.com> Mon, 14 Jul 2010 12:00:00 -0700
nova (0.2.2-10) UNRELEASED; urgency=low nova (0.2.2-10) UNRELEASED; urgency=low
* Fixed extra space in vblade-persist * Fixed extra space in vblade-persist

113
debian/control vendored
View File

@ -3,36 +3,112 @@ Section: net
Priority: extra Priority: extra
Maintainer: Jesse Andrews <jesse@ansolabs.com> Maintainer: Jesse Andrews <jesse@ansolabs.com>
Build-Depends: debhelper (>= 7) Build-Depends: debhelper (>= 7)
Build-Depends-Indep: python-support Build-Depends-Indep: python-support, python-setuptools
Standards-Version: 3.8.4 Standards-Version: 3.8.4
XS-Python-Version: 2.6 XS-Python-Version: 2.6
Package: nova-common Package: nova-common
Architecture: all Architecture: all
Depends: ${python:Depends}, aoetools, vlan, python-ipy, python-boto, python-m2crypto, python-pycurl, python-twisted (>= 10.0.0-2ubuntu2nebula1), python-daemon, python-redis, python-carrot, python-lockfile, python-gflags, python-tornado, ${misc:Depends} Depends: ${python:Depends}, aoetools, vlan, python-ipy, python-boto, python-m2crypto, python-pycurl, python-twisted-core, python-daemon, python-redis, python-carrot, python-lockfile, python-gflags, python-tornado, ${misc:Depends}
Provides: ${python:Provides} Provides: ${python:Provides}
Conflicts: nova Description: Nova Cloud Computing - common files
Description: Nova is a cloud Nova is a cloud computing fabric controller (the main part of an IaaS
system) built to match the popular AWS EC2 and S3 APIs. It is written in
Python, using the Tornado and Twisted frameworks, and relies on the
standard AMQP messaging protocol, and the Redis distributed KVS.
.
Nova is intended to be easy to extend, and adapt. For example, it
currently uses an LDAP server for users and groups, but also includes a
fake LDAP server, that stores data in Redis. It has extensive test
coverage, and uses the Sphinx toolkit (the same as Python itself) for code
and user documentation.
.
While Nova is currently in Beta use within several organizations, the
codebase is very much under active development.
.
This package contains things that are needed by all parts of Nova.
Package: nova-compute Package: nova-compute
Architecture: all Architecture: all
Depends: nova-common (= ${binary:Version}), kpartx, kvm, python-libvirt, libvirt-bin (>= 0.8.1), ${python:Depends}, ${misc:Depends} Depends: nova-common (= ${binary:Version}), kpartx, kvm, python-libvirt, libvirt-bin (>= 0.7.5), curl, ${python:Depends}, ${misc:Depends}
Description: Nova compute Description: Nova Cloud Computing - compute node
Nova is a cloud computing fabric controller (the main part of an IaaS
system) built to match the popular AWS EC2 and S3 APIs. It is written in
Python, using the Tornado and Twisted frameworks, and relies on the
standard AMQP messaging protocol, and the Redis distributed KVS.
.
Nova is intended to be easy to extend, and adapt. For example, it
currently uses an LDAP server for users and groups, but also includes a
fake LDAP server, that stores data in Redis. It has extensive test
coverage, and uses the Sphinx toolkit (the same as Python itself) for code
and user documentation.
.
While Nova is currently in Beta use within several organizations, the
codebase is very much under active development.
.
This is the package you will install on the nodes that will run your
virtual machines.
Package: nova-volume Package: nova-volume
Architecture: all Architecture: all
Depends: nova-common (= ${binary:Version}), vblade, vblade-persist, ${python:Depends}, ${misc:Depends} Depends: nova-common (= ${binary:Version}), vblade, vblade-persist, ${python:Depends}, ${misc:Depends}
Description: Nova volume Description: Nova Cloud Computing - storage
Nova is a cloud computing fabric controller (the main part of an IaaS
system) built to match the popular AWS EC2 and S3 APIs. It is written in
Python, using the Tornado and Twisted frameworks, and relies on the
standard AMQP messaging protocol, and the Redis distributed KVS.
.
Nova is intended to be easy to extend, and adapt. For example, it
currently uses an LDAP server for users and groups, but also includes a
fake LDAP server, that stores data in Redis. It has extensive test
coverage, and uses the Sphinx toolkit (the same as Python itself) for code
and user documentation.
.
While Nova is currently in Beta use within several organizations, the
codebase is very much under active development.
.
This is the package you will install on your storage nodes.
Package: nova-api Package: nova-api
Architecture: all Architecture: all
Depends: nova-common (= ${binary:Version}), ${python:Depends}, ${misc:Depends} Depends: nova-common (= ${binary:Version}), ${python:Depends}, ${misc:Depends}
Description: Nova api Description: Nova Cloud Computing - API frontend
Nova is a cloud computing fabric controller (the main part of an IaaS
system) built to match the popular AWS EC2 and S3 APIs. It is written in
Python, using the Tornado and Twisted frameworks, and relies on the
standard AMQP messaging protocol, and the Redis distributed KVS.
.
Nova is intended to be easy to extend, and adapt. For example, it
currently uses an LDAP server for users and groups, but also includes a
fake LDAP server, that stores data in Redis. It has extensive test
coverage, and uses the Sphinx toolkit (the same as Python itself) for code
and user documentation.
.
While Nova is currently in Beta use within several organizations, the
codebase is very much under active development.
.
This package provides the API frontend.
Package: nova-objectstore Package: nova-objectstore
Architecture: all Architecture: all
Depends: nova-common (= ${binary:Version}), ${python:Depends}, ${misc:Depends} Depends: nova-common (= ${binary:Version}), nginx, ${python:Depends}, ${misc:Depends}
Description: Nova object store Description: Nova Cloud Computing - object store
Nova is a cloud computing fabric controller (the main part of an IaaS
system) built to match the popular AWS EC2 and S3 APIs. It is written in
Python, using the Tornado and Twisted frameworks, and relies on the
standard AMQP messaging protocol, and the Redis distributed KVS.
.
Nova is intended to be easy to extend, and adapt. For example, it
currently uses an LDAP server for users and groups, but also includes a
fake LDAP server, that stores data in Redis. It has extensive test
coverage, and uses the Sphinx toolkit (the same as Python itself) for code
and user documentation.
.
While Nova is currently in Beta use within several organizations, the
codebase is very much under active development.
.
This is the package you will install on the nodes that will contain your
object store.
Package: nova-instancemonitor Package: nova-instancemonitor
Architecture: all Architecture: all
@ -42,4 +118,19 @@ Description: Nova instance monitor
Package: nova-tools Package: nova-tools
Architecture: all Architecture: all
Depends: python-boto, ${python:Depends}, ${misc:Depends} Depends: python-boto, ${python:Depends}, ${misc:Depends}
Description: CLI tools to access nova Description: Nova Cloud Computing - management tools
Nova is a cloud computing fabric controller (the main part of an IaaS
system) built to match the popular AWS EC2 and S3 APIs. It is written in
Python, using the Tornado and Twisted frameworks, and relies on the
standard AMQP messaging protocol, and the Redis distributed KVS.
.
Nova is intended to be easy to extend, and adapt. For example, it
currently uses an LDAP server for users and groups, but also includes a
fake LDAP server, that stores data in Redis. It has extensive test
coverage, and uses the Sphinx toolkit (the same as Python itself) for code
and user documentation.
.
While Nova is currently in Beta use within several organizations, the
codebase is very much under active development.
.
This package contains admin tools for Nova.

5
debian/nova-api.conf vendored Normal file
View File

@ -0,0 +1,5 @@
--daemonize=1
--ca_path=/var/lib/nova/CA
--keys_path=/var/lib/nova/keys
--fake_users=1
--datastore_path=/var/lib/nova/keeper

View File

@ -13,10 +13,10 @@
set -e set -e
DAEMON=/usr/bin/nova-api DAEMON=/usr/bin/nova-api
DAEMON_ARGS="--flagfile=/etc/nova.conf" DAEMON_ARGS="--flagfile=/etc/nova/nova-api.conf"
PIDFILE=/var/run/nova-api.pid PIDFILE=/var/run/nova-api.pid
ENABLED=false ENABLED=true
if test -f /etc/default/nova-api; then if test -f /etc/default/nova-api; then
. /etc/default/nova-api . /etc/default/nova-api

View File

@ -1 +1,2 @@
bin/nova-api usr/bin bin/nova-api usr/bin
debian/nova-api.conf etc/nova

11
debian/nova-common.dirs vendored Normal file
View File

@ -0,0 +1,11 @@
etc/nova
var/lib/nova/buckets
var/lib/nova/CA
var/lib/nova/CA/INTER
var/lib/nova/CA/newcerts
var/lib/nova/CA/private
var/lib/nova/CA/reqs
var/lib/nova/images
var/lib/nova/instances
var/lib/nova/keys
var/lib/nova/networks

View File

@ -1,5 +1,9 @@
bin/nova-manage usr/bin bin/nova-manage usr/bin
nova/auth/novarc.template usr/lib/pymodules/python2.6/nova/auth debian/nova-manage.conf etc/nova
nova/cloudpipe/client.ovpn.template usr/lib/pymodules/python2.6/nova/cloudpipe nova/auth/novarc.template usr/share/nova
nova/compute/libvirt.xml.template usr/lib/pymodules/python2.6/nova/compute nova/cloudpipe/client.ovpn.template usr/share/nova
nova/compute/libvirt.xml.template usr/share/nova
usr/lib/python*/*-packages/nova/* usr/lib/python*/*-packages/nova/*
CA/openssl.cnf.tmpl var/lib/nova/CA
CA/geninter.sh var/lib/nova/CA
CA/genrootca.sh var/lib/nova/CA

9
debian/nova-compute.conf vendored Normal file
View File

@ -0,0 +1,9 @@
--ca_path=/var/lib/nova/CA
--keys_path=/var/lib/nova/keys
--datastore_path=/var/lib/nova/keeper
--instances_path=/var/lib/nova/instances
--networks_path=/var/lib/nova/networks
--libvirt_xml_template=/usr/share/nova/libvirt.xml.template
--vpn_client_template=/usr/share/nova/client.ovpn.template
--credentials_template=/usr/share/nova/novarc.template
--fake_users=1

View File

@ -13,10 +13,10 @@
set -e set -e
DAEMON=/usr/bin/nova-compute DAEMON=/usr/bin/nova-compute
DAEMON_ARGS="--flagfile=/etc/nova.conf" DAEMON_ARGS="--flagfile=/etc/nova/nova-compute.conf"
PIDFILE=/var/run/nova-compute.pid PIDFILE=/var/run/nova-compute.pid
ENABLED=false ENABLED=true
if test -f /etc/default/nova-compute; then if test -f /etc/default/nova-compute; then
. /etc/default/nova-compute . /etc/default/nova-compute

View File

@ -1 +1,2 @@
bin/nova-compute usr/bin bin/nova-compute usr/bin
debian/nova-compute.conf etc/nova

4
debian/nova-manage.conf vendored Normal file
View File

@ -0,0 +1,4 @@
--ca_path=/var/lib/nova/CA
--credentials_template=/usr/share/nova/novarc.template
--keys_path=/var/lib/nova/keys
--vpn_client_template=/usr/share/nova/client.ovpn.template

7
debian/nova-objectstore.conf vendored Normal file
View File

@ -0,0 +1,7 @@
--daemonize=1
--ca_path=/var/lib/nova/CA
--keys_path=/var/lib/nova/keys
--datastore_path=/var/lib/nova/keeper
--fake_users=1
--images_path=/var/lib/nova/images
--buckets_path=/var/lib/nova/buckets

View File

@ -13,10 +13,10 @@
set -e set -e
DAEMON=/usr/bin/nova-objectstore DAEMON=/usr/bin/nova-objectstore
DAEMON_ARGS="--flagfile=/etc/nova.conf" DAEMON_ARGS="--flagfile=/etc/nova/nova-objectstore.conf"
PIDFILE=/var/run/nova-objectstore.pid PIDFILE=/var/run/nova-objectstore.pid
ENABLED=false ENABLED=true
if test -f /etc/default/nova-objectstore; then if test -f /etc/default/nova-objectstore; then
. /etc/default/nova-objectstore . /etc/default/nova-objectstore

View File

@ -1 +1,3 @@
bin/nova-objectstore usr/bin bin/nova-objectstore usr/bin
debian/nova-objectstore.conf etc/nova
debian/nova-objectstore.nginx.conf etc/nginx/sites-available

1
debian/nova-objectstore.links vendored Normal file
View File

@ -0,0 +1 @@
/etc/nginx/sites-available/nova-objectstore.nginx.conf /etc/nginx/sites-enabled/nova-objectstore.nginx.conf

17
debian/nova-objectstore.nginx.conf vendored Normal file
View File

@ -0,0 +1,17 @@
server {
listen 3333 default;
server_name localhost;
client_max_body_size 10m;
access_log /var/log/nginx/localhost.access.log;
location ~ /_images/.+ {
root /var/lib/nova/images;
rewrite ^/_images/(.*)$ /$1 break;
}
location / {
proxy_pass http://localhost:3334/;
}
}

7
debian/nova-volume.conf vendored Normal file
View File

@ -0,0 +1,7 @@
--daemonize=1
--ca_path=/var/lib/nova/CA
--keys_path=/var/lib/nova/keys
--datastore_path=/var/lib/nova/keeper
--fake_users=1
--images_path=/var/lib/nova/images
--buckets_path=/var/lib/nova/buckets

View File

@ -13,10 +13,10 @@
set -e set -e
DAEMON=/usr/bin/nova-volume DAEMON=/usr/bin/nova-volume
DAEMON_ARGS="--flagfile=/etc/nova.conf" DAEMON_ARGS="--flagfile=/etc/nova/nova-volume.conf"
PIDFILE=/var/run/nova-volume.pid PIDFILE=/var/run/nova-volume.pid
ENABLED=false ENABLED=true
if test -f /etc/default/nova-volume; then if test -f /etc/default/nova-volume; then
. /etc/default/nova-volume . /etc/default/nova-volume

View File

@ -1 +1,2 @@
bin/nova-volume usr/bin bin/nova-volume usr/bin
debian/nova-volume.conf etc/nova

View File

@ -126,8 +126,7 @@ def inject_key(key, image, partition=None, execute=None):
yield execute('sudo umount %s' % mapped_device) yield execute('sudo umount %s' % mapped_device)
finally: finally:
# remove temporary directory # remove temporary directory
# TODO(termie): scary, is there any thing we can check here? yield execute('rmdir %s' % tmpdir)
yield execute('rm -rf %s' % tmpdir)
if not partition is None: if not partition is None:
# remove partitions # remove partitions
yield execute('sudo kpartx -d %s' % device) yield execute('sudo kpartx -d %s' % device)

View File

@ -133,7 +133,7 @@ class BaseNetwork(datastore.RedisModel):
@property @property
def hosts(self): def hosts(self):
return datastore.Redis.instance().hgetall(self._hosts_key) return datastore.Redis.instance().hgetall(self._hosts_key) or {}
def _add_host(self, _user_id, _project_id, host, target): def _add_host(self, _user_id, _project_id, host, target):
datastore.Redis.instance().hset(self._hosts_key, host, target) datastore.Redis.instance().hset(self._hosts_key, host, target)
@ -392,7 +392,7 @@ def _rem_vlan(project_id):
def get_assigned_vlans(): def get_assigned_vlans():
""" Returns a dictionary, with keys of project_id and values of vlan_id """ """ Returns a dictionary, with keys of project_id and values of vlan_id """
return datastore.Redis.instance().hgetall(VLANS_KEY) return datastore.Redis.instance().hgetall(VLANS_KEY) or {}
def get_vlan_for_project(project_id): def get_vlan_for_project(project_id):
""" """

View File

@ -23,10 +23,12 @@ Wrappers around standard crypto, including root and intermediate CAs,
SSH keypairs and x509 certificates. SSH keypairs and x509 certificates.
""" """
import base64
import hashlib import hashlib
import logging import logging
import os import os
import shutil import shutil
import struct
import tempfile import tempfile
import time import time
import utils import utils
@ -86,14 +88,17 @@ def generate_key_pair(bits=1024):
def ssl_pub_to_ssh_pub(ssl_public_key, name='root', suffix='nova'): def ssl_pub_to_ssh_pub(ssl_public_key, name='root', suffix='nova'):
"""requires lsh-utils""" rsa_key = M2Crypto.RSA.load_pub_key_bio(M2Crypto.BIO.MemoryBuffer(ssl_public_key))
convert="sed -e'1d' -e'$d' | pkcs1-conv --public-key-info --base-64 |" \ e, n = rsa_key.pub()
+ " sexp-conv | sed -e'1s/(rsa-pkcs1/(rsa-pkcs1-sha1/' | sexp-conv -s" \
+ " transport | lsh-export-key --openssh" key_type = 'ssh-rsa'
(out, err) = utils.execute(convert, ssl_public_key)
if err: key_data = struct.pack('>I', len(key_type))
raise exception.Error("Failed to generate key: %s" % err) key_data += key_type
return '%s %s@%s\n' %(out.strip(), name, suffix) key_data += '%s%s' % (e,n)
b64_blob = base64.b64encode(key_data)
return '%s %s %s@%s\n' %(key_type, b64_blob, name, suffix)
def generate_x509_cert(subject, bits=1024): def generate_x509_cert(subject, bits=1024):

View File

@ -521,6 +521,10 @@ class CloudController(object):
inst = self.instdir.new() inst = self.instdir.new()
# TODO(ja): add ari, aki # TODO(ja): add ari, aki
inst['image_id'] = kwargs['image_id'] inst['image_id'] = kwargs['image_id']
if 'kernel_id' in kwargs:
inst['kernel_id'] = kwargs['kernel_id']
if 'ramdisk_id' in kwargs:
inst['ramdisk_id'] = kwargs['ramdisk_id']
inst['user_data'] = kwargs.get('user_data', '') inst['user_data'] = kwargs.get('user_data', '')
inst['instance_type'] = kwargs.get('instance_type', 'm1.small') inst['instance_type'] = kwargs.get('instance_type', 'm1.small')
inst['reservation_id'] = reservation_id inst['reservation_id'] = reservation_id