kuzushi 0.0.7 → 0.0.8

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.
Files changed (4) hide show
  1. data/Rakefile +1 -0
  2. data/VERSION +1 -1
  3. data/lib/kuzushi.rb +25 -9
  4. metadata +11 -1
data/Rakefile CHANGED
@@ -13,6 +13,7 @@ Jeweler::Tasks.new do |s|
13
13
  s.add_dependency "rest-client"
14
14
  s.add_dependency "json"
15
15
  s.add_dependency "rush"
16
+ s.add_dependency "ohai"
16
17
  end
17
18
 
18
19
  Jeweler::RubyforgeTasks.new
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.0.7
1
+ 0.0.8
data/lib/kuzushi.rb CHANGED
@@ -3,24 +3,28 @@ require 'json'
3
3
  require 'restclient'
4
4
  require 'ostruct'
5
5
  require 'rush'
6
+ require 'ohai'
6
7
 
7
8
  class Kuzushi
8
9
  def initialize(url)
9
10
  @base_url = File.dirname(url)
10
11
  @name = File.basename(url)
11
12
  @config_names = []
12
- @config = []
13
+ @configs = []
13
14
  @packages = []
14
15
  @tasks = []
15
16
  load_config_stack(@name)
16
- @merge = @config.reverse.inject({}) { |i,c| i.merge(c) }
17
+ @config = @configs.reverse.inject({}) { |i,c| i.merge(c) }
18
+ ohai = Ohai::System.new
19
+ ohai.all_plugins
20
+ @system = ohai.data
17
21
  process_stack
18
22
  end
19
23
 
20
24
  def load_config_stack(name)
21
25
  @config_names << name
22
- @config << JSON.parse(RestClient.get("#{@base_url}/#{name}"))
23
- if import = @config.last["import"]
26
+ @configs << JSON.parse(RestClient.get("#{@base_url}/#{name}"))
27
+ if import = @configs.last["import"]
24
28
  load_config_stack(import)
25
29
  end
26
30
  end
@@ -84,8 +88,9 @@ class Kuzushi
84
88
  task "wait for volume #{v.device}" do
85
89
  wait_for_volume v.device
86
90
  end
87
- set_scheduler(v)
88
- check_format(v)
91
+ set_readahead v
92
+ set_scheduler v
93
+ check_format v
89
94
  end
90
95
 
91
96
  def process_raids(r)
@@ -93,12 +98,14 @@ class Kuzushi
93
98
  begin
94
99
  shell "mdadm --assemble #{r.device} #{r.drives.join(" ")}"
95
100
  rescue Object => o
101
+ ## sometimes the disks come back with odd error messages - retry seems to be the best option
96
102
  puts "error: #{o.message}"
97
103
  retry
98
104
  end
99
105
  end
106
+ set_readahead r
100
107
  set_scheduler r
101
- check_format r
108
+ check_format r
102
109
  add_package "mdadm"
103
110
  end
104
111
 
@@ -111,7 +118,8 @@ class Kuzushi
111
118
  def process_files(f)
112
119
  fetch("/templates/#{f.template}") do |file|
113
120
  task "setting up #{f.file}" do
114
- shell "erb #{f.template} > #{f.file}" ## FIXME
121
+ t = ERB.new File.read(file), 0, '<>'
122
+ File.open(f.file,"w") { |f| f.write(t.render) }
115
123
  end
116
124
  end
117
125
  end
@@ -124,6 +132,14 @@ class Kuzushi
124
132
  end
125
133
  end
126
134
 
135
+ def set_readahead(v)
136
+ if v.readahead
137
+ task "set readahead for #{v.device}" do
138
+ shell "blockdev --setra #{v.readahead} #{v.device}"
139
+ end
140
+ end
141
+ end
142
+
127
143
  def set_scheduler(v)
128
144
  if v.scheduler
129
145
  task "set scheduler for #{v.device}" do
@@ -197,7 +213,7 @@ class Kuzushi
197
213
  end
198
214
 
199
215
  def get(key)
200
- @merge[key.to_s]
216
+ @config[key.to_s]
201
217
  end
202
218
 
203
219
  def get_array(key)
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.7
4
+ version: 0.0.8
5
5
  platform: ruby
6
6
  authors:
7
7
  - Orion Henry
@@ -42,6 +42,16 @@ dependencies:
42
42
  - !ruby/object:Gem::Version
43
43
  version: "0"
44
44
  version:
45
+ - !ruby/object:Gem::Dependency
46
+ name: ohai
47
+ type: :runtime
48
+ version_requirement:
49
+ version_requirements: !ruby/object:Gem::Requirement
50
+ requirements:
51
+ - - ">="
52
+ - !ruby/object:Gem::Version
53
+ version: "0"
54
+ version:
45
55
  description: A tool used by the sumo gem for performing instance setup and management in AWS
46
56
  email: orion@heroku.com
47
57
  executables: