TerraformDevKit 0.3.3 → 0.3.4

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.
Files changed (40) hide show
  1. checksums.yaml +4 -4
  2. data/.appveyor.yml +0 -0
  3. data/.gitignore +0 -0
  4. data/.rspec +2 -2
  5. data/.travis.yml +8 -8
  6. data/Gemfile +4 -4
  7. data/LICENSE +0 -0
  8. data/README.md +226 -206
  9. data/Rakefile +6 -6
  10. data/TerraformDevKit.gemspec +36 -36
  11. data/bin/console +14 -14
  12. data/bin/setup +8 -8
  13. data/exe/wait_for_url +0 -0
  14. data/lib/TerraformDevKit.rb +21 -21
  15. data/lib/TerraformDevKit/aws/aws.rb +65 -65
  16. data/lib/TerraformDevKit/aws/cloudfront.rb +20 -20
  17. data/lib/TerraformDevKit/aws/dynamodb.rb +46 -46
  18. data/lib/TerraformDevKit/aws/s3.rb +44 -44
  19. data/lib/TerraformDevKit/aws/terraform_remote_state.rb +67 -67
  20. data/lib/TerraformDevKit/backup_state.rb +18 -18
  21. data/lib/TerraformDevKit/command.rb +0 -0
  22. data/lib/TerraformDevKit/config.rb +0 -0
  23. data/lib/TerraformDevKit/download.rb +0 -0
  24. data/lib/TerraformDevKit/environment.rb +1 -0
  25. data/lib/TerraformDevKit/extended_file_utils.rb +14 -14
  26. data/lib/TerraformDevKit/os.rb +0 -0
  27. data/lib/TerraformDevKit/request.rb +0 -0
  28. data/lib/TerraformDevKit/retry.rb +0 -0
  29. data/lib/TerraformDevKit/terraform_config_manager.rb +4 -24
  30. data/lib/TerraformDevKit/terraform_env_manager.rb +0 -0
  31. data/lib/TerraformDevKit/terraform_installer.rb +0 -0
  32. data/lib/TerraformDevKit/terraform_log_filter.rb +0 -0
  33. data/lib/TerraformDevKit/terraform_project_config.rb +10 -10
  34. data/lib/TerraformDevKit/terraform_template_config_file.rb +0 -0
  35. data/lib/TerraformDevKit/terraform_template_renderer.rb +41 -0
  36. data/lib/TerraformDevKit/url.rb +0 -0
  37. data/lib/TerraformDevKit/version.rb +3 -3
  38. data/lib/TerraformDevKit/zip_file_generator.rb +47 -47
  39. data/tasks/devkit.rake +194 -194
  40. metadata +4 -3
