summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorTodd Willey <todd@ansolabs.com>2010-11-04 14:44:22 -0400
committerTodd Willey <todd@ansolabs.com>2010-11-04 14:44:22 -0400
commitbbd11f550765a91af17cb200a2b857f263765918 (patch)
tree6137dd0d7d03f44e66e9a032ef6f24a3eb1e085e
parent95b041ef2ea3dc101312bbb7e1683dfd75f5f80e (diff)
downloadnova-bbd11f550765a91af17cb200a2b857f263765918.tar.gz
nova-bbd11f550765a91af17cb200a2b857f263765918.tar.xz
nova-bbd11f550765a91af17cb200a2b857f263765918.zip
Nova quickstart: move vish's novascript into contrib, and convert reademe.md to a quickstart.rst
-rwxr-xr-xcontrib/nova.sh161
-rw-r--r--doc/source/quickstart.rst79
2 files changed, 238 insertions, 2 deletions
diff --git a/contrib/nova.sh b/contrib/nova.sh
new file mode 100755
index 000000000..9bc36d6fb
--- /dev/null
+++ b/contrib/nova.sh
@@ -0,0 +1,161 @@
+#!/usr/bin/env bash
+DIR=`pwd`
+CMD=$1
+SOURCE_BRANCH=lp:nova
+if [ -n "$2" ]; then
+ SOURCE_BRANCH=$2
+fi
+DIRNAME=nova
+NOVA_DIR=$DIR/$DIRNAME
+if [ -n "$3" ]; then
+ NOVA_DIR=$DIR/$3
+fi
+
+if [ ! -n "$HOST_IP" ]; then
+ # NOTE(vish): This will just get the first ip in the list, so if you
+ # have more than one eth device set up, this will fail, and
+ # you should explicitly set HOST_IP in your environment
+ HOST_IP=`ifconfig | grep -m 1 'inet addr:'| cut -d: -f2 | awk '{print $1}'`
+fi
+TEST=0
+USE_MYSQL=0
+MYSQL_PASS=nova
+USE_LDAP=0
+LIBVIRT_TYPE=qemu
+
+if [ "$USE_MYSQL" == 1 ]; then
+ SQL_CONN=mysql://root:$MYSQL_PASS@localhost/nova
+else
+ SQL_CONN=sqlite:///$NOVA_DIR/nova.sqlite
+fi
+
+if [ "$USE_LDAP" == 1 ]; then
+ AUTH=ldapdriver.LdapDriver
+else
+ AUTH=dbdriver.DbDriver
+fi
+
+mkdir -p /etc/nova
+cat >/etc/nova/nova-manage.conf << NOVA_CONF_EOF
+--verbose
+--nodaemon
+--dhcpbridge_flagfile=/etc/nova/nova-manage.conf
+--FAKE_subdomain=ec2
+--cc_host=$HOST_IP
+--routing_source_ip=$HOST_IP
+--sql_connection=$SQL_CONN
+--auth_driver=nova.auth.$AUTH
+--libvirt_type=$LIBVIRT_TYPE
+NOVA_CONF_EOF
+
+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/ppa
+ sudo apt-get update
+ sudo apt-get install -y dnsmasq open-iscsi kpartx kvm gawk iptables ebtables
+ sudo apt-get install -y user-mode-linux kvm libvirt-bin
+ sudo apt-get install -y screen iscsitarget euca2ools vlan curl rabbitmq-server
+ sudo modprobe kvm
+ sudo /etc/init.d/libvirt-bin restart
+ 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-tornado python-ipy
+ sudo apt-get install -y python-libvirt python-libxml2 python-routes
+ 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 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
+ screen -d -m -S nova -t nova
+ sleep 1
+ if [ "$USE_MYSQL" == 1 ]; then
+ mysql -p$MYSQL_PASS -e 'DROP DATABASE nova;'
+ mysql -p$MYSQL_PASS -e 'CREATE DATABASE nova;'
+ else
+ rm $NOVA_DIR/nova.sqlite
+ fi
+ if [ "$USE_LDAP" == 1 ]; then
+ sudo $NOVA_DIR/nova/auth/slap.sh
+ fi
+ rm -rf $NOVA_DIR/instances
+ mkdir -p $NOVA_DIR/instances
+ rm -rf $NOVA_DIR/networks
+ mkdir -p $NOVA_DIR/networks
+ $NOVA_DIR/tools/clean-vlans
+ if [ ! -d "$NOVA_DIR/images" ]; then
+ ln -s $DIR/images $NOVA_DIR/images
+ fi
+
+ if [ "$TEST" == 1 ]; then
+ cd $NOVA_DIR
+ python $NOVA_DIR/run_tests.py
+ cd $DIR
+ fi
+
+ # create an admin user called 'admin'
+ $NOVA_DIR/bin/nova-manage user admin admin admin admin
+ # create a project called 'admin' with project manager of 'admin'
+ $NOVA_DIR/bin/nova-manage project create admin admin
+ # export environment variables for project 'admin' and user 'admin'
+ $NOVA_DIR/bin/nova-manage project environment admin admin $NOVA_DIR/novarc
+ # create 3 small networks
+ $NOVA_DIR/bin/nova-manage network create 10.0.0.0/8 3 16
+
+ # nova api crashes if we start it with a regular screen command,
+ # so send the start command by forcing text into the window.
+ screen_it api "$NOVA_DIR/bin/nova-api --flagfile=/etc/nova/nova-manage.conf"
+ screen_it objectstore "$NOVA_DIR/bin/nova-objectstore --flagfile=/etc/nova/nova-manage.conf"
+ screen_it compute "$NOVA_DIR/bin/nova-compute --flagfile=/etc/nova/nova-manage.conf"
+ screen_it network "$NOVA_DIR/bin/nova-network --flagfile=/etc/nova/nova-manage.conf"
+ screen_it scheduler "$NOVA_DIR/bin/nova-scheduler --flagfile=/etc/nova/nova-manage.conf"
+ screen_it volume "$NOVA_DIR/bin/nova-volume --flagfile=/etc/nova/nova-manage.conf"
+ screen_it test ". $NOVA_DIR/novarc"
+ screen -x
+fi
+
+if [ "$CMD" == "run" ] || [ "$CMD" == "terminate" ]; then
+ # shutdown instances
+ . $NOVA_DIR/novarc; euca-describe-instances | grep i- | cut -f2 | xargs euca-terminate-instances
+ sleep 2
+fi
+
+if [ "$CMD" == "run" ] || [ "$CMD" == "clean" ]; then
+ screen -S nova -X quit
+ rm *.pid*
+ $NOVA_DIR/tools/setup_iptables.sh clear
+fi
+
+if [ "$CMD" == "scrub" ]; then
+ $NOVA_DIR/tools/clean-vlans
+ if [ "$LIBVIRT_TYPE" == "uml" ]; then
+ virsh -c uml:///system list | grep i- | awk '{print \$1}' | xargs -n1 virsh -c uml:///system destroy
+ else
+ virsh list | grep i- | awk '{print \$1}' | xargs -n1 virsh destroy
+ fi
+ vblade-persist ls | grep vol- | awk '{print \$1\" \"\$2}' | xargs -n2 vblade-persist destroy
+fi
diff --git a/doc/source/quickstart.rst b/doc/source/quickstart.rst
index 7a41d4be6..91e3c9ccb 100644
--- a/doc/source/quickstart.rst
+++ b/doc/source/quickstart.rst
@@ -16,6 +16,81 @@
under the License.
Nova Quickstart
-=========================
+===============
-http://github.com/vishvananda/novascript
+The `contrib/novascript.sh` file in the source distribution is a script that
+will quickly set up nova to run on a single machine. It is tested against
+Ubuntu only, but other distributions are forthcoming.
+
+Usage
+-----
+
+Unless you want to spend a lot of time fiddling with permissions and sudoers,
+you should probably run nova as root.
+
+::
+
+ sudo -i
+
+If you are concerned about security, nova runs just fine inside a virtual
+machine.
+
+Use the script to install and run the current trunk. You can also specify a
+specific branch by putting `lp:~someone/nova/some-branch` after the branch
+command
+
+::
+
+ ./nova.sh branch
+ ./nova.sh install
+ ./nova.sh run
+
+The run command will drop you into a screen session with all of the workers
+running in different windows You can use eucatools to run commands against the
+cloud.
+
+::
+
+ euca-add-keypair test > test.pem
+ euca-run-instances -k test -t m1.tiny ami-tiny
+ euca-describe-instances
+
+To see output from the various workers, switch screen windows
+
+::
+
+ <ctrl-a> "
+
+will give you a list of running windows.
+
+When the instance is running, you should be able to ssh to it.
+
+::
+
+ chmod 600 test.pem
+ ssh -i test.pem root@10.0.0.3
+
+When you exit screen
+
+::
+
+ <ctrl-a> <ctrl-d>
+
+nova will terminate. It may take a while for nova to finish cleaning up. If
+you exit the process before it is done because there were some problems in your
+build, you may have to clean up the nova processes manually. If you had any
+instances running, you can attempt to kill them through the api:
+
+::
+
+ ./nova.sh terminate
+
+Then you can destroy the screen:
+
+::
+
+ ./nova.sh clean
+
+If things get particularly messed up, you might need to do some more intense
+cleanup. Be careful, the following command will manually destroy all runnning
+virsh instances and attempt to delete all vlans and bridges.