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, #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.
6 7 8 9 |
# File 'lib/ridley/resources/cookbook_resource.rb', line 6 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
26 27 28 29 30 31 32 33 34 |
# File 'lib/ridley/resources/cookbook_resource.rb', line 26 def all response = request(:get, self.class.resource_path) {}.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
44 45 46 47 48 49 50 51 52 53 54 |
# File 'lib/ridley/resources/cookbook_resource.rb', line 44 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
62 63 64 |
# File 'lib/ridley/resources/cookbook_resource.rb', line 62 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
78 79 80 81 82 83 84 |
# File 'lib/ridley/resources/cookbook_resource.rb', line 78 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
90 91 92 93 94 95 96 |
# File 'lib/ridley/resources/cookbook_resource.rb', line 90 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
105 106 107 108 109 110 111 |
# File 'lib/ridley/resources/cookbook_resource.rb', line 105 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
124 125 126 127 128 129 |
# File 'lib/ridley/resources/cookbook_resource.rb', line 124 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.
150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 |
# File 'lib/ridley/resources/cookbook_resource.rb', line 150 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
186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 |
# File 'lib/ridley/resources/cookbook_resource.rb', line 186 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) 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
220 221 222 223 224 225 226 227 228 229 230 231 |
# File 'lib/ridley/resources/cookbook_resource.rb', line 220 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 |