kuzushi 0.0.8 → 0.0.9
Sign up to get free protection for your applications and to get access to all the features.
- data/VERSION +1 -1
- data/lib/kuzushi.rb +85 -46
- metadata +2 -2
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.0.
|
1
|
+
0.0.9
|
data/lib/kuzushi.rb
CHANGED
@@ -4,6 +4,12 @@ require 'restclient'
|
|
4
4
|
require 'ostruct'
|
5
5
|
require 'rush'
|
6
6
|
require 'ohai'
|
7
|
+
require 'erb'
|
8
|
+
|
9
|
+
## IDEAS
|
10
|
+
|
11
|
+
## firewall until ready
|
12
|
+
## ruby 1.9 compatibility
|
7
13
|
|
8
14
|
class Kuzushi
|
9
15
|
def initialize(url)
|
@@ -15,10 +21,29 @@ class Kuzushi
|
|
15
21
|
@tasks = []
|
16
22
|
load_config_stack(@name)
|
17
23
|
@config = @configs.reverse.inject({}) { |i,c| i.merge(c) }
|
24
|
+
end
|
25
|
+
|
26
|
+
def init
|
27
|
+
@init = true
|
28
|
+
start
|
29
|
+
end
|
30
|
+
|
31
|
+
def start
|
32
|
+
process_stack
|
33
|
+
puts "----"
|
34
|
+
@tasks.each do |t|
|
35
|
+
puts "TASK: #{t[:description]}"
|
36
|
+
t[:blk].call
|
37
|
+
end
|
38
|
+
puts "----"
|
39
|
+
end
|
40
|
+
|
41
|
+
protected
|
42
|
+
|
43
|
+
def system
|
18
44
|
ohai = Ohai::System.new
|
19
45
|
ohai.all_plugins
|
20
|
-
|
21
|
-
process_stack
|
46
|
+
ohai
|
22
47
|
end
|
23
48
|
|
24
49
|
def load_config_stack(name)
|
@@ -36,12 +61,11 @@ class Kuzushi
|
|
36
61
|
process :local_packages
|
37
62
|
process :gems
|
38
63
|
process :volumes
|
39
|
-
process :raids
|
40
|
-
process :mounts
|
41
64
|
process :files
|
42
65
|
process :users
|
43
66
|
|
44
67
|
script get("after")
|
68
|
+
script get("init") if init?
|
45
69
|
end
|
46
70
|
|
47
71
|
## magic goes here
|
@@ -59,6 +83,7 @@ class Kuzushi
|
|
59
83
|
send("process_#{type}", item)
|
60
84
|
end
|
61
85
|
script item["after"]
|
86
|
+
script item["init"] if init?
|
62
87
|
end
|
63
88
|
end
|
64
89
|
end
|
@@ -66,7 +91,7 @@ class Kuzushi
|
|
66
91
|
def process_packages
|
67
92
|
@packages = get_array("packages")
|
68
93
|
task "install packages" do
|
69
|
-
shell "apt-get update && apt-get upgrade -y && apt-get install -y #{@packages.join(" ")}"
|
94
|
+
shell "apt-get update && apt-get upgrade -y && apt-get install -y #{@packages.join(" ")}"
|
70
95
|
end
|
71
96
|
end
|
72
97
|
|
@@ -85,39 +110,56 @@ class Kuzushi
|
|
85
110
|
end
|
86
111
|
|
87
112
|
def process_volumes(v)
|
113
|
+
handle_ebs v if v.type == "ebs"
|
114
|
+
handle_raid v if v.type == "raid"
|
115
|
+
set_readahead v if v.readahead
|
116
|
+
set_scheduler v if v.scheduler
|
117
|
+
handle_format v if v.format
|
118
|
+
handle_mount v if v.mount
|
119
|
+
end
|
120
|
+
|
121
|
+
def handle_ebs(v)
|
88
122
|
task "wait for volume #{v.device}" do
|
89
123
|
wait_for_volume v.device
|
90
124
|
end
|
91
|
-
set_readahead v
|
92
|
-
set_scheduler v
|
93
|
-
check_format v
|
94
125
|
end
|
95
126
|
|
96
|
-
def
|
97
|
-
task "
|
98
|
-
|
127
|
+
def handle_raid(r)
|
128
|
+
task "create raid #{r.device}", :init => true do
|
129
|
+
shell "mdadm --create #{r.device} -n #{r.drives.size} -l #{r.level} -c #{r.chunksize || 64} #{r.drives.join(" ")}"
|
130
|
+
end
|
131
|
+
task "assemble raid #{r.device}" do ## assemble fails a lot with device busy - is udev to blame :(
|
132
|
+
if not dev_exists? r.device
|
133
|
+
shell "service stop udev"
|
99
134
|
shell "mdadm --assemble #{r.device} #{r.drives.join(" ")}"
|
100
|
-
|
101
|
-
## sometimes the disks come back with odd error messages - retry seems to be the best option
|
102
|
-
puts "error: #{o.message}"
|
103
|
-
retry
|
135
|
+
shell "service start udev"
|
104
136
|
end
|
105
137
|
end
|
106
|
-
set_readahead r
|
107
|
-
set_scheduler r
|
108
|
-
check_format r
|
109
138
|
add_package "mdadm"
|
110
139
|
end
|
111
140
|
|
112
|
-
def
|
113
|
-
task "mount #{m.
|
114
|
-
shell "mkdir -p #{m.
|
141
|
+
def handle_mount(m)
|
142
|
+
task "mount #{m.device}" do
|
143
|
+
shell "mkdir -p #{m.mount} && mount -o #{m.options || "noatime"} #{m.device} #{m.mount}" unless mounted?(m.device)
|
115
144
|
end
|
116
145
|
end
|
117
146
|
|
147
|
+
def system_arch
|
148
|
+
system.kernel["machine"]
|
149
|
+
end
|
150
|
+
|
151
|
+
def mounted?(dev)
|
152
|
+
!!system.filesystem[dev]["mount"]
|
153
|
+
end
|
154
|
+
|
155
|
+
def package_arch
|
156
|
+
`dpkg --print-architecture`.chomp
|
157
|
+
end
|
158
|
+
|
118
159
|
def process_files(f)
|
119
160
|
fetch("/templates/#{f.template}") do |file|
|
120
161
|
task "setting up #{f.file}" do
|
162
|
+
@system = system
|
121
163
|
t = ERB.new File.read(file), 0, '<>'
|
122
164
|
File.open(f.file,"w") { |f| f.write(t.render) }
|
123
165
|
end
|
@@ -129,26 +171,26 @@ class Kuzushi
|
|
129
171
|
task "add authorized_key for user #{user.name}" do
|
130
172
|
shell "su - #{user.name} -c 'mkdir -p .ssh; echo \"#{key}\" >> .ssh/authorized_keys; chmod -R 0600 .ssh'"
|
131
173
|
end
|
132
|
-
end
|
174
|
+
end
|
133
175
|
end
|
134
176
|
|
135
177
|
def set_readahead(v)
|
136
|
-
|
137
|
-
|
138
|
-
shell "blockdev --setra #{v.readahead} #{v.device}"
|
139
|
-
end
|
178
|
+
task "set readahead for #{v.device}" do
|
179
|
+
shell "blockdev --setra #{v.readahead} #{v.device}"
|
140
180
|
end
|
141
181
|
end
|
142
182
|
|
143
183
|
def set_scheduler(v)
|
144
|
-
|
145
|
-
|
146
|
-
shell "echo #{v.scheduler} > /sys/block/#{File.basename(v.device)}/queue/scheduler"
|
147
|
-
end
|
184
|
+
task "set scheduler for #{v.device}" do
|
185
|
+
shell "echo #{v.scheduler} > /sys/block/#{File.basename(v.device)}/queue/scheduler"
|
148
186
|
end
|
149
187
|
end
|
150
188
|
|
151
|
-
def
|
189
|
+
def handle_format(v)
|
190
|
+
task "formatting #{v.device}", :init => true do
|
191
|
+
label = "-L " + v.label rescue ""
|
192
|
+
"mkfs.#{v.format} #{label} #{v.device}"
|
193
|
+
end
|
152
194
|
add_package "xfsprogs" if v.format == "xfs"
|
153
195
|
end
|
154
196
|
|
@@ -157,7 +199,7 @@ class Kuzushi
|
|
157
199
|
end
|
158
200
|
|
159
201
|
def package(p, &block)
|
160
|
-
fetch("/packages/#{p}
|
202
|
+
fetch("/packages/#{p}_#{package_arch}.deb") do |file|
|
161
203
|
block.call(file)
|
162
204
|
end
|
163
205
|
end
|
@@ -221,31 +263,28 @@ class Kuzushi
|
|
221
263
|
end
|
222
264
|
|
223
265
|
def wait_for_volume(vol)
|
224
|
-
|
266
|
+
## Maybe use ohai here instead -- FIXME
|
267
|
+
until dev_exists? vol do
|
225
268
|
puts "waiting for volume #{vol}"
|
226
269
|
sleep 2
|
227
270
|
end
|
228
271
|
end
|
229
272
|
|
230
|
-
def
|
231
|
-
puts "
|
232
|
-
|
233
|
-
puts "TASK: #{t[:description]}"
|
234
|
-
t[:blk].call
|
235
|
-
end
|
236
|
-
puts "----"
|
273
|
+
def shell(cmd)
|
274
|
+
puts "# #{cmd}"
|
275
|
+
puts Rush.bash cmd
|
237
276
|
end
|
238
277
|
|
239
|
-
def
|
240
|
-
|
241
|
-
puts Rush.bash cmd, :env => env
|
278
|
+
def init?
|
279
|
+
@init ||= false
|
242
280
|
end
|
243
281
|
|
244
|
-
def task(description, &blk)
|
282
|
+
def task(description, options = {} &blk)
|
283
|
+
return if options[:init] and not init?
|
245
284
|
@tasks << { :description => description, :blk => blk }
|
246
285
|
end
|
247
286
|
|
248
|
-
def
|
249
|
-
|
287
|
+
def dev_exists?(dev)
|
288
|
+
File.exists?("/sys/block/#{File.basename(dev)}")
|
250
289
|
end
|
251
290
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: kuzushi
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.9
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Orion Henry
|
@@ -9,7 +9,7 @@ autorequire:
|
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
11
|
|
12
|
-
date: 2010-02-
|
12
|
+
date: 2010-02-21 00:00:00 -05:00
|
13
13
|
default_executable: kuzushi
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|