rubber 1.1.7 → 1.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/VERSION +1 -1
- data/generators/vulcanize/templates/base/config/rubber/deploy-setup.rb +5 -5
- data/generators/vulcanize/templates/base/config/rubber/rubber.yml +13 -0
- data/generators/vulcanize/templates/jetty/config/rubber/role/jetty/jetty.sh +589 -0
- data/generators/vulcanize/templates/jetty/config/rubber/rubber-jetty.yml +2 -0
- data/generators/vulcanize/templates/mysql/config/rubber/rubber-mysql.yml +1 -0
- data/generators/vulcanize/templates/passenger/config/rubber/rubber-passenger.yml +1 -1
- data/generators/vulcanize/templates/redis/config/rubber/deploy-redis.rb +1 -1
- data/lib/rubber/cloud/aws.rb +30 -1
- data/lib/rubber/instance.rb +11 -0
- data/lib/rubber/recipes/rubber.rb +10 -3
- data/lib/rubber/recipes/rubber/instances.rb +48 -5
- data/lib/rubber/recipes/rubber/setup.rb +3 -0
- data/lib/rubber/recipes/rubber/spot_requests.rb +23 -0
- data/lib/rubber/recipes/rubber/static_ips.rb +83 -0
- data/test/environment_test.rb +3 -0
- data/test/generator_test.rb +3 -0
- data/test/instance_test.rb +3 -0
- data/test/util_test.rb +3 -0
- metadata +6 -3
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
1.
|
1
|
+
1.2.0
|
@@ -13,20 +13,20 @@ namespace :rubber do
|
|
13
13
|
rubber_instances.filtered.each do |ic|
|
14
14
|
env = rubber_cfg.environment.bind(ic.role_names, ic.name)
|
15
15
|
if env.use_enterprise_ruby
|
16
|
-
ent_ruby_hosts << ic.full_name
|
16
|
+
ent_ruby_hosts << ic.full_name unless ic.windows?
|
17
17
|
end
|
18
18
|
end
|
19
19
|
|
20
20
|
if ent_ruby_hosts.size > 0
|
21
21
|
task :_install_enterprise_ruby, :hosts => ent_ruby_hosts do
|
22
|
-
ver = "1.8.7-
|
22
|
+
ver = "1.8.7-2010.01"
|
23
23
|
rubber.run_script "install_ruby-enterprise", <<-ENDSCRIPT
|
24
|
-
if [[ ! `ruby --version 2> /dev/null` =~ "Ruby Enterprise Edition
|
24
|
+
if [[ ! `ruby --version 2> /dev/null` =~ "Ruby Enterprise Edition 2010.01" ]]; then
|
25
25
|
arch=`uname -m`
|
26
26
|
if [ "$arch" = "x86_64" ]; then
|
27
|
-
src="http://rubyforge.org/frs/download.php/
|
27
|
+
src="http://rubyforge.org/frs/download.php/68720/ruby-enterprise_#{ver}_amd64.deb"
|
28
28
|
else
|
29
|
-
src="http://rubyforge.org/frs/download.php/
|
29
|
+
src="http://rubyforge.org/frs/download.php/68718/ruby-enterprise_#{ver}_i386.deb"
|
30
30
|
fi
|
31
31
|
src_file="${src##*/}"
|
32
32
|
wget -qP /tmp ${src}
|
@@ -82,6 +82,19 @@ cloud_providers:
|
|
82
82
|
# m1.small or m1.large or m1.xlarge
|
83
83
|
image_type: m1.small
|
84
84
|
|
85
|
+
# OPTIONAL: EC2 spot instance request support.
|
86
|
+
#
|
87
|
+
# Enables the creation of spot instance requests. Rubber will wait synchronously until the request is fulfilled,
|
88
|
+
# at which point it will begin initializing the instance, unless spot_instance_request_timeout is set.
|
89
|
+
# spot_instance: true
|
90
|
+
#
|
91
|
+
# The maximum price you would like to pay for your spot instance.
|
92
|
+
# spot_price: "0.085"
|
93
|
+
#
|
94
|
+
# If a spot instance request can't be fulfilled in 3 minutes, fallback to on-demand instance creation. If not set,
|
95
|
+
# the default is infinite.
|
96
|
+
# spot_instance_request_timeout: 180
|
97
|
+
|
85
98
|
# REQUIRED the cloud provider to use
|
86
99
|
#
|
87
100
|
cloud_provider: aws
|
@@ -0,0 +1,589 @@
|
|
1
|
+
<%-
|
2
|
+
@path = "#{rubber_env.jetty_dir}/bin/jetty.sh"
|
3
|
+
@perms = 0744
|
4
|
+
%>
|
5
|
+
|
6
|
+
#!/bin/bash
|
7
|
+
#
|
8
|
+
# Startup script for jetty under *nix systems (it works under NT/cygwin too).
|
9
|
+
|
10
|
+
# To get the service to restart correctly on reboot, uncomment below (3 lines):
|
11
|
+
# ========================
|
12
|
+
# chkconfig: 3 99 99
|
13
|
+
# description: Jetty 7 webserver
|
14
|
+
# processname: jetty
|
15
|
+
# ========================
|
16
|
+
|
17
|
+
# Configuration files
|
18
|
+
#
|
19
|
+
# /etc/default/jetty
|
20
|
+
# If it exists, this is read at the start of script. It may perform any
|
21
|
+
# sequence of shell commands, like setting relevant environment variables.
|
22
|
+
#
|
23
|
+
# $HOME/.jettyrc
|
24
|
+
# If it exists, this is read at the start of script. It may perform any
|
25
|
+
# sequence of shell commands, like setting relevant environment variables.
|
26
|
+
#
|
27
|
+
# /etc/jetty.conf
|
28
|
+
# If found, and no configurations were given on the command line,
|
29
|
+
# the file will be used as this script's configuration.
|
30
|
+
# Each line in the file may contain:
|
31
|
+
# - A comment denoted by the pound (#) sign as first non-blank character.
|
32
|
+
# - The path to a regular file, which will be passed to jetty as a
|
33
|
+
# config.xml file.
|
34
|
+
# - The path to a directory. Each *.xml file in the directory will be
|
35
|
+
# passed to jetty as a config.xml file.
|
36
|
+
#
|
37
|
+
# The files will be checked for existence before being passed to jetty.
|
38
|
+
#
|
39
|
+
# $JETTY_HOME/etc/jetty.xml
|
40
|
+
# If found, used as this script's configuration file, but only if
|
41
|
+
# /etc/jetty.conf was not present. See above.
|
42
|
+
#
|
43
|
+
# Configuration variables
|
44
|
+
#
|
45
|
+
# JAVA_HOME
|
46
|
+
# Home of Java installation.
|
47
|
+
#
|
48
|
+
# JAVA
|
49
|
+
# Command to invoke Java. If not set, $JAVA_HOME/bin/java will be
|
50
|
+
# used.
|
51
|
+
#
|
52
|
+
# JAVA_OPTIONS
|
53
|
+
# Extra options to pass to the JVM
|
54
|
+
|
55
|
+
JAVA_OPTIONS="<%= rubber_env.jetty_jvm_options %>"
|
56
|
+
|
57
|
+
#
|
58
|
+
# JETTY_HOME
|
59
|
+
# Where Jetty is installed. If not set, the script will try go
|
60
|
+
# guess it by first looking at the invocation path for the script,
|
61
|
+
# and then by looking in standard locations as $HOME/opt/jetty
|
62
|
+
# and /opt/jetty. The java system property "jetty.home" will be
|
63
|
+
# set to this value for use by configure.xml files, f.e.:
|
64
|
+
#
|
65
|
+
# <Arg><SystemProperty name="jetty.home" default="."/>/webapps/jetty.war</Arg>
|
66
|
+
#
|
67
|
+
# JETTY_PORT
|
68
|
+
# Override the default port for Jetty servers. If not set then the
|
69
|
+
# default value in the xml configuration file will be used. The java
|
70
|
+
# system property "jetty.port" will be set to this value for use in
|
71
|
+
# configure.xml files. For example, the following idiom is widely
|
72
|
+
# used in the demo config files to respect this property in Listener
|
73
|
+
# configuration elements:
|
74
|
+
#
|
75
|
+
# <Set name="Port"><SystemProperty name="jetty.port" default="8080"/></Set>
|
76
|
+
#
|
77
|
+
# Note: that the config file could ignore this property simply by saying:
|
78
|
+
#
|
79
|
+
# <Set name="Port">8080</Set>
|
80
|
+
#
|
81
|
+
# JETTY_RUN
|
82
|
+
# Where the jetty.pid file should be stored. It defaults to the
|
83
|
+
# first available of /var/run, /usr/var/run, and /tmp if not set.
|
84
|
+
#
|
85
|
+
# JETTY_PID
|
86
|
+
# The Jetty PID file, defaults to $JETTY_RUN/jetty.pid
|
87
|
+
#
|
88
|
+
# JETTY_ARGS
|
89
|
+
# The default arguments to pass to jetty.
|
90
|
+
#
|
91
|
+
# JETTY_USER
|
92
|
+
# if set, then used as a username to run the server as
|
93
|
+
#
|
94
|
+
# Set to 0 if you do not want to use start-stop-daemon (especially on SUSE boxes)
|
95
|
+
START_STOP_DAEMON=1
|
96
|
+
|
97
|
+
usage()
|
98
|
+
{
|
99
|
+
echo "Usage: $0 {start|stop|run|restart|check|supervise} [ CONFIGS ... ] "
|
100
|
+
exit 1
|
101
|
+
}
|
102
|
+
|
103
|
+
[ $# -gt 0 ] || usage
|
104
|
+
|
105
|
+
|
106
|
+
##################################################
|
107
|
+
# Some utility functions
|
108
|
+
##################################################
|
109
|
+
findDirectory()
|
110
|
+
{
|
111
|
+
OP=$1
|
112
|
+
shift
|
113
|
+
for L in $* ; do
|
114
|
+
[ $OP $L ] || continue
|
115
|
+
echo $L
|
116
|
+
break
|
117
|
+
done
|
118
|
+
}
|
119
|
+
|
120
|
+
running()
|
121
|
+
{
|
122
|
+
[ -f $1 ] || return 1
|
123
|
+
PID=$(cat $1)
|
124
|
+
ps -p $PID >/dev/null 2>/dev/null || return 1
|
125
|
+
return 0
|
126
|
+
}
|
127
|
+
|
128
|
+
##################################################
|
129
|
+
# Get the action & configs
|
130
|
+
##################################################
|
131
|
+
|
132
|
+
ACTION=$1
|
133
|
+
shift
|
134
|
+
ARGS="$*"
|
135
|
+
NO_START=0
|
136
|
+
|
137
|
+
##################################################
|
138
|
+
# See if there's a default configuration file
|
139
|
+
##################################################
|
140
|
+
if [ -f /etc/default/jetty7 ] ; then
|
141
|
+
. /etc/default/jetty7
|
142
|
+
elif [ -f /etc/default/jetty ] ; then
|
143
|
+
. /etc/default/jetty
|
144
|
+
fi
|
145
|
+
|
146
|
+
|
147
|
+
##################################################
|
148
|
+
# See if there's a user-specific configuration file
|
149
|
+
##################################################
|
150
|
+
if [ -f $HOME/.jettyrc ] ; then
|
151
|
+
. $HOME/.jettyrc
|
152
|
+
fi
|
153
|
+
|
154
|
+
##################################################
|
155
|
+
# Set tmp if not already set.
|
156
|
+
##################################################
|
157
|
+
|
158
|
+
if [ -z "$TMP" ]
|
159
|
+
then
|
160
|
+
TMP=/tmp
|
161
|
+
fi
|
162
|
+
|
163
|
+
##################################################
|
164
|
+
# Jetty's hallmark
|
165
|
+
##################################################
|
166
|
+
JETTY_INSTALL_TRACE_FILE="etc/jetty.xml"
|
167
|
+
TMPJ=$TMP/j$$
|
168
|
+
|
169
|
+
|
170
|
+
##################################################
|
171
|
+
# Try to determine JETTY_HOME if not set
|
172
|
+
##################################################
|
173
|
+
if [ -z "$JETTY_HOME" ]
|
174
|
+
then
|
175
|
+
JETTY_HOME_1=`dirname "$0"`
|
176
|
+
JETTY_HOME_1=`dirname "$JETTY_HOME_1"`
|
177
|
+
if [ -f "${JETTY_HOME_1}/${JETTY_INSTALL_TRACE_FILE}" ] ;
|
178
|
+
then
|
179
|
+
JETTY_HOME=${JETTY_HOME_1}
|
180
|
+
fi
|
181
|
+
fi
|
182
|
+
|
183
|
+
|
184
|
+
##################################################
|
185
|
+
# if no JETTY_HOME, search likely locations.
|
186
|
+
##################################################
|
187
|
+
if [ "$JETTY_HOME" = "" ] ; then
|
188
|
+
STANDARD_LOCATIONS=" \
|
189
|
+
/usr/share \
|
190
|
+
/usr/share/java \
|
191
|
+
$HOME \
|
192
|
+
$HOME/src \
|
193
|
+
${HOME}/opt/ \
|
194
|
+
/opt \
|
195
|
+
/java \
|
196
|
+
/usr/local \
|
197
|
+
/usr/local/share \
|
198
|
+
/usr/local/share/java \
|
199
|
+
/home \
|
200
|
+
"
|
201
|
+
JETTY_DIR_NAMES=" \
|
202
|
+
jetty-7 \
|
203
|
+
jetty7 \
|
204
|
+
jetty-7.* \
|
205
|
+
jetty \
|
206
|
+
Jetty-7 \
|
207
|
+
Jetty7 \
|
208
|
+
Jetty-7.* \
|
209
|
+
Jetty \
|
210
|
+
"
|
211
|
+
|
212
|
+
JETTY_HOME=
|
213
|
+
for L in $STANDARD_LOCATIONS
|
214
|
+
do
|
215
|
+
for N in $JETTY_DIR_NAMES
|
216
|
+
do
|
217
|
+
if [ -d $L/$N ] && [ -f "$L/${N}/${JETTY_INSTALL_TRACE_FILE}" ] ;
|
218
|
+
then
|
219
|
+
JETTY_HOME="$L/$N"
|
220
|
+
fi
|
221
|
+
done
|
222
|
+
[ ! -z "$JETTY_HOME" ] && break
|
223
|
+
done
|
224
|
+
fi
|
225
|
+
|
226
|
+
|
227
|
+
##################################################
|
228
|
+
# No JETTY_HOME yet? We're out of luck!
|
229
|
+
##################################################
|
230
|
+
if [ -z "$JETTY_HOME" ] ; then
|
231
|
+
echo "** ERROR: JETTY_HOME not set, you need to set it or install in a standard location"
|
232
|
+
exit 1
|
233
|
+
fi
|
234
|
+
|
235
|
+
cd $JETTY_HOME
|
236
|
+
JETTY_HOME=`pwd`
|
237
|
+
|
238
|
+
#####################################################
|
239
|
+
# Check that jetty is where we think it is
|
240
|
+
#####################################################
|
241
|
+
if [ ! -r $JETTY_HOME/$JETTY_INSTALL_TRACE_FILE ]
|
242
|
+
then
|
243
|
+
echo "** ERROR: Oops! Jetty doesn't appear to be installed in $JETTY_HOME"
|
244
|
+
echo "** ERROR: $JETTY_HOME/$JETTY_INSTALL_TRACE_FILE is not readable!"
|
245
|
+
exit 1
|
246
|
+
fi
|
247
|
+
|
248
|
+
##################################################
|
249
|
+
# Try to find this script's configuration file,
|
250
|
+
# but only if no configurations were given on the
|
251
|
+
# command line.
|
252
|
+
##################################################
|
253
|
+
if [ -z "$JETTY_CONF" ]
|
254
|
+
then
|
255
|
+
if [ -f /etc/jetty.conf ]
|
256
|
+
then
|
257
|
+
JETTY_CONF=/etc/jetty.conf
|
258
|
+
elif [ -f "${JETTY_HOME}/etc/jetty.conf" ]
|
259
|
+
then
|
260
|
+
JETTY_CONF="${JETTY_HOME}/etc/jetty.conf"
|
261
|
+
fi
|
262
|
+
fi
|
263
|
+
|
264
|
+
##################################################
|
265
|
+
# Read the configuration file if one exists
|
266
|
+
##################################################
|
267
|
+
CONFIG_LINES=
|
268
|
+
if [ -f "$JETTY_CONF" ] && [ -r "$JETTY_CONF" ]
|
269
|
+
then
|
270
|
+
CONFIG_LINES=`cat $JETTY_CONF | grep -v "^[:space:]*#" | tr "\n" " "`
|
271
|
+
fi
|
272
|
+
|
273
|
+
#####################################################
|
274
|
+
# Find a location for the pid file
|
275
|
+
#####################################################
|
276
|
+
if [ -z "$JETTY_RUN" ]
|
277
|
+
then
|
278
|
+
JETTY_RUN=`findDirectory -w /var/run /usr/var/run /tmp`
|
279
|
+
fi
|
280
|
+
|
281
|
+
#####################################################
|
282
|
+
# Find a PID for the pid file
|
283
|
+
#####################################################
|
284
|
+
if [ -z "$JETTY_PID" ]
|
285
|
+
then
|
286
|
+
JETTY_PID="$JETTY_RUN/jetty.pid"
|
287
|
+
fi
|
288
|
+
|
289
|
+
|
290
|
+
##################################################
|
291
|
+
# Check for JAVA_HOME
|
292
|
+
##################################################
|
293
|
+
if [ -z "$JAVA_HOME" ]
|
294
|
+
then
|
295
|
+
# If a java runtime is not defined, search the following
|
296
|
+
# directories for a JVM and sort by version. Use the highest
|
297
|
+
# version number.
|
298
|
+
|
299
|
+
# Java search path
|
300
|
+
JAVA_LOCATIONS="\
|
301
|
+
/usr/java \
|
302
|
+
/usr/bin \
|
303
|
+
/usr/local/bin \
|
304
|
+
/usr/local/java \
|
305
|
+
/usr/local/jdk \
|
306
|
+
/usr/local/jre \
|
307
|
+
/usr/lib/jvm \
|
308
|
+
/opt/java \
|
309
|
+
/opt/jdk \
|
310
|
+
/opt/jre \
|
311
|
+
"
|
312
|
+
JAVA_NAMES="java jdk jre"
|
313
|
+
for N in $JAVA_NAMES ; do
|
314
|
+
for L in $JAVA_LOCATIONS ; do
|
315
|
+
[ -d $L ] || continue
|
316
|
+
find $L -name "$N" ! -type d | grep -v threads | while read J ; do
|
317
|
+
[ -x $J ] || continue
|
318
|
+
VERSION=`eval $J -version 2>&1`
|
319
|
+
[ $? = 0 ] || continue
|
320
|
+
VERSION=`expr "$VERSION" : '.*"\(1.[0-9\.]*\)["_]'`
|
321
|
+
[ "$VERSION" = "" ] && continue
|
322
|
+
expr $VERSION \< 1.2 >/dev/null && continue
|
323
|
+
echo $VERSION:$J
|
324
|
+
done
|
325
|
+
done
|
326
|
+
done | sort | tail -1 > $TMPJ
|
327
|
+
JAVA=`cat $TMPJ | cut -d: -f2`
|
328
|
+
JVERSION=`cat $TMPJ | cut -d: -f1`
|
329
|
+
|
330
|
+
JAVA_HOME=`dirname $JAVA`
|
331
|
+
while [ ! -z "$JAVA_HOME" -a "$JAVA_HOME" != "/" -a ! -f "$JAVA_HOME/lib/tools.jar" ] ; do
|
332
|
+
JAVA_HOME=`dirname $JAVA_HOME`
|
333
|
+
done
|
334
|
+
[ "$JAVA_HOME" = "" ] && JAVA_HOME=
|
335
|
+
|
336
|
+
echo "Found JAVA=$JAVA in JAVA_HOME=$JAVA_HOME"
|
337
|
+
fi
|
338
|
+
|
339
|
+
|
340
|
+
##################################################
|
341
|
+
# Determine which JVM of version >1.2
|
342
|
+
# Try to use JAVA_HOME
|
343
|
+
##################################################
|
344
|
+
if [ "$JAVA" = "" -a "$JAVA_HOME" != "" ]
|
345
|
+
then
|
346
|
+
if [ ! -z "$JAVACMD" ]
|
347
|
+
then
|
348
|
+
JAVA="$JAVACMD"
|
349
|
+
else
|
350
|
+
[ -x $JAVA_HOME/bin/jre -a ! -d $JAVA_HOME/bin/jre ] && JAVA=$JAVA_HOME/bin/jre
|
351
|
+
[ -x $JAVA_HOME/bin/java -a ! -d $JAVA_HOME/bin/java ] && JAVA=$JAVA_HOME/bin/java
|
352
|
+
fi
|
353
|
+
fi
|
354
|
+
|
355
|
+
if [ "$JAVA" = "" ]
|
356
|
+
then
|
357
|
+
echo "Cannot find a JRE or JDK. Please set JAVA_HOME to a >=1.2 JRE" 2>&2
|
358
|
+
exit 1
|
359
|
+
fi
|
360
|
+
|
361
|
+
JAVA_VERSION=`expr "$($JAVA -version 2>&1 | head -1)" : '.*1\.\([0-9]\)'`
|
362
|
+
|
363
|
+
#####################################################
|
364
|
+
# See if JETTY_PORT is defined
|
365
|
+
#####################################################
|
366
|
+
if [ "$JETTY_PORT" != "" ]
|
367
|
+
then
|
368
|
+
JAVA_OPTIONS="$JAVA_OPTIONS -Djetty.port=$JETTY_PORT"
|
369
|
+
fi
|
370
|
+
|
371
|
+
#####################################################
|
372
|
+
# See if JETTY_LOGS is defined
|
373
|
+
#####################################################
|
374
|
+
if [ "$JETTY_LOGS" != "" ]
|
375
|
+
then
|
376
|
+
JAVA_OPTIONS="$JAVA_OPTIONS -Djetty.logs=$JETTY_LOGS"
|
377
|
+
fi
|
378
|
+
|
379
|
+
#####################################################
|
380
|
+
# Are we running on Windows? Could be, with Cygwin/NT.
|
381
|
+
#####################################################
|
382
|
+
case "`uname`" in
|
383
|
+
CYGWIN*) PATH_SEPARATOR=";";;
|
384
|
+
*) PATH_SEPARATOR=":";;
|
385
|
+
esac
|
386
|
+
|
387
|
+
|
388
|
+
#####################################################
|
389
|
+
# Add jetty properties to Java VM options.
|
390
|
+
#####################################################
|
391
|
+
JAVA_OPTIONS="$JAVA_OPTIONS -Djetty.home=$JETTY_HOME -Djava.io.tmpdir=$TMP"
|
392
|
+
|
393
|
+
[ -f $JETTY_HOME/etc/start.config ] && JAVA_OPTIONS="-DSTART=$JETTY_HOME/etc/start.config $JAVA_OPTIONS"
|
394
|
+
|
395
|
+
#####################################################
|
396
|
+
# This is how the Jetty server will be started
|
397
|
+
#####################################################
|
398
|
+
|
399
|
+
JETTY_START=$JETTY_HOME/start.jar
|
400
|
+
[ ! -f $JETTY_START ] && JETTY_START=$JETTY_HOME/lib/start.jar
|
401
|
+
|
402
|
+
RUN_ARGS="$JAVA_OPTIONS -jar $JETTY_START --fromDaemon $JETTY_ARGS $ARGS"
|
403
|
+
RUN_CMD="$JAVA $RUN_ARGS"
|
404
|
+
|
405
|
+
#####################################################
|
406
|
+
# Comment these out after you're happy with what
|
407
|
+
# the script is doing.
|
408
|
+
#####################################################
|
409
|
+
#echo "JETTY_HOME = $JETTY_HOME"
|
410
|
+
#echo "JETTY_CONF = $JETTY_CONF"
|
411
|
+
#echo "JETTY_RUN = $JETTY_RUN"
|
412
|
+
#echo "JETTY_PID = $JETTY_PID"
|
413
|
+
#echo "JETTY_ARGS = $JETTY_ARGS"
|
414
|
+
#echo "ARGS = $ARGS"
|
415
|
+
#echo "JAVA_OPTIONS = $JAVA_OPTIONS"
|
416
|
+
#echo "JAVA = $JAVA"
|
417
|
+
|
418
|
+
|
419
|
+
##################################################
|
420
|
+
# Do the action
|
421
|
+
##################################################
|
422
|
+
case "$ACTION" in
|
423
|
+
start)
|
424
|
+
echo -n "Starting Jetty: "
|
425
|
+
|
426
|
+
if [ "$NO_START" = "1" ]; then
|
427
|
+
echo "Not starting jetty - NO_START=1 in /etc/default/jetty7";
|
428
|
+
exit 0;
|
429
|
+
fi
|
430
|
+
|
431
|
+
|
432
|
+
if [ "$START_STOP_DAEMON" = "1" ] && type start-stop-daemon > /dev/null 2>&1
|
433
|
+
then
|
434
|
+
[ x$JETTY_USER = x ] && JETTY_USER=$(whoami)
|
435
|
+
[ $UID = 0 ] && CH_USER="-c $JETTY_USER"
|
436
|
+
if start-stop-daemon -S -p$JETTY_PID $CH_USER -d $JETTY_HOME -b -m -a $JAVA -- $RUN_ARGS
|
437
|
+
then
|
438
|
+
sleep 1
|
439
|
+
if running $JETTY_PID
|
440
|
+
then
|
441
|
+
echo OK
|
442
|
+
else
|
443
|
+
echo FAILED
|
444
|
+
fi
|
445
|
+
fi
|
446
|
+
|
447
|
+
else
|
448
|
+
|
449
|
+
if [ -f $JETTY_PID ]
|
450
|
+
then
|
451
|
+
if running $JETTY_PID
|
452
|
+
then
|
453
|
+
echo "Already Running!!"
|
454
|
+
exit 1
|
455
|
+
else
|
456
|
+
# dead pid file - remove
|
457
|
+
rm -f $JETTY_PID
|
458
|
+
fi
|
459
|
+
fi
|
460
|
+
|
461
|
+
if [ x$JETTY_USER != x ]
|
462
|
+
then
|
463
|
+
touch $JETTY_PID
|
464
|
+
chown $JETTY_USER $JETTY_PID
|
465
|
+
su - $JETTY_USER -c "
|
466
|
+
$RUN_CMD &
|
467
|
+
PID=\$!
|
468
|
+
disown \$PID
|
469
|
+
echo \$PID > $JETTY_PID"
|
470
|
+
else
|
471
|
+
$RUN_CMD &
|
472
|
+
PID=$!
|
473
|
+
disown $PID
|
474
|
+
echo $PID > $JETTY_PID
|
475
|
+
fi
|
476
|
+
|
477
|
+
echo "STARTED Jetty `date`"
|
478
|
+
fi
|
479
|
+
|
480
|
+
;;
|
481
|
+
|
482
|
+
stop)
|
483
|
+
echo -n "Stopping Jetty: "
|
484
|
+
if [ "$START_STOP_DAEMON" = "1" ] && type start-stop-daemon > /dev/null 2>&1; then
|
485
|
+
start-stop-daemon -K -p $JETTY_PID -d $JETTY_HOME -a $JAVA -s HUP
|
486
|
+
sleep 1
|
487
|
+
if running $JETTY_PID
|
488
|
+
then
|
489
|
+
sleep 3
|
490
|
+
if running $JETTY_PID
|
491
|
+
then
|
492
|
+
sleep 30
|
493
|
+
if running $JETTY_PID
|
494
|
+
then
|
495
|
+
start-stop-daemon -K -p $JETTY_PID -d $JETTY_HOME -a $JAVA -s KILL
|
496
|
+
fi
|
497
|
+
fi
|
498
|
+
fi
|
499
|
+
|
500
|
+
rm -f $JETTY_PID
|
501
|
+
echo OK
|
502
|
+
else
|
503
|
+
PID=`cat $JETTY_PID 2>/dev/null`
|
504
|
+
TIMEOUT=30
|
505
|
+
while running $JETTY_PID && [ $TIMEOUT -gt 0 ]
|
506
|
+
do
|
507
|
+
kill $PID 2>/dev/null
|
508
|
+
sleep 1
|
509
|
+
let TIMEOUT=$TIMEOUT-1
|
510
|
+
done
|
511
|
+
|
512
|
+
[ $TIMEOUT -gt 0 ] || kill -9 $PID 2>/dev/null
|
513
|
+
|
514
|
+
rm -f $JETTY_PID
|
515
|
+
echo OK
|
516
|
+
fi
|
517
|
+
;;
|
518
|
+
|
519
|
+
restart)
|
520
|
+
JETTY_SH=$0
|
521
|
+
if [ ! -f $JETTY_SH ]; then
|
522
|
+
if [ ! -f $JETTY_HOME/bin/jetty.sh ]; then
|
523
|
+
echo "$JETTY_HOME/bin/jetty.sh does not exist."
|
524
|
+
exit 1
|
525
|
+
fi
|
526
|
+
JETTY_SH=$JETTY_HOME/bin/jetty.sh
|
527
|
+
fi
|
528
|
+
$JETTY_SH stop $*
|
529
|
+
sleep 5
|
530
|
+
$JETTY_SH start $*
|
531
|
+
;;
|
532
|
+
|
533
|
+
supervise)
|
534
|
+
#
|
535
|
+
# Under control of daemontools supervise monitor which
|
536
|
+
# handles restarts and shutdowns via the svc program.
|
537
|
+
#
|
538
|
+
exec $RUN_CMD
|
539
|
+
;;
|
540
|
+
|
541
|
+
run|demo)
|
542
|
+
echo "Running Jetty: "
|
543
|
+
|
544
|
+
if [ -f $JETTY_PID ]
|
545
|
+
then
|
546
|
+
if running $JETTY_PID
|
547
|
+
then
|
548
|
+
echo "Already Running!!"
|
549
|
+
exit 1
|
550
|
+
else
|
551
|
+
# dead pid file - remove
|
552
|
+
rm -f $JETTY_PID
|
553
|
+
fi
|
554
|
+
fi
|
555
|
+
|
556
|
+
exec $RUN_CMD
|
557
|
+
;;
|
558
|
+
|
559
|
+
check)
|
560
|
+
echo "Checking arguments to Jetty: "
|
561
|
+
echo "JETTY_HOME = $JETTY_HOME"
|
562
|
+
echo "JETTY_CONF = $JETTY_CONF"
|
563
|
+
echo "JETTY_RUN = $JETTY_RUN"
|
564
|
+
echo "JETTY_PID = $JETTY_PID"
|
565
|
+
echo "JETTY_PORT = $JETTY_PORT"
|
566
|
+
echo "JETTY_LOGS = $JETTY_LOGS"
|
567
|
+
echo "JAVA_OPTIONS = $JAVA_OPTIONS"
|
568
|
+
echo "JAVA = $JAVA"
|
569
|
+
echo "CLASSPATH = $CLASSPATH"
|
570
|
+
echo "RUN_CMD = $RUN_CMD"
|
571
|
+
echo
|
572
|
+
|
573
|
+
if [ -f $JETTY_RUN/jetty.pid ]
|
574
|
+
then
|
575
|
+
echo "Jetty running pid="`cat $JETTY_RUN/jetty.pid`
|
576
|
+
exit 0
|
577
|
+
fi
|
578
|
+
exit 1
|
579
|
+
;;
|
580
|
+
|
581
|
+
*)
|
582
|
+
usage
|
583
|
+
;;
|
584
|
+
esac
|
585
|
+
|
586
|
+
exit 0
|
587
|
+
|
588
|
+
|
589
|
+
|
@@ -8,7 +8,7 @@ namespace :rubber do
|
|
8
8
|
after "rubber:install_packages", "rubber:redis:custom_install"
|
9
9
|
|
10
10
|
task :custom_install, :roles => :redis do
|
11
|
-
custom_package('http://ftp.us.debian.org/debian/pool/main/r/redis/', 'redis-server', '1.
|
11
|
+
custom_package('http://ftp.us.debian.org/debian/pool/main/r/redis/', 'redis-server', '1.2.0-1', '! -x /usr/bin/redis-server')
|
12
12
|
end
|
13
13
|
|
14
14
|
desc "Stops the redis server"
|
data/lib/rubber/cloud/aws.rb
CHANGED
@@ -15,13 +15,18 @@ module Rubber
|
|
15
15
|
AWS::S3::Base.establish_connection!(:access_key_id => @aws_env.access_key, :secret_access_key => @aws_env.secret_access_key)
|
16
16
|
end
|
17
17
|
|
18
|
-
|
19
18
|
def create_instance(ami, ami_type, security_groups, availability_zone)
|
20
19
|
response = @ec2.run_instances(:image_id => ami, :key_name => @aws_env.key_name, :instance_type => ami_type, :security_group => security_groups, :availability_zone => availability_zone)
|
21
20
|
instance_id = response.instancesSet.item[0].instanceId
|
22
21
|
return instance_id
|
23
22
|
end
|
24
23
|
|
24
|
+
def create_spot_instance_request(spot_price, ami, ami_type, security_groups, availability_zone)
|
25
|
+
response = @ec2.request_spot_instances(:spot_price => spot_price, :image_id => ami, :key_name => @aws_env.key_name, :instance_type => ami_type, :security_group => security_groups, :availability_zone => availability_zone)
|
26
|
+
request_id = response.spotInstanceRequestSet.item[0].spotInstanceRequestId
|
27
|
+
return request_id
|
28
|
+
end
|
29
|
+
|
25
30
|
def describe_instances(instance_id=nil)
|
26
31
|
instances = []
|
27
32
|
opts = {}
|
@@ -37,6 +42,7 @@ module Rubber
|
|
37
42
|
instance[:internal_host] = item.privateDnsName
|
38
43
|
instance[:state] = item.instanceState.name
|
39
44
|
instance[:zone] = item.placement.availabilityZone
|
45
|
+
instance[:platform] = item.platform || 'linux'
|
40
46
|
instances << instance
|
41
47
|
end
|
42
48
|
end if response.reservationSet
|
@@ -271,6 +277,10 @@ module Rubber
|
|
271
277
|
end
|
272
278
|
end
|
273
279
|
|
280
|
+
def destroy_spot_instance_request(request_id)
|
281
|
+
@ec2.cancel_spot_instance_requests :spot_instance_request_id => request_id
|
282
|
+
end
|
283
|
+
|
274
284
|
def describe_load_balancers(name=nil)
|
275
285
|
lbs = []
|
276
286
|
opts = {}
|
@@ -300,6 +310,25 @@ module Rubber
|
|
300
310
|
return lbs
|
301
311
|
end
|
302
312
|
|
313
|
+
def describe_spot_instance_requests(request_id=nil)
|
314
|
+
requests = []
|
315
|
+
opts = {}
|
316
|
+
opts[:spot_instance_request_id] = request_id if request_id
|
317
|
+
response = @ec2.describe_spot_instance_requests(opts)
|
318
|
+
response.spotInstanceRequestSet.item.each do |item|
|
319
|
+
request = {}
|
320
|
+
request[:id] = item.spotInstanceRequestId
|
321
|
+
request[:spot_price] = item.spotPrice
|
322
|
+
request[:state] = item.state
|
323
|
+
request[:created_at] = item.createTime
|
324
|
+
request[:type] = item.launchSpecification.instanceType
|
325
|
+
request[:image_id] = item.launchSpecification.imageId
|
326
|
+
request[:instance_id] = item.instanceId
|
327
|
+
requests << request
|
328
|
+
end if response.spotInstanceRequestSet
|
329
|
+
return requests
|
330
|
+
end
|
331
|
+
|
303
332
|
end
|
304
333
|
|
305
334
|
end
|
data/lib/rubber/instance.rb
CHANGED
@@ -81,6 +81,8 @@ module Rubber
|
|
81
81
|
attr_accessor :external_host, :external_ip
|
82
82
|
attr_accessor :internal_host, :internal_ip
|
83
83
|
attr_accessor :static_ip, :volumes, :partitions
|
84
|
+
attr_accessor :spot_instance_request_id
|
85
|
+
attr_accessor :platform
|
84
86
|
|
85
87
|
def initialize(name, domain, roles, instance_id, security_group_list=[])
|
86
88
|
@name = name
|
@@ -97,6 +99,15 @@ module Rubber
|
|
97
99
|
def role_names()
|
98
100
|
roles.collect {|r| r.name}
|
99
101
|
end
|
102
|
+
|
103
|
+
def platform
|
104
|
+
# Deal with old instance configurations that don't have a platform value persisted.
|
105
|
+
@platform || 'linux'
|
106
|
+
end
|
107
|
+
|
108
|
+
def windows?
|
109
|
+
platform == 'windows'
|
110
|
+
end
|
100
111
|
end
|
101
112
|
|
102
113
|
# The configuration for a single role contained in the list
|
@@ -10,7 +10,13 @@ require 'rubber'
|
|
10
10
|
|
11
11
|
namespace :rubber do
|
12
12
|
|
13
|
-
#
|
13
|
+
# Disable connecting to any Windows instance.
|
14
|
+
alias :original_task :task
|
15
|
+
def task(name, options={}, &block)
|
16
|
+
original_task(name, options.merge(:except => { :platform => 'windows' }), &block)
|
17
|
+
end
|
18
|
+
|
19
|
+
# advise capistrano's task method so that tasks for non-existent roles don't
|
14
20
|
# fail when roles isn't defined due to using a FILTER for load_roles
|
15
21
|
# If you have a task you need to execute even when there are no
|
16
22
|
# roles, you have to use required_task instead of task - see rubber:create
|
@@ -19,7 +25,8 @@ namespace :rubber do
|
|
19
25
|
class << ns
|
20
26
|
alias :required_task :task
|
21
27
|
def task(name, options={}, &block)
|
22
|
-
|
28
|
+
# Disable connecting to any Windows instance.
|
29
|
+
required_task(name, options.merge(:except => { :platform => 'windows' })) do
|
23
30
|
# define empty roles for the case when a task has a role that we don't define anywhere
|
24
31
|
[*options[:roles]].each do |r|
|
25
32
|
roles[r] ||= []
|
@@ -73,7 +80,7 @@ namespace :rubber do
|
|
73
80
|
# define capistrano host => role mapping for all instances
|
74
81
|
rubber_instances.filtered.each do |ic|
|
75
82
|
ic.roles.each do |role|
|
76
|
-
opts = Rubber::Util::symbolize_keys(role.options)
|
83
|
+
opts = Rubber::Util::symbolize_keys(role.options).merge(:platform => ic.platform)
|
77
84
|
msg = "Auto role: #{role.name.to_sym} => #{ic.full_name}"
|
78
85
|
msg << ", #{opts.inspect}" if opts.inspect.size > 0
|
79
86
|
logger.info msg
|
@@ -10,6 +10,8 @@ namespace :rubber do
|
|
10
10
|
default_roles = env.instance_roles
|
11
11
|
r = get_env("ROLES", "Instance roles (e.g. web,app,db:primary=true)", true, default_roles)
|
12
12
|
|
13
|
+
create_spot_instance = ENV.delete("SPOT_INSTANCE") || env.cloud_providers[env.cloud_provider].spot_instance
|
14
|
+
|
13
15
|
if r == '*'
|
14
16
|
instance_roles = rubber_cfg.environment.known_roles
|
15
17
|
instance_roles = instance_roles.collect {|role| role == "db" ? "db:primary=true" : role }
|
@@ -33,7 +35,7 @@ namespace :rubber do
|
|
33
35
|
# Add in roles that the given set of roles depends on
|
34
36
|
ir = Rubber::Configuration::RoleItem.expand_role_dependencies(ir, get_role_dependencies)
|
35
37
|
|
36
|
-
create_instance(instance_alias, ir)
|
38
|
+
create_instance(instance_alias, ir, create_spot_instance)
|
37
39
|
end
|
38
40
|
|
39
41
|
desc <<-DESC
|
@@ -154,7 +156,7 @@ namespace :rubber do
|
|
154
156
|
|
155
157
|
# Creates a new ec2 instance with the given alias and roles
|
156
158
|
# Configures aliases (/etc/hosts) on local and remote machines
|
157
|
-
def create_instance(instance_alias, instance_roles)
|
159
|
+
def create_instance(instance_alias, instance_roles, create_spot_instance=false)
|
158
160
|
fatal "Instance already exists: #{instance_alias}" if rubber_instances[instance_alias]
|
159
161
|
|
160
162
|
role_names = instance_roles.collect{|x| x.name}
|
@@ -167,12 +169,45 @@ namespace :rubber do
|
|
167
169
|
ami = env.cloud_providers[env.cloud_provider].image_id
|
168
170
|
ami_type = env.cloud_providers[env.cloud_provider].image_type
|
169
171
|
availability_zone = env.availability_zone
|
170
|
-
|
171
|
-
|
172
|
+
|
173
|
+
if create_spot_instance
|
174
|
+
spot_price = env.cloud_providers[env.cloud_provider].spot_price.to_s
|
175
|
+
|
176
|
+
logger.info "Creating spot instance request for instance #{ami}/#{ami_type}/#{security_groups.join(',') rescue 'Default'}/#{availability_zone || 'Default'}"
|
177
|
+
request_id = cloud.create_spot_instance_request(spot_price, ami, ami_type, security_groups, availability_zone)
|
178
|
+
|
179
|
+
print "Waiting for spot instance request to be fulfilled"
|
180
|
+
max_wait_time = env.cloud_providers[env.cloud_provider].spot_instance_request_timeout || (1.0 / 0) # Use the specified timeout value or default to infinite.
|
181
|
+
instance_id = nil
|
182
|
+
while instance_id.nil? do
|
183
|
+
print "."
|
184
|
+
sleep 2
|
185
|
+
max_wait_time -= 2
|
186
|
+
|
187
|
+
request = cloud.describe_spot_instance_requests(request_id).first
|
188
|
+
instance_id = request[:instance_id]
|
189
|
+
|
190
|
+
if max_wait_time < 0 && instance_id.nil?
|
191
|
+
cloud.destroy_spot_instance_request(request[:id])
|
192
|
+
|
193
|
+
print "\n"
|
194
|
+
print "Failed to fulfill spot instance in the time specified. Falling back to on-demand instance creation."
|
195
|
+
break
|
196
|
+
end
|
197
|
+
end
|
198
|
+
|
199
|
+
print "\n"
|
200
|
+
end
|
201
|
+
|
202
|
+
if !create_spot_instance || (create_spot_instance && max_wait_time < 0)
|
203
|
+
logger.info "Creating instance #{ami}/#{ami_type}/#{security_groups.join(',') rescue 'Default'}/#{availability_zone || 'Default'}"
|
204
|
+
instance_id = cloud.create_instance(ami, ami_type, security_groups, availability_zone)
|
205
|
+
end
|
172
206
|
|
173
207
|
logger.info "Instance #{instance_id} created"
|
174
208
|
|
175
209
|
instance_item = Rubber::Configuration::InstanceItem.new(instance_alias, env.domain, instance_roles, instance_id, security_groups)
|
210
|
+
instance_item.spot_instance_request_id = request_id if create_spot_instance
|
176
211
|
rubber_instances.add(instance_item)
|
177
212
|
rubber_instances.save()
|
178
213
|
|
@@ -190,6 +225,7 @@ namespace :rubber do
|
|
190
225
|
instance_item.external_ip = instance[:external_ip]
|
191
226
|
instance_item.internal_host = instance[:internal_host]
|
192
227
|
instance_item.zone = instance[:zone]
|
228
|
+
instance_item.platform = instance[:platform]
|
193
229
|
rubber_instances.save()
|
194
230
|
|
195
231
|
# setup amazon elastic ips if configured to do so
|
@@ -206,7 +242,14 @@ namespace :rubber do
|
|
206
242
|
# so that we can update all aliases
|
207
243
|
|
208
244
|
task :_get_ip, :hosts => instance_item.external_ip do
|
209
|
-
|
245
|
+
# There's no good way to get the internal IP for a Windows host, so just set it to the external
|
246
|
+
# and let the router handle mapping to the internal network.
|
247
|
+
if instance_item.windows?
|
248
|
+
instance_item.internal_ip = instance_item.external_ip
|
249
|
+
else
|
250
|
+
instance_item.internal_ip = capture(print_ip_command).strip
|
251
|
+
end
|
252
|
+
|
210
253
|
rubber_instances.save()
|
211
254
|
end
|
212
255
|
|
@@ -0,0 +1,23 @@
|
|
1
|
+
namespace :rubber do
|
2
|
+
|
3
|
+
desc "Describes all your spot instance requests"
|
4
|
+
required_task :describe_spot_instance_requests do
|
5
|
+
requests = cloud.describe_spot_instance_requests()
|
6
|
+
requests.each do |request|
|
7
|
+
logger.info "======================"
|
8
|
+
logger.info "ID: #{request[:id]}"
|
9
|
+
logger.info "Created at: #{request[:created_at]}"
|
10
|
+
logger.info "Max. price: $#{request[:spot_price]}"
|
11
|
+
logger.info "State: #{request[:state]}"
|
12
|
+
logger.info "Instance type: #{request[:type]}"
|
13
|
+
logger.info "AMI: #{request[:image_id]}"
|
14
|
+
end
|
15
|
+
end
|
16
|
+
|
17
|
+
desc "Cancel the spot instances request for the given id"
|
18
|
+
required_task :cancel_spot_instances_request do
|
19
|
+
request_id = get_env('SPOT_INSTANCE_REQUEST_ID', 'The id of the spot instances request to cancel', true)
|
20
|
+
cloud.destroy_spot_instance_request(request_id)
|
21
|
+
end
|
22
|
+
|
23
|
+
end
|
@@ -80,6 +80,89 @@ namespace :rubber do
|
|
80
80
|
destroy_static_ip(ip)
|
81
81
|
end
|
82
82
|
|
83
|
+
desc 'Move a static IP address from DONOR machine to RECEIVER machine.'
|
84
|
+
task :move_static_ip do
|
85
|
+
donor_alias = get_env 'DONOR', 'Instance alias to get the IP from (e.g., web01)', true
|
86
|
+
receiver_alias = get_env 'RECEIVER', 'Instance alias to assign the IP to (e.g., web02)', true
|
87
|
+
|
88
|
+
# Sanity checks
|
89
|
+
donor = rubber_instances[donor_alias]
|
90
|
+
fatal "Instance does not exist: #{donor_alias}" unless donor
|
91
|
+
|
92
|
+
static_ip = donor.static_ip
|
93
|
+
fatal 'No static IP address to move exists' unless static_ip && static_ip != ''
|
94
|
+
|
95
|
+
receiver = rubber_instances[receiver_alias]
|
96
|
+
fatal "Instance does not exist: #{receiver_alias}" unless receiver
|
97
|
+
|
98
|
+
# Temporary removal of the instances.
|
99
|
+
old_donor = rubber_instances.remove(donor_alias)
|
100
|
+
old_receiver = rubber_instances.remove(receiver_alias)
|
101
|
+
|
102
|
+
rubber_instances.save
|
103
|
+
|
104
|
+
# Getting rid of alias->IP mappings and SSH's known_hosts records.
|
105
|
+
load_roles
|
106
|
+
setup_aliases
|
107
|
+
cleanup_known_hosts(old_donor)
|
108
|
+
cleanup_known_hosts(old_receiver)
|
109
|
+
|
110
|
+
# Detachment of EIPA.
|
111
|
+
success = cloud.detach_static_ip(static_ip)
|
112
|
+
fatal "Failed to detach static IP address #{static_ip}" unless success
|
113
|
+
rubber_instances.artifacts['static_ips'].delete(old_donor.name)
|
114
|
+
|
115
|
+
rubber_instances.save
|
116
|
+
|
117
|
+
# Attachment of EIPA.
|
118
|
+
success = cloud.attach_static_ip(static_ip, old_receiver.instance_id)
|
119
|
+
fatal "Failed to associate static IP address #{static_ip}" unless success
|
120
|
+
|
121
|
+
print "Waiting for #{receiver_alias} to get the address"
|
122
|
+
while true do
|
123
|
+
print '.'
|
124
|
+
sleep 3
|
125
|
+
instance = cloud.describe_instances(old_receiver.instance_id).first
|
126
|
+
break if instance[:external_ip] == static_ip
|
127
|
+
end
|
128
|
+
|
129
|
+
# Partial cleanup of static IP records.
|
130
|
+
rubber_instances.artifacts['static_ips'][old_receiver.name] = static_ip
|
131
|
+
|
132
|
+
rubber_instances.save
|
133
|
+
|
134
|
+
# First half of the sync.
|
135
|
+
new_receiver = Rubber::Configuration::InstanceItem.new(old_receiver.name,
|
136
|
+
old_receiver.domain, old_receiver.roles, old_receiver.instance_id,
|
137
|
+
old_receiver.security_groups)
|
138
|
+
new_receiver.static_ip = static_ip
|
139
|
+
rubber_instances.add(new_receiver)
|
140
|
+
|
141
|
+
rubber_instances.save
|
142
|
+
|
143
|
+
refresh_instance(receiver_alias)
|
144
|
+
|
145
|
+
print "Waiting for #{donor_alias} to get a new address"
|
146
|
+
while true do
|
147
|
+
print '.'
|
148
|
+
sleep 3
|
149
|
+
instance = cloud.describe_instances(old_donor.instance_id).first
|
150
|
+
break if instance[:external_ip] && instance[:external_ip] != ''
|
151
|
+
end
|
152
|
+
|
153
|
+
# Second half of the sync.
|
154
|
+
new_donor = Rubber::Configuration::InstanceItem.new(old_donor.name,
|
155
|
+
old_donor.domain, old_donor.roles, old_donor.instance_id,
|
156
|
+
old_donor.security_groups)
|
157
|
+
rubber_instances.add(new_donor)
|
158
|
+
|
159
|
+
rubber_instances.save
|
160
|
+
|
161
|
+
refresh_instance(donor_alias)
|
162
|
+
|
163
|
+
logger.info "Run 'cap rubber:describe_static_ips' to check the allocated ones"
|
164
|
+
end
|
165
|
+
|
83
166
|
def allocate_static_ip()
|
84
167
|
ip = cloud.create_static_ip()
|
85
168
|
fatal "Failed to allocate static ip" if ip.nil?
|
data/test/environment_test.rb
CHANGED
data/test/generator_test.rb
CHANGED
data/test/instance_test.rb
CHANGED
data/test/util_test.rb
CHANGED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: rubber
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.
|
4
|
+
version: 1.2.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Matt Conway
|
@@ -9,7 +9,7 @@ autorequire:
|
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
11
|
|
12
|
-
date:
|
12
|
+
date: 2010-01-22 00:00:00 -05:00
|
13
13
|
default_executable: vulcanize
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
@@ -30,7 +30,7 @@ dependencies:
|
|
30
30
|
requirements:
|
31
31
|
- - ">="
|
32
32
|
- !ruby/object:Gem::Version
|
33
|
-
version: 0.
|
33
|
+
version: 0.9.0
|
34
34
|
version:
|
35
35
|
- !ruby/object:Gem::Dependency
|
36
36
|
name: aws-s3
|
@@ -80,6 +80,7 @@ extensions: []
|
|
80
80
|
|
81
81
|
extra_rdoc_files:
|
82
82
|
- README
|
83
|
+
- TODO
|
83
84
|
files:
|
84
85
|
- CHANGELOG
|
85
86
|
- COPYING
|
@@ -138,6 +139,7 @@ files:
|
|
138
139
|
- generators/vulcanize/templates/haproxy/config/rubber/rubber-haproxy.yml
|
139
140
|
- generators/vulcanize/templates/haproxy/templates.yml
|
140
141
|
- generators/vulcanize/templates/jetty/config/rubber/deploy-jetty.rb
|
142
|
+
- generators/vulcanize/templates/jetty/config/rubber/role/jetty/jetty.sh
|
141
143
|
- generators/vulcanize/templates/jetty/config/rubber/role/jetty/jetty.xml
|
142
144
|
- generators/vulcanize/templates/jetty/config/rubber/role/jetty/monit-jetty.conf
|
143
145
|
- generators/vulcanize/templates/jetty/config/rubber/rubber-jetty.yml
|
@@ -253,6 +255,7 @@ files:
|
|
253
255
|
- lib/rubber/recipes/rubber/load_balancers.rb
|
254
256
|
- lib/rubber/recipes/rubber/security_groups.rb
|
255
257
|
- lib/rubber/recipes/rubber/setup.rb
|
258
|
+
- lib/rubber/recipes/rubber/spot_requests.rb
|
256
259
|
- lib/rubber/recipes/rubber/static_ips.rb
|
257
260
|
- lib/rubber/recipes/rubber/utils.rb
|
258
261
|
- lib/rubber/recipes/rubber/volumes.rb
|