Class: YleTf::Action::TerraformInit
- Inherits:
-
Object
- Object
- YleTf::Action::TerraformInit
- Defined in:
- lib/yle_tf/action/terraform_init.rb
Constant Summary collapse
- TF_CMD_ARGS =
%w[-input=false -no-color].freeze
- TF_CMD_OPTS =
{ env: { 'TF_IN_AUTOMATION' => 'true' }, # Reduces some output stdout: :debug # Hide the output to the debug level }.freeze
Instance Attribute Summary collapse
-
#config ⇒ Object
readonly
Returns the value of attribute config.
Instance Method Summary collapse
- #backend ⇒ Object
- #call(env) ⇒ Object
- #copy_to_module_dir(file) ⇒ Object
- #find_backend ⇒ Object
- #init_dir ⇒ Object
- #init_terraform ⇒ Object
-
#initialize(app) ⇒ TerraformInit
constructor
A new instance of TerraformInit.
- #store_terraform_lock ⇒ Object
- #symlink_to_module_dir(file) ⇒ Object
- #tear_down ⇒ Object
- #tf_init_args ⇒ Object
Constructor Details
#initialize(app) ⇒ TerraformInit
Returns a new instance of TerraformInit.
23 24 25 |
# File 'lib/yle_tf/action/terraform_init.rb', line 23 def initialize(app) @app = app end |
Instance Attribute Details
#config ⇒ Object (readonly)
Returns the value of attribute config.
21 22 23 |
# File 'lib/yle_tf/action/terraform_init.rb', line 21 def config @config end |
Instance Method Details
#backend ⇒ Object
72 73 74 |
# File 'lib/yle_tf/action/terraform_init.rb', line 72 def backend @backend ||= find_backend end |
#call(env) ⇒ Object
27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 |
# File 'lib/yle_tf/action/terraform_init.rb', line 27 def call(env) @config = env[:config] Logger.info('Initializing Terraform') Logger.debug("Backend configuration: #{backend}") init_dir if env[:tf_command] == 'init' # Skip initializing Terraform here, as it will be done by the # actuall command later in the middleware stack. @app.call(env) store_terraform_lock else init_terraform store_terraform_lock @app.call(env) end tear_down end |
#copy_to_module_dir(file) ⇒ Object
98 99 100 |
# File 'lib/yle_tf/action/terraform_init.rb', line 98 def copy_to_module_dir(file) FileUtils.cp(file, config.module_dir.to_s) if File.exist?(file) end |
#find_backend ⇒ Object
80 81 82 83 84 85 86 |
# File 'lib/yle_tf/action/terraform_init.rb', line 80 def find_backend backend_type = config.fetch('backend', 'type').downcase backend_proc = Plugin.manager.backends[backend_type] klass = backend_proc.call klass.new(config) end |
#init_dir ⇒ Object
49 50 51 52 53 54 55 |
# File 'lib/yle_tf/action/terraform_init.rb', line 49 def init_dir Logger.debug('Configuring the backend') backend.configure Logger.debug('Symlinking errored.tfstate') symlink_to_module_dir('errored.tfstate') end |
#init_terraform ⇒ Object
62 63 64 65 |
# File 'lib/yle_tf/action/terraform_init.rb', line 62 def init_terraform Logger.debug('Initializing Terraform') YleTf::System.cmd('terraform', 'init', *tf_init_args, **TF_CMD_OPTS) end |
#store_terraform_lock ⇒ Object
67 68 69 70 |
# File 'lib/yle_tf/action/terraform_init.rb', line 67 def store_terraform_lock Logger.debug('Storing .terraform.lock.hcl') copy_to_module_dir('.terraform.lock.hcl') end |
#symlink_to_module_dir(file) ⇒ Object
88 89 90 91 92 93 94 95 96 |
# File 'lib/yle_tf/action/terraform_init.rb', line 88 def symlink_to_module_dir(file) local_path = Pathname.pwd.join(file) remote_path = config.module_dir.join(file) # Remove the possibly copied old file local_path.unlink if local_path.exist? local_path.make_symlink(remote_path) end |
#tear_down ⇒ Object
57 58 59 60 |
# File 'lib/yle_tf/action/terraform_init.rb', line 57 def tear_down Logger.debug('Tearing down backend') backend.tear_down end |
#tf_init_args ⇒ Object
76 77 78 |
# File 'lib/yle_tf/action/terraform_init.rb', line 76 def tf_init_args TF_CMD_ARGS + Shellwords.split(ENV.fetch('TF_INIT_ARGS', '')) end |