blob: 7238ce03b6df6feb0acc82ca2650472716d73ef8 [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
211 echo 'APT::Acquire::Retries "20";' | sudo tee /etc/apt/apt.conf.d/80retry
212fi
213
Ian Wienand531aeb72014-02-28 11:24:29 +1100214# Some distros need to add repos beyond the defaults provided by the vendor
215# to pick up required packages.
216
Attila Fazekas6d227a42014-04-09 14:42:42 +0200217if [[ is_fedora && $DISTRO =~ (rhel) ]]; then
218 # Installing Open vSwitch on RHEL requires enabling the RDO repo.
219 RHEL6_RDO_REPO_RPM=${RHEL6_RDO_REPO_RPM:-"http://rdo.fedorapeople.org/openstack-icehouse/rdo-release-icehouse.rpm"}
220 RHEL6_RDO_REPO_ID=${RHEL6_RDO_REPO_ID:-"openstack-icehouse"}
Ian Wienand531aeb72014-02-28 11:24:29 +1100221 if ! sudo yum repolist enabled $RHEL6_RDO_REPO_ID | grep -q $RHEL6_RDO_REPO_ID; then
222 echo "RDO repo not detected; installing"
223 yum_install $RHEL6_RDO_REPO_RPM || \
224 die $LINENO "Error installing RDO repo, cannot continue"
225 fi
Attila Fazekas6d227a42014-04-09 14:42:42 +0200226 # RHEL requires EPEL for many Open Stack dependencies
227 if [[ $DISTRO =~ (rhel7) ]]; then
Brad P. Crochete66da492014-06-23 08:16:56 -0400228 EPEL_RPM=${RHEL7_EPEL_RPM:-"http://dl.fedoraproject.org/pub/epel/beta/7/x86_64/epel-release-7-0.2.noarch.rpm"}
Attila Fazekas6d227a42014-04-09 14:42:42 +0200229 else
230 EPEL_RPM=${RHEL6_EPEL_RPM:-"http://dl.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm"}
231 fi
Ian Wienand531aeb72014-02-28 11:24:29 +1100232 if ! sudo yum repolist enabled epel | grep -q 'epel'; then
233 echo "EPEL not detected; installing"
Attila Fazekas6d227a42014-04-09 14:42:42 +0200234 yum_install ${EPEL_RPM} || \
Ian Wienand531aeb72014-02-28 11:24:29 +1100235 die $LINENO "Error installing EPEL repo, cannot continue"
236 fi
237
238 # ... and also optional to be enabled
239 is_package_installed yum-utils || install_package yum-utils
Brad P. Crochetc3599212014-06-16 10:27:19 -0400240 if [[ $DISTRO =~ (rhel7) ]]; then
241 OPTIONAL_REPO=rhel-7-server-optional-rpms
242 else
243 OPTIONAL_REPO=rhel-6-server-optional-rpms
244 fi
245 sudo yum-config-manager --enable ${OPTIONAL_REPO}
Ian Wienand531aeb72014-02-28 11:24:29 +1100246
247fi
248
Dean Troyer0e8dced2014-07-25 10:33:21 -0500249
250# Configure Target Directories
251# ----------------------------
252
253# Destination path for installation ``DEST``
254DEST=${DEST:-/opt/stack}
Dean Troyer23f69d82013-10-04 12:35:24 -0500255
Dean Troyere26232b2012-06-27 17:55:15 -0500256# Create the destination directory and ensure it is writable by the user
Bob Ball376b6312013-07-29 13:10:25 +0100257# and read/executable by everybody for daemons (e.g. apache run for horizon)
Dean Troyere26232b2012-06-27 17:55:15 -0500258sudo mkdir -p $DEST
Doug Hellmanne7002672013-09-05 08:10:07 -0400259safe_chown -R $STACK_USER $DEST
260safe_chmod 0755 $DEST
Dean Troyere26232b2012-06-27 17:55:15 -0500261
Ian Wienand0488edd2013-04-11 12:04:36 +1000262# a basic test for $DEST path permissions (fatal on error unless skipped)
263check_path_perm_sanity ${DEST}
264
Dean Troyer0e8dced2014-07-25 10:33:21 -0500265# Destination path for service data
266DATA_DIR=${DATA_DIR:-${DEST}/data}
267sudo mkdir -p $DATA_DIR
268safe_chown -R $STACK_USER $DATA_DIR
269
270# Configure proper hostname
Ben Nemec3ee52c82013-12-12 19:26:12 +0000271# Certain services such as rabbitmq require that the local hostname resolves
272# correctly. Make sure it exists in /etc/hosts so that is always true.
273LOCAL_HOSTNAME=`hostname -s`
274if [ -z "`grep ^127.0.0.1 /etc/hosts | grep $LOCAL_HOSTNAME`" ]; then
275 sudo sed -i "s/\(^127.0.0.1.*\)/\1 $LOCAL_HOSTNAME/" /etc/hosts
276fi
277
Ian Wienand531aeb72014-02-28 11:24:29 +1100278
279# Common Configuration
280# --------------------
281
Dean Troyer4a43b7b2012-08-28 17:43:40 -0500282# Set ``OFFLINE`` to ``True`` to configure ``stack.sh`` to run cleanly without
283# Internet access. ``stack.sh`` must have been previously run with Internet
284# access to install prerequisites and fetch repositories.
Dean Troyer25dab662011-12-16 22:40:46 -0600285OFFLINE=`trueorfalse False $OFFLINE`
286
Dean Troyer4a43b7b2012-08-28 17:43:40 -0500287# Set ``ERROR_ON_CLONE`` to ``True`` to configure ``stack.sh`` to exit if
288# the destination git repository does not exist during the ``git_clone``
289# operation.
James E. Blair94cb9602012-06-22 15:28:29 -0700290ERROR_ON_CLONE=`trueorfalse False $ERROR_ON_CLONE`
291
Ben Nemec03997942013-08-10 09:56:16 -0500292# Whether to enable the debug log level in OpenStack services
293ENABLE_DEBUG_LOG_LEVEL=`trueorfalse True $ENABLE_DEBUG_LOG_LEVEL`
294
Vishvananda Ishayac9ad14b2012-07-03 20:29:01 +0000295# Set fixed and floating range here so we can make sure not to use addresses
Dean Troyer4a43b7b2012-08-28 17:43:40 -0500296# from either range when attempting to guess the IP to use for the host.
297# Note that setting FIXED_RANGE may be necessary when running DevStack
Dean Troyerd81a0272012-08-31 18:04:55 -0500298# in an OpenStack cloud that uses either of these address ranges internally.
Salvatore Orlando90234ac2013-11-25 05:44:10 -0800299FLOATING_RANGE=${FLOATING_RANGE:-172.24.4.0/24}
Dean Troyerd81a0272012-08-31 18:04:55 -0500300FIXED_RANGE=${FIXED_RANGE:-10.0.0.0/24}
301FIXED_NETWORK_SIZE=${FIXED_NETWORK_SIZE:-256}
Vishvananda Ishayac9ad14b2012-07-03 20:29:01 +0000302
Dean Troyerc892bde2013-03-13 14:06:13 -0500303HOST_IP=$(get_default_host_ip $FIXED_RANGE $FLOATING_RANGE "$HOST_IP_IFACE" "$HOST_IP")
304if [ "$HOST_IP" == "" ]; then
Newell Jensenccb3d102014-03-10 14:28:52 -0700305 die $LINENO "Could not determine host ip address. See local.conf for suggestions on setting HOST_IP."
Jesse Andrewsba23cc72011-09-11 03:22:13 -0700306fi
307
Anthony Young1097c7c2011-12-27 23:22:14 -0800308# Allow the use of an alternate hostname (such as localhost/127.0.0.1) for service endpoints.
309SERVICE_HOST=${SERVICE_HOST:-$HOST_IP}
Dean Troyercc6b4432013-04-08 15:38:03 -0500310
Dean Troyerdf0972c2012-03-07 17:31:03 -0600311# Configure services to use syslog instead of writing to individual log files
Dean Troyerff603ef2011-11-22 17:48:10 -0600312SYSLOG=`trueorfalse False $SYSLOG`
313SYSLOG_HOST=${SYSLOG_HOST:-$HOST_IP}
314SYSLOG_PORT=${SYSLOG_PORT:-516}
315
Sean Dague78096b52014-02-25 10:23:04 -0500316# for DSTAT logging
Sean Dague062cdaf2014-02-10 22:24:49 -0500317DSTAT_FILE=${DSTAT_FILE:-"dstat.txt"}
318
Dean Troyer4a43b7b2012-08-28 17:43:40 -0500319# Use color for logging output (only available if syslog is not used)
Vishvananda Ishaya6f13ba32012-06-01 23:17:38 +0000320LOG_COLOR=`trueorfalse True $LOG_COLOR`
321
Dean Troyer2bbcd682011-11-05 16:19:03 -0500322# Service startup timeout
323SERVICE_TIMEOUT=${SERVICE_TIMEOUT:-60}
324
Jamie Lennoxbd24a8d2013-09-20 16:26:42 +1000325# Reset the bundle of CA certificates
326SSL_BUNDLE_FILE="$DATA_DIR/ca-bundle.pem"
327rm -f $SSL_BUNDLE_FILE
328
Dean Troyer0e8dced2014-07-25 10:33:21 -0500329# Import common services (database, message queue) configuration
330source $TOP_DIR/lib/database
331source $TOP_DIR/lib/rpc_backend
332
333# Make sure we only have one rpc backend enabled,
334# and the specified rpc backend is available on your platform.
335check_rpc_backend
336
Dean Troyerd81a0272012-08-31 18:04:55 -0500337
338# Configure Projects
339# ==================
340
Brant Knudson0049c0c2014-01-16 18:16:48 -0600341# Import apache functions
zhang-hared98a5d02013-06-21 18:18:02 +0800342source $TOP_DIR/lib/apache
Brant Knudson0049c0c2014-01-16 18:16:48 -0600343
344# Import TLS functions
Dean Troyerc83a7e12012-11-29 11:47:58 -0600345source $TOP_DIR/lib/tls
Brant Knudson0049c0c2014-01-16 18:16:48 -0600346
347# Source project function libraries
Sean Dague0392a102013-07-31 13:07:45 -0400348source $TOP_DIR/lib/infra
Sean Dague1b6b5312013-07-31 06:46:34 -0400349source $TOP_DIR/lib/oslo
Sean Dague68322722013-10-21 18:11:40 -0400350source $TOP_DIR/lib/stackforge
Sean Dagueb562e6a2012-11-19 16:00:01 -0500351source $TOP_DIR/lib/horizon
Dean Troyerd81a0272012-08-31 18:04:55 -0500352source $TOP_DIR/lib/keystone
Dean Troyer73f6f252012-09-17 11:22:21 -0500353source $TOP_DIR/lib/glance
Dean Troyerbf67c192012-09-21 15:09:37 -0500354source $TOP_DIR/lib/nova
Dean Troyerd81a0272012-08-31 18:04:55 -0500355source $TOP_DIR/lib/cinder
Attila Fazekasece6a332012-11-29 14:19:41 +0100356source $TOP_DIR/lib/swift
Dean Troyerd81a0272012-08-31 18:04:55 -0500357source $TOP_DIR/lib/ceilometer
358source $TOP_DIR/lib/heat
Mark McClainb05c8762013-07-06 23:29:39 -0400359source $TOP_DIR/lib/neutron
Devananda van der Veenf35cf912012-11-12 17:58:38 -0800360source $TOP_DIR/lib/baremetal
Brad Topolf127e2f2013-01-22 10:17:50 -0600361source $TOP_DIR/lib/ldap
Dean Troyerd81a0272012-08-31 18:04:55 -0500362
Dean Troyercdf3d762013-10-15 09:42:43 -0500363# Extras Source
364# --------------
365
366# Phase: source
367if [[ -d $TOP_DIR/extras.d ]]; then
368 for i in $TOP_DIR/extras.d/*.sh; do
369 [[ -r $i ]] && source $i source
370 done
371fi
372
Dean Troyer1a6d4492013-06-03 16:47:36 -0500373# Set the destination directories for other OpenStack projects
Dean Troyer9f61d292012-11-26 18:56:20 +0000374OPENSTACKCLIENT_DIR=$DEST/python-openstackclient
Dean Troyerb7490da2013-03-18 16:07:56 -0500375
376# Interactive Configuration
377# -------------------------
378
379# Do all interactive config up front before the logging spew begins
James E. Blair213c4162012-11-06 09:38:36 +0100380
Anthony Young7a549f42011-10-12 07:13:13 +0000381# Generic helper to configure passwords
382function read_password {
Dean Troyer7903b792012-09-13 17:16:12 -0500383 XTRACE=$(set +o | grep xtrace)
Anthony Young7a549f42011-10-12 07:13:13 +0000384 set +o xtrace
385 var=$1; msg=$2
386 pw=${!var}
387
Sahid Orentino Ferdjaoui9e032c22014-02-10 11:36:25 +0100388 if [[ -f $RC_DIR/localrc ]]; then
389 localrc=$TOP_DIR/localrc
390 else
391 localrc=$TOP_DIR/.localrc.auto
392 fi
Anthony Young6015c822011-10-12 07:17:11 +0000393
Anthony Young7a549f42011-10-12 07:13:13 +0000394 # If the password is not defined yet, proceed to prompt user for a password.
395 if [ ! $pw ]; then
396 # If there is no localrc file, create one
Anthony Youngb4db2252011-10-12 14:08:08 -0700397 if [ ! -e $localrc ]; then
398 touch $localrc
Anthony Young7a549f42011-10-12 07:13:13 +0000399 fi
400
Vishvananda Ishaya9b353672011-10-20 10:07:10 -0700401 # Presumably if we got this far it can only be that our localrc is missing
Anthony Young7a549f42011-10-12 07:13:13 +0000402 # the required password. Prompt user for a password and write to localrc.
Anthony Youngb4db2252011-10-12 14:08:08 -0700403 echo ''
404 echo '################################################################################'
405 echo $msg
406 echo '################################################################################'
Dean Troyer4e6a2b72011-12-29 17:27:45 -0600407 echo "This value will be written to your localrc file so you don't have to enter it "
408 echo "again. Use only alphanumeric characters."
Anthony Youngb4db2252011-10-12 14:08:08 -0700409 echo "If you leave this blank, a random default value will be used."
Dean Troyer4e6a2b72011-12-29 17:27:45 -0600410 pw=" "
411 while true; do
412 echo "Enter a password now:"
413 read -e $var
414 pw=${!var}
415 [[ "$pw" = "`echo $pw | tr -cd [:alnum:]`" ]] && break
416 echo "Invalid chars in password. Try again:"
417 done
Anthony Youngb4db2252011-10-12 14:08:08 -0700418 if [ ! $pw ]; then
Ian Wienand26a28b42014-05-14 14:10:47 +1000419 pw=$(cat /dev/urandom | tr -cd 'a-f0-9' | head -c 20)
Anthony Young7a549f42011-10-12 07:13:13 +0000420 fi
Anthony Youngb4db2252011-10-12 14:08:08 -0700421 eval "$var=$pw"
422 echo "$var=$pw" >> $localrc
Anthony Young7a549f42011-10-12 07:13:13 +0000423 fi
Dean Troyer7903b792012-09-13 17:16:12 -0500424 $XTRACE
Anthony Young7a549f42011-10-12 07:13:13 +0000425}
426
Dean Troyer13dc5cc2012-03-27 14:50:45 -0500427
Dean Troyerb9182d62012-11-07 12:31:34 -0600428# Database Configuration
Dean Troyerb9182d62012-11-07 12:31:34 -0600429
Dean Troyerafc29fe2013-02-07 15:56:24 -0600430# To select between database backends, add the following to ``localrc``:
Terry Wilson428af5a2012-11-01 16:12:39 -0400431#
Dean Troyerafc29fe2013-02-07 15:56:24 -0600432# disable_service mysql
433# enable_service postgresql
Terry Wilson428af5a2012-11-01 16:12:39 -0400434#
Dean Troyerafc29fe2013-02-07 15:56:24 -0600435# The available database backends are listed in ``DATABASE_BACKENDS`` after
436# ``lib/database`` is sourced. ``mysql`` is the default.
Terry Wilson428af5a2012-11-01 16:12:39 -0400437
438initialize_database_backends && echo "Using $DATABASE_TYPE database backend" || echo "No database enabled"
439
Dean Troyerb9182d62012-11-07 12:31:34 -0600440
Dean Troyerb7490da2013-03-18 16:07:56 -0500441# Queue Configuration
Jesse Andrews782b9912011-10-02 16:53:21 -0400442
Anthony Younga8416442011-09-13 20:07:44 -0700443# Rabbit connection info
Russell Bryant4a221452012-03-13 13:44:12 -0400444if is_service_enabled rabbit; then
Bob Balle309e5a2014-04-01 16:28:36 +0100445 RABBIT_HOST=${RABBIT_HOST:-$SERVICE_HOST}
Russell Bryant4a221452012-03-13 13:44:12 -0400446 read_password RABBIT_PASSWORD "ENTER A PASSWORD TO USE FOR RABBIT."
447fi
Jesse Andrewsba23cc72011-09-11 03:22:13 -0700448
Dean Troyerb7490da2013-03-18 16:07:56 -0500449
450# Keystone
451
452if is_service_enabled key; then
453 # The ``SERVICE_TOKEN`` is used to bootstrap the Keystone database. It is
454 # just a string and is not a 'real' Keystone token.
455 read_password SERVICE_TOKEN "ENTER A SERVICE_TOKEN TO USE FOR THE SERVICE ADMIN TOKEN."
456 # Services authenticate to Identity with servicename/``SERVICE_PASSWORD``
457 read_password SERVICE_PASSWORD "ENTER A SERVICE_PASSWORD TO USE FOR THE SERVICE AUTHENTICATION."
458 # Horizon currently truncates usernames and passwords at 20 characters
459 read_password ADMIN_PASSWORD "ENTER A PASSWORD TO USE FOR HORIZON AND KEYSTONE (20 CHARS OR LESS)."
460
461 # Keystone can now optionally install OpenLDAP by enabling the ``ldap``
462 # service in ``localrc`` (e.g. ``enable_service ldap``).
463 # To clean out the Keystone contents in OpenLDAP set ``KEYSTONE_CLEAR_LDAP``
464 # to ``yes`` (e.g. ``KEYSTONE_CLEAR_LDAP=yes``) in ``localrc``. To enable the
465 # Keystone Identity Driver (``keystone.identity.backends.ldap.Identity``)
466 # set ``KEYSTONE_IDENTITY_BACKEND`` to ``ldap`` (e.g.
467 # ``KEYSTONE_IDENTITY_BACKEND=ldap``) in ``localrc``.
468
469 # only request ldap password if the service is enabled
470 if is_service_enabled ldap; then
471 read_password LDAP_PASSWORD "ENTER A PASSWORD TO USE FOR LDAP"
Chmouel Boudjnah6ae9ea52012-07-05 06:50:51 +0000472 fi
Dean Troyerb7490da2013-03-18 16:07:56 -0500473fi
474
475
476# Swift
477
478if is_service_enabled s-proxy; then
Chmouel Boudjnah77b0e1d2012-02-29 16:55:43 +0000479 # We only ask for Swift Hash if we have enabled swift service.
Dean Troyerb9182d62012-11-07 12:31:34 -0600480 # ``SWIFT_HASH`` is a random unique string for a swift cluster that
Chmouel Boudjnahb2857e42011-11-03 16:19:14 +0100481 # can never change.
482 read_password SWIFT_HASH "ENTER A RANDOM SWIFT HASH."
483fi
Vishvananda Ishaya5f039322011-11-05 16:12:20 -0700484
Dean Troyerdf0972c2012-03-07 17:31:03 -0600485
Dean Troyerb7490da2013-03-18 16:07:56 -0500486# Configure logging
487# -----------------
Dean Troyer471de7a2011-12-27 11:45:55 -0600488
Vishvananda Ishaya7879a3c2012-09-21 15:36:06 -0700489# Draw a spinner so the user knows something is happening
Ian Wienandaee18c72014-02-21 15:35:08 +1100490function spinner {
Vishvananda Ishaya7879a3c2012-09-21 15:36:06 -0700491 local delay=0.75
Dean Troyerb9182d62012-11-07 12:31:34 -0600492 local spinstr='/-\|'
Vishvananda Ishaya7879a3c2012-09-21 15:36:06 -0700493 printf "..." >&3
494 while [ true ]; do
495 local temp=${spinstr#?}
496 printf "[%c]" "$spinstr" >&3
497 local spinstr=$temp${spinstr%"$temp"}
498 sleep $delay
499 printf "\b\b\b" >&3
500 done
501}
502
Roger Luethide56ee12014-04-26 14:21:33 +0200503function kill_spinner {
504 if [ ! -z "$LAST_SPINNER_PID" ]; then
505 kill >/dev/null 2>&1 $LAST_SPINNER_PID
506 printf "\b\b\bdone\n" >&3
507 fi
508}
509
Dean Troyer7903b792012-09-13 17:16:12 -0500510# Echo text to the log file, summary log file and stdout
511# echo_summary "something to say"
Ian Wienandaee18c72014-02-21 15:35:08 +1100512function echo_summary {
Vishvananda Ishaya7879a3c2012-09-21 15:36:06 -0700513 if [[ -t 3 && "$VERBOSE" != "True" ]]; then
Roger Luethide56ee12014-04-26 14:21:33 +0200514 kill_spinner
Dean Troyerafc29fe2013-02-07 15:56:24 -0600515 echo -n -e $@ >&6
Vishvananda Ishaya7879a3c2012-09-21 15:36:06 -0700516 spinner &
517 LAST_SPINNER_PID=$!
518 else
Dean Troyerafc29fe2013-02-07 15:56:24 -0600519 echo -e $@ >&6
Vishvananda Ishaya7879a3c2012-09-21 15:36:06 -0700520 fi
Dean Troyer7903b792012-09-13 17:16:12 -0500521}
522
523# Echo text only to stdout, no log files
524# echo_nolog "something not for the logs"
Ian Wienandaee18c72014-02-21 15:35:08 +1100525function echo_nolog {
Dean Troyer7903b792012-09-13 17:16:12 -0500526 echo $@ >&3
527}
528
Ian Wienandf565bf22014-07-17 14:50:29 +1000529if [[ is_fedora && $DISTRO =~ (rhel) ]]; then
530 # poor old python2.6 doesn't have argparse by default, which
531 # outfilter.py uses
532 is_package_installed python-argparse || install_package python-argparse
533fi
534
Dean Troyer4a43b7b2012-08-28 17:43:40 -0500535# Set up logging for ``stack.sh``
536# Set ``LOGFILE`` to turn on logging
537# Append '.xxxxxxxx' to the given name to maintain history
538# where 'xxxxxxxx' is a representation of the date the file was created
Dean Troyer33cb4302012-12-10 16:47:36 -0600539TIMESTAMP_FORMAT=${TIMESTAMP_FORMAT:-"%F-%H%M%S"}
Chmouel Boudjnahd966ed22012-03-05 12:42:48 +0000540if [[ -n "$LOGFILE" || -n "$SCREEN_LOGDIR" ]]; then
541 LOGDAYS=${LOGDAYS:-7}
Chmouel Boudjnahd966ed22012-03-05 12:42:48 +0000542 CURRENT_LOG_TIME=$(date "+$TIMESTAMP_FORMAT")
543fi
544
Dean Troyer471de7a2011-12-27 11:45:55 -0600545if [[ -n "$LOGFILE" ]]; then
Dean Troyer4a43b7b2012-08-28 17:43:40 -0500546 # First clean up old log files. Use the user-specified ``LOGFILE``
Dean Troyer471de7a2011-12-27 11:45:55 -0600547 # as the template to search for, appending '.*' to match the date
548 # we added on earlier runs.
Dean Troyer471de7a2011-12-27 11:45:55 -0600549 LOGDIR=$(dirname "$LOGFILE")
David Ripton406019a2013-03-06 09:58:39 -0500550 LOGFILENAME=$(basename "$LOGFILE")
Chmouel Boudjnahfff6fec2012-03-09 15:37:56 +0000551 mkdir -p $LOGDIR
David Ripton406019a2013-03-06 09:58:39 -0500552 find $LOGDIR -maxdepth 1 -name $LOGFILENAME.\* -mtime +$LOGDAYS -exec rm {} \;
Chmouel Boudjnahd966ed22012-03-05 12:42:48 +0000553 LOGFILE=$LOGFILE.${CURRENT_LOG_TIME}
Dean Troyer7903b792012-09-13 17:16:12 -0500554 SUMFILE=$LOGFILE.${CURRENT_LOG_TIME}.summary
555
556 # Redirect output according to config
Dean Troyerb9182d62012-11-07 12:31:34 -0600557
Jun Wu8710b652014-04-28 20:36:08 +0800558 # Set fd 3 to a copy of stdout. So we can set fd 1 without losing
559 # stdout later.
Dean Troyer7903b792012-09-13 17:16:12 -0500560 exec 3>&1
561 if [[ "$VERBOSE" == "True" ]]; then
Jun Wu8710b652014-04-28 20:36:08 +0800562 # Set fd 1 and 2 to write the log file
Mauro S. M. Rodriguesdae11522014-06-17 01:10:54 +0000563 exec 1> >( $TOP_DIR/tools/outfilter.py -v -o "${LOGFILE}" ) 2>&1
Jun Wu8710b652014-04-28 20:36:08 +0800564 # Set fd 6 to summary log file
Mauro S. M. Rodriguesdae11522014-06-17 01:10:54 +0000565 exec 6> >( $TOP_DIR/tools/outfilter.py -o "${SUMFILE}" )
Dean Troyer7903b792012-09-13 17:16:12 -0500566 else
567 # Set fd 1 and 2 to primary logfile
Mauro S. M. Rodriguesdae11522014-06-17 01:10:54 +0000568 exec 1> >( $TOP_DIR/tools/outfilter.py -o "${LOGFILE}" ) 2>&1
Dean Troyer7903b792012-09-13 17:16:12 -0500569 # Set fd 6 to summary logfile and stdout
Mauro S. M. Rodriguesdae11522014-06-17 01:10:54 +0000570 exec 6> >( $TOP_DIR/tools/outfilter.py -v -o "${SUMFILE}" >&3 )
Dean Troyer7903b792012-09-13 17:16:12 -0500571 fi
572
573 echo_summary "stack.sh log $LOGFILE"
Dean Troyer471de7a2011-12-27 11:45:55 -0600574 # Specified logfile name always links to the most recent log
David Ripton406019a2013-03-06 09:58:39 -0500575 ln -sf $LOGFILE $LOGDIR/$LOGFILENAME
576 ln -sf $SUMFILE $LOGDIR/$LOGFILENAME.summary
Dean Troyer7903b792012-09-13 17:16:12 -0500577else
578 # Set up output redirection without log files
Jun Wu8710b652014-04-28 20:36:08 +0800579 # Set fd 3 to a copy of stdout. So we can set fd 1 without losing
580 # stdout later.
Dean Troyer7903b792012-09-13 17:16:12 -0500581 exec 3>&1
Eric Windischefdf3ff2012-09-24 12:47:44 -0400582 if [[ "$VERBOSE" != "True" ]]; then
Dean Troyer7903b792012-09-13 17:16:12 -0500583 # Throw away stdout and stderr
584 exec 1>/dev/null 2>&1
585 fi
586 # Always send summary fd to original stdout
Mauro S. M. Rodriguesdae11522014-06-17 01:10:54 +0000587 exec 6> >( $TOP_DIR/tools/outfilter.py -v >&3 )
Dean Troyer471de7a2011-12-27 11:45:55 -0600588fi
589
Chmouel Boudjnahd966ed22012-03-05 12:42:48 +0000590# Set up logging of screen windows
Dean Troyer4a43b7b2012-08-28 17:43:40 -0500591# Set ``SCREEN_LOGDIR`` to turn on logging of screen windows to the
592# directory specified in ``SCREEN_LOGDIR``, we will log to the the file
593# ``screen-$SERVICE_NAME-$TIMESTAMP.log`` in that dir and have a link
594# ``screen-$SERVICE_NAME.log`` to the latest log file.
595# Logs are kept for as long specified in ``LOGDAYS``.
Chmouel Boudjnahd966ed22012-03-05 12:42:48 +0000596if [[ -n "$SCREEN_LOGDIR" ]]; then
597
598 # We make sure the directory is created.
599 if [[ -d "$SCREEN_LOGDIR" ]]; then
600 # We cleanup the old logs
601 find $SCREEN_LOGDIR -maxdepth 1 -name screen-\*.log -mtime +$LOGDAYS -exec rm {} \;
602 else
603 mkdir -p $SCREEN_LOGDIR
604 fi
605fi
606
Dean Troyer4a43b7b2012-08-28 17:43:40 -0500607
608# Set Up Script Execution
609# -----------------------
610
Vishvananda Ishaya7879a3c2012-09-21 15:36:06 -0700611# Kill background processes on exit
Dean Troyera25a6f62014-02-24 16:03:41 -0600612trap exit_trap EXIT
613function exit_trap {
Vishvananda Ishaya7879a3c2012-09-21 15:36:06 -0700614 local r=$?
Dean Troyer94b9e822014-02-27 11:13:36 -0600615 jobs=$(jobs -p)
Dean Troyera3935fb2014-03-21 13:00:32 -0500616 # Only do the kill when we're logging through a process substitution,
617 # which currently is only to verbose logfile
618 if [[ -n $jobs && -n "$LOGFILE" && "$VERBOSE" == "True" ]]; then
Dean Troyer94b9e822014-02-27 11:13:36 -0600619 echo "exit_trap: cleaning up child processes"
620 kill 2>&1 $jobs
621 fi
Roger Luethide56ee12014-04-26 14:21:33 +0200622
623 # Kill the last spinner process
624 kill_spinner
625
Sean Dague97fcc7b2014-06-16 17:24:14 -0400626 if [[ $r -ne 0 ]]; then
627 echo "Error on exit"
628 ./tools/worlddump.py -d $LOGDIR
629 fi
630
Vishvananda Ishaya7879a3c2012-09-21 15:36:06 -0700631 exit $r
632}
633
Dean Troyer4a43b7b2012-08-28 17:43:40 -0500634# Exit on any errors so that errors don't compound
Dean Troyera25a6f62014-02-24 16:03:41 -0600635trap err_trap ERR
636function err_trap {
Scott Moserf9da5082011-10-07 21:28:00 -0400637 local r=$?
638 set +o xtrace
Dean Troyera25a6f62014-02-24 16:03:41 -0600639 if [[ -n "$LOGFILE" ]]; then
640 echo "${0##*/} failed: full log in $LOGFILE"
641 else
642 echo "${0##*/} failed"
643 fi
Scott Moserf9da5082011-10-07 21:28:00 -0400644 exit $r
645}
646
Sean Dague09bd7c82014-02-03 08:35:26 +0900647
648set -o errexit
649
Scott Moserf9da5082011-10-07 21:28:00 -0400650# Print the commands being run so that we can see the command that triggers
651# an error. It is also useful for following along as the install occurs.
652set -o xtrace
653
Dean Troyer1a6d4492013-06-03 16:47:36 -0500654
Jesse Andrews30f68e92011-09-13 00:59:54 -0700655# Install Packages
Jesse Andrewsd74257d2011-09-13 01:24:50 -0700656# ================
Dean Troyer7d28a0e2012-06-27 17:55:52 -0500657
Dean Troyer4a43b7b2012-08-28 17:43:40 -0500658# OpenStack uses a fair number of other projects.
Jesse Andrews30f68e92011-09-13 00:59:54 -0700659
Dean Troyer7d28a0e2012-06-27 17:55:52 -0500660# Install package requirements
Dean Troyer48352ee2012-12-12 12:50:38 -0600661# Source it so the entire environment is available
Dean Troyer7903b792012-09-13 17:16:12 -0500662echo_summary "Installing package prerequisites"
Dean Troyer48352ee2012-12-12 12:50:38 -0600663source $TOP_DIR/tools/install_prereqs.sh
Monty Taylor47f02062012-07-26 11:09:24 -0500664
Dean Troyer62d1d692013-08-01 17:40:40 -0500665# Configure an appropriate python environment
Arata Notsu8b5d3cf2013-10-17 21:42:49 +0900666if [[ "$OFFLINE" != "True" ]]; then
Franck Yelles683ff422014-06-19 02:14:42 -0700667 PYPI_ALTERNATIVE_URL=$PYPI_ALTERNATIVE_URL $TOP_DIR/tools/install_pip.sh
Arata Notsu8b5d3cf2013-10-17 21:42:49 +0900668fi
Dean Troyer1a6d4492013-06-03 16:47:36 -0500669
Gael Chamoulaudd3121f62014-07-24 23:53:02 +0200670# Do the ugly hacks for broken packages and distros
Dean Troyer9acc12a2013-08-09 15:09:31 -0500671$TOP_DIR/tools/fixup_stuff.sh
672
Dean Troyer5c3a63e2014-07-09 11:27:42 -0500673
674# Extras Pre-install
675# ------------------
676
677# Phase: pre-install
678if [[ -d $TOP_DIR/extras.d ]]; then
679 for i in $TOP_DIR/extras.d/*.sh; do
680 [[ -r $i ]] && source $i stack pre-install
681 done
682fi
683
684
Dean Troyer62d1d692013-08-01 17:40:40 -0500685install_rpc_backend
686
687if is_service_enabled $DATABASE_BACKENDS; then
688 install_database
689fi
690
691if is_service_enabled neutron; then
692 install_neutron_agent_packages
693fi
694
Monty Taylor47f02062012-07-26 11:09:24 -0500695TRACK_DEPENDS=${TRACK_DEPENDS:-False}
696
697# Install python packages into a virtualenv so that we can track them
Dean Troyercc6b4432013-04-08 15:38:03 -0500698if [[ $TRACK_DEPENDS = True ]]; then
Dean Troyer7903b792012-09-13 17:16:12 -0500699 echo_summary "Installing Python packages into a virtualenv $DEST/.venv"
Sean Dague6c844632013-07-31 06:50:14 -0400700 pip_install -U virtualenv
Monty Taylor47f02062012-07-26 11:09:24 -0500701
702 rm -rf $DEST/.venv
703 virtualenv --system-site-packages $DEST/.venv
704 source $DEST/.venv/bin/activate
705 $DEST/.venv/bin/pip freeze > $DEST/requires-pre-pip
706fi
707
Dean Troyerfe51a902013-04-01 15:48:44 -0500708# Check Out and Install Source
709# ----------------------------
Dean Troyer4a43b7b2012-08-28 17:43:40 -0500710
Dean Troyer7903b792012-09-13 17:16:12 -0500711echo_summary "Installing OpenStack project source"
712
Sean Dague0392a102013-07-31 13:07:45 -0400713# Install required infra support libraries
714install_infra
Monty Taylor5e159492013-05-08 14:29:52 -0400715
Sean Dague1b6b5312013-07-31 06:46:34 -0400716# Install oslo libraries that have graduated
717install_oslo
718
Sean Dague68322722013-10-21 18:11:40 -0400719# Install stackforge libraries for testing
Sean Daguef7cfa0c2013-10-25 13:26:17 -0400720if is_service_enabled stackforge_libs; then
721 install_stackforge
722fi
Sean Dague68322722013-10-21 18:11:40 -0400723
Dean Troyerfe51a902013-04-01 15:48:44 -0500724# Install clients libraries
Dean Troyerd81a0272012-08-31 18:04:55 -0500725install_keystoneclient
Dean Troyer73f6f252012-09-17 11:22:21 -0500726install_glanceclient
Dean Troyer253a1a32013-04-01 18:23:22 -0500727install_cinderclient
Dean Troyerbf67c192012-09-21 15:09:37 -0500728install_novaclient
Sean Dague75195b52013-07-25 15:38:09 -0400729if is_service_enabled swift glance horizon; then
Dean Troyerfe51a902013-04-01 15:48:44 -0500730 install_swiftclient
731fi
Sean Dague75195b52013-07-25 15:38:09 -0400732if is_service_enabled neutron nova horizon; then
Mark McClainb05c8762013-07-06 23:29:39 -0400733 install_neutronclient
Dean Troyerfe51a902013-04-01 15:48:44 -0500734fi
Sean Dague75195b52013-07-25 15:38:09 -0400735if is_service_enabled heat horizon; then
736 install_heatclient
737fi
Dean Troyerfe51a902013-04-01 15:48:44 -0500738
Morgan Fainberg58936fd2014-06-24 12:26:07 -0700739# Install middleware
740install_keystonemiddleware
741
Dean Troyer9f61d292012-11-26 18:56:20 +0000742git_clone $OPENSTACKCLIENT_REPO $OPENSTACKCLIENT_DIR $OPENSTACKCLIENT_BRANCH
Dean Troyer253a1a32013-04-01 18:23:22 -0500743setup_develop $OPENSTACKCLIENT_DIR
Dean Troyer9f61d292012-11-26 18:56:20 +0000744
Dean Troyerfe51a902013-04-01 15:48:44 -0500745if is_service_enabled key; then
Bartosz Górski0abde392014-02-28 14:15:19 +0100746 if [ "$KEYSTONE_AUTH_HOST" == "$SERVICE_HOST" ]; then
747 install_keystone
748 configure_keystone
749 fi
Jesse Andrews38df1222011-11-20 09:55:44 -0800750fi
Attila Fazekasece6a332012-11-29 14:19:41 +0100751
Chmouel Boudjnah0c3a5582013-03-06 10:58:33 +0100752if is_service_enabled s-proxy; then
Attila Fazekasece6a332012-11-29 14:19:41 +0100753 install_swift
Dean Troyerfe51a902013-04-01 15:48:44 -0500754 configure_swift
755
rahmu9d2647a2013-04-24 10:40:07 +0200756 # swift3 middleware to provide S3 emulation to Swift
Chmouel Boudjnah6ae9ea52012-07-05 06:50:51 +0000757 if is_service_enabled swift3; then
rahmu9d2647a2013-04-24 10:40:07 +0200758 # replace the nova-objectstore port by the swift port
759 S3_SERVICE_PORT=8080
Chmouel Boudjnah6ae9ea52012-07-05 06:50:51 +0000760 git_clone $SWIFT3_REPO $SWIFT3_DIR $SWIFT3_BRANCH
Dean Troyerfe51a902013-04-01 15:48:44 -0500761 setup_develop $SWIFT3_DIR
Chmouel Boudjnah6ae9ea52012-07-05 06:50:51 +0000762 fi
James E. Blaire7ce24f2011-11-10 13:05:13 -0800763fi
Attila Fazekasece6a332012-11-29 14:19:41 +0100764
Chmouel Boudjnaha6651e92012-02-16 10:16:52 +0000765if is_service_enabled g-api n-api; then
James E. Blaire7ce24f2011-11-10 13:05:13 -0800766 # image catalog service
Dean Troyer73f6f252012-09-17 11:22:21 -0500767 install_glance
Dean Troyerfe51a902013-04-01 15:48:44 -0500768 configure_glance
James E. Blaire7ce24f2011-11-10 13:05:13 -0800769fi
Dean Troyerfe51a902013-04-01 15:48:44 -0500770
771if is_service_enabled cinder; then
772 install_cinder
773 configure_cinder
774fi
775
Mark McClainb05c8762013-07-06 23:29:39 -0400776if is_service_enabled neutron; then
777 install_neutron
778 install_neutron_third_party
Dean Troyerfe51a902013-04-01 15:48:44 -0500779fi
780
Dean Troyerbf67c192012-09-21 15:09:37 -0500781if is_service_enabled nova; then
782 # compute service
783 install_nova
Dean Troyerfe51a902013-04-01 15:48:44 -0500784 cleanup_nova
785 configure_nova
Dean Troyerbf67c192012-09-21 15:09:37 -0500786fi
Dean Troyerfe51a902013-04-01 15:48:44 -0500787
Chmouel Boudjnaha6651e92012-02-16 10:16:52 +0000788if is_service_enabled horizon; then
Zhenguo Niue385d1e2014-03-12 16:58:12 +0800789 # django openstack_auth
790 install_django_openstack_auth
Sean Dagueb562e6a2012-11-19 16:00:01 -0500791 # dashboard
792 install_horizon
Dean Troyerfe51a902013-04-01 15:48:44 -0500793 configure_horizon
James E. Blaire7ce24f2011-11-10 13:05:13 -0800794fi
Dean Troyerfe51a902013-04-01 15:48:44 -0500795
John H. Tran93361642012-07-26 11:22:05 -0700796if is_service_enabled ceilometer; then
Yunhong, Jiange583d9b2013-01-09 09:33:07 +0800797 install_ceilometerclient
John H. Tran93361642012-07-26 11:22:05 -0700798 install_ceilometer
Attila Fazekas12bb53b2013-07-25 23:02:48 +0200799 echo_summary "Configuring Ceilometer"
800 configure_ceilometer
John H. Tran93361642012-07-26 11:22:05 -0700801fi
Dean Troyer4a43b7b2012-08-28 17:43:40 -0500802
Steve Bakerbfdad752012-08-18 09:00:42 +1200803if is_service_enabled heat; then
Sean Dagued644e232013-07-25 15:34:48 -0400804 install_heat
Steve Bakerc3249082013-04-09 13:41:47 +1200805 cleanup_heat
Steve Bakerbfdad752012-08-18 09:00:42 +1200806 configure_heat
807fi
Dean Troyerb7490da2013-03-18 16:07:56 -0500808
Dean Troyerfe51a902013-04-01 15:48:44 -0500809if is_service_enabled tls-proxy; then
810 configure_CA
811 init_CA
812 init_cert
813 # Add name to /etc/hosts
814 # don't be naive and add to existing line!
Dean Troyer67787e62012-05-02 11:48:15 -0500815fi
Jesse Andrewsba23cc72011-09-11 03:22:13 -0700816
Roman Prykhodchenkoce696b62013-08-09 10:40:45 +0300817
Dean Troyercdf3d762013-10-15 09:42:43 -0500818# Extras Install
819# --------------
820
821# Phase: install
822if [[ -d $TOP_DIR/extras.d ]]; then
823 for i in $TOP_DIR/extras.d/*.sh; do
824 [[ -r $i ]] && source $i stack install
825 done
826fi
827
Dean Troyercc6b4432013-04-08 15:38:03 -0500828if [[ $TRACK_DEPENDS = True ]]; then
Monty Taylor47f02062012-07-26 11:09:24 -0500829 $DEST/.venv/bin/pip freeze > $DEST/requires-post-pip
Dean Troyercc6b4432013-04-08 15:38:03 -0500830 if ! diff -Nru $DEST/requires-pre-pip $DEST/requires-post-pip > $DEST/requires.diff; then
DennyZhange8fa8532013-11-03 12:22:04 -0600831 echo "Detect some changes for installed packages of pip, in depend tracking mode"
Monty Taylor47f02062012-07-26 11:09:24 -0500832 cat $DEST/requires.diff
833 fi
834 echo "Ran stack.sh in depend tracking mode, bailing out now"
835 exit 0
836fi
Dean Troyerdf0972c2012-03-07 17:31:03 -0600837
Dean Troyerb7490da2013-03-18 16:07:56 -0500838
Dean Troyerff603ef2011-11-22 17:48:10 -0600839# Syslog
Dean Troyerdf0972c2012-03-07 17:31:03 -0600840# ------
Dean Troyerff603ef2011-11-22 17:48:10 -0600841
842if [[ $SYSLOG != "False" ]]; then
Dean Troyerff603ef2011-11-22 17:48:10 -0600843 if [[ "$SYSLOG_HOST" = "$HOST_IP" ]]; then
844 # Configure the master host to receive
845 cat <<EOF >/tmp/90-stack-m.conf
846\$ModLoad imrelp
847\$InputRELPServerRun $SYSLOG_PORT
848EOF
849 sudo mv /tmp/90-stack-m.conf /etc/rsyslog.d
850 else
851 # Set rsyslog to send to remote host
852 cat <<EOF >/tmp/90-stack-s.conf
853*.* :omrelp:$SYSLOG_HOST:$SYSLOG_PORT
854EOF
855 sudo mv /tmp/90-stack-s.conf /etc/rsyslog.d
856 fi
cloudnulle4859f02013-05-28 14:10:58 -0500857
858 RSYSLOGCONF="/etc/rsyslog.conf"
859 if [ -f $RSYSLOGCONF ]; then
860 sudo cp -b $RSYSLOGCONF $RSYSLOGCONF.bak
861 if [[ $(grep '$SystemLogRateLimitBurst' $RSYSLOGCONF) ]]; then
862 sudo sed -i 's/$SystemLogRateLimitBurst\ .*/$SystemLogRateLimitBurst\ 0/' $RSYSLOGCONF
863 else
864 sudo sed -i '$ i $SystemLogRateLimitBurst\ 0' $RSYSLOGCONF
865 fi
866 if [[ $(grep '$SystemLogRateLimitInterval' $RSYSLOGCONF) ]]; then
867 sudo sed -i 's/$SystemLogRateLimitInterval\ .*/$SystemLogRateLimitInterval\ 0/' $RSYSLOGCONF
868 else
869 sudo sed -i '$ i $SystemLogRateLimitInterval\ 0' $RSYSLOGCONF
870 fi
871 fi
872
Dean Troyer7903b792012-09-13 17:16:12 -0500873 echo_summary "Starting rsyslog"
Dean Troyer13dc5cc2012-03-27 14:50:45 -0500874 restart_service rsyslog
Dean Troyerff603ef2011-11-22 17:48:10 -0600875fi
876
Dean Troyerdf0972c2012-03-07 17:31:03 -0600877
Joe Gordone5d92382012-09-13 17:19:03 -0700878# Finalize queue installation
879# ----------------------------
Akihiro MOTOKIb0f1c382013-01-13 17:58:12 +0900880restart_rpc_backend
Jesse Andrewsba23cc72011-09-11 03:22:13 -0700881
Dean Troyerdf0972c2012-03-07 17:31:03 -0600882
Jamie Lennoxbd24a8d2013-09-20 16:26:42 +1000883# Export Certicate Authority Bundle
884# ---------------------------------
885
886# If certificates were used and written to the SSL bundle file then these
887# should be exported so clients can validate their connections.
888
889if [ -f $SSL_BUNDLE_FILE ]; then
890 export OS_CACERT=$SSL_BUNDLE_FILE
891fi
892
893
Terry Wilson428af5a2012-11-01 16:12:39 -0400894# Configure database
895# ------------------
Dean Troyerb9182d62012-11-07 12:31:34 -0600896
Terry Wilson428af5a2012-11-01 16:12:39 -0400897if is_service_enabled $DATABASE_BACKENDS; then
898 configure_database
Jesse Andrews24859062011-09-15 21:28:23 -0700899fi
900
Dean Troyerb9182d62012-11-07 12:31:34 -0600901
902# Configure screen
903# ----------------
904
Dean Troyer681f3fd2013-02-27 19:00:39 -0600905USE_SCREEN=$(trueorfalse True $USE_SCREEN)
906if [[ "$USE_SCREEN" == "True" ]]; then
907 # Create a new named screen to run processes in
908 screen -d -m -S $SCREEN_NAME -t shell -s /bin/bash
909 sleep 1
910
911 # Set a reasonable status bar
912 if [ -z "$SCREEN_HARDSTATUS" ]; then
913 SCREEN_HARDSTATUS='%{= .} %-Lw%{= .}%> %n%f %t*%{= .}%+Lw%< %-=%{g}(%{d}%H/%l%{g})'
914 fi
915 screen -r $SCREEN_NAME -X hardstatus alwayslastline "$SCREEN_HARDSTATUS"
Steven Dake30396572013-06-30 16:11:54 -0700916 screen -r $SCREEN_NAME -X setenv PROMPT_COMMAND /bin/true
Josh Kearney0a7a41e2012-04-04 17:47:56 -0500917fi
918
Jiajun Liu61bb2c12012-10-19 09:48:30 +0800919# Clear screen rc file
920SCREENRC=$TOP_DIR/$SCREEN_NAME-screenrc
921if [[ -e $SCREENRC ]]; then
Jiajun Liu8e58c072013-07-17 06:41:50 +0000922 rm -f $SCREENRC
Jiajun Liu61bb2c12012-10-19 09:48:30 +0800923fi
Dean Troyerb9182d62012-11-07 12:31:34 -0600924
jiajun xua9414242012-12-06 16:30:57 +0800925# Initialize the directory for service status check
926init_service_check
Dean Troyer7d28a0e2012-06-27 17:55:52 -0500927
Sean Dague78096b52014-02-25 10:23:04 -0500928# Dstat
Dean Troyer1a6d4492013-06-03 16:47:36 -0500929# -------
930
Sean Daguef1eb0472014-02-11 17:28:56 -0500931# A better kind of sysstat, with the top process per time slice
James E. Blaire8d84062014-03-26 08:19:37 -0700932DSTAT_OPTS="-tcmndrylp --top-cpu-adv"
Sean Daguef1eb0472014-02-11 17:28:56 -0500933if [[ -n ${SCREEN_LOGDIR} ]]; then
934 screen_it dstat "cd $TOP_DIR; dstat $DSTAT_OPTS | tee $SCREEN_LOGDIR/$DSTAT_FILE"
935else
936 screen_it dstat "dstat $DSTAT_OPTS"
Sean Dague062cdaf2014-02-10 22:24:49 -0500937fi
938
Dean Troyer893e6632013-09-13 15:05:51 -0500939# Start Services
940# ==============
941
Dean Troyerd81a0272012-08-31 18:04:55 -0500942# Keystone
943# --------
944
945if is_service_enabled key; then
Dean Troyer7903b792012-09-13 17:16:12 -0500946 echo_summary "Starting Keystone"
Bartosz Górski0abde392014-02-28 14:15:19 +0100947
948 if [ "$KEYSTONE_AUTH_HOST" == "$SERVICE_HOST" ]; then
949 init_keystone
950 start_keystone
951 fi
Dean Troyerd81a0272012-08-31 18:04:55 -0500952
Dean Troyerd835de82012-11-29 17:11:35 -0600953 # Set up a temporary admin URI for Keystone
Jamie Lennox3561d7f2014-05-21 17:18:43 +1000954 SERVICE_ENDPOINT=$KEYSTONE_AUTH_URI/v2.0
Dean Troyerc83a7e12012-11-29 11:47:58 -0600955
956 if is_service_enabled tls-proxy; then
957 export OS_CACERT=$INT_CA_DIR/ca-chain.pem
958 # Until the client support is fixed, just use the internal endpoint
959 SERVICE_ENDPOINT=http://$KEYSTONE_AUTH_HOST:$KEYSTONE_AUTH_PORT_INT/v2.0
960 fi
Dean Troyerd81a0272012-08-31 18:04:55 -0500961
Dean Troyer42a59c22014-03-03 14:31:29 -0600962 # Setup OpenStackclient token-flow auth
Steve Martinelli19685422014-01-24 13:02:26 -0600963 export OS_TOKEN=$SERVICE_TOKEN
964 export OS_URL=$SERVICE_ENDPOINT
Dean Troyer42a59c22014-03-03 14:31:29 -0600965
Dean Troyerd835de82012-11-29 17:11:35 -0600966 create_keystone_accounts
Dean Troyera0dce262012-12-11 16:52:37 -0600967 create_nova_accounts
Dean Troyer42a59c22014-03-03 14:31:29 -0600968 create_glance_accounts
Dean Troyer671c16e2012-12-13 16:22:38 -0600969 create_cinder_accounts
Mark McClainb05c8762013-07-06 23:29:39 -0400970 create_neutron_accounts
Dean Troyerd835de82012-11-29 17:11:35 -0600971
Dirk Muellerfa5ccff2014-01-09 13:27:35 +0100972 if is_service_enabled ceilometer; then
973 create_ceilometer_accounts
974 fi
975
Dean Troyer42a59c22014-03-03 14:31:29 -0600976 if is_service_enabled swift; then
Ian Wienand0ff314c2013-07-17 16:30:19 +1000977 create_swift_accounts
978 fi
979
Steven Hardy33d1f862014-02-13 15:00:33 +0000980 if is_service_enabled heat; then
981 create_heat_accounts
982 fi
983
Dean Troyer42a59c22014-03-03 14:31:29 -0600984 # Begone token-flow auth
Steve Martinelli19685422014-01-24 13:02:26 -0600985 unset OS_TOKEN OS_URL
Dean Troyer42a59c22014-03-03 14:31:29 -0600986
987 # Set up password-flow auth creds now that keystone is bootstrapped
Dean Troyerd81a0272012-08-31 18:04:55 -0500988 export OS_AUTH_URL=$SERVICE_ENDPOINT
989 export OS_TENANT_NAME=admin
990 export OS_USERNAME=admin
991 export OS_PASSWORD=$ADMIN_PASSWORD
Bartosz Górski0abde392014-02-28 14:15:19 +0100992 export OS_REGION_NAME=$REGION_NAME
Dean Troyerd81a0272012-08-31 18:04:55 -0500993fi
994
995
Tres Henryca85b792011-10-28 14:00:21 -0700996# Horizon
Dean Troyerdf0972c2012-03-07 17:31:03 -0600997# -------
Jesse Andrewscbe98d52011-10-02 17:47:32 -0400998
Dean Troyer7d28a0e2012-06-27 17:55:52 -0500999# Set up the django horizon application to serve via apache/wsgi
Jesse Andrews75a37652011-09-12 17:09:08 -07001000
Chmouel Boudjnaha6651e92012-02-16 10:16:52 +00001001if is_service_enabled horizon; then
Dean Troyer7903b792012-09-13 17:16:12 -05001002 echo_summary "Configuring and starting Horizon"
Sean Dagueb562e6a2012-11-19 16:00:01 -05001003 init_horizon
1004 start_horizon
Anthony Young70dc5e02011-09-15 16:52:43 -07001005fi
Jesse Andrews75a37652011-09-12 17:09:08 -07001006
Anthony Young3859f732011-09-14 02:33:43 -07001007
Jesse Andrewsd74257d2011-09-13 01:24:50 -07001008# Glance
1009# ------
1010
Chmouel Boudjnaha6651e92012-02-16 10:16:52 +00001011if is_service_enabled g-reg; then
Dean Troyer7903b792012-09-13 17:16:12 -05001012 echo_summary "Configuring Glance"
Dean Troyer73f6f252012-09-17 11:22:21 -05001013 init_glance
Anthony Young70dc5e02011-09-15 16:52:43 -07001014fi
Jesse Andrews75a37652011-09-12 17:09:08 -07001015
Dean Troyer8c032d12013-09-23 13:53:13 -05001016
Mark McClainb05c8762013-07-06 23:29:39 -04001017# Neutron
Anthony Young60df29a2012-03-28 09:40:17 -07001018# -------
Dean Troyer7d28a0e2012-06-27 17:55:52 -05001019
Mark McClainb05c8762013-07-06 23:29:39 -04001020if is_service_enabled neutron; then
1021 echo_summary "Configuring Neutron"
Dean Troyerb9182d62012-11-07 12:31:34 -06001022
Mark McClainb05c8762013-07-06 23:29:39 -04001023 configure_neutron
Salvatore Orlandodd649882013-08-05 08:56:17 -07001024 # Run init_neutron only on the node hosting the neutron API server
1025 if is_service_enabled $DATABASE_BACKENDS && is_service_enabled q-svc; then
1026 init_neutron
1027 fi
Dan Wendlandt0007f3a2012-05-18 13:37:47 -07001028fi
1029
Mark McClainb05c8762013-07-06 23:29:39 -04001030# Some Neutron plugins require network controllers which are not
Akihiro MOTOKI66afb472012-12-21 15:34:13 +09001031# a part of the OpenStack project. Configure and start them.
Mark McClainb05c8762013-07-06 23:29:39 -04001032if is_service_enabled neutron; then
1033 configure_neutron_third_party
1034 init_neutron_third_party
1035 start_neutron_third_party
Gary Kotton396a0142012-07-29 04:28:47 -04001036fi
1037
Dean Troyerb9182d62012-11-07 12:31:34 -06001038
Jesse Andrewsd74257d2011-09-13 01:24:50 -07001039# Nova
1040# ----
Dean Troyerbd13b702012-02-13 11:22:36 -06001041
Isaku Yamahata6f85ab32012-08-06 16:56:10 +09001042if is_service_enabled n-net q-dhcp; then
Anthony Young55458452011-12-17 00:21:49 +00001043 # Delete traces of nova networks from prior runs
Davanum Srinivasd71d6e72013-01-28 19:15:57 -05001044 # Do not kill any dnsmasq instance spawned by NetworkManager
1045 netman_pid=$(pidof NetworkManager || true)
1046 if [ -z "$netman_pid" ]; then
1047 sudo killall dnsmasq || true
1048 else
1049 sudo ps h -o pid,ppid -C dnsmasq | grep -v $netman_pid | awk '{print $1}' | sudo xargs kill || true
1050 fi
1051
Anthony Young55458452011-12-17 00:21:49 +00001052 clean_iptables
Christian Berendt7a7fb492014-04-07 13:31:07 +00001053
1054 if is_service_enabled n-net; then
1055 rm -rf ${NOVA_STATE_PATH}/networks
1056 sudo mkdir -p ${NOVA_STATE_PATH}/networks
Chris Denta0ced4d2014-05-27 22:08:46 +01001057 safe_chown -R ${STACK_USER} ${NOVA_STATE_PATH}/networks
Christian Berendt7a7fb492014-04-07 13:31:07 +00001058 fi
1059
Dean Troyer1a6d4492013-06-03 16:47:36 -05001060 # Force IP forwarding on, just in case
Dean Troyer0b31e862012-03-07 16:47:56 -06001061 sudo sysctl -w net.ipv4.ip_forward=1
Anthony Young70dc5e02011-09-15 16:52:43 -07001062fi
Jesse Andrews75a37652011-09-12 17:09:08 -07001063
Dean Troyer7d28a0e2012-06-27 17:55:52 -05001064
Chmouel Boudjnah28fa4e82011-11-01 12:30:55 +01001065# Storage Service
Dean Troyer7d28a0e2012-06-27 17:55:52 -05001066# ---------------
1067
Chmouel Boudjnah0c3a5582013-03-06 10:58:33 +01001068if is_service_enabled s-proxy; then
Dean Troyer7903b792012-09-13 17:16:12 -05001069 echo_summary "Configuring Swift"
Attila Fazekasece6a332012-11-29 14:19:41 +01001070 init_swift
Chmouel Boudjnah28fa4e82011-11-01 12:30:55 +01001071fi
1072
Dean Troyerdf0972c2012-03-07 17:31:03 -06001073
Anthony Youngacff87a2011-10-20 10:12:58 -07001074# Volume Service
1075# --------------
1076
Dean Troyer67787e62012-05-02 11:48:15 -05001077if is_service_enabled cinder; then
Dean Troyer7903b792012-09-13 17:16:12 -05001078 echo_summary "Configuring Cinder"
Dean Troyer67787e62012-05-02 11:48:15 -05001079 init_cinder
Anthony Youngacff87a2011-10-20 10:12:58 -07001080fi
1081
Dean Troyer2aa2a892013-08-04 19:53:19 -05001082
1083# Compute Service
1084# ---------------
1085
Dean Troyerbf67c192012-09-21 15:09:37 -05001086if is_service_enabled nova; then
1087 echo_summary "Configuring Nova"
1088 init_nova
Jesse Andrewsd1879c52011-09-16 16:28:13 -07001089
Dean Troyer86a79692012-10-22 15:24:46 -05001090 # Additional Nova configuration that is dependent on other services
Mark McClainb05c8762013-07-06 23:29:39 -04001091 if is_service_enabled neutron; then
1092 create_nova_conf_neutron
Dean Troyer86a79692012-10-22 15:24:46 -05001093 elif is_service_enabled n-net; then
Akihiro MOTOKI66afb472012-12-21 15:34:13 +09001094 create_nova_conf_nova_network
Brad Hall1bfa3d52011-10-27 18:18:20 -07001095 fi
Dean Troyerdf0972c2012-03-07 17:31:03 -06001096
Kieran Spearfb2a3ae2013-03-11 23:55:49 +00001097 init_nova_cells
Anthony Youngb62b4ca2011-10-26 22:29:08 -07001098fi
1099
Devananda van der Veenf35cf912012-11-12 17:58:38 -08001100# Extra things to prepare nova for baremetal, before nova starts
1101if is_service_enabled nova && is_baremetal; then
1102 echo_summary "Preparing for nova baremetal"
1103 prepare_baremetal_toolchain
1104 configure_baremetal_nova_dirs
1105fi
Dean Troyerdf0972c2012-03-07 17:31:03 -06001106
Dean Troyerb7490da2013-03-18 16:07:56 -05001107
Dean Troyercdf3d762013-10-15 09:42:43 -05001108# Extras Configuration
1109# ====================
1110
1111# Phase: post-config
1112if [[ -d $TOP_DIR/extras.d ]]; then
1113 for i in $TOP_DIR/extras.d/*.sh; do
1114 [[ -r $i ]] && source $i stack post-config
1115 done
1116fi
1117
1118
Dean Troyer893e6632013-09-13 15:05:51 -05001119# Local Configuration
1120# ===================
1121
1122# Apply configuration from local.conf if it exists for layer 2 services
1123# Phase: post-config
1124merge_config_group $TOP_DIR/local.conf post-config
1125
1126
Jesse Andrewsd74257d2011-09-13 01:24:50 -07001127# Launch Services
1128# ===============
Jesse Andrews30f68e92011-09-13 00:59:54 -07001129
Jesse Andrewsdfcd2002011-09-13 13:17:22 -07001130# Only run the services specified in ``ENABLED_SERVICES``
1131
Attila Fazekasece6a332012-11-29 14:19:41 +01001132# Launch Swift Services
Chmouel Boudjnah0c3a5582013-03-06 10:58:33 +01001133if is_service_enabled s-proxy; then
Attila Fazekasece6a332012-11-29 14:19:41 +01001134 echo_summary "Starting Swift"
1135 start_swift
1136fi
1137
Dean Troyer73f6f252012-09-17 11:22:21 -05001138# Launch the Glance services
Dean Troyere4fa7212014-01-15 15:04:49 -06001139if is_service_enabled glance; then
Dean Troyer7903b792012-09-13 17:16:12 -05001140 echo_summary "Starting Glance"
Dean Troyer73f6f252012-09-17 11:22:21 -05001141 start_glance
Anthony Youngd000b222011-09-19 14:46:53 -07001142fi
1143
Eric Windisch0b9776d2014-01-28 11:20:53 -05001144# Install Images
1145# ==============
1146
1147# Upload an image to glance.
1148#
1149# The default image is cirros, a small testing image which lets you login as **root**
1150# cirros has a ``cloud-init`` analog supporting login via keypair and sending
1151# scripts as userdata.
1152# See https://help.ubuntu.com/community/CloudInit for more on cloud-init
1153#
1154# Override ``IMAGE_URLS`` with a comma-separated list of UEC images.
1155# * **precise**: http://uec-images.ubuntu.com/precise/current/precise-server-cloudimg-amd64.tar.gz
1156
1157if is_service_enabled g-reg; then
1158 TOKEN=$(keystone token-get | grep ' id ' | get_field 2)
1159 die_if_not_set $LINENO TOKEN "Keystone fail to get token"
1160
1161 if is_baremetal; then
1162 echo_summary "Creating and uploading baremetal images"
1163
1164 # build and upload separate deploy kernel & ramdisk
1165 upload_baremetal_deploy $TOKEN
1166
1167 # upload images, separating out the kernel & ramdisk for PXE boot
1168 for image_url in ${IMAGE_URLS//,/ }; do
1169 upload_baremetal_image $image_url $TOKEN
1170 done
1171 else
1172 echo_summary "Uploading images"
1173
1174 # Option to upload legacy ami-tty, which works with xenserver
1175 if [[ -n "$UPLOAD_LEGACY_TTY" ]]; then
1176 IMAGE_URLS="${IMAGE_URLS:+${IMAGE_URLS},}https://github.com/downloads/citrix-openstack/warehouse/tty.tgz"
1177 fi
1178
1179 for image_url in ${IMAGE_URLS//,/ }; do
1180 upload_image $image_url $TOKEN
1181 done
1182 fi
1183fi
1184
Dean Troyerd81a0272012-08-31 18:04:55 -05001185# Create an access key and secret key for nova ec2 register image
1186if is_service_enabled key && is_service_enabled swift3 && is_service_enabled nova; then
Steve Martinellidf6793a2014-03-13 23:38:11 -05001187 eval $(openstack ec2 credentials create --user nova --project $SERVICE_TENANT_NAME -f shell -c access -c secret)
1188 iniset $NOVA_CONF DEFAULT s3_access_key "$access"
1189 iniset $NOVA_CONF DEFAULT s3_secret_key "$secret"
Devananda van der Veen9bc47db2012-12-12 16:52:55 -08001190 iniset $NOVA_CONF DEFAULT s3_affix_tenant "True"
Anthony Youngd000b222011-09-19 14:46:53 -07001191fi
1192
Kaitlin Farrdef4c142014-01-06 08:52:49 -05001193# Create a randomized default value for the keymgr's fixed_key
1194if is_service_enabled nova; then
1195 FIXED_KEY=""
Sean Dague16dd8b32014-02-03 09:10:54 +09001196 for i in $(seq 1 64); do
1197 FIXED_KEY+=$(echo "obase=16; $(($RANDOM % 16))" | bc);
Kaitlin Farrdef4c142014-01-06 08:52:49 -05001198 done;
1199 iniset $NOVA_CONF keymgr fixed_key "$FIXED_KEY"
1200fi
1201
Monty Taylore5428832013-03-27 23:40:59 +01001202if is_service_enabled zeromq; then
1203 echo_summary "Starting zermomq receiver"
Elena Ezhova2d451962014-06-19 12:49:32 +04001204 screen_it zeromq "cd $NOVA_DIR && $OSLO_BIN_DIR/oslo-messaging-zmq-receiver"
Monty Taylore5428832013-03-27 23:40:59 +01001205fi
ewindisch3bae7c22012-01-18 11:18:35 -05001206
Dean Troyer7d28a0e2012-06-27 17:55:52 -05001207# Launch the nova-api and wait for it to answer before continuing
Chmouel Boudjnaha6651e92012-02-16 10:16:52 +00001208if is_service_enabled n-api; then
Dean Troyer7903b792012-09-13 17:16:12 -05001209 echo_summary "Starting Nova API"
Dean Troyer3a3a2ba2012-12-11 15:26:24 -06001210 start_nova_api
Anthony Youngd000b222011-09-19 14:46:53 -07001211fi
Brad Hall1bfa3d52011-10-27 18:18:20 -07001212
Gary Kotton37dda8d2012-08-08 03:46:33 -04001213if is_service_enabled q-svc; then
Mark McClainb05c8762013-07-06 23:29:39 -04001214 echo_summary "Starting Neutron"
Mark McClainb05c8762013-07-06 23:29:39 -04001215 start_neutron_service_and_check
armando-migliaccioef1e0802014-01-02 16:33:53 -08001216 check_neutron_third_party_integration
Aaron Rosen8ec719b2012-10-30 12:57:47 -07001217elif is_service_enabled $DATABASE_BACKENDS && is_service_enabled n-net; then
Kieran Spearfb2a3ae2013-03-11 23:55:49 +00001218 NM_CONF=${NOVA_CONF}
1219 if is_service_enabled n-cell; then
1220 NM_CONF=${NOVA_CELLS_CONF}
1221 fi
1222
Gary Kotton37dda8d2012-08-08 03:46:33 -04001223 # Create a small network
Kieran Spearfb2a3ae2013-03-11 23:55:49 +00001224 $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 -06001225
Gary Kotton37dda8d2012-08-08 03:46:33 -04001226 # Create some floating ips
Kieran Spearfb2a3ae2013-03-11 23:55:49 +00001227 $NOVA_BIN_DIR/nova-manage --config-file $NM_CONF floating create $FLOATING_RANGE --pool=$PUBLIC_NETWORK_NAME
Aaron Rosen9313dfa2012-07-06 16:08:49 -04001228
Gary Kotton37dda8d2012-08-08 03:46:33 -04001229 # Create a second pool
Kieran Spearfb2a3ae2013-03-11 23:55:49 +00001230 $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 -07001231fi
1232
Mark McClainb05c8762013-07-06 23:29:39 -04001233if is_service_enabled neutron; then
1234 start_neutron_agents
Akihiro MOTOKI66afb472012-12-21 15:34:13 +09001235fi
Salvatore Orlando6fbb28d2013-12-22 07:59:37 -08001236# Once neutron agents are started setup initial network elements
1237if is_service_enabled q-svc; then
1238 echo_summary "Creating initial neutron network elements"
1239 create_neutron_initial_network
1240 setup_neutron_debug
1241fi
Dean Troyerbf67c192012-09-21 15:09:37 -05001242if is_service_enabled nova; then
1243 echo_summary "Starting Nova"
1244 start_nova
1245fi
Dean Troyer67787e62012-05-02 11:48:15 -05001246if is_service_enabled cinder; then
Dean Troyer7903b792012-09-13 17:16:12 -05001247 echo_summary "Starting Cinder"
Dean Troyer67787e62012-05-02 11:48:15 -05001248 start_cinder
Dean Troyer09718332014-07-03 10:46:57 -05001249 create_volume_types
Dean Troyer67787e62012-05-02 11:48:15 -05001250fi
John H. Tran93361642012-07-26 11:22:05 -07001251if is_service_enabled ceilometer; then
Doug Hellmannc5259b42012-09-22 10:52:31 -04001252 echo_summary "Starting Ceilometer"
Lianhao Lu8c548492013-01-09 10:41:54 +08001253 init_ceilometer
John H. Tran93361642012-07-26 11:22:05 -07001254 start_ceilometer
1255fi
Sean Dagueb562e6a2012-11-19 16:00:01 -05001256
Steve Bakerbad9d892012-10-25 14:49:47 +13001257# Configure and launch heat engine, api and metadata
Steve Bakerbfdad752012-08-18 09:00:42 +12001258if is_service_enabled heat; then
Steven Hardy1bcd2802014-02-13 15:14:41 +00001259 # Initialize heat
Steve Bakerbad9d892012-10-25 14:49:47 +13001260 echo_summary "Configuring Heat"
1261 init_heat
Dean Troyer7903b792012-09-13 17:16:12 -05001262 echo_summary "Starting Heat"
Steve Bakerbfdad752012-08-18 09:00:42 +12001263 start_heat
1264fi
Dean Troyer7d28a0e2012-06-27 17:55:52 -05001265
Jamie Lennoxbd24a8d2013-09-20 16:26:42 +10001266
Attila Fazekas22ef5732012-12-16 14:03:06 +01001267# Create account rc files
1268# =======================
1269
1270# Creates source able script files for easier user switching.
1271# This step also creates certificates for tenants and users,
1272# which is helpful in image bundle steps.
1273
1274if is_service_enabled nova && is_service_enabled key; then
Jamie Lennoxbd24a8d2013-09-20 16:26:42 +10001275 USERRC_PARAMS="-PA --target-dir $TOP_DIR/accrc"
1276
1277 if [ -f $SSL_BUNDLE_FILE ]; then
1278 USERRC_PARAMS="$USERRC_PARAMS --os-cacert $SSL_BUNDLE_FILE"
1279 fi
1280
1281 $TOP_DIR/tools/create_userrc.sh $USERRC_PARAMS
Attila Fazekas22ef5732012-12-16 14:03:06 +01001282fi
1283
Dean Troyer4a43b7b2012-08-28 17:43:40 -05001284
Devananda van der Veenf35cf912012-11-12 17:58:38 -08001285# If we are running nova with baremetal driver, there are a few
1286# last-mile configuration bits to attend to, which must happen
1287# after n-api and n-sch have started.
1288# Also, creating the baremetal flavor must happen after images
1289# are loaded into glance, though just knowing the IDs is sufficient here
1290if is_service_enabled nova && is_baremetal; then
1291 # create special flavor for baremetal if we know what images to associate
1292 [[ -n "$BM_DEPLOY_KERNEL_ID" ]] && [[ -n "$BM_DEPLOY_RAMDISK_ID" ]] && \
Sean Dagueb83c3652013-10-22 10:08:04 -04001293 create_baremetal_flavor $BM_DEPLOY_KERNEL_ID $BM_DEPLOY_RAMDISK_ID
Devananda van der Veenf35cf912012-11-12 17:58:38 -08001294
1295 # otherwise user can manually add it later by calling nova-baremetal-manage
Devananda van der Veenf35cf912012-11-12 17:58:38 -08001296 [[ -n "$BM_FIRST_MAC" ]] && add_baremetal_node
1297
Arata Notsubbf06452013-07-26 20:26:07 +09001298 if [[ "$BM_DNSMASQ_FROM_NOVA_NETWORK" = "False" ]]; then
1299 # NOTE: we do this here to ensure that our copy of dnsmasq is running
1300 sudo pkill dnsmasq || true
1301 sudo dnsmasq --conf-file= --port=0 --enable-tftp --tftp-root=/tftpboot \
1302 --dhcp-boot=pxelinux.0 --bind-interfaces --pid-file=/var/run/dnsmasq.pid \
1303 --interface=$BM_DNSMASQ_IFACE --dhcp-range=$BM_DNSMASQ_RANGE \
1304 ${BM_DNSMASQ_DNS:+--dhcp-option=option:dns-server,$BM_DNSMASQ_DNS}
1305 fi
Devananda van der Veenf35cf912012-11-12 17:58:38 -08001306 # ensure callback daemon is running
1307 sudo pkill nova-baremetal-deploy-helper || true
Mehdi Abaakoukc01e6a72013-10-14 16:26:02 +02001308 screen_it baremetal "cd ; nova-baremetal-deploy-helper"
Devananda van der Veenf35cf912012-11-12 17:58:38 -08001309fi
Dean Troyerdf0972c2012-03-07 17:31:03 -06001310
Dean Troyer33cb4302012-12-10 16:47:36 -06001311# Save some values we generated for later use
1312CURRENT_RUN_TIME=$(date "+$TIMESTAMP_FORMAT")
1313echo "# $CURRENT_RUN_TIME" >$TOP_DIR/.stackenv
1314for i in BASE_SQL_CONN ENABLED_SERVICES HOST_IP LOGFILE \
Jamie Lennoxbd24a8d2013-09-20 16:26:42 +10001315 SERVICE_HOST SERVICE_PROTOCOL STACK_USER TLS_IP KEYSTONE_AUTH_PROTOCOL OS_CACERT; do
Dean Troyer33cb4302012-12-10 16:47:36 -06001316 echo $i=${!i} >>$TOP_DIR/.stackenv
1317done
1318
Maru Newbyec086512012-11-01 23:44:57 +00001319
Dean Troyer893e6632013-09-13 15:05:51 -05001320# Local Configuration
1321# ===================
1322
1323# Apply configuration from local.conf if it exists for layer 2 services
1324# Phase: extra
1325merge_config_group $TOP_DIR/local.conf extra
1326
1327
Dean Troyer768295e2013-01-09 13:42:03 -06001328# Run extras
1329# ==========
1330
Dean Troyercdf3d762013-10-15 09:42:43 -05001331# Phase: extra
Dean Troyer768295e2013-01-09 13:42:03 -06001332if [[ -d $TOP_DIR/extras.d ]]; then
1333 for i in $TOP_DIR/extras.d/*.sh; do
Dean Troyercdf3d762013-10-15 09:42:43 -05001334 [[ -r $i ]] && source $i stack extra
Dean Troyer768295e2013-01-09 13:42:03 -06001335 done
1336fi
1337
Ryan Hsufeb28832013-11-07 12:12:35 -08001338# Local Configuration
1339# ===================
1340
1341# Apply configuration from local.conf if it exists for layer 2 services
1342# Phase: post-extra
1343merge_config_group $TOP_DIR/local.conf post-extra
1344
Dean Troyer768295e2013-01-09 13:42:03 -06001345
Dean Troyerf5633dd2012-03-28 11:21:40 -05001346# Run local script
1347# ================
1348
1349# Run ``local.sh`` if it exists to perform user-managed tasks
1350if [[ -x $TOP_DIR/local.sh ]]; then
1351 echo "Running user script $TOP_DIR/local.sh"
1352 $TOP_DIR/local.sh
1353fi
1354
jiajun xua9414242012-12-06 16:30:57 +08001355# Check the status of running services
1356service_check
Dean Troyerf5633dd2012-03-28 11:21:40 -05001357
Dean Troyerb7490da2013-03-18 16:07:56 -05001358
Scott Moserb94f4bf2011-10-07 14:51:07 +00001359# Fin
1360# ===
1361
Dean Troyer471de7a2011-12-27 11:45:55 -06001362set +o xtrace
Scott Moserb94f4bf2011-10-07 14:51:07 +00001363
Dean Troyer7903b792012-09-13 17:16:12 -05001364if [[ -n "$LOGFILE" ]]; then
1365 exec 1>&3
1366 # Force all output to stdout and logs now
Dean Troyerbaa8b422012-09-24 15:02:05 -05001367 exec 1> >( tee -a "${LOGFILE}" ) 2>&1
Dean Troyer7903b792012-09-13 17:16:12 -05001368else
1369 # Force all output to stdout now
1370 exec 1>&3
1371fi
1372
Dean Troyerdf0972c2012-03-07 17:31:03 -06001373
Jesse Andrews24859062011-09-15 21:28:23 -07001374# Using the cloud
Dean Troyer4a43b7b2012-08-28 17:43:40 -05001375# ---------------
Jesse Andrews24859062011-09-15 21:28:23 -07001376
Jesse Andrewse19d8842011-11-01 20:06:55 -07001377echo ""
1378echo ""
1379echo ""
1380
Dean Troyerdf0972c2012-03-07 17:31:03 -06001381# If you installed Horizon on this server you should be able
root40a37002011-09-20 18:06:14 +00001382# to access the site using your browser.
Chmouel Boudjnaha6651e92012-02-16 10:16:52 +00001383if is_service_enabled horizon; then
Dean Troyerdf0972c2012-03-07 17:31:03 -06001384 echo "Horizon is now available at http://$SERVICE_HOST/"
Jesse Andrews24859062011-09-15 21:28:23 -07001385fi
1386
Dean Troyerdf0972c2012-03-07 17:31:03 -06001387# If Keystone is present you can point ``nova`` cli to this server
Chmouel Boudjnaha6651e92012-02-16 10:16:52 +00001388if is_service_enabled key; then
Jamie Lennox3561d7f2014-05-21 17:18:43 +10001389 echo "Keystone is serving at $KEYSTONE_SERVICE_URI/v2.0/"
Dean Troyerdf0972c2012-03-07 17:31:03 -06001390 echo "Examples on using novaclient command line is in exercise.sh"
1391 echo "The default users are: admin and demo"
1392 echo "The password: $ADMIN_PASSWORD"
Jesse Andrews24859062011-09-15 21:28:23 -07001393fi
termie523c4052011-09-28 19:49:40 -05001394
Dean Troyer4a43b7b2012-08-28 17:43:40 -05001395# Echo ``HOST_IP`` - useful for ``build_uec.sh``, which uses dhcp to give the instance an address
Anthony Young1097c7c2011-12-27 23:22:14 -08001396echo "This is your host ip: $HOST_IP"
1397
Dean Troyerafc29fe2013-02-07 15:56:24 -06001398# Warn that a deprecated feature was used
1399if [[ -n "$DEPRECATED_TEXT" ]]; then
1400 echo_summary "WARNING: $DEPRECATED_TEXT"
Dean Troyerced65172012-03-02 16:36:16 -06001401fi
1402
Dean Troyer91baef32014-02-28 11:11:45 -06001403# TODO(dtroyer): Remove Q_AGENT_EXTRA_AGENT_OPTS after stable/juno branch is cut
1404if [[ -n "$Q_AGENT_EXTRA_AGENT_OPTS" ]]; then
1405 echo ""
1406 echo_summary "WARNING: Q_AGENT_EXTRA_AGENT_OPTS is used"
1407 echo "You are using Q_AGENT_EXTRA_AGENT_OPTS to pass configuration into $NEUTRON_CONF."
1408 echo "Please convert that configuration in localrc to a $NEUTRON_CONF section in local.conf:"
1409 echo "Q_AGENT_EXTRA_AGENT_OPTS will be removed early in the 'K' development cycle"
1410 echo "
1411[[post-config|/\$Q_PLUGIN_CONF_FILE]]
1412[DEFAULT]
1413"
1414 for I in "${Q_AGENT_EXTRA_AGENT_OPTS[@]}"; do
1415 # Replace the first '=' with ' ' for iniset syntax
1416 echo ${I}
1417 done
1418fi
1419
1420# TODO(dtroyer): Remove Q_AGENT_EXTRA_SRV_OPTS after stable/juno branch is cut
1421if [[ -n "$Q_AGENT_EXTRA_SRV_OPTS" ]]; then
1422 echo ""
1423 echo_summary "WARNING: Q_AGENT_EXTRA_SRV_OPTS is used"
1424 echo "You are using Q_AGENT_EXTRA_SRV_OPTS to pass configuration into $NEUTRON_CONF."
1425 echo "Please convert that configuration in localrc to a $NEUTRON_CONF section in local.conf:"
1426 echo "Q_AGENT_EXTRA_AGENT_OPTS will be removed early in the 'K' development cycle"
1427 echo "
1428[[post-config|/\$Q_PLUGIN_CONF_FILE]]
1429[DEFAULT]
1430"
1431 for I in "${Q_AGENT_EXTRA_SRV_OPTS[@]}"; do
1432 # Replace the first '=' with ' ' for iniset syntax
1433 echo ${I}
1434 done
1435fi
1436
Dean Troyer09718332014-07-03 10:46:57 -05001437# TODO(dtroyer): Remove CINDER_MULTI_LVM_BACKEND after stable/juno branch is cut
1438if [[ "$CINDER_MULTI_LVM_BACKEND" = "True" ]]; then
1439 echo ""
1440 echo_summary "WARNING: CINDER_MULTI_LVM_BACKEND is used"
1441 echo "You are using CINDER_MULTI_LVM_BACKEND to configure Cinder's multiple LVM backends"
1442 echo "Please convert that configuration in local.conf to use CINDER_ENABLED_BACKENDS."
1443 echo "CINDER_ENABLED_BACKENDS will be removed early in the 'K' development cycle"
1444 echo "
1445[[local|localrc]]
1446CINDER_ENABLED_BACKENDS=lvm:lvmdriver-1,lvm:lvmdriver-2
1447"
1448fi
1449
Dean Troyer4a43b7b2012-08-28 17:43:40 -05001450# Indicate how long this took to run (bash maintained variable ``SECONDS``)
Dean Troyer7903b792012-09-13 17:16:12 -05001451echo_summary "stack.sh completed in $SECONDS seconds."
Dean Troyer80684552014-03-05 11:50:23 -06001452
1453# Restore/close logging file descriptors
1454exec 1>&3
1455exec 2>&3
1456exec 3>&-
1457exec 6>&-