TerraformDevKit 0.3.7 → 0.3.8

Sign up to get free protection for your applications and to get access to all the features.
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.