Class: RSpec::Terraspace::Project
- Inherits:
-
Object
- Object
- RSpec::Terraspace::Project
- Defined in:
- lib/rspec/terraspace/project.rb
Class Method Summary collapse
Instance Method Summary collapse
- #build_config ⇒ Object
- #build_dir ⇒ Object
-
#build_folders ⇒ Object
folders at any-level, including top-level can be copied with the folders option.
- #build_modules ⇒ Object
- #build_project ⇒ Object
- #build_stacks ⇒ Object
-
#build_tfvars ⇒ Object
If a file has been supplied, then it gets copied over.
-
#build_type_folder(type_dir, list) ⇒ Object
Inputs:.
- #clean ⇒ Object
- #copy(src, dest) ⇒ Object
- #create ⇒ Object
-
#initialize(options = {}) ⇒ Project
constructor
A new instance of Project.
- #remove_test_folder(dest) ⇒ Object
- #tmp_root ⇒ Object
Constructor Details
#initialize(options = {}) ⇒ Project
Returns a new instance of Project.
6 7 8 9 10 11 12 13 14 15 16 |
# File 'lib/rspec/terraspace/project.rb', line 6 def initialize(={}) @options = @name = [:name] @config = [:config] @modules = [:modules] @stacks = [:stacks] @tfvars = [:tfvars] @folders = [:folders] @remove_test_folder = [:remove_test_folder].nil? ? true : [:remove_test_folder] end |
Class Method Details
.tmp_root ⇒ Object
163 164 165 |
# File 'lib/rspec/terraspace/project.rb', line 163 def self.tmp_root "#{Terraspace.tmp_root}/test-harnesses" end |
Instance Method Details
#build_config ⇒ Object
51 52 53 54 55 56 57 58 59 |
# File 'lib/rspec/terraspace/project.rb', line 51 def build_config return unless @config config_folder = "#{build_dir}/config" FileUtils.rm_rf(config_folder) # wipe current config folder FileUtils.mkdir_p(File.dirname(config_folder)) src = @config FileUtils.cp_r(src, config_folder) end |
#build_dir ⇒ Object
155 156 157 |
# File 'lib/rspec/terraspace/project.rb', line 155 def build_dir "#{tmp_root}/#{@name}" end |
#build_folders ⇒ Object
folders at any-level, including top-level can be copied with the folders option
32 33 34 35 36 37 38 39 40 |
# File 'lib/rspec/terraspace/project.rb', line 32 def build_folders return unless @folders @folders.each do |folder| dest = "#{build_dir}/#{folder}" FileUtils.mkdir_p(File.dirname(dest)) FileUtils.cp_r(folder, dest) end end |
#build_modules ⇒ Object
61 62 63 64 |
# File 'lib/rspec/terraspace/project.rb', line 61 def build_modules return unless @modules build_type_folder("modules", @modules) end |
#build_project ⇒ Object
42 43 44 45 46 47 48 49 |
# File 'lib/rspec/terraspace/project.rb', line 42 def build_project parent_dir = File.dirname(build_dir) FileUtils.mkdir_p(parent_dir) Dir.chdir(parent_dir) do project_name = File.basename(build_dir) ::Terraspace::CLI::New::Project.start([project_name, "--no-config", "--quiet"]) end end |
#build_stacks ⇒ Object
66 67 68 69 |
# File 'lib/rspec/terraspace/project.rb', line 66 def build_stacks return unless @stacks build_type_folder("stacks", @stacks) end |
#build_tfvars ⇒ Object
If a file has been supplied, then it gets copied over.
# File
terraspace.build_test_harness(
tfvars: {demo: "spec/fixtures/tfvars/demo.tfvars"},
end
# Results in:
app/stacks/#{stack}/tfvars/test.tfvars
If a directory has been supplied, then the folder fully gets copied over.
# Directory
terraspace.build_test_harness(
tfvars: {demo: "spec/fixtures/tfvars/demo"},
end
# Results in (whatever is in the folder):
app/stacks/#{stack}/tfvars/base.tfvars
app/stacks/#{stack}/tfvars/test.tfvars
92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 |
# File 'lib/rspec/terraspace/project.rb', line 92 def build_tfvars return unless @tfvars @tfvars.each do |stack, src| tfvars_folder = "#{build_dir}/app/stacks/#{stack}/tfvars" FileUtils.rm_rf(tfvars_folder) # wipe current tfvars folder. dont use any of the live values if File.directory?(src) FileUtils.mkdir_p(File.dirname(tfvars_folder)) FileUtils.cp_r(src, tfvars_folder) else # if only a single file, then generate a test.tfvars since this runs under TS_ENV=test dest = "#{tfvars_folder}/test.tfvars" FileUtils.mkdir_p(File.dirname(dest)) FileUtils.cp(src, dest) end end end |
#build_type_folder(type_dir, list) ⇒ Object
Inputs:
list: options[:modules] or options[:stacks]
type_dir: modules or stacks
The list argument can support a Hash or String value.
If provided a Hahs, it should be structured like so:
{vm: "app/modules/vm", network: "app/modules/network"}
This allows for finer-control to specify what modules and stacks to build
If provide a String, it should be a path to folder containing all modules or stacks. This provides less fine-grain control but is easier to use and shorter.
125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 |
# File 'lib/rspec/terraspace/project.rb', line 125 def build_type_folder(type_dir, list) case list when Hash list.each do |name, src| dest = "#{build_dir}/app/#{type_dir}/#{name}" copy(src, dest) remove_test_folder(dest) if @remove_test_folder end when String dest = "#{build_dir}/app/#{type_dir}" FileUtils.rm_rf(dest) FileUtils.cp_r(list, dest) else raise "modules option must be a Hash or String" end end |
#clean ⇒ Object
146 147 148 |
# File 'lib/rspec/terraspace/project.rb', line 146 def clean FileUtils.rm_rf(build_dir) end |
#copy(src, dest) ⇒ Object
150 151 152 153 |
# File 'lib/rspec/terraspace/project.rb', line 150 def copy(src, dest) FileUtils.mkdir_p(File.dirname(dest)) FileUtils.cp_r(src, dest) end |
#create ⇒ Object
18 19 20 21 22 23 24 25 26 27 28 29 |
# File 'lib/rspec/terraspace/project.rb', line 18 def create puts "Building test harness at: #{build_dir}" clean build_project build_config build_modules build_stacks build_tfvars build_folders puts "Test harness built." build_dir end |
#remove_test_folder(dest) ⇒ Object
142 143 144 |
# File 'lib/rspec/terraspace/project.rb', line 142 def remove_test_folder(dest) FileUtils.rm_rf("#{dest}/test") end |
#tmp_root ⇒ Object
159 160 161 |
# File 'lib/rspec/terraspace/project.rb', line 159 def tmp_root self.class.tmp_root end |