diff options
Diffstat (limited to 'lib/chef_zero/endpoints/cookbook_version_endpoint.rb')
-rw-r--r-- | lib/chef_zero/endpoints/cookbook_version_endpoint.rb | 23 |
1 files changed, 16 insertions, 7 deletions
diff --git a/lib/chef_zero/endpoints/cookbook_version_endpoint.rb b/lib/chef_zero/endpoints/cookbook_version_endpoint.rb index e78d44c..5502ba0 100644 --- a/lib/chef_zero/endpoints/cookbook_version_endpoint.rb +++ b/lib/chef_zero/endpoints/cookbook_version_endpoint.rb @@ -58,8 +58,8 @@ module ChefZero deleted_cookbook = get_data(request) response = super(request) - cookbook_name = request.rest_path[3] - cookbook_path = request.rest_path[0..1] + ['cookbooks', cookbook_name] + # Last one out turns out the lights: delete /organizations/ORG/cookbooks/NAME if it no longer has versions + cookbook_path = request.rest_path[0..3] if exists_data_dir?(request, cookbook_path) && list_data(request, cookbook_path).size == 0 delete_data_dir(request, cookbook_path) end @@ -85,11 +85,20 @@ module ChefZero private - def hoover_unused_checksums(deleted_checksums, request, data_type='cookbooks') - data_store.list(request.rest_path[0..1] + [data_type]).each do |cookbook_name| - data_store.list(request.rest_path[0..1] + [data_type, cookbook_name]).each do |version| - cookbook = data_store.get(request.rest_path[0..1] + [data_type, cookbook_name, version], request) - deleted_checksums = deleted_checksums - get_checksums(cookbook) + def hoover_unused_checksums(deleted_checksums, request) + %w(cookbooks cookbook_artifacts).each do |cookbook_type| + begin + cookbooks = data_store.list(request.rest_path[0..1] + [cookbook_type]) + rescue ChefZero::DataStore::DataNotFoundError + # Not all chef versions support cookbook_artifacts + raise unless cookbook_type == "cookbook_artifacts" + cookbooks = [] + end + cookbooks.each do |cookbook_name| + data_store.list(request.rest_path[0..1] + [cookbook_type, cookbook_name]).each do |version| + cookbook = data_store.get(request.rest_path[0..1] + [cookbook_type, cookbook_name, version], request) + deleted_checksums = deleted_checksums - get_checksums(cookbook) + end end end deleted_checksums.each do |checksum| |