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



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', '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

#filter_modules(module_dirs) ⇒ Object



47
48
49
50
# File 'lib/rspec_puppet_utils/rake/project_tasks.rb', line 47

def filter_modules(module_dirs)
  module_dirs.select! { |m| module_has_specs?(m) and module_has_rakefile?(m) }
  module_dirs
end

#load_build_tasksObject

Raises:

  • (ArgumentError)


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
118
119
120
121
122
123
124
125
126
127
128
129
# File 'lib/rspec_puppet_utils/rake/project_tasks.rb', line 93

def load_build_tasks

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

  full_package_name = @package_versioning ? "puppet-#{@package_version}.zip" : 'puppet.zip'
  package_desc      = @package_versioning ? full_package_name : "#{full_package_name} v#{@package_version}"
  package_path      = "#{@package_dir}/#{full_package_name}"

  namespace :build do

    # Preps build directory
    task :prep do
      puts 'Preparing build'
      FileUtils.mkdir_p @package_dir
      FileUtils.rm package_path if File.exist?(package_path)
    end

    task :package => [:prep] do
      # Exclude all the spec code as it's not needed once deployed
      exclude_patterns = ['modules/\*/spec/\*', 'modules-lib/\*/spec/\*']
      exclude_string   = "-x #{exclude_patterns.join(' ')}"
      include_string   = @package_files.join(' ')
      cmd     = "zip -qr #{package_path} #{include_string} #{exclude_string}"
      success = system(cmd)
      exit 1 unless success
    end

  end

  desc "Build #{package_desc} without tests"
  task :quick_build => 'build:package' do
    puts "Built #{package_desc}"
  end

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

#load_module_tasksObject



64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
# File 'lib/rspec_puppet_utils/rake/project_tasks.rb', line 64

def load_module_tasks

  modules    = testable_modules
  spec_tasks = modules.collect { |m| "#{m}:#{:spec}" }
  # lint_tasks = modules.collect { |m| "#{m}:#{:lint}" }

  modules.each { |puppet_module|
    namespace puppet_module do

      desc "Run #{puppet_module} module specs"
      task :spec do
        Dir.chdir "#{@module_path}/#{puppet_module}" do
          success = system('rake spec') # This isn't perfect but ...
          exit 1 unless success
        end
      end

    end
  }

  # desc 'Run lint checks for all modules'
  # task :lint => lint_tasks

  desc 'Run specs in all modules'
  task :spec    => spec_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_module_tasks
  load_build_tasks
end

#module_has_rakefile?(module_dir) ⇒ Boolean



56
57
58
59
60
61
62
# File 'lib/rspec_puppet_utils/rake/project_tasks.rb', line 56

def module_has_rakefile?(module_dir)
  rakefiles = ['rakefile', 'rakefile.rb']
  entries   = Dir.entries("#{@module_path}/#{module_dir}")
  entries.collect! { |f| f.downcase }
  rakefiles.each { |rf| return true if entries.include? rf }
  false
end

#module_has_specs?(module_dir) ⇒ Boolean



52
53
54
# File 'lib/rspec_puppet_utils/rake/project_tasks.rb', line 52

def module_has_specs?(module_dir)
  File.directory?("#{@module_path}/#{module_dir}/spec")
end

#testable_modulesObject

Raises:

  • (ArgumentError)


41
42
43
44
45
# 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
  filter_modules module_dirs
end