TerraformDevKit 0.3.7 → 0.3.8

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 (41) hide show
  1. checksums.yaml +5 -5
  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 +239 -239
  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 +31 -31
  22. data/lib/TerraformDevKit/config.rb +0 -0
  23. data/lib/TerraformDevKit/download.rb +0 -0
  24. data/lib/TerraformDevKit/environment.rb +0 -0
  25. data/lib/TerraformDevKit/errors/command_error.rb +0 -0
  26. data/lib/TerraformDevKit/extended_file_utils.rb +21 -21
  27. data/lib/TerraformDevKit/os.rb +0 -0
  28. data/lib/TerraformDevKit/project_config.rb +10 -10
  29. data/lib/TerraformDevKit/request.rb +0 -0
  30. data/lib/TerraformDevKit/retry.rb +0 -0
  31. data/lib/TerraformDevKit/template_config_file.rb +0 -0
  32. data/lib/TerraformDevKit/template_renderer.rb +0 -0
  33. data/lib/TerraformDevKit/terraform_config_manager.rb +0 -0
  34. data/lib/TerraformDevKit/terraform_env_manager.rb +0 -0
  35. data/lib/TerraformDevKit/terraform_installer.rb +1 -1
  36. data/lib/TerraformDevKit/terraform_log_filter.rb +0 -0
  37. data/lib/TerraformDevKit/url.rb +0 -0
  38. data/lib/TerraformDevKit/version.rb +3 -3
  39. data/lib/TerraformDevKit/zip_file_generator.rb +47 -47
  40. data/tasks/devkit.rake +187 -187
  41. metadata +7 -7
