Class: Ridley::CookbookResource
- Defined in:
- lib/ridley/resources/cookbook_resource.rb
Instance Method Summary collapse
-
#all ⇒ Hash
List all of the cookbooks and their versions present on the remote.
-
#delete(name, version, options = {}) ⇒ Boolean
Delete a cookbook of the given name and version on the remote Chef server.
-
#delete_all(name, options = {}) ⇒ Object
Delete all of the versions of a given cookbook on the remote Chef server.
-
#download(name, version, destination = Dir.mktmpdir) ⇒ String
Download the entire cookbook.
- #find(object, version) ⇒ nil, CookbookResource
-
#initialize(connection_registry, client_name, client_key, options = {}) ⇒ CookbookResource
constructor
A new instance of CookbookResource.
-
#latest_version(name) ⇒ String?
Return the latest version of the given cookbook found on the remote Chef server.
-
#satisfy(name, constraint) ⇒ CookbookResource?
Return the version of the given cookbook which best stasifies the given constraint.
-
#update(cookbook, options = {}) ⇒ Hash
(also: #create)
Update or create a new Cookbook Version of the given name, version with the given manifest of files and checksums.
-
#upload(path, options = {}) ⇒ Hash
Uploads a cookbook to the remote Chef server from the contents of a filepath.
-
#versions(name) ⇒ Array<String>
Return a list of versions for the given cookbook present on the remote Chef server.
Methods inherited from Resource
#connection, #from_file, #from_json, #new, representation, represented_by, resource_path, set_resource_path
Constructor Details
#initialize(connection_registry, client_name, client_key, options = {}) ⇒ CookbookResource
Returns a new instance of CookbookResource.
8 9 10 11 |
# File 'lib/ridley/resources/cookbook_resource.rb', line 8 def initialize(connection_registry, client_name, client_key, = {}) super(connection_registry) @sandbox_resource = SandboxResource.new_link(connection_registry, client_name, client_key, ) end |
Instance Method Details
#all ⇒ Hash
List all of the cookbooks and their versions present on the remote
28 29 30 31 32 33 34 35 36 |
# File 'lib/ridley/resources/cookbook_resource.rb', line 28 def all response = request(:get, self.class.resource_path, num_versions: "all") {}.tap do |cookbooks| response.each do |name, details| cookbooks[name] = details["versions"].collect { |version| version["version"] } end end end |
#delete(name, version, options = {}) ⇒ Boolean
Delete a cookbook of the given name and version on the remote Chef server
46 47 48 49 50 51 52 53 54 55 56 |
# File 'lib/ridley/resources/cookbook_resource.rb', line 46 def delete(name, version, = {}) = .reverse_merge(purge: false) url = "#{self.class.resource_path}/#{name}/#{version}" url += "?purge=true" if [:purge] request(:delete, url) true rescue AbortError => ex return nil if ex.cause.is_a?(Errors::HTTPNotFound) abort(ex.cause) end |
#delete_all(name, options = {}) ⇒ Object
Delete all of the versions of a given cookbook on the remote Chef server
64 65 66 |
# File 'lib/ridley/resources/cookbook_resource.rb', line 64 def delete_all(name, = {}) versions(name).collect { |version| future(:delete, name, version, ) }.map(&:value) end |
#download(name, version, destination = Dir.mktmpdir) ⇒ String
Download the entire cookbook
80 81 82 83 84 85 86 |
# File 'lib/ridley/resources/cookbook_resource.rb', line 80 def download(name, version, destination = Dir.mktmpdir) if cookbook = find(name, version) cookbook.download(destination) else abort Errors::ResourceNotFound.new("cookbook #{name} (#{version}) was not found") end end |
#find(object, version) ⇒ nil, CookbookResource
92 93 94 95 96 97 98 |
# File 'lib/ridley/resources/cookbook_resource.rb', line 92 def find(object, version) chef_id = object.respond_to?(:chef_id) ? object.chef_id : object new(request(:get, "#{self.class.resource_path}/#{chef_id}/#{version}")) rescue AbortError => ex return nil if ex.cause.is_a?(Errors::HTTPNotFound) abort(ex.cause) end |
#latest_version(name) ⇒ String?
Return the latest version of the given cookbook found on the remote Chef server
107 108 109 110 111 112 113 |
# File 'lib/ridley/resources/cookbook_resource.rb', line 107 def latest_version(name) ver = versions(name).collect do |version| Solve::Version.new(version) end.sort.last ver.nil? ? nil : ver.to_s end |
#satisfy(name, constraint) ⇒ CookbookResource?
Return the version of the given cookbook which best stasifies the given constraint
126 127 128 129 130 131 |
# File 'lib/ridley/resources/cookbook_resource.rb', line 126 def satisfy(name, constraint) version = Solve::Solver.satisfy_best(constraint, versions(name)).to_s find(name, version) rescue Solve::Errors::NoSolutionError nil end |
#update(cookbook, options = {}) ⇒ Hash Also known as: create
Update or create a new Cookbook Version of the given name, version with the given manifest of files and checksums.
152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 |
# File 'lib/ridley/resources/cookbook_resource.rb', line 152 def update(cookbook, = {}) = .reverse_merge(force: false, freeze: false) cookbook.frozen = [:freeze] url = "cookbooks/#{cookbook.cookbook_name}/#{cookbook.version}" url << "?force=true" if [:force] request(:put, url, cookbook.to_json) rescue AbortError => ex if ex.cause.is_a?(Errors::HTTPConflict) abort Ridley::Errors::FrozenCookbook.new(ex) end abort(ex.cause) end |
#upload(path, options = {}) ⇒ Hash
Uploads a cookbook to the remote Chef server from the contents of a filepath
188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 |
# File 'lib/ridley/resources/cookbook_resource.rb', line 188 def upload(path, = {}) = .reverse_merge(validate: true, force: false, freeze: false) cookbook = Ridley::Chef::Cookbook.from_path(path, .slice(:name)) unless (existing = find(cookbook.cookbook_name, cookbook.version)).nil? if existing.frozen? && [:force] == false msg = "The cookbook #{cookbook.cookbook_name} (#{cookbook.version}) already exists and is" msg << " frozen on the Chef server. Use the 'force' option to override." abort Ridley::Errors::FrozenCookbook.new(msg) end end if [:validate] cookbook.validate end checksums = cookbook.checksums.dup sandbox = sandbox_resource.create(checksums.keys.sort) sandbox.upload(checksums) sandbox.commit update(cookbook, .slice(:force, :freeze)) end |
#versions(name) ⇒ Array<String>
Return a list of versions for the given cookbook present on the remote Chef server
222 223 224 225 226 227 228 229 230 231 232 233 |
# File 'lib/ridley/resources/cookbook_resource.rb', line 222 def versions(name) response = request(:get, "#{self.class.resource_path}/#{name}") response[name]["versions"].collect do |cb_ver| cb_ver["version"] end rescue AbortError => ex if ex.cause.is_a?(Errors::HTTPNotFound) abort Errors::ResourceNotFound.new(ex) end abort(ex.cause) end |