diff options
author | John Keiser <jkeiser@opscode.com> | 2014-04-18 13:20:40 -0700 |
---|---|---|
committer | John Keiser <jkeiser@opscode.com> | 2014-04-18 13:20:40 -0700 |
commit | e655c7857e9568ece4555e627fc7d3aa372449ae (patch) | |
tree | 9bff58e253d7e5150d61d4dc6ba7de02cf475335 /lib/chef_zero/server.rb | |
parent | d66376d5a813fe11a6272ce890fd36bfd32ca0db (diff) | |
download | chef-zero-e655c7857e9568ece4555e627fc7d3aa372449ae.tar.gz |
Add support for "/organizations/chef" prefix
Diffstat (limited to 'lib/chef_zero/server.rb')
-rw-r--r-- | lib/chef_zero/server.rb | 97 |
1 files changed, 54 insertions, 43 deletions
diff --git a/lib/chef_zero/server.rb b/lib/chef_zero/server.rb index 26ccec2..5460d95 100644 --- a/lib/chef_zero/server.rb +++ b/lib/chef_zero/server.rb @@ -65,7 +65,8 @@ module ChefZero :host => '127.0.0.1', :port => 8889, :log_level => :info, - :generate_real_keys => true + :generate_real_keys => true, + :multi_org => true }.freeze def initialize(options = {}) @@ -265,19 +266,20 @@ module ChefZero # } # } # } - def load_data(contents) + def load_data(contents, org_name = 'chef') + create_dir('organizations', org_name) %w(clients environments nodes roles users).each do |data_type| if contents[data_type] dejsonize_children(contents[data_type]).each_pair do |name, data| - data_store.set([data_type, name], data, :create) + data_store.set(['organizations', org_name, data_type, name], data, :create) end end end if contents['data'] contents['data'].each_pair do |key, data_bag| - data_store.create_dir(['data'], key, :recursive) + data_store.create_dir(['organizations', org_name, 'data'], key, :recursive) dejsonize_children(data_bag).each do |item_name, item| - data_store.set(['data', key, item_name], item, :create) + data_store.set(['organizations', org_name, 'data', key, item_name], item, :create) end end end @@ -289,12 +291,12 @@ module ChefZero cookbook_data = CookbookData.to_hash(cookbook, name_version) end raise "No version specified" if !cookbook_data[:version] - data_store.create_dir(['cookbooks'], cookbook_data[:cookbook_name], :recursive) - data_store.set(['cookbooks', cookbook_data[:cookbook_name], cookbook_data[:version]], JSON.pretty_generate(cookbook_data), :create) + data_store.create_dir(['organizations', org_name, 'cookbooks'], cookbook_data[:cookbook_name], :recursive) + data_store.set(['organizations', org_name, 'cookbooks', cookbook_data[:cookbook_name], cookbook_data[:version]], JSON.pretty_generate(cookbook_data), :create) cookbook_data.values.each do |files| next unless files.is_a? Array files.each do |file| - data_store.set(['file_store', 'checksums', file[:checksum]], get_file(cookbook, file[:path]), :create) + data_store.set(['organizations', org_name, 'file_store', 'checksums', file[:checksum]], get_file(cookbook, file[:path]), :create) end end end @@ -319,45 +321,54 @@ module ChefZero private + def open_source_endpoints + [ + [ "/organizations/*/authenticate_user", AuthenticateUserEndpoint.new(self) ], + [ "/organizations/*/clients", ActorsEndpoint.new(self) ], + [ "/organizations/*/clients/*", ActorEndpoint.new(self) ], + [ "/organizations/*/cookbooks", CookbooksEndpoint.new(self) ], + [ "/organizations/*/cookbooks/*", CookbookEndpoint.new(self) ], + [ "/organizations/*/cookbooks/*/*", CookbookVersionEndpoint.new(self) ], + [ "/organizations/*/data", DataBagsEndpoint.new(self) ], + [ "/organizations/*/data/*", DataBagEndpoint.new(self) ], + [ "/organizations/*/data/*/*", DataBagItemEndpoint.new(self) ], + [ "/organizations/*/environments", RestListEndpoint.new(self) ], + [ "/organizations/*/environments/*", EnvironmentEndpoint.new(self) ], + [ "/organizations/*/environments/*/cookbooks", EnvironmentCookbooksEndpoint.new(self) ], + [ "/organizations/*/environments/*/cookbooks/*", EnvironmentCookbookEndpoint.new(self) ], + [ "/organizations/*/environments/*/cookbook_versions", EnvironmentCookbookVersionsEndpoint.new(self) ], + [ "/organizations/*/environments/*/nodes", EnvironmentNodesEndpoint.new(self) ], + [ "/organizations/*/environments/*/recipes", EnvironmentRecipesEndpoint.new(self) ], + [ "/organizations/*/environments/*/roles/*", EnvironmentRoleEndpoint.new(self) ], + [ "/organizations/*/nodes", RestListEndpoint.new(self) ], + [ "/organizations/*/nodes/*", NodeEndpoint.new(self) ], + [ "/organizations/*/principals/*", PrincipalEndpoint.new(self) ], + [ "/organizations/*/roles", RestListEndpoint.new(self) ], + [ "/organizations/*/roles/*", RoleEndpoint.new(self) ], + [ "/organizations/*/roles/*/environments", RoleEnvironmentsEndpoint.new(self) ], + [ "/organizations/*/roles/*/environments/*", EnvironmentRoleEndpoint.new(self) ], + [ "/organizations/*/sandboxes", SandboxesEndpoint.new(self) ], + [ "/organizations/*/sandboxes/*", SandboxEndpoint.new(self) ], + [ "/organizations/*/search", SearchesEndpoint.new(self) ], + [ "/organizations/*/search/*", SearchEndpoint.new(self) ], + [ "/organizations/*/users", ActorsEndpoint.new(self) ], + [ "/organizations/*/users/*", ActorEndpoint.new(self) ], + + [ "/organizations/*/file_store/**", FileStoreFileEndpoint.new(self) ], + ] + end + def app - router = RestRouter.new([ - [ '/authenticate_user', AuthenticateUserEndpoint.new(self) ], - [ '/clients', ActorsEndpoint.new(self) ], - [ '/clients/*', ActorEndpoint.new(self) ], - [ '/cookbooks', CookbooksEndpoint.new(self) ], - [ '/cookbooks/*', CookbookEndpoint.new(self) ], - [ '/cookbooks/*/*', CookbookVersionEndpoint.new(self) ], - [ '/data', DataBagsEndpoint.new(self) ], - [ '/data/*', DataBagEndpoint.new(self) ], - [ '/data/*/*', DataBagItemEndpoint.new(self) ], - [ '/environments', RestListEndpoint.new(self) ], - [ '/environments/*', EnvironmentEndpoint.new(self) ], - [ '/environments/*/cookbooks', EnvironmentCookbooksEndpoint.new(self) ], - [ '/environments/*/cookbooks/*', EnvironmentCookbookEndpoint.new(self) ], - [ '/environments/*/cookbook_versions', EnvironmentCookbookVersionsEndpoint.new(self) ], - [ '/environments/*/nodes', EnvironmentNodesEndpoint.new(self) ], - [ '/environments/*/recipes', EnvironmentRecipesEndpoint.new(self) ], - [ '/environments/*/roles/*', EnvironmentRoleEndpoint.new(self) ], - [ '/nodes', RestListEndpoint.new(self) ], - [ '/nodes/*', NodeEndpoint.new(self) ], - [ '/principals/*', PrincipalEndpoint.new(self) ], - [ '/roles', RestListEndpoint.new(self) ], - [ '/roles/*', RoleEndpoint.new(self) ], - [ '/roles/*/environments', RoleEnvironmentsEndpoint.new(self) ], - [ '/roles/*/environments/*', EnvironmentRoleEndpoint.new(self) ], - [ '/sandboxes', SandboxesEndpoint.new(self) ], - [ '/sandboxes/*', SandboxEndpoint.new(self) ], - [ '/search', SearchesEndpoint.new(self) ], - [ '/search/*', SearchEndpoint.new(self) ], - [ '/users', ActorsEndpoint.new(self) ], - [ '/users/*', ActorEndpoint.new(self) ], - - [ '/file_store/**', FileStoreFileEndpoint.new(self) ], - ]) + router = RestRouter.new(open_source_endpoints) router.not_found = NotFoundEndpoint.new + if options[:multi_org] + rest_base_prefix = [] + else + rest_base_prefix = [ 'organizations', 'chef' ] + end return proc do |env| - request = RestRequest.new(env) + request = RestRequest.new(env, rest_base_prefix) if @on_request_proc @on_request_proc.call(request) end |