ironfan 3.1.7 → 3.2.2

Sign up to get free protection for your applications and to get access to all the features.
Files changed (63) hide show
  1. data/CHANGELOG.md +11 -0
  2. data/Gemfile +15 -12
  3. data/Rakefile +1 -1
  4. data/VERSION +1 -1
  5. data/config/ubuntu10.04-ironfan.erb +10 -0
  6. data/config/ubuntu11.10-ironfan.erb +10 -0
  7. data/ironfan.gemspec +29 -54
  8. data/lib/chef/knife/bootstrap/centos6.2-ironfan.erb +10 -0
  9. data/lib/chef/knife/bootstrap/ubuntu10.04-ironfan.erb +10 -0
  10. data/lib/chef/knife/bootstrap/ubuntu11.10-ironfan.erb +10 -0
  11. data/lib/chef/knife/cluster_kick.rb +7 -2
  12. data/lib/chef/knife/cluster_launch.rb +3 -0
  13. data/lib/chef/knife/cluster_ssh.rb +3 -3
  14. data/lib/chef/knife/ironfan_knife_common.rb +21 -0
  15. data/lib/chef/knife/ironfan_script.rb +2 -0
  16. data/lib/ironfan/chef_layer.rb +9 -9
  17. data/lib/ironfan/cloud.rb +232 -360
  18. data/lib/ironfan/cluster.rb +3 -3
  19. data/lib/ironfan/compute.rb +26 -40
  20. data/lib/ironfan/deprecated.rb +45 -10
  21. data/lib/ironfan/discovery.rb +1 -1
  22. data/lib/ironfan/dsl_builder.rb +99 -0
  23. data/lib/ironfan/facet.rb +2 -3
  24. data/lib/ironfan/fog_layer.rb +14 -10
  25. data/lib/ironfan/private_key.rb +1 -1
  26. data/lib/ironfan/security_group.rb +46 -44
  27. data/lib/ironfan/server.rb +26 -52
  28. data/lib/ironfan/server_slice.rb +13 -19
  29. data/lib/ironfan/volume.rb +47 -59
  30. data/lib/ironfan.rb +5 -4
  31. metadata +116 -122
  32. data/lib/ironfan/dsl_object.rb +0 -124
  33. data/notes/Backup of ec2-pricing_and_capacity.numbers +0 -0
  34. data/notes/Home.md +0 -45
  35. data/notes/INSTALL-cloud_setup.md +0 -103
  36. data/notes/INSTALL.md +0 -134
  37. data/notes/Ironfan-Roadmap.md +0 -70
  38. data/notes/advanced-superpowers.md +0 -16
  39. data/notes/aws_servers.jpg +0 -0
  40. data/notes/aws_user_key.png +0 -0
  41. data/notes/cookbook-versioning.md +0 -11
  42. data/notes/core_concepts.md +0 -200
  43. data/notes/declaring_volumes.md +0 -3
  44. data/notes/design_notes-aspect_oriented_devops.md +0 -36
  45. data/notes/design_notes-ci_testing.md +0 -169
  46. data/notes/design_notes-cookbook_event_ordering.md +0 -249
  47. data/notes/design_notes-meta_discovery.md +0 -59
  48. data/notes/ec2-pricing_and_capacity.md +0 -69
  49. data/notes/ec2-pricing_and_capacity.numbers +0 -0
  50. data/notes/homebase-layout.txt +0 -102
  51. data/notes/knife-cluster-commands.md +0 -18
  52. data/notes/named-cloud-objects.md +0 -11
  53. data/notes/opscode_org_key.png +0 -0
  54. data/notes/opscode_user_key.png +0 -0
  55. data/notes/philosophy.md +0 -13
  56. data/notes/rake_tasks.md +0 -24
  57. data/notes/renamed-recipes.txt +0 -142
  58. data/notes/silverware.md +0 -85
  59. data/notes/style_guide.md +0 -300
  60. data/notes/tips_and_troubleshooting.md +0 -92
  61. data/notes/version-3_2.md +0 -273
  62. data/notes/walkthrough-hadoop.md +0 -168
  63. data/notes/walkthrough-web.md +0 -166
