class Terraspace::Compiler::Cleaner::BackendChange

Public Class Methods

new(mod, options={}) click to toggle source
# File lib/terraspace/compiler/cleaner/backend_change.rb, line 5
def initialize(mod, options={})
  @mod, @options = mod, options
end

Public Instance Methods

current_backend() click to toggle source
# File lib/terraspace/compiler/cleaner/backend_change.rb, line 33
def current_backend
  materialized_path = find_src_path("#{@mod.cache_dir}/backend*")
  IO.read(materialized_path) if materialized_path
end
fresh_backend() click to toggle source
# File lib/terraspace/compiler/cleaner/backend_change.rb, line 38
def fresh_backend
  src_path = find_src_path("#{Terraspace.root}/config/terraform/backend*")
  Terraspace::Compiler::Strategy::Mod.new(@mod, src_path).run if src_path
end
local_statefile_exist?() click to toggle source
# File lib/terraspace/compiler/cleaner/backend_change.rb, line 24
def local_statefile_exist?
  # Note: Will not go into .terraform folders. No need to for terraform.tfstate
  Dir.glob("#{Terraspace.cache_root}/**/*").each do |path|
    basename = File.basename(path)
    return true if basename == 'terraform.tfstate'
  end
  false
end
purge() click to toggle source
# File lib/terraspace/compiler/cleaner/backend_change.rb, line 9
def purge
  return unless purge?

  are_you_sure? if local_statefile_exist?
  cache_root = Terraspace::Util.pretty_path(Terraspace.cache_root)
  logger.debug "Backend change detected. Removing #{cache_root} for complete reinitialization"
  FileUtils.rm_rf(Terraspace.cache_root)
end
purge?() click to toggle source

Whenever the backend is changed, purge the cache entirely

# File lib/terraspace/compiler/cleaner/backend_change.rb, line 19
def purge?
  return false unless current_backend
  current_backend != fresh_backend
end

Private Instance Methods

are_you_sure?() click to toggle source
# File lib/terraspace/compiler/cleaner/backend_change.rb, line 44
    def are_you_sure?
      cache_root = Terraspace::Util.pretty_path(Terraspace.cache_root)
      message =<<~EOL
        Backend change detected. Will remove #{cache_root} for complete reinitialization
        #{"WARN: You are using local storage for state, this will remove it.".color(:yellow)}
        Will remove #{cache_root} and all terraform.tfstate files
      EOL
      sure?(message.strip) # from Util
    end
find_src_path(expr) click to toggle source
# File lib/terraspace/compiler/cleaner/backend_change.rb, line 54
def find_src_path(expr)
  path = Dir.glob(expr).first
  path if path && File.exist?(path)
end