TerraformDevKit 0.3.4 → 0.3.5

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: ae1d983c3f18052eecb5a5ce8d8261b45dc66641
4
- data.tar.gz: eee21e25fd6086288c9ead20c0315165a5e50fd9
3
+ metadata.gz: 83160b993699651ff3704a83514b066c05c40ecd
4
+ data.tar.gz: fc6ff392be1d7ff059c3a65a7668b77940259d8d
5
5
  SHA512:
6
- metadata.gz: 8acdc4279b72712cccd97753506d6f18d8f0524a5b86355970c7b5e7440a1ff7cbfc945799668b04afc7ad239b0070835dac0cbfa0819abeb9095b82b5af60b0
7
- data.tar.gz: c5c73635e8e48c4c053cee9a897d699c6775e0d08962326763f735cbb815f6b4013b1524289e780ae625dfd25e4f77b09d3847fdccb81a43f9204df1ca0c45a3
6
+ metadata.gz: 7530cce40200f4e8ba2bc2dc725127557e720873e158ab055f9dbf53fefc1f862bfd9eabd8c41d6c524f9505c52e1d74c94b3e8a4faf2707a6c87a485c169641
7
+ data.tar.gz: 7e34bb9aa5448e9ff903ae66b00366f9dbe2cfef40931352dba80a705cba89151942444ed86369ff0fe0513ea6c462a7ac15d7d212bb6b937e2c7eb7dff45363
data/README.md CHANGED
@@ -205,6 +205,19 @@ template-dirs:
205
205
  another-template-dest-folder: yet-another-template-src-folder
