Class: Covalence::TerraformStackTasks
- Inherits:
-
Object
- Object
- Covalence::TerraformStackTasks
- Defined in:
- lib/covalence/core/services/terraform_stack_tasks.rb
Instance Method Summary collapse
-
#context_apply(*additional_args) ⇒ Object
:reek:TooManyStatements.
-
#context_destroy(*additional_args) ⇒ Object
:reek:TooManyStatements.
-
#context_plan(*additional_args) ⇒ Object
:reek:TooManyStatements.
-
#context_plan_destroy(*additional_args) ⇒ Object
:reek:TooManyStatements.
- #environment_name ⇒ Object
-
#initialize(stack) ⇒ TerraformStackTasks
constructor
A new instance of TerraformStackTasks.
- #stack_clean ⇒ Object
-
#stack_export ⇒ Object
:reek:TooManyStatements.
- #stack_format ⇒ Object
- #stack_name ⇒ Object
-
#stack_refresh ⇒ Object
:reek:TooManyStatements.
-
#stack_shell ⇒ Object
:reek:TooManyStatements.
-
#stack_sync ⇒ Object
:reek:TooManyStatements.
-
#stack_verify(tmpdir) ⇒ Object
:reek:TooManyStatements.
Constructor Details
#initialize(stack) ⇒ TerraformStackTasks
Returns a new instance of TerraformStackTasks.
7 8 9 10 |
# File 'lib/covalence/core/services/terraform_stack_tasks.rb', line 7 def initialize(stack) @path = File.(File.join(Covalence::TERRAFORM, stack.module_path)) @stack = stack end |
Instance Method Details
#context_apply(*additional_args) ⇒ Object
:reek:TooManyStatements
181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 |
# File 'lib/covalence/core/services/terraform_stack_tasks.rb', line 181 def context_apply(*additional_args) Dir.mktmpdir do |tmpdir| populate_workspace(tmpdir) Dir.chdir(tmpdir) do logger.info "In #{tmpdir}:" TerraformCli.terraform_workspace(@stack.workspace) unless stack.workspace.to_s.empty? stack.materialize_state_inputs TerraformCli.terraform_get(@path) TerraformCli.terraform_init stack.materialize_cmd_inputs(tmpdir) args = collect_args("-input=false", "-auto-approve=true", stack.args, additional_args, "-var-file=covalence-inputs.tfvars") TerraformCli.terraform_apply(args: args) end end end |
#context_destroy(*additional_args) ⇒ Object
:reek:TooManyStatements
206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 |
# File 'lib/covalence/core/services/terraform_stack_tasks.rb', line 206 def context_destroy(*additional_args) Dir.mktmpdir do |tmpdir| populate_workspace(tmpdir) Dir.chdir(tmpdir) do logger.info "In #{tmpdir}:" TerraformCli.terraform_workspace(@stack.workspace) unless stack.workspace.to_s.empty? stack.materialize_state_inputs TerraformCli.terraform_get(@path) TerraformCli.terraform_init stack.materialize_cmd_inputs(tmpdir) args = collect_args("-input=false", "-auto-approve=true", stack.args, additional_args, "-var-file=covalence-inputs.tfvars") TerraformCli.terraform_destroy(args: args) end end end |
#context_plan(*additional_args) ⇒ Object
:reek:TooManyStatements
132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 |
# File 'lib/covalence/core/services/terraform_stack_tasks.rb', line 132 def context_plan(*additional_args) Dir.mktmpdir do |tmpdir| populate_workspace(tmpdir) Dir.chdir(tmpdir) do logger.info "In #{tmpdir}:" TerraformCli.terraform_workspace(@stack.workspace) unless stack.workspace.to_s.empty? stack.materialize_state_inputs TerraformCli.terraform_get(@path) TerraformCli.terraform_init stack.materialize_cmd_inputs(tmpdir) args = collect_args("-input=false", stack.args, additional_args, "-var-file=covalence-inputs.tfvars") TerraformCli.terraform_plan(path: @path, workdir: tmpdir, args: args) end end end |
#context_plan_destroy(*additional_args) ⇒ Object
:reek:TooManyStatements
156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 |
# File 'lib/covalence/core/services/terraform_stack_tasks.rb', line 156 def context_plan_destroy(*additional_args) Dir.mktmpdir do |tmpdir| populate_workspace(tmpdir) Dir.chdir(tmpdir) do logger.info "In #{tmpdir}:" TerraformCli.terraform_workspace(@stack.workspace) unless stack.workspace.to_s.empty? stack.materialize_state_inputs TerraformCli.terraform_get(@path) TerraformCli.terraform_init stack.materialize_cmd_inputs(tmpdir) args = collect_args("-destroy", "-input=false", stack.args, additional_args, "-var-file=covalence-inputs.tfvars") TerraformCli.terraform_plan(args: args) end end end |
#environment_name ⇒ Object
16 17 18 |
# File 'lib/covalence/core/services/terraform_stack_tasks.rb', line 16 def environment_name stack.environment_name end |
#stack_clean ⇒ Object
20 21 22 |
# File 'lib/covalence/core/services/terraform_stack_tasks.rb', line 20 def stack_clean TerraformCli.terraform_clean(@path) end |
#stack_export ⇒ Object
:reek:TooManyStatements
48 49 50 51 52 53 54 55 56 57 |
# File 'lib/covalence/core/services/terraform_stack_tasks.rb', line 48 def stack_export stack_export_init(File.(File.join(Covalence::STACK_EXPORT,'terraform',stack.full_name))).each do |stackdir| populate_workspace(stackdir) stack.materialize_state_inputs(path: stackdir) TerraformCli.terraform_get(path=@path, workdir=stackdir) TerraformCli.terraform_init(path: @path, workdir: stackdir) stack.materialize_cmd_inputs(stackdir) logger.info "Exported to #{stackdir}:" end end |
#stack_format ⇒ Object
24 25 26 |
# File 'lib/covalence/core/services/terraform_stack_tasks.rb', line 24 def stack_format TerraformCli.terraform_fmt(@path) end |
#stack_name ⇒ Object
12 13 14 |
# File 'lib/covalence/core/services/terraform_stack_tasks.rb', line 12 def stack_name stack.name end |
#stack_refresh ⇒ Object
:reek:TooManyStatements
86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 |
# File 'lib/covalence/core/services/terraform_stack_tasks.rb', line 86 def stack_refresh Dir.mktmpdir do |tmpdir| populate_workspace(tmpdir) Dir.chdir(tmpdir) do logger.info "In #{tmpdir}:" TerraformCli.terraform_workspace(@stack.workspace) unless stack.workspace.to_s.empty? stack.materialize_state_inputs TerraformCli.terraform_get(@path) TerraformCli.terraform_init stack.materialize_cmd_inputs(tmpdir) args = collect_args("-input=false", stack.args, "-var-file=covalence-inputs.tfvars") TerraformCli.terraform_refresh(args: args) end end end |
#stack_shell ⇒ Object
:reek:TooManyStatements
29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 |
# File 'lib/covalence/core/services/terraform_stack_tasks.rb', line 29 def stack_shell Dir.mktmpdir do |tmpdir| populate_workspace(tmpdir) Dir.chdir(tmpdir) do logger.info "In #{tmpdir}:" stack.materialize_state_inputs TerraformCli.terraform_get(@path) TerraformCli.terraform_init stack.materialize_cmd_inputs(tmpdir) shell = ENV.fetch('SHELL', 'sh') system(shell) end end end |
#stack_sync ⇒ Object
:reek:TooManyStatements
109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 |
# File 'lib/covalence/core/services/terraform_stack_tasks.rb', line 109 def stack_sync Dir.mktmpdir do |tmpdir| populate_workspace(tmpdir) Dir.chdir(tmpdir) do logger.info "In #{tmpdir}:" TerraformCli.terraform_workspace(@stack.workspace) unless stack.workspace.to_s.empty? stack.materialize_state_inputs TerraformCli.terraform_get(@path) TerraformCli.terraform_init stack.state_stores.drop(1).each do |store| Covalence::LOGGER.debug("Stack: #{store.inspect}") stack.materialize_state_inputs(store: store) TerraformCli.terraform_init("-force-copy") end end end end |
#stack_verify(tmpdir) ⇒ Object
:reek:TooManyStatements
60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 |
# File 'lib/covalence/core/services/terraform_stack_tasks.rb', line 60 def stack_verify(tmpdir) return false if !TerraformCli.terraform_check_style(@path) return false if !TerraformCli.terraform_get(path=@path, workdir=tmpdir) populate_workspace(tmpdir) return false if !TerraformCli.terraform_init(path: @path, workdir: tmpdir) stack.materialize_cmd_inputs(tmpdir) args = collect_args("-input=false", stack.args, "-var-file=#{tmpdir}/covalence-inputs.tfvars") tf_vers = Gem::Version.new(Covalence::TERRAFORM_VERSION) if tf_vers >= Gem::Version.new('0.12.0') # >= 0.12 does *not* support validating input vars return false if !TerraformCli.terraform_validate(path=tmpdir, workdir=tmpdir, args: stack.args) else # < 0.12 supports validating input vars return false if !TerraformCli.terraform_validate(path=tmpdir, workdir=tmpdir, args: args) end TerraformCli.terraform_plan(path: @path , workdir: tmpdir, args: args) end |