Class: ChefApply::Action::GenerateTempCookbook::RecipeLookup
- Inherits:
- 
      Object
      
        - Object
- ChefApply::Action::GenerateTempCookbook::RecipeLookup
 
- Defined in:
- lib/chef_apply/action/generate_temp_cookbook/recipe_lookup.rb
Overview
When users are trying to converge a local recipe on a remote target, there is a very specific (but expansive) set of things they can specify. This class encapsulates that logic for testing purposes. We either return a path to a recipe or we raise an error.
Defined Under Namespace
Classes: CookbookNotFound, InvalidCookbook, NoDefaultRecipe, RecipeNotFound
Instance Attribute Summary collapse
- 
  
    
      #cookbook_repo_paths  ⇒ Object 
    
    
  
  
  
  
    
      readonly
    
    
  
  
  
  
  
  
    Returns the value of attribute cookbook_repo_paths. 
Instance Method Summary collapse
- 
  
    
      #find_recipe(cookbook, recipe_name = nil)  ⇒ Object 
    
    
  
  
  
  
  
  
  
  
  
    Find the specified recipe or default recipe if none is specified. 
- 
  
    
      #initialize(cookbook_repo_paths)  ⇒ RecipeLookup 
    
    
  
  
  
    constructor
  
  
  
  
  
  
  
    A new instance of RecipeLookup. 
- 
  
    
      #load_cookbook(path_or_name)  ⇒ Object 
    
    
  
  
  
  
  
  
  
  
  
    Given a cookbook path or name, try to load that cookbook. 
- 
  
    
      #split(recipe_specifier)  ⇒ Object 
    
    
  
  
  
  
  
  
  
  
  
    The recipe specifier is provided by the customer as either a path OR a cookbook and optional recipe name. 
Constructor Details
#initialize(cookbook_repo_paths) ⇒ RecipeLookup
Returns a new instance of RecipeLookup.
| 34 35 36 | # File 'lib/chef_apply/action/generate_temp_cookbook/recipe_lookup.rb', line 34 def initialize(cookbook_repo_paths) @cookbook_repo_paths = cookbook_repo_paths end | 
Instance Attribute Details
#cookbook_repo_paths ⇒ Object (readonly)
Returns the value of attribute cookbook_repo_paths.
| 33 34 35 | # File 'lib/chef_apply/action/generate_temp_cookbook/recipe_lookup.rb', line 33 def cookbook_repo_paths @cookbook_repo_paths end | 
Instance Method Details
#find_recipe(cookbook, recipe_name = nil) ⇒ Object
Find the specified recipe or default recipe if none is specified. Raise an error if recipe cannot be found.
| 83 84 85 86 87 88 89 90 91 92 93 94 95 96 | # File 'lib/chef_apply/action/generate_temp_cookbook/recipe_lookup.rb', line 83 def find_recipe(cookbook, recipe_name = nil) recipes = cookbook.recipe_filenames_by_name.merge(cookbook.recipe_yml_filenames_by_name) if recipe_name.nil? default_recipe = recipes["default"] raise NoDefaultRecipe.new(cookbook.root_dir, cookbook.name) if default_recipe.nil? default_recipe else recipe = recipes[recipe_name] raise RecipeNotFound.new(cookbook.root_dir, recipe_name, recipes.keys, cookbook.name) if recipe.nil? recipe end end | 
#load_cookbook(path_or_name) ⇒ Object
Given a cookbook path or name, try to load that cookbook. Either return a cookbook object or raise an error.
| 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 | # File 'lib/chef_apply/action/generate_temp_cookbook/recipe_lookup.rb', line 46 def load_cookbook(path_or_name) require "chef/exceptions" if File.directory?(path_or_name) cookbook_path = path_or_name # First, is there a cookbook in the specified dir that matches? require "chef/cookbook/cookbook_version_loader" begin v = Chef::Cookbook::CookbookVersionLoader.new(cookbook_path) v.load! cookbook = v.cookbook_version rescue Chef::Exceptions::CookbookNotFoundInRepo raise InvalidCookbook.new(cookbook_path) end else cookbook_name = path_or_name # Second, is there a cookbook in their local repository that matches? require "chef/cookbook_loader" cb_loader = Chef::CookbookLoader.new(cookbook_repo_paths) cb_loader.load_cookbooks begin cookbook = cb_loader[cookbook_name] rescue Chef::Exceptions::CookbookNotFoundInRepo cookbook_repo_paths.each do |repo_path| cookbook_path = File.join(repo_path, cookbook_name) if File.directory?(cookbook_path) raise InvalidCookbook.new(cookbook_path) end end raise CookbookNotFound.new(cookbook_name, cookbook_repo_paths) end end cookbook end | 
#split(recipe_specifier) ⇒ Object
The recipe specifier is provided by the customer as either a path OR a cookbook and optional recipe name.
| 40 41 42 | # File 'lib/chef_apply/action/generate_temp_cookbook/recipe_lookup.rb', line 40 def split(recipe_specifier) recipe_specifier.split("::") end |