syncwrap 1.5.2 → 2.0.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.
- checksums.yaml +7 -0
- data/History.rdoc +19 -0
- data/Manifest.txt +82 -34
- data/README.rdoc +96 -48
- data/Rakefile +0 -65
- data/bin/syncwrap +27 -0
- data/examples/LAYOUT.rdoc +70 -0
- data/examples/Rakefile +16 -0
- data/examples/ec2.rb +44 -0
- data/examples/hello.rb +14 -0
- data/examples/hello_binding.rb +27 -0
- data/examples/jruby.rb +11 -0
- data/examples/private/aws.json +4 -0
- data/examples/rput.rb +24 -0
- data/examples/sync/home/bob/.ssh/authorized_keys +1 -0
- data/examples/sync/tmp/sample.erb +3 -0
- data/lib/syncwrap/amazon_ec2.rb +236 -0
- data/lib/syncwrap/amazon_ws.rb +308 -0
- data/lib/syncwrap/base.rb +4 -2
- data/lib/syncwrap/cli.rb +328 -0
- data/lib/syncwrap/component.rb +443 -0
- data/lib/syncwrap/components/commercial_jdk.rb +76 -0
- data/lib/syncwrap/components/cruby_vm.rb +144 -0
- data/lib/syncwrap/components/etc_hosts.rb +44 -0
- data/lib/syncwrap/{geminabox.rb → components/geminabox.rb} +12 -17
- data/lib/syncwrap/components/hashdot.rb +97 -0
- data/lib/syncwrap/components/iyyov.rb +144 -0
- data/lib/syncwrap/components/iyyov_daemon.rb +125 -0
- data/lib/syncwrap/components/jruby_vm.rb +122 -0
- data/lib/syncwrap/components/mdraid.rb +204 -0
- data/lib/syncwrap/components/network.rb +99 -0
- data/lib/syncwrap/components/open_jdk.rb +70 -0
- data/lib/syncwrap/components/postgresql.rb +159 -0
- data/lib/syncwrap/components/qpid.rb +303 -0
- data/lib/syncwrap/components/rhel.rb +71 -0
- data/lib/syncwrap/components/run_user.rb +99 -0
- data/lib/syncwrap/components/ubuntu.rb +85 -0
- data/lib/syncwrap/components/users.rb +200 -0
- data/lib/syncwrap/context.rb +260 -0
- data/lib/syncwrap/distro.rb +53 -60
- data/lib/syncwrap/formatter.rb +149 -0
- data/lib/syncwrap/host.rb +134 -0
- data/lib/syncwrap/main.rb +62 -0
- data/lib/syncwrap/path_util.rb +55 -0
- data/lib/syncwrap/rsync.rb +227 -0
- data/lib/syncwrap/ruby_support.rb +110 -0
- data/lib/syncwrap/shell.rb +207 -0
- data/lib/syncwrap.rb +367 -1
- data/{etc → sync/etc}/gemrc +1 -3
- data/sync/etc/hosts.erb +8 -0
- data/{etc/init.d/iyyov → sync/etc/init.d/iyyov.erb} +35 -7
- data/sync/etc/sysconfig/pgsql/postgresql.erb +2 -0
- data/sync/src/hashdot/Makefile.erb +98 -0
- data/sync/src/hashdot/profiles/default.hdp.erb +25 -0
- data/sync/src/hashdot/profiles/jruby-common.hdp +28 -0
- data/sync/src/hashdot/profiles/jruby-shortlived.hdp +9 -0
- data/sync/src/hashdot/profiles/jruby.hdp.erb +13 -0
- data/sync/src/hashdot/profiles/shortlived.hdp +6 -0
- data/sync/var/iyyov/default/config.rb +1 -0
- data/sync/var/iyyov/default/daemon.rb.erb +15 -0
- data/sync/var/iyyov/jobs.rb.erb +4 -0
- data/test/muddled_sync.rb +13 -0
- data/test/setup.rb +39 -0
- data/test/sync/d1/bar +1 -0
- data/test/sync/d1/foo.erb +1 -0
- data/test/sync/d3/d2/bar +1 -0
- data/test/sync/d3/d2/foo.erb +1 -0
- data/test/test_components.rb +108 -0
- data/test/test_context.rb +107 -0
- data/test/test_context_rput.rb +289 -0
- data/test/test_rsync.rb +138 -0
- data/test/test_shell.rb +233 -0
- data/test/test_space.rb +218 -0
- data/test/test_space_main.rb +40 -0
- data/test/zfile +1 -0
- metadata +204 -71
- data/etc/sysconfig/pgsql/postgresql +0 -2
- data/lib/syncwrap/aws.rb +0 -448
- data/lib/syncwrap/common.rb +0 -161
- data/lib/syncwrap/ec2.rb +0 -59
- data/lib/syncwrap/hashdot.rb +0 -70
- data/lib/syncwrap/iyyov.rb +0 -139
- data/lib/syncwrap/java.rb +0 -61
- data/lib/syncwrap/jruby.rb +0 -118
- data/lib/syncwrap/postgresql.rb +0 -135
- data/lib/syncwrap/qpid.rb +0 -251
- data/lib/syncwrap/remote_task.rb +0 -199
- data/lib/syncwrap/rhel.rb +0 -67
- data/lib/syncwrap/ubuntu.rb +0 -78
- data/lib/syncwrap/user_run.rb +0 -102
- data/test/test_syncwrap.rb +0 -202
- data/var/iyyov/jobs.rb +0 -11
- /data/{etc → sync/etc}/corosync/corosync.conf +0 -0
- /data/{etc → sync/etc}/corosync/uidgid.d/qpid +0 -0
- /data/{etc → sync/etc}/init.d/qpidd +0 -0
- /data/{etc → sync/etc}/sysctl.d/61-postgresql-shm.conf +0 -0
- /data/{usr/local → sync/jruby}/bin/jgem +0 -0
- /data/{postgresql → sync/postgresql}/rhel/pg_hba.conf +0 -0
- /data/{postgresql → sync/postgresql}/rhel/pg_ident.conf +0 -0
- /data/{postgresql → sync/postgresql}/rhel/postgresql.conf +0 -0
- /data/{postgresql → sync/postgresql}/ubuntu/environment +0 -0
- /data/{postgresql → sync/postgresql}/ubuntu/pg_ctl.conf +0 -0
- /data/{postgresql → sync/postgresql}/ubuntu/pg_hba.conf +0 -0
- /data/{postgresql → sync/postgresql}/ubuntu/pg_ident.conf +0 -0
- /data/{postgresql → sync/postgresql}/ubuntu/postgresql.conf +0 -0
- /data/{postgresql → sync/postgresql}/ubuntu/start.conf +0 -0
- /data/{usr → sync/usr}/local/etc/qpidd.conf +0 -0
data/lib/syncwrap/qpid.rb
DELETED
@@ -1,251 +0,0 @@
|
|
1
|
-
#--
|
2
|
-
# Copyright (c) 2011-2013 David Kellum
|
3
|
-
#
|
4
|
-
# Licensed under the Apache License, Version 2.0 (the "License"); you
|
5
|
-
# may not use this file except in compliance with the License. You may
|
6
|
-
# obtain a copy of the License at
|
7
|
-
#
|
8
|
-
# http://www.apache.org/licenses/LICENSE-2.0
|
9
|
-
#
|
10
|
-
# Unless required by applicable law or agreed to in writing, software
|
11
|
-
# distributed under the License is distributed on an "AS IS" BASIS,
|
12
|
-
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
|
13
|
-
# implied. See the License for the specific language governing
|
14
|
-
# permissions and limitations under the License.
|
15
|
-
#++
|
16
|
-
|
17
|
-
require 'syncwrap/common'
|
18
|
-
require 'syncwrap/distro'
|
19
|
-
|
20
|
-
# Qpid AMQP broker provisioning. Currently this is RHEL/AmazonLinux
|
21
|
-
# centric.
|
22
|
-
module SyncWrap::Qpid
|
23
|
-
include SyncWrap::Common
|
24
|
-
include SyncWrap::Distro
|
25
|
-
|
26
|
-
attr_accessor :qpid_src_root
|
27
|
-
|
28
|
-
attr_accessor :qpid_version
|
29
|
-
attr_accessor :qpid_repo
|
30
|
-
attr_accessor :qpid_distro
|
31
|
-
|
32
|
-
attr_accessor :corosync_version
|
33
|
-
attr_accessor :corosync_repo
|
34
|
-
|
35
|
-
def initialize
|
36
|
-
super
|
37
|
-
|
38
|
-
@qpid_src_root = '/tmp/src'
|
39
|
-
|
40
|
-
@qpid_version = '0.18'
|
41
|
-
@qpid_repo = 'http://apache.osuosl.org/qpid'
|
42
|
-
@qpid_distro = 'amzn1'
|
43
|
-
|
44
|
-
@corosync_version = '1.4.4'
|
45
|
-
@corosync_repo = 'https://github.com/downloads/corosync/corosync'
|
46
|
-
end
|
47
|
-
|
48
|
-
def qpid_install
|
49
|
-
unless exist?( "/usr/local/sbin/qpidd" )
|
50
|
-
qpid_install!
|
51
|
-
qpid_install_init!
|
52
|
-
end
|
53
|
-
qpid_tools_install
|
54
|
-
rput( 'usr/local/etc/qpidd.conf', :user => 'root' )
|
55
|
-
end
|
56
|
-
|
57
|
-
def qpid_install_init!
|
58
|
-
unless exec_conditional { run "id qpidd >/dev/null" } == 0
|
59
|
-
sudo <<-SH
|
60
|
-
useradd -r qpidd
|
61
|
-
mkdir -p /var/local/qpidd
|
62
|
-
chown qpidd:qpidd /var/local/qpidd
|
63
|
-
SH
|
64
|
-
end
|
65
|
-
|
66
|
-
rput( 'etc/init.d/qpidd', :user => 'root' )
|
67
|
-
|
68
|
-
# Add to init.d
|
69
|
-
dist_install_init_service( 'qpidd' )
|
70
|
-
end
|
71
|
-
|
72
|
-
def qpid_tools_install
|
73
|
-
unless exist?( "/usr/bin/qpid-config" )
|
74
|
-
qpid_tools_install!
|
75
|
-
end
|
76
|
-
end
|
77
|
-
|
78
|
-
def qpid_install!
|
79
|
-
corosync_install!( :devel => true )
|
80
|
-
qpid_build
|
81
|
-
end
|
82
|
-
|
83
|
-
def qpid_tools_install!
|
84
|
-
dist_install( 'python-setuptools' )
|
85
|
-
qpid_src = "#{qpid_src_root}/qpid-#{qpid_version}"
|
86
|
-
|
87
|
-
run <<-SH
|
88
|
-
mkdir -p #{qpid_src_root}
|
89
|
-
rm -rf #{qpid_src}
|
90
|
-
cd #{qpid_src_root}
|
91
|
-
curl -sSL #{qpid_tools_tarball} | tar -zxf -
|
92
|
-
SH
|
93
|
-
|
94
|
-
sudo <<-SH
|
95
|
-
cd #{qpid_src}
|
96
|
-
easy_install ./python ./tools ./extras/qmf
|
97
|
-
SH
|
98
|
-
end
|
99
|
-
|
100
|
-
def qpid_build
|
101
|
-
qpid_install_build_deps
|
102
|
-
qpid_install_deps
|
103
|
-
|
104
|
-
qpid_src = "#{qpid_src_root}/qpidc-#{qpid_version}"
|
105
|
-
|
106
|
-
run <<-SH
|
107
|
-
mkdir -p #{qpid_src_root}
|
108
|
-
rm -rf #{qpid_src}
|
109
|
-
cd #{qpid_src_root}
|
110
|
-
curl -sSL #{qpid_src_tarball} | tar -zxf -
|
111
|
-
cd #{qpid_src}
|
112
|
-
./configure > /dev/null
|
113
|
-
make > /dev/null
|
114
|
-
SH
|
115
|
-
|
116
|
-
sudo <<-SH
|
117
|
-
cd #{qpid_src}
|
118
|
-
make install > /dev/null
|
119
|
-
SH
|
120
|
-
|
121
|
-
run <<-SH
|
122
|
-
cd #{qpid_src}
|
123
|
-
make check > /dev/null
|
124
|
-
SH
|
125
|
-
|
126
|
-
sudo <<-SH
|
127
|
-
cd /usr/local
|
128
|
-
rm -f /tmp/qpidc-#{qpid_version}-1-#{qpid_distro}-x64.tar.gz
|
129
|
-
tar -zc \
|
130
|
-
--exclude games --exclude lib64/perl5 --exclude src \
|
131
|
-
--exclude share/man --exclude share/perl5 --exclude share/info \
|
132
|
-
--exclude share/applications \
|
133
|
-
-f /tmp/qpidc-#{qpid_version}-1-#{qpid_distro}-x64.tar.gz .
|
134
|
-
SH
|
135
|
-
end
|
136
|
-
|
137
|
-
def qpid_src_tarball
|
138
|
-
"#{qpid_repo}/#{qpid_version}/qpid-cpp-#{qpid_version}.tar.gz"
|
139
|
-
end
|
140
|
-
|
141
|
-
def qpid_tools_tarball
|
142
|
-
"#{qpid_repo}/#{qpid_version}/qpid-#{qpid_version}.tar.gz"
|
143
|
-
end
|
144
|
-
|
145
|
-
def qpid_install_build_deps
|
146
|
-
dist_install( %w[ gcc gcc-c++ make autogen autoconf
|
147
|
-
help2man libtool pkgconfig rpm-build ] )
|
148
|
-
end
|
149
|
-
|
150
|
-
def qpid_install_deps
|
151
|
-
dist_install( %w[ nss-devel boost-devel libuuid-devel swig
|
152
|
-
ruby-devel python-devel cyrus-sasl-devel ] )
|
153
|
-
end
|
154
|
-
|
155
|
-
def corosync_install( opts = {} )
|
156
|
-
unless exist?( "/usr/sbin/corosync" )
|
157
|
-
corosync_install!( opts )
|
158
|
-
end
|
159
|
-
end
|
160
|
-
|
161
|
-
def corosync_install!( opts = {} )
|
162
|
-
corosync_build
|
163
|
-
dist_install( "#{corosync_src}/x86_64/*.rpm", :succeed => true )
|
164
|
-
end
|
165
|
-
|
166
|
-
def corosync_build
|
167
|
-
qpid_install_build_deps
|
168
|
-
corosync_install_build_deps
|
169
|
-
|
170
|
-
run <<-SH
|
171
|
-
mkdir -p #{qpid_src_root}
|
172
|
-
rm -rf #{corosync_src}
|
173
|
-
cd #{qpid_src_root}
|
174
|
-
curl -sSL #{corosync_repo}/corosync-#{corosync_version}.tar.gz | tar -zxf -
|
175
|
-
cd #{corosync_src}
|
176
|
-
./autogen.sh
|
177
|
-
./configure > /dev/null
|
178
|
-
make rpm > /dev/null
|
179
|
-
SH
|
180
|
-
|
181
|
-
end
|
182
|
-
|
183
|
-
def corosync_packages( include_devel = false )
|
184
|
-
packs = [ "corosync-#{corosync_version}-1.#{qpid_distro}.x86_64.rpm",
|
185
|
-
"corosynclib-#{corosync_version}-1.#{qpid_distro}.x86_64.rpm" ]
|
186
|
-
packs << "corosynclib-devel-#{corosync_version}-1.#{qpid_distro}.x86_64.rpm" if include_devel
|
187
|
-
packs
|
188
|
-
end
|
189
|
-
|
190
|
-
def corosync_install_build_deps
|
191
|
-
dist_install( %w[ nss-devel libibverbs-devel librdmacm-devel ] )
|
192
|
-
end
|
193
|
-
|
194
|
-
def corosync_src
|
195
|
-
"#{qpid_src_root}/corosync-#{corosync_version}"
|
196
|
-
end
|
197
|
-
|
198
|
-
# Simplify qpid install by using pre-built binaries (for example,
|
199
|
-
# archived from the build steps above.)
|
200
|
-
module BinRepo
|
201
|
-
include SyncWrap::Qpid
|
202
|
-
|
203
|
-
attr_accessor :qpid_prebuild_repo
|
204
|
-
|
205
|
-
def initialize
|
206
|
-
super
|
207
|
-
|
208
|
-
@qpid_prebuild_repo = nil
|
209
|
-
end
|
210
|
-
|
211
|
-
def qpid_install
|
212
|
-
corosync_install
|
213
|
-
super
|
214
|
-
end
|
215
|
-
|
216
|
-
def qpid_install!
|
217
|
-
raise "qpid_prebuild_repo required, but not set" unless qpid_prebuild_repo
|
218
|
-
|
219
|
-
dist_install( %w[ boost cyrus-sasl ] )
|
220
|
-
|
221
|
-
sudo <<-SH
|
222
|
-
cd /usr/local
|
223
|
-
curl -sS #{qpid_prebuild_repo}/qpidc-#{qpid_version}-1-#{qpid_distro}-x64.tar.gz | tar -zxf -
|
224
|
-
SH
|
225
|
-
end
|
226
|
-
|
227
|
-
def corosync_install!( opts = {} )
|
228
|
-
raise "qpid_prebuild_repo required, but not set" unless qpid_prebuild_repo
|
229
|
-
packs = corosync_packages
|
230
|
-
curls = packs.map do |p|
|
231
|
-
"curl -sS -O #{qpid_prebuild_repo}/#{p}"
|
232
|
-
end
|
233
|
-
|
234
|
-
sudo <<-SH
|
235
|
-
rm -rf /tmp/rpm-drop
|
236
|
-
mkdir -p /tmp/rpm-drop
|
237
|
-
cd /tmp/rpm-drop
|
238
|
-
#{curls.join("\n")}
|
239
|
-
SH
|
240
|
-
dist_install( "/tmp/rpm-drop/*.rpm", :succeed => true )
|
241
|
-
end
|
242
|
-
|
243
|
-
# Where uploaded qpid-python-tools-M.N.tar.gz contains the
|
244
|
-
# ./python ./tools ./extras/qmf packages for easy_install.
|
245
|
-
def qpid_tools_tarball
|
246
|
-
"#{qpid_prebuild_repo}/qpid-python-tools-#{qpid_version}.tar.gz"
|
247
|
-
end
|
248
|
-
|
249
|
-
end
|
250
|
-
|
251
|
-
end
|
data/lib/syncwrap/remote_task.rb
DELETED
@@ -1,199 +0,0 @@
|
|
1
|
-
#--
|
2
|
-
# Copyright (c) 2011-2013 David Kellum
|
3
|
-
#
|
4
|
-
# Licensed under the Apache License, Version 2.0 (the "License"); you
|
5
|
-
# may not use this file except in compliance with the License. You may
|
6
|
-
# obtain a copy of the License at
|
7
|
-
#
|
8
|
-
# http://www.apache.org/licenses/LICENSE-2.0
|
9
|
-
#
|
10
|
-
# Unless required by applicable law or agreed to in writing, software
|
11
|
-
# distributed under the License is distributed on an "AS IS" BASIS,
|
12
|
-
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
|
13
|
-
# implied. See the License for the specific language governing
|
14
|
-
# permissions and limitations under the License.
|
15
|
-
#++
|
16
|
-
|
17
|
-
require 'rake/remote_task'
|
18
|
-
|
19
|
-
require 'syncwrap/base'
|
20
|
-
require 'syncwrap/common'
|
21
|
-
|
22
|
-
# Implements common remoting methods in terms of rake/remote_task (and
|
23
|
-
# thus Vlad compatible)
|
24
|
-
module SyncWrap::RemoteTask
|
25
|
-
include SyncWrap::Common
|
26
|
-
include Rake::DSL
|
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
|
-
|
36
|
-
def initialize
|
37
|
-
@common_domain = nil
|
38
|
-
interpret_hosts_var
|
39
|
-
super
|
40
|
-
|
41
|
-
# Defaults:
|
42
|
-
set( :sudo_flags, %w[ -H ] )
|
43
|
-
set( :rsync_flags, %w[ -rlpcb -ii ] )
|
44
|
-
|
45
|
-
load_hosts_from_aws_instances if defined? aws_instances
|
46
|
-
end
|
47
|
-
|
48
|
-
# Implements SyncWrap::Common#run
|
49
|
-
def run( *args )
|
50
|
-
opts = args.last.is_a?( Hash ) && args.pop || {}
|
51
|
-
|
52
|
-
exit_multi = opts[ :error ].nil? || opts[ :error ] == :exit
|
53
|
-
|
54
|
-
args = cleanup_arg_lines( args, exit_multi )
|
55
|
-
|
56
|
-
remote_task_current.run( *args )
|
57
|
-
end
|
58
|
-
|
59
|
-
# Implements SyncWrap::Common#sudo
|
60
|
-
def sudo( *args )
|
61
|
-
opts = args.last.is_a?( Hash ) && args.pop || {}
|
62
|
-
|
63
|
-
flags = opts[ :flags ] || []
|
64
|
-
if opts[ :user ]
|
65
|
-
flags += [ '-u', opts[ :user ] ]
|
66
|
-
end
|
67
|
-
|
68
|
-
unless opts[ :shell ] == false
|
69
|
-
exit_multi = opts[ :error ].nil? || opts[ :error ] == :exit
|
70
|
-
cmd = cleanup_arg_lines( args, exit_multi )
|
71
|
-
cmd = shell_escape_cmd( cmd.join( ' ' ) )
|
72
|
-
cmd = "sh -c \"#{cmd}\""
|
73
|
-
else
|
74
|
-
cmd = cleanup_arg_lines( args, false )
|
75
|
-
end
|
76
|
-
|
77
|
-
remote_task_current.sudo( [ flags, cmd ] )
|
78
|
-
end
|
79
|
-
|
80
|
-
# Implements SyncWrap::Common#rsync
|
81
|
-
def rsync( *args )
|
82
|
-
remote_task_current.rsync( *args )
|
83
|
-
end
|
84
|
-
|
85
|
-
# Return the target host name of the currently executing RemoteTask.
|
86
|
-
# Raises a StandardError if executed out of that context.
|
87
|
-
def target_host
|
88
|
-
remote_task_current.target_host
|
89
|
-
end
|
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
|
-
|
98
|
-
# Implements Common#exec_conditional
|
99
|
-
def exec_conditional
|
100
|
-
yield
|
101
|
-
0
|
102
|
-
rescue Rake::CommandFailedError => e
|
103
|
-
e.status
|
104
|
-
end
|
105
|
-
|
106
|
-
# Remove extra whitespace from multi-line and single arguments
|
107
|
-
def cleanup_arg_lines( args, exit_error_on_multi )
|
108
|
-
args.flatten.compact.map do |arg|
|
109
|
-
alines = arg.split( $/ )
|
110
|
-
if alines.length > 1 && exit_error_on_multi
|
111
|
-
alines.unshift( "set -e" )
|
112
|
-
end
|
113
|
-
alines.map { |f| f.strip }.join( $/ )
|
114
|
-
end
|
115
|
-
end
|
116
|
-
|
117
|
-
def shell_escape_cmd( cmd )
|
118
|
-
cmd.gsub( /["$`\\]/ ) { |c| '\\' + c }
|
119
|
-
end
|
120
|
-
|
121
|
-
def remote_task( name, *args, &block )
|
122
|
-
Rake::RemoteTask.remote_task( name, *args, &block )
|
123
|
-
end
|
124
|
-
|
125
|
-
def set( *args )
|
126
|
-
Rake::RemoteTask.set( *args )
|
127
|
-
end
|
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.
|
144
|
-
def host( host_name, *roles )
|
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
|
162
|
-
end
|
163
|
-
|
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
|
177
|
-
end
|
178
|
-
|
179
|
-
def remote_task_current
|
180
|
-
Thread.current[ :task ] or raise "Not running from a RemoteTask"
|
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
|
-
|
199
|
-
end
|
data/lib/syncwrap/rhel.rb
DELETED
@@ -1,67 +0,0 @@
|
|
1
|
-
#--
|
2
|
-
# Copyright (c) 2011-2013 David Kellum
|
3
|
-
#
|
4
|
-
# Licensed under the Apache License, Version 2.0 (the "License"); you
|
5
|
-
# may not use this file except in compliance with the License. You may
|
6
|
-
# obtain a copy of the License at
|
7
|
-
#
|
8
|
-
# http://www.apache.org/licenses/LICENSE-2.0
|
9
|
-
#
|
10
|
-
# Unless required by applicable law or agreed to in writing, software
|
11
|
-
# distributed under the License is distributed on an "AS IS" BASIS,
|
12
|
-
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
|
13
|
-
# implied. See the License for the specific language governing
|
14
|
-
# permissions and limitations under the License.
|
15
|
-
#++
|
16
|
-
|
17
|
-
require 'syncwrap/distro'
|
18
|
-
|
19
|
-
# Customizations for RedHat Enterprise Linux and derivatives like
|
20
|
-
# CentOS and Amazon Linux. Specific distros/versions may further
|
21
|
-
# override these.
|
22
|
-
module SyncWrap::RHEL
|
23
|
-
include SyncWrap::Distro
|
24
|
-
|
25
|
-
def initialize
|
26
|
-
super
|
27
|
-
|
28
|
-
packages_map.merge!( 'emacs' => 'emacs-nox',
|
29
|
-
'postgresql' => 'postgresql-server' )
|
30
|
-
end
|
31
|
-
|
32
|
-
# Generate command to install packages. The last argument is
|
33
|
-
# interpreted as a options if it is a Hash.
|
34
|
-
# === Options
|
35
|
-
# :succeed:: Always succeed (useful for local rpms which might
|
36
|
-
# already be installed.
|
37
|
-
def dist_install_s( *args )
|
38
|
-
if args.last.is_a?( Hash )
|
39
|
-
args = args.dup
|
40
|
-
opts = args.pop
|
41
|
-
else
|
42
|
-
opts = {}
|
43
|
-
end
|
44
|
-
|
45
|
-
args = dist_map_packages( args )
|
46
|
-
|
47
|
-
if opts[ :succeed ]
|
48
|
-
"yum install -q -y #{args.join ' '} || true"
|
49
|
-
else
|
50
|
-
"yum install -q -y #{args.join ' '}"
|
51
|
-
end
|
52
|
-
end
|
53
|
-
|
54
|
-
def dist_uninstall_s( *args )
|
55
|
-
args = dist_map_packages( args )
|
56
|
-
"yum remove -q -y #{args.join ' '}"
|
57
|
-
end
|
58
|
-
|
59
|
-
def dist_install_init_service_s( name )
|
60
|
-
"/sbin/chkconfig --add #{name}"
|
61
|
-
end
|
62
|
-
|
63
|
-
def dist_service_s( *args )
|
64
|
-
"/sbin/service #{args.join ' '}"
|
65
|
-
end
|
66
|
-
|
67
|
-
end
|
data/lib/syncwrap/ubuntu.rb
DELETED
@@ -1,78 +0,0 @@
|
|
1
|
-
#--
|
2
|
-
# Copyright (c) 2011-2013 David Kellum
|
3
|
-
#
|
4
|
-
# Licensed under the Apache License, Version 2.0 (the "License"); you
|
5
|
-
# may not use this file except in compliance with the License. You may
|
6
|
-
# obtain a copy of the License at
|
7
|
-
#
|
8
|
-
# http://www.apache.org/licenses/LICENSE-2.0
|
9
|
-
#
|
10
|
-
# Unless required by applicable law or agreed to in writing, software
|
11
|
-
# distributed under the License is distributed on an "AS IS" BASIS,
|
12
|
-
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
|
13
|
-
# implied. See the License for the specific language governing
|
14
|
-
# permissions and limitations under the License.
|
15
|
-
#++
|
16
|
-
|
17
|
-
require 'syncwrap/distro'
|
18
|
-
require 'thread'
|
19
|
-
|
20
|
-
# Customizations for Ubuntu and possibly other Debian/apt packaged
|
21
|
-
# derivatives. Specific distros/versions may further specialize.
|
22
|
-
module SyncWrap::Ubuntu
|
23
|
-
include SyncWrap::Distro
|
24
|
-
|
25
|
-
def initialize
|
26
|
-
@apt_update_state_lock = Mutex.new
|
27
|
-
@apt_update_state = {}
|
28
|
-
|
29
|
-
super
|
30
|
-
|
31
|
-
packages_map.merge!( 'apr' => 'libapr1',
|
32
|
-
'apr-devel' => 'libapr1-dev' )
|
33
|
-
end
|
34
|
-
|
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" )
|
63
|
-
end
|
64
|
-
|
65
|
-
def dist_uninstall_s( *args )
|
66
|
-
args = dist_map_packages( args )
|
67
|
-
"aptitude -yq purge #{args.join ' '}"
|
68
|
-
end
|
69
|
-
|
70
|
-
def dist_install_init_service_s( name )
|
71
|
-
"/usr/sbin/update-rc.d #{name} defaults"
|
72
|
-
end
|
73
|
-
|
74
|
-
def dist_service_s( *args )
|
75
|
-
"/usr/sbin/service #{args.join ' '}"
|
76
|
-
end
|
77
|
-
|
78
|
-
end
|
data/lib/syncwrap/user_run.rb
DELETED
@@ -1,102 +0,0 @@
|
|
1
|
-
#--
|
2
|
-
# Copyright (c) 2011-2013 David Kellum
|
3
|
-
#
|
4
|
-
# Licensed under the Apache License, Version 2.0 (the "License"); you
|
5
|
-
# may not use this file except in compliance with the License. You may
|
6
|
-
# obtain a copy of the License at
|
7
|
-
#
|
8
|
-
# http://www.apache.org/licenses/LICENSE-2.0
|
9
|
-
#
|
10
|
-
# Unless required by applicable law or agreed to in writing, software
|
11
|
-
# distributed under the License is distributed on an "AS IS" BASIS,
|
12
|
-
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
|
13
|
-
# implied. See the License for the specific language governing
|
14
|
-
# permissions and limitations under the License.
|
15
|
-
#++
|
16
|
-
|
17
|
-
require 'syncwrap/common'
|
18
|
-
|
19
|
-
# Provisions for a (daemon) run user and var directory. Utilities for
|
20
|
-
# working with the same.
|
21
|
-
module SyncWrap::UserRun
|
22
|
-
include SyncWrap::Common
|
23
|
-
|
24
|
-
# A user for running deployed daemons, jobs (default: 'runr')
|
25
|
-
attr_accessor :user_run
|
26
|
-
|
27
|
-
# A group for running (default: 'runr')
|
28
|
-
attr_accessor :user_run_group
|
29
|
-
|
30
|
-
# Directory for persistent data, logs. (default: /var/local/runr)
|
31
|
-
attr_accessor :user_run_dir
|
32
|
-
|
33
|
-
def initialize
|
34
|
-
super
|
35
|
-
|
36
|
-
@user_run = 'runr'
|
37
|
-
@user_run_group = 'runr'
|
38
|
-
|
39
|
-
@user_run_dir = '/var/local/runr'
|
40
|
-
end
|
41
|
-
|
42
|
-
# Create and set owner/permission of run_dir, such that user_run may
|
43
|
-
# create new directories there.
|
44
|
-
def user_run_dir_setup
|
45
|
-
user_create
|
46
|
-
sudo <<-SH
|
47
|
-
mkdir -p #{user_run_dir}
|
48
|
-
chown #{user_run}:#{user_run_group} #{user_run_dir}
|
49
|
-
chmod 775 #{user_run_dir}
|
50
|
-
SH
|
51
|
-
end
|
52
|
-
|
53
|
-
# Create and set owner/permission of a named service directory under
|
54
|
-
# user_run_dir.
|
55
|
-
def user_run_service_dir_setup( sname, instance = nil )
|
56
|
-
sdir = user_run_service_dir( sname, instance )
|
57
|
-
|
58
|
-
sudo <<-SH
|
59
|
-
mkdir -p #{sdir}
|
60
|
-
chown #{user_run}:#{user_run_group} #{sdir}
|
61
|
-
chmod 775 #{sdir}
|
62
|
-
SH
|
63
|
-
end
|
64
|
-
|
65
|
-
def user_run_service_dir( sname, instance = nil )
|
66
|
-
"#{user_run_dir}/" + [ sname, instance ].compact.join( '-' )
|
67
|
-
end
|
68
|
-
|
69
|
-
# As per SyncWrap::Common#rput with :user => user_run
|
70
|
-
def user_run_rput( *args )
|
71
|
-
opts = args.last.is_a?( Hash ) && args.pop || {}
|
72
|
-
opts[ :user ] = user_run
|
73
|
-
args.push( opts )
|
74
|
-
rput( *args )
|
75
|
-
end
|
76
|
-
|
77
|
-
# Chown to user_run where args may be flags and files/directories.
|
78
|
-
def user_run_chown( *args )
|
79
|
-
flags, paths = args.partition { |a| a =~ /^-/ }
|
80
|
-
sudo( 'chown', flags, "#{user_run}:#{user_run_group}", paths )
|
81
|
-
end
|
82
|
-
|
83
|
-
def user_exist?
|
84
|
-
exec_conditional { run "id #{user_run} >/dev/null" } == 0
|
85
|
-
end
|
86
|
-
|
87
|
-
def user_create
|
88
|
-
user_create! unless user_exist?
|
89
|
-
end
|
90
|
-
|
91
|
-
def user_create!
|
92
|
-
if user_run_group == user_run
|
93
|
-
sudo "useradd #{user_run}"
|
94
|
-
else
|
95
|
-
sudo <<-SH
|
96
|
-
groupadd #{user_run_group}
|
97
|
-
useradd -g #{user_run_group} #{user_run}
|
98
|
-
SH
|
99
|
-
end
|
100
|
-
end
|
101
|
-
|
102
|
-
end
|