@@ -1,67 +1,67 @@
1
- require 'aws-sdk-dynamodb'
2
- require 'aws-sdk-s3'
3
-
4
- module TerraformDevKit
5
- module Aws
6
- class TerraformRemoteState
7
- ATTRIBUTES = [
8
- {
9
- attribute_name: 'LockID',
10
- attribute_type: 'S'
11
- }
12
- ]
13
- KEYS = [
14
- {
15
- attribute_name: 'LockID',
16
- key_type: 'HASH'
17
- }
18
- ]
19
-
20
- def initialize(dynamodb, s3)
21
- @dynamodb = dynamodb
22
- @s3 = s3
23
- end
24
-
25
- def init(environment, project)
26
- table_name = table_name(environment, project)
27
- return if lock_table_exists_and_is_active(table_name)
28
-
29
- @dynamodb.create_table(table_name, ATTRIBUTES, KEYS, 1, 1)
30
-
31
- begin
32
- @s3.create_bucket(state_bucket_name(environment, project))
33
- rescue ::Aws::S3::Errors::BucketAlreadyOwnedByYou
34
- return
35
- end
36
-
37
- sleep(0.2) until lock_table_exists_and_is_active(table_name)
38
- end
39
-
40
- def destroy(environment, project)
41
- table_name = table_name(environment, project)
42
-
43
- @dynamodb.delete_table(table_name)
44
- @s3.delete_bucket(state_bucket_name(environment, project))
45
- end
46
-
47
- private_class_method
48
- def lock_table_exists_and_is_active(table_name)
49
- begin
50
- return @dynamodb.get_table_status(table_name) == 'ACTIVE'
51
- rescue ::Aws::DynamoDB::Errors::ResourceNotFoundException
52
- return false
53
- end
54
- end
55
-
56
- private_class_method
57
- def table_name(environment, project)
58
- "#{project.acronym}-#{environment.name}-lock-table"
59
- end
60
-
61
- private_class_method
62
- def state_bucket_name(environment, project)
63
- "#{project.name}-#{environment.name}-state"
64
- end
65
- end
66
- end
67
- end
1
+ require 'aws-sdk-dynamodb'
2
+ require 'aws-sdk-s3'
3
+
4
+ module TerraformDevKit
5
+ module Aws
6
+ class TerraformRemoteState
7
+ ATTRIBUTES = [
8
+ {
9
+ attribute_name: 'LockID',
10
+ attribute_type: 'S'
11
+ }
12
+ ]
13
+ KEYS = [
14
+ {
15
+ attribute_name: 'LockID',
16
+ key_type: 'HASH'
17
+ }
18
+ ]
19
+
20
+ def initialize(dynamodb, s3)
21
+ @dynamodb = dynamodb
22
+ @s3 = s3
23
+ end
24
+
25
+ def init(environment, project)
26
+ table_name = table_name(environment, project)
27
+ return if lock_table_exists_and_is_active(table_name)
28
+
29
+ @dynamodb.create_table(table_name, ATTRIBUTES, KEYS, 1, 1)
30
+
31
+ begin
32
+ @s3.create_bucket(state_bucket_name(environment, project))
33
+ rescue ::Aws::S3::Errors::BucketAlreadyOwnedByYou
34
+ return
35
+ end
36
+
37
+ sleep(0.2) until lock_table_exists_and_is_active(table_name)
38
+ end
39
+
40
+ def destroy(environment, project)
41
+ table_name = table_name(environment, project)
42
+
43
+ @dynamodb.delete_table(table_name)
44
+ @s3.delete_bucket(state_bucket_name(environment, project))
45
+ end
46
+
47
+ private_class_method
48
+ def lock_table_exists_and_is_active(table_name)
49
+ begin
50
+ return @dynamodb.get_table_status(table_name) == 'ACTIVE'
51
+ rescue ::Aws::DynamoDB::Errors::ResourceNotFoundException
52
+ return false
53
+ end
54
+ end
55
+
56
+ private_class_method
57
+ def table_name(environment, project)
58
+ "#{project.acronym}-#{environment.name}-lock-table"
59
+ end
60
+
61
+ private_class_method
62
+ def state_bucket_name(environment, project)
63
+ "#{project.name}-#{environment.name}-state"
64
+ end
65
+ end
66
+ end
67
+ end
@@ -1,18 +1,18 @@
1
- require 'fileutils'
2
-
3
- require_relative 'zip_file_generator'
4
-
5
- module TerraformDevKit
6
- class BackupState
7
- def self.backup(prefix)
8
- backup_path = ENV['TM_STATE_BACKUP_PATH']
9
- return if backup_path.nil?
10
-
11
- filename = "#{prefix}failure_state.zip"
12
- ZipFileGenerator.new('.', filename).write
13
-
14
- FileUtils.cp(filename, backup_path)
15
- puts "Copied state to #{File.join(backup_path, filename)}"
16
- end
17
- end
18
- end
1
+ require 'fileutils'
2
+
3
+ require_relative 'zip_file_generator'
4
+
5
+ module TerraformDevKit
6
+ class BackupState
7
+ def self.backup(prefix)
8
+ backup_path = ENV['TM_STATE_BACKUP_PATH']
9
+ return if backup_path.nil?
10
+
11
+ filename = "#{prefix}failure_state.zip"
12
+ ZipFileGenerator.new('.', filename).write
13
+
14
+ FileUtils.cp(filename, backup_path)
15
+ puts "Copied state to #{File.join(backup_path, filename)}"
16
+ end
17
+ end
18
+ end
File without changes
File without changes
File without changes
@@ -30,6 +30,7 @@ module TerraformDevKit
30
30
  end
31
31
 
32
32
  def working_dir
33
+ # TODO: get rid of ROOT_PATH
33
34
  File.join(ROOT_PATH, 'envs', @name)
34
35
  end
35
36
 
