blob: 2f93ab556cc11f48228fa9880783fde61662838e [file] [log] [blame]
Jesse Andrewsba23cc72011-09-11 03:22:13 -07001#!/usr/bin/env bash
2
Dean Troyerc6c1d432012-03-27 20:59:22 -05003# ``stack.sh`` is an opinionated OpenStack developer installation. It
Dean Troyer4a43b7b2012-08-28 17:43:40 -05004# installs and configures various combinations of **Ceilometer**, **Cinder**,
Nikhil Manchanda0cccad42012-12-03 18:15:09 -07005# **Glance**, **Heat**, **Horizon**, **Keystone**, **Nova**, **Neutron**,
Dean Troyerfc744f92014-01-27 13:45:21 -06006# and **Swift**
Jesse Andrewsba23cc72011-09-11 03:22:13 -07007
Brett Campbell27f29442014-02-19 18:23:16 -08008# This script's options can be changed by setting appropriate environment
9# variables. You can configure things like which git repositories to use,
10# services to enable, OS images to use, etc. Default values are located in the
11# ``stackrc`` file. If you are crafty you can run the script on multiple nodes
12# using shared settings for common resources (eg., mysql or rabbitmq) and build
13# a multi-node developer install.
Jesse Andrews782b9912011-10-02 16:53:21 -040014
Dean Troyer4a43b7b2012-08-28 17:43:40 -050015# To keep this script simple we assume you are running on a recent **Ubuntu**
Alvaro Lopez Ortegad7f60902013-12-22 17:03:47 +010016# (12.04 Precise or newer) or **Fedora** (F18 or newer) machine. (It may work
Dean Troyer1a6d4492013-06-03 16:47:36 -050017# on other platforms but support for those platforms is left to those who added
18# them to DevStack.) It should work in a VM or physical server. Additionally
19# we maintain a list of ``apt`` and ``rpm`` dependencies and other configuration
20# files in this repo.
Jesse Andrews24859062011-09-15 21:28:23 -070021
Jesse Andrews0e7e8972011-10-02 16:36:54 -040022# Learn more and get the most recent version at http://devstack.org
Jesse Andrews6edd17f2011-09-15 22:19:42 -070023
Jason Dunsmore4e971112013-04-10 10:17:40 -050024# Make sure custom grep options don't get in the way
25unset GREP_OPTIONS
26
YAMAMOTO Takashib4a215c2014-01-10 16:39:32 +090027# Sanitize language settings to avoid commands bailing out
28# with "unsupported locale setting" errors.
29unset LANG
30unset LANGUAGE
31LC_ALL=C
32export LC_ALL
33
Brett Campbell27f29442014-02-19 18:23:16 -080034# Make sure umask is sane
35umask 022
36
Dean Troyerc6c1d432012-03-27 20:59:22 -050037# Keep track of the devstack directory
Jesse Andrews51fb22e2011-10-19 09:24:17 -070038TOP_DIR=$(cd $(dirname "$0") && pwd)
39
Dean Troyerd3bf9bd2014-07-25 10:20:19 -050040
41# Sanity Checks
42# -------------
43
44# Clean up last environment var cache
45if [[ -r $TOP_DIR/.stackenv ]]; then
46 rm $TOP_DIR/.stackenv
47fi
48
49# ``stack.sh`` keeps the list of ``apt`` and ``rpm`` dependencies and config
50# templates and other useful files in the ``files`` subdirectory
51FILES=$TOP_DIR/files
52if [ ! -d $FILES ]; then
53 die $LINENO "missing devstack/files"
54fi
55
56# ``stack.sh`` keeps function libraries here
57# Make sure ``$TOP_DIR/lib`` directory is present
58if [ ! -d $TOP_DIR/lib ]; then
59 die $LINENO "missing devstack/lib"
60fi
61
62# Check if run as root
63# OpenStack is designed to be run as a non-root user; Horizon will fail to run
64# as **root** since Apache will not serve content from **root** user).
65# ``stack.sh`` must not be run as **root**. It aborts and suggests one course of
66# action to create a suitable user account.
67
68if [[ $EUID -eq 0 ]]; then
69 echo "You are running this script as root."
70 echo "Cut it out."
71 echo "Really."
72 echo "If you need an account to run DevStack, do this (as root, heh) to create $STACK_USER:"
73 echo "$TOP_DIR/tools/create-stack-user.sh"
74 exit 1
75fi
76
77# Check to see if we are already running DevStack
78# Note that this may fail if USE_SCREEN=False
79if type -p screen >/dev/null && screen -ls | egrep -q "[0-9].$SCREEN_NAME"; then
80 echo "You are already running a stack.sh session."
81 echo "To rejoin this session type 'screen -x stack'."
82 echo "To destroy this session, type './unstack.sh'."
83 exit 1
84fi
85
86
87# Prepare the environment
88# -----------------------
89
Dean Troyer6563a3c2012-01-31 12:11:56 -060090# Import common functions
Dean Troyerc6c1d432012-03-27 20:59:22 -050091source $TOP_DIR/functions
Dean Troyer6563a3c2012-01-31 12:11:56 -060092
Dean Troyer893e6632013-09-13 15:05:51 -050093# Import config functions
94source $TOP_DIR/lib/config
95
Dean Troyerc6c1d432012-03-27 20:59:22 -050096# Determine what system we are running on. This provides ``os_VENDOR``,
97# ``os_RELEASE``, ``os_UPDATE``, ``os_PACKAGE``, ``os_CODENAME``
Dean Troyera9e0a482012-07-09 14:07:23 -050098# and ``DISTRO``
99GetDistro
Jesse Andrews6edd17f2011-09-15 22:19:42 -0700100
Dean Troyerd3bf9bd2014-07-25 10:20:19 -0500101# Warn users who aren't on an explicitly supported distro, but allow them to
102# override check and attempt installation with ``FORCE=yes ./stack``
103if [[ ! ${DISTRO} =~ (precise|trusty|7.0|wheezy|sid|testing|jessie|f19|f20|rhel6|rhel7) ]]; then
104 echo "WARNING: this script has not been tested on $DISTRO"
105 if [[ "$FORCE" != "yes" ]]; then
106 die $LINENO "If you wish to run this script anyway run with FORCE=yes"
107 fi
108fi
109
Maru Newbyeb2da5d2013-05-15 21:28:29 +0000110
Dean Troyer48352ee2012-12-12 12:50:38 -0600111# Global Settings
Dean Troyer0e8dced2014-07-25 10:33:21 -0500112# ---------------
Scott Moserf9da5082011-10-07 21:28:00 -0400113
Dean Troyer893e6632013-09-13 15:05:51 -0500114# Check for a ``localrc`` section embedded in ``local.conf`` and extract if
115# ``localrc`` does not already exist
116
117# Phase: local
118rm -f $TOP_DIR/.localrc.auto
119if [[ -r $TOP_DIR/local.conf ]]; then
120 LRC=$(get_meta_section_files $TOP_DIR/local.conf local)
121 for lfile in $LRC; do
122 if [[ "$lfile" == "localrc" ]]; then
123 if [[ -r $TOP_DIR/localrc ]]; then
124 warn $LINENO "localrc and local.conf:[[local]] both exist, using localrc"
125 else
Dean Troyerb8dd27b2013-10-17 12:03:55 -0500126 echo "# Generated file, do not edit" >$TOP_DIR/.localrc.auto
Dean Troyer893e6632013-09-13 15:05:51 -0500127 get_meta_section $TOP_DIR/local.conf local $lfile >>$TOP_DIR/.localrc.auto
128 fi
129 fi
130 done
131fi
132
Dean Troyer1a6d4492013-06-03 16:47:36 -0500133# ``stack.sh`` is customizable by setting environment variables. Override a
134# default setting via export::
Scott Moserf9da5082011-10-07 21:28:00 -0400135#
Terry Wilson428af5a2012-11-01 16:12:39 -0400136# export DATABASE_PASSWORD=anothersecret
Scott Moserf9da5082011-10-07 21:28:00 -0400137# ./stack.sh
138#
Dean Troyer1a6d4492013-06-03 16:47:36 -0500139# or by setting the variable on the command line::
Scott Moserf9da5082011-10-07 21:28:00 -0400140#
Dean Troyer1a6d4492013-06-03 16:47:36 -0500141# DATABASE_PASSWORD=simple ./stack.sh
142#
143# Persistent variables can be placed in a ``localrc`` file::
Scott Moserf9da5082011-10-07 21:28:00 -0400144#
Terry Wilson428af5a2012-11-01 16:12:39 -0400145# DATABASE_PASSWORD=anothersecret
146# DATABASE_USER=hellaroot
Scott Moserf9da5082011-10-07 21:28:00 -0400147#
148# We try to have sensible defaults, so you should be able to run ``./stack.sh``
Dean Troyer4a43b7b2012-08-28 17:43:40 -0500149# in most cases. ``localrc`` is not distributed with DevStack and will never
150# be overwritten by a DevStack update.
Scott Moserf9da5082011-10-07 21:28:00 -0400151#
Dean Troyerdf0972c2012-03-07 17:31:03 -0600152# DevStack distributes ``stackrc`` which contains locations for the OpenStack
Dean Troyercc6b4432013-04-08 15:38:03 -0500153# repositories, branches to configure, and other configuration defaults.
154# ``stackrc`` sources ``localrc`` to allow you to safely override those settings.
Dean Troyer4a43b7b2012-08-28 17:43:40 -0500155
Dean Troyerbbafb1b2012-06-11 16:51:39 -0500156if [[ ! -r $TOP_DIR/stackrc ]]; then
Dean Troyer14fd9792014-07-25 10:34:11 -0500157 die $LINENO "missing $TOP_DIR/stackrc - did you grab more than just stack.sh?"
Dean Troyerbbafb1b2012-06-11 16:51:39 -0500158fi
159source $TOP_DIR/stackrc
Dean Troyerdf0972c2012-03-07 17:31:03 -0600160
Dean Troyer4a43b7b2012-08-28 17:43:40 -0500161
Dean Troyer48352ee2012-12-12 12:50:38 -0600162# Local Settings
Dean Troyer4a43b7b2012-08-28 17:43:40 -0500163# --------------
164
Dean Troyer48352ee2012-12-12 12:50:38 -0600165# Make sure the proxy config is visible to sub-processes
166export_proxy_variables
Scott Moserf9da5082011-10-07 21:28:00 -0400167
Doug Hellmannf04178f2012-07-05 17:10:03 -0400168# Remove services which were negated in ENABLED_SERVICES
Joe Gordon6fd28112012-11-13 16:55:41 -0800169# using the "-" prefix (e.g., "-rabbit") instead of
Doug Hellmannf04178f2012-07-05 17:10:03 -0400170# calling disable_service().
171disable_negated_services
Chmouel Boudjnahc4cd4142012-06-27 11:01:40 +0200172
Dean Troyera79617c2014-04-13 18:16:54 -0500173# Look for obsolete stuff
JordanPea9c24b2014-04-28 08:38:34 +0000174if [[ ,${ENABLED_SERVICES}, =~ ,"swift", ]]; then
Dean Troyera79617c2014-04-13 18:16:54 -0500175 echo "FATAL: 'swift' is not supported as a service name"
Gael Chamoulaudd3121f62014-07-24 23:53:02 +0200176 echo "FATAL: Use the actual swift service names to enable them as required:"
Dean Troyera79617c2014-04-13 18:16:54 -0500177 echo "FATAL: s-proxy s-object s-container s-account"
178 exit 1
179fi
180
Dean Troyer0e8dced2014-07-25 10:33:21 -0500181# Set up logging level
182VERBOSE=$(trueorfalse True $VERBOSE)
Russell Bryant4a221452012-03-13 13:44:12 -0400183
Dean Troyerd3bf9bd2014-07-25 10:20:19 -0500184# Configure sudo
185# --------------
Dean Troyer9122e7b2011-10-17 14:07:11 -0500186
Dean Troyer23f69d82013-10-04 12:35:24 -0500187# We're not **root**, make sure ``sudo`` is available
188is_package_installed sudo || install_package sudo
189
190# UEC images ``/etc/sudoers`` does not have a ``#includedir``, add one
191sudo grep -q "^#includedir.*/etc/sudoers.d" /etc/sudoers ||
192 echo "#includedir /etc/sudoers.d" | sudo tee -a /etc/sudoers
193
194# Set up devstack sudoers
195TEMPFILE=`mktemp`
196echo "$STACK_USER ALL=(root) NOPASSWD:ALL" >$TEMPFILE
197# Some binaries might be under /sbin or /usr/sbin, so make sure sudo will
198# see them by forcing PATH
199echo "Defaults:$STACK_USER secure_path=/sbin:/usr/sbin:/usr/bin:/bin:/usr/local/sbin:/usr/local/bin" >> $TEMPFILE
Adam Gandelmanea2fcb52014-03-17 16:37:56 -0700200echo "Defaults:$STACK_USER !requiretty" >> $TEMPFILE
Dean Troyer23f69d82013-10-04 12:35:24 -0500201chmod 0440 $TEMPFILE
202sudo chown root:root $TEMPFILE
203sudo mv $TEMPFILE /etc/sudoers.d/50_stack_sh
204
Dean Troyer0e8dced2014-07-25 10:33:21 -0500205
206# Configure Distro Repositories
207# -----------------------------
Ian Wienand531aeb72014-02-28 11:24:29 +1100208
Sean Daguee83f7782014-06-23 08:11:05 -0400209# For debian/ubuntu make apt attempt to retry network ops on it's own
210if is_ubuntu; then
Chmouel Boudjnah9246d962014-06-30 12:52:51 +0000211 echo 'APT::Acquire::Retries "20";' | sudo tee /etc/apt/apt.conf.d/80retry >/dev/null
Sean Daguee83f7782014-06-23 08:11:05 -0400212fi
213
Ian Wienandbdc90c52014-08-04 15:44:58 +1000214# upstream Rackspace centos7 images have an issue where cloud-init is
215# installed via pip because there were not official packages when the
216# image was created (fix in the works). Remove all pip packages
217# before we do anything else
218if [[ $DISTRO = "rhel7" && is_rackspace ]]; then
219 (sudo pip freeze | xargs sudo pip uninstall -y) || true
220fi
221
Ian Wienand531aeb72014-02-28 11:24:29 +1100222# Some distros need to add repos beyond the defaults provided by the vendor
223# to pick up required packages.
224
Ian Wienanda36167e2014-08-04 14:11:26 +1000225if [[ is_fedora && $DISTRO == "rhel6" ]]; then
Attila Fazekas6d227a42014-04-09 14:42:42 +0200226 # Installing Open vSwitch on RHEL requires enabling the RDO repo.
227 RHEL6_RDO_REPO_RPM=${RHEL6_RDO_REPO_RPM:-"http://rdo.fedorapeople.org/openstack-icehouse/rdo-release-icehouse.rpm"}
228 RHEL6_RDO_REPO_ID=${RHEL6_RDO_REPO_ID:-"openstack-icehouse"}
Ian Wienand531aeb72014-02-28 11:24:29 +1100229 if ! sudo yum repolist enabled $RHEL6_RDO_REPO_ID | grep -q $RHEL6_RDO_REPO_ID; then
230 echo "RDO repo not detected; installing"
231 yum_install $RHEL6_RDO_REPO_RPM || \
232 die $LINENO "Error installing RDO repo, cannot continue"
233 fi
Ian Wienanda36167e2014-08-04 14:11:26 +1000234fi
235
236if [[ is_fedora && ( $DISTRO == "rhel6" || $DISTRO == "rhel7" ) ]]; then
Attila Fazekas6d227a42014-04-09 14:42:42 +0200237 # RHEL requires EPEL for many Open Stack dependencies
Ian Wienanda36167e2014-08-04 14:11:26 +1000238 if [[ $DISTRO == "rhel7" ]]; then
Brad P. Crochete66da492014-06-23 08:16:56 -0400239 EPEL_RPM=${RHEL7_EPEL_RPM:-"http://dl.fedoraproject.org/pub/epel/beta/7/x86_64/epel-release-7-0.2.noarch.rpm"}
Ian Wienanda36167e2014-08-04 14:11:26 +1000240 elif [[ $DISTRO == "rhel6" ]]; then
Attila Fazekas6d227a42014-04-09 14:42:42 +0200241 EPEL_RPM=${RHEL6_EPEL_RPM:-"http://dl.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm"}
242 fi
Ian Wienand531aeb72014-02-28 11:24:29 +1100243 if ! sudo yum repolist enabled epel | grep -q 'epel'; then
244 echo "EPEL not detected; installing"
Attila Fazekas6d227a42014-04-09 14:42:42 +0200245 yum_install ${EPEL_RPM} || \
Ian Wienand531aeb72014-02-28 11:24:29 +1100246 die $LINENO "Error installing EPEL repo, cannot continue"
247 fi
248
249 # ... and also optional to be enabled
250 is_package_installed yum-utils || install_package yum-utils
Ian Wienanda36167e2014-08-04 14:11:26 +1000251 if [[ $DISTRO == "rhel7" ]]; then
Brad P. Crochetc3599212014-06-16 10:27:19 -0400252 OPTIONAL_REPO=rhel-7-server-optional-rpms
Ian Wienanda36167e2014-08-04 14:11:26 +1000253 elif [[ $DISTRO == "rhel6" ]]; then
Brad P. Crochetc3599212014-06-16 10:27:19 -0400254 OPTIONAL_REPO=rhel-6-server-optional-rpms
255 fi
256 sudo yum-config-manager --enable ${OPTIONAL_REPO}
Ian Wienand531aeb72014-02-28 11:24:29 +1100257fi
258
Dean Troyer0e8dced2014-07-25 10:33:21 -0500259
260# Configure Target Directories
261# ----------------------------
262
263# Destination path for installation ``DEST``
264DEST=${DEST:-/opt/stack}
Dean Troyer23f69d82013-10-04 12:35:24 -0500265
Dean Troyere26232b2012-06-27 17:55:15 -0500266# Create the destination directory and ensure it is writable by the user
Bob Ball376b6312013-07-29 13:10:25 +0100267# and read/executable by everybody for daemons (e.g. apache run for horizon)
Dean Troyere26232b2012-06-27 17:55:15 -0500268sudo mkdir -p $DEST
Doug Hellmanne7002672013-09-05 08:10:07 -0400269safe_chown -R $STACK_USER $DEST
270safe_chmod 0755 $DEST
Dean Troyere26232b2012-06-27 17:55:15 -0500271
Ian Wienand0488edd2013-04-11 12:04:36 +1000272# a basic test for $DEST path permissions (fatal on error unless skipped)
273check_path_perm_sanity ${DEST}
274
Dean Troyer0e8dced2014-07-25 10:33:21 -0500275# Destination path for service data
276DATA_DIR=${DATA_DIR:-${DEST}/data}
277sudo mkdir -p $DATA_DIR
278safe_chown -R $STACK_USER $DATA_DIR
279
280# Configure proper hostname
Ben Nemec3ee52c82013-12-12 19:26:12 +0000281# Certain services such as rabbitmq require that the local hostname resolves
282# correctly. Make sure it exists in /etc/hosts so that is always true.
283LOCAL_HOSTNAME=`hostname -s`
284if [ -z "`grep ^127.0.0.1 /etc/hosts | grep $LOCAL_HOSTNAME`" ]; then
285 sudo sed -i "s/\(^127.0.0.1.*\)/\1 $LOCAL_HOSTNAME/" /etc/hosts
286fi
287
Ian Wienand531aeb72014-02-28 11:24:29 +1100288
289# Common Configuration
290# --------------------
291
Dean Troyer4a43b7b2012-08-28 17:43:40 -0500292# Set ``OFFLINE`` to ``True`` to configure ``stack.sh`` to run cleanly without
293# Internet access. ``stack.sh`` must have been previously run with Internet
294# access to install prerequisites and fetch repositories.
Dean Troyer25dab662011-12-16 22:40:46 -0600295OFFLINE=`trueorfalse False $OFFLINE`
296
Dean Troyer4a43b7b2012-08-28 17:43:40 -0500297# Set ``ERROR_ON_CLONE`` to ``True`` to configure ``stack.sh`` to exit if
298# the destination git repository does not exist during the ``git_clone``
299# operation.
James E. Blair94cb9602012-06-22 15:28:29 -0700300ERROR_ON_CLONE=`trueorfalse False $ERROR_ON_CLONE`
301
Ben Nemec03997942013-08-10 09:56:16 -0500302# Whether to enable the debug log level in OpenStack services
303ENABLE_DEBUG_LOG_LEVEL=`trueorfalse True $ENABLE_DEBUG_LOG_LEVEL`
304
Vishvananda Ishayac9ad14b2012-07-03 20:29:01 +0000305# Set fixed and floating range here so we can make sure not to use addresses
Dean Troyer4a43b7b2012-08-28 17:43:40 -0500306# from either range when attempting to guess the IP to use for the host.
307# Note that setting FIXED_RANGE may be necessary when running DevStack
Dean Troyerd81a0272012-08-31 18:04:55 -0500308# in an OpenStack cloud that uses either of these address ranges internally.
Salvatore Orlando90234ac2013-11-25 05:44:10 -0800309FLOATING_RANGE=${FLOATING_RANGE:-172.24.4.0/24}
Dean Troyerd81a0272012-08-31 18:04:55 -0500310FIXED_RANGE=${FIXED_RANGE:-10.0.0.0/24}
311FIXED_NETWORK_SIZE=${FIXED_NETWORK_SIZE:-256}
Vishvananda Ishayac9ad14b2012-07-03 20:29:01 +0000312
Dean Troyerc892bde2013-03-13 14:06:13 -0500313HOST_IP=$(get_default_host_ip $FIXED_RANGE $FLOATING_RANGE "$HOST_IP_IFACE" "$HOST_IP")
314if [ "$HOST_IP" == "" ]; then
Newell Jensenccb3d102014-03-10 14:28:52 -0700315 die $LINENO "Could not determine host ip address. See local.conf for suggestions on setting HOST_IP."
Jesse Andrewsba23cc72011-09-11 03:22:13 -0700316fi
317
Anthony Young1097c7c2011-12-27 23:22:14 -0800318# Allow the use of an alternate hostname (such as localhost/127.0.0.1) for service endpoints.
319SERVICE_HOST=${SERVICE_HOST:-$HOST_IP}
Dean Troyercc6b4432013-04-08 15:38:03 -0500320
Dean Troyerdf0972c2012-03-07 17:31:03 -0600321# Configure services to use syslog instead of writing to individual log files
Dean Troyerff603ef2011-11-22 17:48:10 -0600322SYSLOG=`trueorfalse False $SYSLOG`
323SYSLOG_HOST=${SYSLOG_HOST:-$HOST_IP}
324SYSLOG_PORT=${SYSLOG_PORT:-516}
325
Sean Dague78096b52014-02-25 10:23:04 -0500326# for DSTAT logging
Sean Dague062cdaf2014-02-10 22:24:49 -0500327DSTAT_FILE=${DSTAT_FILE:-"dstat.txt"}
328
Dean Troyer4a43b7b2012-08-28 17:43:40 -0500329# Use color for logging output (only available if syslog is not used)
Vishvananda Ishaya6f13ba32012-06-01 23:17:38 +0000330LOG_COLOR=`trueorfalse True $LOG_COLOR`
331
Dean Troyer2bbcd682011-11-05 16:19:03 -0500332# Service startup timeout
333SERVICE_TIMEOUT=${SERVICE_TIMEOUT:-60}
334
Jamie Lennoxbd24a8d2013-09-20 16:26:42 +1000335# Reset the bundle of CA certificates
336SSL_BUNDLE_FILE="$DATA_DIR/ca-bundle.pem"
337rm -f $SSL_BUNDLE_FILE
338
Dean Troyer0e8dced2014-07-25 10:33:21 -0500339# Import common services (database, message queue) configuration
340source $TOP_DIR/lib/database
341source $TOP_DIR/lib/rpc_backend
342
343# Make sure we only have one rpc backend enabled,
344# and the specified rpc backend is available on your platform.
345check_rpc_backend
346
Dean Troyerd81a0272012-08-31 18:04:55 -0500347
348# Configure Projects
349# ==================
350
Brant Knudson0049c0c2014-01-16 18:16:48 -0600351# Import apache functions
zhang-hared98a5d02013-06-21 18:18:02 +0800352source $TOP_DIR/lib/apache
Brant Knudson0049c0c2014-01-16 18:16:48 -0600353
354# Import TLS functions
Dean Troyerc83a7e12012-11-29 11:47:58 -0600355source $TOP_DIR/lib/tls
Brant Knudson0049c0c2014-01-16 18:16:48 -0600356
357# Source project function libraries
Sean Dague0392a102013-07-31 13:07:45 -0400358source $TOP_DIR/lib/infra
Sean Dague1b6b5312013-07-31 06:46:34 -0400359source $TOP_DIR/lib/oslo
Sean Dague68322722013-10-21 18:11:40 -0400360source $TOP_DIR/lib/stackforge
Sean Dagueb562e6a2012-11-19 16:00:01 -0500361source $TOP_DIR/lib/horizon
Dean Troyerd81a0272012-08-31 18:04:55 -0500362source $TOP_DIR/lib/keystone
Dean Troyer73f6f252012-09-17 11:22:21 -0500363source $TOP_DIR/lib/glance
Dean Troyerbf67c192012-09-21 15:09:37 -0500364source $TOP_DIR/lib/nova
Dean Troyerd81a0272012-08-31 18:04:55 -0500365source $TOP_DIR/lib/cinder
Attila Fazekasece6a332012-11-29 14:19:41 +0100366source $TOP_DIR/lib/swift
Dean Troyerd81a0272012-08-31 18:04:55 -0500367source $TOP_DIR/lib/ceilometer
368source $TOP_DIR/lib/heat
Mark McClainb05c8762013-07-06 23:29:39 -0400369source $TOP_DIR/lib/neutron
Devananda van der Veenf35cf912012-11-12 17:58:38 -0800370source $TOP_DIR/lib/baremetal
Brad Topolf127e2f2013-01-22 10:17:50 -0600371source $TOP_DIR/lib/ldap
Dean Troyerd81a0272012-08-31 18:04:55 -0500372
Dean Troyercdf3d762013-10-15 09:42:43 -0500373# Extras Source
374# --------------
375
376# Phase: source
377if [[ -d $TOP_DIR/extras.d ]]; then
378 for i in $TOP_DIR/extras.d/*.sh; do
379 [[ -r $i ]] && source $i source
380 done
381fi
382
Dean Troyer1a6d4492013-06-03 16:47:36 -0500383# Set the destination directories for other OpenStack projects
Dean Troyer9f61d292012-11-26 18:56:20 +0000384OPENSTACKCLIENT_DIR=$DEST/python-openstackclient
Dean Troyerb7490da2013-03-18 16:07:56 -0500385
386# Interactive Configuration
387# -------------------------
388
389# Do all interactive config up front before the logging spew begins
James E. Blair213c4162012-11-06 09:38:36 +0100390
Anthony Young7a549f42011-10-12 07:13:13 +0000391# Generic helper to configure passwords
392function read_password {
Dean Troyer7903b792012-09-13 17:16:12 -0500393 XTRACE=$(set +o | grep xtrace)
Anthony Young7a549f42011-10-12 07:13:13 +0000394 set +o xtrace
395 var=$1; msg=$2
396 pw=${!var}
397
Sahid Orentino Ferdjaoui9e032c22014-02-10 11:36:25 +0100398 if [[ -f $RC_DIR/localrc ]]; then
399 localrc=$TOP_DIR/localrc
400 else
401 localrc=$TOP_DIR/.localrc.auto
402 fi
Anthony Young6015c822011-10-12 07:17:11 +0000403
Anthony Young7a549f42011-10-12 07:13:13 +0000404 # If the password is not defined yet, proceed to prompt user for a password.
405 if [ ! $pw ]; then
406 # If there is no localrc file, create one
Anthony Youngb4db2252011-10-12 14:08:08 -0700407 if [ ! -e $localrc ]; then
408 touch $localrc
Anthony Young7a549f42011-10-12 07:13:13 +0000409 fi
410
Vishvananda Ishaya9b353672011-10-20 10:07:10 -0700411 # Presumably if we got this far it can only be that our localrc is missing
Anthony Young7a549f42011-10-12 07:13:13 +0000412 # the required password. Prompt user for a password and write to localrc.
Anthony Youngb4db2252011-10-12 14:08:08 -0700413 echo ''
414 echo '################################################################################'
415 echo $msg
416 echo '################################################################################'
Dean Troyer4e6a2b72011-12-29 17:27:45 -0600417 echo "This value will be written to your localrc file so you don't have to enter it "
418 echo "again. Use only alphanumeric characters."
Anthony Youngb4db2252011-10-12 14:08:08 -0700419 echo "If you leave this blank, a random default value will be used."
Dean Troyer4e6a2b72011-12-29 17:27:45 -0600420 pw=" "
421 while true; do
422 echo "Enter a password now:"
423 read -e $var
424 pw=${!var}
425 [[ "$pw" = "`echo $pw | tr -cd [:alnum:]`" ]] && break
426 echo "Invalid chars in password. Try again:"
427 done
Anthony Youngb4db2252011-10-12 14:08:08 -0700428 if [ ! $pw ]; then
Attila Fazekasf71b5002014-05-28 09:52:22 +0200429 pw=$(generate_hex_string 10)
Anthony Young7a549f42011-10-12 07:13:13 +0000430 fi
Anthony Youngb4db2252011-10-12 14:08:08 -0700431 eval "$var=$pw"
432 echo "$var=$pw" >> $localrc
Anthony Young7a549f42011-10-12 07:13:13 +0000433 fi
Dean Troyer7903b792012-09-13 17:16:12 -0500434 $XTRACE
Anthony Young7a549f42011-10-12 07:13:13 +0000435}
436
Dean Troyer13dc5cc2012-03-27 14:50:45 -0500437
Dean Troyerb9182d62012-11-07 12:31:34 -0600438# Database Configuration
Dean Troyerb9182d62012-11-07 12:31:34 -0600439
Dean Troyerafc29fe2013-02-07 15:56:24 -0600440# To select between database backends, add the following to ``localrc``:
Terry Wilson428af5a2012-11-01 16:12:39 -0400441#
Dean Troyerafc29fe2013-02-07 15:56:24 -0600442# disable_service mysql
443# enable_service postgresql
Terry Wilson428af5a2012-11-01 16:12:39 -0400444#
Dean Troyerafc29fe2013-02-07 15:56:24 -0600445# The available database backends are listed in ``DATABASE_BACKENDS`` after
446# ``lib/database`` is sourced. ``mysql`` is the default.
Terry Wilson428af5a2012-11-01 16:12:39 -0400447
448initialize_database_backends && echo "Using $DATABASE_TYPE database backend" || echo "No database enabled"
449
Dean Troyerb9182d62012-11-07 12:31:34 -0600450
Dean Troyerb7490da2013-03-18 16:07:56 -0500451# Queue Configuration
Jesse Andrews782b9912011-10-02 16:53:21 -0400452
Anthony Younga8416442011-09-13 20:07:44 -0700453# Rabbit connection info
Russell Bryant4a221452012-03-13 13:44:12 -0400454if is_service_enabled rabbit; then
Bob Balle309e5a2014-04-01 16:28:36 +0100455 RABBIT_HOST=${RABBIT_HOST:-$SERVICE_HOST}
Russell Bryant4a221452012-03-13 13:44:12 -0400456 read_password RABBIT_PASSWORD "ENTER A PASSWORD TO USE FOR RABBIT."
457fi
Jesse Andrewsba23cc72011-09-11 03:22:13 -0700458
Dean Troyerb7490da2013-03-18 16:07:56 -0500459
460# Keystone
461
462if is_service_enabled key; then
463 # The ``SERVICE_TOKEN`` is used to bootstrap the Keystone database. It is
464 # just a string and is not a 'real' Keystone token.
465 read_password SERVICE_TOKEN "ENTER A SERVICE_TOKEN TO USE FOR THE SERVICE ADMIN TOKEN."
466 # Services authenticate to Identity with servicename/``SERVICE_PASSWORD``
467 read_password SERVICE_PASSWORD "ENTER A SERVICE_PASSWORD TO USE FOR THE SERVICE AUTHENTICATION."
468 # Horizon currently truncates usernames and passwords at 20 characters
469 read_password ADMIN_PASSWORD "ENTER A PASSWORD TO USE FOR HORIZON AND KEYSTONE (20 CHARS OR LESS)."
470
471 # Keystone can now optionally install OpenLDAP by enabling the ``ldap``
472 # service in ``localrc`` (e.g. ``enable_service ldap``).
473 # To clean out the Keystone contents in OpenLDAP set ``KEYSTONE_CLEAR_LDAP``
474 # to ``yes`` (e.g. ``KEYSTONE_CLEAR_LDAP=yes``) in ``localrc``. To enable the
475 # Keystone Identity Driver (``keystone.identity.backends.ldap.Identity``)
476 # set ``KEYSTONE_IDENTITY_BACKEND`` to ``ldap`` (e.g.
477 # ``KEYSTONE_IDENTITY_BACKEND=ldap``) in ``localrc``.
478
479 # only request ldap password if the service is enabled
480 if is_service_enabled ldap; then
481 read_password LDAP_PASSWORD "ENTER A PASSWORD TO USE FOR LDAP"
Chmouel Boudjnah6ae9ea52012-07-05 06:50:51 +0000482 fi
Dean Troyerb7490da2013-03-18 16:07:56 -0500483fi
484
485
486# Swift
487
488if is_service_enabled s-proxy; then
Chmouel Boudjnah77b0e1d2012-02-29 16:55:43 +0000489 # We only ask for Swift Hash if we have enabled swift service.
Dean Troyerb9182d62012-11-07 12:31:34 -0600490 # ``SWIFT_HASH`` is a random unique string for a swift cluster that
Chmouel Boudjnahb2857e42011-11-03 16:19:14 +0100491 # can never change.
492 read_password SWIFT_HASH "ENTER A RANDOM SWIFT HASH."
Jim Rollenhagenabbb0e92014-08-05 18:01:48 +0000493
494 if [[ -z "$SWIFT_TEMPURL_KEY" ]] && [[ "$SWIFT_ENABLE_TEMPURLS" == "True" ]]; then
495 read_password SWIFT_TEMPURL_KEY "ENTER A KEY FOR SWIFT TEMPURLS."
496 fi
Chmouel Boudjnahb2857e42011-11-03 16:19:14 +0100497fi
Vishvananda Ishaya5f039322011-11-05 16:12:20 -0700498
Dean Troyerdf0972c2012-03-07 17:31:03 -0600499
Dean Troyerb7490da2013-03-18 16:07:56 -0500500# Configure logging
501# -----------------
Dean Troyer471de7a2011-12-27 11:45:55 -0600502
Vishvananda Ishaya7879a3c2012-09-21 15:36:06 -0700503# Draw a spinner so the user knows something is happening
Ian Wienandaee18c72014-02-21 15:35:08 +1100504function spinner {
Vishvananda Ishaya7879a3c2012-09-21 15:36:06 -0700505 local delay=0.75
Dean Troyerb9182d62012-11-07 12:31:34 -0600506 local spinstr='/-\|'
Vishvananda Ishaya7879a3c2012-09-21 15:36:06 -0700507 printf "..." >&3
508 while [ true ]; do
509 local temp=${spinstr#?}
510 printf "[%c]" "$spinstr" >&3
511 local spinstr=$temp${spinstr%"$temp"}
512 sleep $delay
513 printf "\b\b\b" >&3
514 done
515}
516
Roger Luethide56ee12014-04-26 14:21:33 +0200517function kill_spinner {
518 if [ ! -z "$LAST_SPINNER_PID" ]; then
519 kill >/dev/null 2>&1 $LAST_SPINNER_PID
520 printf "\b\b\bdone\n" >&3
521 fi
522}
523
Dean Troyer7903b792012-09-13 17:16:12 -0500524# Echo text to the log file, summary log file and stdout
525# echo_summary "something to say"
Ian Wienandaee18c72014-02-21 15:35:08 +1100526function echo_summary {
Vishvananda Ishaya7879a3c2012-09-21 15:36:06 -0700527 if [[ -t 3 && "$VERBOSE" != "True" ]]; then
Roger Luethide56ee12014-04-26 14:21:33 +0200528 kill_spinner
Dean Troyerafc29fe2013-02-07 15:56:24 -0600529 echo -n -e $@ >&6
Vishvananda Ishaya7879a3c2012-09-21 15:36:06 -0700530 spinner &
531 LAST_SPINNER_PID=$!
532 else
Dean Troyerafc29fe2013-02-07 15:56:24 -0600533 echo -e $@ >&6
Vishvananda Ishaya7879a3c2012-09-21 15:36:06 -0700534 fi
Dean Troyer7903b792012-09-13 17:16:12 -0500535}
536
537# Echo text only to stdout, no log files
538# echo_nolog "something not for the logs"
Ian Wienandaee18c72014-02-21 15:35:08 +1100539function echo_nolog {
Dean Troyer7903b792012-09-13 17:16:12 -0500540 echo $@ >&3
541}
542
Ian Wienanda36167e2014-08-04 14:11:26 +1000543if [[ is_fedora && $DISTRO == "rhel6" ]]; then
Ian Wienandf565bf22014-07-17 14:50:29 +1000544 # poor old python2.6 doesn't have argparse by default, which
545 # outfilter.py uses
546 is_package_installed python-argparse || install_package python-argparse
547fi
548
Dean Troyer4a43b7b2012-08-28 17:43:40 -0500549# Set up logging for ``stack.sh``
550# Set ``LOGFILE`` to turn on logging
551# Append '.xxxxxxxx' to the given name to maintain history
552# where 'xxxxxxxx' is a representation of the date the file was created
Dean Troyer33cb4302012-12-10 16:47:36 -0600553TIMESTAMP_FORMAT=${TIMESTAMP_FORMAT:-"%F-%H%M%S"}
Chmouel Boudjnahd966ed22012-03-05 12:42:48 +0000554if [[ -n "$LOGFILE" || -n "$SCREEN_LOGDIR" ]]; then
555 LOGDAYS=${LOGDAYS:-7}
Chmouel Boudjnahd966ed22012-03-05 12:42:48 +0000556 CURRENT_LOG_TIME=$(date "+$TIMESTAMP_FORMAT")
557fi
558
Dean Troyer471de7a2011-12-27 11:45:55 -0600559if [[ -n "$LOGFILE" ]]; then
Dean Troyer4a43b7b2012-08-28 17:43:40 -0500560 # First clean up old log files. Use the user-specified ``LOGFILE``
Dean Troyer471de7a2011-12-27 11:45:55 -0600561 # as the template to search for, appending '.*' to match the date
562 # we added on earlier runs.
Dean Troyer471de7a2011-12-27 11:45:55 -0600563 LOGDIR=$(dirname "$LOGFILE")
David Ripton406019a2013-03-06 09:58:39 -0500564 LOGFILENAME=$(basename "$LOGFILE")
Chmouel Boudjnahfff6fec2012-03-09 15:37:56 +0000565 mkdir -p $LOGDIR
David Ripton406019a2013-03-06 09:58:39 -0500566 find $LOGDIR -maxdepth 1 -name $LOGFILENAME.\* -mtime +$LOGDAYS -exec rm {} \;
Chmouel Boudjnahd966ed22012-03-05 12:42:48 +0000567 LOGFILE=$LOGFILE.${CURRENT_LOG_TIME}
Dean Troyer7903b792012-09-13 17:16:12 -0500568 SUMFILE=$LOGFILE.${CURRENT_LOG_TIME}.summary
569
570 # Redirect output according to config
Dean Troyerb9182d62012-11-07 12:31:34 -0600571
Jun Wu8710b652014-04-28 20:36:08 +0800572 # Set fd 3 to a copy of stdout. So we can set fd 1 without losing
573 # stdout later.
Dean Troyer7903b792012-09-13 17:16:12 -0500574 exec 3>&1
575 if [[ "$VERBOSE" == "True" ]]; then
Jun Wu8710b652014-04-28 20:36:08 +0800576 # Set fd 1 and 2 to write the log file
Mauro S. M. Rodriguesdae11522014-06-17 01:10:54 +0000577 exec 1> >( $TOP_DIR/tools/outfilter.py -v -o "${LOGFILE}" ) 2>&1
Jun Wu8710b652014-04-28 20:36:08 +0800578 # Set fd 6 to summary log file
Mauro S. M. Rodriguesdae11522014-06-17 01:10:54 +0000579 exec 6> >( $TOP_DIR/tools/outfilter.py -o "${SUMFILE}" )
Dean Troyer7903b792012-09-13 17:16:12 -0500580 else
581 # Set fd 1 and 2 to primary logfile
Mauro S. M. Rodriguesdae11522014-06-17 01:10:54 +0000582 exec 1> >( $TOP_DIR/tools/outfilter.py -o "${LOGFILE}" ) 2>&1
Dean Troyer7903b792012-09-13 17:16:12 -0500583 # Set fd 6 to summary logfile and stdout
Mauro S. M. Rodriguesdae11522014-06-17 01:10:54 +0000584 exec 6> >( $TOP_DIR/tools/outfilter.py -v -o "${SUMFILE}" >&3 )
Dean Troyer7903b792012-09-13 17:16:12 -0500585 fi
586
587 echo_summary "stack.sh log $LOGFILE"
Dean Troyer471de7a2011-12-27 11:45:55 -0600588 # Specified logfile name always links to the most recent log
David Ripton406019a2013-03-06 09:58:39 -0500589 ln -sf $LOGFILE $LOGDIR/$LOGFILENAME
590 ln -sf $SUMFILE $LOGDIR/$LOGFILENAME.summary
Dean Troyer7903b792012-09-13 17:16:12 -0500591else
592 # Set up output redirection without log files
Jun Wu8710b652014-04-28 20:36:08 +0800593 # Set fd 3 to a copy of stdout. So we can set fd 1 without losing
594 # stdout later.
Dean Troyer7903b792012-09-13 17:16:12 -0500595 exec 3>&1
Eric Windischefdf3ff2012-09-24 12:47:44 -0400596 if [[ "$VERBOSE" != "True" ]]; then
Dean Troyer7903b792012-09-13 17:16:12 -0500597 # Throw away stdout and stderr
598 exec 1>/dev/null 2>&1
599 fi
600 # Always send summary fd to original stdout
Mauro S. M. Rodriguesdae11522014-06-17 01:10:54 +0000601 exec 6> >( $TOP_DIR/tools/outfilter.py -v >&3 )
Dean Troyer471de7a2011-12-27 11:45:55 -0600602fi
603
Chmouel Boudjnahd966ed22012-03-05 12:42:48 +0000604# Set up logging of screen windows
Dean Troyer4a43b7b2012-08-28 17:43:40 -0500605# Set ``SCREEN_LOGDIR`` to turn on logging of screen windows to the
606# directory specified in ``SCREEN_LOGDIR``, we will log to the the file
607# ``screen-$SERVICE_NAME-$TIMESTAMP.log`` in that dir and have a link
608# ``screen-$SERVICE_NAME.log`` to the latest log file.
609# Logs are kept for as long specified in ``LOGDAYS``.
Chmouel Boudjnahd966ed22012-03-05 12:42:48 +0000610if [[ -n "$SCREEN_LOGDIR" ]]; then
611
612 # We make sure the directory is created.
613 if [[ -d "$SCREEN_LOGDIR" ]]; then
614 # We cleanup the old logs
615 find $SCREEN_LOGDIR -maxdepth 1 -name screen-\*.log -mtime +$LOGDAYS -exec rm {} \;
616 else
617 mkdir -p $SCREEN_LOGDIR
618 fi
619fi
620
Dean Troyer4a43b7b2012-08-28 17:43:40 -0500621
622# Set Up Script Execution
623# -----------------------
624
Vishvananda Ishaya7879a3c2012-09-21 15:36:06 -0700625# Kill background processes on exit
Dean Troyera25a6f62014-02-24 16:03:41 -0600626trap exit_trap EXIT
627function exit_trap {
Vishvananda Ishaya7879a3c2012-09-21 15:36:06 -0700628 local r=$?
Dean Troyer94b9e822014-02-27 11:13:36 -0600629 jobs=$(jobs -p)
Dean Troyera3935fb2014-03-21 13:00:32 -0500630 # Only do the kill when we're logging through a process substitution,
631 # which currently is only to verbose logfile
632 if [[ -n $jobs && -n "$LOGFILE" && "$VERBOSE" == "True" ]]; then
Dean Troyer94b9e822014-02-27 11:13:36 -0600633 echo "exit_trap: cleaning up child processes"
634 kill 2>&1 $jobs
635 fi
Roger Luethide56ee12014-04-26 14:21:33 +0200636
637 # Kill the last spinner process
638 kill_spinner
639
Sean Dague97fcc7b2014-06-16 17:24:14 -0400640 if [[ $r -ne 0 ]]; then
641 echo "Error on exit"
Rick Harris2696e5a2014-08-18 13:53:42 -0500642 if [[ -z $LOGDIR ]]; then
643 ./tools/worlddump.py
644 else
645 ./tools/worlddump.py -d $LOGDIR
646 fi
Sean Dague97fcc7b2014-06-16 17:24:14 -0400647 fi
648
Vishvananda Ishaya7879a3c2012-09-21 15:36:06 -0700649 exit $r
650}
651
Dean Troyer4a43b7b2012-08-28 17:43:40 -0500652# Exit on any errors so that errors don't compound
Dean Troyera25a6f62014-02-24 16:03:41 -0600653trap err_trap ERR
654function err_trap {
Scott Moserf9da5082011-10-07 21:28:00 -0400655 local r=$?
656 set +o xtrace
Dean Troyera25a6f62014-02-24 16:03:41 -0600657 if [[ -n "$LOGFILE" ]]; then
658 echo "${0##*/} failed: full log in $LOGFILE"
659 else
660 echo "${0##*/} failed"
661 fi
Scott Moserf9da5082011-10-07 21:28:00 -0400662 exit $r
663}
664
Sean Dague09bd7c82014-02-03 08:35:26 +0900665
666set -o errexit
667
Scott Moserf9da5082011-10-07 21:28:00 -0400668# Print the commands being run so that we can see the command that triggers
669# an error. It is also useful for following along as the install occurs.
670set -o xtrace
671
Dean Troyer1a6d4492013-06-03 16:47:36 -0500672
Jesse Andrews30f68e92011-09-13 00:59:54 -0700673# Install Packages
Jesse Andrewsd74257d2011-09-13 01:24:50 -0700674# ================
Dean Troyer7d28a0e2012-06-27 17:55:52 -0500675
Dean Troyer4a43b7b2012-08-28 17:43:40 -0500676# OpenStack uses a fair number of other projects.
Jesse Andrews30f68e92011-09-13 00:59:54 -0700677
Dean Troyer7d28a0e2012-06-27 17:55:52 -0500678# Install package requirements
Dean Troyer48352ee2012-12-12 12:50:38 -0600679# Source it so the entire environment is available
Dean Troyer7903b792012-09-13 17:16:12 -0500680echo_summary "Installing package prerequisites"
Dean Troyer48352ee2012-12-12 12:50:38 -0600681source $TOP_DIR/tools/install_prereqs.sh
Monty Taylor47f02062012-07-26 11:09:24 -0500682
Dean Troyer62d1d692013-08-01 17:40:40 -0500683# Configure an appropriate python environment
Arata Notsu8b5d3cf2013-10-17 21:42:49 +0900684if [[ "$OFFLINE" != "True" ]]; then
Franck Yelles683ff422014-06-19 02:14:42 -0700685 PYPI_ALTERNATIVE_URL=$PYPI_ALTERNATIVE_URL $TOP_DIR/tools/install_pip.sh
Arata Notsu8b5d3cf2013-10-17 21:42:49 +0900686fi
Dean Troyer1a6d4492013-06-03 16:47:36 -0500687
Gael Chamoulaudd3121f62014-07-24 23:53:02 +0200688# Do the ugly hacks for broken packages and distros
Dean Troyer04a35112014-08-15 14:03:52 -0500689source $TOP_DIR/tools/fixup_stuff.sh
Dean Troyer9acc12a2013-08-09 15:09:31 -0500690
Dean Troyer5c3a63e2014-07-09 11:27:42 -0500691
692# Extras Pre-install
693# ------------------
694
695# Phase: pre-install
696if [[ -d $TOP_DIR/extras.d ]]; then
697 for i in $TOP_DIR/extras.d/*.sh; do
698 [[ -r $i ]] && source $i stack pre-install
699 done
700fi
701
702
Dean Troyer62d1d692013-08-01 17:40:40 -0500703install_rpc_backend
704
705if is_service_enabled $DATABASE_BACKENDS; then
706 install_database
707fi
708
709if is_service_enabled neutron; then
710 install_neutron_agent_packages
711fi
712
Monty Taylor47f02062012-07-26 11:09:24 -0500713TRACK_DEPENDS=${TRACK_DEPENDS:-False}
714
715# Install python packages into a virtualenv so that we can track them
Dean Troyercc6b4432013-04-08 15:38:03 -0500716if [[ $TRACK_DEPENDS = True ]]; then
Dean Troyer7903b792012-09-13 17:16:12 -0500717 echo_summary "Installing Python packages into a virtualenv $DEST/.venv"
Sean Dague6c844632013-07-31 06:50:14 -0400718 pip_install -U virtualenv
Monty Taylor47f02062012-07-26 11:09:24 -0500719
720 rm -rf $DEST/.venv
721 virtualenv --system-site-packages $DEST/.venv
722 source $DEST/.venv/bin/activate
723 $DEST/.venv/bin/pip freeze > $DEST/requires-pre-pip
724fi
725
Dean Troyerfe51a902013-04-01 15:48:44 -0500726# Check Out and Install Source
727# ----------------------------
Dean Troyer4a43b7b2012-08-28 17:43:40 -0500728
Dean Troyer7903b792012-09-13 17:16:12 -0500729echo_summary "Installing OpenStack project source"
730
Sean Dague0392a102013-07-31 13:07:45 -0400731# Install required infra support libraries
732install_infra
Monty Taylor5e159492013-05-08 14:29:52 -0400733
Sean Dague1b6b5312013-07-31 06:46:34 -0400734# Install oslo libraries that have graduated
735install_oslo
736
Sean Dague68322722013-10-21 18:11:40 -0400737# Install stackforge libraries for testing
Sean Daguef7cfa0c2013-10-25 13:26:17 -0400738if is_service_enabled stackforge_libs; then
739 install_stackforge
740fi
Sean Dague68322722013-10-21 18:11:40 -0400741
Dean Troyerfe51a902013-04-01 15:48:44 -0500742# Install clients libraries
Dean Troyerd81a0272012-08-31 18:04:55 -0500743install_keystoneclient
Dean Troyer73f6f252012-09-17 11:22:21 -0500744install_glanceclient
Dean Troyer253a1a32013-04-01 18:23:22 -0500745install_cinderclient
Dean Troyerbf67c192012-09-21 15:09:37 -0500746install_novaclient
Sean Dague75195b52013-07-25 15:38:09 -0400747if is_service_enabled swift glance horizon; then
Dean Troyerfe51a902013-04-01 15:48:44 -0500748 install_swiftclient
749fi
Sean Dague75195b52013-07-25 15:38:09 -0400750if is_service_enabled neutron nova horizon; then
Mark McClainb05c8762013-07-06 23:29:39 -0400751 install_neutronclient
Dean Troyerfe51a902013-04-01 15:48:44 -0500752fi
Sean Dague75195b52013-07-25 15:38:09 -0400753if is_service_enabled heat horizon; then
754 install_heatclient
755fi
Dean Troyerfe51a902013-04-01 15:48:44 -0500756
Morgan Fainberg58936fd2014-06-24 12:26:07 -0700757# Install middleware
758install_keystonemiddleware
759
Dean Troyer9f61d292012-11-26 18:56:20 +0000760git_clone $OPENSTACKCLIENT_REPO $OPENSTACKCLIENT_DIR $OPENSTACKCLIENT_BRANCH
Dean Troyer253a1a32013-04-01 18:23:22 -0500761setup_develop $OPENSTACKCLIENT_DIR
Dean Troyer9f61d292012-11-26 18:56:20 +0000762
Dean Troyerfe51a902013-04-01 15:48:44 -0500763if is_service_enabled key; then
Bartosz Górski0abde392014-02-28 14:15:19 +0100764 if [ "$KEYSTONE_AUTH_HOST" == "$SERVICE_HOST" ]; then
765 install_keystone
766 configure_keystone
767 fi
Jesse Andrews38df1222011-11-20 09:55:44 -0800768fi
Attila Fazekasece6a332012-11-29 14:19:41 +0100769
Chmouel Boudjnah0c3a5582013-03-06 10:58:33 +0100770if is_service_enabled s-proxy; then
Attila Fazekasece6a332012-11-29 14:19:41 +0100771 install_swift
Dean Troyerfe51a902013-04-01 15:48:44 -0500772 configure_swift
773
rahmu9d2647a2013-04-24 10:40:07 +0200774 # swift3 middleware to provide S3 emulation to Swift
Chmouel Boudjnah6ae9ea52012-07-05 06:50:51 +0000775 if is_service_enabled swift3; then
rahmu9d2647a2013-04-24 10:40:07 +0200776 # replace the nova-objectstore port by the swift port
777 S3_SERVICE_PORT=8080
Chmouel Boudjnah6ae9ea52012-07-05 06:50:51 +0000778 git_clone $SWIFT3_REPO $SWIFT3_DIR $SWIFT3_BRANCH
Dean Troyerfe51a902013-04-01 15:48:44 -0500779 setup_develop $SWIFT3_DIR
Chmouel Boudjnah6ae9ea52012-07-05 06:50:51 +0000780 fi
James E. Blaire7ce24f2011-11-10 13:05:13 -0800781fi
Attila Fazekasece6a332012-11-29 14:19:41 +0100782
Chmouel Boudjnaha6651e92012-02-16 10:16:52 +0000783if is_service_enabled g-api n-api; then
James E. Blaire7ce24f2011-11-10 13:05:13 -0800784 # image catalog service
Dean Troyer73f6f252012-09-17 11:22:21 -0500785 install_glance
Dean Troyerfe51a902013-04-01 15:48:44 -0500786 configure_glance
James E. Blaire7ce24f2011-11-10 13:05:13 -0800787fi
Dean Troyerfe51a902013-04-01 15:48:44 -0500788
789if is_service_enabled cinder; then
790 install_cinder
791 configure_cinder
792fi
793
Mark McClainb05c8762013-07-06 23:29:39 -0400794if is_service_enabled neutron; then
795 install_neutron
796 install_neutron_third_party
Dean Troyerfe51a902013-04-01 15:48:44 -0500797fi
798
Dean Troyerbf67c192012-09-21 15:09:37 -0500799if is_service_enabled nova; then
800 # compute service
801 install_nova
Dean Troyerfe51a902013-04-01 15:48:44 -0500802 cleanup_nova
803 configure_nova
Dean Troyerbf67c192012-09-21 15:09:37 -0500804fi
Dean Troyerfe51a902013-04-01 15:48:44 -0500805
Chmouel Boudjnaha6651e92012-02-16 10:16:52 +0000806if is_service_enabled horizon; then
Zhenguo Niue385d1e2014-03-12 16:58:12 +0800807 # django openstack_auth
808 install_django_openstack_auth
Sean Dagueb562e6a2012-11-19 16:00:01 -0500809 # dashboard
810 install_horizon
Dean Troyerfe51a902013-04-01 15:48:44 -0500811 configure_horizon
James E. Blaire7ce24f2011-11-10 13:05:13 -0800812fi
Dean Troyerfe51a902013-04-01 15:48:44 -0500813
John H. Tran93361642012-07-26 11:22:05 -0700814if is_service_enabled ceilometer; then
Yunhong, Jiange583d9b2013-01-09 09:33:07 +0800815 install_ceilometerclient
John H. Tran93361642012-07-26 11:22:05 -0700816 install_ceilometer
Attila Fazekas12bb53b2013-07-25 23:02:48 +0200817 echo_summary "Configuring Ceilometer"
818 configure_ceilometer
John H. Tran93361642012-07-26 11:22:05 -0700819fi
Dean Troyer4a43b7b2012-08-28 17:43:40 -0500820
Steve Bakerbfdad752012-08-18 09:00:42 +1200821if is_service_enabled heat; then
Sean Dagued644e232013-07-25 15:34:48 -0400822 install_heat
Steve Baker315971d2014-05-27 12:24:18 +1200823 install_heat_other
Steve Bakerc3249082013-04-09 13:41:47 +1200824 cleanup_heat
Steve Bakerbfdad752012-08-18 09:00:42 +1200825 configure_heat
826fi
Dean Troyerb7490da2013-03-18 16:07:56 -0500827
Dean Troyerfe51a902013-04-01 15:48:44 -0500828if is_service_enabled tls-proxy; then
829 configure_CA
830 init_CA
831 init_cert
832 # Add name to /etc/hosts
833 # don't be naive and add to existing line!
Dean Troyer67787e62012-05-02 11:48:15 -0500834fi
Jesse Andrewsba23cc72011-09-11 03:22:13 -0700835
Roman Prykhodchenkoce696b62013-08-09 10:40:45 +0300836
Dean Troyercdf3d762013-10-15 09:42:43 -0500837# Extras Install
838# --------------
839
840# Phase: install
841if [[ -d $TOP_DIR/extras.d ]]; then
842 for i in $TOP_DIR/extras.d/*.sh; do
843 [[ -r $i ]] && source $i stack install
844 done
845fi
846
Dean Troyercc6b4432013-04-08 15:38:03 -0500847if [[ $TRACK_DEPENDS = True ]]; then
Monty Taylor47f02062012-07-26 11:09:24 -0500848 $DEST/.venv/bin/pip freeze > $DEST/requires-post-pip
Dean Troyercc6b4432013-04-08 15:38:03 -0500849 if ! diff -Nru $DEST/requires-pre-pip $DEST/requires-post-pip > $DEST/requires.diff; then
DennyZhange8fa8532013-11-03 12:22:04 -0600850 echo "Detect some changes for installed packages of pip, in depend tracking mode"
Monty Taylor47f02062012-07-26 11:09:24 -0500851 cat $DEST/requires.diff
852 fi
853 echo "Ran stack.sh in depend tracking mode, bailing out now"
854 exit 0
855fi
Dean Troyerdf0972c2012-03-07 17:31:03 -0600856
Dean Troyerb7490da2013-03-18 16:07:56 -0500857
Dean Troyerff603ef2011-11-22 17:48:10 -0600858# Syslog
Dean Troyerdf0972c2012-03-07 17:31:03 -0600859# ------
Dean Troyerff603ef2011-11-22 17:48:10 -0600860
861if [[ $SYSLOG != "False" ]]; then
Dean Troyerff603ef2011-11-22 17:48:10 -0600862 if [[ "$SYSLOG_HOST" = "$HOST_IP" ]]; then
863 # Configure the master host to receive
864 cat <<EOF >/tmp/90-stack-m.conf
865\$ModLoad imrelp
866\$InputRELPServerRun $SYSLOG_PORT
867EOF
868 sudo mv /tmp/90-stack-m.conf /etc/rsyslog.d
869 else
870 # Set rsyslog to send to remote host
871 cat <<EOF >/tmp/90-stack-s.conf
872*.* :omrelp:$SYSLOG_HOST:$SYSLOG_PORT
873EOF
874 sudo mv /tmp/90-stack-s.conf /etc/rsyslog.d
875 fi
cloudnulle4859f02013-05-28 14:10:58 -0500876
877 RSYSLOGCONF="/etc/rsyslog.conf"
878 if [ -f $RSYSLOGCONF ]; then
879 sudo cp -b $RSYSLOGCONF $RSYSLOGCONF.bak
880 if [[ $(grep '$SystemLogRateLimitBurst' $RSYSLOGCONF) ]]; then
881 sudo sed -i 's/$SystemLogRateLimitBurst\ .*/$SystemLogRateLimitBurst\ 0/' $RSYSLOGCONF
882 else
883 sudo sed -i '$ i $SystemLogRateLimitBurst\ 0' $RSYSLOGCONF
884 fi
885 if [[ $(grep '$SystemLogRateLimitInterval' $RSYSLOGCONF) ]]; then
886 sudo sed -i 's/$SystemLogRateLimitInterval\ .*/$SystemLogRateLimitInterval\ 0/' $RSYSLOGCONF
887 else
888 sudo sed -i '$ i $SystemLogRateLimitInterval\ 0' $RSYSLOGCONF
889 fi
890 fi
891
Dean Troyer7903b792012-09-13 17:16:12 -0500892 echo_summary "Starting rsyslog"
Dean Troyer13dc5cc2012-03-27 14:50:45 -0500893 restart_service rsyslog
Dean Troyerff603ef2011-11-22 17:48:10 -0600894fi
895
Dean Troyerdf0972c2012-03-07 17:31:03 -0600896
Joe Gordone5d92382012-09-13 17:19:03 -0700897# Finalize queue installation
898# ----------------------------
Akihiro MOTOKIb0f1c382013-01-13 17:58:12 +0900899restart_rpc_backend
Jesse Andrewsba23cc72011-09-11 03:22:13 -0700900
Dean Troyerdf0972c2012-03-07 17:31:03 -0600901
Jamie Lennoxbd24a8d2013-09-20 16:26:42 +1000902# Export Certicate Authority Bundle
903# ---------------------------------
904
905# If certificates were used and written to the SSL bundle file then these
906# should be exported so clients can validate their connections.
907
908if [ -f $SSL_BUNDLE_FILE ]; then
909 export OS_CACERT=$SSL_BUNDLE_FILE
910fi
911
912
Terry Wilson428af5a2012-11-01 16:12:39 -0400913# Configure database
914# ------------------
Dean Troyerb9182d62012-11-07 12:31:34 -0600915
Terry Wilson428af5a2012-11-01 16:12:39 -0400916if is_service_enabled $DATABASE_BACKENDS; then
917 configure_database
Jesse Andrews24859062011-09-15 21:28:23 -0700918fi
919
Dean Troyerb9182d62012-11-07 12:31:34 -0600920
921# Configure screen
922# ----------------
923
Dean Troyer681f3fd2013-02-27 19:00:39 -0600924USE_SCREEN=$(trueorfalse True $USE_SCREEN)
925if [[ "$USE_SCREEN" == "True" ]]; then
926 # Create a new named screen to run processes in
927 screen -d -m -S $SCREEN_NAME -t shell -s /bin/bash
928 sleep 1
929
930 # Set a reasonable status bar
931 if [ -z "$SCREEN_HARDSTATUS" ]; then
932 SCREEN_HARDSTATUS='%{= .} %-Lw%{= .}%> %n%f %t*%{= .}%+Lw%< %-=%{g}(%{d}%H/%l%{g})'
933 fi
934 screen -r $SCREEN_NAME -X hardstatus alwayslastline "$SCREEN_HARDSTATUS"
Steven Dake30396572013-06-30 16:11:54 -0700935 screen -r $SCREEN_NAME -X setenv PROMPT_COMMAND /bin/true
Josh Kearney0a7a41e2012-04-04 17:47:56 -0500936fi
937
Jiajun Liu61bb2c12012-10-19 09:48:30 +0800938# Clear screen rc file
939SCREENRC=$TOP_DIR/$SCREEN_NAME-screenrc
940if [[ -e $SCREENRC ]]; then
Jiajun Liu8e58c072013-07-17 06:41:50 +0000941 rm -f $SCREENRC
Jiajun Liu61bb2c12012-10-19 09:48:30 +0800942fi
Dean Troyerb9182d62012-11-07 12:31:34 -0600943
jiajun xua9414242012-12-06 16:30:57 +0800944# Initialize the directory for service status check
945init_service_check
Dean Troyer7d28a0e2012-06-27 17:55:52 -0500946
Sean Dague78096b52014-02-25 10:23:04 -0500947# Dstat
Dean Troyer1a6d4492013-06-03 16:47:36 -0500948# -------
949
Sean Daguef1eb0472014-02-11 17:28:56 -0500950# A better kind of sysstat, with the top process per time slice
James E. Blaire8d84062014-03-26 08:19:37 -0700951DSTAT_OPTS="-tcmndrylp --top-cpu-adv"
Sean Daguef1eb0472014-02-11 17:28:56 -0500952if [[ -n ${SCREEN_LOGDIR} ]]; then
953 screen_it dstat "cd $TOP_DIR; dstat $DSTAT_OPTS | tee $SCREEN_LOGDIR/$DSTAT_FILE"
954else
955 screen_it dstat "dstat $DSTAT_OPTS"
Sean Dague062cdaf2014-02-10 22:24:49 -0500956fi
957
Dean Troyer893e6632013-09-13 15:05:51 -0500958# Start Services
959# ==============
960
Dean Troyerd81a0272012-08-31 18:04:55 -0500961# Keystone
962# --------
963
964if is_service_enabled key; then
Dean Troyer7903b792012-09-13 17:16:12 -0500965 echo_summary "Starting Keystone"
Bartosz Górski0abde392014-02-28 14:15:19 +0100966
967 if [ "$KEYSTONE_AUTH_HOST" == "$SERVICE_HOST" ]; then
968 init_keystone
969 start_keystone
970 fi
Dean Troyerd81a0272012-08-31 18:04:55 -0500971
Dean Troyerd835de82012-11-29 17:11:35 -0600972 # Set up a temporary admin URI for Keystone
Jamie Lennox3561d7f2014-05-21 17:18:43 +1000973 SERVICE_ENDPOINT=$KEYSTONE_AUTH_URI/v2.0
Dean Troyerc83a7e12012-11-29 11:47:58 -0600974
975 if is_service_enabled tls-proxy; then
976 export OS_CACERT=$INT_CA_DIR/ca-chain.pem
977 # Until the client support is fixed, just use the internal endpoint
978 SERVICE_ENDPOINT=http://$KEYSTONE_AUTH_HOST:$KEYSTONE_AUTH_PORT_INT/v2.0
979 fi
Dean Troyerd81a0272012-08-31 18:04:55 -0500980
Dean Troyer42a59c22014-03-03 14:31:29 -0600981 # Setup OpenStackclient token-flow auth
Steve Martinelli19685422014-01-24 13:02:26 -0600982 export OS_TOKEN=$SERVICE_TOKEN
983 export OS_URL=$SERVICE_ENDPOINT
Dean Troyer42a59c22014-03-03 14:31:29 -0600984
Dean Troyerd835de82012-11-29 17:11:35 -0600985 create_keystone_accounts
Dean Troyera0dce262012-12-11 16:52:37 -0600986 create_nova_accounts
Dean Troyer42a59c22014-03-03 14:31:29 -0600987 create_glance_accounts
Dean Troyer671c16e2012-12-13 16:22:38 -0600988 create_cinder_accounts
Mark McClainb05c8762013-07-06 23:29:39 -0400989 create_neutron_accounts
Dean Troyerd835de82012-11-29 17:11:35 -0600990
Dirk Muellerfa5ccff2014-01-09 13:27:35 +0100991 if is_service_enabled ceilometer; then
992 create_ceilometer_accounts
993 fi
994
Dean Troyer42a59c22014-03-03 14:31:29 -0600995 if is_service_enabled swift; then
Ian Wienand0ff314c2013-07-17 16:30:19 +1000996 create_swift_accounts
997 fi
998
Steven Hardy33d1f862014-02-13 15:00:33 +0000999 if is_service_enabled heat; then
1000 create_heat_accounts
1001 fi
1002
Dean Troyer42a59c22014-03-03 14:31:29 -06001003 # Begone token-flow auth
Steve Martinelli19685422014-01-24 13:02:26 -06001004 unset OS_TOKEN OS_URL
Dean Troyer42a59c22014-03-03 14:31:29 -06001005
1006 # Set up password-flow auth creds now that keystone is bootstrapped
Dean Troyerd81a0272012-08-31 18:04:55 -05001007 export OS_AUTH_URL=$SERVICE_ENDPOINT
1008 export OS_TENANT_NAME=admin
1009 export OS_USERNAME=admin
1010 export OS_PASSWORD=$ADMIN_PASSWORD
Bartosz Górski0abde392014-02-28 14:15:19 +01001011 export OS_REGION_NAME=$REGION_NAME
Dean Troyerd81a0272012-08-31 18:04:55 -05001012fi
1013
1014
Tres Henryca85b792011-10-28 14:00:21 -07001015# Horizon
Dean Troyerdf0972c2012-03-07 17:31:03 -06001016# -------
Jesse Andrewscbe98d52011-10-02 17:47:32 -04001017
Dean Troyer7d28a0e2012-06-27 17:55:52 -05001018# Set up the django horizon application to serve via apache/wsgi
Jesse Andrews75a37652011-09-12 17:09:08 -07001019
Chmouel Boudjnaha6651e92012-02-16 10:16:52 +00001020if is_service_enabled horizon; then
Dean Troyer7903b792012-09-13 17:16:12 -05001021 echo_summary "Configuring and starting Horizon"
Sean Dagueb562e6a2012-11-19 16:00:01 -05001022 init_horizon
1023 start_horizon
Anthony Young70dc5e02011-09-15 16:52:43 -07001024fi
Jesse Andrews75a37652011-09-12 17:09:08 -07001025
Anthony Young3859f732011-09-14 02:33:43 -07001026
Jesse Andrewsd74257d2011-09-13 01:24:50 -07001027# Glance
1028# ------
1029
Chmouel Boudjnaha6651e92012-02-16 10:16:52 +00001030if is_service_enabled g-reg; then
Dean Troyer7903b792012-09-13 17:16:12 -05001031 echo_summary "Configuring Glance"
Dean Troyer73f6f252012-09-17 11:22:21 -05001032 init_glance
Anthony Young70dc5e02011-09-15 16:52:43 -07001033fi
Jesse Andrews75a37652011-09-12 17:09:08 -07001034
Dean Troyer8c032d12013-09-23 13:53:13 -05001035
Mark McClainb05c8762013-07-06 23:29:39 -04001036# Neutron
Anthony Young60df29a2012-03-28 09:40:17 -07001037# -------
Dean Troyer7d28a0e2012-06-27 17:55:52 -05001038
Mark McClainb05c8762013-07-06 23:29:39 -04001039if is_service_enabled neutron; then
1040 echo_summary "Configuring Neutron"
Dean Troyerb9182d62012-11-07 12:31:34 -06001041
Mark McClainb05c8762013-07-06 23:29:39 -04001042 configure_neutron
Salvatore Orlandodd649882013-08-05 08:56:17 -07001043 # Run init_neutron only on the node hosting the neutron API server
1044 if is_service_enabled $DATABASE_BACKENDS && is_service_enabled q-svc; then
1045 init_neutron
1046 fi
Dan Wendlandt0007f3a2012-05-18 13:37:47 -07001047fi
1048
Mark McClainb05c8762013-07-06 23:29:39 -04001049# Some Neutron plugins require network controllers which are not
Akihiro MOTOKI66afb472012-12-21 15:34:13 +09001050# a part of the OpenStack project. Configure and start them.
Mark McClainb05c8762013-07-06 23:29:39 -04001051if is_service_enabled neutron; then
1052 configure_neutron_third_party
1053 init_neutron_third_party
1054 start_neutron_third_party
Gary Kotton396a0142012-07-29 04:28:47 -04001055fi
1056
Dean Troyerb9182d62012-11-07 12:31:34 -06001057
Jesse Andrewsd74257d2011-09-13 01:24:50 -07001058# Nova
1059# ----
Dean Troyerbd13b702012-02-13 11:22:36 -06001060
Isaku Yamahata6f85ab32012-08-06 16:56:10 +09001061if is_service_enabled n-net q-dhcp; then
Anthony Young55458452011-12-17 00:21:49 +00001062 # Delete traces of nova networks from prior runs
Davanum Srinivasd71d6e72013-01-28 19:15:57 -05001063 # Do not kill any dnsmasq instance spawned by NetworkManager
1064 netman_pid=$(pidof NetworkManager || true)
1065 if [ -z "$netman_pid" ]; then
1066 sudo killall dnsmasq || true
1067 else
1068 sudo ps h -o pid,ppid -C dnsmasq | grep -v $netman_pid | awk '{print $1}' | sudo xargs kill || true
1069 fi
1070
Anthony Young55458452011-12-17 00:21:49 +00001071 clean_iptables
Christian Berendt7a7fb492014-04-07 13:31:07 +00001072
1073 if is_service_enabled n-net; then
1074 rm -rf ${NOVA_STATE_PATH}/networks
1075 sudo mkdir -p ${NOVA_STATE_PATH}/networks
Chris Denta0ced4d2014-05-27 22:08:46 +01001076 safe_chown -R ${STACK_USER} ${NOVA_STATE_PATH}/networks
Christian Berendt7a7fb492014-04-07 13:31:07 +00001077 fi
1078
Dean Troyer1a6d4492013-06-03 16:47:36 -05001079 # Force IP forwarding on, just in case
Dean Troyer0b31e862012-03-07 16:47:56 -06001080 sudo sysctl -w net.ipv4.ip_forward=1
Anthony Young70dc5e02011-09-15 16:52:43 -07001081fi
Jesse Andrews75a37652011-09-12 17:09:08 -07001082
Dean Troyer7d28a0e2012-06-27 17:55:52 -05001083
Chmouel Boudjnah28fa4e82011-11-01 12:30:55 +01001084# Storage Service
Dean Troyer7d28a0e2012-06-27 17:55:52 -05001085# ---------------
1086
Chmouel Boudjnah0c3a5582013-03-06 10:58:33 +01001087if is_service_enabled s-proxy; then
Dean Troyer7903b792012-09-13 17:16:12 -05001088 echo_summary "Configuring Swift"
Attila Fazekasece6a332012-11-29 14:19:41 +01001089 init_swift
Chmouel Boudjnah28fa4e82011-11-01 12:30:55 +01001090fi
1091
Dean Troyerdf0972c2012-03-07 17:31:03 -06001092
Anthony Youngacff87a2011-10-20 10:12:58 -07001093# Volume Service
1094# --------------
1095
Dean Troyer67787e62012-05-02 11:48:15 -05001096if is_service_enabled cinder; then
Dean Troyer7903b792012-09-13 17:16:12 -05001097 echo_summary "Configuring Cinder"
Dean Troyer67787e62012-05-02 11:48:15 -05001098 init_cinder
Anthony Youngacff87a2011-10-20 10:12:58 -07001099fi
1100
Dean Troyer2aa2a892013-08-04 19:53:19 -05001101
1102# Compute Service
1103# ---------------
1104
Dean Troyerbf67c192012-09-21 15:09:37 -05001105if is_service_enabled nova; then
1106 echo_summary "Configuring Nova"
1107 init_nova
Jesse Andrewsd1879c52011-09-16 16:28:13 -07001108
Dean Troyer86a79692012-10-22 15:24:46 -05001109 # Additional Nova configuration that is dependent on other services
Mark McClainb05c8762013-07-06 23:29:39 -04001110 if is_service_enabled neutron; then
1111 create_nova_conf_neutron
Dean Troyer86a79692012-10-22 15:24:46 -05001112 elif is_service_enabled n-net; then
Akihiro MOTOKI66afb472012-12-21 15:34:13 +09001113 create_nova_conf_nova_network
Brad Hall1bfa3d52011-10-27 18:18:20 -07001114 fi
Dean Troyerdf0972c2012-03-07 17:31:03 -06001115
Kieran Spearfb2a3ae2013-03-11 23:55:49 +00001116 init_nova_cells
Anthony Youngb62b4ca2011-10-26 22:29:08 -07001117fi
1118
Devananda van der Veenf35cf912012-11-12 17:58:38 -08001119# Extra things to prepare nova for baremetal, before nova starts
1120if is_service_enabled nova && is_baremetal; then
1121 echo_summary "Preparing for nova baremetal"
1122 prepare_baremetal_toolchain
1123 configure_baremetal_nova_dirs
1124fi
Dean Troyerdf0972c2012-03-07 17:31:03 -06001125
Dean Troyerb7490da2013-03-18 16:07:56 -05001126
Dean Troyercdf3d762013-10-15 09:42:43 -05001127# Extras Configuration
1128# ====================
1129
1130# Phase: post-config
1131if [[ -d $TOP_DIR/extras.d ]]; then
1132 for i in $TOP_DIR/extras.d/*.sh; do
1133 [[ -r $i ]] && source $i stack post-config
1134 done
1135fi
1136
1137
Dean Troyer893e6632013-09-13 15:05:51 -05001138# Local Configuration
1139# ===================
1140
1141# Apply configuration from local.conf if it exists for layer 2 services
1142# Phase: post-config
1143merge_config_group $TOP_DIR/local.conf post-config
1144
1145
Jesse Andrewsd74257d2011-09-13 01:24:50 -07001146# Launch Services
1147# ===============
Jesse Andrews30f68e92011-09-13 00:59:54 -07001148
Jesse Andrewsdfcd2002011-09-13 13:17:22 -07001149# Only run the services specified in ``ENABLED_SERVICES``
1150
Attila Fazekasece6a332012-11-29 14:19:41 +01001151# Launch Swift Services
Chmouel Boudjnah0c3a5582013-03-06 10:58:33 +01001152if is_service_enabled s-proxy; then
Attila Fazekasece6a332012-11-29 14:19:41 +01001153 echo_summary "Starting Swift"
1154 start_swift
1155fi
1156
Dean Troyer73f6f252012-09-17 11:22:21 -05001157# Launch the Glance services
Dean Troyere4fa7212014-01-15 15:04:49 -06001158if is_service_enabled glance; then
Dean Troyer7903b792012-09-13 17:16:12 -05001159 echo_summary "Starting Glance"
Dean Troyer73f6f252012-09-17 11:22:21 -05001160 start_glance
Anthony Youngd000b222011-09-19 14:46:53 -07001161fi
1162
Eric Windisch0b9776d2014-01-28 11:20:53 -05001163# Install Images
1164# ==============
1165
1166# Upload an image to glance.
1167#
1168# The default image is cirros, a small testing image which lets you login as **root**
1169# cirros has a ``cloud-init`` analog supporting login via keypair and sending
1170# scripts as userdata.
1171# See https://help.ubuntu.com/community/CloudInit for more on cloud-init
1172#
1173# Override ``IMAGE_URLS`` with a comma-separated list of UEC images.
1174# * **precise**: http://uec-images.ubuntu.com/precise/current/precise-server-cloudimg-amd64.tar.gz
1175
1176if is_service_enabled g-reg; then
1177 TOKEN=$(keystone token-get | grep ' id ' | get_field 2)
1178 die_if_not_set $LINENO TOKEN "Keystone fail to get token"
1179
1180 if is_baremetal; then
1181 echo_summary "Creating and uploading baremetal images"
1182
1183 # build and upload separate deploy kernel & ramdisk
1184 upload_baremetal_deploy $TOKEN
1185
1186 # upload images, separating out the kernel & ramdisk for PXE boot
1187 for image_url in ${IMAGE_URLS//,/ }; do
1188 upload_baremetal_image $image_url $TOKEN
1189 done
1190 else
1191 echo_summary "Uploading images"
1192
1193 # Option to upload legacy ami-tty, which works with xenserver
1194 if [[ -n "$UPLOAD_LEGACY_TTY" ]]; then
1195 IMAGE_URLS="${IMAGE_URLS:+${IMAGE_URLS},}https://github.com/downloads/citrix-openstack/warehouse/tty.tgz"
1196 fi
1197
1198 for image_url in ${IMAGE_URLS//,/ }; do
1199 upload_image $image_url $TOKEN
1200 done
1201 fi
1202fi
1203
Dean Troyerd81a0272012-08-31 18:04:55 -05001204# Create an access key and secret key for nova ec2 register image
1205if is_service_enabled key && is_service_enabled swift3 && is_service_enabled nova; then
Steve Martinellidf6793a2014-03-13 23:38:11 -05001206 eval $(openstack ec2 credentials create --user nova --project $SERVICE_TENANT_NAME -f shell -c access -c secret)
1207 iniset $NOVA_CONF DEFAULT s3_access_key "$access"
1208 iniset $NOVA_CONF DEFAULT s3_secret_key "$secret"
Devananda van der Veen9bc47db2012-12-12 16:52:55 -08001209 iniset $NOVA_CONF DEFAULT s3_affix_tenant "True"
Anthony Youngd000b222011-09-19 14:46:53 -07001210fi
1211
Kaitlin Farrdef4c142014-01-06 08:52:49 -05001212# Create a randomized default value for the keymgr's fixed_key
1213if is_service_enabled nova; then
Attila Fazekasf71b5002014-05-28 09:52:22 +02001214 iniset $NOVA_CONF keymgr fixed_key $(generate_hex_string 32)
Kaitlin Farrdef4c142014-01-06 08:52:49 -05001215fi
1216
Monty Taylore5428832013-03-27 23:40:59 +01001217if is_service_enabled zeromq; then
1218 echo_summary "Starting zermomq receiver"
Elena Ezhova2d451962014-06-19 12:49:32 +04001219 screen_it zeromq "cd $NOVA_DIR && $OSLO_BIN_DIR/oslo-messaging-zmq-receiver"
Monty Taylore5428832013-03-27 23:40:59 +01001220fi
ewindisch3bae7c22012-01-18 11:18:35 -05001221
Dean Troyer7d28a0e2012-06-27 17:55:52 -05001222# Launch the nova-api and wait for it to answer before continuing
Chmouel Boudjnaha6651e92012-02-16 10:16:52 +00001223if is_service_enabled n-api; then
Dean Troyer7903b792012-09-13 17:16:12 -05001224 echo_summary "Starting Nova API"
Dean Troyer3a3a2ba2012-12-11 15:26:24 -06001225 start_nova_api
Anthony Youngd000b222011-09-19 14:46:53 -07001226fi
Brad Hall1bfa3d52011-10-27 18:18:20 -07001227
Gary Kotton37dda8d2012-08-08 03:46:33 -04001228if is_service_enabled q-svc; then
Mark McClainb05c8762013-07-06 23:29:39 -04001229 echo_summary "Starting Neutron"
Mark McClainb05c8762013-07-06 23:29:39 -04001230 start_neutron_service_and_check
armando-migliaccioef1e0802014-01-02 16:33:53 -08001231 check_neutron_third_party_integration
Aaron Rosen8ec719b2012-10-30 12:57:47 -07001232elif is_service_enabled $DATABASE_BACKENDS && is_service_enabled n-net; then
Kieran Spearfb2a3ae2013-03-11 23:55:49 +00001233 NM_CONF=${NOVA_CONF}
1234 if is_service_enabled n-cell; then
1235 NM_CONF=${NOVA_CELLS_CONF}
1236 fi
1237
Gary Kotton37dda8d2012-08-08 03:46:33 -04001238 # Create a small network
Kieran Spearfb2a3ae2013-03-11 23:55:49 +00001239 $NOVA_BIN_DIR/nova-manage --config-file $NM_CONF network create "$PRIVATE_NETWORK_NAME" $FIXED_RANGE 1 $FIXED_NETWORK_SIZE $NETWORK_CREATE_ARGS
Dean Troyer696ad332012-01-10 15:34:34 -06001240
Gary Kotton37dda8d2012-08-08 03:46:33 -04001241 # Create some floating ips
Kieran Spearfb2a3ae2013-03-11 23:55:49 +00001242 $NOVA_BIN_DIR/nova-manage --config-file $NM_CONF floating create $FLOATING_RANGE --pool=$PUBLIC_NETWORK_NAME
Aaron Rosen9313dfa2012-07-06 16:08:49 -04001243
Gary Kotton37dda8d2012-08-08 03:46:33 -04001244 # Create a second pool
Kieran Spearfb2a3ae2013-03-11 23:55:49 +00001245 $NOVA_BIN_DIR/nova-manage --config-file $NM_CONF floating create --ip_range=$TEST_FLOATING_RANGE --pool=$TEST_FLOATING_POOL
Brad Hall1bfa3d52011-10-27 18:18:20 -07001246fi
1247
Mark McClainb05c8762013-07-06 23:29:39 -04001248if is_service_enabled neutron; then
1249 start_neutron_agents
Akihiro MOTOKI66afb472012-12-21 15:34:13 +09001250fi
Salvatore Orlando6fbb28d2013-12-22 07:59:37 -08001251# Once neutron agents are started setup initial network elements
1252if is_service_enabled q-svc; then
1253 echo_summary "Creating initial neutron network elements"
1254 create_neutron_initial_network
1255 setup_neutron_debug
1256fi
Dean Troyerbf67c192012-09-21 15:09:37 -05001257if is_service_enabled nova; then
1258 echo_summary "Starting Nova"
1259 start_nova
1260fi
Dean Troyer67787e62012-05-02 11:48:15 -05001261if is_service_enabled cinder; then
Dean Troyer7903b792012-09-13 17:16:12 -05001262 echo_summary "Starting Cinder"
Dean Troyer67787e62012-05-02 11:48:15 -05001263 start_cinder
Dean Troyer09718332014-07-03 10:46:57 -05001264 create_volume_types
Dean Troyer67787e62012-05-02 11:48:15 -05001265fi
John H. Tran93361642012-07-26 11:22:05 -07001266if is_service_enabled ceilometer; then
Doug Hellmannc5259b42012-09-22 10:52:31 -04001267 echo_summary "Starting Ceilometer"
Lianhao Lu8c548492013-01-09 10:41:54 +08001268 init_ceilometer
John H. Tran93361642012-07-26 11:22:05 -07001269 start_ceilometer
1270fi
Sean Dagueb562e6a2012-11-19 16:00:01 -05001271
Steve Bakerbad9d892012-10-25 14:49:47 +13001272# Configure and launch heat engine, api and metadata
Steve Bakerbfdad752012-08-18 09:00:42 +12001273if is_service_enabled heat; then
Steven Hardy1bcd2802014-02-13 15:14:41 +00001274 # Initialize heat
Steve Bakerbad9d892012-10-25 14:49:47 +13001275 echo_summary "Configuring Heat"
1276 init_heat
Dean Troyer7903b792012-09-13 17:16:12 -05001277 echo_summary "Starting Heat"
Steve Bakerbfdad752012-08-18 09:00:42 +12001278 start_heat
Steve Baker2a6009c2014-05-05 16:13:39 +12001279 if [ "$HEAT_CREATE_TEST_IMAGE" = "True" ]; then
1280 echo_summary "Building Heat functional test image"
1281 build_heat_functional_test_image
1282 fi
Steve Bakerbfdad752012-08-18 09:00:42 +12001283fi
Dean Troyer7d28a0e2012-06-27 17:55:52 -05001284
Jamie Lennoxbd24a8d2013-09-20 16:26:42 +10001285
Attila Fazekas22ef5732012-12-16 14:03:06 +01001286# Create account rc files
1287# =======================
1288
1289# Creates source able script files for easier user switching.
1290# This step also creates certificates for tenants and users,
1291# which is helpful in image bundle steps.
1292
1293if is_service_enabled nova && is_service_enabled key; then
Jamie Lennoxbd24a8d2013-09-20 16:26:42 +10001294 USERRC_PARAMS="-PA --target-dir $TOP_DIR/accrc"
1295
1296 if [ -f $SSL_BUNDLE_FILE ]; then
1297 USERRC_PARAMS="$USERRC_PARAMS --os-cacert $SSL_BUNDLE_FILE"
1298 fi
1299
1300 $TOP_DIR/tools/create_userrc.sh $USERRC_PARAMS
Attila Fazekas22ef5732012-12-16 14:03:06 +01001301fi
1302
Dean Troyer4a43b7b2012-08-28 17:43:40 -05001303
Devananda van der Veenf35cf912012-11-12 17:58:38 -08001304# If we are running nova with baremetal driver, there are a few
1305# last-mile configuration bits to attend to, which must happen
1306# after n-api and n-sch have started.
1307# Also, creating the baremetal flavor must happen after images
1308# are loaded into glance, though just knowing the IDs is sufficient here
1309if is_service_enabled nova && is_baremetal; then
1310 # create special flavor for baremetal if we know what images to associate
1311 [[ -n "$BM_DEPLOY_KERNEL_ID" ]] && [[ -n "$BM_DEPLOY_RAMDISK_ID" ]] && \
Sean Dagueb83c3652013-10-22 10:08:04 -04001312 create_baremetal_flavor $BM_DEPLOY_KERNEL_ID $BM_DEPLOY_RAMDISK_ID
Devananda van der Veenf35cf912012-11-12 17:58:38 -08001313
1314 # otherwise user can manually add it later by calling nova-baremetal-manage
Devananda van der Veenf35cf912012-11-12 17:58:38 -08001315 [[ -n "$BM_FIRST_MAC" ]] && add_baremetal_node
1316
Arata Notsubbf06452013-07-26 20:26:07 +09001317 if [[ "$BM_DNSMASQ_FROM_NOVA_NETWORK" = "False" ]]; then
1318 # NOTE: we do this here to ensure that our copy of dnsmasq is running
1319 sudo pkill dnsmasq || true
1320 sudo dnsmasq --conf-file= --port=0 --enable-tftp --tftp-root=/tftpboot \
1321 --dhcp-boot=pxelinux.0 --bind-interfaces --pid-file=/var/run/dnsmasq.pid \
1322 --interface=$BM_DNSMASQ_IFACE --dhcp-range=$BM_DNSMASQ_RANGE \
1323 ${BM_DNSMASQ_DNS:+--dhcp-option=option:dns-server,$BM_DNSMASQ_DNS}
1324 fi
Devananda van der Veenf35cf912012-11-12 17:58:38 -08001325 # ensure callback daemon is running
1326 sudo pkill nova-baremetal-deploy-helper || true
Mehdi Abaakoukc01e6a72013-10-14 16:26:02 +02001327 screen_it baremetal "cd ; nova-baremetal-deploy-helper"
Devananda van der Veenf35cf912012-11-12 17:58:38 -08001328fi
Dean Troyerdf0972c2012-03-07 17:31:03 -06001329
Dean Troyer33cb4302012-12-10 16:47:36 -06001330# Save some values we generated for later use
1331CURRENT_RUN_TIME=$(date "+$TIMESTAMP_FORMAT")
1332echo "# $CURRENT_RUN_TIME" >$TOP_DIR/.stackenv
1333for i in BASE_SQL_CONN ENABLED_SERVICES HOST_IP LOGFILE \
Jamie Lennoxbd24a8d2013-09-20 16:26:42 +10001334 SERVICE_HOST SERVICE_PROTOCOL STACK_USER TLS_IP KEYSTONE_AUTH_PROTOCOL OS_CACERT; do
Dean Troyer33cb4302012-12-10 16:47:36 -06001335 echo $i=${!i} >>$TOP_DIR/.stackenv
1336done
1337
Maru Newbyec086512012-11-01 23:44:57 +00001338
Dean Troyer893e6632013-09-13 15:05:51 -05001339# Local Configuration
1340# ===================
1341
1342# Apply configuration from local.conf if it exists for layer 2 services
1343# Phase: extra
1344merge_config_group $TOP_DIR/local.conf extra
1345
1346
Dean Troyer768295e2013-01-09 13:42:03 -06001347# Run extras
1348# ==========
1349
Dean Troyercdf3d762013-10-15 09:42:43 -05001350# Phase: extra
Dean Troyer768295e2013-01-09 13:42:03 -06001351if [[ -d $TOP_DIR/extras.d ]]; then
1352 for i in $TOP_DIR/extras.d/*.sh; do
Dean Troyercdf3d762013-10-15 09:42:43 -05001353 [[ -r $i ]] && source $i stack extra
Dean Troyer768295e2013-01-09 13:42:03 -06001354 done
1355fi
1356
Ryan Hsufeb28832013-11-07 12:12:35 -08001357# Local Configuration
1358# ===================
1359
1360# Apply configuration from local.conf if it exists for layer 2 services
1361# Phase: post-extra
1362merge_config_group $TOP_DIR/local.conf post-extra
1363
Dean Troyer768295e2013-01-09 13:42:03 -06001364
Dean Troyerf5633dd2012-03-28 11:21:40 -05001365# Run local script
1366# ================
1367
1368# Run ``local.sh`` if it exists to perform user-managed tasks
1369if [[ -x $TOP_DIR/local.sh ]]; then
1370 echo "Running user script $TOP_DIR/local.sh"
1371 $TOP_DIR/local.sh
1372fi
1373
jiajun xua9414242012-12-06 16:30:57 +08001374# Check the status of running services
1375service_check
Dean Troyerf5633dd2012-03-28 11:21:40 -05001376
Dean Troyerb7490da2013-03-18 16:07:56 -05001377
Scott Moserb94f4bf2011-10-07 14:51:07 +00001378# Fin
1379# ===
1380
Dean Troyer471de7a2011-12-27 11:45:55 -06001381set +o xtrace
Scott Moserb94f4bf2011-10-07 14:51:07 +00001382
Dean Troyer7903b792012-09-13 17:16:12 -05001383if [[ -n "$LOGFILE" ]]; then
1384 exec 1>&3
1385 # Force all output to stdout and logs now
Dean Troyerbaa8b422012-09-24 15:02:05 -05001386 exec 1> >( tee -a "${LOGFILE}" ) 2>&1
Dean Troyer7903b792012-09-13 17:16:12 -05001387else
1388 # Force all output to stdout now
1389 exec 1>&3
1390fi
1391
Dean Troyerdf0972c2012-03-07 17:31:03 -06001392
Jesse Andrews24859062011-09-15 21:28:23 -07001393# Using the cloud
Dean Troyer4a43b7b2012-08-28 17:43:40 -05001394# ---------------
Jesse Andrews24859062011-09-15 21:28:23 -07001395
Jesse Andrewse19d8842011-11-01 20:06:55 -07001396echo ""
1397echo ""
1398echo ""
1399
Dean Troyerdf0972c2012-03-07 17:31:03 -06001400# If you installed Horizon on this server you should be able
root40a37002011-09-20 18:06:14 +00001401# to access the site using your browser.
Chmouel Boudjnaha6651e92012-02-16 10:16:52 +00001402if is_service_enabled horizon; then
Dean Troyerdf0972c2012-03-07 17:31:03 -06001403 echo "Horizon is now available at http://$SERVICE_HOST/"
Jesse Andrews24859062011-09-15 21:28:23 -07001404fi
1405
Dean Troyerdf0972c2012-03-07 17:31:03 -06001406# If Keystone is present you can point ``nova`` cli to this server
Chmouel Boudjnaha6651e92012-02-16 10:16:52 +00001407if is_service_enabled key; then
Jamie Lennox3561d7f2014-05-21 17:18:43 +10001408 echo "Keystone is serving at $KEYSTONE_SERVICE_URI/v2.0/"
Dean Troyerdf0972c2012-03-07 17:31:03 -06001409 echo "Examples on using novaclient command line is in exercise.sh"
1410 echo "The default users are: admin and demo"
1411 echo "The password: $ADMIN_PASSWORD"
Jesse Andrews24859062011-09-15 21:28:23 -07001412fi
termie523c4052011-09-28 19:49:40 -05001413
Dean Troyer4a43b7b2012-08-28 17:43:40 -05001414# Echo ``HOST_IP`` - useful for ``build_uec.sh``, which uses dhcp to give the instance an address
Anthony Young1097c7c2011-12-27 23:22:14 -08001415echo "This is your host ip: $HOST_IP"
1416
Dean Troyerafc29fe2013-02-07 15:56:24 -06001417# Warn that a deprecated feature was used
1418if [[ -n "$DEPRECATED_TEXT" ]]; then
1419 echo_summary "WARNING: $DEPRECATED_TEXT"
Dean Troyerced65172012-03-02 16:36:16 -06001420fi
1421
Dean Troyer91baef32014-02-28 11:11:45 -06001422# TODO(dtroyer): Remove Q_AGENT_EXTRA_AGENT_OPTS after stable/juno branch is cut
1423if [[ -n "$Q_AGENT_EXTRA_AGENT_OPTS" ]]; then
1424 echo ""
1425 echo_summary "WARNING: Q_AGENT_EXTRA_AGENT_OPTS is used"
1426 echo "You are using Q_AGENT_EXTRA_AGENT_OPTS to pass configuration into $NEUTRON_CONF."
1427 echo "Please convert that configuration in localrc to a $NEUTRON_CONF section in local.conf:"
1428 echo "Q_AGENT_EXTRA_AGENT_OPTS will be removed early in the 'K' development cycle"
1429 echo "
1430[[post-config|/\$Q_PLUGIN_CONF_FILE]]
1431[DEFAULT]
1432"
1433 for I in "${Q_AGENT_EXTRA_AGENT_OPTS[@]}"; do
1434 # Replace the first '=' with ' ' for iniset syntax
1435 echo ${I}
1436 done
1437fi
1438
1439# TODO(dtroyer): Remove Q_AGENT_EXTRA_SRV_OPTS after stable/juno branch is cut
1440if [[ -n "$Q_AGENT_EXTRA_SRV_OPTS" ]]; then
1441 echo ""
1442 echo_summary "WARNING: Q_AGENT_EXTRA_SRV_OPTS is used"
1443 echo "You are using Q_AGENT_EXTRA_SRV_OPTS to pass configuration into $NEUTRON_CONF."
1444 echo "Please convert that configuration in localrc to a $NEUTRON_CONF section in local.conf:"
1445 echo "Q_AGENT_EXTRA_AGENT_OPTS will be removed early in the 'K' development cycle"
1446 echo "
1447[[post-config|/\$Q_PLUGIN_CONF_FILE]]
1448[DEFAULT]
1449"
1450 for I in "${Q_AGENT_EXTRA_SRV_OPTS[@]}"; do
1451 # Replace the first '=' with ' ' for iniset syntax
1452 echo ${I}
1453 done
1454fi
1455
Dean Troyer09718332014-07-03 10:46:57 -05001456# TODO(dtroyer): Remove CINDER_MULTI_LVM_BACKEND after stable/juno branch is cut
1457if [[ "$CINDER_MULTI_LVM_BACKEND" = "True" ]]; then
1458 echo ""
1459 echo_summary "WARNING: CINDER_MULTI_LVM_BACKEND is used"
1460 echo "You are using CINDER_MULTI_LVM_BACKEND to configure Cinder's multiple LVM backends"
1461 echo "Please convert that configuration in local.conf to use CINDER_ENABLED_BACKENDS."
1462 echo "CINDER_ENABLED_BACKENDS will be removed early in the 'K' development cycle"
1463 echo "
1464[[local|localrc]]
1465CINDER_ENABLED_BACKENDS=lvm:lvmdriver-1,lvm:lvmdriver-2
1466"
1467fi
1468
Dean Troyer4a43b7b2012-08-28 17:43:40 -05001469# Indicate how long this took to run (bash maintained variable ``SECONDS``)
Dean Troyer7903b792012-09-13 17:16:12 -05001470echo_summary "stack.sh completed in $SECONDS seconds."
Dean Troyer80684552014-03-05 11:50:23 -06001471
1472# Restore/close logging file descriptors
1473exec 1>&3
1474exec 2>&3
1475exec 3>&-
1476exec 6>&-