lib/kitchen/provisioner/chef/librarian.rb in test-kitchen-1.6.0 vs lib/kitchen/provisioner/chef/librarian.rb in test-kitchen-1.7.0

- old
+ new

@@ -1,112 +1,112 @@ -# -*- encoding: utf-8 -*- -# -# Author:: Fletcher Nichol (<fnichol@nichol.ca>) -# -# Copyright (C) 2013, Fletcher Nichol -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -require "kitchen/errors" -require "kitchen/logging" - -module Kitchen - - module Provisioner - - module Chef - - # Chef cookbook resolver that uses Librarian-Chef and a Cheffile to - # calculate dependencies. - # - # @author Fletcher Nichol <fnichol@nichol.ca> - class Librarian - - include Logging - - # Creates a new cookbook resolver. - # - # @param cheffile [String] path to a Cheffile - # @param path [String] path in which to vendor the resulting - # cookbooks - # @param logger [Kitchen::Logger] a logger to use for output, defaults - # to `Kitchen.logger` - def initialize(cheffile, path, logger = Kitchen.logger) - @cheffile = cheffile - @path = path - @logger = logger - end - - # Loads the library code required to use the resolver. - # - # @param logger [Kitchen::Logger] a logger to use for output, defaults - # to `Kitchen.logger` - def self.load!(logger = Kitchen.logger) - load_librarian!(logger) - end - - # Performs the cookbook resolution and vendors the resulting cookbooks - # in the desired path. - def resolve - version = ::Librarian::Chef::VERSION - info("Resolving cookbook dependencies with Librarian-Chef #{version}...") - debug("Using Cheffile from #{cheffile}") - - env = ::Librarian::Chef::Environment.new( - :project_path => File.dirname(cheffile)) - env.config_db.local["path"] = path - ::Librarian::Action::Resolve.new(env).run - ::Librarian::Action::Install.new(env).run - end - - private - - # @return [String] path to a Cheffile - # @api private - attr_reader :cheffile - - # @return [String] path in which to vendor the resulting cookbooks - # @api private - attr_reader :path - - # @return [Kitchen::Logger] a logger to use for output - # @api private - attr_reader :logger - - # Load the Librarian-specific libary code. - # - # @param logger [Kitchen::Logger] the logger to use - # @raise [UserError] if the library couldn't be loaded - # @api private - def self.load_librarian!(logger) - first_load = require "librarian/chef/environment" - require "librarian/action/resolve" - require "librarian/action/install" - - version = ::Librarian::Chef::VERSION - if first_load - logger.debug("Librarian-Chef #{version} library loaded") - else - logger.debug("Librarian-Chef #{version} previously loaded") - end - rescue LoadError => e - logger.fatal("The `librarian-chef' gem is missing and must be installed" \ - " or cannot be properly activated. Run" \ - " `gem install librarian-chef` or add the following to your" \ - " Gemfile if you are using Bundler: `gem 'librarian-chef'`.") - raise UserError, - "Could not load or activate Librarian-Chef (#{e.message})" - end - end - end - end -end +# -*- encoding: utf-8 -*- +# +# Author:: Fletcher Nichol (<fnichol@nichol.ca>) +# +# Copyright (C) 2013, Fletcher Nichol +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +require "kitchen/errors" +require "kitchen/logging" + +module Kitchen + + module Provisioner + + module Chef + + # Chef cookbook resolver that uses Librarian-Chef and a Cheffile to + # calculate dependencies. + # + # @author Fletcher Nichol <fnichol@nichol.ca> + class Librarian + + include Logging + + # Creates a new cookbook resolver. + # + # @param cheffile [String] path to a Cheffile + # @param path [String] path in which to vendor the resulting + # cookbooks + # @param logger [Kitchen::Logger] a logger to use for output, defaults + # to `Kitchen.logger` + def initialize(cheffile, path, logger = Kitchen.logger) + @cheffile = cheffile + @path = path + @logger = logger + end + + # Loads the library code required to use the resolver. + # + # @param logger [Kitchen::Logger] a logger to use for output, defaults + # to `Kitchen.logger` + def self.load!(logger = Kitchen.logger) + load_librarian!(logger) + end + + # Performs the cookbook resolution and vendors the resulting cookbooks + # in the desired path. + def resolve + version = ::Librarian::Chef::VERSION + info("Resolving cookbook dependencies with Librarian-Chef #{version}...") + debug("Using Cheffile from #{cheffile}") + + env = ::Librarian::Chef::Environment.new( + :project_path => File.dirname(cheffile)) + env.config_db.local["path"] = path + ::Librarian::Action::Resolve.new(env).run + ::Librarian::Action::Install.new(env).run + end + + private + + # @return [String] path to a Cheffile + # @api private + attr_reader :cheffile + + # @return [String] path in which to vendor the resulting cookbooks + # @api private + attr_reader :path + + # @return [Kitchen::Logger] a logger to use for output + # @api private + attr_reader :logger + + # Load the Librarian-specific libary code. + # + # @param logger [Kitchen::Logger] the logger to use + # @raise [UserError] if the library couldn't be loaded + # @api private + def self.load_librarian!(logger) + first_load = require "librarian/chef/environment" + require "librarian/action/resolve" + require "librarian/action/install" + + version = ::Librarian::Chef::VERSION + if first_load + logger.debug("Librarian-Chef #{version} library loaded") + else + logger.debug("Librarian-Chef #{version} previously loaded") + end + rescue LoadError => e + logger.fatal("The `librarian-chef' gem is missing and must be installed" \ + " or cannot be properly activated. Run" \ + " `gem install librarian-chef` or add the following to your" \ + " Gemfile if you are using Bundler: `gem 'librarian-chef'`.") + raise UserError, + "Could not load or activate Librarian-Chef (#{e.message})" + end + end + end + end +end