summaryrefslogtreecommitdiff
path: root/lib/chef_zero/server.rb
diff options
context:
space:
mode:
Diffstat (limited to 'lib/chef_zero/server.rb')
-rw-r--r--lib/chef_zero/server.rb46
1 files changed, 37 insertions, 9 deletions
diff --git a/lib/chef_zero/server.rb b/lib/chef_zero/server.rb
index 4f6c22d..ff661ca 100644
--- a/lib/chef_zero/server.rb
+++ b/lib/chef_zero/server.rb
@@ -22,6 +22,7 @@ require 'openssl'
require 'chef_zero'
require 'chef_zero/router'
require 'timeout'
+require 'chef_zero/cookbook_data'
require 'chef_zero/endpoints/authenticate_user_endpoint'
require 'chef_zero/endpoints/actors_endpoint'
@@ -97,10 +98,15 @@ module ChefZero
def start_background(timeout = 5)
@thread = Thread.new do
- server.start
+ begin
+ server.start
+ rescue
+ @server_error = $!
+ Chef::Log.error("#{$!.message}\n#{$!.backtrace.join("\n")}")
+ end
end
Timeout::timeout(timeout) do
- until server.running?
+ until server.running? || @server_error
sleep(0.01)
end
end
@@ -113,6 +119,9 @@ module ChefZero
def stop(timeout = 5)
Timeout::timeout(timeout) do
server.stop
+ until !server.running? || !server_error
+ sleep(0.01)
+ end
end
if @thread
@thread.kill
@@ -156,20 +165,33 @@ module ChefZero
# }
# }
def load_data(contents)
- %w(clients data environments nodes roles users).each do |data_type|
- server.data[data_type].merge!(contents[data_type]) if contents[data_type]
+ %w(clients environments nodes roles users).each do |data_type|
+ if contents[data_type]
+ dejsonize_children!(contents[data_type])
+ data[data_type].merge!(contents[data_type])
+ end
+ end
+ if contents['data']
+ contents['data'].values.each do |data_bag|
+ dejsonize_children!(data_bag)
+ end
+ data['data'].merge!(contents['data'])
end
if contents['cookbooks']
contents['cookbooks'].each_pair do |name_version, cookbook|
if name_version =~ /(.+)-(\d+\.\d+\.\d+)$/
- cookbook_data = CookbookData.to_json(cookbook, $1, $2)
+ cookbook_data = CookbookData.to_hash(cookbook, $1, $2)
else
- cookbook_data = CookbookData.to_json(cookbook, name_version)
+ cookbook_data = CookbookData.to_hash(cookbook, name_version)
end
- server.data['cookbooks'][cookbook_data['cookbook_name']][cookbook_data['version']] = cookbook_data
- cookbook_data.each do |files|
+ raise "No version specified" if !cookbook_data[:version]
+ data['cookbooks'][cookbook_data[:cookbook_name]] = {} if !data['cookbooks'][cookbook_data[:cookbook_name]]
+ data['cookbooks'][cookbook_data[:cookbook_name]][cookbook_data[:version]] = JSON.pretty_generate(cookbook_data)
+ cookbook_data.values.each do |files|
next unless files.is_a? Array
- server.data['file_store'][file[:checksum]] = get_file(cookbook, file[:path])
+ files.each do |file|
+ data['file_store'][file[:checksum]] = get_file(cookbook, file[:path])
+ end
end
end
end
@@ -216,6 +238,12 @@ module ChefZero
router
end
+ def dejsonize_children!(hash)
+ hash.each_pair do |key, value|
+ hash[key] = JSON.pretty_generate(value) if value.is_a?(Hash)
+ end
+ end
+
def get_file(directory, path)
value = directory
path.split('/').each do |part|