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
checksums.yaml
ADDED
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
---
|
|
2
|
+
SHA1:
|
|
3
|
+
metadata.gz: 7750e1149348fc952ef8d2dd124282861961bc4f
|
|
4
|
+
data.tar.gz: 1c183faa0793ee65741b64366e1463b3c4593e51
|
|
5
|
+
SHA512:
|
|
6
|
+
metadata.gz: db6263d45a815839d43aed07c08a22cfc5dc578cbcb9c3438e3ab74ba619ba78dd3d8780beaf4648d27336284192cd4112b9e2ce6edd7d3029b5089d6db441fa
|
|
7
|
+
data.tar.gz: 694c6a0e63d9358f6831f21f16bfe9f2caffcf51c27080689e85545e24a9ce1f4b0c0ec3a44fcaa5610586e92545e1b7ad11c52e4fb696405fdde281fc0c6b1f
|
data/History.rdoc
CHANGED
|
@@ -1,3 +1,22 @@
|
|
|
1
|
+
=== 2.0.0 (2014-2-26)
|
|
2
|
+
* Major rewrite with only very limited conceptual compatibility with
|
|
3
|
+
1.x. See README, LAYOUT, and examples.
|
|
4
|
+
* Now requires ruby 1.9 stdlib. Internally makes extensive use of new
|
|
5
|
+
Hash syntax.
|
|
6
|
+
* New CLI, `syncwrap` command and sync.rb file replaces
|
|
7
|
+
Vlad/RemoteTask and rake (though rake integration is still
|
|
8
|
+
possible.) SyncWrap 2 is a standalone complete solution.
|
|
9
|
+
* Component classes and dynamic binding replaces the subject-oriented
|
|
10
|
+
module mixins.
|
|
11
|
+
* Block oriented, thread safe, colored console output
|
|
12
|
+
* SyncWrap::Component#sh replaces `run`, includes a command queue
|
|
13
|
+
and compossible scripts.
|
|
14
|
+
* SyncWrap::Component#rput with multiple sync_paths and transparent
|
|
15
|
+
ERB template support.
|
|
16
|
+
* Extensive updates, templating, reliability improvements, and
|
|
17
|
+
optimization of existing provisions (now Components)
|
|
18
|
+
* New Iyyov jobs.d support and standardized SyncWrap::IyyovDeamon
|
|
19
|
+
|
|
1
20
|
=== 1.5.2 (2013-4-10)
|
|
2
21
|
* Add check for init, aws_configure only if aws_config_json file
|
|
3
22
|
exists.
|
data/Manifest.txt
CHANGED
|
@@ -2,40 +2,88 @@ History.rdoc
|
|
|
2
2
|
Manifest.txt
|
|
3
3
|
README.rdoc
|
|
4
4
|
Rakefile
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
5
|
+
bin/syncwrap
|
|
6
|
+
examples/LAYOUT.rdoc
|
|
7
|
+
examples/Rakefile
|
|
8
|
+
examples/ec2.rb
|
|
9
|
+
examples/hello.rb
|
|
10
|
+
examples/hello_binding.rb
|
|
11
|
+
examples/jruby.rb
|
|
12
|
+
examples/rput.rb
|
|
13
|
+
examples/private/aws.json
|
|
14
|
+
examples/sync/home/bob/.ssh/authorized_keys
|
|
15
|
+
examples/sync/tmp/sample.erb
|
|
12
16
|
lib/syncwrap/base.rb
|
|
13
17
|
lib/syncwrap.rb
|
|
14
|
-
lib/syncwrap/
|
|
15
|
-
lib/syncwrap/
|
|
18
|
+
lib/syncwrap/amazon_ec2.rb
|
|
19
|
+
lib/syncwrap/amazon_ws.rb
|
|
20
|
+
lib/syncwrap/cli.rb
|
|
21
|
+
lib/syncwrap/component.rb
|
|
22
|
+
lib/syncwrap/context.rb
|
|
16
23
|
lib/syncwrap/distro.rb
|
|
17
|
-
lib/syncwrap/
|
|
18
|
-
lib/syncwrap/
|
|
19
|
-
lib/syncwrap/
|
|
20
|
-
lib/syncwrap/
|
|
21
|
-
lib/syncwrap/
|
|
22
|
-
lib/syncwrap/
|
|
23
|
-
lib/syncwrap/
|
|
24
|
-
lib/syncwrap/
|
|
25
|
-
lib/syncwrap/
|
|
26
|
-
lib/syncwrap/
|
|
27
|
-
lib/syncwrap/
|
|
28
|
-
lib/syncwrap/
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
24
|
+
lib/syncwrap/formatter.rb
|
|
25
|
+
lib/syncwrap/host.rb
|
|
26
|
+
lib/syncwrap/main.rb
|
|
27
|
+
lib/syncwrap/path_util.rb
|
|
28
|
+
lib/syncwrap/rsync.rb
|
|
29
|
+
lib/syncwrap/ruby_support.rb
|
|
30
|
+
lib/syncwrap/shell.rb
|
|
31
|
+
lib/syncwrap/components/commercial_jdk.rb
|
|
32
|
+
lib/syncwrap/components/cruby_vm.rb
|
|
33
|
+
lib/syncwrap/components/etc_hosts.rb
|
|
34
|
+
lib/syncwrap/components/geminabox.rb
|
|
35
|
+
lib/syncwrap/components/hashdot.rb
|
|
36
|
+
lib/syncwrap/components/iyyov.rb
|
|
37
|
+
lib/syncwrap/components/iyyov_daemon.rb
|
|
38
|
+
lib/syncwrap/components/jruby_vm.rb
|
|
39
|
+
lib/syncwrap/components/mdraid.rb
|
|
40
|
+
lib/syncwrap/components/network.rb
|
|
41
|
+
lib/syncwrap/components/open_jdk.rb
|
|
42
|
+
lib/syncwrap/components/postgresql.rb
|
|
43
|
+
lib/syncwrap/components/qpid.rb
|
|
44
|
+
lib/syncwrap/components/rhel.rb
|
|
45
|
+
lib/syncwrap/components/run_user.rb
|
|
46
|
+
lib/syncwrap/components/ubuntu.rb
|
|
47
|
+
lib/syncwrap/components/users.rb
|
|
48
|
+
sync/etc/gemrc
|
|
49
|
+
sync/etc/hosts.erb
|
|
50
|
+
sync/etc/corosync/corosync.conf
|
|
51
|
+
sync/etc/corosync/uidgid.d/qpid
|
|
52
|
+
sync/etc/init.d/iyyov.erb
|
|
53
|
+
sync/etc/init.d/qpidd
|
|
54
|
+
sync/etc/sysconfig/pgsql/postgresql.erb
|
|
55
|
+
sync/etc/sysctl.d/61-postgresql-shm.conf
|
|
56
|
+
sync/jruby/bin/jgem
|
|
57
|
+
sync/postgresql/rhel/pg_hba.conf
|
|
58
|
+
sync/postgresql/rhel/pg_ident.conf
|
|
59
|
+
sync/postgresql/rhel/postgresql.conf
|
|
60
|
+
sync/postgresql/ubuntu/environment
|
|
61
|
+
sync/postgresql/ubuntu/pg_ctl.conf
|
|
62
|
+
sync/postgresql/ubuntu/pg_hba.conf
|
|
63
|
+
sync/postgresql/ubuntu/pg_ident.conf
|
|
64
|
+
sync/postgresql/ubuntu/postgresql.conf
|
|
65
|
+
sync/postgresql/ubuntu/start.conf
|
|
66
|
+
sync/src/hashdot/Makefile.erb
|
|
67
|
+
sync/src/hashdot/profiles/default.hdp.erb
|
|
68
|
+
sync/src/hashdot/profiles/jruby-common.hdp
|
|
69
|
+
sync/src/hashdot/profiles/jruby-shortlived.hdp
|
|
70
|
+
sync/src/hashdot/profiles/jruby.hdp.erb
|
|
71
|
+
sync/src/hashdot/profiles/shortlived.hdp
|
|
72
|
+
sync/usr/local/etc/qpidd.conf
|
|
73
|
+
sync/var/iyyov/jobs.rb.erb
|
|
74
|
+
sync/var/iyyov/default/config.rb
|
|
75
|
+
sync/var/iyyov/default/daemon.rb.erb
|
|
76
|
+
test/muddled_sync.rb
|
|
77
|
+
test/setup.rb
|
|
78
|
+
test/test_components.rb
|
|
79
|
+
test/test_context.rb
|
|
80
|
+
test/test_context_rput.rb
|
|
81
|
+
test/test_rsync.rb
|
|
82
|
+
test/test_shell.rb
|
|
83
|
+
test/test_space.rb
|
|
84
|
+
test/test_space_main.rb
|
|
85
|
+
test/zfile
|
|
86
|
+
test/sync/d1/bar
|
|
87
|
+
test/sync/d1/foo.erb
|
|
88
|
+
test/sync/d3/d2/bar
|
|
89
|
+
test/sync/d3/d2/foo.erb
|
data/README.rdoc
CHANGED
|
@@ -1,85 +1,133 @@
|
|
|
1
1
|
= SyncWrap
|
|
2
2
|
|
|
3
3
|
* http://github.com/dekellum/syncwrap
|
|
4
|
+
* {<img src="https://travis-ci.org/dekellum/syncwrap.png" />}[https://travis-ci.org/dekellum/syncwrap]
|
|
4
5
|
|
|
5
6
|
== Description
|
|
6
7
|
|
|
7
|
-
A
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
8
|
+
A rather direct provisioning and deployment system in ruby, bash over
|
|
9
|
+
ssh, and rsync. SyncWrap is a refreshingly straightforward, DSL-free
|
|
10
|
+
non-framework with no central server or repository requirements. The
|
|
11
|
+
"magic", if any, lies in the elegant component model, the shell
|
|
12
|
+
command queue, and a few powerful methods like rput (augmented rsync).
|
|
12
13
|
|
|
13
14
|
== Features
|
|
14
15
|
|
|
15
|
-
*
|
|
16
|
-
|
|
16
|
+
* Default Thread-per-host parallel operation, with synchronized
|
|
17
|
+
block/live console output for debugging.
|
|
17
18
|
|
|
18
|
-
*
|
|
19
|
-
|
|
19
|
+
* Multi-line shell support (often via here-document), command queue,
|
|
20
|
+
and composition support in SyncWrap::Component#sh for more natural
|
|
21
|
+
script embedding. You'll know you are provisioning with bash, in
|
|
22
|
+
all its syntactic glory.
|
|
20
23
|
|
|
21
|
-
*
|
|
24
|
+
* SyncWrap::Component#rput wraps rsync, with support for multiple
|
|
25
|
+
source roots, transparent ERB templates, and target file
|
|
26
|
+
owner/permissions control. Returns the file change status allowing
|
|
27
|
+
reactive scripting (i.e. restart daemon since config has changed.)
|
|
22
28
|
|
|
23
|
-
*
|
|
29
|
+
* Linux distro differences are factored out into distro-specific
|
|
30
|
+
components with utility methods exposed in host context.
|
|
24
31
|
|
|
25
|
-
*
|
|
26
|
-
|
|
32
|
+
* SyncWrap::AmazonEC2 provider with host profiles: create and
|
|
33
|
+
provision hosts in a single step.
|
|
27
34
|
|
|
28
|
-
|
|
35
|
+
* Independent of (but easily integrated into) rake
|
|
29
36
|
|
|
30
|
-
|
|
37
|
+
* Depends only on ruby 1.9+ stdlib Open3 for interaction with bash,
|
|
38
|
+
ssh and rsync. Actually, really works on jruby 1.6.8 (--1.9 mode)
|
|
39
|
+
and 1.7+
|
|
31
40
|
|
|
32
|
-
|
|
33
|
-
Route53 DNS updates.
|
|
41
|
+
== Synopsis
|
|
34
42
|
|
|
35
|
-
|
|
43
|
+
Simplest example. Place the following in a sync.rb file:
|
|
36
44
|
|
|
37
|
-
|
|
45
|
+
class Greeter < SyncWrap::Component
|
|
46
|
+
def install
|
|
47
|
+
say_it
|
|
48
|
+
end
|
|
38
49
|
|
|
39
|
-
|
|
50
|
+
def say_it
|
|
51
|
+
sh <<-SH
|
|
52
|
+
echo "Hello from #{host.name}"
|
|
53
|
+
SH
|
|
54
|
+
end
|
|
55
|
+
end
|
|
40
56
|
|
|
41
|
-
|
|
42
|
-
and var directories.
|
|
57
|
+
host 'localhost', Greeter.new
|
|
43
58
|
|
|
44
|
-
|
|
59
|
+
Try it via the command line:
|
|
45
60
|
|
|
46
|
-
|
|
61
|
+
gem install syncwrap
|
|
62
|
+
syncwrap --help
|
|
63
|
+
syncwrap -f ./sync.rb --list # -f default; list
|
|
64
|
+
syncwrap # Run it
|
|
65
|
+
syncwrap -v # Run it with full verbose output
|
|
66
|
+
syncwrap -v Greeter.say_it # Without Greeter#install default
|
|
47
67
|
|
|
48
|
-
|
|
68
|
+
Output from syncwrap -v (minus the terminal color):
|
|
49
69
|
|
|
50
|
-
|
|
51
|
-
|
|
70
|
+
== localhost #<Module:0x00000001e95678>::Greeter#install: enqueue
|
|
71
|
+
<-- sh localhost (-v coalesce live)
|
|
72
|
+
echo "Hello from localhost"
|
|
73
|
+
Hello from localhost
|
|
74
|
+
--> Exit 0 (success)
|
|
52
75
|
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
include SyncWrap::JRuby
|
|
56
|
-
include SyncWrap::Ubuntu
|
|
76
|
+
See more elaborate examples, including ec2 provider support, in the
|
|
77
|
+
examples directory and LAYOUT.
|
|
57
78
|
|
|
58
|
-
|
|
79
|
+
== Components
|
|
59
80
|
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
self.common_prefix = '/usr/local'
|
|
63
|
-
end
|
|
81
|
+
Components implementing SyncWrap::Distro, to expose common utility
|
|
82
|
+
methods like dist_install:
|
|
64
83
|
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
remote_task :jruby_deploy do
|
|
68
|
-
java_install
|
|
69
|
-
hashdot_install
|
|
70
|
-
jruby_install
|
|
71
|
-
end
|
|
72
|
-
end
|
|
84
|
+
* SyncWrap::RHEL (also supports CentOS, Amazon Linux)
|
|
85
|
+
* SyncWrap::Ubuntu
|
|
73
86
|
|
|
74
|
-
|
|
87
|
+
Components implementing \#install:
|
|
75
88
|
|
|
76
|
-
|
|
89
|
+
* SyncWrap::MDRaid - Software raid, lvm volumes, filesystems, mounts
|
|
90
|
+
|
|
91
|
+
* SyncWrap::Network and SyncWrap::EtcHosts - hostname, static names,
|
|
92
|
+
resolver config
|
|
93
|
+
|
|
94
|
+
* SyncWrap::Users - developer accounts, home directory files (incl. ssh
|
|
95
|
+
keys), sudoers access
|
|
96
|
+
|
|
97
|
+
* SyncWrap::RunUser - a user for running deployed daemons, jobs, in
|
|
98
|
+
var directories.
|
|
99
|
+
|
|
100
|
+
* SyncWrap::PostgreSQL
|
|
101
|
+
|
|
102
|
+
* SyncWrap::OpenJDK or SyncWrap::CommercialJDK
|
|
103
|
+
|
|
104
|
+
* SyncWrap::JRubyVM and/or SyncWrap::CRubyVM (MRI, from source)
|
|
105
|
+
|
|
106
|
+
* SyncWrap::Iyyov - job scheduler and process monitor with
|
|
107
|
+
utilities for SyncWrap::IyyovDaemon deployment.
|
|
108
|
+
|
|
109
|
+
* SyncWrap::Geminabox - private gem server
|
|
110
|
+
|
|
111
|
+
* SyncWrap::Qpid - AMQP broker
|
|
112
|
+
|
|
113
|
+
=== Component wish list
|
|
114
|
+
|
|
115
|
+
The above only represents my more recent project needs. Pull requests
|
|
116
|
+
to add, for example, the following would be well received:
|
|
117
|
+
|
|
118
|
+
* Bundler install, for example for Sinatra apps
|
|
119
|
+
* Bluepill
|
|
120
|
+
* Rails (extra credit: without git fetch or per-host asset compile)
|
|
121
|
+
* Nginx
|
|
122
|
+
* Mongo
|
|
123
|
+
* Redis
|
|
77
124
|
|
|
78
|
-
|
|
125
|
+
\SyncWrap makes it reasonable to implement any of the above in the
|
|
126
|
+
privacy of your own office.
|
|
79
127
|
|
|
80
128
|
== License
|
|
81
129
|
|
|
82
|
-
Copyright (c) 2011-
|
|
130
|
+
Copyright (c) 2011-2014 David Kellum
|
|
83
131
|
|
|
84
132
|
Licensed under the Apache License, Version 2.0 (the "License"); you
|
|
85
133
|
may not use this file except in compliance with the License. You
|
data/Rakefile
CHANGED
|
@@ -6,68 +6,3 @@ require 'bundler/setup'
|
|
|
6
6
|
require 'rjack-tarpit'
|
|
7
7
|
|
|
8
8
|
RJack::TarPit.new( 'syncwrap' ).define_tasks
|
|
9
|
-
|
|
10
|
-
require 'syncwrap/java'
|
|
11
|
-
require 'syncwrap/hashdot'
|
|
12
|
-
require 'syncwrap/jruby'
|
|
13
|
-
require 'syncwrap/iyyov'
|
|
14
|
-
require 'syncwrap/rhel'
|
|
15
|
-
require 'syncwrap/aws'
|
|
16
|
-
require 'syncwrap/postgresql'
|
|
17
|
-
require 'syncwrap/remote_task'
|
|
18
|
-
require 'syncwrap/geminabox'
|
|
19
|
-
|
|
20
|
-
class SyncWrapper
|
|
21
|
-
include SyncWrap::Java
|
|
22
|
-
include SyncWrap::Hashdot
|
|
23
|
-
include SyncWrap::JRuby
|
|
24
|
-
include SyncWrap::Iyyov
|
|
25
|
-
include SyncWrap::RHEL
|
|
26
|
-
include SyncWrap::AWS
|
|
27
|
-
include SyncWrap::PostgreSQL
|
|
28
|
-
include SyncWrap::Geminabox
|
|
29
|
-
|
|
30
|
-
include SyncWrap::RemoteTask
|
|
31
|
-
|
|
32
|
-
def initialize
|
|
33
|
-
super
|
|
34
|
-
|
|
35
|
-
# SETUP: Install user@server instance goes here
|
|
36
|
-
set :domain, "localhost"
|
|
37
|
-
|
|
38
|
-
end
|
|
39
|
-
|
|
40
|
-
def define_tasks
|
|
41
|
-
|
|
42
|
-
desc "Combined Java, Hashdot, JRuby Deployment"
|
|
43
|
-
remote_task :jruby_deploy do
|
|
44
|
-
java_install
|
|
45
|
-
hashdot_install
|
|
46
|
-
jruby_install
|
|
47
|
-
end
|
|
48
|
-
|
|
49
|
-
desc "Deploy Iyyov Deamon"
|
|
50
|
-
remote_task :iyyov_deploy do
|
|
51
|
-
user_run_dir_setup
|
|
52
|
-
iyyov_install
|
|
53
|
-
end
|
|
54
|
-
|
|
55
|
-
desc "Deploy Geminabox Daemon"
|
|
56
|
-
remote_task :geminabox_deploy do
|
|
57
|
-
iyyov_install_jobs do
|
|
58
|
-
geminabox_install
|
|
59
|
-
end
|
|
60
|
-
end
|
|
61
|
-
|
|
62
|
-
desc "Deploy PostgreSQL"
|
|
63
|
-
remote_task :pg_deploy do
|
|
64
|
-
pg_install
|
|
65
|
-
pg_configure
|
|
66
|
-
pg_start
|
|
67
|
-
end
|
|
68
|
-
|
|
69
|
-
end
|
|
70
|
-
|
|
71
|
-
end
|
|
72
|
-
|
|
73
|
-
SyncWrapper.new.define_tasks
|
data/bin/syncwrap
ADDED
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
#!/usr/bin/env ruby
|
|
2
|
+
# -*- ruby -*-
|
|
3
|
+
|
|
4
|
+
#--
|
|
5
|
+
# Copyright (c) 2011-2014 David Kellum
|
|
6
|
+
#
|
|
7
|
+
# Licensed under the Apache License, Version 2.0 (the "License"); you
|
|
8
|
+
# may not use this file except in compliance with the License. You
|
|
9
|
+
# may obtain a copy of the License at
|
|
10
|
+
#
|
|
11
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
|
12
|
+
#
|
|
13
|
+
# Unless required by applicable law or agreed to in writing, software
|
|
14
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
|
15
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
|
|
16
|
+
# implied. See the License for the specific language governing
|
|
17
|
+
# permissions and limitations under the License.
|
|
18
|
+
#++
|
|
19
|
+
|
|
20
|
+
$LOAD_PATH.unshift File.expand_path( "../../lib", __FILE__ )
|
|
21
|
+
|
|
22
|
+
require 'rubygems'
|
|
23
|
+
|
|
24
|
+
require 'syncwrap'
|
|
25
|
+
require 'syncwrap/cli'
|
|
26
|
+
|
|
27
|
+
SyncWrap::CLI.new.run( ARGV )
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
# -*- coding: utf-8 -*-
|
|
2
|
+
|
|
3
|
+
== Examples
|
|
4
|
+
|
|
5
|
+
The examples/ directory contains several independent sync-file
|
|
6
|
+
examples. Normally you would just have one named the default "sync.rb"
|
|
7
|
+
Use the syncwrap command -f <file> option to load each.
|
|
8
|
+
|
|
9
|
+
There is also an example Rakefile demonstrating basic rake integration.
|
|
10
|
+
|
|
11
|
+
The sub-directories private/ and sync/ are standard named and shared
|
|
12
|
+
by multiple examples.
|
|
13
|
+
|
|
14
|
+
== Common Project Layout
|
|
15
|
+
|
|
16
|
+
Here is what a complete end-user project setup might look like:
|
|
17
|
+
|
|
18
|
+
deploy/
|
|
19
|
+
├── lib/
|
|
20
|
+
│ └── my_component.rb
|
|
21
|
+
├── .gitignore
|
|
22
|
+
├── private/
|
|
23
|
+
│ ├── aws.json
|
|
24
|
+
│ └── sec.pem
|
|
25
|
+
├── sync.rb
|
|
26
|
+
└── sync/
|
|
27
|
+
├── home
|
|
28
|
+
│ └── bob
|
|
29
|
+
│ └── .ssh
|
|
30
|
+
│ └── authorized_keys
|
|
31
|
+
└── my/
|
|
32
|
+
└── config.rb.erb
|
|
33
|
+
|
|
34
|
+
sync.rb:: The aforementioned default named sync-file, containing
|
|
35
|
+
roles, components, hosts, and possibly profiles.
|
|
36
|
+
|
|
37
|
+
sync/:: The default named sync root containing a tree of static files
|
|
38
|
+
and templates for pushing to hosts. See the rput.rb example
|
|
39
|
+
for usage. The local sync root can contain overrides to the
|
|
40
|
+
syncwrap gem provided files/directories as well as new
|
|
41
|
+
files. Home directories and in particular
|
|
42
|
+
.ssh/authorized_keys is commonly used with the
|
|
43
|
+
SyncWrap::Users component.
|
|
44
|
+
|
|
45
|
+
lib/:: Place project-specific components here. Once these are
|
|
46
|
+
non-trivial its nicer to `require_relative` them into the
|
|
47
|
+
sync.rb. Its best to namespace these in your own module.
|
|
48
|
+
|
|
49
|
+
private/:: This directory is for sensitive files like credentials that
|
|
50
|
+
shouldn't be checked in. The files shown are for a typical
|
|
51
|
+
project using the SyncWrap::AmazonEC2 provider. See the
|
|
52
|
+
ec2.rb example. Similarly you can use a sync/private/ for
|
|
53
|
+
sensitive files/templates that will be deployed, and
|
|
54
|
+
include this as the first sync_root in your sync.rb You'll
|
|
55
|
+
have to externally arrange for sharing these files with
|
|
56
|
+
other users. Assuming you will check this into a git repo
|
|
57
|
+
(either its own, or for example, in a deploy/ directory of
|
|
58
|
+
a larger project repo), its a good idea to add a .gitignore
|
|
59
|
+
file containing the following at minimum:
|
|
60
|
+
|
|
61
|
+
private/
|
|
62
|
+
|
|
63
|
+
...which ignores and avoids check-in by mistake of any so
|
|
64
|
+
named sub-directory and its contents.
|
|
65
|
+
|
|
66
|
+
Without the private/ directories and sync.rb file, and adjusting lib/
|
|
67
|
+
accordingly, you could also package this as a gem. This makes it easy
|
|
68
|
+
to reuse components and files/templates across projects. Include a
|
|
69
|
+
bundler Gemfile in each deploy directory for precise version control
|
|
70
|
+
of all gems involved, including syncwrap.
|
data/examples/Rakefile
ADDED
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
# -*- ruby -*-
|
|
2
|
+
|
|
3
|
+
# Stupid simple Rakefile integration example.
|
|
4
|
+
# See SyncWrap::Space#execute for additional customization options
|
|
5
|
+
|
|
6
|
+
require 'rubygems'
|
|
7
|
+
require 'bundler/setup'
|
|
8
|
+
require 'syncwrap'
|
|
9
|
+
|
|
10
|
+
desc "Execute default components on all hosts in SyncWrap hello.rb"
|
|
11
|
+
task :deploy do
|
|
12
|
+
sp = SyncWrap::Space.new
|
|
13
|
+
sp.load_sync_file_relative 'hello.rb'
|
|
14
|
+
sp.default_options[:verbose] = true
|
|
15
|
+
sp.execute
|
|
16
|
+
end
|
data/examples/ec2.rb
ADDED
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
# Demonstrates provisioning a PostgreSQL instance on Amazon EC2.
|
|
2
|
+
#
|
|
3
|
+
# This includes a custom 4 EBS-volume software RAID-1+0 for the
|
|
4
|
+
# database storage.
|
|
5
|
+
#
|
|
6
|
+
# With API key-pair and pem (see SETUP below) create a host and
|
|
7
|
+
# provision it via:
|
|
8
|
+
#
|
|
9
|
+
# syncwrap -C postgres:pg-1 -v
|
|
10
|
+
#
|
|
11
|
+
# The host (name 'pg-1') definition will be automaticly added to the
|
|
12
|
+
# end of this file.
|
|
13
|
+
|
|
14
|
+
include SyncWrap
|
|
15
|
+
|
|
16
|
+
# SETUP: edit the sample file for your API key-pair obtained via AWS console
|
|
17
|
+
space.use_provider( AmazonEC2, aws_config: 'private/aws.json' )
|
|
18
|
+
|
|
19
|
+
profile( :default, # The "default" profile
|
|
20
|
+
image_id: "ami-ccf297fc", # Amazon Linux 2013.09.2 EBS 64 us-west-2
|
|
21
|
+
region: 'us-west-2', # Oregon; or change region and ami.
|
|
22
|
+
user_data: :ec2_user_sudo, # Sudoer ec2-user \w no-tty required
|
|
23
|
+
key_name: 'sec', # SETUP: Create this key in AWS console,
|
|
24
|
+
# or rename to an existing key.
|
|
25
|
+
# Same ssh_user_pem file below:
|
|
26
|
+
roles: [ :amazon_linux ] )
|
|
27
|
+
|
|
28
|
+
profile( :postgres, # Inherits properties from :default
|
|
29
|
+
instance_type: 'm1.small',
|
|
30
|
+
ebs_volumes: 4,
|
|
31
|
+
ebs_volume_options: { size: 2 }, #gb
|
|
32
|
+
roles: [ :postgres ] )
|
|
33
|
+
|
|
34
|
+
role( :amazon_linux,
|
|
35
|
+
Users.new( ssh_user: 'ec2-user',
|
|
36
|
+
ssh_user_pem: 'private/sec.pem' ), # SETUP
|
|
37
|
+
RHEL.new,
|
|
38
|
+
Network.new )
|
|
39
|
+
|
|
40
|
+
role( :postgres,
|
|
41
|
+
MDRaid.new( raw_devices: 4, lvm_volumes: [ [1.0, '/pg'] ] ),
|
|
42
|
+
PostgreSQL.new( pg_data_dir: '/pg/data' ) )
|
|
43
|
+
|
|
44
|
+
# Generated Hosts:
|
data/examples/hello.rb
ADDED
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
|
|
2
|
+
class GreetSupport < SyncWrap::Component
|
|
3
|
+
|
|
4
|
+
def install
|
|
5
|
+
# provision "echo" support, if that were needed.
|
|
6
|
+
end
|
|
7
|
+
|
|
8
|
+
def say( msg )
|
|
9
|
+
sh "echo '#{msg}'"
|
|
10
|
+
end
|
|
11
|
+
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
class Greeter < SyncWrap::Component
|
|
15
|
+
|
|
16
|
+
def install
|
|
17
|
+
say "Hello from #{host.name}"
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
host 'localhost', GreetSupport.new, Greeter.new
|
|
23
|
+
|
|
24
|
+
# When executing in the context of localhost, this Greeter has access
|
|
25
|
+
# to the public instance methods of this GreetSupport. The reverse is
|
|
26
|
+
# not true: this GreetSupport instance does not get any Greeter
|
|
27
|
+
# methods.
|
data/examples/jruby.rb
ADDED
data/examples/rput.rb
ADDED
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
# Important: Make this examples/sync directory first in
|
|
2
|
+
# sync_paths. This is not done by default, to make sure its explicit.
|
|
3
|
+
#
|
|
4
|
+
# The second path is the SyncWrap gem's own sync directory. The first
|
|
5
|
+
# path can effectively override any file that would otherwise be found
|
|
6
|
+
# in the second. This includes being able to override a static file
|
|
7
|
+
# with a template, or the other way around. This is what we mean by
|
|
8
|
+
# "transparent."
|
|
9
|
+
space.prepend_sync_path
|
|
10
|
+
|
|
11
|
+
class Writer < SyncWrap::Component
|
|
12
|
+
attr_accessor :message
|
|
13
|
+
|
|
14
|
+
def install
|
|
15
|
+
rput( "tmp/sample" ) # implied destination --> /tmp/sample
|
|
16
|
+
end
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
host 'localhost', Writer.new( message: "parameterized" )
|
|
20
|
+
|
|
21
|
+
# Try changing the message property above and running repeatedly in
|
|
22
|
+
# --verbose mode, to see how rsync uses checksums to detect
|
|
23
|
+
# changes. The cryptic looking output lines are actually returned as
|
|
24
|
+
# an array of changes from the rput call.
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
ssh-rsa AAAAB3Nzaxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx== bob@dot.net
|