Sha256: 7b81efcea21ffb86c71341e74e125a275f467ed21ae7c71d601749c6a294af6c

Contents?: true

Size: 1.66 KB

Versions: 1

Compression:

Stored size: 1.66 KB

Contents

require 'pathname'
require 'chef/rest'
require 'chef/cookbook_version'

module Berkshelf
  module RSpec
    module ChefAPI
      def purge_cookbook(name, version)
        rest.delete_rest("cookbooks/#{name}/#{version}?purge=true")
      rescue Net::HTTPServerException => e
        raise unless e.to_s =~ /^404/
      end

      def server_has_cookbook?(name, version)
        rest.get_rest("cookbooks/#{name}/#{version}")
        true
      rescue Net::HTTPServerException => e
        false
      end

      def generate_cookbook(path, name, version, options = {})
        path = Pathname.new(path)
        cookbook_path = path.join("#{name}-#{version}")
        directories = [
          "recipes",
          "templates/default",
          "files/default",
          "attributes",
          "definitions",
          "providers",
          "resources"
        ]
        files = [
          "recipes/default.rb",
          "templates/default/template.erb",
          "files/default/file.h",
          "attributes/default.rb"
        ]

        directories.each do |directory|
          FileUtils.mkdir_p(cookbook_path.join(directory))
        end

        files.each do |file|
          FileUtils.touch(cookbook_path.join(file))
        end

        metadata = <<-EOF
name "#{name}"
version "#{version}"
EOF

        if options[:dependencies]
          options[:dependencies].each do |name, constraint|
            metadata << "depends '#{name}', '#{constraint}'\n"
          end
        end

        File.write(cookbook_path.join("metadata.rb"), metadata)
      end

      private

        def rest
          quietly { Chef::REST.new(Chef::Config[:chef_server_url]) }
        end
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
berkshelf-0.3.7 spec/support/chef_api.rb