@@ -1,14 +1,14 @@
1
- require 'fileutils'
2
- require 'TerraformDevKit/command'
3
- require 'TerraformDevKit/os'
4
-
5
- module TerraformDevKit::ExtendedFileUtils
6
- def self.rm_rf(list, options = {})
7
- if TerraformDevKit::OS.host_os == 'windows'
8
- windows_path = TerraformDevKit::OS.convert_to_local_path(list)
9
- TerraformDevKit::Command.run("rmdir /s/q \"#{windows_path}\"")
10
- else
11
- FileUtils.rm_rf(list, options)
12
- end
13
- end
14
- end
1
+ require 'fileutils'
2
+ require 'TerraformDevKit/command'
3
+ require 'TerraformDevKit/os'
4
+
5
+ module TerraformDevKit::ExtendedFileUtils
6
+ def self.rm_rf(list, options = {})
7
+ if TerraformDevKit::OS.host_os == 'windows'
8
+ windows_path = TerraformDevKit::OS.convert_to_local_path(list)
9
+ TerraformDevKit::Command.run("rmdir /s/q \"#{windows_path}\"")
10
+ else
11
+ FileUtils.rm_rf(list, options)
12
+ end
13
+ end
14
+ end
File without changes
File without changes
File without changes
@@ -1,11 +1,8 @@
1
1
  require 'fileutils'
2
- require 'TerraformDevKit/terraform_project_config'
3
- require 'TerraformDevKit/terraform_template_config_file'
2
+ require 'TerraformDevKit/terraform_template_renderer'
4
3
 
5
4
  module TerraformDevKit
6
5
  class TerraformConfigManager
7
- @extra_vars_proc = proc { {} }
8
-
9
6
  def self.register_extra_vars_proc(p)
10
7
  @extra_vars_proc = p
11
8
  end
@@ -13,7 +10,9 @@ module TerraformDevKit
13
10
  def self.setup(env, project)
14
11
  fix_configuration(env)
15
12
  create_environment_directory(env)
16
- render_template_config_files(env, project)
13
+ TerraformTemplateRenderer
14
+ .new(env, project, @extra_vars_proc)
15
+ .render_files
17
16
  end
18
17
 
19
18
  def self.update_modules?
@@ -41,25 +40,6 @@ module TerraformDevKit
41
40
  FileUtils.makedirs(env.working_dir)
42
41
  end
43
42
 
44
- private_class_method
45
- def self.render_template_config_files(env, project)
46
- aws_config = Configuration.get('aws')
47
- file_list = Dir['*.tf.mustache'] + Dir['*.tfvars.mustache']
48
- file_list.each do |fname|
49
- template_file = TerraformTemplateConfigFile.new(
50
- File.read(fname),
51
- project,
52
- env,
53
- aws_config,
54
- extra_vars: @extra_vars_proc.call(env)
55
- )
56
- config_fname = File.basename(fname, File.extname(fname))
57
- Dir.chdir(env.working_dir) do
58
- File.open(config_fname, 'w') { |f| f.write(template_file.render) }
59
- end
60
- end
61
- end
62
-
63
43
  private_class_method
64
44
  def self.request_profile(env)
65
45
  puts "Environment #{env.name} requires manual input of AWS credentials"
