syncwrap 1.4.0 → 1.5.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/History.rdoc +10 -0
- data/README.rdoc +6 -4
- data/Rakefile +2 -0
- data/lib/syncwrap/base.rb +2 -2
- data/lib/syncwrap/common.rb +11 -1
- data/lib/syncwrap/distro.rb +37 -9
- data/lib/syncwrap/ec2.rb +1 -1
- data/lib/syncwrap/geminabox.rb +1 -1
- data/lib/syncwrap/hashdot.rb +1 -1
- data/lib/syncwrap/iyyov.rb +1 -1
- data/lib/syncwrap/java.rb +1 -1
- data/lib/syncwrap/jruby.rb +1 -1
- data/lib/syncwrap/postgresql.rb +1 -1
- data/lib/syncwrap/qpid.rb +1 -1
- data/lib/syncwrap/remote_task.rb +89 -6
- data/lib/syncwrap/rhel.rb +17 -18
- data/lib/syncwrap/ubuntu.rb +40 -11
- data/lib/syncwrap/user_run.rb +1 -1
- data/lib/syncwrap.rb +1 -1
- data/test/test_syncwrap.rb +3 -1
- metadata +43 -23
data/History.rdoc
CHANGED
@@ -1,3 +1,13 @@
|
|
1
|
+
=== 1.5.0 (2013-4-3)
|
2
|
+
* Extended shell_escape_command for sudo sh command.
|
3
|
+
* New SyncWrap::AWS for EC2 instance creation, mdraid over EBS
|
4
|
+
volumes, and Route53 DNS updates.
|
5
|
+
* Add *_s command format-only variants of the distro commands for
|
6
|
+
increased flexibility usage and ability to reduce the number of
|
7
|
+
shells/round-trips.
|
8
|
+
* Add :minimal flag support to Ubuntu.dist_install*
|
9
|
+
* Add auto-once, per-host `apt-get update` to Ubuntu.dist_install*
|
10
|
+
|
1
11
|
=== 1.4.0 (2012-10-16)
|
2
12
|
* PostgreSQL configuration updates for 9.2.x (RHEL only)
|
3
13
|
* Add support for build, deploy, configure of Apache Qpid for which
|
data/README.rdoc
CHANGED
@@ -8,8 +8,7 @@ A generalized and modular set of provisioning and deployment routines.
|
|
8
8
|
The Rake-centric Vlad and not-actually-Rake Capistrano both suffer
|
9
9
|
from lack of objects, e.g. the ability to customize and mix-in
|
10
10
|
behavior. SyncWrap offers an Object/Module system that can be used
|
11
|
-
with either.
|
12
|
-
be integrated with Capistrano, or others.
|
11
|
+
with either.
|
13
12
|
|
14
13
|
== Features
|
15
14
|
|
@@ -30,10 +29,13 @@ be integrated with Capistrano, or others.
|
|
30
29
|
|
31
30
|
Currently the following provisions are provided:
|
32
31
|
|
33
|
-
*
|
32
|
+
* SyncWrap::AWS for EC2 instances, mdraid over EBS volumes, and
|
33
|
+
Route53 DNS updates.
|
34
34
|
|
35
35
|
* SyncWrap::PostgreSQL
|
36
36
|
|
37
|
+
* Complete SyncWrap::Java, SyncWrap::Hashdot, SyncWrap::JRuby stack
|
38
|
+
|
37
39
|
* SyncWrap::Iyyov job scheduler and process monitor
|
38
40
|
|
39
41
|
* SyncWrap::UserRun for setup of a run user for deployed daemons, jobs
|
@@ -77,7 +79,7 @@ For example, in your Rakefile with the SyncWrap::RemoteTask adapter:
|
|
77
79
|
|
78
80
|
== License
|
79
81
|
|
80
|
-
Copyright (c) 2011-
|
82
|
+
Copyright (c) 2011-2013 David Kellum
|
81
83
|
|
82
84
|
Licensed under the Apache License, Version 2.0 (the "License"); you
|
83
85
|
may not use this file except in compliance with the License. You
|
data/Rakefile
CHANGED
@@ -12,6 +12,7 @@ require 'syncwrap/hashdot'
|
|
12
12
|
require 'syncwrap/jruby'
|
13
13
|
require 'syncwrap/iyyov'
|
14
14
|
require 'syncwrap/rhel'
|
15
|
+
require 'syncwrap/aws'
|
15
16
|
require 'syncwrap/postgresql'
|
16
17
|
require 'syncwrap/remote_task'
|
17
18
|
require 'syncwrap/geminabox'
|
@@ -22,6 +23,7 @@ class SyncWrapper
|
|
22
23
|
include SyncWrap::JRuby
|
23
24
|
include SyncWrap::Iyyov
|
24
25
|
include SyncWrap::RHEL
|
26
|
+
include SyncWrap::AWS
|
25
27
|
include SyncWrap::PostgreSQL
|
26
28
|
include SyncWrap::Geminabox
|
27
29
|
|
data/lib/syncwrap/base.rb
CHANGED
@@ -1,5 +1,5 @@
|
|
1
1
|
#--
|
2
|
-
# Copyright (c) 2011-
|
2
|
+
# Copyright (c) 2011-2013 David Kellum
|
3
3
|
#
|
4
4
|
# Licensed under the Apache License, Version 2.0 (the "License"); you
|
5
5
|
# may not use this file except in compliance with the License. You may
|
@@ -15,5 +15,5 @@
|
|
15
15
|
#++
|
16
16
|
|
17
17
|
module SyncWrap
|
18
|
-
VERSION='1.
|
18
|
+
VERSION='1.5.0'
|
19
19
|
end
|
data/lib/syncwrap/common.rb
CHANGED
@@ -1,5 +1,5 @@
|
|
1
1
|
#--
|
2
|
-
# Copyright (c) 2011-
|
2
|
+
# Copyright (c) 2011-2013 David Kellum
|
3
3
|
#
|
4
4
|
# Licensed under the Apache License, Version 2.0 (the "License"); you
|
5
5
|
# may not use this file except in compliance with the License. You may
|
@@ -148,4 +148,14 @@ module SyncWrap::Common
|
|
148
148
|
raise "Include a remoting-specific module, e.g. RemoteTask"
|
149
149
|
end
|
150
150
|
|
151
|
+
def deep_merge_hashes( h1, h2 )
|
152
|
+
h1.merge( h2 ) do |key, v1, v2|
|
153
|
+
if v1.is_a?( Hash ) && v2.is_a?( Hash )
|
154
|
+
deep_merge_hashes( v1, v2 )
|
155
|
+
else
|
156
|
+
v2
|
157
|
+
end
|
158
|
+
end
|
159
|
+
end
|
160
|
+
|
151
161
|
end
|
data/lib/syncwrap/distro.rb
CHANGED
@@ -1,5 +1,5 @@
|
|
1
1
|
#--
|
2
|
-
# Copyright (c) 2011-
|
2
|
+
# Copyright (c) 2011-2013 David Kellum
|
3
3
|
#
|
4
4
|
# Licensed under the Apache License, Version 2.0 (the "License"); you
|
5
5
|
# may not use this file except in compliance with the License. You may
|
@@ -30,34 +30,62 @@ module SyncWrap::Distro
|
|
30
30
|
end
|
31
31
|
|
32
32
|
# Map internal/common names and return distro-specific names. If a
|
33
|
-
# mapping does not exist, assume internal name is a common name
|
34
|
-
# return.
|
33
|
+
# mapping does not exist, assume internal name is a common name.
|
35
34
|
def dist_map_packages( *pkgs )
|
36
35
|
pkgs.flatten.compact.map { |pkg| packages_map[ pkg ] || pkg }
|
37
36
|
end
|
38
37
|
|
39
38
|
# Install the specified packages using distro-specific mapped
|
40
|
-
# package names and command.
|
41
|
-
|
39
|
+
# package names and command via dist_install_s. The last argument is
|
40
|
+
# interpreted as options if it is a Hash.
|
41
|
+
# === Options
|
42
|
+
# :succeed:: Always succeed (useful for local rpms which might
|
43
|
+
# already be installed.
|
44
|
+
# :minimal:: Avoid additional "optional" packages when possible.
|
45
|
+
def dist_install( *args )
|
46
|
+
sudo( dist_install_s( *args ) )
|
47
|
+
end
|
48
|
+
|
49
|
+
# Generate command to install the specified packages using
|
50
|
+
# distro-specific mapped package names. The last argument is
|
51
|
+
# interpreted as options if it is a Hash.
|
52
|
+
def dist_install_s( *args )
|
42
53
|
raise "Include a distro-specific module, e.g. Ubuntu, RHEL"
|
43
54
|
end
|
44
55
|
|
45
56
|
# Uninstall specified packages using distro-specific mapped
|
46
57
|
# package names and command.
|
47
|
-
def dist_uninstall( *
|
58
|
+
def dist_uninstall( *args )
|
59
|
+
sudo( dist_uninstall_s( *args ) )
|
60
|
+
end
|
61
|
+
|
62
|
+
# Return command to uninstall specified packages using
|
63
|
+
# distro-specific mapped package names.
|
64
|
+
def dist_uninstall_s( *args )
|
48
65
|
raise "Include a distro-specific module, e.g. Ubuntu, RHEL"
|
49
66
|
end
|
50
67
|
|
51
68
|
# Install a System V style init.d script (already placed at remote
|
52
69
|
# /etc/init.d/<name>) via distro-specific command
|
53
70
|
def dist_install_init_service( name )
|
71
|
+
sudo( dist_install_init_service_s( name ) )
|
72
|
+
end
|
73
|
+
|
74
|
+
# Return command to install a System V style init.d script (already
|
75
|
+
# placed at remote /etc/init.d/<name>).
|
76
|
+
def dist_install_init_service_s( name )
|
54
77
|
raise "Include a distro-specific module, e.g. Ubuntu, RHEL"
|
55
78
|
end
|
56
79
|
|
57
|
-
#
|
58
|
-
# typically supporting 'start', 'stop', 'restart',
|
59
|
-
# etc.
|
80
|
+
# Run via sudo, the System V style, distro specific `service`
|
81
|
+
# command, typically supporting 'start', 'stop', 'restart',
|
82
|
+
# 'status', etc. arguments.
|
60
83
|
def dist_service( *args )
|
84
|
+
sudo( dist_service_s( *args ) )
|
85
|
+
end
|
86
|
+
|
87
|
+
# Return the System V style, distro specific `service` command.
|
88
|
+
def dist_service_s( *args )
|
61
89
|
raise "Include a distro-specific module, e.g. Ubuntu, RHEL"
|
62
90
|
end
|
63
91
|
|
data/lib/syncwrap/ec2.rb
CHANGED
data/lib/syncwrap/geminabox.rb
CHANGED
data/lib/syncwrap/hashdot.rb
CHANGED
data/lib/syncwrap/iyyov.rb
CHANGED
data/lib/syncwrap/java.rb
CHANGED
data/lib/syncwrap/jruby.rb
CHANGED
data/lib/syncwrap/postgresql.rb
CHANGED
data/lib/syncwrap/qpid.rb
CHANGED
data/lib/syncwrap/remote_task.rb
CHANGED
@@ -1,5 +1,5 @@
|
|
1
1
|
#--
|
2
|
-
# Copyright (c) 2011-
|
2
|
+
# Copyright (c) 2011-2013 David Kellum
|
3
3
|
#
|
4
4
|
# Licensed under the Apache License, Version 2.0 (the "License"); you
|
5
5
|
# may not use this file except in compliance with the License. You may
|
@@ -25,12 +25,24 @@ module SyncWrap::RemoteTask
|
|
25
25
|
include SyncWrap::Common
|
26
26
|
include Rake::DSL
|
27
27
|
|
28
|
+
# Array of zero to many host_names (typically short) that were
|
29
|
+
# extracted from the HOSTS environment variable if set.
|
30
|
+
attr_reader :hosts
|
31
|
+
|
32
|
+
# A common domain name for all hosts, used to make host_long_name if
|
33
|
+
# specified (default: nil)
|
34
|
+
attr_accessor :common_domain
|
35
|
+
|
28
36
|
def initialize
|
37
|
+
@common_domain = nil
|
38
|
+
interpret_hosts_var
|
29
39
|
super
|
30
40
|
|
31
41
|
# Defaults:
|
32
42
|
set( :sudo_flags, %w[ -H ] )
|
33
43
|
set( :rsync_flags, %w[ -rlpcb -ii ] )
|
44
|
+
|
45
|
+
load_hosts_from_aws_instances if defined? aws_instances
|
34
46
|
end
|
35
47
|
|
36
48
|
# Implements SyncWrap::Common#run
|
@@ -41,7 +53,6 @@ module SyncWrap::RemoteTask
|
|
41
53
|
|
42
54
|
args = cleanup_arg_lines( args, exit_multi )
|
43
55
|
|
44
|
-
#FIXME: Should cleanup multi-line commands
|
45
56
|
remote_task_current.run( *args )
|
46
57
|
end
|
47
58
|
|
@@ -57,7 +68,7 @@ module SyncWrap::RemoteTask
|
|
57
68
|
unless opts[ :shell ] == false
|
58
69
|
exit_multi = opts[ :error ].nil? || opts[ :error ] == :exit
|
59
70
|
cmd = cleanup_arg_lines( args, exit_multi )
|
60
|
-
cmd = cmd.join( ' ' )
|
71
|
+
cmd = shell_escape_cmd( cmd.join( ' ' ) )
|
61
72
|
cmd = "sh -c \"#{cmd}\""
|
62
73
|
else
|
63
74
|
cmd = cleanup_arg_lines( args, false )
|
@@ -71,10 +82,19 @@ module SyncWrap::RemoteTask
|
|
71
82
|
remote_task_current.rsync( *args )
|
72
83
|
end
|
73
84
|
|
85
|
+
# Return the target host name of the currently executing RemoteTask.
|
86
|
+
# Raises a StandardError if executed out of that context.
|
74
87
|
def target_host
|
75
88
|
remote_task_current.target_host
|
76
89
|
end
|
77
90
|
|
91
|
+
# Return true if the current target_host or specified host is part
|
92
|
+
# of the specified role.
|
93
|
+
def host_in_role?( role, host = target_host )
|
94
|
+
role_hosts = Rake::RemoteTask.roles[ role ]
|
95
|
+
role_hosts && !!( role_hosts[ host ] )
|
96
|
+
end
|
97
|
+
|
78
98
|
# Implements Common#exec_conditional
|
79
99
|
def exec_conditional
|
80
100
|
yield
|
@@ -94,6 +114,10 @@ module SyncWrap::RemoteTask
|
|
94
114
|
end
|
95
115
|
end
|
96
116
|
|
117
|
+
def shell_escape_cmd( cmd )
|
118
|
+
cmd.gsub( /["$`\\]/ ) { |c| '\\' + c }
|
119
|
+
end
|
120
|
+
|
97
121
|
def remote_task( name, *args, &block )
|
98
122
|
Rake::RemoteTask.remote_task( name, *args, &block )
|
99
123
|
end
|
@@ -102,15 +126,74 @@ module SyncWrap::RemoteTask
|
|
102
126
|
Rake::RemoteTask.set( *args )
|
103
127
|
end
|
104
128
|
|
129
|
+
def interpret_hosts_var
|
130
|
+
hvar, ENV[ 'HOSTS' ] = ENV[ 'HOSTS' ], nil
|
131
|
+
@hosts = (hvar || '').strip.split( /\s+/ )
|
132
|
+
@host_pattern = if @hosts.empty?
|
133
|
+
// #match all if none specified.
|
134
|
+
else
|
135
|
+
Regexp.new( '^((' + @hosts.join( ')|(' ) + '))$' )
|
136
|
+
end
|
137
|
+
end
|
138
|
+
|
139
|
+
# Forward to Rake::RemoteTask.host using the host_long_name, but
|
140
|
+
# only if the specified host_name matches any host_pattern. The :all
|
141
|
+
# role is automatically included for all hosts. Note this need not
|
142
|
+
# be manually provided int the Rakefile if aws_instances is provided
|
143
|
+
# instead.
|
105
144
|
def host( host_name, *roles )
|
106
|
-
|
145
|
+
if host_name =~ @host_pattern
|
146
|
+
Rake::RemoteTask.host( host_long_name( host_name ), :all, *roles )
|
147
|
+
end
|
148
|
+
end
|
149
|
+
|
150
|
+
# Define a RemoteTask host from an inst hash as defined by the AWS
|
151
|
+
# module. Override to change how instances are mapped to RemoteTask, host By
|
152
|
+
# default, using host_long_name( inst[:name] )
|
153
|
+
def host_from_instance( inst )
|
154
|
+
host( inst[:name], *inst[:roles] )
|
155
|
+
end
|
156
|
+
|
157
|
+
# Calls host_from_instance for all aws_instances.
|
158
|
+
def load_hosts_from_aws_instances
|
159
|
+
aws_instances.each do |inst|
|
160
|
+
host_from_instance( inst )
|
161
|
+
end
|
107
162
|
end
|
108
163
|
|
109
|
-
|
110
|
-
|
164
|
+
# Speculative override from AWS to automaticly set a host when added.
|
165
|
+
# Will fail if used without AWS module as super receiver.
|
166
|
+
def aws_instance_added( inst )
|
167
|
+
super
|
168
|
+
host_from_instance( inst )
|
169
|
+
end
|
170
|
+
|
171
|
+
# Forward to Rake::RemoteTask.role using the host_long_name, but only if
|
172
|
+
# the specified host_name matches any host_pattern.
|
173
|
+
def role( role_name, host_name = nil, args = {} )
|
174
|
+
if host_name =~ @host_pattern
|
175
|
+
Rake::RemoteTask.role( role_name, host_long_name( host_name ), args )
|
176
|
+
end
|
111
177
|
end
|
112
178
|
|
113
179
|
def remote_task_current
|
114
180
|
Thread.current[ :task ] or raise "Not running from a RemoteTask"
|
115
181
|
end
|
182
|
+
|
183
|
+
# Return a long name for the specified host_name (which may be
|
184
|
+
# short). This implementation adds common_domain if
|
185
|
+
# specified. Otherwise host_name is returned unmodified.
|
186
|
+
def host_long_name( host_name )
|
187
|
+
if common_domain
|
188
|
+
"#{host_name}.#{common_domain}"
|
189
|
+
else
|
190
|
+
host_name
|
191
|
+
end
|
192
|
+
end
|
193
|
+
|
194
|
+
# Return a short name for the specified host_name (which may be long).
|
195
|
+
def host_short_name( host_name )
|
196
|
+
( host_name =~ /^([a-z0-9\-]+)/ ) && $1
|
197
|
+
end
|
198
|
+
|
116
199
|
end
|
data/lib/syncwrap/rhel.rb
CHANGED
@@ -1,5 +1,5 @@
|
|
1
1
|
#--
|
2
|
-
# Copyright (c) 2011-
|
2
|
+
# Copyright (c) 2011-2013 David Kellum
|
3
3
|
#
|
4
4
|
# Licensed under the Apache License, Version 2.0 (the "License"); you
|
5
5
|
# may not use this file except in compliance with the License. You may
|
@@ -29,40 +29,39 @@ module SyncWrap::RHEL
|
|
29
29
|
'postgresql' => 'postgresql-server' )
|
30
30
|
end
|
31
31
|
|
32
|
-
#
|
33
|
-
# it is a Hash.
|
32
|
+
# Generate command to install packages. The last argument is
|
33
|
+
# interpreted as a options if it is a Hash.
|
34
34
|
# === Options
|
35
35
|
# :succeed:: Always succeed (useful for local rpms which might
|
36
36
|
# already be installed.
|
37
|
-
def
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
opts = pkgs.pop
|
37
|
+
def dist_install_s( *args )
|
38
|
+
if args.last.is_a?( Hash )
|
39
|
+
args = args.dup
|
40
|
+
opts = args.pop
|
42
41
|
else
|
43
42
|
opts = {}
|
44
43
|
end
|
45
44
|
|
46
|
-
|
45
|
+
args = dist_map_packages( args )
|
47
46
|
|
48
47
|
if opts[ :succeed ]
|
49
|
-
|
48
|
+
"yum install -q -y #{args.join ' '} || true"
|
50
49
|
else
|
51
|
-
|
50
|
+
"yum install -q -y #{args.join ' '}"
|
52
51
|
end
|
53
52
|
end
|
54
53
|
|
55
|
-
def
|
56
|
-
|
57
|
-
|
54
|
+
def dist_uninstall_s( *args )
|
55
|
+
args = dist_map_packages( args )
|
56
|
+
"yum remove -q -y #{args.join ' '}"
|
58
57
|
end
|
59
58
|
|
60
|
-
def
|
61
|
-
|
59
|
+
def dist_install_init_service_s( name )
|
60
|
+
"/sbin/chkconfig --add #{name}"
|
62
61
|
end
|
63
62
|
|
64
|
-
def
|
65
|
-
|
63
|
+
def dist_service_s( *args )
|
64
|
+
"/sbin/service #{args.join ' '}"
|
66
65
|
end
|
67
66
|
|
68
67
|
end
|
data/lib/syncwrap/ubuntu.rb
CHANGED
@@ -1,5 +1,5 @@
|
|
1
1
|
#--
|
2
|
-
# Copyright (c) 2011-
|
2
|
+
# Copyright (c) 2011-2013 David Kellum
|
3
3
|
#
|
4
4
|
# Licensed under the Apache License, Version 2.0 (the "License"); you
|
5
5
|
# may not use this file except in compliance with the License. You may
|
@@ -15,6 +15,7 @@
|
|
15
15
|
#++
|
16
16
|
|
17
17
|
require 'syncwrap/distro'
|
18
|
+
require 'thread'
|
18
19
|
|
19
20
|
# Customizations for Ubuntu and possibly other Debian/apt packaged
|
20
21
|
# derivatives. Specific distros/versions may further specialize.
|
@@ -22,28 +23,56 @@ module SyncWrap::Ubuntu
|
|
22
23
|
include SyncWrap::Distro
|
23
24
|
|
24
25
|
def initialize
|
26
|
+
@apt_update_state_lock = Mutex.new
|
27
|
+
@apt_update_state = {}
|
28
|
+
|
25
29
|
super
|
26
30
|
|
27
31
|
packages_map.merge!( 'apr' => 'libapr1',
|
28
32
|
'apr-devel' => 'libapr1-dev' )
|
29
33
|
end
|
30
34
|
|
31
|
-
|
32
|
-
|
33
|
-
|
35
|
+
# Generate the apt-get command to install packages. The first time
|
36
|
+
# this is applied to any given host, an "apt-get update" is issued
|
37
|
+
# as well. The last argument is interpreted as a options if it is a
|
38
|
+
# Hash.
|
39
|
+
# === Options
|
40
|
+
# :minimal:: Eqv to --no-install-recommends
|
41
|
+
def dist_install_s( *args )
|
42
|
+
args = args.dup
|
43
|
+
if args.last.is_a?( Hash )
|
44
|
+
opts = args.pop
|
45
|
+
else
|
46
|
+
opts = {}
|
47
|
+
end
|
48
|
+
|
49
|
+
commands = []
|
50
|
+
|
51
|
+
@apt_update_state_lock.synchronize do
|
52
|
+
unless @apt_update_state[ target_host ]
|
53
|
+
commands << "apt-get -yq update"
|
54
|
+
@apt_update_state[ target_host ] = true
|
55
|
+
end
|
56
|
+
end
|
57
|
+
|
58
|
+
args = dist_map_packages( args )
|
59
|
+
args.unshift "--no-install-recommends" if opts[ :minimal ]
|
60
|
+
commands << "apt-get -yq install #{args.join ' '}"
|
61
|
+
|
62
|
+
commands.join( "\n" )
|
34
63
|
end
|
35
64
|
|
36
|
-
def
|
37
|
-
|
38
|
-
|
65
|
+
def dist_uninstall_s( *args )
|
66
|
+
args = dist_map_packages( args )
|
67
|
+
"aptitude -yq purge #{args.join ' '}"
|
39
68
|
end
|
40
69
|
|
41
|
-
def
|
42
|
-
|
70
|
+
def dist_install_init_service_s( name )
|
71
|
+
"/usr/sbin/update-rc.d #{name} defaults"
|
43
72
|
end
|
44
73
|
|
45
|
-
def
|
46
|
-
|
74
|
+
def dist_service_s( *args )
|
75
|
+
"/usr/sbin/service #{args.join ' '}"
|
47
76
|
end
|
48
77
|
|
49
78
|
end
|
data/lib/syncwrap/user_run.rb
CHANGED
data/lib/syncwrap.rb
CHANGED
data/test/test_syncwrap.rb
CHANGED
@@ -2,7 +2,7 @@
|
|
2
2
|
#.hashdot.profile += jruby-shortlived
|
3
3
|
|
4
4
|
#--
|
5
|
-
# Copyright (c) 2011-
|
5
|
+
# Copyright (c) 2011-2013 David Kellum
|
6
6
|
#
|
7
7
|
# Licensed under the Apache License, Version 2.0 (the "License"); you
|
8
8
|
# may not use this file except in compliance with the License. You
|
@@ -28,6 +28,7 @@ require 'syncwrap/hashdot'
|
|
28
28
|
require 'syncwrap/jruby'
|
29
29
|
require 'syncwrap/iyyov'
|
30
30
|
require 'syncwrap/geminabox'
|
31
|
+
require 'syncwrap/aws'
|
31
32
|
require 'syncwrap/ec2'
|
32
33
|
require 'syncwrap/ubuntu'
|
33
34
|
require 'syncwrap/rhel'
|
@@ -44,6 +45,7 @@ class TestSyncWrap < MiniTest::Unit::TestCase
|
|
44
45
|
include SyncWrap::Geminabox
|
45
46
|
include SyncWrap::Ubuntu
|
46
47
|
include SyncWrap::EC2
|
48
|
+
include SyncWrap::AWS
|
47
49
|
include SyncWrap::PostgreSQL
|
48
50
|
end
|
49
51
|
|
metadata
CHANGED
@@ -1,49 +1,68 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: syncwrap
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
|
5
|
-
|
4
|
+
version: 1.5.0
|
5
|
+
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
8
8
|
- David Kellum
|
9
|
-
autorequire:
|
9
|
+
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date:
|
12
|
+
date: 2013-04-03 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: minitest
|
16
|
-
|
16
|
+
requirement: !ruby/object:Gem::Requirement
|
17
|
+
none: false
|
17
18
|
requirements:
|
18
19
|
- - ~>
|
19
20
|
- !ruby/object:Gem::Version
|
20
21
|
version: 3.2.0
|
22
|
+
type: :development
|
23
|
+
prerelease: false
|
24
|
+
version_requirements: !ruby/object:Gem::Requirement
|
21
25
|
none: false
|
22
|
-
requirement: !ruby/object:Gem::Requirement
|
23
26
|
requirements:
|
24
27
|
- - ~>
|
25
28
|
- !ruby/object:Gem::Version
|
26
29
|
version: 3.2.0
|
30
|
+
- !ruby/object:Gem::Dependency
|
31
|
+
name: aws-sdk
|
32
|
+
requirement: !ruby/object:Gem::Requirement
|
27
33
|
none: false
|
28
|
-
|
34
|
+
requirements:
|
35
|
+
- - ~>
|
36
|
+
- !ruby/object:Gem::Version
|
37
|
+
version: 1.8.5
|
29
38
|
type: :development
|
39
|
+
prerelease: false
|
40
|
+
version_requirements: !ruby/object:Gem::Requirement
|
41
|
+
none: false
|
42
|
+
requirements:
|
43
|
+
- - ~>
|
44
|
+
- !ruby/object:Gem::Version
|
45
|
+
version: 1.8.5
|
30
46
|
- !ruby/object:Gem::Dependency
|
31
47
|
name: rjack-tarpit
|
32
|
-
|
48
|
+
requirement: !ruby/object:Gem::Requirement
|
49
|
+
none: false
|
33
50
|
requirements:
|
34
51
|
- - ~>
|
35
52
|
- !ruby/object:Gem::Version
|
36
53
|
version: '2.0'
|
54
|
+
type: :development
|
55
|
+
prerelease: false
|
56
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
57
|
none: false
|
38
|
-
requirement: !ruby/object:Gem::Requirement
|
39
58
|
requirements:
|
40
59
|
- - ~>
|
41
60
|
- !ruby/object:Gem::Version
|
42
61
|
version: '2.0'
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
62
|
+
description: A generalized and modular set of provisioning and deployment routines.
|
63
|
+
The Rake-centric Vlad and not-actually-Rake Capistrano both suffer from lack of
|
64
|
+
objects, e.g. the ability to customize and mix-in behavior. SyncWrap offers an Object/Module
|
65
|
+
system that can be used with either.
|
47
66
|
email:
|
48
67
|
- dek-oss@gravitext.com
|
49
68
|
executables: []
|
@@ -94,35 +113,36 @@ files:
|
|
94
113
|
- var/iyyov/jobs.rb
|
95
114
|
homepage: http://github.com/dekellum/syncwrap
|
96
115
|
licenses: []
|
97
|
-
post_install_message:
|
116
|
+
post_install_message:
|
98
117
|
rdoc_options:
|
99
118
|
- --main
|
100
119
|
- README.rdoc
|
101
120
|
require_paths:
|
102
121
|
- lib
|
103
122
|
required_ruby_version: !ruby/object:Gem::Requirement
|
123
|
+
none: false
|
104
124
|
requirements:
|
105
125
|
- - ! '>='
|
106
126
|
- !ruby/object:Gem::Version
|
107
127
|
version: '0'
|
108
128
|
segments:
|
109
129
|
- 0
|
110
|
-
hash:
|
111
|
-
none: false
|
130
|
+
hash: -4179496661499854471
|
112
131
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
132
|
+
none: false
|
113
133
|
requirements:
|
114
134
|
- - ! '>='
|
115
135
|
- !ruby/object:Gem::Version
|
116
136
|
version: '0'
|
117
137
|
segments:
|
118
138
|
- 0
|
119
|
-
hash:
|
120
|
-
none: false
|
139
|
+
hash: -4179496661499854471
|
121
140
|
requirements: []
|
122
|
-
rubyforge_project:
|
123
|
-
rubygems_version: 1.8.
|
124
|
-
signing_key:
|
141
|
+
rubyforge_project:
|
142
|
+
rubygems_version: 1.8.25
|
143
|
+
signing_key:
|
125
144
|
specification_version: 3
|
126
|
-
summary: A generalized and modular set of provisioning and deployment routines. The
|
145
|
+
summary: A generalized and modular set of provisioning and deployment routines. The
|
146
|
+
Rake-centric Vlad and not-actually-Rake Capistrano both suffer from lack of objects,
|
147
|
+
e.g. the ability to customize and mix-in behavior.
|
127
148
|
test_files: []
|
128
|
-
...
|