Class: Covalence::TerraformStackTasks

Inherits:
Object
  • Object
show all
Defined in:
lib/covalence/core/services/terraform_stack_tasks.rb

Instance Method Summary collapse

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.expand_path(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_nameObject



16
17
18
# File 'lib/covalence/core/services/terraform_stack_tasks.rb', line 16

def environment_name
  stack.environment_name
end

#stack_cleanObject



20
21
22
# File 'lib/covalence/core/services/terraform_stack_tasks.rb', line 20

def stack_clean
  TerraformCli.terraform_clean(@path)
end

#stack_exportObject

: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.expand_path(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_formatObject



24
25
26
# File 'lib/covalence/core/services/terraform_stack_tasks.rb', line 24

def stack_format
  TerraformCli.terraform_fmt(@path)
end

#stack_nameObject



12
13
14
# File 'lib/covalence/core/services/terraform_stack_tasks.rb', line 12

def stack_name
  stack.name
end

#stack_refreshObject

: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_shellObject

: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_syncObject

: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