abiquo-chef-agent 1.0.11 → 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.
data/README.md CHANGED
@@ -1,6 +1,6 @@
1
1
  = abiquo-chef-agent
2
2
 
3
- Description goes here.
3
+ A simple boot time execution daemon that allow to execute the Chef configuration of an Abiquo virtual machine.
4
4
 
5
5
  == Contributing to abiquo-chef-agent
6
6
 
data/Rakefile CHANGED
@@ -12,8 +12,8 @@ Jeweler::Tasks.new do |gem|
12
12
  gem.license = "MIT"
13
13
  gem.summary = %Q{Abiquo Chef Agent}
14
14
  gem.description = %Q{Abiquo Chef Agent}
15
- gem.email = "salvador.girones@abiquo.com"
16
- gem.authors = ["Salvador Girones", "Sergio Rubio"]
15
+ gem.email = "ruby-gems@abiquo.com"
16
+ gem.authors = ["Salvador Girones", "Sergio Rubio", "Serafin Sedano"]
17
17
  gem.add_runtime_dependency 'run-as-root'
18
18
  gem.add_runtime_dependency 'chef'
19
19
  gem.add_runtime_dependency 'daemons'
data/bin/abiquo-chef-run CHANGED
@@ -77,7 +77,7 @@ else
77
77
  rescue Exception => e
78
78
  log "Error requesting node info from API", :error
79
79
  log e.message, :error
80
- log e.backtrace.join("\n "), :debug
80
+ log e.backtrace.join("\n ")
81
81
  exit 1
82
82
  end
83
83
  #
@@ -97,7 +97,7 @@ else
97
97
  rescue Exception => e
98
98
  log "Error parsing XML bootstrap file", :error
99
99
  log e.message, :error
100
- log e.backtrace.join("\n "), :debug
100
+ log e.backtrace.join("\n ")
101
101
  exit 1
102
102
  end
103
103
 
@@ -107,18 +107,18 @@ else
107
107
  File.open(Abiquo::Chef::Config.validation_cert, 'w') do |f|
108
108
  f.puts bootstrap_config.validation_cert
109
109
  end
110
+ log "Validation cert written"
110
111
 
111
112
  #
112
113
  # Get required node info and write chef-client config file
113
114
  #
114
115
  validation_client_name = bootstrap_config.validation_client_name
115
116
  chef_server_url = bootstrap_config.chef_server_url
116
- recipes = bootstrap_config.run_list
117
- if recipes.empty?
118
- log "No recipes selected", :warning
119
- recipes = []
117
+ node_config = bootstrap_config.node_config
118
+ if node_config['run_list']
119
+ log "Recipes found #{node_config.inspect}"
120
120
  else
121
- log "Recipes found #{recipes.inspect}"
121
+ log "No recipes selected", :warning
122
122
  end
123
123
  File.open('/etc/chef/client.rb', 'w') do |f|
124
124
  f.puts "log_level :info"
@@ -130,20 +130,11 @@ else
130
130
  #
131
131
  # Write first-boot.json attributes
132
132
  #
133
- if not recipes.empty?
134
- recipes_json = '"run_list": ['
135
- recipes_json << (recipes.map{ |r| "\"#{r}\""}).join(',')
136
- recipes_json << ']'
137
- File.open('/etc/chef/first-boot.json', 'w') do |f|
138
- f.puts "{"
139
- f.puts recipes_json
140
- f.puts "}"
141
- end
142
- else
143
- File.open('/etc/chef/first-boot.json', 'w') do |f|
144
- f.puts "{}"
145
- end
133
+ File.open('/etc/chef/first-boot.json', 'w') do |f|
134
+ node_config ||= {}
135
+ f.puts node_config.to_json
146
136
  end
137
+ log "Written '#{node_config.to_json}' to /etc/chef/first-boot.json file"
147
138
 
148
139
 
149
140
  #
@@ -153,7 +144,7 @@ else
153
144
 
154
145
  log "Setting hostname"
155
146
  output = `hostname #{node_name} 2>&1`
156
- log output, :debug
147
+ log output, :info
157
148
 
158
149
  net_config_file = '/etc/sysconfig/network'
159
150
  if File.exists? net_config_file
@@ -192,7 +183,7 @@ else
192
183
  end
193
184
  if $? != 0
194
185
  log "chef-client run failed", :error
195
- log output, :debug
186
+ log output, :info
196
187
  else
197
188
  log "Running chef-client in daemon mode"
198
189
  # Run the chef-client if not already running
@@ -202,7 +193,7 @@ else
202
193
  output = `#{cmd}`
203
194
  if $? != 0
204
195
  log "Running chef-client in daemon mode failed.", :error
205
- log output, :debug
196
+ log output
206
197
  else
207
198
  log "Success."
208
199
  end
@@ -1,9 +1,10 @@
1
1
  require 'xmlsimple'
2
+ require 'json'
2
3
 
3
4
  module Abiquo
4
5
  module Chef
5
6
 
6
- VERSION="1.0.11"
7
+ VERSION="2.0.0"
7
8
 
8
9
  class Config
9
10
  def self.chef_config_dir
@@ -34,7 +35,7 @@ module Abiquo
34
35
 
35
36
  class BootstrapConfigParser
36
37
 
37
- attr_reader :run_list, :node_name, :validation_client_name
38
+ attr_reader :node_config, :node_name, :validation_client_name
38
39
  attr_reader :chef_server_url, :validation_cert
39
40
 
40
41
  #
@@ -44,38 +45,42 @@ module Abiquo
44
45
  #
45
46
  def initialize(xml)
46
47
  @raw_xml = xml
47
- #
48
48
  # HACK, FIXME
49
- #
50
49
  @hash = XmlSimple.xml_in xml.gsub("&#xD;","\n")
51
50
  parse
52
51
  end
53
52
 
54
53
  def parse
54
+ validate
55
55
  @node_name = @hash['node'].first
56
- if not @node_name or @node_name.strip.chomp.empty?
57
- raise Exception.new("Invalid bootstrap XML. Missing <node> info.")
58
- end
56
+ raise Exception.new("Invalid bootstrap XML. Missing <node> info.") unless @node_name.is_a? String and not @node_name.strip.chomp.empty?
59
57
 
60
58
  @node_info = @hash['chef'].first
61
- if not @node_info
62
- raise Exception.new("Invalid bootstrap XML. Missing <chef> info.")
63
- end
64
59
 
65
60
  @validation_client_name = @node_info['validation-client-name'].first
66
- if not @validation_client_name or @validation_client_name.strip.chomp.empty?
67
- raise Exception.new("Invalid bootstrap XML. Missing <validation-client-name> info.")
68
- end
61
+ raise Exception.new("Invalid bootstrap XML. Missing <validation-client-name> info.") unless @validation_client_name.is_a? String and not @validation_client_name.strip.chomp.empty?
69
62
 
70
63
  @validation_cert = @node_info['validation-cert'].first
71
- if not @validation_cert or @validation_cert.strip.chomp.empty?
72
- raise Exception.new("Invalid bootstrap XML. Missing <validation-cert> info.")
73
- end
64
+ raise Exception.new("Invalid bootstrap XML. Missing <validation-cert> info.") unless @validation_cert.is_a? String and not @validation_cert.strip.chomp.empty?
65
+
74
66
  @chef_server_url = @node_info['chef-server-url'].first
75
- if not @chef_server_url or @chef_server_url.strip.chomp.empty?
76
- raise Exception.new("Invalid bootstrap XML. Missing <chef-server-url> info.")
77
- end
78
- @run_list = @node_info['runlist'].first['element'] || []
67
+ raise Exception.new("Invalid bootstrap XML. Missing <chef-server-url> info.") unless @chef_server_url.is_a? String and not @chef_server_url.strip.chomp.empty?
68
+
69
+ runlist = @node_info['runlist'].first['element']
70
+ attributes = @node_info['attributes'].first unless @node_info['attributes'].nil?
71
+ @node_config = JSON.parse(attributes || '{}')
72
+ @node_config.merge!(JSON.parse("{\"run_list\" : [#{runlist.map{ |r| "\"#{r}\""}.join(',')}]}")) if runlist
73
+ end
74
+
75
+ private
76
+
77
+ def validate
78
+ raise Exception.new "Invalid bootstrap XML. Missing <node> element." unless @hash.has_key? 'node'
79
+ raise Exception.new "Invalid bootstrap XML. Missing <chef> element." unless @hash.has_key? 'chef'
80
+ raise Exception.new("Invalid bootstrap XML. Missing <chef> info.") if @hash['chef'].empty? or @hash['chef'][0].empty?
81
+ raise Exception.new "Invalid bootstrap XML. Missing <validation-cert> element." unless @hash['chef'].first.has_key? 'validation-cert'
82
+ raise Exception.new "Invalid bootstrap XML. Missing <validation-client-name> element." unless @hash['chef'].first.has_key? 'validation-client-name'
83
+ raise Exception.new "Invalid bootstrap XML. Missing <chef-server-url> element." unless @hash['chef'].first.has_key? 'chef-server-url'
79
84
  end
80
85
 
81
86
  end
@@ -142,3 +147,4 @@ module Abiquo
142
147
  end
143
148
  end
144
149
  end
