class TerraformWrapper::Shared::Runner
Attributes
binary[R]
code[R]
config[R]
downloaded[R]
initialised[R]
Public Class Methods
new(binary:, code:)
click to toggle source
# File lib/terraform-wrapper/shared/runner.rb, line 31 def initialize(binary:, code:) logger.fatal("Terraform code location: #{code.path} does not exist!") unless code.check @binary = binary @code = code @initialised = false end
Public Instance Methods
apply(file: nil)
click to toggle source
# File lib/terraform-wrapper/shared/runner.rb, line 97 def apply(file: nil) logger.fatal("Cannot Terraform apply before initialising backend!") unless initialised parameters = Array.new parameters.append("-auto-approve") if (not file.nil?) and file.kind_of?(String) and (not file.strip.empty?) then logger.fatal("Plan file: #{file} does not exist!") unless File.file?(file) parameters.append("\"#{file}\"") else parameters.concat(variable_files) parameters.concat(variable_strings) end logger.fatal("Terraform apply failed!") unless run(action: "apply", parameters: parameters) end
destroy()
click to toggle source
# File lib/terraform-wrapper/shared/runner.rb, line 135 def destroy logger.fatal("Cannot Terraform destroy before initialising backend!") unless initialised parameters = Array.new parameters.concat(variable_files) parameters.concat(variable_strings) parameters.append("-auto-approve") logger.fatal("Terraform destroy failed!") unless run(action: "destroy", parameters: parameters) end
download()
click to toggle source
# File lib/terraform-wrapper/shared/runner.rb, line 42 def download parameters = Array.new parameters.append("-backend=false") logger.fatal("Failed to download Terraform modules.") unless run(action: "init", parameters: parameters) @downloaded = true end
import(address: nil, id: nil)
click to toggle source
# File lib/terraform-wrapper/shared/runner.rb, line 148 def import(address: nil, id: nil) logger.fatal("Cannot Terraform import before initialising backend!") unless initialised logger.fatal("Terraform state address for import must be a string!") unless address.kind_of?(String) logger.fatal("Terraform state address for import must be a string!") unless address.kind_of?(String) logger.fatal("Terraform state address for import must not be blank!") if address.strip.empty? logger.fatal("Identification for infrastructure to import must be a string!") unless id.kind_of?(String) logger.fatal("Identification for infrastructure to import must not be blank!") if id.strip.empty? parameters = Array.new parameters.concat(variable_files) parameters.concat(variable_strings) parameters.append("'#{address}'") parameters.append("'#{id}'") logger.fatal("Terraform import failed!") unless run(action: "import", parameters: parameters) end
init(config:)
click to toggle source
# File lib/terraform-wrapper/shared/runner.rb, line 53 def init(config:) parameters = Array.new parameters.append("-reconfigure") config.backend.hash.each do |key, value| parameters.append("-backend-config=\"#{key}=#{value}\"") end config.auths.map(&:auth) logger.fatal("Failed to initialise Terraform with backend.") unless run(action: "init", parameters: parameters) @config = config @initialised = true end
plan(destroy: false, file: nil)
click to toggle source
# File lib/terraform-wrapper/shared/runner.rb, line 116 def plan(destroy: false, file: nil) logger.fatal("Cannot Terraform plan before initialising backend!") unless initialised parameters = Array.new parameters.concat(variable_files) parameters.concat(variable_strings) if not file.nil? and file.kind_of?(String) and not file.strip.empty? then logger.fatal("Failed to create plan directory: #{directory}") unless ::TerraformWrapper.create_directory(directory: File.dirname(file), purpose: "plan") parameters.append("-out=\"#{file}\"") end parameters.append("-destroy") if destroy logger.fatal("Terraform plan failed!") unless run(action: "plan", parameters: parameters) end
upgrade()
click to toggle source
# File lib/terraform-wrapper/shared/runner.rb, line 71 def upgrade lockfile_path = File.join(@code.path, @@lockfile_name) if File.file?(lockfile_path) logger.info("Removing lock file: #{lockfile_path}") File.delete(lockfile_path) end logger.fatal("Lock file removal failed!") if File.file?(lockfile_path) parameters = Array.new parameters.append("-update") logger.fatal("Failed to upgrade Terraform modules!") unless run(action: "get", parameters: parameters) parameters = Array.new parameters.append("lock") @binary.provider.platforms.each do |platform| parameters.append("-platform=\"#{platform}\"") end logger.fatal("Failed to upgrade Terraform providers!") unless run(action: "providers", parameters: parameters) end
validate()
click to toggle source
# File lib/terraform-wrapper/shared/runner.rb, line 170 def validate logger.fatal("Cannot Terraform validate before downloading modules!") unless downloaded logger.fatal("Terraform validation failed!") unless run(action: "validate") end
Private Instance Methods
run(action:, parameters: Array.new)
click to toggle source
# File lib/terraform-wrapper/shared/runner.rb, line 181 def run(action:, parameters: Array.new) result = false parameters.reject! { |item| not item.kind_of?(String) or item.strip.empty? } cmdline = [ "\"#{@binary.path}\"", action ].concat(parameters).join(" ") logger.info("Starting Terraform, action: #{action}") puts("\n" + ('#' * 80) + "\n\n") Dir.chdir(@code.path) result = system(cmdline) || false puts("\n" + ('#' * 80) + "\n\n") return result end
variable_files()
click to toggle source
# File lib/terraform-wrapper/shared/runner.rb, line 202 def variable_files logger.fatal("Cannot generate variable files until Terraform has been initialised!") unless @initialised result = Array.new @config.variables.files.each do |file| result.append("-var-file=\"#{file}\"") end return result end
variable_strings()
click to toggle source
# File lib/terraform-wrapper/shared/runner.rb, line 216 def variable_strings logger.fatal("Cannot generate variable strings until Terraform has been initialised!") unless @initialised result = Array.new @config.variables.values.each do |key, value| result.append("-var=\"#{key.to_s}=#{value}\"") end return result end