Class: RSpec::Puppet::Setup
- Inherits:
-
Object
- Object
- RSpec::Puppet::Setup
- Defined in:
- lib/rspec-puppet/setup.rb
Class Method Summary collapse
- .control_repo? ⇒ Boolean
- .get_module_name ⇒ Object
- .get_module_name_from_file(file) ⇒ Object
- .is_module_dir? ⇒ Boolean
- .run(module_name = nil) ⇒ Object
- .safe_create_file(filename, content) ⇒ Object
- .safe_create_rakefile ⇒ Object
- .safe_create_spec_helper ⇒ Object
- .safe_make_link(source, target, verbose = true) ⇒ Object
- .safe_mkdir(dir, verbose = true) ⇒ Object
- .safe_setup_directories(module_name = nil, verbose = true) ⇒ Object
- .safe_teardown_links(module_name = nil) ⇒ Object
- .safe_touch(file) ⇒ Object
Class Method Details
.control_repo? ⇒ Boolean
66 67 68 |
# File 'lib/rspec-puppet/setup.rb', line 66 def self.control_repo? !File.exist?('metadata.json') end |
.get_module_name ⇒ Object
70 71 72 73 74 75 76 77 |
# File 'lib/rspec-puppet/setup.rb', line 70 def self.get_module_name module_name = nil Dir["manifests/*.pp"].entries.each do |manifest| module_name = get_module_name_from_file(manifest) break unless module_name.nil? end module_name end |
.get_module_name_from_file(file) ⇒ Object
79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 |
# File 'lib/rspec-puppet/setup.rb', line 79 def self.get_module_name_from_file(file) # FIXME: see discussion at # https://github.com/rodjek/rspec-puppet/issues/290 if Puppet.version.to_f >= 4.0 p = Puppet::Pops::Parser::Lexer2.new else p = Puppet::Parser::Lexer.new end module_name = nil p.string = File.read(file) tokens = p.fullscan i = tokens.index { |token| [:CLASS, :DEFINE].include? token.first } unless i.nil? module_name = tokens[i + 1].last[:value].split('::').first end module_name end |
.is_module_dir? ⇒ Boolean
99 100 101 |
# File 'lib/rspec-puppet/setup.rb', line 99 def self.is_module_dir? Dir["*"].entries.include? "manifests" end |
.run(module_name = nil) ⇒ Object
9 10 11 12 13 14 15 16 17 18 19 20 |
# File 'lib/rspec-puppet/setup.rb', line 9 def self.run(module_name=nil) unless is_module_dir? $stderr.puts "Does not appear to be a Puppet module. Aborting" return false end safe_setup_directories(module_name) safe_touch(File.join('spec', 'fixtures', 'manifests', 'site.pp')) safe_create_spec_helper safe_create_rakefile end |
.safe_create_file(filename, content) ⇒ Object
129 130 131 132 133 134 135 136 137 138 139 140 141 |
# File 'lib/rspec-puppet/setup.rb', line 129 def self.safe_create_file(filename, content) if File.exists? filename old_content = File.read(filename) if old_content != content $stderr.puts "!! #{filename} already exists and differs from template" end else File.open(filename, 'w') do |f| f.puts content end puts " + #{filename}" end end |
.safe_create_rakefile ⇒ Object
171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 |
# File 'lib/rspec-puppet/setup.rb', line 171 def self.safe_create_rakefile content = <<-'EOF' require 'rspec-puppet/rake_task' begin if Gem::Specification::find_by_name('puppet-lint') require 'puppet-lint/tasks/puppet-lint' PuppetLint.configuration.ignore_paths = ["spec/**/*.pp", "vendor/**/*.pp"] task :default => [:rspec, :lint] end rescue Gem::LoadError task :default => :rspec end EOF safe_create_file('Rakefile', content) end |
.safe_create_spec_helper ⇒ Object
143 144 145 146 |
# File 'lib/rspec-puppet/setup.rb', line 143 def self.safe_create_spec_helper content = File.read(File.(File.join(__FILE__, '..', 'spec_helper.rb'))) safe_create_file('spec/spec_helper.rb', content) end |
.safe_make_link(source, target, verbose = true) ⇒ Object
148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 |
# File 'lib/rspec-puppet/setup.rb', line 148 def self.safe_make_link(source, target, verbose=true) if File.exists?(target) unless File.symlink?(target) && File.readlink(target) == File.(source) $stderr.puts "!! #{target} already exists and is not a symlink" end else if Puppet::Util::Platform.windows? output = `call mklink /J "#{target.gsub('/', '\\')}" "#{source}"` unless $?.success? puts output abort end else begin FileUtils.ln_s(File.(source), target) rescue Errno::EEXIST => e raise e unless File.symlink?(target) && File.readlink(target) == File.(source) end end puts " + #{target}" if verbose end end |
.safe_mkdir(dir, verbose = true) ⇒ Object
103 104 105 106 107 108 109 110 111 112 113 114 115 116 |
# File 'lib/rspec-puppet/setup.rb', line 103 def self.safe_mkdir(dir, verbose=true) if File.exists? dir unless File.directory? dir $stderr.puts "!! #{dir} already exists and is not a directory" end else begin FileUtils.mkdir dir rescue Errno::EEXIST => e raise e unless File.directory? dir end puts " + #{dir}/" if verbose end end |
.safe_setup_directories(module_name = nil, verbose = true) ⇒ Object
22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 |
# File 'lib/rspec-puppet/setup.rb', line 22 def self.safe_setup_directories(module_name=nil, verbose=true) if control_repo? $stderr.puts "Unable to setup rspec-puppet automatically in a control repo" if verbose return false end if module_name.nil? module_name = get_module_name if module_name.nil? $stderr.puts "Unable to determine module name. Aborting" if verbose return false end end [ 'spec', File.join('spec', 'classes'), File.join('spec', 'defines'), File.join('spec', 'functions'), File.join('spec', 'hosts'), File.join('spec', 'fixtures'), File.join('spec', 'fixtures', 'manifests'), File.join('spec', 'fixtures', 'modules'), ].each { |dir| safe_mkdir(dir, verbose) } target = File.join('spec', 'fixtures', 'modules', module_name) safe_make_link('.', target, verbose) end |
.safe_teardown_links(module_name = nil) ⇒ Object
51 52 53 54 55 56 57 58 59 60 61 62 63 64 |
# File 'lib/rspec-puppet/setup.rb', line 51 def self.safe_teardown_links(module_name=nil) if module_name.nil? module_name = get_module_name if module_name.nil? $stderr.puts "Unable to determine module name. Aborting" return false end end target = File.join('spec', 'fixtures', 'modules', module_name) if File.symlink?(target) && File.readlink(target) == File.('.') File.unlink(target) end end |
.safe_touch(file) ⇒ Object
118 119 120 121 122 123 124 125 126 127 |
# File 'lib/rspec-puppet/setup.rb', line 118 def self.safe_touch(file) if File.exists? file unless File.file? file $stderr.puts "!! #{file} already exists and is not a regular file" end else FileUtils.touch file puts " + #{file}" end end |