data/CHANGELOG.md CHANGED
@@ -1,3 +1,14 @@
1
+ # v3.2.0: First refactoring pass in preparation for multi-cloud support
2
+ * Rebuilt the internal models of Ironfan to use gorillib's Field/Model/Builder architecture.
3
+ * [#145](https://github.com/infochimps-labs/ironfan/pull/145): node attribues should be 'normal', not 'override' -- they don't show up as printed on the node otherwise
4
+ * [#144](https://github.com/infochimps-labs/ironfan/pull/144): knife cluster ssh sets exit status based on commands' exit status
5
+ * [#139](https://github.com/infochimps-labs/ironfan/pull/139): Fix detection of hostname in cluster_launch
6
+
7
+ # v3.1.6
8
+ * [#136](https://github.com/infochimps-labs/ironfan/pull/136): Basic support for VPC
9
+ * cleanup of gemspec version constraints, including move to chef 0.10.10
10
+ * CentOS compatibility tweaks to several cookbooks
11
+
1
12
  # v3.1.5: A bug with quoting in bootstrap scripts
2
13
 
3
14
  * Bootstrap scripts with env vars were being interpolated twice, so the bootstrap script quoting was changed to use `'` (single-quote) semantics. I am a bit troubled, because I can't tell when this regression happened. I believe I introduced it while merging @gpaco's bootstrap scripts and didn't notice because the bug strikes most forcefully within the fenced-off 'Is ruby installed?' part. But there's a chance I just screwed over chef 0.10.04 users.
data/Gemfile CHANGED
@@ -3,27 +3,30 @@ source "http://rubygems.org"
3
3
  gem 'chef', ">= 0.10.4"
4
4
  gem 'fog', "~> 1.2"
5
5
  gem 'formatador', "~> 0.2"
6
- gem 'gorillib', "~> 0.1"
6
+ gem 'gorillib', "~> 0.4.2"
7
7
 
8
8
  group :development do
9
- gem 'bundler', ">= 1.1"
9
+ gem 'bundler', "~> 1.1"
10
+ gem 'rake'
11
+ gem 'rspec', "~> 2.8"
12
+ gem 'yard', ">= 0.7"
13
+ #
14
+ gem 'redcarpet', ">= 2.1"
15
+ gem 'oj', ">= 1.2"
16
+ gem 'json', :platform => :jruby
17
+ end
18
+
19
+ group :support do
10
20
  gem 'jeweler', ">= 1.6"
11
- gem 'rspec', "~> 2.5"
12
- gem 'yard', ">= 0.6"
13
- gem 'redcarpet', "~> 2"
21
+ gem 'pry'
22
+ gem 'grit'
14
23
  end
15
24
 
16
25
  group :test do
17
- gem 'rcov', ">= 0.9.9", :platform => :ruby_18
18
26
  gem 'simplecov', ">= 0.5", :platform => :ruby_19
19
27
  #
20
- gem 'ruby_gntp'
21
28
  gem 'guard', "~> 1"
22
29
  gem 'guard-rspec'
23
30
  gem 'guard-yard'
24
- end
25
-
26
- group :support do
27
- gem 'pry'
28
- gem 'grit'
31
+ gem 'ruby_gntp'
29
32
  end
data/Rakefile CHANGED
@@ -21,7 +21,7 @@
21
21
  require 'rubygems' unless defined?(Gem)
22
22
  require 'bundler'
23
23
  begin
24
- Bundler.setup(:default, :development)
24
+ Bundler.setup(:default, :development, :support)
25
25
  rescue Bundler::BundlerError => e
26
26
  $stderr.puts e.message
27
27
  $stderr.puts "Run `bundle install` to install missing gems"
data/VERSION CHANGED
@@ -1 +1 @@
1
- 3.1.7
1
+ 3.2.2
@@ -107,6 +107,16 @@ EOP
107
107
  awk NF /tmp/knife-bootstrap/validation.pem > /etc/chef/validation.pem
108
108
  <%- end %>
109
109
 
110
+ <% if @chef_config[:encrypted_data_bag_secret] -%>
111
+ (
112
+ cat <<'EOP'
113
+ <%= encrypted_data_bag_secret %>
114
+ EOP
115
+ ) > /tmp/encrypted_data_bag_secret
116
+ awk NF /tmp/encrypted_data_bag_secret > /etc/chef/encrypted_data_bag_secret
117
+ rm /tmp/encrypted_data_bag_secret
118
+ <% end -%>
119
+
110
120
  echo -e "`date` \n\n**** \n**** Nuking our temp files:\n****\n"
111
121
 
112
122
  cd /tmp
@@ -95,6 +95,16 @@ EOP
95
95
  awk NF /tmp/knife-bootstrap/validation.pem > /etc/chef/validation.pem
96
96
  <%- end %>
97
97
 
98
+ <% if @chef_config[:encrypted_data_bag_secret] -%>
99
+ (
100
+ cat <<'EOP'
101
+ <%= encrypted_data_bag_secret %>
102
+ EOP
103
+ ) > /tmp/encrypted_data_bag_secret
104
+ awk NF /tmp/encrypted_data_bag_secret > /etc/chef/encrypted_data_bag_secret
105
+ rm /tmp/encrypted_data_bag_secret
106
+ <% end -%>
107
+
98
108
  echo -e "`date` \n\n**** \n**** Nuking our temp files:\n****\n"
99
109
 
100
110
  cd /tmp
data/ironfan.gemspec CHANGED
@@ -5,11 +5,11 @@
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = "ironfan"
8
- s.version = "3.1.7"
8
+ s.version = "3.2.2"
9
9
 
10
10
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
11
  s.authors = ["Infochimps"]
12
- s.date = "2012-07-24"
12
+ s.date = "2012-09-10"
13
13
  s.description = "Ironfan allows you to orchestrate not just systems but clusters of machines. It includes a powerful layer on top of knife and a collection of cloud cookbooks."
14
14
  s.email = "coders@infochimps.com"
15
15
  s.extra_rdoc_files = [
@@ -62,7 +62,7 @@ Gem::Specification.new do |s|
62
62
  "lib/ironfan/compute.rb",
63
63
  "lib/ironfan/deprecated.rb",
64
64
  "lib/ironfan/discovery.rb",
65
- "lib/ironfan/dsl_object.rb",
65
+ "lib/ironfan/dsl_builder.rb",
66
66
  "lib/ironfan/facet.rb",
67
67
  "lib/ironfan/fog_layer.rb",
68
68
  "lib/ironfan/private_key.rb",
@@ -71,37 +71,6 @@ Gem::Specification.new do |s|
71
71
  "lib/ironfan/server.rb",
72
72
  "lib/ironfan/server_slice.rb",
73
73
  "lib/ironfan/volume.rb",
74
- "notes/Backup of ec2-pricing_and_capacity.numbers",
75
- "notes/Home.md",
76
- "notes/INSTALL-cloud_setup.md",
77
- "notes/INSTALL.md",
78
- "notes/Ironfan-Roadmap.md",
79
- "notes/advanced-superpowers.md",
80
- "notes/aws_servers.jpg",
81
- "notes/aws_user_key.png",
82
- "notes/cookbook-versioning.md",
83
- "notes/core_concepts.md",
84
- "notes/declaring_volumes.md",
85
- "notes/design_notes-aspect_oriented_devops.md",
86
- "notes/design_notes-ci_testing.md",
87
- "notes/design_notes-cookbook_event_ordering.md",
88
- "notes/design_notes-meta_discovery.md",
89
- "notes/ec2-pricing_and_capacity.md",
90
- "notes/ec2-pricing_and_capacity.numbers",
91
- "notes/homebase-layout.txt",
92
- "notes/knife-cluster-commands.md",
93
- "notes/named-cloud-objects.md",
94
- "notes/opscode_org_key.png",
95
- "notes/opscode_user_key.png",
96
- "notes/philosophy.md",
97
- "notes/rake_tasks.md",
98
- "notes/renamed-recipes.txt",
99
- "notes/silverware.md",
100
- "notes/style_guide.md",
101
- "notes/tips_and_troubleshooting.md",
102
- "notes/version-3_2.md",
103
- "notes/walkthrough-hadoop.md",
104
- "notes/walkthrough-web.md",
105
74
  "spec/ironfan/cluster_spec.rb",
106
75
  "spec/ironfan/facet_spec.rb",
107
76
  "spec/ironfan/server_slice_spec.rb",
@@ -115,9 +84,9 @@ Gem::Specification.new do |s|
115
84
  s.homepage = "http://infochimps.com/labs"
116
85
  s.licenses = ["apachev2"]
117
86
  s.require_paths = ["lib"]
118
- s.rubygems_version = "1.8.11"
87
+ s.rubygems_version = "1.8.24"
119
88
  s.summary = "Ironfan allows you to orchestrate not just systems but clusters of machines. It includes a powerful layer on top of knife and a collection of cloud cookbooks."
120
- s.test_files = ["spec/ironfan/cluster_spec.rb", "spec/ironfan/facet_spec.rb", "spec/ironfan/server_slice_spec.rb", "spec/ironfan/server_spec.rb", "spec/ironfan_spec.rb", "spec/spec_helper/dummy_chef.rb", "spec/spec_helper.rb", "spec/test_config.rb"]
89
+ s.test_files = ["spec/ironfan_spec.rb", "spec/spec_helper/dummy_chef.rb", "spec/ironfan/cluster_spec.rb", "spec/ironfan/server_slice_spec.rb", "spec/ironfan/server_spec.rb", "spec/ironfan/facet_spec.rb", "spec/spec_helper.rb", "spec/test_config.rb"]
121
90
 
122
91
  if s.respond_to? :specification_version then
123
92
  s.specification_version = 3
@@ -126,33 +95,39 @@ Gem::Specification.new do |s|
126
95
  s.add_runtime_dependency(%q<chef>, [">= 0.10.4"])
127
96
  s.add_runtime_dependency(%q<fog>, ["~> 1.2"])
128
97
  s.add_runtime_dependency(%q<formatador>, ["~> 0.2"])
129
- s.add_runtime_dependency(%q<gorillib>, ["~> 0.1"])
130
- s.add_development_dependency(%q<bundler>, [">= 1.1"])
131
- s.add_development_dependency(%q<jeweler>, [">= 1.6"])
132
- s.add_development_dependency(%q<rspec>, ["~> 2.5"])
133
- s.add_development_dependency(%q<yard>, [">= 0.6"])
134
- s.add_development_dependency(%q<redcarpet>, ["~> 2"])
98
+ s.add_runtime_dependency(%q<gorillib>, ["~> 0.4.2"])
99
+ s.add_development_dependency(%q<bundler>, ["~> 1.1"])
100
+ s.add_development_dependency(%q<rake>, [">= 0"])
101
+ s.add_development_dependency(%q<rspec>, ["~> 2.8"])
102
+ s.add_development_dependency(%q<yard>, [">= 0.7"])
103
+ s.add_development_dependency(%q<redcarpet>, [">= 2.1"])
104
+ s.add_development_dependency(%q<oj>, [">= 1.2"])
105
+ s.add_development_dependency(%q<json>, [">= 0"])
135
106
  else
136
107
  s.add_dependency(%q<chef>, [">= 0.10.4"])
137
108
  s.add_dependency(%q<fog>, ["~> 1.2"])
138
109
  s.add_dependency(%q<formatador>, ["~> 0.2"])
139
- s.add_dependency(%q<gorillib>, ["~> 0.1"])
140
- s.add_dependency(%q<bundler>, [">= 1.1"])
141
- s.add_dependency(%q<jeweler>, [">= 1.6"])
142
- s.add_dependency(%q<rspec>, ["~> 2.5"])
143
- s.add_dependency(%q<yard>, [">= 0.6"])
144
- s.add_dependency(%q<redcarpet>, ["~> 2"])
110
+ s.add_dependency(%q<gorillib>, ["~> 0.4.2"])
111
+ s.add_dependency(%q<bundler>, ["~> 1.1"])
112
+ s.add_dependency(%q<rake>, [">= 0"])
113
+ s.add_dependency(%q<rspec>, ["~> 2.8"])
114
+ s.add_dependency(%q<yard>, [">= 0.7"])
115
+ s.add_dependency(%q<redcarpet>, [">= 2.1"])
116
+ s.add_dependency(%q<oj>, [">= 1.2"])
117
+ s.add_dependency(%q<json>, [">= 0"])
145
118
  end
146
119
  else
147
120
  s.add_dependency(%q<chef>, [">= 0.10.4"])
148
121
  s.add_dependency(%q<fog>, ["~> 1.2"])
149
122
  s.add_dependency(%q<formatador>, ["~> 0.2"])
150
- s.add_dependency(%q<gorillib>, ["~> 0.1"])
151
- s.add_dependency(%q<bundler>, [">= 1.1"])
152
- s.add_dependency(%q<jeweler>, [">= 1.6"])
153
- s.add_dependency(%q<rspec>, ["~> 2.5"])
154
- s.add_dependency(%q<yard>, [">= 0.6"])
155
- s.add_dependency(%q<redcarpet>, ["~> 2"])
123
+ s.add_dependency(%q<gorillib>, ["~> 0.4.2"])
124
+ s.add_dependency(%q<bundler>, ["~> 1.1"])
125
+ s.add_dependency(%q<rake>, [">= 0"])
126
+ s.add_dependency(%q<rspec>, ["~> 2.8"])
127
+ s.add_dependency(%q<yard>, [">= 0.7"])
128
+ s.add_dependency(%q<redcarpet>, [">= 2.1"])
129
+ s.add_dependency(%q<oj>, [">= 1.2"])
130
+ s.add_dependency(%q<json>, [">= 0"])
156
131
  end
157
132
  end
158
133
 
@@ -89,6 +89,16 @@ EOP
89
89
  awk NF /tmp/knife-bootstrap/validation.pem > /etc/chef/validation.pem
90
90
  <%- end %>
91
91
 
92
+ <% if @chef_config[:encrypted_data_bag_secret] -%>
93
+ (
94
+ cat <<'EOP'
95
+ <%= encrypted_data_bag_secret %>
96
+ EOP
97
+ ) > /tmp/encrypted_data_bag_secret
98
+ awk NF /tmp/encrypted_data_bag_secret > /etc/chef/encrypted_data_bag_secret
99
+ rm /tmp/encrypted_data_bag_secret
100
+ <% end -%>
101
+
92
102
  echo -e "`date` \n\n**** \n**** Nuking our temp files:\n****\n"
93
103
 
94
104
  cd /tmp
@@ -107,6 +107,16 @@ EOP
107
107
  awk NF /tmp/knife-bootstrap/validation.pem > /etc/chef/validation.pem
108
108
  <%- end %>
109
109
 
110
+ <% if @chef_config[:encrypted_data_bag_secret] -%>
111
+ (
112
+ cat <<'EOP'
113
+ <%= encrypted_data_bag_secret %>
114
+ EOP
115
+ ) > /tmp/encrypted_data_bag_secret
116
+ awk NF /tmp/encrypted_data_bag_secret > /etc/chef/encrypted_data_bag_secret
117
+ rm /tmp/encrypted_data_bag_secret
118
+ <% end -%>
119
+
110
120
  echo -e "`date` \n\n**** \n**** Nuking our temp files:\n****\n"
111
121
 
112
122
  cd /tmp
@@ -95,6 +95,16 @@ EOP
95
95
  awk NF /tmp/knife-bootstrap/validation.pem > /etc/chef/validation.pem
96
96
  <%- end %>
97
97
 
98
+ <% if @chef_config[:encrypted_data_bag_secret] -%>
99
+ (
100
+ cat <<'EOP'
101
+ <%= encrypted_data_bag_secret %>
102
+ EOP
103
+ ) > /tmp/encrypted_data_bag_secret
104
+ awk NF /tmp/encrypted_data_bag_secret > /etc/chef/encrypted_data_bag_secret
105
+ rm /tmp/encrypted_data_bag_secret
106
+ <% end -%>
107
+
98
108
  echo -e "`date` \n\n**** \n**** Nuking our temp files:\n****\n"
99
109
 
100
110
  cd /tmp
@@ -42,6 +42,11 @@ class Chef
42
42
  :description => "Where to find the pid file. Typically /var/run/chef/client.pid (init.d) or /etc/sv/chef-client/supervise/pid (runit)",
43
43
  :default => "/etc/sv/chef-client/supervise/pid"
44
44
 
45
+ option :log_file,
46
+ :long => "--log_file",
47
+ :description => "Where to find the log file. Typically /var/log/chef/client.log",
48
+ :default => "/var/log/chef/client.log"
49
+
45
50
  def run
46
51
  @name_args = [ @name_args.join('-') ]
47
52
  config[:display_target] = true
@@ -62,7 +67,7 @@ if sudo -p 'knife sudo password: ' service chef-client status ; then
62
67
 
63
68
  # running
64
69
  pid_file="<%= config[:pid_file] %>"
65
- log_file=/var/log/chef/client.log
70
+ log_file=<%= config[:log_file] %>
66
71
 
67
72
  declare tail_pid
68
73
 
@@ -76,7 +81,7 @@ trap "on_exit" EXIT ERR
76
81
  pipe=/tmp/pipe-$$
77
82
  mkfifo $pipe
78
83
 
79
- tail -fn0 "$log_file" > $pipe &
84
+ tail -Fn0 "$log_file" > $pipe &
80
85
 
81
86
  tail_pid=$!
82
87
 
@@ -136,6 +136,9 @@ class Chef
136
136
  rescue Errno::ECONNREFUSED
137
137
  sleep 2
138
138
  false
139
+ rescue Errno::EHOSTUNREACH
140
+ sleep 2
141
+ false
139
142
  ensure
140
143
  tcp_socket && tcp_socket.close
141
144
  end
@@ -84,7 +84,7 @@ class Chef
84
84
  def ssh_command(command, subsession=nil)
85
85
  subsession ||= session
86
86
  command = fixup_sudo(command)
87
- notifications = []
87
+ #
88
88
  subsession.open_channel do |ch|
89
89
  ch.request_pty
90
90
  ch.exec command do |ch, success|
@@ -101,13 +101,12 @@ class Chef
101
101
  exit_status = data.read_long
102
102
  if exit_status != 0
103
103
  command_snippet = (command.length < 70) ? command : (command[0..45] + ' ... ' + command[-19..-1])
104
- notifications << [ichannel[:host], "'#{command_snippet.gsub(/[\r\n]+/, "; ")}' terminated with error status #{exit_status}", :err]
104
+ has_problem ->{ print_data(ichannel[:host], "'#{command_snippet.gsub(/[\r\n]+/, "; ")}' terminated with error status #{exit_status}", :err) }
105
105
  end
106
106
  end
107
107
  end
108
108
  end
109
109
  session.loop
110
- notifications.each{|args| print_data(*args) }
111
110
  end
112
111
 
113
112
  def cssh
@@ -133,6 +132,7 @@ class Chef
133
132
  end
134
133
 
135
134
  session.close
135
+ exit_if_unhealthy!
136
136
  end
137
137
 
138
138
  end
@@ -163,6 +163,27 @@ module Ironfan
163
163
  ui.info("")
164
164
  end
165
165
 
166
+ # list of problems encountered
167
+ attr_accessor :problems
168
+ # register that a problem was encountered
169
+ def has_problem(desc)
170
+ (@problems||=[]) << desc
171
+ end
172
+ # healthy if no problems
173
+ def healthy?() problems.blank? ; end
174
+
175
+ def exit_if_unhealthy!
176
+ return if healthy?
177
+ problems.each do |problem|
178
+ if problem.respond_to?(:call)
179
+ problem.call
180
+ else
181
+ ui.warn(problem)
182
+ end
183
+ end
184
+ exit(2) if not healthy?
185
+ end
186
+
166
187
  #
167
188
  # Announce a new section of tasks
168
189
  #
@@ -57,6 +57,8 @@ module Ironfan
57
57
  ui.info("")
58
58
  ui.info "Finished! Current state:"
59
59
  display(target)
60
+ #
61
+ exit_if_unhealthy!
60
62
  end
61
63
 
62
64
  def perform_execution(target)
@@ -73,12 +73,12 @@ module Ironfan
73
73
  @chef_client = cluster.find_client(fullname) || false
74
74
  end
75
75
 
76
- # The chef node, if it already exists in the server.
77
- # Use the 'ensure' method to create/update it.
78
- def chef_node
79
- return @chef_node unless @chef_node.nil?
80
- @chef_node = cluster.find_node(fullname) || false
81
- end
76
+ # # The chef node, if it already exists in the server.
77
+ # # Use the 'ensure' method to create/update it.
78
+ # def chef_node
79
+ # return @chef_node unless @chef_node.nil?
80
+ # @chef_node = cluster.find_node(fullname) || false
81
+ # end
82
82
 
83
83
  # true if chef client is created and discovered
84
84
  def chef_client?
@@ -193,15 +193,15 @@ module Ironfan
193
193
  end
194
194
 
195
195
  def sync_volume_attributes
196
- composite_volumes.each do |vol_name, vol|
196
+ volumes.each_pair do |vol_name, vol|
197
197
  chef_node.normal[:volumes] ||= Mash.new
198
- chef_node.normal[:volumes][vol_name] = vol.to_mash.compact
198
+ chef_node.normal[:volumes][vol_name] = vol.attributes.compact
199
199
  end
200
200
  end
201
201
 
202
202
  def set_chef_node_attributes
203
203
  step(" setting node runlist and essential attributes")
204
- @chef_node.run_list = Chef::RunList.new(*@settings[:run_list])
204
+ @chef_node.run_list = Chef::RunList.new(*combined_run_list)
205
205
  @chef_node.normal[:organization] = organization if organization
206
206
  @chef_node.normal[:permanent] = cloud.permanent if cloud.permanent
207
207
  @chef_node.normal[:cluster_name] = cluster_name