File without changes
File without changes
File without changes
@@ -1,10 +1,10 @@
1
- module TerraformDevKit
2
- class TerraformProjectConfig
3
- attr_reader :name, :acronym
4
-
5
- def initialize(project_name, project_acronym = nil)
6
- @name = project_name.tr(' ', '-').downcase
7
- @acronym = project_acronym || project_name.scan(/\b[a-z]/i).join.upcase
8
- end
9
- end
10
- end
1
+ module TerraformDevKit
2
+ class TerraformProjectConfig
3
+ attr_reader :name, :acronym
4
+
5
+ def initialize(project_name, project_acronym = nil)
6
+ @name = project_name.tr(' ', '-').downcase
7
+ @acronym = project_acronym || project_name.scan(/\b[a-z]/i).join.upcase
8
+ end
9
+ end
10
+ end
@@ -0,0 +1,41 @@
1
+ require 'fileutils'
2
+ require 'TerraformDevKit/terraform_template_config_file'
3
+
4
+ module TerraformDevKit
5
+ class TerraformTemplateRenderer
6
+ def initialize(env, project, extra_vars_proc = nil)
7
+ @env = env
8
+ @project = project
9
+ @extra_vars_proc = extra_vars_proc || proc { {} }
10
+ end
11
+
12
+ def render_files
13
+ template_dirs = Configuration.get('template-dirs')
14
+ render_files_into_path(Dir['*.mustache'])
15
+ template_dirs.to_h.each do |dest, src|
16
+ render_files_into_path(Dir[File.join(src, '*.mustache')], dest)
17
+ end
18
+ end
19
+
20
+ private
21
+
22
+ def render_files_into_path(file_list, dest_path = '.')
23
+ aws_config = Configuration.get('aws')
24
+ file_list.each do |fname|
25
+ template_file = TerraformTemplateConfigFile.new(
26
+ File.read(fname),
27
+ @project,
28
+ @env,
29
+ aws_config,
30
+ extra_vars: @extra_vars_proc.call(@env)
31
+ )
32
+ config_fname = File.basename(fname, File.extname(fname))
33
+ Dir.chdir(@env.working_dir) do
34
+ FileUtils.makedirs(dest_path)
35
+ config_fname = File.join(dest_path, config_fname)
36
+ File.open(config_fname, 'w') { |f| f.write(template_file.render) }
37
+ end
38
+ end
39
+ end
40
+ end
41
+ end
File without changes
@@ -1,3 +1,3 @@
1
- module TerraformDevKit
2
- VERSION = '0.3.3'.freeze
3
- end
1
+ module TerraformDevKit
2
+ VERSION = '0.3.4'.freeze
3
+ end
@@ -1,47 +1,47 @@
1
- require 'zip'
2
-
3
- module TerraformDevKit
4
- class ZipFileGenerator
5
- def initialize(input_dir, output_file)
6
- @input_dir = input_dir
7
- @output_file = output_file
8
- end
9
-
10
- def write
11
- entries = Dir.entries(@input_dir)
12
- entries.delete('.')
13
- entries.delete('..')
14
- Zip::File.open(@output_file, Zip::File::CREATE) do |zipfile|
15
- write_entries(entries, '', zipfile)
16
- end
17
- end
18
-
19
- private
20
-
21
- def write_entries(entries, path, zipfile)
22
- entries.each do |e|
23
- zip_file_path = path == '' ? e : File.join(path, e)
24
- disk_file_path = File.join(@input_dir, zip_file_path)
25
- if File.directory?(disk_file_path)
26
- write_directory(disk_file_path, zip_file_path, zipfile)
27
- else
28
- write_file(disk_file_path, zip_file_path, zipfile)
29
- end
30
- end
31
- end
32
-
33
- def write_directory(disk_file_path, zip_file_path, zipfile)
34
- zipfile.mkdir(zip_file_path)
35
- subdir = Dir.entries(disk_file_path)
36
- subdir.delete('.')
37
- subdir.delete('..')
38
- write_entries(subdir, zip_file_path, zipfile)
39
- end
40
-
41
- def write_file(disk_file_path, zip_file_path, zipfile)
42
- zipfile.get_output_stream(zip_file_path) do |f|
43
- f.puts(File.open(disk_file_path, 'rb').read)
44
- end
45
- end
46
- end
47
- end
1
+ require 'zip'
2
+
3
+ module TerraformDevKit
4
+ class ZipFileGenerator
5
+ def initialize(input_dir, output_file)
6
+ @input_dir = input_dir
7
+ @output_file = output_file
8
+ end
9
+
10
+ def write
11
+ entries = Dir.entries(@input_dir)
12
+ entries.delete('.')
13
+ entries.delete('..')
14
+ Zip::File.open(@output_file, Zip::File::CREATE) do |zipfile|
15
+ write_entries(entries, '', zipfile)
16
+ end
17
+ end
18
+
19
+ private
20
+
21
+ def write_entries(entries, path, zipfile)
22
+ entries.each do |e|
23
+ zip_file_path = path == '' ? e : File.join(path, e)
24
+ disk_file_path = File.join(@input_dir, zip_file_path)
25
+ if File.directory?(disk_file_path)
26
+ write_directory(disk_file_path, zip_file_path, zipfile)
27
+ else
28
+ write_file(disk_file_path, zip_file_path, zipfile)
29
+ end
30
+ end
31
+ end
32
+
33
+ def write_directory(disk_file_path, zip_file_path, zipfile)
34
+ zipfile.mkdir(zip_file_path)
35
+ subdir = Dir.entries(disk_file_path)
36
+ subdir.delete('.')
37
+ subdir.delete('..')
38
+ write_entries(subdir, zip_file_path, zipfile)
39
+ end
40
+
41
+ def write_file(disk_file_path, zip_file_path, zipfile)
42
+ zipfile.get_output_stream(zip_file_path) do |f|
43
+ f.puts(File.open(disk_file_path, 'rb').read)
44
+ end
45
+ end
46
+ end
47
+ end