diff --git a/files/keystone_data.sh b/files/keystone_data.sh index a6fab09926..15d61bcd0d 100755 --- a/files/keystone_data.sh +++ b/files/keystone_data.sh @@ -122,6 +122,30 @@ if [[ "$ENABLED_SERVICES" =~ "g-api" ]]; then fi fi +# SAVANNA +if [[ "$ENABLED_SERVICES" =~ "savanna" ]]; then + SAVANNA_USER=$(get_id keystone user-create \ + --name=savanna \ + --pass="$SERVICE_PASSWORD" \ + --tenant_id $SERVICE_TENANT \ + --email=savanna@example.com) + keystone user-role-add \ + --tenant_id $SERVICE_TENANT \ + --user_id $SAVANNA_USER \ + --role_id $ADMIN_ROLE + + SAVANNA_SERVICE=$(get_id keystone service-create \ + --name=savanna \ + --type=mapreduce \ + --description="MapReduce Service") + keystone endpoint-create \ + --region RegionOne \ + --service_id $SAVANNA_SERVICE \ + --publicurl "http://$SERVICE_HOST:8080/v0.2/%(tenant_id)s" \ + --adminurl "http://$SERVICE_HOST:8080/v0.2/%(tenant_id)s" \ + --internalurl "http://$SERVICE_HOST:80800/v0.2/%(tenant_id)s" +fi + # Swift if [[ "$ENABLED_SERVICES" =~ "swift" ]]; then SWIFT_USER=$(get_id keystone user-create \ @@ -219,3 +243,4 @@ if [[ "$ENABLED_SERVICES" =~ "tempest" ]]; then --user_id $ALT_DEMO_USER \ --role_id $MEMBER_ROLE fi + diff --git a/functions b/functions index f5032d59d0..d89d518d33 100644 --- a/functions +++ b/functions @@ -1006,6 +1006,16 @@ function upload_image() { CONTAINER_FORMAT="" UNPACK="" case "$IMAGE_FNAME" in + *.qcow2.tar.gz) + IMAGE_NAME="${IMAGE_FNAME%.qcow2.tar.gz}" + xdir="$FILES/images/$IMAGE_NAME" + rm -Rf "$xdir"; + mkdir "$xdir" + tar -zxf $FILES/$IMAGE_FNAME -C "$xdir" + IMAGE="$xdir/$IMAGE_NAME.img" + DISK_FORMAT=qcow2 + CONTAINER_FORMAT=bare + ;; *.tar.gz|*.tgz) # Extract ami and aki files [ "${IMAGE_FNAME%.tar.gz}" != "$IMAGE_FNAME" ] && diff --git a/lib/savanna b/lib/savanna new file mode 100644 index 0000000000..48a0458ec8 --- /dev/null +++ b/lib/savanna @@ -0,0 +1,78 @@ +# lib/savanna +# Functions to control the configuration and operation of the EHO service +# + +# ``stack.sh`` calls the entry points in this order: +# +# install_svanna +# configure_savanna +# init_savanna +# start_savanna +# stop_savanna +# cleanup_savanna + +# Save trace setting +XTRACE=$(set +o | grep xtrace) +set +o xtrace + +source $TOP_DIR/openrc + +# Defaults +# -------- + +# + +# Set up default directories +SAVANNA_DIR=$DEST/savanna + +if [[ -d $SAVANNA_DIR/bin ]]; then + SAVANNA_BIN_DIR=$SAVANNA_DIR/bin +else + SAVANNA_BIN_DIR=$(get_python_exec_prefix) +fi + +# Entry Points +# ------------ + +function cleanup_savanna() { + echo "SAVANNA has been cleaned" +} + +function configure_savanna() { + setup_develop $SAVANNA_DIR + + echo " +[DEFAULT] +allow_cluster_ops=true + +os_auth_host=127.0.0.1 +os_admin_password=$OS_PASSWORD + +[cluster_node] +use_floating_ips=false +[sqlalchemy] + +" > $SAVANNA_DIR/etc/savanna/savanna.conf +} + +function init_savanna() { + echo "init savanna" + $SAVANNA_BIN_DIR/savanna-manage --config-file $SAVANNA_DIR/etc/savanna/savanna.conf reset-db --with-gen-templates +} + +function install_savanna() { + git_clone $SAVANNA_REPO $SAVANNA_DIR $SAVANNA_BRANCH $SAVANNA_TAG +} + +function start_savanna() { + screen_it savanna "cd $SAVANNA_DIR && $SAVANNA_BIN_DIR/savanna-api --config-file $SAVANNA_DIR/etc/savanna/savanna.conf" +} + +function stop_savanna() { + for serv in savanna; do + screen -S $SCREEN_NAME -p $serv -X kill + done +} + +# Restore xtrace +$XTRACE diff --git a/stack.sh b/stack.sh index c39d855bd2..682dfc9341 100755 --- a/stack.sh +++ b/stack.sh @@ -283,6 +283,7 @@ source $TOP_DIR/lib/heat source $TOP_DIR/lib/quantum source $TOP_DIR/lib/baremetal source $TOP_DIR/lib/ldap +source $TOP_DIR/lib/savanna # Set the destination directories for OpenStack projects HORIZON_DIR=$DEST/horizon @@ -290,6 +291,7 @@ OPENSTACKCLIENT_DIR=$DEST/python-openstackclient NOVNC_DIR=$DEST/noVNC SPICE_DIR=$DEST/spice-html5 SWIFT3_DIR=$DEST/swift3 +SAVANNA_DIR=$DEST/savanna # Should cinder perform secure deletion of volumes? # Defaults to true, can be set to False to avoid this bug when testing: @@ -712,6 +714,9 @@ if is_service_enabled ceilometer; then install_ceilometerclient install_ceilometer fi +if is_service_enabled savanna; then + install_savanna +fi # Initialization @@ -777,6 +782,10 @@ if is_service_enabled tls-proxy; then # don't be naive and add to existing line! fi +if is_service_enabled savanna; then + configure_savanna +fi + # Syslog # ------ @@ -1342,6 +1351,21 @@ if is_service_enabled heat; then echo "Heat has replaced the default flavors. View by running: nova flavor-list" fi +if is_service_enabled savanna; then + echo_summary "Uploading SAVANNA images" + + TOKEN=$(keystone token-get | grep ' id ' | get_field 2) + for savanna_image_url in ${SAVANNA_IMAGE_URLS//,/ }; do + upload_image $savanna_image_url $TOKEN + done + + echo_summary "Configuring SAVANNA" + init_savanna + + echo_summary "Starting SAVANNA" + start_savanna +fi + # If Keystone is present you can point ``nova`` cli to this server if is_service_enabled key; then echo "Keystone is serving at $KEYSTONE_AUTH_PROTOCOL://$SERVICE_HOST:$KEYSTONE_SERVICE_PORT/v2.0/" diff --git a/stackrc b/stackrc index d418a0ec5a..967202f288 100644 --- a/stackrc +++ b/stackrc @@ -21,7 +21,7 @@ fi # ``disable_service`` functions in ``localrc``. # For example, to enable Swift add this to ``localrc``: # enable_service swift -ENABLED_SERVICES=g-api,g-reg,key,n-api,n-crt,n-obj,n-cpu,n-net,n-cond,cinder,c-sch,c-api,c-vol,n-sch,n-novnc,n-xvnc,n-cauth,horizon,rabbit,tempest,mysql +ENABLED_SERVICES=g-api,g-reg,key,n-api,n-crt,n-obj,n-cpu,n-net,n-cond,cinder,c-sch,c-api,c-vol,n-sch,n-novnc,n-xvnc,n-cauth,horizon,savanna,rabbit,tempest,mysql # Set the default Nova APIs to enable NOVA_ENABLED_APIS=ec2,osapi_compute,metadata @@ -91,7 +91,7 @@ SPICE_REPO=http://anongit.freedesktop.org/git/spice/spice-html5.git SPICE_BRANCH=master # django powered web control panel for openstack -HORIZON_REPO=${GIT_BASE}/openstack/horizon.git +HORIZON_REPO=${GIT_BASE}/Frostman/eho-horizon.git HORIZON_BRANCH=master # python client library to nova that horizon (and others) use @@ -198,3 +198,7 @@ VOLUME_BACKING_FILE_SIZE=${VOLUME_BACKING_FILE_SIZE:-5130M} PRIVATE_NETWORK_NAME=${PRIVATE_NETWORK_NAME:-"private"} PUBLIC_NETWORK_NAME=${PUBLIC_NETWORK_NAME:-"nova"} + +# savanna confs +SAVANNA_REPO=${GIT_BASE}/stackforge/savanna.git +SAVANNA_BRANCH=master diff --git a/unstack.sh b/unstack.sh index a086d5c620..84998c9f52 100755 --- a/unstack.sh +++ b/unstack.sh @@ -30,6 +30,7 @@ source $TOP_DIR/lib/cinder source $TOP_DIR/lib/horizon source $TOP_DIR/lib/swift source $TOP_DIR/lib/quantum +source $TOP_DIR/lib/savanna # Determine what system we are running on. This provides ``os_VENDOR``, # ``os_RELEASE``, ``os_UPDATE``, ``os_PACKAGE``, ``os_CODENAME`` @@ -110,3 +111,7 @@ if is_service_enabled quantum; then stop_quantum stop_quantum_third_party fi + +if is_service_enabled savanna; then + stop_savanna +fi