150
+
@@ -1 +1 @@
1
- <?xml version="1.0" encoding="UTF-8" standalone="yes"?><bootstrap><node>ABQ-d4542f23-a755-4d9a-96f3-1e31c7a269d5</node><chef><chef-server-url>https://api.opscode.com/organizations/chef_integration</chef-server-url><validation-client-name>chef_integration-validator</validation-client-name><validation-cert>-----BEGIN RSA PRIVATE KEY-----&#xD;MIIEowIBAlksjdfEAnUhY5w7ykVJE6uICX9d9wWLcAMB5e1UO0Zxagtmzjy6UHEyk&#xD;lgGJb2PeaCeyjnkhtwlRgeq9zgRqcGFFu+q/2VJUGeUUt4JqX0dfIiTT5nbK0kYW&#xD;wWkDBQvKtC+nepKs5Sck9y4h2DO95uAMhct6+R6W4qzXyMQKQST5r0FfdyWbUKFN&#xD;6mvpaxBoB3BF8YQcs8Z6cGZfCdEC2vI2jhgR9MALFE/w2G3+REmDpi7tpX4eB7al&#xD;NrJr8E6f44EEYDmrO9zQ0pnEV9et9rvULUYXIovuKIoIEXeY8vIUaEuGPYL5gcYS&#xD;HtROW0zCxlO2eg5HNJcTAUQUI4OnTd2o+9LdCwIDAQABAoIBAQCGoAZ4wDKgcOrM&#xD;oeemYa0iepwViKpzBrtIb6yJlA494ICmOHQocehRkAou3MvZZ5WUNkWuDl+ol98D&#xD;kj8+OhE801tpTswMx3SFWXH0p9E40zWIBrYzls8e4pj+4ktYf3O+MWNSsAoIJUHG&#xD;/L+7RhBca/J607dgAW1FlYCiojI0qIRKPRkvdotQ3M+kYitYIv+MxZtmOB5OqG5g&#xD;cUFT9BxMAFW0JrCf8Zgcd0qvtjnQkqHp1SAFlFOE9918JijeVj3cXXajy+IazNwy&#xD;3Qq945thQpZaEXtMnggpN86CeaVtt4m9dXLiyjVVd6OfF6aTdG8W9CoKnIIvyKIA&#xD;Uzu+IcwBAoGBAM29a/OeY74ezG6MwVRw4uLATllg6acnfSUNQhMtdfPKhQWSGanM&#xD;/jwpWx/b4vgTiR8ZPxf1tViEdSwFsZwbo1fzWZvxRicbyIHtMF23sFNPo2rDhdBX&#xD;efafa0FlV3solOFFrSuDPkbi8WDKJA6156NqJfv6RTjSzKWtpPpxYYpxAoGBAMO0&#xD;f4XnfOAOTzeJ75C0/bRnGxE8Fb4h9+CvBbTzcm+m9csAQcriY/cyqiidKulrDgeQ&#xD;UKlRGwtrgWHQEPRLmdj3e/bPNOt6o+CJy2/pLfbp/boG7xdQus0U4Kx7+rmPd7Lv&#xD;uXcSeNupODhC44uH3HE16LA5WQxTu3PI3k3JP8U7AoGAcqgMwDDV7z8kuLsyhsd+&#xD;edWoFEFhFWl5Yau41g0wvdNwPIGGUc3PJWH6yY92NsBUW4NrWQPys0jmL8lgiNoS&#xD;NtKEbtaQPP1LybSQjrnuxw8LyFT8fvYxHxMK59/9V8Ju7fgxoJ08mK6izEj6vUP8&#xD;suJOltWLvDYmHHLgDT4gmNECgYBzVcmdwaoPZX98DLd5waCPFACYrJ9nuR8bdCpZ&#xD;1OtJL81FQLaFedxOD7bGTrG+dFAFVyCiWGEm3smWOofzYSae/mM5Ni5K5LD1oF+b&#xD;aYGkNYxJeNKpG/Oq7zXlkP9XIlz5wFu9983wLoxxiYQk27u+UbJ/gUzvOjv43I1cX&#xD;4pXJhwKBgEjSju4IYF8KRKCiQ+s/95xIUqwITt9nEDssaI4ms0ZcRROq9cAhxX4H&#xD;lOn8Ruyy7mGJ0LEpyuFVsSvb7sHqRdy2eyyXO/amwSquOZ9+BjGOb2wjoVHDCYm+&#xD;1obXuj+YB36cHqDTbWOM8yCkBcdHCL0eczvComocAiKWfJX9ZNWM&#xD;-----END RSA PRIVATE KEY-----</validation-cert><runlist><element>role[web-server]</element><element>recipe[apache2]</element></runlist></chef></bootstrap>
1
+ <?xml version="1.0" encoding="UTF-8" standalone="yes"?><bootstrap><node>ABQ-d4542f23-a755-4d9a-96f3-1e31c7a269d5</node><chef><chef-server-url>https://api.opscode.com/organizations/chef_integration</chef-server-url><validation-client-name>chef_integration-validator</validation-client-name><validation-cert>-----BEGIN RSA PRIVATE KEY-----&#xD;MIIEowIBAlksjdfEAnUhY5w7ykVJE6uICX9d9wWLcAMB5e1UO0Zxagtmzjy6UHEyk&#xD;lgGJb2PeaCeyjnkhtwlRgeq9zgRqcGFFu+q/2VJUGeUUt4JqX0dfIiTT5nbK0kYW&#xD;wWkDBQvKtC+nepKs5Sck9y4h2DO95uAMhct6+R6W4qzXyMQKQST5r0FfdyWbUKFN&#xD;6mvpaxBoB3BF8YQcs8Z6cGZfCdEC2vI2jhgR9MALFE/w2G3+REmDpi7tpX4eB7al&#xD;NrJr8E6f44EEYDmrO9zQ0pnEV9et9rvULUYXIovuKIoIEXeY8vIUaEuGPYL5gcYS&#xD;HtROW0zCxlO2eg5HNJcTAUQUI4OnTd2o+9LdCwIDAQABAoIBAQCGoAZ4wDKgcOrM&#xD;oeemYa0iepwViKpzBrtIb6yJlA494ICmOHQocehRkAou3MvZZ5WUNkWuDl+ol98D&#xD;kj8+OhE801tpTswMx3SFWXH0p9E40zWIBrYzls8e4pj+4ktYf3O+MWNSsAoIJUHG&#xD;/L+7RhBca/J607dgAW1FlYCiojI0qIRKPRkvdotQ3M+kYitYIv+MxZtmOB5OqG5g&#xD;cUFT9BxMAFW0JrCf8Zgcd0qvtjnQkqHp1SAFlFOE9918JijeVj3cXXajy+IazNwy&#xD;3Qq945thQpZaEXtMnggpN86CeaVtt4m9dXLiyjVVd6OfF6aTdG8W9CoKnIIvyKIA&#xD;Uzu+cwBAoGBAM29a/OeY74ezG6MwVRw4uLATllg6acnfSUNQhMtdfPKhQWSGanM&#xD;/jwpWx/b4vgTiR8ZPxf1tViEdSwFsZwbo1fzWZvxRicbyIHtMF23sFNPo2rDhdBX&#xD;efafa0FlV3solOFFrSuDPkbi8WDKJA6156NqJfv6RTjSzKWtpPpxYYpxAoGBAMO0&#xD;f4XnfOAOTzeJ75C0/bRnGxE8Fb4h9+CvBbTzcm+m9csAQcriY/cyqiidKulrDgeQ&#xD;UKlRGwtrgWHQEPRLmdj3e/bPNOt6o+CJy2/pLfbp/boG7xdQus0U4Kx7+rmPd7Lv&#xD;uXcSeNupODhC44uH3HE16LA5WQxTu3PI3k3JP8U7AoGAcqgMwDDV7z8kuLsyhsd+&#xD;edWoFEFhFWl5Yau41g0wvdNwPIGGUc3PJWH6yY92NsBUW4NrWQPys0jmL8lgiNoS&#xD;NtKEbtaQPP1LybSQjrnuxw8LyFT8fvYxHxMK59/9V8Ju7fgxoJ08mK6izEj6vUP8&#xD;suJOltWLvDYmHHLgDT4gmNECgYBzVcmdwaoPZX98DLd5waCPFACYrJ9nuR8bdCpZ&#xD;1OtJL81FQLaFedxOD7bGTrG+dFAFVyCiWGEm3smWOofzYSae/mM5Ni5K5LD1oF+b&#xD;aYGkNYxJeNKpG/Oq7zXlkP9XIlz5wFu9983wLoxxiYQk27u+UbJ/gUzvOjv43I1cX&#xD;4pXJhwKBgEjSju4IYF8KRKCiQ+s/95xIUqwITt9nEDssaI4ms0ZcRROq9cAhxX4H&#xD;lOn8Ruyy7mGJ0LEpyuFVsSvb7sHqRdy2eyyXO/amwSquOZ9+BjGOb2wjoVHDCYm+&#xD;1obXuj+YB36cHqDTbWOM8yCkBcdHCL0eczvComocAiKWfJX9ZNWM&#xD;-----END RSA PRIVATE KEY-----</validation-cert><runlist><element>role[web-server]</element><element>recipe[apache2]</element></runlist><attributes>{&#xD; "boundary": {&#xD; "api": {&#xD; "org_id": "00000000000000000",&#xD; "key": "0000000000000000000"&#xD; }&#xD; },&#xD; "newrelic": {&#xD; "server_monitoring": {&#xD; "license": "000000000000000000000000"&#xD; },&#xD; "application_monitoring": {&#xD; "license": "00000000000000000000"&#xD; }&#xD; }&#xD;}</attributes></chef></bootstrap>
@@ -0,0 +1 @@
1
+ <?xml version="1.0" encoding="UTF-8" standalone="yes"?><bootstrap><node>ABQ-d4542f23-a755-4d9a-96f3-1e31c7a269d5</node><chef><validation-cert /><chef-server-url>https://api.opscode.com/organizations/chef_integration</chef-server-url><validation-client-name>chef_integration-validator</validation-client-name><runlist/><attributes>{&#xD; "boundary": {&#xD; "api": {&#xD; "org_id": "0000000000000000",&#xD; "key": "0000000000000000000"&#xD; }&#xD; },&#xD; "newrelic": {&#xD; "server_monitoring": {&#xD; "license": "000000000000000000"&#xD; },&#xD; "application_monitoring": {&#xD; "license": "000000000000000000000"&#xD; }&#xD; }&#xD;}</attributes></chef></bootstrap>
@@ -0,0 +1 @@
1
+ <?xml version="1.0" encoding="UTF-8" standalone="yes"?><bootstrap><node>ABQ-d4542f23-a755-4d9a-96f3-1e31c7a269d5</node><chef /></bootstrap>
@@ -0,0 +1 @@
1
+ <?xml version="1.0" encoding="UTF-8" standalone="yes"?><bootstrap><node></node><chef><chef-server-url>https://api.opscode.com/organizations/chef_integration</chef-server-url><validation-client-name>chef_integration-validator</validation-client-name><validation-cert>-----BEGIN RSA PRIVATE KEY-----&#xD;MIIEowIBAlksjdfEAnUhY5w7ykVJE6uICX9d9wWLcAMB5e1UO0Zxagtmzjy6UHEyk&#xD;lgGJb2PeaCeyjnkhtwlRgeq9zgRqcGFFu+q/2VJUGeUUt4JqX0dfIiTT5nbK0kYW&#xD;wWkDBQvKtC+nepKs5Sck9y4h2DO95uAMhct6+R6W4qzXyMQKQST5r0FfdyWbUKFN&#xD;6mvpaxBoB3BF8YQcs8Z6cGZfCdEC2vI2jhgR9MALFE/w2G3+REmDpi7tpX4eB7al&#xD;NrJr8E6f44EEYDmrO9zQ0pnEV9et9rvULUYXIovuKIoIEXeY8vIUaEuGPYL5gcYS&#xD;HtROW0zCxlO2eg5HNJcTAUQUI4OnTd2o+9LdCwIDAQABAoIBAQCGoAZ4wDKgcOrM&#xD;oeemYa0iepwViKpzBrtIb6yJlA494ICmOHQocehRkAou3MvZZ5WUNkWuDl+ol98D&#xD;kj8+OhE801tpTswMx3SFWXH0p9E40zWIBrYzls8e4pj+4ktYf3O+MWNSsAoIJUHG&#xD;/L+7RhBca/J607dgAW1FlYCiojI0qIRKPRkvdotQ3M+kYitYIv+MxZtmOB5OqG5g&#xD;cUFT9BxMAFW0JrCf8Zgcd0qvtjnQkqHp1SAFlFOE9918JijeVj3cXXajy+IazNwy&#xD;3Qq945thQpZaEXtMnggpN86CeaVtt4m9dXLiyjVVd6OfF6aTdG8W9CoKnIIvyKIA&#xD;Uzu+IcwBAoGBAM29a/OeY74ezG6MwVRw4uLATllg6acnfSUNQhMtdfPKhQWSGanM&#xD;/jwpWx/b4vgTiR8ZPxf1tViEdSwFsZwbo1fzWZvxRicbyIHtMF23sFNPo2rDhdBX&#xD;efafa0FlV3solOFFrSuDPkbi8WDKJA6156NqJfv6RTjSzKWtpPpxYYpxAoGBAMO0&#xD;f4XnfOAOTzeJ75C0/bRnGxE8Fb4h9+CvBbTzcm+m9csAQcriY/cyqiidKulrDgeQ&#xD;UKlRGwtrgWHQEPRLmdj3e/bPNOt6o+CJy2/pLfbp/boG7xdQus0U4Kx7+rmPd7Lv&#xD;uXcSeNupODhC44uH3HE6LA5WQxTu3PI3k3JP8U7AoGAcqgMwDDV7z8kuLsyhsd+&#xD;edWoFEFhFWl5Yau41g0wvdNwPIGGUc3PJWH6yY92NsBUW4NrWQPys0jmL8lgiNoS&#xD;NtKEbtaQPP1LybSQjrnuxw8LyFT8fvYxHxMK59/9V8Ju7fgxoJ08mK6izEj6vUP8&#xD;suJOltWLvDYmHHLgDT4gmNECgYBzVcmdwaoPZX98DLd5waCPFACYrJ9nuR8bdCpZ&#xD;1OtJL81FQLaFedxOD7bGTrG+dFAFVyCiWGEm3smWOofzYSae/mM5Ni5K5LD1oF+b&#xD;aYGkNYxJeNKpG/Oq7zXlkP9XIlz5wFu9983wLoxxiYQk27u+UbJ/gUzvOjv43I1cX&#xD;4pXJhwKBgEjSju4IYF8KRKCiQ+s/95xIUqwITt9nEDssaI4ms0ZcRROq9cAhxX4H&#xD;lOn8Ruyy7mGJ0LEpyuFVsSvb7sHqRdy2eyyXO/amwSquOZ9+BjGOb2wjoVHDCYm+&#xD;1obXuj+YB36cHqDTbWOM8yCkBcdHCL0eczvComocAiKWfJX9ZNWM&#xD;-----END RSA PRIVATE KEY-----</validation-cert><runlist/><attributes>{&#xD; "boundary": {&#xD; "api": {&#xD; "org_id": "00000000000000000",&#xD; "key": "000000000000000"&#xD; }&#xD; },&#xD; "newrelic": {&#xD; "server_monitoring": {&#xD; "license": "0000000000000000000"&#xD; },&#xD; "application_monitoring": {&#xD; "license": "00000000000000000000"&#xD; }&#xD; }&#xD;}</attributes></chef></bootstrap>
@@ -1 +1 @@
1
- <?xml version="1.0" encoding="UTF-8" standalone="yes"?><bootstrap><node>ABQ-d4542f23-a755-4d9a-96f3-1e31c7a269d5</node><chef><chef-server-url>https://api.opscode.com/organizations/chef_integration</chef-server-url><validation-client-name>chef_integration-validator</validation-client-name><validation-cert>-----BEGIN RSA PRIVATE KEY-----&#xD;MIIEowIBAlksjdfEAnUhY5w7ykVJE6uICX9d9wWLcAMB5e1UO0Zxagtmzjy6UHEyk&#xD;lgGJb2PeaCeyjnkhtwlRgeq9zgRqcGFFu+q/2VJUGeUUt4JqX0dfIiTT5nbK0kYW&#xD;wWkDBQvKtC+nepKs5Sck9y4h2DO95uAMhct6+R6W4qzXyMQKQST5r0FfdyWbUKFN&#xD;6mvpaxBoB3BF8YQcs8Z6cGZfCdEC2vI2jhgR9MALFE/w2G3+REmDpi7tpX4eB7al&#xD;NrJr8E6f44EEYDmrO9zQ0pnEV9et9rvULUYXIovuKIoIEXeY8vIUaEuGPYL5gcYS&#xD;HtROW0zCxlO2eg5HNJcTAUQUI4OnTd2o+9LdCwIDAQABAoIBAQCGoAZ4wDKgcOrM&#xD;oeemYa0iepwViKpzBrtIb6yJlA494ICmOHQocehRkAou3MvZZ5WUNkWuDl+ol98D&#xD;kj8+OhE801tpTswMx3SFWXH0p9E40zWIBrYzls8e4pj+4ktYf3O+MWNSsAoIJUHG&#xD;/L+7RhBca/J607dgAW1FlYCiojI0qIRKPRkvdotQ3M+kYitYIv+MxZtmOB5OqG5g&#xD;cUFT9BxMAFW0JrCf8Zgcd0qvtjnQkqHp1SAFlFOE9918JijeVj3cXXajy+IazNwy&#xD;3Qq945thQpZaEXtMnggpN86CeaVtt4m9dXLiyjVVd6OfF6aTdG8W9CoKnIIvyKIA&#xD;Uzu+IcwBAoGBAM29a/OeY74ezG6MwVRw4uLATllg6acnfSUNQhMtdfPKhQWSGanM&#xD;/jwpWx/b4vgTiR8ZPxf1tViEdSwFsZwbo1fzWZvxRicbyIHtMF23sFNPo2rDhdBX&#xD;efafa0FlV3solOFFrSuDPkbi8WDKJA6156NqJfv6RTjSzKWtpPpxYYpxAoGBAMO0&#xD;f4XnfOAOTzeJ75C0/bRnGxE8Fb4h9+CvBbTzcm+m9csAQcriY/cyqiidKulrDgeQ&#xD;UKlRGwtrgWHQEPRLmdj3e/bPNOt6o+CJy2/pLfbp/boG7xdQus0U4Kx7+rmPd7Lv&#xD;uXcSeNupODhC44uH3HE16LA5WQxTu3PI3k3JP8U7AoGAcqgMwDDV7z8kuLsyhsd+&#xD;edWoFEFhFWl5Yau41g0wvdNwPIGGUc3PJWH6yY92NsBUW4NrWQPys0jmL8lgiNoS&#xD;NtKEbtaQPP1LybSQjrnuxw8LyFT8fvYxHxMK59/9V8Ju7fgxoJ08mK6izEj6vUP8&#xD;suJOltWLvDYmHHLgDT4gmNECgYBzVcmdwaoPZX98DLd5waCPFACYrJ9nuR8bdCpZ&#xD;1OtJL81FQLaFedxOD7bGTrG+dFAFVyCiWGEm3smWOofzYSae/mM5Ni5K5LD1oF+b&#xD;aYGkNYxJeNKpG/Oq7zXlkP9XIlz5wFu9983wLoxxiYQk27u+UbJ/gUzvOjv43I1cX&#xD;4pXJhwKBgEjSju4IYF8KRKCiQ+s/95xIUqwITt9nEDssaI4ms0ZcRROq9cAhxX4H&#xD;lOn8Ruyy7mGJ0LEpyuFVsSvb7sHqRdy2eyyXO/amwSquOZ9+BjGOb2wjoVHDCYm+&#xD;1obXuj+YB36cHqDTbWOM8yCkBcdHCL0eczvComocAiKWfJX9ZNWM&#xD;-----END RSA PRIVATE KEY-----</validation-cert><runlist/></chef></bootstrap>
1
+ <?xml version="1.0" encoding="UTF-8" standalone="yes"?><bootstrap><node>ABQ-d4542f23-a755-4d9a-96f3-1e31c7a269d5</node><chef><chef-server-url>https://api.opscode.com/organizations/chef_integration</chef-server-url><validation-client-name>chef_integration-validator</validation-client-name><validation-cert>-----BEGIN RSA PRIVATE KEY-----&#xD;MIIEowIBAlksjdfEAnUhY5w7ykVJE6uICX9d9wWLcAMB5e1UO0Zxagtmzjy6UHEyk&#xD;lgGJb2PeaCeyjnkhtwlRgeq9zgRqcGFFu+q/2VJUGeUUt4JqX0dfIiTT5nbK0kYW&#xD;wWkDBQvKtC+nepKs5Sck9y4h2DO95uAMhct6+R6W4qzXyMQKQST5r0FfdyWbUKFN&#xD;6mvpaxBoB3BF8YQcs8Z6cGZfCdEC2vI2jhgR9MALFE/w2G3+REmDpi7tpX4eB7al&#xD;NrJr8E6f44EEYDmrO9zQ0pnEV9et9rvULUYXIovuKIoIEXeY8vIUaEuGPYL5gcYS&#xD;HtROW0zCxlO2eg5HNJcTAUQUI4OnTd2o+9LdCwIDAQABAoIBAQCGoAZ4wDKgcOrM&#xD;oeemYa0iepwViKpzBrtIb6yJlA494ICmOHQocehRkAou3MvZZ5WUNkWuDl+ol98D&#xD;kj8+OhE801tpTswMx3SFWXH0p9E40zWIBrYzls8e4pj+4ktYf3O+MWNSsAoIJUHG&#xD;/L+7RhBca/J607dgAW1FlYCiojI0qIRKPRkvdotQ3M+kYitYIv+MxZtmOB5OqG5g&#xD;cUFT9BxMAFW0JrCf8Zgcd0qvtjnQkqHp1SAFlFOE9918JijeVj3cXXajy+IazNwy&#xD;3Qq945thQpZaEXtMnggpN86CeaVtt4m9dXLiyjVVd6OfF6aTdG8W9CoKnIIvyKIA&#xD;Uzu+IcwBAoGBAM29a/OeY74ezG6MwVRw4uLATllg6acnfSUNQhMtdfPKhQWSGanM&#xD;/jwpWx/b4vgTiR8ZPxf1tViEdSwFsZwbo1fzWZvxRicbyIHtMF23sFNPo2rDhdBX&#xD;efafa0FlV3solOFFrSuDPkbi8WDKJA6156NqJfv6RTjSzKWtpPpxYYpxAoGBAMO0&#xD;f4XnfOAOTzeJ75C0/bRnE8Fb4h9+CvBbTzcm+m9csAQcriY/cyqiidKulrDgeQ&#xD;UKlRGwtrgWHQEPRLmdj3e/bPNOt6o+CJy2/pLfbp/boG7xdQus0U4Kx7+rmPd7Lv&#xD;uXcSeNupODhC44uH3HE16LA5WQxTu3PI3k3JP8U7AoGAcqgMwDDV7z8kuLsyhsd+&#xD;edWoFEFhFWl5Yau41g0wvdNwPIGGUc3PJWH6yY92NsBUW4NrWQPys0jmL8lgiNoS&#xD;NtKEbtaQPP1LybSQjrnuxw8LyFT8fvYxHxMK59/9V8Ju7fgxoJ08mK6izEj6vUP8&#xD;suJOltWLvDYmHHLgDT4gmNECgYBzVcmdwaoPZX98DLd5waCPFACYrJ9nuR8bdCpZ&#xD;1OtJL81FQLaFedxOD7bGTrG+dFAFVyCiWGEm3smWOofzYSae/mM5Ni5K5LD1oF+b&#xD;aYGkNYxJeNKpG/Oq7zXlkP9XIlz5wFu9983wLoxxiYQk27u+UbJ/gUzvOjv43I1cX&#xD;4pXJhwKBgEjSju4IYF8KRKCiQ+s/95xIUqwITt9nEDssaI4ms0ZcRROq9cAhxX4H&#xD;lOn8Ruyy7mGJ0LEpyuFVsSvb7sHqRdy2eyyXO/amwSquOZ9+BjGOb2wjoVHDCYm+&#xD;1obXuj+YB36cHqDTbWOM8yCkBcdHCL0eczvComocAiKWfJX9ZNWM&#xD;-----END RSA PRIVATE KEY-----</validation-cert><runlist/><attributes>{&#xD; "boundary": {&#xD; "api": {&#xD; "org_id": "000000000000000000",&#xD; "key": "00000000000000000000"&#xD; }&#xD; },&#xD; "newrelic": {&#xD; "server_monitoring": {&#xD; "license": "00000000000000000000000"&#xD; },&#xD; "application_monitoring": {&#xD; "license": "00000000000000000000000"&#xD; }&#xD; }&#xD;}</attributes></chef></bootstrap>
@@ -0,0 +1 @@
1
+ <?xml version="1.0" encoding="UTF-8" standalone="yes"?><bootstrap><node>ABQ-d4542f23-a755-4d9a-96f3-1e31c7a269d5</node><chef><chef-server-url>https://api.opscode.com/organizations/chef_integration</chef-server-url><validation-client-name>chef_integration-validator</validation-client-name><validation-cert>-----BEGIN RSA PRIVATE KEY-----&#xD;MIIEowIBAlksjdfEAnUhY5w7ykVJE6uICX9d9wWLcAMB5e1UO0Zxagtmzjy6UHEyk&#xD;lgGJb2PeaCeyjnkhtwlRgeq9zgRqcGFFu+q/2VJUGeUUt4JqX0dfIiTT5nbK0kYW&#xD;wWkDBQvKtC+nepKs5Sck9y4h2DO95uAMhct6+R6W4qzXyMQKQST5r0FfdyWbUKFN&#xD;6mvpaxBoB3BF8YQcs8Z6cGZfCdEC2vI2jhgR9MALFE/w2G3+REmDpi7tpX4eB7al&#xD;NrJr8E6f44EEYDmrO9zQ0pnEV9et9rvULUYXIovuKIoIEXeY8vIUaEuGPYL5gcYS&#xD;HtROW0zCxlO2eg5HNJcTAUQUI4OnTd2o+9LdCwIDAQABAoIBAQCGoAZ4wDKgcOrM&#xD;oeemYa0iepwViKpzBrtIb6yJlA494ICmOHQocehRkAou3MvZZ5WUNkWuDl+ol98D&#xD;kj8+OhE801tpTswMx3SFWXH0p9E40zWIBrYzls8e4pj+4ktYf3O+MWNSsAoIJUHG&#xD;/L+7RhBca/J607dgAW1FlYCiojI0qIRKPRkvdotQ3M+kYitYIv+MxZtmOB5OqG5g&#xD;cUFT9BxMAFW0JrCf8Zgcd0qvtjnQkqHp1SAFlFOE9918JijeVj3cXXajy+IazNwy&#xD;3Qq945thQpZaEXtMnggpN86CeaVtt4m9dXLiyjVVd6OfF6aTdG8W9CoKnIIvyKIA&#xD;Uzu+IcwBAoGBAM29a/OeY74ezG6MwVRw4uLATllg6acnfSUNQhMtdfPKhQWSGanM&#xD;/jwpWx/b4vgTiR8ZPxf1tViEdSwFsZwbo1fzWZvxRicbyIHtMF23sFNPo2rDhdBX&#xD;efafa0FlV3solOFFrSuDPkbi8WDKJA6156NqJfv6RTjSzKWtpPpxYYpxAoGBAMO0&#xD;f4XnfOAOTzeJ75C0/bRnGxE8Fb4h9+CvBbTzcm+m9csAQcriY/cyqiidKulrDgeQ&#xD;UKlRGwtrgWHQEPRLmdj3e/bPNOt6o+CJy2/pLfbp/boG7xdQus0U4Kx7+rmPd7Lv&#xD;uXcSeNupODhC44uH3HE16LA5WQxTu3PI3k3JP8U7AoGAcqgMwDDV7z8kuLsyhsd+&#xD;edWoFEFhFWl5Yau41g0wvdNwPIGGUc3PJWH6yY92NsBUW4NrWQPys0jmL8lgiNoS&#xD;NtKEbtaQPP1LybSQjrnuxw8LyFT8fvYxHxMK59/9V8Ju7fgxoJ08mK6izEj6vUP8&#xD;suJOltWLvDYmHHLgDT4gmNECgYBzVcmdwaoPZX98DLd5waCPFACYrJ9nuR8bdCpZ&#xD;1OtJL81FQLaFedxOD7bGTrG+dFAFVyCiWGEm3smWOofzYSae/mM5Ni5K5LD1oF+b&#xD;aYGkNYxJeNKpG/Oq7zXlkP9XIlz5wFu9983wLoxxiYQk27u+bJ/gUzvOjv43I1cX&#xD;4pXJhwKBgEjSju4IYF8KRKCiQ+s/95xIUqwITt9nEDssaI4ms0ZcRROq9cAhxX4H&#xD;lOn8Ruyy7mGJ0LEpyuFVsSvb7sHqRdy2eyyXO/amwSquOZ9+BjGOb2wjoVHDCYm+&#xD;1obXuj+YB36cHqDTbWOM8yCkBcdHCL0eczvComocAiKWfJX9ZNWM&#xD;-----END RSA PRIVATE KEY-----</validation-cert><runlist /></chef></bootstrap>
@@ -0,0 +1 @@
1
+ <?xml version="1.0" encoding="UTF-8" standalone="yes"?><bootstrap><node>ABQ-d4542f23-a755-4d9a-96f3-1e31c7a269d5</node><chef><chef-server-url /><validation-client-name>chef_integration-validator</validation-client-name><validation-cert>-----BEGIN RSA PRIVATE KEY-----&#xD;MIIEowIBAlksjdfEAnUhY5w7ykVJE6uICX9d9wWLcAMB5e1UO0Zxagtmzjy6UHEyk&#xD;lgGJb2PeaCeyjnkhtwlRgeq9zgRqcGFFu+q/2VJUGeUUt4JqX0dfIiTT5nbK0kYW&#xD;wWkDBQvKtC+nepKs5Sck9y4h2DO95uAMhct6+R6W4qzXyMQKQST5r0FfdyWbUKFN&#xD;6mvpaxBoB3BF8YQcs8Z6cGZfCdEC2vI2jhgR9MALFE/w2G3+REmDpi7tpX4eB7al&#xD;NrJr8E6f44EEYDmrO9zQ0pnEV9et9rvULUYXIovuKIoIEXeY8vIUaEuGPYL5gcYS&#xD;HtROW0zCxlO2eg5HNJcTAUQUI4OnTd2o+9LdCwIDAQABAoIBAQCGoAZ4wDKgcOrM&#xD;oeemYa0iepwViKpzBrtIb6yJlA494ICmOHQocehRkAou3MvZZ5WUNkWuDl+ol98D&#xD;kj8+OhE801tpTswMx3SFWXH0p9E40zWIBrYzls8e4pj+4ktYf3O+MWNSsAoIJUHG&#xD;/L+7RhBca/J607dgAW1FlYCiojI0qIRKPRkvdotQ3M+kYitYIv+MxZtmOB5OqG5g&#xD;cUFT9BxMAFW0JrCf8Zgcd0qvtjnQkqHp1SAFlFOE9918JijeVj3cXXajy+IazNwy&#xD;3Qq945thQpZaEXtMnggpN86CeaVtt4m9dXLiyjVVd6OfF6aTdG8W9CoKnIIvyKIA&#xD;Uzu+IcwBAoGBAM29a/OeY74ezG6MwVRw4uLATllg6acnfSUNQhMtdfPKhQWSGanM&#xD;/jwpWx/b4vgTiR8ZPxf1tViEdSwFsZwbo1fzWZvxRicbyIHtMF23sFNPo2rDhdBX&#xD;efafa0FlV3solOFFrSuDPkbi8WDKJA6156NqJfv6RTjSzKWtpPpxYYpxAoGBAMO0&#xD;f4XnfOAOTzeJ75C0/bRnGxE8Fb4h9+CvBbTzcm+m9csAQcriY/cyqiidKulrDgeQ&#xD;UKlRGwtrgWHQEPRLmdj3e/bPNOt6o+CJy2/pLfbp/boG7xdQus0U4Kx7+rmPd7Lv&#xD;uXcSeNupODhC44uH3HE16LA5WQxTu3PI3k3JP8U7AoGAcqgMwDDV7z8kuLsyhsd+&#xD;edWoFEFhFWl5Yau41g0wvdNPIGGUc3PJWH6yY92NsBUW4NrWQPys0jmL8lgiNoS&#xD;NtKEbtaQPP1LybSQjrnuxw8LyFT8fvYxHxMK59/9V8Ju7fgxoJ08mK6izEj6vUP8&#xD;suJOltWLvDYmHHLgDT4gmNECgYBzVcmdwaoPZX98DLd5waCPFACYrJ9nuR8bdCpZ&#xD;1OtJL81FQLaFedxOD7bGTrG+dFAFVyCiWGEm3smWOofzYSae/mM5Ni5K5LD1oF+b&#xD;aYGkNYxJeNKpG/Oq7zXlkP9XIlz5wFu9983wLoxxiYQk27u+UbJ/gUzvOjv43I1cX&#xD;4pXJhwKBgEjSju4IYF8KRKCiQ+s/95xIUqwITt9nEDssaI4ms0ZcRROq9cAhxX4H&#xD;lOn8Ruyy7mGJ0LEpyuFVsSvb7sHqRdy2eyyXO/amwSquOZ9+BjGOb2wjoVHDCYm+&#xD;1obXuj+YB36cHqDTbWOM8yCkBcdHCL0eczvComocAiKWfJX9ZNWM&#xD;-----END RSA PRIVATE KEY-----</validation-cert><runlist/><attributes>{&#xD; "boundary": {&#xD; "api": {&#xD; "org_id": "00000000000000",&#xD; "key": "00000000000000"&#xD; }&#xD; },&#xD; "newrelic": {&#xD; "server_monitoring": {&#xD; "license": "000000000000000000000"&#xD; },&#xD; "application_monitoring": {&#xD; "license": "00000000000000000"&#xD; }&#xD; }&#xD;}</attributes></chef></bootstrap>
@@ -0,0 +1 @@
1
+ <?xml version="1.0" encoding="UTF-8" standalone="yes"?><bootstrap><node>ABQ-d4542f23-a755-4d9a-96f3-1e31c7a269d5</node><chef><chef-server-url>https://api.opscode.com/organizations/chef_integration</chef-server-url><validation-client-name></validation-client-name><validation-cert /><runlist/><attributes>{&#xD; "boundary": {&#xD; "api": {&#xD; "org_id": "0000000000000000000000",&#xD; "key": "000000000000000000"&#xD; }&#xD; },&#xD; "newrelic": {&#xD; "server_monitoring": {&#xD; "license": "000000000000000000"&#xD; },&#xD; "application_monitoring": {&#xD; "license": "0000000000000000000"&#xD; }&#xD; }&#xD;}</attributes></chef></bootstrap>
@@ -0,0 +1 @@
1
+ <?xml version="1.0" encoding="UTF-8" standalone="yes"?><bootstrap><node>ABQ-d4542f23-a755-4d9a-96f3-1e31c7a269d5</node><chef><chef-server-url>https://api.opscode.com/organizations/chef_integration</chef-server-url><validation-client-name>chef_integration-validator</validation-client-name><runlist/><attributes>{&#xD; "boundary": {&#xD; "api": {&#xD; "org_id": "000000000000000000",&#xD; "key": "000000000000000000000"&#xD; }&#xD; },&#xD; "newrelic": {&#xD; "server_monitoring": {&#xD; "license": "00000000000000000000000000000"&#xD; },&#xD; "application_monitoring": {&#xD; "license": "000000000000000000000000000000"&#xD; }&#xD; }&#xD;}</attributes></chef></bootstrap>
@@ -0,0 +1 @@
1
+ <?xml version="1.0" encoding="UTF-8" standalone="yes"?><bootstrap><node>ABQ-d4542f23-a755-4d9a-96f3-1e31c7a269d5</node></bootstrap>
@@ -0,0 +1 @@
1
+ <?xml version="1.0" encoding="UTF-8" standalone="yes"?><bootstrap><chef><chef-server-url>https://api.opscode.com/organizations/chef_integration</chef-server-url><validation-client-name>chef_integration-validator</validation-client-name><validation-cert>-----BEGIN RSA PRIVATE KEY-----&#xD;MIIEowIBAlksjdfEAnUhY5w7ykVJE6uICX9d9wWLcAMB5e1UO0Zxagtmzjy6UHEyk&#xD;lgGJb2PeaCeyjnkhtwlRgeq9zgRqcGFFu+q/2VJUGeUUt4JqX0dfIiTT5nbK0kYW&#xD;wWkDBQvKtC+nepKs5Sck9y4h2DO95uAMhct6+R6W4qzXyMQKQST5r0FfdyWbUKFN&#xD;6mvpaxBoB3BF8YQcs8Z6cGZfCdEC2vI2jhgR9MALFE/w2G3+REmDpi7tpX4eB7al&#xD;NrJr8E6f44EEYDmrO9zQ0pnEV9et9rvULUYXIovuKIoIEXeY8vIUaEuGPYL5gcYS&#xD;HtROW0zCxlO2eg5HNJcTAUQUI4OnTd2o+9LdCwIDAQABAoIBAQCGoAZ4wDKgcOrM&#xD;oeemYa0iepwViKpzBrtIb6yJlA494ICmOHQocehRkAou3MvZZ5WUNkWuDl+ol98D&#xD;kj8+OhE801tpTswMx3SFWXH0p9E40zWIBrYzls8e4pj+4ktYf3O+MWNSsAoIJUHG&#xD;/L+7RhBca/J607dgAW1FlYCiojI0qIRKPRkvdotQ3M+kYitYIv+MxZtmOB5OqG5g&#xD;cUFT9BxMAFW0JrCf8Zgcd0qvtjnQkqHp1SAFlFOE9918JijeVj3cXXajy+IazNwy&#xD;3Qq945thQpZaEXtMnggpN86CeaVtt4m9dXLiyjVVd6OfF6aTdG8W9CoKnIIvyKIA&#xD;Uzu+IcwBAoGBAM29a/OeY74ezG6MwVRw4uLATllg6acnfSUNQhMtdfPKhQWSGanM&#xD;/jwpWx/b4vgTiR8ZPxf1tViEdSwFsZwbo1fzWZvxRicbyIHtMF23sFNPo2rDhdBX&#xD;efafa0FlV3solOFFrSuDPkbi8WDKJA6156NqJfv6RTjSzKWtpPpxYYpxAoGBAMO0&#xD;f4XnfOAOTzeJ75C0/bRnGxE8Fb4h9+CvBbTzcm+m9csAQcriY/cyqiidKulrDgeQ&#xD;UKlRGwtrgWHQEPRLmdj3e/bPNOt6o+CJy2/pLfbp/boG7xdQus0U4Kx7+rmPd7Lv&#xD;uXcSeNupODhC44uH3HE16LA5WQxTu3PI3k3JP8U7AoGAcqgMwDDV7z8kuLsyhsd+&#xD;edWoFEFhFWl5Yau410wvdNwPIGGUc3PJWH6yY92NsBUW4NrWQPys0jmL8lgiNoS&#xD;NtKEbtaQPP1LybSQjrnuxw8LyFT8fvYxHxMK59/9V8Ju7fgxoJ08mK6izEj6vUP8&#xD;suJOltWLvDYmHHLgDT4gmNECgYBzVcmdwaoPZX98DLd5waCPFACYrJ9nuR8bdCpZ&#xD;1OtJL81FQLaFedxOD7bGTrG+dFAFVyCiWGEm3smWOofzYSae/mM5Ni5K5LD1oF+b&#xD;aYGkNYxJeNKpG/Oq7zXlkP9XIlz5wFu9983wLoxxiYQk27u+UbJ/gUzvOjv43I1cX&#xD;4pXJhwKBgEjSju4IYF8KRKCiQ+s/95xIUqwITt9nEDssaI4ms0ZcRROq9cAhxX4H&#xD;lOn8Ruyy7mGJ0LEpyuFVsSvb7sHqRdy2eyyXO/amwSquOZ9+BjGOb2wjoVHDCYm+&#xD;1obXuj+YB36cHqDTbWOM8yCkBcdHCL0eczvComocAiKWfJX9ZNWM&#xD;-----END RSA PRIVATE KEY-----</validation-cert><runlist/><attributes>{&#xD; "boundary": {&#xD; "api": {&#xD; "org_id": "0000000000000000000000000",&#xD; "key": "0000000000000000"&#xD; }&#xD; },&#xD; "newrelic": {&#xD; "server_monitoring": {&#xD; "license": "0000000000000000000"&#xD; },&#xD; "application_monitoring": {&#xD; "license": "000000000000000000"&#xD; }&#xD; }&#xD;}</attributes></chef></bootstrap>
@@ -0,0 +1 @@
1
+ <?xml version="1.0" encoding="UTF-8" standalone="yes"?><bootstrap><node>ABQ-d4542f23-a755-4d9a-96f3-1e31c7a269d5</node><chef><validation-client-name>chef_integration-validator</validation-client-name><validation-cert>-----BEGIN RSA PRIVATE KEY-----&#xD;MIIEowIBAlksjdfEAnUhY5w7ykVJE6uICX9d9wWLcAMB5e1UO0Zxagtmzjy6UHEyk&#xD;lgGJb2PeaCeyjnkhtwlRgeq9zgRqcGFFu+q/2VJUGeUUt4JqX0dfIiTT5nbK0kYW&#xD;wWkDBQvKtC+nepKs5Sck9y4h2DO95uAMhct6+R6W4qzXyMQKQST5r0FfdyWbUKFN&#xD;6mvpaxBoB3BF8YQcs8Z6cGZfCdEC2vI2jhgR9MALFE/w2G3+REmDpi7tpX4eB7al&#xD;NrJr8E6f44EEYDmrO9zQ0pnEV9et9rvULUYXIovuKIoIEXeY8vIUaEuGPYL5gcYS&#xD;HtROW0zCxlO2eg5HNJcTAUQUI4OnTd2o+9LdCwIDAQABAoIBAQCGoAZ4wDKgcOrM&#xD;oeemYa0iepwViKpzBrtIb6yJlA494ICmOHQocehRkAou3MvZZ5WUNkWuDl+ol98D&#xD;kj8+OhE801tpTswMx3SFWXH0p9E40zWIBrYzls8e4pj+4ktYf3O+MWNSsAoIJUHG&#xD;/L+7RhBca/J607dgAW1FlYCiojI0qIRKPRkvdotQ3M+kYitYIv+MxZtmOB5OqG5g&#xD;cUFT9BxMAFW0JrCf8Zgcd0qvtjnQkqHp1SAFlFOE9918JijeVj3cXXajy+IazNwy&#xD;3Qq945thQpZaEXtMnggpN86CeaVtt4m9dXLiyjVVd6OfF6aTdG8W9CoKnIIvyKIA&#xD;Uzu+IcwBAoGBAM29a/OeY74ezG6MwVRw4uLATllg6acnfSUNQhMtdfPKhQWSGanM&#xD;/jwpWx/b4vgTiR8ZPxf1tViEdSwFsZwbo1fzWZvxRicbyIHtMF23sFNPo2rDhdBX&#xD;efafa0FlV3solOFFrSuDPkbi8WDKJA6156NqJfv6RTjSzKWtpPpxYYpxAoGBAMO0&#xD;f4XnfOAOTzeJ75C0/bRnGxE8Fb4h9+CvBbTzcm+m9csAQcriY/cyqiidKulrDgeQ&#xD;UKlRGwtrgWHQEPRLmdj3e/bPNOt6o+CJy2/pLfbp/boG7xdQus0U4Kx7+rmPd7Lv&#xD;uXcSeNupODhC44uH3HE16LA5WQxTu3PI3k3JP8U7AoGAcqgMwDDV7z8kuLsyhsd+&#xD;edWoFEFhFWl5Yau41g0wvdNwPIGGUc3PJWH6yY92NsBUW4NrWQPys0jmL8lgiNoS&#xD;NtKEbtaQPP1LybSQjrnuxw8LyFT8fvYxHxMK59/9V8Ju7fgxoJ08mK6izEj6vUP8&#xD;suJOltWLvDYmHHLgDT4gmNECgYBzVcmdwaoPZX98DLd5waCPFACYrJ9nuR8bdCpZ&#xD;1OtJL81FQLaFedxOD7bGTrG+dFAFVyCiWGEm3smWOofzYSae/mM5Ni5K5LD1oF+b&#xD;aYGkNYxJeNKpG/Oq7zXlkP9XIlz5wFu9983wLoxxiYQk27u+UbJ/gUzvOjv43I1cX&#xD;4pXJhwKBgEjSju4IYF8KRKCiQ+s/95xIUqwITt9nEDssaI4ms0ZcRROq9cAhxX4H&#xD;lOn8Ruyy7mGJ0LEpyuFVsSvb7sHqRdy2eyyXO/amwSquOZ9+BjGOb2wjoVHDCYm+&#xD;1obXuj+YB36cHqDTbWOM8ykBcdHCL0eczvComocAiKWfJX9ZNWM&#xD;-----END RSA PRIVATE KEY-----</validation-cert><runlist/><attributes>{&#xD; "boundary": {&#xD; "api": {&#xD; "org_id": "000000000000000000000",&#xD; "key": "0000000000000000000"&#xD; }&#xD; },&#xD; "newrelic": {&#xD; "server_monitoring": {&#xD; "license": "0000000000000000000000"&#xD; },&#xD; "application_monitoring": {&#xD; "license": "000000000000000000000000"&#xD; }&#xD; }&#xD;}</attributes></chef></bootstrap>
@@ -0,0 +1 @@
1
+ <?xml version="1.0" encoding="UTF-8" standalone="yes"?><bootstrap><node>ABQ-d4542f23-a755-4d9a-96f3-1e31c7a269d5</node><chef><chef-server-url>https://api.opscode.com/organizations/chef_integration</chef-server-url><validation-cert>-----BEGIN RSA PRIVATE KEY-----&#xD;MIIEowIBAlksjdfEAnUhY5w7ykVJE6uICX9d9wWLcAMB5e1UO0Zxagtmzjy6UHEyk&#xD;lgGJb2PeaCeyjnkhtwlRgeq9zgRqcGFFu+q/2VJUGeUUt4JqX0dfIiTT5nbK0kYW&#xD;wWkDBQvKtC+nepKs5Sck9y4h2DO95uAMhct6+R6W4qzXyMQKQST5r0FfdyWbUKFN&#xD;6mvpaxBoB3BF8YQcs8Z6cGZfCdEC2vI2jhgR9MALFE/w2G3+REmDpi7tpX4eB7al&#xD;NrJr8E6f44EEYDmrO9zQ0pnEV9et9rvULUYXIovuKIoIEXeY8vIUaEuGPYL5gcYS&#xD;HtROW0zCxlO2eg5HNJcTAUQUI4OnTd2o+9LdCwIDAQABAoIBAQCGoAZ4wDKgcOrM&#xD;oeemYa0iepwViKpzBrtIb6yJlA494ICmOHQocehRkAou3MvZZ5WUNkWuDl+ol98D&#xD;kj8+OhE801tpTswMx3SFWXH0p9E40zWIBrYzls8e4pj+4ktYf3O+MWNSsAoIJUHG&#xD;/L+7RhBca/J607dgAW1FlYCiojI0qIRKPRkvdotQ3M+kYitYIv+MxZtmOB5OqG5g&#xD;cUFT9BxMAFW0JrCf8Zgcd0qvtjnQkqHp1SAFlFOE9918JijeVj3cXXajy+IazNwy&#xD;3Qq945thQpZaEXtMnggpN86CeaVtt4m9dXLiyjVVd6OfF6aTdG8W9CoKnIIvyKIA&#xD;Uzu+IcwBAoGBAM29a/OeY74ezG6MwVRw4uLATllg6acnfSUNQhMtdfPKhQWSGanM&#xD;/jwpWx/b4vgTiR8ZPxf1tViEdSwFsZwbo1fzWZvxRicbyIHtMF23sFNPo2rDhdBX&#xD;efafa0FlV3solOFFrSuDPkbi8WDKJA6156NqJfv6RTjSzKWtpPpxYYpxAoGBAMO0&#xD;f4XnfOAOTzeJ75C0/bRGxE8Fb4h9+CvBbTzcm+m9csAQcriY/cyqiidKulrDgeQ&#xD;UKlRGwtrgWHQEPRLmdj3e/bPNOt6o+CJy2/pLfbp/boG7xdQus0U4Kx7+rmPd7Lv&#xD;uXcSeNupODhC44uH3HE16LA5WQxTu3PI3k3JP8U7AoGAcqgMwDDV7z8kuLsyhsd+&#xD;edWoFEFhFWl5Yau41g0wvdNwPIGGUc3PJWH6yY92NsBUW4NrWQPys0jmL8lgiNoS&#xD;NtKEbtaQPP1LybSQjrnuxw8LyFT8fvYxHxMK59/9V8Ju7fgxoJ08mK6izEj6vUP8&#xD;suJOltWLvDYmHHLgDT4gmNECgYBzVcmdwaoPZX98DLd5waCPFACYrJ9nuR8bdCpZ&#xD;1OtJL81FQLaFedxOD7bGTrG+dFAFVyCiWGEm3smWOofzYSae/mM5Ni5K5LD1oF+b&#xD;aYGkNYxJeNKpG/Oq7zXlkP9XIlz5wFu9983wLoxxiYQk27u+UbJ/gUzvOjv43I1cX&#xD;4pXJhwKBgEjSju4IYF8KRKCiQ+s/95xIUqwITt9nEDssaI4ms0ZcRROq9cAhxX4H&#xD;lOn8Ruyy7mGJ0LEpyuFVsSvb7sHqRdy2eyyXO/amwSquOZ9+BjGOb2wjoVHDCYm+&#xD;1obXuj+YB36cHqDTbWOM8yCkBcdHCL0eczvComocAiKWfJX9ZNWM&#xD;-----END RSA PRIVATE KEY-----</validation-cert><runlist/><attributes>{&#xD; "boundary": {&#xD; "api": {&#xD; "org_id": "00000000000000000",&#xD; "key": "000000000000000000"&#xD; }&#xD; },&#xD; "newrelic": {&#xD; "server_monitoring": {&#xD; "license": "000000000000000000000000000"&#xD; },&#xD; "application_monitoring": {&#xD; "license": "0000000000000000000"&#xD; }&#xD; }&#xD;}</attributes></chef></bootstrap>
@@ -0,0 +1 @@
1
+ <?xml version="1.0" encoding="UTF-8" standalone="yes"?><bootstrap><node>ABQ-d4542f23-a755-4d9a-96f3-1e31c7a269d5</node><chef><chef-server-url>https://api.opscode.com/organizations/chef_integration</chef-server-url><validation-client-name>chef_integration-validator</validation-client-name><validation-cert>-----BEGIN RSA PRIVATE KEY-----&#xD;MIIEowIBAlksjdfEAnUhY5w7ykVJE6uICX9d9wWLcAMB5e1UO0Zxagtmzjy6UHEyk&#xD;lgGJb2PeaCeyjnkhtwlRgeq9zgRqcGFFu+q/2VJUGeUUt4JqX0dfIiTT5nbK0kYW&#xD;wWkDBQvKtC+nepKs5Sck9y4h2DO95uAMhct6+R6W4qzXyMQKQST5r0FfdyWbUKFN&#xD;6mvpaxBoB3BF8YQcs8Z6cGZfCdEC2vI2jhgR9MALFE/w2G3+REmDpi7tpX4eB7al&#xD;NrJr8E6f44EEYDmrO9zQ0pnEV9et9rvULUYXIovuKIoIEXeY8vIUaEuGPYL5gcYS&#xD;HtROW0zCxlO2eg5HNJcTAUQUI4OnTd2o+9LdCwIDAQABAoIBAQCGoAZ4wDKgcOrM&#xD;oeemYa0iepwViKpzBrtIb6yJlA494ICmOHQocehRkAou3MvZZ5WUNkWuDl+ol98D&#xD;kj8+OhE801tpTswMx3SFWXH0p9E40zWIBrYzls8e4pj+4ktYf3O+MWNSsAoIJUHG&#xD;/L+7RhBca/J607dgAW1FlYCiojI0qIRKPkvdotQ3M+kYitYIv+MxZtmOB5OqG5g&#xD;cUFT9BxMAFW0JrCf8Zgcd0qvtjnQkqHp1SAFlFOE9918JijeVj3cXXajy+IazNwy&#xD;3Qq945thQpZaEXtMnggpN86CeaVtt4m9dXLiyjVVd6OfF6aTdG8W9CoKnIIvyKIA&#xD;Uzu+IcwBAoGBAM29a/OeY74ezG6MwVRw4uLATllg6acnfSUNQhMtdfPKhQWSGanM&#xD;/jwpWx/b4vgTiR8ZPxf1tViEdSwFsZwbo1fzWZvxRicbyIHtMF23sFNPo2rDhdBX&#xD;efafa0FlV3solOFFrSuDPkbi8WDKJA6156NqJfv6RTjSzKWtpPpxYYpxAoGBAMO0&#xD;f4XnfOAOTzeJ75C0/bRnGxE8Fb4h9+CvBbTzcm+m9csAQcriY/cyqiidKulrDgeQ&#xD;UKlRGwtrgWHQEPRLmdj3e/bPNOt6o+CJy2/pLfbp/boG7xdQus0U4Kx7+rmPd7Lv&#xD;uXcSeNupODhC44uH3HE16LA5WQxTu3PI3k3JP8U7AoGAcqgMwDDV7z8kuLsyhsd+&#xD;edWoFEFhFWl5Yau41g0wvdNwPIGGUc3PJWH6yY92NsBUW4NrWQPys0jmL8lgiNoS&#xD;NtKEbtaQPP1LybSQjrnuxw8LyFT8fvYxHxMK59/9V8Ju7fgxoJ08mK6izEj6vUP8&#xD;suJOltWLvDYmHHLgDT4gmNECgYBzVcmdwaoPZX98DLd5waCPFACYrJ9nuR8bdCpZ&#xD;1OtJL81FQLaFedxOD7bGTrG+dFAFVyCiWGEm3smWOofzYSae/mM5Ni5K5LD1oF+b&#xD;aYGkNYxJeNKpG/Oq7zXlkP9XIlz5wFu9983wLoxxiYQk27u+UbJ/gUzvOjv43I1cX&#xD;4pXJhwKBgEjSju4IYF8KRKCiQ+s/95xIUqwITt9nEDssaI4ms0ZcRROq9cAhxX4H&#xD;lOn8Ruyy7mGJ0LEpyuFVsSvb7sHqRdy2eyyXO/amwSquOZ9+BjGOb2wjoVHDCYm+&#xD;1obXuj+YB36cHqDTbWOM8yCkBcdHCL0eczvComocAiKWfJX9ZNWM&#xD;-----END RSA PRIVATE KEY-----</validation-cert><runlist><element>role[web-server]</element><element>recipe[apache2]</element></runlist></chef></bootstrap>
@@ -8,6 +8,8 @@ lease {
8
8
  option domain-name-servers 8.8.8.8;
9
9
  option dhcp-server-identifier 192.168.0.1;
10
10
  option vendor-encapsulated-options "http://10.60.20.11/api/cloud/virtualdatacenters/4/virtualappliances/12/virtualmachines/10/config/bootstrap@@Ykozf/WP/hred8HWnFOwHA==";
11
+ option domain-name "abiquo.com";
12
+ option hardware ethernet 00:00:00:00:00:00;
11
13
  renew 4 2011/11/17 22:59:41;
12
14
  rebind 5 2011/11/18 06:41:48;
13
15
  expire 5 2011/11/18 08:46:48;
@@ -9,72 +9,155 @@ describe "Bootstrap Config Parser" do
9
9
 
10
10
  describe "parsing" do
11
11
  it "should load a valid bootstrap file" do
12
- lambda do
12
+ expect {
13
13
  BootstrapConfigParser.new(File.read(data_dir + "bootstrap.xml"))
14
- end.should_not raise_error
14
+ }.to_not raise_error
15
15
  end
16
16
 
17
17
  it "should raise exception loading invalid bootstrap file" do
18
- lambda do
18
+ expect {
19
19
  BootstrapConfigParser.new(File.read(data_dir + "invalid_bootstrap.xml"))
20
- end.should raise_error
20
+ }.to raise_error
21
21
  end
22
- end
23
22
 
24
- describe "name" do
25
- it "should be a string" do
26
- @cp.node_name.should be_a(String)
23
+ it "should raise exception loading invalid bootstrap file missing validation" do
24
+ expect {
25
+ BootstrapConfigParser.new(File.read(data_dir + "bootstrap_missing_validation.xml"))
26
+ }.to raise_error /Missing <validation-client-name> element/
27
27
  end
28
- it "should start with ABQ-" do
29
- @cp.node_name.should match(/^ABQ-/)
28
+
29
+ it "should raise exception loading invalid bootstrap file missing server url" do
30
+ expect {
31
+ BootstrapConfigParser.new(File.read(data_dir + "bootstrap_missing_server_url.xml"))
32
+ }.to raise_error /Missing <chef-server-url> element/
30
33
  end
31
- end
32
34
 
33
- describe "run_list" do
34
- it "should be an Array" do
35
- @cp.run_list.should be_a(Array)
35
+ it "should raise exception loading invalid bootstrap file missing node" do
36
+ expect {
37
+ BootstrapConfigParser.new(File.read(data_dir + "bootstrap_missing_node.xml"))
38
+ }.to raise_error /Missing <node> element/
36
39
  end
37
40
 
38
- it "should be an empty Array" do
39
- cp = BootstrapConfigParser.new(File.read(data_dir + "bootstrap_empty_runlist.xml"))
40
- cp.run_list.should be_empty
41
+ it "should raise exception loading invalid bootstrap file missing chef" do
42
+ expect {
43
+ BootstrapConfigParser.new(File.read(data_dir + "bootstrap_missing_chef.xml"))
44
+ }.to raise_error /Missing <chef> element/
41
45
  end
42
46
 
43
- it "should have a two items in the runlist" do
44
- @cp.run_list.should have(2).items
47
+ it "should raise exception loading invalid bootstrap file missing cert" do
48
+ expect {
49
+ BootstrapConfigParser.new(File.read(data_dir + "bootstrap_missing_cert.xml"))
50
+ }.to raise_error /Missing <validation-cert> element/
45
51
  end
46
52
 
47
- it "should be an array of strings" do
48
- @cp.run_list.each do |i|
49
- i.should be_a(String)
50
- end
53
+ it "should raise exception loading invalid bootstrap file empty validation" do
54
+ expect {
55
+ BootstrapConfigParser.new(File.read(data_dir + "bootstrap_empty_validation.xml"))
56
+ }.to raise_error /Missing <validation-client-name> info/
51
57
  end
52
58
 
53
- it "should have a recipe and a role" do
54
- @cp.run_list.first.should match(/role\[/)
55
- @cp.run_list.last.should match(/recipe\[/)
59
+ it "should raise exception loading invalid bootstrap file empty server url" do
60
+ expect {
61
+ BootstrapConfigParser.new(File.read(data_dir + "bootstrap_empty_server_url.xml"))
62
+ }.to raise_error /Missing <chef-server-url> info/
56
63
  end
57
- end
58
-
59
- describe "chef-server-url" do
60
- it "should be a URL" do
61
- @cp.chef_server_url.should match(/^http(s)?:\/\//)
64
+
65
+ it "should raise exception loading invalid bootstrap file empty node" do
66
+ expect {
67
+ BootstrapConfigParser.new(File.read(data_dir + "bootstrap_empty_node.xml"))
68
+ }.to raise_error /Missing <node> info/
62
69
  end
63
- end
64
70
 
65
- describe "validation-client-name" do
66
- it "should be a String" do
67
- @cp.validation_client_name.should be_a(String)
71
+ it "should raise exception loading invalid bootstrap file empty chef" do
72
+ expect {
73
+ BootstrapConfigParser.new(File.read(data_dir + "bootstrap_empty_chef.xml"))
74
+ }.to raise_error /Missing <chef> info/
68
75
  end
69
- end
70
76
 
71
- describe "validation_cert" do
72
- it 'should start with -----BEGIN RSA PRIVATE KEY' do
73
- @cp.validation_cert.should match(/^-----BEGIN RSA PRIVATE KEY/)
77
+ it "should raise exception loading invalid bootstrap file empty cert" do
78
+ expect {
79
+ BootstrapConfigParser.new(File.read(data_dir + "bootstrap_empty_cert.xml"))
80
+ }.to raise_error /Missing <validation-cert> info/
74
81
  end
75
- it 'should end with END RSA PRIVATE KEY-----' do
76
- @cp.validation_cert.should match(/END RSA PRIVATE KEY-----$/)
82
+
83
+
84
+ describe "name" do
85
+ it "should be a string" do
86
+ @cp.node_name.should be_a(String)
87
+ end
88
+ it "should start with ABQ-" do
89
+ @cp.node_name.should match(/^ABQ-/)
90
+ end
91
+ end
92
+
93
+ describe "node_config" do
94
+ it "should be a Hash" do
95
+ @cp.node_config.should be_a(Hash)
96
+ end
97
+
98
+ it "runlist should be an empty missing" do
99
+ cp = BootstrapConfigParser.new(File.read(data_dir + "bootstrap_empty_runlist.xml"))
100
+ expect(cp.node_config).not_to have_key("run_list")
101
+ end
102
+
103
+ it "should have three elements" do
104
+ @cp.node_config.should have(3).items
105
+ end
106
+
107
+ it "runlist should have a two items in the runlist" do
108
+ @cp.node_config["run_list"].should have(2).items
109
+ end
110
+
111
+ it "should be an array of strings" do
112
+ @cp.node_config["run_list"].each do |i|
113
+ i.should be_a(String)
114
+ end
115
+ end
116
+
117
+ it "should have a recipe and a role" do
118
+ @cp.node_config["run_list"].first.should match(/role\[/)
119
+ @cp.node_config["run_list"].last.should match(/recipe\[/)
120
+ end
121
+
122
+ it "should contains boundary and newrelic" do
123
+ expect(@cp.node_config).to have_key("boundary")
124
+ expect(@cp.node_config).to have_key("newrelic")
125
+ end
126
+
127
+ it "attributes should be missing" do
128
+ cp = BootstrapConfigParser.new(File.read(data_dir + "bootstrap_no_attributes.xml"))
129
+ expect(cp.node_config).not_to have_key("boundary")
130
+ expect(cp.node_config).not_to have_key("newrelic")
131
+ expect(cp.node_config).to have_key("run_list")
132
+ end
133
+
134
+ it "attributes should be missing" do
135
+ cp = BootstrapConfigParser.new(File.read(data_dir + "bootstrap_empty_runlist_no_attributes.xml"))
136
+ cp.node_config.size.should be(0)
137
+ end
138
+
77
139
  end
78
- end
79
140
 
141
+ describe "chef-server-url" do
142
+ it "should be a URL" do
143
+ @cp.chef_server_url.should match(/^http(s)?:\/\//)
144
+ end
145
+ end
146
+
147
+ describe "validation-client-name" do
148
+ it "should be a String" do
149
+ @cp.validation_client_name.should be_a(String)
150
+ end
151
+ end
152
+
153
+ describe "validation_cert" do
154
+ it 'should start with -----BEGIN RSA PRIVATE KEY' do
155
+ @cp.validation_cert.should match(/^-----BEGIN RSA PRIVATE KEY/)
156
+ end
157
+ it 'should end with END RSA PRIVATE KEY-----' do
158
+ @cp.validation_cert.should match(/END RSA PRIVATE KEY-----$/)
159
+ end
160
+ end
161
+
162
+ end
80
163
  end
metadata CHANGED
@@ -1,161 +1,171 @@
1
- --- !ruby/object:Gem::Specification
1
+ --- !ruby/object:Gem::Specification
2
2
  name: abiquo-chef-agent
3
- version: !ruby/object:Gem::Version
4
- hash: 1
3
+ version: !ruby/object:Gem::Version
4
+ version: 2.0.0
5
5
  prerelease:
6
- segments:
7
- - 1
8
- - 0
9
- - 11
10
- version: 1.0.11
11
6
  platform: ruby
12
- authors:
7
+ authors:
13
8
  - Salvador Girones
14
9
  - Sergio Rubio
10
+ - Serafin Sedano
15
11
  autorequire:
16
12
  bindir: bin
17
13
  cert_chain: []
18
-
19
- date: 2012-10-26 00:00:00 Z
20
- dependencies:
21
- - !ruby/object:Gem::Dependency
22
- requirement: &id001 !ruby/object:Gem::Requirement
23
- none: false
24
- requirements:
25
- - - ">="
26
- - !ruby/object:Gem::Version
27
- hash: 3
28
- segments:
29
- - 0
30
- version: "0"
31
- version_requirements: *id001
14
+ date: 2013-09-19 00:00:00.000000000 Z
15
+ dependencies:
16
+ - !ruby/object:Gem::Dependency
32
17
  name: rspec
33
- prerelease: false
18
+ requirement: !ruby/object:Gem::Requirement
19
+ none: false
20
+ requirements:
21
+ - - ! '>='
22
+ - !ruby/object:Gem::Version
23
+ version: '0'
34
24
  type: :development
35
- - !ruby/object:Gem::Dependency
36
- requirement: &id002 !ruby/object:Gem::Requirement
25
+ prerelease: false
26
+ version_requirements: !ruby/object:Gem::Requirement
27
+ none: false
28
+ requirements:
29
+ - - ! '>='
30
+ - !ruby/object:Gem::Version
31
+ version: '0'
32
+ - !ruby/object:Gem::Dependency
33
+ name: bundler
34
+ requirement: !ruby/object:Gem::Requirement
37
35
  none: false
38
- requirements:
36
+ requirements:
39
37
  - - ~>
40
- - !ruby/object:Gem::Version
41
- hash: 23
42
- segments:
43
- - 1
44
- - 0
45
- - 0
38
+ - !ruby/object:Gem::Version
46
39
  version: 1.0.0
47
- version_requirements: *id002
48
- name: bundler
49
- prerelease: false
50
40
  type: :development
51
- - !ruby/object:Gem::Dependency
52
- requirement: &id003 !ruby/object:Gem::Requirement
53
- none: false
54
- requirements:
55
- - - ">="
56
- - !ruby/object:Gem::Version
57
- hash: 3
58
- segments:
59
- - 0
60
- version: "0"
61
- version_requirements: *id003
62
- name: jeweler
63
41
  prerelease: false
42
+ version_requirements: !ruby/object:Gem::Requirement
43
+ none: false
44
+ requirements:
45
+ - - ~>
46
+ - !ruby/object:Gem::Version
47
+ version: 1.0.0
48
+ - !ruby/object:Gem::Dependency
49
+ name: jeweler
50
+ requirement: !ruby/object:Gem::Requirement
51
+ none: false
52
+ requirements:
53
+ - - ! '>='
54
+ - !ruby/object:Gem::Version
55
+ version: '0'
64
56
  type: :development
65
- - !ruby/object:Gem::Dependency
66
- requirement: &id004 !ruby/object:Gem::Requirement
67
- none: false
68
- requirements:
69
- - - ">="
70
- - !ruby/object:Gem::Version
71
- hash: 3
72
- segments:
73
- - 0
74
- version: "0"
75
- version_requirements: *id004
76
- name: simplecov
77
57
  prerelease: false
58
+ version_requirements: !ruby/object:Gem::Requirement
59
+ none: false
60
+ requirements:
61
+ - - ! '>='
62
+ - !ruby/object:Gem::Version
63
+ version: '0'
64
+ - !ruby/object:Gem::Dependency
65
+ name: simplecov
66
+ requirement: !ruby/object:Gem::Requirement
67
+ none: false
68
+ requirements:
69
+ - - ! '>='
70
+ - !ruby/object:Gem::Version
71
+ version: '0'
78
72
  type: :development
79
- - !ruby/object:Gem::Dependency
80
- requirement: &id005 !ruby/object:Gem::Requirement
81
- none: false
82
- requirements:
83
- - - ">="
84
- - !ruby/object:Gem::Version
85
- hash: 3
86
- segments:
87
- - 0
88
- version: "0"
89
- version_requirements: *id005
90
- name: run-as-root
91
73
  prerelease: false
74
+ version_requirements: !ruby/object:Gem::Requirement
75
+ none: false
76
+ requirements:
77
+ - - ! '>='
78
+ - !ruby/object:Gem::Version
79
+ version: '0'
80
+ - !ruby/object:Gem::Dependency
81
+ name: run-as-root
82
+ requirement: !ruby/object:Gem::Requirement
83
+ none: false
84
+ requirements:
85
+ - - ! '>='
86
+ - !ruby/object:Gem::Version
87
+ version: '0'
92
88
  type: :runtime
93
- - !ruby/object:Gem::Dependency
94
- requirement: &id006 !ruby/object:Gem::Requirement
95
- none: false
96
- requirements:
97
- - - ">="
98
- - !ruby/object:Gem::Version
99
- hash: 3
100
- segments:
101
- - 0
102
- version: "0"
103
- version_requirements: *id006
104
- name: chef
105
89
  prerelease: false
90
+ version_requirements: !ruby/object:Gem::Requirement
91
+ none: false
92
+ requirements:
93
+ - - ! '>='
94
+ - !ruby/object:Gem::Version
95
+ version: '0'
96
+ - !ruby/object:Gem::Dependency
97
+ name: chef
98
+ requirement: !ruby/object:Gem::Requirement
99
+ none: false
100
+ requirements:
101
+ - - ! '>='
102
+ - !ruby/object:Gem::Version
103
+ version: '0'
106
104
  type: :runtime
107
- - !ruby/object:Gem::Dependency
108
- requirement: &id007 !ruby/object:Gem::Requirement
109
- none: false
110
- requirements:
111
- - - ">="
112
- - !ruby/object:Gem::Version
113
- hash: 3
114
- segments:
115
- - 0
116
- version: "0"
117
- version_requirements: *id007
118
- name: daemons
119
105
  prerelease: false
106
+ version_requirements: !ruby/object:Gem::Requirement
107
+ none: false
108
+ requirements:
109
+ - - ! '>='
110
+ - !ruby/object:Gem::Version
111
+ version: '0'
112
+ - !ruby/object:Gem::Dependency
113
+ name: daemons
114
+ requirement: !ruby/object:Gem::Requirement
115
+ none: false
116
+ requirements:
117
+ - - ! '>='
118
+ - !ruby/object:Gem::Version
119
+ version: '0'
120
120
  type: :runtime
121
- - !ruby/object:Gem::Dependency
122
- requirement: &id008 !ruby/object:Gem::Requirement
123
- none: false
124
- requirements:
125
- - - ">="
126
- - !ruby/object:Gem::Version
127
- hash: 3
128
- segments:
129
- - 0
130
- version: "0"
131
- version_requirements: *id008
132
- name: rest-client
133
121
  prerelease: false
122
+ version_requirements: !ruby/object:Gem::Requirement
123
+ none: false
124
+ requirements:
125
+ - - ! '>='
126
+ - !ruby/object:Gem::Version
127
+ version: '0'
128
+ - !ruby/object:Gem::Dependency
129
+ name: rest-client
130
+ requirement: !ruby/object:Gem::Requirement
131
+ none: false
132
+ requirements:
133
+ - - ! '>='
134
+ - !ruby/object:Gem::Version
135
+ version: '0'
134
136
  type: :runtime
135
- - !ruby/object:Gem::Dependency
136
- requirement: &id009 !ruby/object:Gem::Requirement
137
- none: false
138
- requirements:
139
- - - ">="
140
- - !ruby/object:Gem::Version
141
- hash: 3
142
- segments:
143
- - 0
144
- version: "0"
145
- version_requirements: *id009
146
- name: xml-simple
147
137
  prerelease: false
138
+ version_requirements: !ruby/object:Gem::Requirement
139
+ none: false
140
+ requirements:
141
+ - - ! '>='
142
+ - !ruby/object:Gem::Version
143
+ version: '0'
144
+ - !ruby/object:Gem::Dependency
145
+ name: xml-simple
146
+ requirement: !ruby/object:Gem::Requirement
147
+ none: false
148
+ requirements:
149
+ - - ! '>='
150
+ - !ruby/object:Gem::Version
151
+ version: '0'
148
152
  type: :runtime
153
+ prerelease: false
154
+ version_requirements: !ruby/object:Gem::Requirement
155
+ none: false
156
+ requirements:
157
+ - - ! '>='
158
+ - !ruby/object:Gem::Version
159
+ version: '0'
149
160
  description: Abiquo Chef Agent
150
- email: salvador.girones@abiquo.com
151
- executables:
161
+ email: ruby-gems@abiquo.com
162
+ executables:
152
163
  - abiquo-chef-run
153
164
  extensions: []
154
-
155
- extra_rdoc_files:
165
+ extra_rdoc_files:
156
166
  - LICENSE.txt
157
167
  - README.md
158
- files:
168
+ files:
159
169
  - Gemfile
160
170
  - LICENSE.txt
161
171
  - README.md
@@ -166,7 +176,19 @@ files:
166
176
  - scripts/debian/abiquo-chef-agent.conf.upstart
167
177
  - scripts/debian/chef-client.defaults
168
178
  - spec/data/bootstrap.xml
179
+ - spec/data/bootstrap_empty_cert.xml
180
+ - spec/data/bootstrap_empty_chef.xml
181
+ - spec/data/bootstrap_empty_node.xml
169
182
  - spec/data/bootstrap_empty_runlist.xml
183
+ - spec/data/bootstrap_empty_runlist_no_attributes.xml
184
+ - spec/data/bootstrap_empty_server_url.xml
185
+ - spec/data/bootstrap_empty_validation.xml
186
+ - spec/data/bootstrap_missing_cert.xml
187
+ - spec/data/bootstrap_missing_chef.xml
188
+ - spec/data/bootstrap_missing_node.xml
189
+ - spec/data/bootstrap_missing_server_url.xml
190
+ - spec/data/bootstrap_missing_validation.xml
191
+ - spec/data/bootstrap_no_attributes.xml
170
192
  - spec/data/dhclient/dhclient.leases
171
193
  - spec/data/invalid_bootstrap.xml
172
194
  - spec/spec_helper.rb
@@ -174,37 +196,28 @@ files:
174
196
  - spec/unit/config_spec.rb
175
197
  - spec/unit/util_spec.rb
176
198
  homepage: http://github.com/abiquo/abiquo-chef-agent
177
- licenses:
199
+ licenses:
178
200
  - MIT
179
201
  post_install_message:
180
202
  rdoc_options: []
181
-
182
- require_paths:
203
+ require_paths:
183
204
  - lib
184
- required_ruby_version: !ruby/object:Gem::Requirement
205
+ required_ruby_version: !ruby/object:Gem::Requirement
185
206
  none: false
186
- requirements:
187
- - - ">="
188
- - !ruby/object:Gem::Version
189
- hash: 3
190
- segments:
191
- - 0
192
- version: "0"
193
- required_rubygems_version: !ruby/object:Gem::Requirement
207
+ requirements:
208
+ - - ! '>='
209
+ - !ruby/object:Gem::Version
210
+ version: '0'
211
+ required_rubygems_version: !ruby/object:Gem::Requirement
194
212
  none: false
195
- requirements:
196
- - - ">="
197
- - !ruby/object:Gem::Version
198
- hash: 3
199
- segments:
200
- - 0
201
- version: "0"
213
+ requirements:
214
+ - - ! '>='
215
+ - !ruby/object:Gem::Version
216
+ version: '0'
202
217
  requirements: []
203
-
204
218
  rubyforge_project:
205
- rubygems_version: 1.8.11
219
+ rubygems_version: 1.8.24
206
220
  signing_key:
207
221
  specification_version: 3
208
222
  summary: Abiquo Chef Agent
209
223
  test_files: []
210
-