blob: 5ddfaef7b152ad10707f77f2fef3d0f6efe95e8e [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
Dean Troyer4a43b7b2012-08-28 17:43:40 -0500326# Use color for logging output (only available if syslog is not used)
Vishvananda Ishaya6f13ba32012-06-01 23:17:38 +0000327LOG_COLOR=`trueorfalse True $LOG_COLOR`
328
Dean Troyer2bbcd682011-11-05 16:19:03 -0500329# Service startup timeout
330SERVICE_TIMEOUT=${SERVICE_TIMEOUT:-60}
331
Jamie Lennoxbd24a8d2013-09-20 16:26:42 +1000332# Reset the bundle of CA certificates
333SSL_BUNDLE_FILE="$DATA_DIR/ca-bundle.pem"
334rm -f $SSL_BUNDLE_FILE
335
Dean Troyer0e8dced2014-07-25 10:33:21 -0500336# Import common services (database, message queue) configuration
337source $TOP_DIR/lib/database
338source $TOP_DIR/lib/rpc_backend
339
340# Make sure we only have one rpc backend enabled,
341# and the specified rpc backend is available on your platform.
342check_rpc_backend
343
Dean Troyerd81a0272012-08-31 18:04:55 -0500344
345# Configure Projects
346# ==================
347
Brant Knudson0049c0c2014-01-16 18:16:48 -0600348# Import apache functions
zhang-hared98a5d02013-06-21 18:18:02 +0800349source $TOP_DIR/lib/apache
Brant Knudson0049c0c2014-01-16 18:16:48 -0600350
351# Import TLS functions
Dean Troyerc83a7e12012-11-29 11:47:58 -0600352source $TOP_DIR/lib/tls
Brant Knudson0049c0c2014-01-16 18:16:48 -0600353
354# Source project function libraries
Sean Dague0392a102013-07-31 13:07:45 -0400355source $TOP_DIR/lib/infra
Sean Dague1b6b5312013-07-31 06:46:34 -0400356source $TOP_DIR/lib/oslo
Sean Dague68322722013-10-21 18:11:40 -0400357source $TOP_DIR/lib/stackforge
Sean Dagueb562e6a2012-11-19 16:00:01 -0500358source $TOP_DIR/lib/horizon
Dean Troyerd81a0272012-08-31 18:04:55 -0500359source $TOP_DIR/lib/keystone
Dean Troyer73f6f252012-09-17 11:22:21 -0500360source $TOP_DIR/lib/glance
Dean Troyerbf67c192012-09-21 15:09:37 -0500361source $TOP_DIR/lib/nova
Dean Troyerd81a0272012-08-31 18:04:55 -0500362source $TOP_DIR/lib/cinder
Attila Fazekasece6a332012-11-29 14:19:41 +0100363source $TOP_DIR/lib/swift
Dean Troyerd81a0272012-08-31 18:04:55 -0500364source $TOP_DIR/lib/ceilometer
365source $TOP_DIR/lib/heat
Mark McClainb05c8762013-07-06 23:29:39 -0400366source $TOP_DIR/lib/neutron
Devananda van der Veenf35cf912012-11-12 17:58:38 -0800367source $TOP_DIR/lib/baremetal
Brad Topolf127e2f2013-01-22 10:17:50 -0600368source $TOP_DIR/lib/ldap
Joe Gordone0b08d02014-08-20 00:34:55 -0700369source $TOP_DIR/lib/dstat
Dean Troyerd81a0272012-08-31 18:04:55 -0500370
Dean Troyercdf3d762013-10-15 09:42:43 -0500371# Extras Source
372# --------------
373
374# Phase: source
375if [[ -d $TOP_DIR/extras.d ]]; then
376 for i in $TOP_DIR/extras.d/*.sh; do
377 [[ -r $i ]] && source $i source
378 done
379fi
380
Dean Troyer1a6d4492013-06-03 16:47:36 -0500381# Set the destination directories for other OpenStack projects
Dean Troyer9f61d292012-11-26 18:56:20 +0000382OPENSTACKCLIENT_DIR=$DEST/python-openstackclient
Dean Troyerb7490da2013-03-18 16:07:56 -0500383
384# Interactive Configuration
385# -------------------------
386
387# Do all interactive config up front before the logging spew begins
James E. Blair213c4162012-11-06 09:38:36 +0100388
Anthony Young7a549f42011-10-12 07:13:13 +0000389# Generic helper to configure passwords
390function read_password {
Dean Troyer7903b792012-09-13 17:16:12 -0500391 XTRACE=$(set +o | grep xtrace)
Anthony Young7a549f42011-10-12 07:13:13 +0000392 set +o xtrace
393 var=$1; msg=$2
394 pw=${!var}
395
Sahid Orentino Ferdjaoui9e032c22014-02-10 11:36:25 +0100396 if [[ -f $RC_DIR/localrc ]]; then
397 localrc=$TOP_DIR/localrc
398 else
399 localrc=$TOP_DIR/.localrc.auto
400 fi
Anthony Young6015c822011-10-12 07:17:11 +0000401
Anthony Young7a549f42011-10-12 07:13:13 +0000402 # If the password is not defined yet, proceed to prompt user for a password.
403 if [ ! $pw ]; then
404 # If there is no localrc file, create one
Anthony Youngb4db2252011-10-12 14:08:08 -0700405 if [ ! -e $localrc ]; then
406 touch $localrc
Anthony Young7a549f42011-10-12 07:13:13 +0000407 fi
408
Vishvananda Ishaya9b353672011-10-20 10:07:10 -0700409 # Presumably if we got this far it can only be that our localrc is missing
Anthony Young7a549f42011-10-12 07:13:13 +0000410 # the required password. Prompt user for a password and write to localrc.
Anthony Youngb4db2252011-10-12 14:08:08 -0700411 echo ''
412 echo '################################################################################'
413 echo $msg
414 echo '################################################################################'
Dean Troyer4e6a2b72011-12-29 17:27:45 -0600415 echo "This value will be written to your localrc file so you don't have to enter it "
416 echo "again. Use only alphanumeric characters."
Anthony Youngb4db2252011-10-12 14:08:08 -0700417 echo "If you leave this blank, a random default value will be used."
Dean Troyer4e6a2b72011-12-29 17:27:45 -0600418 pw=" "
419 while true; do
420 echo "Enter a password now:"
421 read -e $var
422 pw=${!var}
423 [[ "$pw" = "`echo $pw | tr -cd [:alnum:]`" ]] && break
424 echo "Invalid chars in password. Try again:"
425 done
Anthony Youngb4db2252011-10-12 14:08:08 -0700426 if [ ! $pw ]; then
Ian Wienand26a28b42014-05-14 14:10:47 +1000427 pw=$(cat /dev/urandom | tr -cd 'a-f0-9' | head -c 20)
Anthony Young7a549f42011-10-12 07:13:13 +0000428 fi
Anthony Youngb4db2252011-10-12 14:08:08 -0700429 eval "$var=$pw"
430 echo "$var=$pw" >> $localrc
Anthony Young7a549f42011-10-12 07:13:13 +0000431 fi
Dean Troyer7903b792012-09-13 17:16:12 -0500432 $XTRACE
Anthony Young7a549f42011-10-12 07:13:13 +0000433}
434
Dean Troyer13dc5cc2012-03-27 14:50:45 -0500435
Dean Troyerb9182d62012-11-07 12:31:34 -0600436# Database Configuration
Dean Troyerb9182d62012-11-07 12:31:34 -0600437
Dean Troyerafc29fe2013-02-07 15:56:24 -0600438# To select between database backends, add the following to ``localrc``:
Terry Wilson428af5a2012-11-01 16:12:39 -0400439#
Dean Troyerafc29fe2013-02-07 15:56:24 -0600440# disable_service mysql
441# enable_service postgresql
Terry Wilson428af5a2012-11-01 16:12:39 -0400442#
Dean Troyerafc29fe2013-02-07 15:56:24 -0600443# The available database backends are listed in ``DATABASE_BACKENDS`` after
444# ``lib/database`` is sourced. ``mysql`` is the default.
Terry Wilson428af5a2012-11-01 16:12:39 -0400445
446initialize_database_backends && echo "Using $DATABASE_TYPE database backend" || echo "No database enabled"
447
Dean Troyerb9182d62012-11-07 12:31:34 -0600448
Dean Troyerb7490da2013-03-18 16:07:56 -0500449# Queue Configuration
Jesse Andrews782b9912011-10-02 16:53:21 -0400450
Anthony Younga8416442011-09-13 20:07:44 -0700451# Rabbit connection info
Russell Bryant4a221452012-03-13 13:44:12 -0400452if is_service_enabled rabbit; then
Bob Balle309e5a2014-04-01 16:28:36 +0100453 RABBIT_HOST=${RABBIT_HOST:-$SERVICE_HOST}
Russell Bryant4a221452012-03-13 13:44:12 -0400454 read_password RABBIT_PASSWORD "ENTER A PASSWORD TO USE FOR RABBIT."
455fi
Jesse Andrewsba23cc72011-09-11 03:22:13 -0700456
Dean Troyerb7490da2013-03-18 16:07:56 -0500457
458# Keystone
459
460if is_service_enabled key; then
461 # The ``SERVICE_TOKEN`` is used to bootstrap the Keystone database. It is
462 # just a string and is not a 'real' Keystone token.
463 read_password SERVICE_TOKEN "ENTER A SERVICE_TOKEN TO USE FOR THE SERVICE ADMIN TOKEN."
464 # Services authenticate to Identity with servicename/``SERVICE_PASSWORD``
465 read_password SERVICE_PASSWORD "ENTER A SERVICE_PASSWORD TO USE FOR THE SERVICE AUTHENTICATION."
466 # Horizon currently truncates usernames and passwords at 20 characters
467 read_password ADMIN_PASSWORD "ENTER A PASSWORD TO USE FOR HORIZON AND KEYSTONE (20 CHARS OR LESS)."
468
469 # Keystone can now optionally install OpenLDAP by enabling the ``ldap``
470 # service in ``localrc`` (e.g. ``enable_service ldap``).
471 # To clean out the Keystone contents in OpenLDAP set ``KEYSTONE_CLEAR_LDAP``
472 # to ``yes`` (e.g. ``KEYSTONE_CLEAR_LDAP=yes``) in ``localrc``. To enable the
473 # Keystone Identity Driver (``keystone.identity.backends.ldap.Identity``)
474 # set ``KEYSTONE_IDENTITY_BACKEND`` to ``ldap`` (e.g.
475 # ``KEYSTONE_IDENTITY_BACKEND=ldap``) in ``localrc``.
476
477 # only request ldap password if the service is enabled
478 if is_service_enabled ldap; then
479 read_password LDAP_PASSWORD "ENTER A PASSWORD TO USE FOR LDAP"
Chmouel Boudjnah6ae9ea52012-07-05 06:50:51 +0000480 fi
Dean Troyerb7490da2013-03-18 16:07:56 -0500481fi
482
483
484# Swift
485
486if is_service_enabled s-proxy; then
Chmouel Boudjnah77b0e1d2012-02-29 16:55:43 +0000487 # We only ask for Swift Hash if we have enabled swift service.
Dean Troyerb9182d62012-11-07 12:31:34 -0600488 # ``SWIFT_HASH`` is a random unique string for a swift cluster that
Chmouel Boudjnahb2857e42011-11-03 16:19:14 +0100489 # can never change.
490 read_password SWIFT_HASH "ENTER A RANDOM SWIFT HASH."
Jim Rollenhagenabbb0e92014-08-05 18:01:48 +0000491
492 if [[ -z "$SWIFT_TEMPURL_KEY" ]] && [[ "$SWIFT_ENABLE_TEMPURLS" == "True" ]]; then
493 read_password SWIFT_TEMPURL_KEY "ENTER A KEY FOR SWIFT TEMPURLS."
494 fi
Chmouel Boudjnahb2857e42011-11-03 16:19:14 +0100495fi
Vishvananda Ishaya5f039322011-11-05 16:12:20 -0700496
Dean Troyerdf0972c2012-03-07 17:31:03 -0600497
Dean Troyerb7490da2013-03-18 16:07:56 -0500498# Configure logging
499# -----------------
Dean Troyer471de7a2011-12-27 11:45:55 -0600500
Vishvananda Ishaya7879a3c2012-09-21 15:36:06 -0700501# Draw a spinner so the user knows something is happening
Ian Wienandaee18c72014-02-21 15:35:08 +1100502function spinner {
Vishvananda Ishaya7879a3c2012-09-21 15:36:06 -0700503 local delay=0.75
Dean Troyerb9182d62012-11-07 12:31:34 -0600504 local spinstr='/-\|'
Vishvananda Ishaya7879a3c2012-09-21 15:36:06 -0700505 printf "..." >&3
506 while [ true ]; do
507 local temp=${spinstr#?}
508 printf "[%c]" "$spinstr" >&3
509 local spinstr=$temp${spinstr%"$temp"}
510 sleep $delay
511 printf "\b\b\b" >&3
512 done
513}
514
Roger Luethide56ee12014-04-26 14:21:33 +0200515function kill_spinner {
516 if [ ! -z "$LAST_SPINNER_PID" ]; then
517 kill >/dev/null 2>&1 $LAST_SPINNER_PID
518 printf "\b\b\bdone\n" >&3
519 fi
520}
521
Dean Troyer7903b792012-09-13 17:16:12 -0500522# Echo text to the log file, summary log file and stdout
523# echo_summary "something to say"
Ian Wienandaee18c72014-02-21 15:35:08 +1100524function echo_summary {
Vishvananda Ishaya7879a3c2012-09-21 15:36:06 -0700525 if [[ -t 3 && "$VERBOSE" != "True" ]]; then
Roger Luethide56ee12014-04-26 14:21:33 +0200526 kill_spinner
Dean Troyerafc29fe2013-02-07 15:56:24 -0600527 echo -n -e $@ >&6
Vishvananda Ishaya7879a3c2012-09-21 15:36:06 -0700528 spinner &
529 LAST_SPINNER_PID=$!
530 else
Dean Troyerafc29fe2013-02-07 15:56:24 -0600531 echo -e $@ >&6
Vishvananda Ishaya7879a3c2012-09-21 15:36:06 -0700532 fi
Dean Troyer7903b792012-09-13 17:16:12 -0500533}
534
535# Echo text only to stdout, no log files
536# echo_nolog "something not for the logs"
Ian Wienandaee18c72014-02-21 15:35:08 +1100537function echo_nolog {
Dean Troyer7903b792012-09-13 17:16:12 -0500538 echo $@ >&3
539}
540
Ian Wienanda36167e2014-08-04 14:11:26 +1000541if [[ is_fedora && $DISTRO == "rhel6" ]]; then
Ian Wienandf565bf22014-07-17 14:50:29 +1000542 # poor old python2.6 doesn't have argparse by default, which
543 # outfilter.py uses
544 is_package_installed python-argparse || install_package python-argparse
545fi
546
Dean Troyer4a43b7b2012-08-28 17:43:40 -0500547# Set up logging for ``stack.sh``
548# Set ``LOGFILE`` to turn on logging
549# Append '.xxxxxxxx' to the given name to maintain history
550# where 'xxxxxxxx' is a representation of the date the file was created
Dean Troyer33cb4302012-12-10 16:47:36 -0600551TIMESTAMP_FORMAT=${TIMESTAMP_FORMAT:-"%F-%H%M%S"}
Chmouel Boudjnahd966ed22012-03-05 12:42:48 +0000552if [[ -n "$LOGFILE" || -n "$SCREEN_LOGDIR" ]]; then
553 LOGDAYS=${LOGDAYS:-7}
Chmouel Boudjnahd966ed22012-03-05 12:42:48 +0000554 CURRENT_LOG_TIME=$(date "+$TIMESTAMP_FORMAT")
555fi
556
Dean Troyer471de7a2011-12-27 11:45:55 -0600557if [[ -n "$LOGFILE" ]]; then
Dean Troyer4a43b7b2012-08-28 17:43:40 -0500558 # First clean up old log files. Use the user-specified ``LOGFILE``
Dean Troyer471de7a2011-12-27 11:45:55 -0600559 # as the template to search for, appending '.*' to match the date
560 # we added on earlier runs.
Dean Troyer471de7a2011-12-27 11:45:55 -0600561 LOGDIR=$(dirname "$LOGFILE")
David Ripton406019a2013-03-06 09:58:39 -0500562 LOGFILENAME=$(basename "$LOGFILE")
Chmouel Boudjnahfff6fec2012-03-09 15:37:56 +0000563 mkdir -p $LOGDIR
David Ripton406019a2013-03-06 09:58:39 -0500564 find $LOGDIR -maxdepth 1 -name $LOGFILENAME.\* -mtime +$LOGDAYS -exec rm {} \;
Chmouel Boudjnahd966ed22012-03-05 12:42:48 +0000565 LOGFILE=$LOGFILE.${CURRENT_LOG_TIME}
Dean Troyer7903b792012-09-13 17:16:12 -0500566 SUMFILE=$LOGFILE.${CURRENT_LOG_TIME}.summary
567
568 # Redirect output according to config
Dean Troyerb9182d62012-11-07 12:31:34 -0600569
Jun Wu8710b652014-04-28 20:36:08 +0800570 # Set fd 3 to a copy of stdout. So we can set fd 1 without losing
571 # stdout later.
Dean Troyer7903b792012-09-13 17:16:12 -0500572 exec 3>&1
573 if [[ "$VERBOSE" == "True" ]]; then
Jun Wu8710b652014-04-28 20:36:08 +0800574 # Set fd 1 and 2 to write the log file
Mauro S. M. Rodriguesdae11522014-06-17 01:10:54 +0000575 exec 1> >( $TOP_DIR/tools/outfilter.py -v -o "${LOGFILE}" ) 2>&1
Jun Wu8710b652014-04-28 20:36:08 +0800576 # Set fd 6 to summary log file
Mauro S. M. Rodriguesdae11522014-06-17 01:10:54 +0000577 exec 6> >( $TOP_DIR/tools/outfilter.py -o "${SUMFILE}" )
Dean Troyer7903b792012-09-13 17:16:12 -0500578 else
579 # Set fd 1 and 2 to primary logfile
Mauro S. M. Rodriguesdae11522014-06-17 01:10:54 +0000580 exec 1> >( $TOP_DIR/tools/outfilter.py -o "${LOGFILE}" ) 2>&1
Dean Troyer7903b792012-09-13 17:16:12 -0500581 # Set fd 6 to summary logfile and stdout
Mauro S. M. Rodriguesdae11522014-06-17 01:10:54 +0000582 exec 6> >( $TOP_DIR/tools/outfilter.py -v -o "${SUMFILE}" >&3 )
Dean Troyer7903b792012-09-13 17:16:12 -0500583 fi
584
585 echo_summary "stack.sh log $LOGFILE"
Dean Troyer471de7a2011-12-27 11:45:55 -0600586 # Specified logfile name always links to the most recent log
David Ripton406019a2013-03-06 09:58:39 -0500587 ln -sf $LOGFILE $LOGDIR/$LOGFILENAME
588 ln -sf $SUMFILE $LOGDIR/$LOGFILENAME.summary
Dean Troyer7903b792012-09-13 17:16:12 -0500589else
590 # Set up output redirection without log files
Jun Wu8710b652014-04-28 20:36:08 +0800591 # Set fd 3 to a copy of stdout. So we can set fd 1 without losing
592 # stdout later.
Dean Troyer7903b792012-09-13 17:16:12 -0500593 exec 3>&1
Eric Windischefdf3ff2012-09-24 12:47:44 -0400594 if [[ "$VERBOSE" != "True" ]]; then
Dean Troyer7903b792012-09-13 17:16:12 -0500595 # Throw away stdout and stderr
596 exec 1>/dev/null 2>&1
597 fi
598 # Always send summary fd to original stdout
Mauro S. M. Rodriguesdae11522014-06-17 01:10:54 +0000599 exec 6> >( $TOP_DIR/tools/outfilter.py -v >&3 )
Dean Troyer471de7a2011-12-27 11:45:55 -0600600fi
601
Chmouel Boudjnahd966ed22012-03-05 12:42:48 +0000602# Set up logging of screen windows
Dean Troyer4a43b7b2012-08-28 17:43:40 -0500603# Set ``SCREEN_LOGDIR`` to turn on logging of screen windows to the
604# directory specified in ``SCREEN_LOGDIR``, we will log to the the file
605# ``screen-$SERVICE_NAME-$TIMESTAMP.log`` in that dir and have a link
606# ``screen-$SERVICE_NAME.log`` to the latest log file.
607# Logs are kept for as long specified in ``LOGDAYS``.
Chmouel Boudjnahd966ed22012-03-05 12:42:48 +0000608if [[ -n "$SCREEN_LOGDIR" ]]; then
609
610 # We make sure the directory is created.
611 if [[ -d "$SCREEN_LOGDIR" ]]; then
612 # We cleanup the old logs
613 find $SCREEN_LOGDIR -maxdepth 1 -name screen-\*.log -mtime +$LOGDAYS -exec rm {} \;
614 else
615 mkdir -p $SCREEN_LOGDIR
616 fi
617fi
618
Dean Troyer4a43b7b2012-08-28 17:43:40 -0500619
620# Set Up Script Execution
621# -----------------------
622
Vishvananda Ishaya7879a3c2012-09-21 15:36:06 -0700623# Kill background processes on exit
Dean Troyera25a6f62014-02-24 16:03:41 -0600624trap exit_trap EXIT
625function exit_trap {
Vishvananda Ishaya7879a3c2012-09-21 15:36:06 -0700626 local r=$?
Dean Troyer94b9e822014-02-27 11:13:36 -0600627 jobs=$(jobs -p)
Dean Troyera3935fb2014-03-21 13:00:32 -0500628 # Only do the kill when we're logging through a process substitution,
629 # which currently is only to verbose logfile
630 if [[ -n $jobs && -n "$LOGFILE" && "$VERBOSE" == "True" ]]; then
Dean Troyer94b9e822014-02-27 11:13:36 -0600631 echo "exit_trap: cleaning up child processes"
632 kill 2>&1 $jobs
633 fi
Roger Luethide56ee12014-04-26 14:21:33 +0200634
635 # Kill the last spinner process
636 kill_spinner
637
Sean Dague97fcc7b2014-06-16 17:24:14 -0400638 if [[ $r -ne 0 ]]; then
639 echo "Error on exit"
Rick Harris2696e5a2014-08-18 13:53:42 -0500640 if [[ -z $LOGDIR ]]; then
641 ./tools/worlddump.py
642 else
643 ./tools/worlddump.py -d $LOGDIR
644 fi
Sean Dague97fcc7b2014-06-16 17:24:14 -0400645 fi
646
Vishvananda Ishaya7879a3c2012-09-21 15:36:06 -0700647 exit $r
648}
649
Dean Troyer4a43b7b2012-08-28 17:43:40 -0500650# Exit on any errors so that errors don't compound
Dean Troyera25a6f62014-02-24 16:03:41 -0600651trap err_trap ERR
652function err_trap {
Scott Moserf9da5082011-10-07 21:28:00 -0400653 local r=$?
654 set +o xtrace
Dean Troyera25a6f62014-02-24 16:03:41 -0600655 if [[ -n "$LOGFILE" ]]; then
656 echo "${0##*/} failed: full log in $LOGFILE"
657 else
658 echo "${0##*/} failed"
659 fi
Scott Moserf9da5082011-10-07 21:28:00 -0400660 exit $r
661}
662
Sean Dague09bd7c82014-02-03 08:35:26 +0900663
664set -o errexit
665
Scott Moserf9da5082011-10-07 21:28:00 -0400666# Print the commands being run so that we can see the command that triggers
667# an error. It is also useful for following along as the install occurs.
668set -o xtrace
669
Dean Troyer1a6d4492013-06-03 16:47:36 -0500670
Jesse Andrews30f68e92011-09-13 00:59:54 -0700671# Install Packages
Jesse Andrewsd74257d2011-09-13 01:24:50 -0700672# ================
Dean Troyer7d28a0e2012-06-27 17:55:52 -0500673
Dean Troyer4a43b7b2012-08-28 17:43:40 -0500674# OpenStack uses a fair number of other projects.
Jesse Andrews30f68e92011-09-13 00:59:54 -0700675
Dean Troyer7d28a0e2012-06-27 17:55:52 -0500676# Install package requirements
Dean Troyer48352ee2012-12-12 12:50:38 -0600677# Source it so the entire environment is available
Dean Troyer7903b792012-09-13 17:16:12 -0500678echo_summary "Installing package prerequisites"
Dean Troyer48352ee2012-12-12 12:50:38 -0600679source $TOP_DIR/tools/install_prereqs.sh
Monty Taylor47f02062012-07-26 11:09:24 -0500680
Dean Troyer62d1d692013-08-01 17:40:40 -0500681# Configure an appropriate python environment
Arata Notsu8b5d3cf2013-10-17 21:42:49 +0900682if [[ "$OFFLINE" != "True" ]]; then
Franck Yelles683ff422014-06-19 02:14:42 -0700683 PYPI_ALTERNATIVE_URL=$PYPI_ALTERNATIVE_URL $TOP_DIR/tools/install_pip.sh
Arata Notsu8b5d3cf2013-10-17 21:42:49 +0900684fi
Dean Troyer1a6d4492013-06-03 16:47:36 -0500685
Gael Chamoulaudd3121f62014-07-24 23:53:02 +0200686# Do the ugly hacks for broken packages and distros
Dean Troyer04a35112014-08-15 14:03:52 -0500687source $TOP_DIR/tools/fixup_stuff.sh
Dean Troyer9acc12a2013-08-09 15:09:31 -0500688
Dean Troyer5c3a63e2014-07-09 11:27:42 -0500689
690# Extras Pre-install
691# ------------------
692
693# Phase: pre-install
694if [[ -d $TOP_DIR/extras.d ]]; then
695 for i in $TOP_DIR/extras.d/*.sh; do
696 [[ -r $i ]] && source $i stack pre-install
697 done
698fi
699
700
Dean Troyer62d1d692013-08-01 17:40:40 -0500701install_rpc_backend
702
703if is_service_enabled $DATABASE_BACKENDS; then
704 install_database
705fi
706
707if is_service_enabled neutron; then
708 install_neutron_agent_packages
709fi
710
Monty Taylor47f02062012-07-26 11:09:24 -0500711TRACK_DEPENDS=${TRACK_DEPENDS:-False}
712
713# Install python packages into a virtualenv so that we can track them
Dean Troyercc6b4432013-04-08 15:38:03 -0500714if [[ $TRACK_DEPENDS = True ]]; then
Dean Troyer7903b792012-09-13 17:16:12 -0500715 echo_summary "Installing Python packages into a virtualenv $DEST/.venv"
Sean Dague6c844632013-07-31 06:50:14 -0400716 pip_install -U virtualenv
Monty Taylor47f02062012-07-26 11:09:24 -0500717
718 rm -rf $DEST/.venv
719 virtualenv --system-site-packages $DEST/.venv
720 source $DEST/.venv/bin/activate
721 $DEST/.venv/bin/pip freeze > $DEST/requires-pre-pip
722fi
723
Dean Troyerfe51a902013-04-01 15:48:44 -0500724# Check Out and Install Source
725# ----------------------------
Dean Troyer4a43b7b2012-08-28 17:43:40 -0500726
Dean Troyer7903b792012-09-13 17:16:12 -0500727echo_summary "Installing OpenStack project source"
728
Sean Dague0392a102013-07-31 13:07:45 -0400729# Install required infra support libraries
730install_infra
Monty Taylor5e159492013-05-08 14:29:52 -0400731
Sean Dague1b6b5312013-07-31 06:46:34 -0400732# Install oslo libraries that have graduated
733install_oslo
734
Sean Dague68322722013-10-21 18:11:40 -0400735# Install stackforge libraries for testing
Sean Daguef7cfa0c2013-10-25 13:26:17 -0400736if is_service_enabled stackforge_libs; then
737 install_stackforge
738fi
Sean Dague68322722013-10-21 18:11:40 -0400739
Dean Troyerfe51a902013-04-01 15:48:44 -0500740# Install clients libraries
Dean Troyerd81a0272012-08-31 18:04:55 -0500741install_keystoneclient
Dean Troyer73f6f252012-09-17 11:22:21 -0500742install_glanceclient
Dean Troyer253a1a32013-04-01 18:23:22 -0500743install_cinderclient
Dean Troyerbf67c192012-09-21 15:09:37 -0500744install_novaclient
Sean Dague75195b52013-07-25 15:38:09 -0400745if is_service_enabled swift glance horizon; then
Dean Troyerfe51a902013-04-01 15:48:44 -0500746 install_swiftclient
747fi
Sean Dague75195b52013-07-25 15:38:09 -0400748if is_service_enabled neutron nova horizon; then
Mark McClainb05c8762013-07-06 23:29:39 -0400749 install_neutronclient
Dean Troyerfe51a902013-04-01 15:48:44 -0500750fi
Sean Dague75195b52013-07-25 15:38:09 -0400751if is_service_enabled heat horizon; then
752 install_heatclient
753fi
Dean Troyerfe51a902013-04-01 15:48:44 -0500754
Morgan Fainberg58936fd2014-06-24 12:26:07 -0700755# Install middleware
756install_keystonemiddleware
757
Dean Troyer9f61d292012-11-26 18:56:20 +0000758git_clone $OPENSTACKCLIENT_REPO $OPENSTACKCLIENT_DIR $OPENSTACKCLIENT_BRANCH
Dean Troyer253a1a32013-04-01 18:23:22 -0500759setup_develop $OPENSTACKCLIENT_DIR
Dean Troyer9f61d292012-11-26 18:56:20 +0000760
Dean Troyerfe51a902013-04-01 15:48:44 -0500761if is_service_enabled key; then
Bartosz Górski0abde392014-02-28 14:15:19 +0100762 if [ "$KEYSTONE_AUTH_HOST" == "$SERVICE_HOST" ]; then
763 install_keystone
764 configure_keystone
765 fi
Jesse Andrews38df1222011-11-20 09:55:44 -0800766fi
Attila Fazekasece6a332012-11-29 14:19:41 +0100767
Chmouel Boudjnah0c3a5582013-03-06 10:58:33 +0100768if is_service_enabled s-proxy; then
Attila Fazekasece6a332012-11-29 14:19:41 +0100769 install_swift
Dean Troyerfe51a902013-04-01 15:48:44 -0500770 configure_swift
771
rahmu9d2647a2013-04-24 10:40:07 +0200772 # swift3 middleware to provide S3 emulation to Swift
Chmouel Boudjnah6ae9ea52012-07-05 06:50:51 +0000773 if is_service_enabled swift3; then
rahmu9d2647a2013-04-24 10:40:07 +0200774 # replace the nova-objectstore port by the swift port
775 S3_SERVICE_PORT=8080
Chmouel Boudjnah6ae9ea52012-07-05 06:50:51 +0000776 git_clone $SWIFT3_REPO $SWIFT3_DIR $SWIFT3_BRANCH
Dean Troyerfe51a902013-04-01 15:48:44 -0500777 setup_develop $SWIFT3_DIR
Chmouel Boudjnah6ae9ea52012-07-05 06:50:51 +0000778 fi
James E. Blaire7ce24f2011-11-10 13:05:13 -0800779fi
Attila Fazekasece6a332012-11-29 14:19:41 +0100780
Chmouel Boudjnaha6651e92012-02-16 10:16:52 +0000781if is_service_enabled g-api n-api; then
James E. Blaire7ce24f2011-11-10 13:05:13 -0800782 # image catalog service
Dean Troyer73f6f252012-09-17 11:22:21 -0500783 install_glance
Dean Troyerfe51a902013-04-01 15:48:44 -0500784 configure_glance
James E. Blaire7ce24f2011-11-10 13:05:13 -0800785fi
Dean Troyerfe51a902013-04-01 15:48:44 -0500786
787if is_service_enabled cinder; then
788 install_cinder
789 configure_cinder
790fi
791
Mark McClainb05c8762013-07-06 23:29:39 -0400792if is_service_enabled neutron; then
793 install_neutron
794 install_neutron_third_party
Dean Troyerfe51a902013-04-01 15:48:44 -0500795fi
796
Dean Troyerbf67c192012-09-21 15:09:37 -0500797if is_service_enabled nova; then
798 # compute service
799 install_nova
Dean Troyerfe51a902013-04-01 15:48:44 -0500800 cleanup_nova
801 configure_nova
Dean Troyerbf67c192012-09-21 15:09:37 -0500802fi
Dean Troyerfe51a902013-04-01 15:48:44 -0500803
Chmouel Boudjnaha6651e92012-02-16 10:16:52 +0000804if is_service_enabled horizon; then
Zhenguo Niue385d1e2014-03-12 16:58:12 +0800805 # django openstack_auth
806 install_django_openstack_auth
Sean Dagueb562e6a2012-11-19 16:00:01 -0500807 # dashboard
808 install_horizon
Dean Troyerfe51a902013-04-01 15:48:44 -0500809 configure_horizon
James E. Blaire7ce24f2011-11-10 13:05:13 -0800810fi
Dean Troyerfe51a902013-04-01 15:48:44 -0500811
John H. Tran93361642012-07-26 11:22:05 -0700812if is_service_enabled ceilometer; then
Yunhong, Jiange583d9b2013-01-09 09:33:07 +0800813 install_ceilometerclient
John H. Tran93361642012-07-26 11:22:05 -0700814 install_ceilometer
Attila Fazekas12bb53b2013-07-25 23:02:48 +0200815 echo_summary "Configuring Ceilometer"
816 configure_ceilometer
John H. Tran93361642012-07-26 11:22:05 -0700817fi
Dean Troyer4a43b7b2012-08-28 17:43:40 -0500818
Steve Bakerbfdad752012-08-18 09:00:42 +1200819if is_service_enabled heat; then
Sean Dagued644e232013-07-25 15:34:48 -0400820 install_heat
Steve Baker315971d2014-05-27 12:24:18 +1200821 install_heat_other
Steve Bakerc3249082013-04-09 13:41:47 +1200822 cleanup_heat
Steve Bakerbfdad752012-08-18 09:00:42 +1200823 configure_heat
824fi
Dean Troyerb7490da2013-03-18 16:07:56 -0500825
Dean Troyerfe51a902013-04-01 15:48:44 -0500826if is_service_enabled tls-proxy; then
827 configure_CA
828 init_CA
829 init_cert
830 # Add name to /etc/hosts
831 # don't be naive and add to existing line!
Dean Troyer67787e62012-05-02 11:48:15 -0500832fi
Jesse Andrewsba23cc72011-09-11 03:22:13 -0700833
Roman Prykhodchenkoce696b62013-08-09 10:40:45 +0300834
Dean Troyercdf3d762013-10-15 09:42:43 -0500835# Extras Install
836# --------------
837
838# Phase: install
839if [[ -d $TOP_DIR/extras.d ]]; then
840 for i in $TOP_DIR/extras.d/*.sh; do
841 [[ -r $i ]] && source $i stack install
842 done
843fi
844
Dean Troyercc6b4432013-04-08 15:38:03 -0500845if [[ $TRACK_DEPENDS = True ]]; then
Monty Taylor47f02062012-07-26 11:09:24 -0500846 $DEST/.venv/bin/pip freeze > $DEST/requires-post-pip
Dean Troyercc6b4432013-04-08 15:38:03 -0500847 if ! diff -Nru $DEST/requires-pre-pip $DEST/requires-post-pip > $DEST/requires.diff; then
DennyZhange8fa8532013-11-03 12:22:04 -0600848 echo "Detect some changes for installed packages of pip, in depend tracking mode"
Monty Taylor47f02062012-07-26 11:09:24 -0500849 cat $DEST/requires.diff
850 fi
851 echo "Ran stack.sh in depend tracking mode, bailing out now"
852 exit 0
853fi
Dean Troyerdf0972c2012-03-07 17:31:03 -0600854
Dean Troyerb7490da2013-03-18 16:07:56 -0500855
Dean Troyerff603ef2011-11-22 17:48:10 -0600856# Syslog
Dean Troyerdf0972c2012-03-07 17:31:03 -0600857# ------
Dean Troyerff603ef2011-11-22 17:48:10 -0600858
859if [[ $SYSLOG != "False" ]]; then
Dean Troyerff603ef2011-11-22 17:48:10 -0600860 if [[ "$SYSLOG_HOST" = "$HOST_IP" ]]; then
861 # Configure the master host to receive
862 cat <<EOF >/tmp/90-stack-m.conf
863\$ModLoad imrelp
864\$InputRELPServerRun $SYSLOG_PORT
865EOF
866 sudo mv /tmp/90-stack-m.conf /etc/rsyslog.d
867 else
868 # Set rsyslog to send to remote host
869 cat <<EOF >/tmp/90-stack-s.conf
870*.* :omrelp:$SYSLOG_HOST:$SYSLOG_PORT
871EOF
872 sudo mv /tmp/90-stack-s.conf /etc/rsyslog.d
873 fi
cloudnulle4859f02013-05-28 14:10:58 -0500874
875 RSYSLOGCONF="/etc/rsyslog.conf"
876 if [ -f $RSYSLOGCONF ]; then
877 sudo cp -b $RSYSLOGCONF $RSYSLOGCONF.bak
878 if [[ $(grep '$SystemLogRateLimitBurst' $RSYSLOGCONF) ]]; then
879 sudo sed -i 's/$SystemLogRateLimitBurst\ .*/$SystemLogRateLimitBurst\ 0/' $RSYSLOGCONF
880 else
881 sudo sed -i '$ i $SystemLogRateLimitBurst\ 0' $RSYSLOGCONF
882 fi
883 if [[ $(grep '$SystemLogRateLimitInterval' $RSYSLOGCONF) ]]; then
884 sudo sed -i 's/$SystemLogRateLimitInterval\ .*/$SystemLogRateLimitInterval\ 0/' $RSYSLOGCONF
885 else
886 sudo sed -i '$ i $SystemLogRateLimitInterval\ 0' $RSYSLOGCONF
887 fi
888 fi
889
Dean Troyer7903b792012-09-13 17:16:12 -0500890 echo_summary "Starting rsyslog"
Dean Troyer13dc5cc2012-03-27 14:50:45 -0500891 restart_service rsyslog
Dean Troyerff603ef2011-11-22 17:48:10 -0600892fi
893
Dean Troyerdf0972c2012-03-07 17:31:03 -0600894
Joe Gordone5d92382012-09-13 17:19:03 -0700895# Finalize queue installation
896# ----------------------------
Akihiro MOTOKIb0f1c382013-01-13 17:58:12 +0900897restart_rpc_backend
Jesse Andrewsba23cc72011-09-11 03:22:13 -0700898
Dean Troyerdf0972c2012-03-07 17:31:03 -0600899
Jamie Lennoxbd24a8d2013-09-20 16:26:42 +1000900# Export Certicate Authority Bundle
901# ---------------------------------
902
903# If certificates were used and written to the SSL bundle file then these
904# should be exported so clients can validate their connections.
905
906if [ -f $SSL_BUNDLE_FILE ]; then
907 export OS_CACERT=$SSL_BUNDLE_FILE
908fi
909
910
Terry Wilson428af5a2012-11-01 16:12:39 -0400911# Configure database
912# ------------------
Dean Troyerb9182d62012-11-07 12:31:34 -0600913
Terry Wilson428af5a2012-11-01 16:12:39 -0400914if is_service_enabled $DATABASE_BACKENDS; then
915 configure_database
Jesse Andrews24859062011-09-15 21:28:23 -0700916fi
917
Dean Troyerb9182d62012-11-07 12:31:34 -0600918
919# Configure screen
920# ----------------
921
Dean Troyer681f3fd2013-02-27 19:00:39 -0600922USE_SCREEN=$(trueorfalse True $USE_SCREEN)
923if [[ "$USE_SCREEN" == "True" ]]; then
924 # Create a new named screen to run processes in
925 screen -d -m -S $SCREEN_NAME -t shell -s /bin/bash
926 sleep 1
927
928 # Set a reasonable status bar
929 if [ -z "$SCREEN_HARDSTATUS" ]; then
930 SCREEN_HARDSTATUS='%{= .} %-Lw%{= .}%> %n%f %t*%{= .}%+Lw%< %-=%{g}(%{d}%H/%l%{g})'
931 fi
932 screen -r $SCREEN_NAME -X hardstatus alwayslastline "$SCREEN_HARDSTATUS"
Steven Dake30396572013-06-30 16:11:54 -0700933 screen -r $SCREEN_NAME -X setenv PROMPT_COMMAND /bin/true
Josh Kearney0a7a41e2012-04-04 17:47:56 -0500934fi
935
Jiajun Liu61bb2c12012-10-19 09:48:30 +0800936# Clear screen rc file
937SCREENRC=$TOP_DIR/$SCREEN_NAME-screenrc
938if [[ -e $SCREENRC ]]; then
Jiajun Liu8e58c072013-07-17 06:41:50 +0000939 rm -f $SCREENRC
Jiajun Liu61bb2c12012-10-19 09:48:30 +0800940fi
Dean Troyerb9182d62012-11-07 12:31:34 -0600941
jiajun xua9414242012-12-06 16:30:57 +0800942# Initialize the directory for service status check
943init_service_check
Dean Troyer7d28a0e2012-06-27 17:55:52 -0500944
Sean Dague78096b52014-02-25 10:23:04 -0500945# Dstat
Dean Troyer1a6d4492013-06-03 16:47:36 -0500946# -------
947
Sean Daguef1eb0472014-02-11 17:28:56 -0500948# A better kind of sysstat, with the top process per time slice
Joe Gordone0b08d02014-08-20 00:34:55 -0700949start_dstat
Sean Dague062cdaf2014-02-10 22:24:49 -0500950
Dean Troyer893e6632013-09-13 15:05:51 -0500951# Start Services
952# ==============
953
Dean Troyerd81a0272012-08-31 18:04:55 -0500954# Keystone
955# --------
956
957if is_service_enabled key; then
Dean Troyer7903b792012-09-13 17:16:12 -0500958 echo_summary "Starting Keystone"
Bartosz Górski0abde392014-02-28 14:15:19 +0100959
960 if [ "$KEYSTONE_AUTH_HOST" == "$SERVICE_HOST" ]; then
961 init_keystone
962 start_keystone
963 fi
Dean Troyerd81a0272012-08-31 18:04:55 -0500964
Dean Troyerd835de82012-11-29 17:11:35 -0600965 # Set up a temporary admin URI for Keystone
Jamie Lennox3561d7f2014-05-21 17:18:43 +1000966 SERVICE_ENDPOINT=$KEYSTONE_AUTH_URI/v2.0
Dean Troyerc83a7e12012-11-29 11:47:58 -0600967
968 if is_service_enabled tls-proxy; then
969 export OS_CACERT=$INT_CA_DIR/ca-chain.pem
970 # Until the client support is fixed, just use the internal endpoint
971 SERVICE_ENDPOINT=http://$KEYSTONE_AUTH_HOST:$KEYSTONE_AUTH_PORT_INT/v2.0
972 fi
Dean Troyerd81a0272012-08-31 18:04:55 -0500973
Dean Troyer42a59c22014-03-03 14:31:29 -0600974 # Setup OpenStackclient token-flow auth
Steve Martinelli19685422014-01-24 13:02:26 -0600975 export OS_TOKEN=$SERVICE_TOKEN
976 export OS_URL=$SERVICE_ENDPOINT
Dean Troyer42a59c22014-03-03 14:31:29 -0600977
Dean Troyerd835de82012-11-29 17:11:35 -0600978 create_keystone_accounts
Dean Troyera0dce262012-12-11 16:52:37 -0600979 create_nova_accounts
Dean Troyer42a59c22014-03-03 14:31:29 -0600980 create_glance_accounts
Dean Troyer671c16e2012-12-13 16:22:38 -0600981 create_cinder_accounts
Mark McClainb05c8762013-07-06 23:29:39 -0400982 create_neutron_accounts
Dean Troyerd835de82012-11-29 17:11:35 -0600983
Dirk Muellerfa5ccff2014-01-09 13:27:35 +0100984 if is_service_enabled ceilometer; then
985 create_ceilometer_accounts
986 fi
987
Dean Troyer42a59c22014-03-03 14:31:29 -0600988 if is_service_enabled swift; then
Ian Wienand0ff314c2013-07-17 16:30:19 +1000989 create_swift_accounts
990 fi
991
Steven Hardy33d1f862014-02-13 15:00:33 +0000992 if is_service_enabled heat; then
993 create_heat_accounts
994 fi
995
Dean Troyer42a59c22014-03-03 14:31:29 -0600996 # Begone token-flow auth
Steve Martinelli19685422014-01-24 13:02:26 -0600997 unset OS_TOKEN OS_URL
Dean Troyer42a59c22014-03-03 14:31:29 -0600998
999 # Set up password-flow auth creds now that keystone is bootstrapped
Dean Troyerd81a0272012-08-31 18:04:55 -05001000 export OS_AUTH_URL=$SERVICE_ENDPOINT
1001 export OS_TENANT_NAME=admin
1002 export OS_USERNAME=admin
1003 export OS_PASSWORD=$ADMIN_PASSWORD
Bartosz Górski0abde392014-02-28 14:15:19 +01001004 export OS_REGION_NAME=$REGION_NAME
Dean Troyerd81a0272012-08-31 18:04:55 -05001005fi
1006
1007
Tres Henryca85b792011-10-28 14:00:21 -07001008# Horizon
Dean Troyerdf0972c2012-03-07 17:31:03 -06001009# -------
Jesse Andrewscbe98d52011-10-02 17:47:32 -04001010
Dean Troyer7d28a0e2012-06-27 17:55:52 -05001011# Set up the django horizon application to serve via apache/wsgi
Jesse Andrews75a37652011-09-12 17:09:08 -07001012
Chmouel Boudjnaha6651e92012-02-16 10:16:52 +00001013if is_service_enabled horizon; then
Dean Troyer7903b792012-09-13 17:16:12 -05001014 echo_summary "Configuring and starting Horizon"
Sean Dagueb562e6a2012-11-19 16:00:01 -05001015 init_horizon
1016 start_horizon
Anthony Young70dc5e02011-09-15 16:52:43 -07001017fi
Jesse Andrews75a37652011-09-12 17:09:08 -07001018
Anthony Young3859f732011-09-14 02:33:43 -07001019
Jesse Andrewsd74257d2011-09-13 01:24:50 -07001020# Glance
1021# ------
1022
Chmouel Boudjnaha6651e92012-02-16 10:16:52 +00001023if is_service_enabled g-reg; then
Dean Troyer7903b792012-09-13 17:16:12 -05001024 echo_summary "Configuring Glance"
Dean Troyer73f6f252012-09-17 11:22:21 -05001025 init_glance
Anthony Young70dc5e02011-09-15 16:52:43 -07001026fi
Jesse Andrews75a37652011-09-12 17:09:08 -07001027
Dean Troyer8c032d12013-09-23 13:53:13 -05001028
Mark McClainb05c8762013-07-06 23:29:39 -04001029# Neutron
Anthony Young60df29a2012-03-28 09:40:17 -07001030# -------
Dean Troyer7d28a0e2012-06-27 17:55:52 -05001031
Mark McClainb05c8762013-07-06 23:29:39 -04001032if is_service_enabled neutron; then
1033 echo_summary "Configuring Neutron"
Dean Troyerb9182d62012-11-07 12:31:34 -06001034
Mark McClainb05c8762013-07-06 23:29:39 -04001035 configure_neutron
Salvatore Orlandodd649882013-08-05 08:56:17 -07001036 # Run init_neutron only on the node hosting the neutron API server
1037 if is_service_enabled $DATABASE_BACKENDS && is_service_enabled q-svc; then
1038 init_neutron
1039 fi
Dan Wendlandt0007f3a2012-05-18 13:37:47 -07001040fi
1041
Mark McClainb05c8762013-07-06 23:29:39 -04001042# Some Neutron plugins require network controllers which are not
Akihiro MOTOKI66afb472012-12-21 15:34:13 +09001043# a part of the OpenStack project. Configure and start them.
Mark McClainb05c8762013-07-06 23:29:39 -04001044if is_service_enabled neutron; then
1045 configure_neutron_third_party
1046 init_neutron_third_party
1047 start_neutron_third_party
Gary Kotton396a0142012-07-29 04:28:47 -04001048fi
1049
Dean Troyerb9182d62012-11-07 12:31:34 -06001050
Jesse Andrewsd74257d2011-09-13 01:24:50 -07001051# Nova
1052# ----
Dean Troyerbd13b702012-02-13 11:22:36 -06001053
Isaku Yamahata6f85ab32012-08-06 16:56:10 +09001054if is_service_enabled n-net q-dhcp; then
Anthony Young55458452011-12-17 00:21:49 +00001055 # Delete traces of nova networks from prior runs
Davanum Srinivasd71d6e72013-01-28 19:15:57 -05001056 # Do not kill any dnsmasq instance spawned by NetworkManager
1057 netman_pid=$(pidof NetworkManager || true)
1058 if [ -z "$netman_pid" ]; then
1059 sudo killall dnsmasq || true
1060 else
1061 sudo ps h -o pid,ppid -C dnsmasq | grep -v $netman_pid | awk '{print $1}' | sudo xargs kill || true
1062 fi
1063
Anthony Young55458452011-12-17 00:21:49 +00001064 clean_iptables
Christian Berendt7a7fb492014-04-07 13:31:07 +00001065
1066 if is_service_enabled n-net; then
1067 rm -rf ${NOVA_STATE_PATH}/networks
1068 sudo mkdir -p ${NOVA_STATE_PATH}/networks
Chris Denta0ced4d2014-05-27 22:08:46 +01001069 safe_chown -R ${STACK_USER} ${NOVA_STATE_PATH}/networks
Christian Berendt7a7fb492014-04-07 13:31:07 +00001070 fi
1071
Dean Troyer1a6d4492013-06-03 16:47:36 -05001072 # Force IP forwarding on, just in case
Dean Troyer0b31e862012-03-07 16:47:56 -06001073 sudo sysctl -w net.ipv4.ip_forward=1
Anthony Young70dc5e02011-09-15 16:52:43 -07001074fi
Jesse Andrews75a37652011-09-12 17:09:08 -07001075
Dean Troyer7d28a0e2012-06-27 17:55:52 -05001076
Chmouel Boudjnah28fa4e82011-11-01 12:30:55 +01001077# Storage Service
Dean Troyer7d28a0e2012-06-27 17:55:52 -05001078# ---------------
1079
Chmouel Boudjnah0c3a5582013-03-06 10:58:33 +01001080if is_service_enabled s-proxy; then
Dean Troyer7903b792012-09-13 17:16:12 -05001081 echo_summary "Configuring Swift"
Attila Fazekasece6a332012-11-29 14:19:41 +01001082 init_swift
Chmouel Boudjnah28fa4e82011-11-01 12:30:55 +01001083fi
1084
Dean Troyerdf0972c2012-03-07 17:31:03 -06001085
Anthony Youngacff87a2011-10-20 10:12:58 -07001086# Volume Service
1087# --------------
1088
Dean Troyer67787e62012-05-02 11:48:15 -05001089if is_service_enabled cinder; then
Dean Troyer7903b792012-09-13 17:16:12 -05001090 echo_summary "Configuring Cinder"
Dean Troyer67787e62012-05-02 11:48:15 -05001091 init_cinder
Anthony Youngacff87a2011-10-20 10:12:58 -07001092fi
1093
Dean Troyer2aa2a892013-08-04 19:53:19 -05001094
1095# Compute Service
1096# ---------------
1097
Dean Troyerbf67c192012-09-21 15:09:37 -05001098if is_service_enabled nova; then
1099 echo_summary "Configuring Nova"
1100 init_nova
Jesse Andrewsd1879c52011-09-16 16:28:13 -07001101
Dean Troyer86a79692012-10-22 15:24:46 -05001102 # Additional Nova configuration that is dependent on other services
Mark McClainb05c8762013-07-06 23:29:39 -04001103 if is_service_enabled neutron; then
1104 create_nova_conf_neutron
Dean Troyer86a79692012-10-22 15:24:46 -05001105 elif is_service_enabled n-net; then
Akihiro MOTOKI66afb472012-12-21 15:34:13 +09001106 create_nova_conf_nova_network
Brad Hall1bfa3d52011-10-27 18:18:20 -07001107 fi
Dean Troyerdf0972c2012-03-07 17:31:03 -06001108
Kieran Spearfb2a3ae2013-03-11 23:55:49 +00001109 init_nova_cells
Anthony Youngb62b4ca2011-10-26 22:29:08 -07001110fi
1111
Devananda van der Veenf35cf912012-11-12 17:58:38 -08001112# Extra things to prepare nova for baremetal, before nova starts
1113if is_service_enabled nova && is_baremetal; then
1114 echo_summary "Preparing for nova baremetal"
1115 prepare_baremetal_toolchain
1116 configure_baremetal_nova_dirs
1117fi
Dean Troyerdf0972c2012-03-07 17:31:03 -06001118
Dean Troyerb7490da2013-03-18 16:07:56 -05001119
Dean Troyercdf3d762013-10-15 09:42:43 -05001120# Extras Configuration
1121# ====================
1122
1123# Phase: post-config
1124if [[ -d $TOP_DIR/extras.d ]]; then
1125 for i in $TOP_DIR/extras.d/*.sh; do
1126 [[ -r $i ]] && source $i stack post-config
1127 done
1128fi
1129
1130
Dean Troyer893e6632013-09-13 15:05:51 -05001131# Local Configuration
1132# ===================
1133
1134# Apply configuration from local.conf if it exists for layer 2 services
1135# Phase: post-config
1136merge_config_group $TOP_DIR/local.conf post-config
1137
1138
Jesse Andrewsd74257d2011-09-13 01:24:50 -07001139# Launch Services
1140# ===============
Jesse Andrews30f68e92011-09-13 00:59:54 -07001141
Jesse Andrewsdfcd2002011-09-13 13:17:22 -07001142# Only run the services specified in ``ENABLED_SERVICES``
1143
Attila Fazekasece6a332012-11-29 14:19:41 +01001144# Launch Swift Services
Chmouel Boudjnah0c3a5582013-03-06 10:58:33 +01001145if is_service_enabled s-proxy; then
Attila Fazekasece6a332012-11-29 14:19:41 +01001146 echo_summary "Starting Swift"
1147 start_swift
1148fi
1149
Dean Troyer73f6f252012-09-17 11:22:21 -05001150# Launch the Glance services
Dean Troyere4fa7212014-01-15 15:04:49 -06001151if is_service_enabled glance; then
Dean Troyer7903b792012-09-13 17:16:12 -05001152 echo_summary "Starting Glance"
Dean Troyer73f6f252012-09-17 11:22:21 -05001153 start_glance
Anthony Youngd000b222011-09-19 14:46:53 -07001154fi
1155
Eric Windisch0b9776d2014-01-28 11:20:53 -05001156# Install Images
1157# ==============
1158
1159# Upload an image to glance.
1160#
1161# The default image is cirros, a small testing image which lets you login as **root**
1162# cirros has a ``cloud-init`` analog supporting login via keypair and sending
1163# scripts as userdata.
1164# See https://help.ubuntu.com/community/CloudInit for more on cloud-init
1165#
1166# Override ``IMAGE_URLS`` with a comma-separated list of UEC images.
1167# * **precise**: http://uec-images.ubuntu.com/precise/current/precise-server-cloudimg-amd64.tar.gz
1168
1169if is_service_enabled g-reg; then
1170 TOKEN=$(keystone token-get | grep ' id ' | get_field 2)
1171 die_if_not_set $LINENO TOKEN "Keystone fail to get token"
1172
1173 if is_baremetal; then
1174 echo_summary "Creating and uploading baremetal images"
1175
1176 # build and upload separate deploy kernel & ramdisk
1177 upload_baremetal_deploy $TOKEN
1178
1179 # upload images, separating out the kernel & ramdisk for PXE boot
1180 for image_url in ${IMAGE_URLS//,/ }; do
1181 upload_baremetal_image $image_url $TOKEN
1182 done
1183 else
1184 echo_summary "Uploading images"
1185
1186 # Option to upload legacy ami-tty, which works with xenserver
1187 if [[ -n "$UPLOAD_LEGACY_TTY" ]]; then
1188 IMAGE_URLS="${IMAGE_URLS:+${IMAGE_URLS},}https://github.com/downloads/citrix-openstack/warehouse/tty.tgz"
1189 fi
1190
1191 for image_url in ${IMAGE_URLS//,/ }; do
1192 upload_image $image_url $TOKEN
1193 done
1194 fi
1195fi
1196
Dean Troyerd81a0272012-08-31 18:04:55 -05001197# Create an access key and secret key for nova ec2 register image
1198if is_service_enabled key && is_service_enabled swift3 && is_service_enabled nova; then
Steve Martinellidf6793a2014-03-13 23:38:11 -05001199 eval $(openstack ec2 credentials create --user nova --project $SERVICE_TENANT_NAME -f shell -c access -c secret)
1200 iniset $NOVA_CONF DEFAULT s3_access_key "$access"
1201 iniset $NOVA_CONF DEFAULT s3_secret_key "$secret"
Devananda van der Veen9bc47db2012-12-12 16:52:55 -08001202 iniset $NOVA_CONF DEFAULT s3_affix_tenant "True"
Anthony Youngd000b222011-09-19 14:46:53 -07001203fi
1204
Kaitlin Farrdef4c142014-01-06 08:52:49 -05001205# Create a randomized default value for the keymgr's fixed_key
1206if is_service_enabled nova; then
1207 FIXED_KEY=""
Sean Dague16dd8b32014-02-03 09:10:54 +09001208 for i in $(seq 1 64); do
1209 FIXED_KEY+=$(echo "obase=16; $(($RANDOM % 16))" | bc);
Kaitlin Farrdef4c142014-01-06 08:52:49 -05001210 done;
1211 iniset $NOVA_CONF keymgr fixed_key "$FIXED_KEY"
1212fi
1213
Monty Taylore5428832013-03-27 23:40:59 +01001214if is_service_enabled zeromq; then
1215 echo_summary "Starting zermomq receiver"
Elena Ezhova2d451962014-06-19 12:49:32 +04001216 screen_it zeromq "cd $NOVA_DIR && $OSLO_BIN_DIR/oslo-messaging-zmq-receiver"
Monty Taylore5428832013-03-27 23:40:59 +01001217fi
ewindisch3bae7c22012-01-18 11:18:35 -05001218
Dean Troyer7d28a0e2012-06-27 17:55:52 -05001219# Launch the nova-api and wait for it to answer before continuing
Chmouel Boudjnaha6651e92012-02-16 10:16:52 +00001220if is_service_enabled n-api; then
Dean Troyer7903b792012-09-13 17:16:12 -05001221 echo_summary "Starting Nova API"
Dean Troyer3a3a2ba2012-12-11 15:26:24 -06001222 start_nova_api
Anthony Youngd000b222011-09-19 14:46:53 -07001223fi
Brad Hall1bfa3d52011-10-27 18:18:20 -07001224
Gary Kotton37dda8d2012-08-08 03:46:33 -04001225if is_service_enabled q-svc; then
Mark McClainb05c8762013-07-06 23:29:39 -04001226 echo_summary "Starting Neutron"
Mark McClainb05c8762013-07-06 23:29:39 -04001227 start_neutron_service_and_check
armando-migliaccioef1e0802014-01-02 16:33:53 -08001228 check_neutron_third_party_integration
Aaron Rosen8ec719b2012-10-30 12:57:47 -07001229elif is_service_enabled $DATABASE_BACKENDS && is_service_enabled n-net; then
Kieran Spearfb2a3ae2013-03-11 23:55:49 +00001230 NM_CONF=${NOVA_CONF}
1231 if is_service_enabled n-cell; then
1232 NM_CONF=${NOVA_CELLS_CONF}
1233 fi
1234
Gary Kotton37dda8d2012-08-08 03:46:33 -04001235 # Create a small network
Kieran Spearfb2a3ae2013-03-11 23:55:49 +00001236 $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 -06001237
Gary Kotton37dda8d2012-08-08 03:46:33 -04001238 # Create some floating ips
Kieran Spearfb2a3ae2013-03-11 23:55:49 +00001239 $NOVA_BIN_DIR/nova-manage --config-file $NM_CONF floating create $FLOATING_RANGE --pool=$PUBLIC_NETWORK_NAME
Aaron Rosen9313dfa2012-07-06 16:08:49 -04001240
Gary Kotton37dda8d2012-08-08 03:46:33 -04001241 # Create a second pool
Kieran Spearfb2a3ae2013-03-11 23:55:49 +00001242 $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 -07001243fi
1244
Mark McClainb05c8762013-07-06 23:29:39 -04001245if is_service_enabled neutron; then
1246 start_neutron_agents
Akihiro MOTOKI66afb472012-12-21 15:34:13 +09001247fi
Salvatore Orlando6fbb28d2013-12-22 07:59:37 -08001248# Once neutron agents are started setup initial network elements
1249if is_service_enabled q-svc; then
1250 echo_summary "Creating initial neutron network elements"
1251 create_neutron_initial_network
1252 setup_neutron_debug
1253fi
Dean Troyerbf67c192012-09-21 15:09:37 -05001254if is_service_enabled nova; then
1255 echo_summary "Starting Nova"
1256 start_nova
1257fi
Dean Troyer67787e62012-05-02 11:48:15 -05001258if is_service_enabled cinder; then
Dean Troyer7903b792012-09-13 17:16:12 -05001259 echo_summary "Starting Cinder"
Dean Troyer67787e62012-05-02 11:48:15 -05001260 start_cinder
Dean Troyer09718332014-07-03 10:46:57 -05001261 create_volume_types
Dean Troyer67787e62012-05-02 11:48:15 -05001262fi
John H. Tran93361642012-07-26 11:22:05 -07001263if is_service_enabled ceilometer; then
Doug Hellmannc5259b42012-09-22 10:52:31 -04001264 echo_summary "Starting Ceilometer"
Lianhao Lu8c548492013-01-09 10:41:54 +08001265 init_ceilometer
John H. Tran93361642012-07-26 11:22:05 -07001266 start_ceilometer
1267fi
Sean Dagueb562e6a2012-11-19 16:00:01 -05001268
Steve Bakerbad9d892012-10-25 14:49:47 +13001269# Configure and launch heat engine, api and metadata
Steve Bakerbfdad752012-08-18 09:00:42 +12001270if is_service_enabled heat; then
Steven Hardy1bcd2802014-02-13 15:14:41 +00001271 # Initialize heat
Steve Bakerbad9d892012-10-25 14:49:47 +13001272 echo_summary "Configuring Heat"
1273 init_heat
Dean Troyer7903b792012-09-13 17:16:12 -05001274 echo_summary "Starting Heat"
Steve Bakerbfdad752012-08-18 09:00:42 +12001275 start_heat
Steve Baker2a6009c2014-05-05 16:13:39 +12001276 if [ "$HEAT_CREATE_TEST_IMAGE" = "True" ]; then
1277 echo_summary "Building Heat functional test image"
1278 build_heat_functional_test_image
1279 fi
Steve Bakerbfdad752012-08-18 09:00:42 +12001280fi
Dean Troyer7d28a0e2012-06-27 17:55:52 -05001281
Jamie Lennoxbd24a8d2013-09-20 16:26:42 +10001282
Attila Fazekas22ef5732012-12-16 14:03:06 +01001283# Create account rc files
1284# =======================
1285
1286# Creates source able script files for easier user switching.
1287# This step also creates certificates for tenants and users,
1288# which is helpful in image bundle steps.
1289
1290if is_service_enabled nova && is_service_enabled key; then
Jamie Lennoxbd24a8d2013-09-20 16:26:42 +10001291 USERRC_PARAMS="-PA --target-dir $TOP_DIR/accrc"
1292
1293 if [ -f $SSL_BUNDLE_FILE ]; then
1294 USERRC_PARAMS="$USERRC_PARAMS --os-cacert $SSL_BUNDLE_FILE"
1295 fi
1296
1297 $TOP_DIR/tools/create_userrc.sh $USERRC_PARAMS
Attila Fazekas22ef5732012-12-16 14:03:06 +01001298fi
1299
Dean Troyer4a43b7b2012-08-28 17:43:40 -05001300
Devananda van der Veenf35cf912012-11-12 17:58:38 -08001301# If we are running nova with baremetal driver, there are a few
1302# last-mile configuration bits to attend to, which must happen
1303# after n-api and n-sch have started.
1304# Also, creating the baremetal flavor must happen after images
1305# are loaded into glance, though just knowing the IDs is sufficient here
1306if is_service_enabled nova && is_baremetal; then
1307 # create special flavor for baremetal if we know what images to associate
1308 [[ -n "$BM_DEPLOY_KERNEL_ID" ]] && [[ -n "$BM_DEPLOY_RAMDISK_ID" ]] && \
Sean Dagueb83c3652013-10-22 10:08:04 -04001309 create_baremetal_flavor $BM_DEPLOY_KERNEL_ID $BM_DEPLOY_RAMDISK_ID
Devananda van der Veenf35cf912012-11-12 17:58:38 -08001310
1311 # otherwise user can manually add it later by calling nova-baremetal-manage
Devananda van der Veenf35cf912012-11-12 17:58:38 -08001312 [[ -n "$BM_FIRST_MAC" ]] && add_baremetal_node
1313
Arata Notsubbf06452013-07-26 20:26:07 +09001314 if [[ "$BM_DNSMASQ_FROM_NOVA_NETWORK" = "False" ]]; then
1315 # NOTE: we do this here to ensure that our copy of dnsmasq is running
1316 sudo pkill dnsmasq || true
1317 sudo dnsmasq --conf-file= --port=0 --enable-tftp --tftp-root=/tftpboot \
1318 --dhcp-boot=pxelinux.0 --bind-interfaces --pid-file=/var/run/dnsmasq.pid \
1319 --interface=$BM_DNSMASQ_IFACE --dhcp-range=$BM_DNSMASQ_RANGE \
1320 ${BM_DNSMASQ_DNS:+--dhcp-option=option:dns-server,$BM_DNSMASQ_DNS}
1321 fi
Devananda van der Veenf35cf912012-11-12 17:58:38 -08001322 # ensure callback daemon is running
1323 sudo pkill nova-baremetal-deploy-helper || true
Mehdi Abaakoukc01e6a72013-10-14 16:26:02 +02001324 screen_it baremetal "cd ; nova-baremetal-deploy-helper"
Devananda van der Veenf35cf912012-11-12 17:58:38 -08001325fi
Dean Troyerdf0972c2012-03-07 17:31:03 -06001326
Dean Troyer33cb4302012-12-10 16:47:36 -06001327# Save some values we generated for later use
1328CURRENT_RUN_TIME=$(date "+$TIMESTAMP_FORMAT")
1329echo "# $CURRENT_RUN_TIME" >$TOP_DIR/.stackenv
1330for i in BASE_SQL_CONN ENABLED_SERVICES HOST_IP LOGFILE \
Jamie Lennoxbd24a8d2013-09-20 16:26:42 +10001331 SERVICE_HOST SERVICE_PROTOCOL STACK_USER TLS_IP KEYSTONE_AUTH_PROTOCOL OS_CACERT; do
Dean Troyer33cb4302012-12-10 16:47:36 -06001332 echo $i=${!i} >>$TOP_DIR/.stackenv
1333done
1334
Maru Newbyec086512012-11-01 23:44:57 +00001335
Dean Troyer893e6632013-09-13 15:05:51 -05001336# Local Configuration
1337# ===================
1338
1339# Apply configuration from local.conf if it exists for layer 2 services
1340# Phase: extra
1341merge_config_group $TOP_DIR/local.conf extra
1342
1343
Dean Troyer768295e2013-01-09 13:42:03 -06001344# Run extras
1345# ==========
1346
Dean Troyercdf3d762013-10-15 09:42:43 -05001347# Phase: extra
Dean Troyer768295e2013-01-09 13:42:03 -06001348if [[ -d $TOP_DIR/extras.d ]]; then
1349 for i in $TOP_DIR/extras.d/*.sh; do
Dean Troyercdf3d762013-10-15 09:42:43 -05001350 [[ -r $i ]] && source $i stack extra
Dean Troyer768295e2013-01-09 13:42:03 -06001351 done
1352fi
1353
Ryan Hsufeb28832013-11-07 12:12:35 -08001354# Local Configuration
1355# ===================
1356
1357# Apply configuration from local.conf if it exists for layer 2 services
1358# Phase: post-extra
1359merge_config_group $TOP_DIR/local.conf post-extra
1360
Dean Troyer768295e2013-01-09 13:42:03 -06001361
Dean Troyerf5633dd2012-03-28 11:21:40 -05001362# Run local script
1363# ================
1364
1365# Run ``local.sh`` if it exists to perform user-managed tasks
1366if [[ -x $TOP_DIR/local.sh ]]; then
1367 echo "Running user script $TOP_DIR/local.sh"
1368 $TOP_DIR/local.sh
1369fi
1370
jiajun xua9414242012-12-06 16:30:57 +08001371# Check the status of running services
1372service_check
Dean Troyerf5633dd2012-03-28 11:21:40 -05001373
Dean Troyerb7490da2013-03-18 16:07:56 -05001374
Scott Moserb94f4bf2011-10-07 14:51:07 +00001375# Fin
1376# ===
1377
Dean Troyer471de7a2011-12-27 11:45:55 -06001378set +o xtrace
Scott Moserb94f4bf2011-10-07 14:51:07 +00001379
Dean Troyer7903b792012-09-13 17:16:12 -05001380if [[ -n "$LOGFILE" ]]; then
1381 exec 1>&3
1382 # Force all output to stdout and logs now
Dean Troyerbaa8b422012-09-24 15:02:05 -05001383 exec 1> >( tee -a "${LOGFILE}" ) 2>&1
Dean Troyer7903b792012-09-13 17:16:12 -05001384else
1385 # Force all output to stdout now
1386 exec 1>&3
1387fi
1388
Dean Troyerdf0972c2012-03-07 17:31:03 -06001389
Jesse Andrews24859062011-09-15 21:28:23 -07001390# Using the cloud
Dean Troyer4a43b7b2012-08-28 17:43:40 -05001391# ---------------
Jesse Andrews24859062011-09-15 21:28:23 -07001392
Jesse Andrewse19d8842011-11-01 20:06:55 -07001393echo ""
1394echo ""
1395echo ""
1396
Dean Troyerdf0972c2012-03-07 17:31:03 -06001397# If you installed Horizon on this server you should be able
root40a37002011-09-20 18:06:14 +00001398# to access the site using your browser.
Chmouel Boudjnaha6651e92012-02-16 10:16:52 +00001399if is_service_enabled horizon; then
Dean Troyerdf0972c2012-03-07 17:31:03 -06001400 echo "Horizon is now available at http://$SERVICE_HOST/"
Jesse Andrews24859062011-09-15 21:28:23 -07001401fi
1402
Dean Troyerdf0972c2012-03-07 17:31:03 -06001403# If Keystone is present you can point ``nova`` cli to this server
Chmouel Boudjnaha6651e92012-02-16 10:16:52 +00001404if is_service_enabled key; then
Jamie Lennox3561d7f2014-05-21 17:18:43 +10001405 echo "Keystone is serving at $KEYSTONE_SERVICE_URI/v2.0/"
Dean Troyerdf0972c2012-03-07 17:31:03 -06001406 echo "Examples on using novaclient command line is in exercise.sh"
1407 echo "The default users are: admin and demo"
1408 echo "The password: $ADMIN_PASSWORD"
Jesse Andrews24859062011-09-15 21:28:23 -07001409fi
termie523c4052011-09-28 19:49:40 -05001410
Dean Troyer4a43b7b2012-08-28 17:43:40 -05001411# Echo ``HOST_IP`` - useful for ``build_uec.sh``, which uses dhcp to give the instance an address
Anthony Young1097c7c2011-12-27 23:22:14 -08001412echo "This is your host ip: $HOST_IP"
1413
Dean Troyerafc29fe2013-02-07 15:56:24 -06001414# Warn that a deprecated feature was used
1415if [[ -n "$DEPRECATED_TEXT" ]]; then
1416 echo_summary "WARNING: $DEPRECATED_TEXT"
Dean Troyerced65172012-03-02 16:36:16 -06001417fi
1418
Dean Troyer91baef32014-02-28 11:11:45 -06001419# TODO(dtroyer): Remove Q_AGENT_EXTRA_AGENT_OPTS after stable/juno branch is cut
1420if [[ -n "$Q_AGENT_EXTRA_AGENT_OPTS" ]]; then
1421 echo ""
1422 echo_summary "WARNING: Q_AGENT_EXTRA_AGENT_OPTS is used"
1423 echo "You are using Q_AGENT_EXTRA_AGENT_OPTS to pass configuration into $NEUTRON_CONF."
1424 echo "Please convert that configuration in localrc to a $NEUTRON_CONF section in local.conf:"
1425 echo "Q_AGENT_EXTRA_AGENT_OPTS will be removed early in the 'K' development cycle"
1426 echo "
1427[[post-config|/\$Q_PLUGIN_CONF_FILE]]
1428[DEFAULT]
1429"
1430 for I in "${Q_AGENT_EXTRA_AGENT_OPTS[@]}"; do
1431 # Replace the first '=' with ' ' for iniset syntax
1432 echo ${I}
1433 done
1434fi
1435
1436# TODO(dtroyer): Remove Q_AGENT_EXTRA_SRV_OPTS after stable/juno branch is cut
1437if [[ -n "$Q_AGENT_EXTRA_SRV_OPTS" ]]; then
1438 echo ""
1439 echo_summary "WARNING: Q_AGENT_EXTRA_SRV_OPTS is used"
1440 echo "You are using Q_AGENT_EXTRA_SRV_OPTS to pass configuration into $NEUTRON_CONF."
1441 echo "Please convert that configuration in localrc to a $NEUTRON_CONF section in local.conf:"
1442 echo "Q_AGENT_EXTRA_AGENT_OPTS will be removed early in the 'K' development cycle"
1443 echo "
1444[[post-config|/\$Q_PLUGIN_CONF_FILE]]
1445[DEFAULT]
1446"
1447 for I in "${Q_AGENT_EXTRA_SRV_OPTS[@]}"; do
1448 # Replace the first '=' with ' ' for iniset syntax
1449 echo ${I}
1450 done
1451fi
1452
Dean Troyer09718332014-07-03 10:46:57 -05001453# TODO(dtroyer): Remove CINDER_MULTI_LVM_BACKEND after stable/juno branch is cut
1454if [[ "$CINDER_MULTI_LVM_BACKEND" = "True" ]]; then
1455 echo ""
1456 echo_summary "WARNING: CINDER_MULTI_LVM_BACKEND is used"
1457 echo "You are using CINDER_MULTI_LVM_BACKEND to configure Cinder's multiple LVM backends"
1458 echo "Please convert that configuration in local.conf to use CINDER_ENABLED_BACKENDS."
1459 echo "CINDER_ENABLED_BACKENDS will be removed early in the 'K' development cycle"
1460 echo "
1461[[local|localrc]]
1462CINDER_ENABLED_BACKENDS=lvm:lvmdriver-1,lvm:lvmdriver-2
1463"
1464fi
1465
Dean Troyer4a43b7b2012-08-28 17:43:40 -05001466# Indicate how long this took to run (bash maintained variable ``SECONDS``)
Dean Troyer7903b792012-09-13 17:16:12 -05001467echo_summary "stack.sh completed in $SECONDS seconds."
Dean Troyer80684552014-03-05 11:50:23 -06001468
1469# Restore/close logging file descriptors
1470exec 1>&3
1471exec 2>&3
1472exec 3>&-
1473exec 6>&-