206
206
  ```
207
207
 
208
+ ### Copying Files to the Environment Folder
209
+
210
+ Sometimes it may be desirable to copy files that exist in a given folder into the environment folder. The `copy-files` field makes this possible. See the following configuration for an example:
211
+
212
+ ```yaml
213
+ terraform-version: 0.11.0
214
+ project-name: my super cool project
215
+ copy-files:
216
+ dest-folder: ../src-folder
217
+ another-dest-folder: ../../another-src-folder
218
+ dest-file: src-file
219
+ ```
220
+
208
221
  ### Updating Modules
209
222
 
210
223
  Terraform will get the necessary modules every time a new environment is created. Once the modules are cached, there is generally no need to keep updating the modules each time Terraform is executed. When using a module repository it is possible to select a specific version to use (as shown [here](https://www.terraform.io/docs/modules/sources.html#ref)). In such a case, Terraform will automatically update the modules whenever the version number is changed.
@@ -15,7 +15,7 @@ require 'TerraformDevKit/terraform_config_manager'
15
15
  require 'TerraformDevKit/terraform_env_manager'
16
16
  require 'TerraformDevKit/terraform_installer'
17
17
  require 'TerraformDevKit/terraform_log_filter'
18
- require 'TerraformDevKit/terraform_project_config'
19
- require 'TerraformDevKit/terraform_template_config_file'
18
+ require 'TerraformDevKit/project_config'
19
+ require 'TerraformDevKit/template_config_file'
20
20
  require 'TerraformDevKit/url'
21
21
  require 'TerraformDevKit/version'
@@ -1,26 +1,31 @@
1
1
  require 'open3'
2
2
 
3
+ require 'TerraformDevKit/errors/command_error'
4
+
3
5
  module TerraformDevKit
4
6
  class Command
5
7
  def self.run(cmd, directory: Dir.pwd, print_output: true)
6
- Open3.popen2e(cmd, chdir: directory) do |_, stdout_and_stderr, thread|
7
- output = process_output(stdout_and_stderr, print_output)
8
-
9
- thread.join
10
- raise "Error running command #{cmd}" unless thread.value.success?
11
- return output
8
+ out = IO.popen(cmd, err: %i[child out], chdir: directory) do |io|
9
+ begin
10
+ out = ''
11
+ loop do
12
+ chunk = io.readpartial(4096)
13
+ print chunk if print_output
14
+ out += chunk
15
+ end
16
+ rescue EOFError; end
17
+ out
12
18
  end
19
+
20
+ out = process_output(out)
21
+ $?.exitstatus.zero? || (raise CommandError.new(cmd, out))
22
+ out
13
23
  end
14
24
 
15
25
  private_class_method
16
- def self.process_output(stream, print_output)
17
- lines = []
18
-
19
- until (line = stream.gets).nil?
20
- print line if print_output
21
- lines << line.strip
22
- end
23
- lines
26
+ def self.process_output(out)
27
+ out.split("\n")
28
+ .map { |line| line.tr("\r\n", '') }
24
29
  end
25
30
  end
26
31
  end
@@ -0,0 +1,14 @@
1
+ require 'json'
2
+
3
+ module TerraformDevKit
4
+ class CommandError < StandardError
5
+ attr_reader :cmd
6
+ attr_reader :output
7
+
8
+ def initialize(cmd, output)
9
+ @cmd = cmd
10
+ @output = output
11
+ super(JSON.generate({ cmd: @cmd, output: @output.join("\n") }))
12
+ end
13
+ end
14
+ end
@@ -3,6 +3,13 @@ require 'TerraformDevKit/command'
3
3
  require 'TerraformDevKit/os'
4
4
 
5
5
  module TerraformDevKit::ExtendedFileUtils
6
+ def self.copy(files, dest_base_path)
7
+ files.to_h.each do |dest, src|
8
+ dest = File.join(dest_base_path, dest)
9
+ FileUtils.copy_entry(src, dest)
10
+ end
11
+ end
12
+
6
13
  def self.rm_rf(list, options = {})
7
14
  if TerraformDevKit::OS.host_os == 'windows'
8
15
  windows_path = TerraformDevKit::OS.convert_to_local_path(list)
@@ -1,5 +1,5 @@
1
1
  module TerraformDevKit
2
- class TerraformProjectConfig
2
+ class ProjectConfig
3
3
  attr_reader :name, :acronym
4
4
 
5
5
  def initialize(project_name, project_acronym = nil)
@@ -1,7 +1,7 @@
1
1
  require 'mustache'
2
2
 
3
3
  module TerraformDevKit
4
- class TerraformTemplateConfigFile
4
+ class TemplateConfigFile
5
5
  def initialize(content, project, env, aws_config, extra_vars: {})
6
6
  @content = content
7
7
  @project = project
@@ -1,8 +1,8 @@
1
1
  require 'fileutils'
2
- require 'TerraformDevKit/terraform_template_config_file'
2
+ require 'TerraformDevKit/template_config_file'
3
3
 
4
4
  module TerraformDevKit
5
- class TerraformTemplateRenderer
5
+ class TemplateRenderer
6
6
  def initialize(env, project, extra_vars_proc = nil)
7
7
  @env = env
8
8
  @project = project
@@ -10,8 +10,8 @@ module TerraformDevKit
10
10
  end
11
11
 
12
12
  def render_files
13
- template_dirs = Configuration.get('template-dirs')
14
13
  render_files_into_path(Dir['*.mustache'])
14
+ template_dirs = Configuration.get('template-dirs')
15
15
  template_dirs.to_h.each do |dest, src|
16
16
  render_files_into_path(Dir[File.join(src, '*.mustache')], dest)
17
17
  end
@@ -22,7 +22,7 @@ module TerraformDevKit
22
22
  def render_files_into_path(file_list, dest_path = '.')
23
23
  aws_config = Configuration.get('aws')
24
24
  file_list.each do |fname|
25
- template_file = TerraformTemplateConfigFile.new(
25
+ template_file = TemplateConfigFile.new(
26
26
  File.read(fname),
27
27
  @project,
28
28
  @env,
@@ -1,5 +1,6 @@
1
1
  require 'fileutils'
2
- require 'TerraformDevKit/terraform_template_renderer'
2
+ require 'TerraformDevKit/extended_file_utils'
3
+ require 'TerraformDevKit/template_renderer'
3
4
 
4
5
  module TerraformDevKit
5
6
  class TerraformConfigManager
@@ -10,7 +11,8 @@ module TerraformDevKit
10
11
  def self.setup(env, project)
11
12
  fix_configuration(env)
12
13
  create_environment_directory(env)
13
- TerraformTemplateRenderer
14
+ copy_files(env)
15
+ TemplateRenderer
14
16
  .new(env, project, @extra_vars_proc)
15
17
  .render_files
16
18
  end
@@ -40,6 +42,11 @@ module TerraformDevKit
40
42
  FileUtils.makedirs(env.working_dir)
41
43
  end
42
44
 
45
+ private_class_method
46
+ def self.copy_files(env)
47
+ ExtendedFileUtils.copy(Configuration.get('copy-files'), env.working_dir)
48
+ end
49
+
43
50
  private_class_method
44
51
  def self.request_profile(env)
45
52
  puts "Environment #{env.name} requires manual input of AWS credentials"
@@ -1,3 +1,3 @@
1
1
  module TerraformDevKit
2
- VERSION = '0.3.4'.freeze
2
+ VERSION = '0.3.5'.freeze
3
3
  end
data/tasks/devkit.rake CHANGED
@@ -66,7 +66,7 @@ task :prepare, [:env] do |_, args|
66
66
  directory: BIN_PATH
67
67
  )
68
68
 
69
- project_config = TDK::TerraformProjectConfig.new(
69
+ project_config = TDK::ProjectConfig.new(
70
70
  TDK::Configuration.get('project-name'),
71
71
  TDK::Configuration.get('project-acronym')
72
72
  )
@@ -176,7 +176,7 @@ task :destroy, [:env] => :prepare do |task, args|
176
176
  invoke('pre_destroy', task, args.env, safe_invoke: true)
177
177
 
178
178
  unless env.local_backend?
179
- project_config = TDK::TerraformProjectConfig.new(
179
+ project_config = TDK::ProjectConfig.new(
180
180
  TDK::Configuration.get('project-name'),
181
181
  TDK::Configuration.get('project-acronym')
182
182
  )
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: TerraformDevKit
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.4
4
+ version: 0.3.5
5
5
  platform: ruby
6
6
  authors:
7
7
  - Victor Jimenez
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2018-02-05 00:00:00.000000000 Z
11
+ date: 2018-02-08 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -195,17 +195,18 @@ files:
195
195
  - lib/TerraformDevKit/config.rb
196
196
  - lib/TerraformDevKit/download.rb
197
197
  - lib/TerraformDevKit/environment.rb
198
+ - lib/TerraformDevKit/errors/command_error.rb
198
199
  - lib/TerraformDevKit/extended_file_utils.rb
199
200
  - lib/TerraformDevKit/os.rb
201
+ - lib/TerraformDevKit/project_config.rb
200
202
  - lib/TerraformDevKit/request.rb
201
203
  - lib/TerraformDevKit/retry.rb
204
+ - lib/TerraformDevKit/template_config_file.rb
205
+ - lib/TerraformDevKit/template_renderer.rb
202
206
  - lib/TerraformDevKit/terraform_config_manager.rb
203
207
  - lib/TerraformDevKit/terraform_env_manager.rb
204
208
  - lib/TerraformDevKit/terraform_installer.rb
205
209
  - lib/TerraformDevKit/terraform_log_filter.rb
206
- - lib/TerraformDevKit/terraform_project_config.rb
207
- - lib/TerraformDevKit/terraform_template_config_file.rb
208
- - lib/TerraformDevKit/terraform_template_renderer.rb
209
210
  - lib/TerraformDevKit/url.rb
210
211
  - lib/TerraformDevKit/version.rb
211
212
  - lib/TerraformDevKit/zip_file_generator.rb