TerraformDevKit 0.3.4 → 0.3.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
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