marionetta 0.4.6 → 0.4.7
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/README.md +7 -2
- data/lib/marionetta.rb +1 -1
- data/lib/marionetta/command_runner.rb +3 -2
- data/lib/marionetta/commandable.rb +20 -0
- data/lib/marionetta/directory_sync.rb +58 -0
- data/lib/marionetta/manipulators/deployer.rb +7 -49
- data/lib/marionetta/manipulators/puppet_manipulator.rb +6 -15
- metadata +10 -2
data/README.md
CHANGED
@@ -166,13 +166,18 @@ staging.manipulate_each_server(:deployer, :rollback)
|
|
166
166
|
|
167
167
|
## Upcoming
|
168
168
|
|
169
|
-
- Remove rollback feature... we don't need rollbacks IMO. (v0.5.x)
|
170
|
-
- Remove Marionetta::Manipulators::Debloyer (v0.5.x)
|
171
169
|
- Output deploy excludes to tmp file for use with rsync --exclude-from (v0.4.x)
|
172
170
|
- Add clean up for deployments (v0.4.x)
|
173
171
|
- Add puppet safe-upgrade ability (v0.4.x)
|
172
|
+
- Remove rollback feature... we don't need rollbacks IMO. (v0.5.x)
|
173
|
+
- Remove Marionetta::Manipulators::Debloyer (v0.5.x)
|
174
174
|
- Use rye for commands (https://github.com/delano/rye) (v0.5.x)
|
175
175
|
- Use a single SSH connection per task (v0.5.x)
|
176
|
+
- Add ability to define shared directories with Manipulators::Deployer
|
177
|
+
- Add ability to define permissions with Manipulators::Deployer
|
178
|
+
- Change :before_script and :after_script to :before_scripts and :after_scripts
|
179
|
+
that take an array
|
180
|
+
- Use same technique for transfering puppet files as used by deployer
|
176
181
|
|
177
182
|
## Author
|
178
183
|
|
data/lib/marionetta.rb
CHANGED
@@ -50,8 +50,9 @@ module Marionetta
|
|
50
50
|
yield stdout, stderr if block_given?
|
51
51
|
|
52
52
|
[stdout, stderr].each do |io|
|
53
|
-
|
54
|
-
|
53
|
+
io.each do |line|
|
54
|
+
server[:logger].debug(line) unless line.empty?
|
55
|
+
end
|
55
56
|
end
|
56
57
|
end
|
57
58
|
rescue
|
@@ -0,0 +1,20 @@
|
|
1
|
+
require 'marionetta/command_runner'
|
2
|
+
|
3
|
+
module Marionetta
|
4
|
+
module Commandable
|
5
|
+
### Dependency Injection
|
6
|
+
|
7
|
+
# To use your own alternative to `CommandRunner` you can
|
8
|
+
# set an object of your choice via the `.cmd=` method.
|
9
|
+
#
|
10
|
+
attr_writer :cmd
|
11
|
+
|
12
|
+
private
|
13
|
+
|
14
|
+
attr_reader :server
|
15
|
+
|
16
|
+
def cmd()
|
17
|
+
@cmd ||= CommandRunner.new(server)
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
@@ -0,0 +1,58 @@
|
|
1
|
+
require 'marionetta/commandable'
|
2
|
+
|
3
|
+
module Marionetta
|
4
|
+
class DirectorySync
|
5
|
+
include Commandable
|
6
|
+
|
7
|
+
def self.sync(server, from, to, options)
|
8
|
+
new(server).sync(from, to, options)
|
9
|
+
end
|
10
|
+
|
11
|
+
def initialize(server)
|
12
|
+
@server = server
|
13
|
+
end
|
14
|
+
|
15
|
+
def sync(from, to, options)
|
16
|
+
create_dir(to)
|
17
|
+
sync_dir(from, to, options[:exclude])
|
18
|
+
end
|
19
|
+
|
20
|
+
private
|
21
|
+
|
22
|
+
def create_dir(dir)
|
23
|
+
cmd.ssh("test -d #{dir} || mkdir -p #{dir}")
|
24
|
+
end
|
25
|
+
|
26
|
+
def rsync_exclude_files(from, exclude_files)
|
27
|
+
exclude_files = exclude_files.clone
|
28
|
+
|
29
|
+
exclude_files.map! {|f| Dir["#{from}/#{f}"]}
|
30
|
+
exclude_files.flatten!
|
31
|
+
|
32
|
+
exclude_files.map! {|f| f.sub(from + '/', '')}
|
33
|
+
|
34
|
+
return exclude_files
|
35
|
+
end
|
36
|
+
|
37
|
+
def rsync_exclude_flags(exclude_files)
|
38
|
+
exclude_files.map! {|f| ['--exclude', f]}
|
39
|
+
exclude_files.flatten!
|
40
|
+
|
41
|
+
return exclude_files
|
42
|
+
end
|
43
|
+
|
44
|
+
def sync_dir(from, to, exclude_files = [])
|
45
|
+
args = [Dir[from+'/*'], to]
|
46
|
+
|
47
|
+
unless exclude_files.empty?
|
48
|
+
args.concat(rsync_exclude_flags(rsync_exclude_files(from, exclude_files)))
|
49
|
+
end
|
50
|
+
|
51
|
+
unless cmd.put(*args)
|
52
|
+
server[:logger].fatal(cmd.last)
|
53
|
+
server[:logger].fatal('Could not rsync cache dir')
|
54
|
+
exit(1)
|
55
|
+
end
|
56
|
+
end
|
57
|
+
end
|
58
|
+
end
|
@@ -5,11 +5,13 @@
|
|
5
5
|
# maintains a folder of releases so you may rollback quickly.
|
6
6
|
#
|
7
7
|
require 'marionetta'
|
8
|
-
require 'marionetta/
|
8
|
+
require 'marionetta/commandable'
|
9
|
+
require 'marionetta/directory_sync'
|
9
10
|
|
10
11
|
module Marionetta
|
11
12
|
module Manipulators
|
12
13
|
class Deployer
|
14
|
+
include Commandable
|
13
15
|
|
14
16
|
### RakeHelper tasks
|
15
17
|
|
@@ -75,8 +77,7 @@ module Marionetta
|
|
75
77
|
def deploy()
|
76
78
|
release = create_release_name()
|
77
79
|
|
78
|
-
|
79
|
-
sync_cache_dir()
|
80
|
+
DirectorySync.sync(server, from_dir, cache_dir, server[:deployer])
|
80
81
|
copy_cache_dir_to_release(release)
|
81
82
|
|
82
83
|
send_scripts()
|
@@ -117,21 +118,8 @@ module Marionetta
|
|
117
118
|
symlink_release_dir(rollback_to_release)
|
118
119
|
end
|
119
120
|
end
|
120
|
-
|
121
|
-
### Dependency Injection
|
122
|
-
|
123
|
-
# To use your own alternative to `CommandRunner` you can
|
124
|
-
# set an object of your choice via the `.cmd=` method.
|
125
|
-
#
|
126
|
-
attr_writer :cmd
|
127
121
|
|
128
122
|
private
|
129
|
-
|
130
|
-
attr_reader :server
|
131
|
-
|
132
|
-
def cmd()
|
133
|
-
@cmd ||= CommandRunner.new(server)
|
134
|
-
end
|
135
123
|
|
136
124
|
def from_dir()
|
137
125
|
server[:deployer][:from]
|
@@ -165,12 +153,6 @@ module Marionetta
|
|
165
153
|
"#{to_dir}/current"
|
166
154
|
end
|
167
155
|
|
168
|
-
def fatal(message)
|
169
|
-
server[:logger].fatal(cmd.last)
|
170
|
-
server[:logger].fatal(message)
|
171
|
-
exit(1)
|
172
|
-
end
|
173
|
-
|
174
156
|
def create_release_name()
|
175
157
|
name = timestamp
|
176
158
|
|
@@ -186,32 +168,6 @@ module Marionetta
|
|
186
168
|
return name
|
187
169
|
end
|
188
170
|
|
189
|
-
def rsync_exclude_flags(exclude_files)
|
190
|
-
exclude_files = exclude_files.clone
|
191
|
-
exclude_files.map! {|f| Dir["#{from_dir}/#{f}"]}
|
192
|
-
exclude_files.flatten!
|
193
|
-
exclude_files.map! {|f| f.sub(from_dir+'/', '')}
|
194
|
-
exclude_files.map! {|f| ['--exclude', f]}
|
195
|
-
exclude_files.flatten!
|
196
|
-
return exclude_files
|
197
|
-
end
|
198
|
-
|
199
|
-
def create_cache_dir()
|
200
|
-
cmd.ssh("test -d #{cache_dir} || mkdir -p #{cache_dir}")
|
201
|
-
end
|
202
|
-
|
203
|
-
def sync_cache_dir()
|
204
|
-
args = [Dir[from_dir+'/*'], cache_dir]
|
205
|
-
|
206
|
-
if server[:deployer].has_key?(:exclude)
|
207
|
-
args.concat(rsync_exclude_flags(server[:deployer][:exclude]))
|
208
|
-
end
|
209
|
-
|
210
|
-
unless cmd.put(*args)
|
211
|
-
fatal('Could not rsync cache dir')
|
212
|
-
end
|
213
|
-
end
|
214
|
-
|
215
171
|
def copy_cache_dir_to_release(release)
|
216
172
|
release_dir = release_dir(release)
|
217
173
|
cmd.ssh("mkdir -p #{releases_dir} && cp -r #{cache_dir} #{release_dir}")
|
@@ -247,7 +203,9 @@ module Marionetta
|
|
247
203
|
release_dir = release_dir(release)
|
248
204
|
|
249
205
|
unless cmd.ssh("rm -f #{current_dir} && ln -s #{release_dir} #{current_dir}")
|
250
|
-
fatal(
|
206
|
+
server[:logger].fatal(cmd.last)
|
207
|
+
server[:logger].fatal('Could not symlink release as current')
|
208
|
+
exit(1)
|
251
209
|
end
|
252
210
|
end
|
253
211
|
|
@@ -7,11 +7,12 @@
|
|
7
7
|
# master or want to push changes from your machine directly to
|
8
8
|
# nodes them this class maybe what you're looking for.
|
9
9
|
#
|
10
|
-
require 'marionetta/
|
10
|
+
require 'marionetta/commandable'
|
11
11
|
|
12
12
|
module Marionetta
|
13
13
|
module Manipulators
|
14
14
|
class Puppet
|
15
|
+
include Marionetta::Commandable
|
15
16
|
|
16
17
|
### RakeHelper tasks
|
17
18
|
|
@@ -52,7 +53,10 @@ module Marionetta
|
|
52
53
|
# to install puppet on debian or ubuntu servers.
|
53
54
|
#
|
54
55
|
def install()
|
55
|
-
|
56
|
+
unless server[:puppet].has_key?(:use_distro_repo) and server[:puppet][:use_distro_repo] == true
|
57
|
+
install_deb_repo
|
58
|
+
end
|
59
|
+
|
56
60
|
install_deb
|
57
61
|
end
|
58
62
|
|
@@ -71,21 +75,8 @@ module Marionetta
|
|
71
75
|
send_archive
|
72
76
|
apply_archive
|
73
77
|
end
|
74
|
-
|
75
|
-
### Dependency Injection
|
76
|
-
|
77
|
-
# To use your own alternative to `CommandRunner` you can
|
78
|
-
# set an object of your choice via the `.cmd=` method.
|
79
|
-
#
|
80
|
-
attr_writer :cmd
|
81
78
|
|
82
79
|
private
|
83
|
-
|
84
|
-
attr_reader :server
|
85
|
-
|
86
|
-
def cmd()
|
87
|
-
@cmd ||= CommandRunner.new(server)
|
88
|
-
end
|
89
80
|
|
90
81
|
def installed?()
|
91
82
|
cmd.ssh('which puppet')
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: marionetta
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.4.
|
4
|
+
version: 0.4.7
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2013-02-
|
12
|
+
date: 2013-02-08 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: open4
|
@@ -140,6 +140,8 @@ files:
|
|
140
140
|
- Rakefile
|
141
141
|
- lib/marionetta.rb
|
142
142
|
- lib/marionetta/command_runner.rb
|
143
|
+
- lib/marionetta/commandable.rb
|
144
|
+
- lib/marionetta/directory_sync.rb
|
143
145
|
- lib/marionetta/group.rb
|
144
146
|
- lib/marionetta/manipulators.rb
|
145
147
|
- lib/marionetta/manipulators/debloyer.rb
|
@@ -175,12 +177,18 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
175
177
|
- - ! '>='
|
176
178
|
- !ruby/object:Gem::Version
|
177
179
|
version: '0'
|
180
|
+
segments:
|
181
|
+
- 0
|
182
|
+
hash: 144075808825737942
|
178
183
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
179
184
|
none: false
|
180
185
|
requirements:
|
181
186
|
- - ! '>='
|
182
187
|
- !ruby/object:Gem::Version
|
183
188
|
version: '0'
|
189
|
+
segments:
|
190
|
+
- 0
|
191
|
+
hash: 144075808825737942
|
184
192
|
requirements: []
|
185
193
|
rubyforge_project:
|
186
194
|
rubygems_version: 1.8.24
|