data/tasks/devkit.rake CHANGED
@@ -1,187 +1,187 @@
1
- require 'rainbow'
2
- require 'TerraformDevKit'
3
-
4
- TDK = TerraformDevKit
5
-
6
- raise 'ROOT_PATH is not defined' if defined?(ROOT_PATH).nil?
7
- BIN_PATH = File.join(ROOT_PATH, 'bin')
8
- CONFIG_FILE ||= File.join(ROOT_PATH, 'config', 'config-%s.yml')
9
-
10
- # Ensure terraform is in the PATH
11
- ENV['PATH'] = TDK::OS.join_env_path(
12
- TDK::OS.convert_to_local_path(BIN_PATH),
13
- ENV['PATH']
14
- )
15
-
16
- PLAN_FILE = 'plan.tfplan'.freeze
17
-
18
- def destroy_if_fails(env, task)
19
- yield
20
- rescue Exception => e
21
- puts "ERROR: #{e.message}"
22
- puts e.backtrace.join("\n")
23
- invoke('destroy', task, env.name) if env.local_backend?
24
- raise
25
- end
26
-
27
- def invoke(task_name, task_context, env, safe_invoke: false)
28
- task_in_context = task_in_current_namespace(task_name, task_context)
29
- should_invoke = !safe_invoke || Rake::Task.task_defined?(task_in_context)
30
- Rake::Task[task_in_context].invoke(env) if should_invoke
31
- end
32
-
33
- def task_in_current_namespace(task_name, current_task)
34
- namespace = current_task.scope.path.to_s
35
- namespace.empty? ? task_name : "#{namespace}:#{task_name}"
36
- end
37
-
38
- def remote_state
39
- aws_config = TDK::Aws::AwsConfig.new(TDK::Configuration.get('aws'))
40
- dynamo_db = TDK::Aws::DynamoDB.new(
41
- aws_config.credentials,
42
- aws_config.region
43
- )
44
- s3 = TDK::Aws::S3.new(
45
- aws_config.credentials,
46
- aws_config.region
47
- )
48
- TDK::Aws::TerraformRemoteState.new(dynamo_db, s3)
49
- end
50
-
51
- desc 'Prepares the environment to create the infrastructure'
52
- task :prepare, [:env] do |_, args|
53
- env = TDK::Environment.new(args.env)
54
-
55
- puts "== Configuring environment #{env.name}"
56
-
57
- config_file = CONFIG_FILE % env.config
58
- puts "== Loading configuration from #{config_file}"
59
- TDK::Configuration.init(config_file)
60
-
61
- invoke('custom_prepare', task, env.name, safe_invoke: true)
62
-
63
- TDK::TerraformInstaller.install_local(
64
- TDK::Configuration.get('terraform-version'),
65
- directory: BIN_PATH
66
- )
67
-
68
- project_config = TDK::ProjectConfig.new(
69
- TDK::Configuration.get('project-name'),
70
- TDK::Configuration.get('project-acronym')
71
- )
72
- TDK::TerraformConfigManager.setup(env, project_config)
73
-
74
- unless env.local_backend?
75
- puts '== Initializing remote state'
76
- remote_state.init(env, project_config)
77
- end
78
-
79
- if File.exist?(File.join(env.working_dir, '.terraform'))
80
- get_cmd = 'terraform get'
81
- get_cmd += ' -update=true' if TDK::TerraformConfigManager.update_modules?
82
- TDK::Command.run(get_cmd, directory: env.working_dir)
83
- else
84
- init_cmd = 'terraform init'
85
- init_cmd += ' -upgrade=false' unless TDK::TerraformConfigManager.update_modules?
86
- TDK::Command.run(init_cmd, directory: env.working_dir)
87
- end
88
- end
89
-
90
- desc 'Shows the plan to create the infrastructure'
91
- task :plan, [:env] => :prepare do |_, args|
92
- env = TDK::Environment.new(args.env)
93
- cmd = "terraform plan -out=#{PLAN_FILE}"
94
- TDK::Command.run(cmd, directory: env.working_dir)
95
- end
96
-
97
- desc 'Creates the infrastructure'
98
- task :apply, [:env] => :prepare do |task, args|
99
- env = TDK::Environment.new(args.env)
100
-
101
- invoke('plan', task, env.name)
102
-
103
- unless env.local_backend? || allow_remote_apply?
104
- puts Rainbow("Are you sure you want to apply the above plan?\n" \
105
- "Only 'yes' will be accepted.").green
106
- response = STDIN.gets.strip
107
- unless response == 'yes'
108
- raise "Apply cancelled because response was not 'yes'.\n" \
109
- "Response was: #{response}"
110
- end
111
- end
112
-
113
- invoke('pre_apply', task, env.name, safe_invoke: true)
114
-
115
- destroy_if_fails(env, task) do
116
- cmd = "terraform apply \"#{PLAN_FILE}\""
117
- TDK::Command.run(cmd, directory: env.working_dir)
118
- end
119
-
120
- invoke('post_apply', task, env.name, safe_invoke: true)
121
- end
122
-
123
- def allow_remote_apply?
124
- aws = TDK::Configuration.get('aws')
125
- aws.key?('remote_apply') && aws['remote_apply']
126
- end
127
-
128
- desc 'Tests a local environment'
129
- task :test, [:env] do |task, args|
130
- env = TDK::Environment.new(args.env)
131
- env.local_backend? || (raise 'Testing is only allowed for local environments')
132
-
133
- invoke('apply', task, env.name)
134
-
135
- destroy_if_fails(env, task) do
136
- invoke('custom_test', task, env.name, safe_invoke: true)
137
- end
138
- end
139
-
140
- desc 'Creates the infrastructure and runs the tests'
141
- task :preflight, [:prefix, :teardown] do |task, args|
142
- args.with_defaults(teardown: 'true')
143
- args.with_defaults(prefix: TDK::Environment.temp_name)
144
- env = TDK::Environment.new(args.prefix)
145
-
146
- invoke('test', task, env.name)
147
- invoke('clean', task, env.name) if args.teardown == 'true'
148
- end
149
-
150
- desc 'Destroys the infrastructure'
151
- task :destroy, [:env] => :prepare do |task, args|
152
- env = TDK::Environment.new(args.env)
153
-
154
- unless env.local_backend?
155
- puts Rainbow("\n\n!!!! WARNING !!!!\n\n" \
156
- "You are about to destroy #{env.name} and its remote state.\n" \
157
- "Are you sure you want to proceed?\n" \
158
- "Only 'yes' will be accepted.").red.bright
159
- response = STDIN.gets.strip
160
-
161
- unless response == 'yes'
162
- raise "Destroy cancelled because response was not 'yes'.\n" \
163
- "Response was: #{response}"
164
- end
165
- end
166
-
167
- invoke('pre_destroy', task, env.name, safe_invoke: true)
168
-
169
- TDK::Command.run('terraform destroy -force', directory: env.working_dir)
170
-
171
- unless env.local_backend?
172
- project_config = TDK::ProjectConfig.new(
173
- TDK::Configuration.get('project-name'),
174
- TDK::Configuration.get('project-acronym')
175
- )
176
- remote_state.destroy(env, project_config)
177
- end
178
-
179
- invoke('post_destroy', task, env.name, safe_invoke: true)
180
- end
181
-
182
- desc 'Cleans an environment (infrastructure is destroyed too)'
183
- task :clean, [:env] => :destroy do |_, args|
184
- env = TDK::Environment.new(args.env)
185
- puts "Deleting environment #{env.name} in #{env.working_dir}"
186
- TDK::ExtendedFileUtils.rm_rf(env.working_dir, secure: true)
187
- end
1
+ require 'rainbow'
2
+ require 'TerraformDevKit'
3
+
4
+ TDK = TerraformDevKit
5
+
6
+ raise 'ROOT_PATH is not defined' if defined?(ROOT_PATH).nil?
7
+ BIN_PATH = File.join(ROOT_PATH, 'bin')
8
+ CONFIG_FILE ||= File.join(ROOT_PATH, 'config', 'config-%s.yml')
9
+
10
+ # Ensure terraform is in the PATH
11
+ ENV['PATH'] = TDK::OS.join_env_path(
12
+ TDK::OS.convert_to_local_path(BIN_PATH),
13
+ ENV['PATH']
14
+ )
15
+
16
+ PLAN_FILE = 'plan.tfplan'.freeze
17
+
18
+ def destroy_if_fails(env, task)
19
+ yield
20
+ rescue Exception => e
21
+ puts "ERROR: #{e.message}"
22
+ puts e.backtrace.join("\n")
23
+ invoke('destroy', task, env.name) if env.local_backend?
24
+ raise
25
+ end
26
+
27
+ def invoke(task_name, task_context, env, safe_invoke: false)
28
+ task_in_context = task_in_current_namespace(task_name, task_context)
29
+ should_invoke = !safe_invoke || Rake::Task.task_defined?(task_in_context)
30
+ Rake::Task[task_in_context].invoke(env) if should_invoke
31
+ end
32
+
33
+ def task_in_current_namespace(task_name, current_task)
34
+ namespace = current_task.scope.path.to_s
35
+ namespace.empty? ? task_name : "#{namespace}:#{task_name}"
36
+ end
37
+
38
+ def remote_state
39
+ aws_config = TDK::Aws::AwsConfig.new(TDK::Configuration.get('aws'))
40
+ dynamo_db = TDK::Aws::DynamoDB.new(
41
+ aws_config.credentials,
42
+ aws_config.region
43
+ )
44
+ s3 = TDK::Aws::S3.new(
45
+ aws_config.credentials,
46
+ aws_config.region
47
+ )
48
+ TDK::Aws::TerraformRemoteState.new(dynamo_db, s3)
49
+ end
50
+
51
+ desc 'Prepares the environment to create the infrastructure'
52
+ task :prepare, [:env] do |_, args|
53
+ env = TDK::Environment.new(args.env)
54
+
55
+ puts "== Configuring environment #{env.name}"
56
+
57
+ config_file = CONFIG_FILE % env.config
58
+ puts "== Loading configuration from #{config_file}"
59
+ TDK::Configuration.init(config_file)
60
+
61
+ invoke('custom_prepare', task, env.name, safe_invoke: true)
62
+
63
+ TDK::TerraformInstaller.install_local(
64
+ TDK::Configuration.get('terraform-version'),
65
+ directory: BIN_PATH
66
+ )
67
+
68
+ project_config = TDK::ProjectConfig.new(
69
+ TDK::Configuration.get('project-name'),
70
+ TDK::Configuration.get('project-acronym')
71
+ )
72
+ TDK::TerraformConfigManager.setup(env, project_config)
73
+
74
+ unless env.local_backend?
75
+ puts '== Initializing remote state'
76
+ remote_state.init(env, project_config)
77
+ end
78
+
79
+ if File.exist?(File.join(env.working_dir, '.terraform'))
80
+ get_cmd = 'terraform get'
81
+ get_cmd += ' -update=true' if TDK::TerraformConfigManager.update_modules?
82
+ TDK::Command.run(get_cmd, directory: env.working_dir)
83
+ else
84
+ init_cmd = 'terraform init'
85
+ init_cmd += ' -upgrade=false' unless TDK::TerraformConfigManager.update_modules?
86
+ TDK::Command.run(init_cmd, directory: env.working_dir)
87
+ end
88
+ end
89
+
90
+ desc 'Shows the plan to create the infrastructure'
91
+ task :plan, [:env] => :prepare do |_, args|
92
+ env = TDK::Environment.new(args.env)
93
+ cmd = "terraform plan -out=#{PLAN_FILE}"
94
+ TDK::Command.run(cmd, directory: env.working_dir)
95
+ end
96
+
97
+ desc 'Creates the infrastructure'
98
+ task :apply, [:env] => :prepare do |task, args|
99
+ env = TDK::Environment.new(args.env)
100
+
101
+ invoke('plan', task, env.name)
102
+
103
+ unless env.local_backend? || allow_remote_apply?
104
+ puts Rainbow("Are you sure you want to apply the above plan?\n" \
105
+ "Only 'yes' will be accepted.").green
106
+ response = STDIN.gets.strip
107
+ unless response == 'yes'
108
+ raise "Apply cancelled because response was not 'yes'.\n" \
109
+ "Response was: #{response}"
110
+ end
111
+ end
112
+
113
+ invoke('pre_apply', task, env.name, safe_invoke: true)
114
+
115
+ destroy_if_fails(env, task) do
116
+ cmd = "terraform apply \"#{PLAN_FILE}\""
117
+ TDK::Command.run(cmd, directory: env.working_dir)
118
+ end
119
+
120
+ invoke('post_apply', task, env.name, safe_invoke: true)
121
+ end
122
+
123
+ def allow_remote_apply?
124
+ aws = TDK::Configuration.get('aws')
125
+ aws.key?('remote_apply') && aws['remote_apply']
126
+ end
127
+
128
+ desc 'Tests a local environment'
129
+ task :test, [:env] do |task, args|
130
+ env = TDK::Environment.new(args.env)
131
+ env.local_backend? || (raise 'Testing is only allowed for local environments')
132
+
133
+ invoke('apply', task, env.name)
134
+
135
+ destroy_if_fails(env, task) do
136
+ invoke('custom_test', task, env.name, safe_invoke: true)
137
+ end
138
+ end
139
+
140
+ desc 'Creates the infrastructure and runs the tests'
141
+ task :preflight, [:prefix, :teardown] do |task, args|
142
+ args.with_defaults(teardown: 'true')
143
+ args.with_defaults(prefix: TDK::Environment.temp_name)
144
+ env = TDK::Environment.new(args.prefix)
145
+
146
+ invoke('test', task, env.name)
147
+ invoke('clean', task, env.name) if args.teardown == 'true'
148
+ end
149
+
150
+ desc 'Destroys the infrastructure'
151
+ task :destroy, [:env] => :prepare do |task, args|
152
+ env = TDK::Environment.new(args.env)
153
+
154
+ unless env.local_backend?
155
+ puts Rainbow("\n\n!!!! WARNING !!!!\n\n" \
156
+ "You are about to destroy #{env.name} and its remote state.\n" \
157
+ "Are you sure you want to proceed?\n" \
158
+ "Only 'yes' will be accepted.").red.bright
159
+ response = STDIN.gets.strip
160
+
161
+ unless response == 'yes'
162
+ raise "Destroy cancelled because response was not 'yes'.\n" \
163
+ "Response was: #{response}"
164
+ end
165
+ end
166
+
167
+ invoke('pre_destroy', task, env.name, safe_invoke: true)
168
+
169
+ TDK::Command.run('terraform destroy -force', directory: env.working_dir)
170
+
171
+ unless env.local_backend?
172
+ project_config = TDK::ProjectConfig.new(
173
+ TDK::Configuration.get('project-name'),
174
+ TDK::Configuration.get('project-acronym')
175
+ )
176
+ remote_state.destroy(env, project_config)
177
+ end
178
+
179
+ invoke('post_destroy', task, env.name, safe_invoke: true)
180
+ end
181
+
182
+ desc 'Cleans an environment (infrastructure is destroyed too)'
183
+ task :clean, [:env] => :destroy do |_, args|
184
+ env = TDK::Environment.new(args.env)
185
+ puts "Deleting environment #{env.name} in #{env.working_dir}"
186
+ TDK::ExtendedFileUtils.rm_rf(env.working_dir, secure: true)
187
+ end
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.7
4
+ version: 0.3.8
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-05-03 00:00:00.000000000 Z
11
+ date: 2018-09-07 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -154,16 +154,16 @@ dependencies:
154
154
  name: rubyzip
155
155
  requirement: !ruby/object:Gem::Requirement
156
156
  requirements:
157
- - - "~>"
157
+ - - '='
158
158
  - !ruby/object:Gem::Version
159
- version: '1.2'
159
+ version: 1.2.1
160
160
  type: :runtime
161
161
  prerelease: false
162
162
  version_requirements: !ruby/object:Gem::Requirement
163
163
  requirements:
164
- - - "~>"
164
+ - - '='
165
165
  - !ruby/object:Gem::Version
166
- version: '1.2'
166
+ version: 1.2.1
167
167
  description:
168
168
  email:
169
169
  - vjimenez@vistaprint.com
@@ -231,7 +231,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
231
231
  version: '0'
232
232
  requirements: []
233
233
  rubyforge_project:
234
- rubygems_version: 2.5.2.1
234
+ rubygems_version: 2.7.3
235
235
  signing_key:
236
236
  specification_version: 4
237
237
  summary: Set of scripts to ease development and testing with Terraform.