blob: cdacc90ded452e435937a600b2ddf88cb30ee46d [file] [log] [blame]
#!/bin/bash
#
# Licensed to the Apache Software Foundation (ASF) under one
# or more contributor license agreements. See the NOTICE file
# distributed with this work for additional information
# regarding copyright ownership. The ASF licenses this file
# to you under the Apache License, Version 2.0 (the
# "License"); you may not use this file except in compliance
# with the License. You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing,
# software distributed under the License is distributed on an
# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
# KIND, either express or implied. See the License for the
# specific language governing permissions and limitations
# under the License.
#
# This script facilitates setting up brooklyn.properties
# and launching the brooklyn server or the br client as appropriate
# some words/actions treated specially:
# --help shows help on this tool
# --username and --password set up brooklyn.properties
# <id:cred@location> parsed as location and --application appended (if application set?)
# <word> (not starting with -) passed as command to brooklyn along with everything that follows
# anything else (blank or options starting -) passed as args to brooklyn launch
function help() {
echo
# BROOKLYN_VERSION_BELOW
echo 'Apache Brooklyn 1.2.0-SNAPSHOT convenience launcher'${application:+" for ${application}"}
echo
echo 'Usage: [OPTIONS] [--help | LOCATION | COMMAND] [ARGS]'
echo
echo 'The main argument can be any of:'
echo ' --help display this help (or use `help` to show brooklyn help)'
if [ -n "$application" ] ; then
echo ' LOCATION location to launch '${application:-}', in form ID:CRED@CLOUD'
else
echo ' LOCATION location to launch APP (requires `--application APP`), in form ID:CRED@CLOUD'
fi
echo ' COMMAND command to pass to `brooklyn`, default `launch`'
echo
echo 'If no main argument is specified, `brooklyn launch` is used to start Apache Brooklyn.'
echo 'ARGS are passed to the resulting `brooklyn` command. Other OPTIONS available are:'
echo ' [ --username USER ] --password PASS set the default [username and] password'
echo ' [ --debug ] show additional debug info'
if [ -n "$application" ] ; then
echo ' [ --application APP ] override the default application to launch ('${application}')'
else
echo ' [ --application APP ] specify a default application to launch'
fi
echo
}
function make_brooklyn_properties() {
if [ -n "${brooklyn_properties}" ] ; then return ; fi
echo
echo Configuring brooklyn.properties...
export brooklyn_properties=~/.brooklyn/brooklyn.properties
mkdir -p `dirname ${brooklyn_properties}`
touch ${brooklyn_properties}
chmod 600 ${brooklyn_properties}
}
if [ -f brooklyn-docker-start.opts ] ; then
. ./brooklyn-docker-start.opts
fi
while [ -n "$1" ] ; do
case "$1" in
--help)
help
exit 0
;;
--username | --password | --application)
if [ -z "$2" ] ; then
echo ERROR: $1 requires an argument following it
exit 255
fi
export ${1#--}=$2
shift 2
continue
;;
--debug)
export ${1#--}=true
shift
continue
;;
*:*@*)
if [ -z "$application" ] ; then
# environment does not support location syntax
break
fi
location=$1
shift
break
;;
-*)
break
;;
*)
command=$1
shift
break
;;
esac
done
if [ -n "$debug" ] ; then
set -x # echo all commands
fi
if [ -n "$password" ] ; then
make_brooklyn_properties
echo brooklyn.webconsole.security.users=${username:-brooklyn} >> ${brooklyn_properties}
echo brooklyn.webconsole.security.user.${username:-brooklyn}.password=${password} >> ${brooklyn_properties}
# and set up the config file for `br` so it works
echo '{"auth":{"http://localhost:8081":{"password":"'${password}'","username":"'${username:-brooklyn}'"}},"skipSslChecks":false,"target":"http://localhost:8081"}}' > ~/.brooklyn_cli
echo Created user ${username:-brooklyn} and given password
elif [ -n "$username" ] ; then
echo ERROR: password must be specified if providing a username
exit 255
fi
if [ ! -f ~/.ssh/id_rsa ] ; then
echo
echo Creating ssh key to access remote machines...
mkdir -p ~/.ssh/
chmod 700 ~/.ssh/
if [ -n "$debug" ] ; then
ssh-keygen -f ~/.ssh/id_rsa -P ""
else
ssh-keygen -f ~/.ssh/id_rsa -P "" > ~/.ssh/id_rsa.log 2> ~/.ssh/id_rsa.log2
fi
cat ~/.ssh/id_rsa
fi
ARGS=(${command:-launch} $@)
if [[ -n "$application" && -n "$location" ]] ; then
echo
echo Launching blueprint...
creds=${location/@*/}
cat > initial.yaml << EOF
name: $application
services:
- type: $application
location:
${location/*@/}:
identity: ${creds/:*/}
credential: ${creds/*:/}
EOF
cat initial.yaml | sed 's/\(.*credential:\).*/\1 <suppressed>/'
ARGS+=(--app file://`pwd -P`/initial.yaml)
fi
# launch brooklyn
echo
echo Launching '`'brooklyn "${ARGS[@]}"'`'...
. bin/brooklyn "${ARGS[@]}"