blob: e05518ce12151e5352114d608be52b735a14c70a [file] [log] [blame]
Flaper Fesp06b345e2013-09-04 15:35:47 +02001# lib/marconi
2# Install and start **Marconi** service
3
4# To enable a minimal set of Marconi services, add the following to localrc:
Dean Troyerd8864fe2014-02-17 11:00:42 -06005#
6# enable_service marconi-server
Flaper Fesp06b345e2013-09-04 15:35:47 +02007#
8# Dependencies:
9# - functions
10# - OS_AUTH_URL for auth in api
11# - DEST set to the destination directory
12# - SERVICE_PASSWORD, SERVICE_TENANT_NAME for auth in api
13# - STACK_USER service user
14
15# stack.sh
16# ---------
17# install_marconi
18# configure_marconi
19# init_marconi
20# start_marconi
21# stop_marconi
22# cleanup_marconi
23
24# Save trace setting
25XTRACE=$(set +o | grep xtrace)
26set +o xtrace
27
28
29# Defaults
30# --------
31
32# Set up default directories
33MARCONI_DIR=$DEST/marconi
34MARCONICLIENT_DIR=$DEST/python-marconiclient
35MARCONI_CONF_DIR=/etc/marconi
36MARCONI_CONF=$MARCONI_CONF_DIR/marconi.conf
Malini Kamalambale2aa91b2014-03-04 04:40:19 -050037MARCONI_API_LOG_DIR=/var/log/marconi
38MARCONI_API_LOG_FILE=$MARCONI_API_LOG_DIR/queues.log
Flaper Fesp06b345e2013-09-04 15:35:47 +020039MARCONI_AUTH_CACHE_DIR=${MARCONI_AUTH_CACHE_DIR:-/var/cache/marconi}
40
41# Support potential entry-points console scripts
42MARCONI_BIN_DIR=$(get_python_exec_prefix)
43
44# Set up database backend
Malini Kamalambalf7ae9ff2014-06-26 12:50:26 -040045MARCONI_BACKEND=${MARCONI_BACKEND:-mongodb}
Flaper Fesp06b345e2013-09-04 15:35:47 +020046
47
48# Set Marconi repository
49MARCONI_REPO=${MARCONI_REPO:-${GIT_BASE}/openstack/marconi.git}
50MARCONI_BRANCH=${MARCONI_BRANCH:-master}
51
52# Set client library repository
53MARCONICLIENT_REPO=${MARCONICLIENT_REPO:-${GIT_BASE}/openstack/python-marconiclient.git}
54MARCONICLIENT_BRANCH=${MARCONICLIENT_BRANCH:-master}
55
Malini Kamalambal67df3b22014-02-20 14:48:59 -050056# Set Marconi Connection Info
57MARCONI_SERVICE_HOST=${MARCONI_SERVICE_HOST:-$SERVICE_HOST}
58MARCONI_SERVICE_PORT=${MARCONI_SERVICE_PORT:-8888}
59MARCONI_SERVICE_PROTOCOL=${MARCONI_SERVICE_PROTOCOL:-$SERVICE_PROTOCOL}
60
Dean Troyer4237f592014-01-29 16:22:11 -060061# Tell Tempest this project is present
Malini Kamalambal1e4e3ac2014-02-14 11:29:26 -050062TEMPEST_SERVICES+=,marconi
Dean Troyer4237f592014-01-29 16:22:11 -060063
64
Flaper Fesp06b345e2013-09-04 15:35:47 +020065# Functions
66# ---------
67
Malini Kamalambal9972ec22014-02-10 11:22:39 -050068# Test if any Marconi services are enabled
69# is_marconi_enabled
70function is_marconi_enabled {
71 [[ ,${ENABLED_SERVICES} =~ ,"marconi-" ]] && return 0
72 return 1
73}
74
Flaper Fesp06b345e2013-09-04 15:35:47 +020075# cleanup_marconi() - Remove residual data files, anything left over from previous
76# runs that a clean run would need to clean up
Ian Wienandaee18c72014-02-21 15:35:08 +110077function cleanup_marconi {
Malini Kamalambal2dcc7742014-02-18 13:45:18 -050078 if ! timeout $SERVICE_TIMEOUT sh -c "while ! mongo marconi --eval 'db.dropDatabase();'; do sleep 1; done"; then
79 die $LINENO "Mongo DB did not start"
Malini Kamalambalf7ae9ff2014-06-26 12:50:26 -040080 else
81 full_version=$(mongo marconi --eval 'db.dropDatabase();')
82 mongo_version=`echo $full_version | cut -d' ' -f4`
83 required_mongo_version='2.2'
84 if [[ $mongo_version < $required_mongo_version ]]; then
85 die $LINENO "Marconi needs Mongo DB version >= 2.2 to run."
86 fi
Malini Kamalambal2dcc7742014-02-18 13:45:18 -050087 fi
Flaper Fesp06b345e2013-09-04 15:35:47 +020088}
89
90# configure_marconiclient() - Set config files, create data dirs, etc
Ian Wienandaee18c72014-02-21 15:35:08 +110091function configure_marconiclient {
Flaper Fesp06b345e2013-09-04 15:35:47 +020092 setup_develop $MARCONICLIENT_DIR
93}
94
95# configure_marconi() - Set config files, create data dirs, etc
Ian Wienandaee18c72014-02-21 15:35:08 +110096function configure_marconi {
Flaper Fesp06b345e2013-09-04 15:35:47 +020097 setup_develop $MARCONI_DIR
98
99 [ ! -d $MARCONI_CONF_DIR ] && sudo mkdir -m 755 -p $MARCONI_CONF_DIR
100 sudo chown $USER $MARCONI_CONF_DIR
101
102 [ ! -d $MARCONI_API_LOG_DIR ] && sudo mkdir -m 755 -p $MARCONI_API_LOG_DIR
103 sudo chown $USER $MARCONI_API_LOG_DIR
104
105 iniset $MARCONI_CONF DEFAULT verbose True
Malini Kamalambal2e978dd2014-02-28 14:06:59 -0500106 iniset $MARCONI_CONF DEFAULT use_syslog $SYSLOG
Malini Kamalambale2aa91b2014-03-04 04:40:19 -0500107 iniset $MARCONI_CONF DEFAULT log_file $MARCONI_API_LOG_FILE
Malini Kamalambal67df3b22014-02-20 14:48:59 -0500108 iniset $MARCONI_CONF 'drivers:transport:wsgi' bind $MARCONI_SERVICE_HOST
Flaper Fesp06b345e2013-09-04 15:35:47 +0200109
Flaper Fesp06b345e2013-09-04 15:35:47 +0200110 iniset $MARCONI_CONF keystone_authtoken auth_protocol http
111 iniset $MARCONI_CONF keystone_authtoken admin_user marconi
112 iniset $MARCONI_CONF keystone_authtoken admin_password $SERVICE_PASSWORD
113 iniset $MARCONI_CONF keystone_authtoken admin_tenant_name $SERVICE_TENANT_NAME
114 iniset $MARCONI_CONF keystone_authtoken signing_dir $MARCONI_AUTH_CACHE_DIR
115
Flavio Percoco5fc5b7e2014-03-05 18:49:02 +0100116 if [ "$MARCONI_BACKEND" = 'mysql' ] || [ "$MARCONI_BACKEND" = 'postgresql' ] ; then
117 iniset $MARCONI_CONF drivers storage sqlalchemy
118 iniset $MARCONI_CONF 'drivers:storage:sqlalchemy' uri `database_connection_url marconi`
Obulapathi N Challa9b2c5792014-04-21 11:43:08 -0400119 elif [ "$MARCONI_BACKEND" = 'mongodb' ] ; then
120 iniset $MARCONI_CONF drivers storage mongodb
Flavio Percoco961328f2014-03-05 18:45:56 +0100121 iniset $MARCONI_CONF 'drivers:storage:mongodb' uri mongodb://localhost:27017/marconi
Flaper Fesp06b345e2013-09-04 15:35:47 +0200122 configure_mongodb
123 cleanup_marconi
124 fi
125}
126
Ian Wienandaee18c72014-02-21 15:35:08 +1100127function configure_mongodb {
Flaper Fesp06b345e2013-09-04 15:35:47 +0200128 # Set nssize to 2GB. This increases the number of namespaces supported
129 # # per database.
Dean Troyer41d96d72014-02-11 09:08:35 -0600130 if is_ubuntu; then
131 sudo sed -i -e "
132 s|[^ \t]*#[ \t]*\(nssize[ \t]*=.*\$\)|\1|
133 s|^\(nssize[ \t]*=[ \t]*\).*\$|\1 2047|
134 " /etc/mongodb.conf
135 restart_service mongodb
136 elif is_fedora; then
137 sudo sed -i '/--nssize/!s/OPTIONS=\"/OPTIONS=\"--nssize 2047 /' /etc/sysconfig/mongod
138 restart_service mongod
139 fi
Flaper Fesp06b345e2013-09-04 15:35:47 +0200140}
141
142# init_marconi() - Initialize etc.
Ian Wienandaee18c72014-02-21 15:35:08 +1100143function init_marconi {
Flaper Fesp06b345e2013-09-04 15:35:47 +0200144 # Create cache dir
145 sudo mkdir -p $MARCONI_AUTH_CACHE_DIR
146 sudo chown $STACK_USER $MARCONI_AUTH_CACHE_DIR
147 rm -f $MARCONI_AUTH_CACHE_DIR/*
148}
149
150# install_marconi() - Collect source and prepare
Ian Wienandaee18c72014-02-21 15:35:08 +1100151function install_marconi {
Flaper Fesp06b345e2013-09-04 15:35:47 +0200152 git_clone $MARCONI_REPO $MARCONI_DIR $MARCONI_BRANCH
153 setup_develop $MARCONI_DIR
154}
155
156# install_marconiclient() - Collect source and prepare
Ian Wienandaee18c72014-02-21 15:35:08 +1100157function install_marconiclient {
Flaper Fesp06b345e2013-09-04 15:35:47 +0200158 git_clone $MARCONICLIENT_REPO $MARCONICLIENT_DIR $MARCONICLIENT_BRANCH
159 setup_develop $MARCONICLIENT_DIR
160}
161
162# start_marconi() - Start running processes, including screen
Ian Wienandaee18c72014-02-21 15:35:08 +1100163function start_marconi {
Malini Kamalambal22ab3b92014-05-22 12:07:34 -0400164 if [[ "$USE_SCREEN" = "False" ]]; then
Malini Kamalambalb0c38592014-05-15 17:04:13 -0400165 screen_it marconi-server "marconi-server --config-file $MARCONI_CONF --daemon"
166 else
167 screen_it marconi-server "marconi-server --config-file $MARCONI_CONF"
168 fi
169
Malini Kamalambal67df3b22014-02-20 14:48:59 -0500170 echo "Waiting for Marconi to start..."
171 if ! timeout $SERVICE_TIMEOUT sh -c "while ! wget --no-proxy -q -O- $MARCONI_SERVICE_PROTOCOL://$MARCONI_SERVICE_HOST:$MARCONI_SERVICE_PORT/v1/health; do sleep 1; done"; then
172 die $LINENO "Marconi did not start"
173 fi
Flaper Fesp06b345e2013-09-04 15:35:47 +0200174}
175
176# stop_marconi() - Stop running processes
Ian Wienandaee18c72014-02-21 15:35:08 +1100177function stop_marconi {
Flaper Fesp06b345e2013-09-04 15:35:47 +0200178 # Kill the marconi screen windows
179 for serv in marconi-server; do
180 screen -S $SCREEN_NAME -p $serv -X kill
181 done
182}
183
Ian Wienandaee18c72014-02-21 15:35:08 +1100184function create_marconi_accounts {
Steve Martinelli19685422014-01-24 13:02:26 -0600185 SERVICE_TENANT=$(openstack project list | awk "/ $SERVICE_TENANT_NAME / { print \$2 }")
186 ADMIN_ROLE=$(openstack role list | awk "/ admin / { print \$2 }")
Flaper Fesp06b345e2013-09-04 15:35:47 +0200187
Bartosz Górski0abde392014-02-28 14:15:19 +0100188 MARCONI_USER=$(get_or_create_user "marconi" \
Gael Chamoulaud6dd8a8b2014-07-22 01:12:12 +0200189 "$SERVICE_PASSWORD" $SERVICE_TENANT)
Bartosz Górski0abde392014-02-28 14:15:19 +0100190 get_or_add_user_role $ADMIN_ROLE $MARCONI_USER $SERVICE_TENANT
Malini Kamalambal0b3aacc2014-02-13 18:18:51 -0500191
Flaper Fesp06b345e2013-09-04 15:35:47 +0200192 if [[ "$KEYSTONE_CATALOG_BACKEND" = 'sql' ]]; then
Bartosz Górski0abde392014-02-28 14:15:19 +0100193
194 MARCONI_SERVICE=$(get_or_create_service "marconi" \
195 "queuing" "Marconi Service")
196 get_or_create_endpoint $MARCONI_SERVICE \
197 "$REGION_NAME" \
198 "$MARCONI_SERVICE_PROTOCOL://$MARCONI_SERVICE_HOST:$MARCONI_SERVICE_PORT" \
199 "$MARCONI_SERVICE_PROTOCOL://$MARCONI_SERVICE_HOST:$MARCONI_SERVICE_PORT" \
200 "$MARCONI_SERVICE_PROTOCOL://$MARCONI_SERVICE_HOST:$MARCONI_SERVICE_PORT"
Flaper Fesp06b345e2013-09-04 15:35:47 +0200201 fi
202
203}
204
205
206# Restore xtrace
207$XTRACE
208
209# Local variables:
210# mode: shell-script
211# End: