class Terraspace::Builder

Attributes

graph[R]

Public Instance Methods

auto_create_backend() click to toggle source

Auto create after build_unresolved since will need to run state pull for dependencies

# File lib/terraspace/builder.rb, line 70
def auto_create_backend
  return if Terraspace.config.auto_create_backend == false
  return unless requires_backend?
  Terraspace::Compiler::Backend.new(@mod).create
end
build_all() click to toggle source
# File lib/terraspace/builder.rb, line 42
def build_all
  # At this point dependencies have been resolved.
  Terraspace::Terraform::RemoteState::Fetcher.flush!
  @resolved = true
  build_unresolved
end
build_batches() click to toggle source

Builds dependency graph and returns the batches to run

# File lib/terraspace/builder.rb, line 36
def build_batches
  dependencies = Terraspace::Dependency::Registry.data # populated after build_unresolved
  @graph = Terraspace::Dependency::Graph.new(stack_names, dependencies, @options)
  @graph.build
end
build_dir(type_dir) click to toggle source
# File lib/terraspace/builder.rb, line 60
def build_dir(type_dir)
  with_each_mod(type_dir) do |mod|
    mod.resolved = @resolved
    is_root_module = mod.cache_dir == @mod.cache_dir
    next if is_root_module # handled by build_root_module
    Compiler::Builder.new(mod).build
  end
end
build_root_module() click to toggle source
# File lib/terraspace/builder.rb, line 55
def build_root_module
  @mod.resolved = @resolved
  Compiler::Builder.new(@mod).build
end
build_unresolved() click to toggle source
# File lib/terraspace/builder.rb, line 49
def build_unresolved
  build_dir("modules")
  build_dir("stacks")
  build_root_module
end
check_allow!() click to toggle source
# File lib/terraspace/builder.rb, line 31
def check_allow!
  Allow.new(@mod).check!
end
clean() click to toggle source
# File lib/terraspace/builder.rb, line 76
def clean
  Compiler::Cleaner.new(@mod, @options).clean if clean?
end
clean?() click to toggle source
# File lib/terraspace/builder.rb, line 80
def clean?
  if @options[:clean].nil?
    clean_cache = Terraspace.config.build.clean_cache
    clean_cache.nil? ? true : clean_cache
  else
    @options[:clean]
  end
end
placeholder_stack_message() click to toggle source
# File lib/terraspace/builder.rb, line 89
def placeholder_stack_message
  return if @options[:quiet]
  return unless @options[:mod] == "placeholder"
  logger.info "Building one stack to build all stacks"
end
run() click to toggle source
# File lib/terraspace/builder.rb, line 9
def run
  return if @options[:build] == false
  Terraspace::CLI::CheckSetup.check!
  @mod.root_module = true
  clean
  build_dir = Util.pretty_path(@mod.cache_dir)
  placeholder_stack_message
  logger.info "Building #{build_dir}" unless @options[:quiet] # from terraspace all

  batches = nil
  FileUtils.mkdir_p(@mod.cache_dir) # so terraspace before build hooks work
  run_hooks("terraspace.rb", "build") do
    check_allow!
    build_unresolved
    auto_create_backend
    batches = build_batches
    build_all
    logger.info "Built in #{build_dir}" unless @options[:quiet] # from terraspace all
  end
  batches
end