Class: Rake::Puppet

Inherits:
Object
  • Object
show all
Defined in:
lib/rspec_puppet_utils/rake/project_tasks.rb

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initializePuppet

Returns a new instance of Puppet.



23
24
25
26
27
28
29
30
31
32
33
# File 'lib/rspec_puppet_utils/rake/project_tasks.rb', line 23

def initialize
  extend Rake::DSL  # makes 'namespace' and 'task' methods available to instance

  @module_path      = 'modules' # Deliberately excludes modules-lib dir
  @excluded_dirs    = ['.', '..']
  @excluded_modules = []
  @package_dir      = 'pkg'
  @package_files    = ['modules', 'modules-lib', 'config/environment.conf']
  @package_name     = 'puppet'
  @package_version  = nil
end

Instance Attribute Details

#excluded_modulesObject

Returns the value of attribute excluded_modules.



12
13
14
# File 'lib/rspec_puppet_utils/rake/project_tasks.rb', line 12

def excluded_modules
  @excluded_modules
end

#module_pathObject

Returns the value of attribute module_path.



12
13
14
# File 'lib/rspec_puppet_utils/rake/project_tasks.rb', line 12

def module_path
  @module_path
end

#package_dirObject

Returns the value of attribute package_dir.



13
14
15
# File 'lib/rspec_puppet_utils/rake/project_tasks.rb', line 13

def package_dir
  @package_dir
end

#package_filesObject

Returns the value of attribute package_files.



13
14
15
# File 'lib/rspec_puppet_utils/rake/project_tasks.rb', line 13

def package_files
  @package_files
end

#package_versionObject

Returns the value of attribute package_version.



13
14
15
# File 'lib/rspec_puppet_utils/rake/project_tasks.rb', line 13

def package_version
  @package_version
end

Instance Method Details

#load_build_tasksObject

Raises:

  • (ArgumentError)


70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
# File 'lib/rspec_puppet_utils/rake/project_tasks.rb', line 70

def load_build_tasks

  raise(ArgumentError, 'Please provide a package_version (e.g. "1.0.0")') if @package_version.nil?

  namespace :build do

    # The build_dir (i.e. 'puppet') is the root dir of the files when the zip is extracted
    build_dir = "#{@package_dir}/puppet"

    # Preps build directory
    task :prep do
      puts 'Preparing build'
      FileUtils.rm_r @package_dir if File.exist?(@package_dir)
      FileUtils.mkdir_p build_dir
      @package_files.each {|f|
        if File.exist? f
          puts "Copying #{f} to #{build_dir}"
          FileUtils.cp_r f, build_dir
        else
          fail "Could not find #{f} file or directory: Ensure that the package_files list is correct"
        end
      }
    end

    task :package => [:prep] do
      # Exclude modules' spec directories as they're not needed once deployed
      exclude_patterns = '-x puppet/modules/\*/spec/\* puppet/modules-lib/\*/spec/\*'
      cmds = ["cd #{@package_dir}", '&&', "zip -qr #{@package_name}.zip . #{exclude_patterns}", '&&', 'cd -']
      puts `#{cmds.join(' ')}`
    end

    task :cleanup do
      puts "Cleaning up #{build_dir}/"
      FileUtils.rm_r build_dir if File.exist?(build_dir)
    end
  end

  desc "Build #{@package_name}.zip v#{@package_version} without tests"
  task :quick_build => ['build:package', 'build:cleanup'] do
    puts "Built #{@package_name}.zip version #{@package_version}"
  end

  desc "Build #{@package_name}.zip v#{@package_version}"
  task :build => [:spec, :quick_build]
end

#load_spec_tasksObject



47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
# File 'lib/rspec_puppet_utils/rake/project_tasks.rb', line 47

def load_spec_tasks

  modules      = testable_modules
  module_tasks = modules.collect { |m| "#{:spec}:#{m}" }

  namespace :spec do
    modules.each { |puppet_module|
      module_root = "#{@module_path}/#{puppet_module}"
      opts_path   = "#{module_root}/spec/spec.opts"

      desc "Run #{puppet_module} module specs"
      RSpec::Core::RakeTask.new puppet_module do |t|
        t.ruby_opts  = "-C#{module_root}"
        t.rspec_opts = File.exists?(opts_path) ? File.read(opts_path).chomp : ''
      end
    }
  end

  desc 'Run specs in all modules'
  task :spec    => module_tasks
  task :default => :spec
end

#load_tasksObject



35
36
37
38
# File 'lib/rspec_puppet_utils/rake/project_tasks.rb', line 35

def load_tasks
  load_spec_tasks
  load_build_tasks
end

#testable_modulesObject

Raises:

  • (ArgumentError)


40
41
42
43
44
45
# File 'lib/rspec_puppet_utils/rake/project_tasks.rb', line 40

def testable_modules
  raise ArgumentError, 'Excluded modules must be an array' unless @excluded_modules.is_a? Array
  module_dirs = Dir.entries(@module_path) - @excluded_dirs - @excluded_modules
  module_dirs.select! {|e| File.directory?("#{@module_path}/#{e}/spec") }
  module_dirs
end