Class: Chef::ChefFS::FileSystem::ChefServer::CookbookArtifactsDir
- Inherits:
-
CookbooksDir
- Object
- BaseFSObject
- BaseFSDir
- RestListDir
- CookbooksDir
- Chef::ChefFS::FileSystem::ChefServer::CookbookArtifactsDir
- Defined in:
- lib/chef/chef_fs/file_system/chef_server/cookbook_artifacts_dir.rb
Overview
/cookbook_artifacts
Example children of /cookbook_artifacts:
-
apache2-ab234098245908ddf324a
-
apache2-295387a9823745feff239
-
mysql-1a2b9e1298734dfe90444
Instance Attribute Summary
Attributes inherited from RestListDir
Attributes inherited from BaseFSObject
Instance Method Summary collapse
- #can_have_child?(name, is_dir) ⇒ Boolean
- #chef_rest ⇒ Object
- #children ⇒ Object
- #make_child_entry(name) ⇒ Object
-
#upload_cookbook(other, options) ⇒ Object
Knife currently does not understand versioned cookbooks Cookbook Version uploader also requires a lot of refactoring to make this work.
Methods inherited from CookbooksDir
#create_child_from, #upload_cookbook_from, #with_actual_cookbooks_dir
Methods included from Mixin::FileClass
Methods inherited from RestListDir
#create_child, #environment, #initialize, #org, #rest
Methods inherited from BaseFSDir
Methods inherited from BaseFSObject
#chef_object, #child, #compare_to, #create_child, #delete, #dir?, #exists?, #initialize, #path_for_printing, #read, #root, #write
Constructor Details
This class inherits a constructor from Chef::ChefFS::FileSystem::ChefServer::RestListDir
Instance Method Details
#can_have_child?(name, is_dir) ⇒ Boolean
99 100 101 |
# File 'lib/chef/chef_fs/file_system/chef_server/cookbook_artifacts_dir.rb', line 99 def can_have_child?(name, is_dir) is_dir && name.include?("-") end |
#chef_rest ⇒ Object
95 96 97 |
# File 'lib/chef/chef_fs/file_system/chef_server/cookbook_artifacts_dir.rb', line 95 def chef_rest Chef::ServerAPI.new(root.chef_rest.url, root.chef_rest..merge(version_class: Chef::CookbookManifestVersions)) end |
#children ⇒ Object
42 43 44 45 46 47 48 49 50 51 52 |
# File 'lib/chef/chef_fs/file_system/chef_server/cookbook_artifacts_dir.rb', line 42 def children @children ||= begin result = [] root.get_json("#{api_path}/?num_versions=all").each_pair do |cookbook_name, cookbooks| cookbooks["versions"].each do |cookbook_version| result << CookbookArtifactDir.new("#{cookbook_name}-#{cookbook_version["identifier"]}", self) end end result.sort_by(&:name) end end |
#make_child_entry(name) ⇒ Object
37 38 39 40 |
# File 'lib/chef/chef_fs/file_system/chef_server/cookbook_artifacts_dir.rb', line 37 def make_child_entry(name) result = @children.find { |child| child.name == name } if @children result || CookbookArtifactDir.new(name, self) end |
#upload_cookbook(other, options) ⇒ Object
Knife currently does not understand versioned cookbooks Cookbook Version uploader also requires a lot of refactoring to make this work. So instead, we make a temporary cookbook symlinking back to real cookbook, and upload the proxy.
58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 |
# File 'lib/chef/chef_fs/file_system/chef_server/cookbook_artifacts_dir.rb', line 58 def upload_cookbook(other, ) cookbook_name, _, identifier = other.name.rpartition("-") Dir.mktmpdir do |temp_cookbooks_path| proxy_cookbook_path = "#{temp_cookbooks_path}/#{cookbook_name}" # Make a symlink file_class.symlink other.file_path, proxy_cookbook_path # Instantiate a proxy loader using the temporary symlink proxy_loader = Chef::Cookbook::CookbookVersionLoader.new(proxy_cookbook_path, other.chefignore) proxy_loader.load_cookbooks cookbook_to_upload = proxy_loader.cookbook_version cookbook_to_upload.identifier = identifier cookbook_to_upload.freeze_version if [:freeze] # Instantiate a new uploader based on the proxy loader uploader = Chef::CookbookUploader.new(cookbook_to_upload, force: [:force], rest: chef_rest, policy_mode: true) with_actual_cookbooks_dir(temp_cookbooks_path) do uploader.upload_cookbooks end # # When the temporary directory is being deleted on # windows, the contents of the symlink under that # directory is also deleted. So explicitly remove # the symlink without removing the original contents if we # are running on windows # if ChefUtils.windows? Dir.rmdir proxy_cookbook_path end end end |