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
34
# 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
  @package_versioning = true
end

Instance Attribute Details

#excluded_modulesObject

Returns the value of attribute excluded_modules.



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

def excluded_modules
  @excluded_modules
end

#module_pathObject

Returns the value of attribute module_path.



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

def module_path
  @module_path
end

#package_dirObject

Returns the value of attribute package_dir.



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

def package_dir
  @package_dir
end

#package_filesObject

Returns the value of attribute package_files.



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

def package_files
  @package_files
end

#package_versionObject

Returns the value of attribute package_version.



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

def package_version
  @package_version
end

#package_versioningObject

Returns the value of attribute package_versioning.



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

def package_versioning
  @package_versioning
end

Instance Method Details

#load_build_tasksObject

Raises:

  • (ArgumentError)


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
115
116
117
# File 'lib/rspec_puppet_utils/rake/project_tasks.rb', line 71

def load_build_tasks

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

  # The build_dir (i.e. 'puppet') is the root dir of the files when the zip is extracted
  build_dir         = "#{@package_dir}/puppet"
  full_package_name = @package_versioning ? "puppet-#{@package_version}.zip" : 'puppet.zip'
  package_desc      = @package_versioning ? full_package_name : "#{full_package_name} v#{@package_version}"

  namespace :build do

    # 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 #{full_package_name} . #{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_desc} without tests"
  task :quick_build => ['build:package', 'build:cleanup'] do
    puts "Built #{package_desc}"
  end

  desc "Build #{package_desc}"
  task :build => [:spec, :quick_build]
end

#load_spec_tasksObject



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

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



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

def load_tasks
  load_spec_tasks
  load_build_tasks
end

#testable_modulesObject

Raises:

  • (ArgumentError)


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

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