TerraformDevKit 0.2.7 → 0.3.1.pre.rc1

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: 7670b9014d091bfa76b33918447c49e5b1bc35b4
4
- data.tar.gz: 674548302e91878a01cf8d45fed5fa09e4e2587f
3
+ metadata.gz: 61324a6263f32fec652b3c6daea0cd8ee4122fdd
4
+ data.tar.gz: 110251680246f79e70f9852c6daf7ac544f0a459
5
5
  SHA512:
6
- metadata.gz: f9e17fff69052fd24a31d2864634a819ec0785df1678bb2e561edeef01475651eaf1365985bbff7603a72d1f46540b76d1aa25e2e9b62b8bde2964a32f3f3ddb
7
- data.tar.gz: 11458936dde76c2f88e2cf2878dee89498c8884b467eddc5defeefd7f082504e633d78482f517fdce26c98b6a05af88f1181015745a62c936588e95c6e210811
6
+ metadata.gz: 2479eee7bea5199c2a23f6ce00b34e635ccee5d1ae93c1701af70322158883088def53933d4ab5f41c61502499969d48e48359b150f592649d23c68365300b64
7
+ data.tar.gz: ce79833600dc8e75b7f67d4e2bf283669287c5db096ba9ce123f37d0444ad3c02e861796095b00d6cb058c9c7e6468e7cc7b4b7f9c9498c5499ab92df2f48f4d
@@ -28,6 +28,7 @@ Gem::Specification.new do |spec|
28
28
 
29
29
  spec.add_runtime_dependency 'aws-sdk-core', '~> 3'
30
30
  spec.add_runtime_dependency 'aws-sdk-dynamodb', '~> 1'
31
+ spec.add_runtime_dependency 'aws-sdk-cloudfront', '~> 1'
31
32
  spec.add_runtime_dependency 'aws-sdk-s3', '~> 1'
32
33
  spec.add_runtime_dependency 'mustache', '~> 1.0'
33
34
  spec.add_runtime_dependency 'rainbow', '~> 3.0'
@@ -0,0 +1,65 @@
1
+ require 'aws-sdk-core'
2
+
3
+ Aws.use_bundled_cert!
4
+
5
+ module TerraformDevKit
6
+ module Aws
7
+ class AwsConfig
8
+ def initialize(config)
9
+ unless config.nil?
10
+ @profile = config.fetch('profile', nil)
11
+ @region = config.fetch('region', nil)
12
+ @access_key_id = config.fetch('access_key_id', nil)
13
+ @secret_access_key = config.fetch('secret_access_key', nil)
14
+ end
15
+ end
16
+
17
+ def credentials
18
+ unless profile.nil?
19
+ credentials = ::Aws::SharedCredentials.new(profile_name: profile)
20
+ return credentials if credentials.set?
21
+ end
22
+
23
+ return ::Aws::Credentials.new(*access_keys) if access_keys_available?
24
+
25
+ raise 'Cannot find AWS credentials'
26
+ end
27
+
28
+ def region
29
+ @region || ENV['AWS_REGION']
30
+ end
31
+
32
+ def profile
33
+ @profile || ENV['AWS_PROFILE']
34
+ end
35
+
36
+ private
37
+
38
+ def access_keys
39
+ return config_access_keys if config_has_access_keys?
40
+ return environment_access_keys if environment_has_access_keys?
41
+ nil
42
+ end
43
+
44
+ def access_keys_available?
45
+ config_has_access_keys? || environment_has_access_keys?
46
+ end
47
+
48
+ def config_has_access_keys?
49
+ !@access_key_id.nil? && !@secret_access_key.nil?
50
+ end
51
+
52
+ def config_access_keys
53
+ return @access_key_id, @secret_access_key
54
+ end
55
+
56
+ def environment_has_access_keys?
57
+ ENV.key?('AWS_ACCESS_KEY_ID') && ENV.key?('AWS_SECRET_ACCESS_KEY')
58
+ end
59
+
60
+ def environment_access_keys
61
+ return ENV['AWS_ACCESS_KEY_ID'], ENV['AWS_SECRET_ACCESS_KEY']
62
+ end
63
+ end
64
+ end
65
+ end
@@ -0,0 +1,20 @@
1
+ require 'aws-sdk-cloudfront'
2
+
3
+ module TerraformDevKit
4
+ module Aws
5
+ class CloudFront
6
+ def initialize(credentials, region)
7
+ @cloudfront = ::Aws::CloudFront::Client.new(
8
+ region: region,
9
+ credentials:credentials
10
+ )
11
+ end
12
+
13
+ def distribution_is_deployed?(distribution_id)
14
+ @cloudfront.get_distribution({
15
+ id: distribution_id,
16
+ }).distribution.status == 'Deployed'
17
+ end
18
+ end
19
+ end
20
+ end
@@ -0,0 +1,46 @@
1
+ require 'aws-sdk-dynamodb'
2
+
3
+ Aws.use_bundled_cert!
4
+
5
+ module TerraformDevKit
6
+ module Aws
7
+ # Wrapper class around aws dynamodb
8
+ class DynamoDB
9
+ def initialize(credentials, region)
10
+ @db_client = ::Aws::DynamoDB::Client.new(
11
+ credentials: credentials,
12
+ region: region
13
+ )
14
+ end
15
+
16
+ def put_item(table_name, item)
17
+ @db_client.put_item({item: item, table_name: table_name})
18
+ end
19
+
20
+ def create_table(table_name, attributes, keys, read_capacity, write_capacity)
21
+ @db_client.create_table(
22
+ attribute_definitions: attributes,
23
+ key_schema: keys,
24
+ provisioned_throughput: {
25
+ read_capacity_units: read_capacity,
26
+ write_capacity_units: write_capacity
27
+ },
28
+ table_name: table_name
29
+ )
30
+ end
31
+
32
+ def get_table_status(table_name)
33
+ resp = @db_client.describe_table({
34
+ table_name: table_name,
35
+ })
36
+ resp.table.table_status
37
+ end
38
+
39
+ def delete_table(table_name)
40
+ @db_client.delete_table({
41
+ table_name: table_name,
42
+ })
43
+ end
44
+ end
45
+ end
46
+ end
@@ -0,0 +1,44 @@
1
+ require 'aws-sdk-s3'
2
+
3
+ Aws.use_bundled_cert!
4
+
5
+ module TerraformDevKit
6
+ module Aws
7
+ class S3
8
+ def initialize(credentials, region)
9
+ @s3_client = ::Aws::S3::Client.new(
10
+ credentials: credentials,
11
+ region: region
12
+ )
13
+ end
14
+
15
+ def create_bucket(bucket_name)
16
+ @s3_client.create_bucket(
17
+ bucket: bucket_name
18
+ )
19
+ end
20
+
21
+ def delete_bucket(bucket_name)
22
+ empty_bucket(bucket_name)
23
+
24
+ @s3_client.delete_bucket(
25
+ bucket: bucket_name
26
+ )
27
+ end
28
+
29
+ def empty_bucket(bucket_name)
30
+ keys_to_delete = @s3_client
31
+ .list_objects_v2(bucket: bucket_name)
32
+ .contents
33
+ .map { |x| { key: x.key } }
34
+
35
+ @s3_client.delete_objects(
36
+ bucket: bucket_name,
37
+ delete: {
38
+ objects: keys_to_delete
39
+ }
40
+ )
41
+ end
42
+ end
43
+ end
44
+ end
@@ -0,0 +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,3 +1,3 @@
1
1
  module TerraformDevKit
2
- VERSION = '0.2.7'.freeze
2
+ VERSION = '0.3.1-rc1'.freeze
3
3
  end
@@ -1,18 +1,19 @@
1
- require 'TerraformDevKit/aws'
1
+ require 'TerraformDevKit/aws/aws'
2
+ require 'TerraformDevKit/aws/cloudfront'
3
+ require 'TerraformDevKit/aws/dynamodb'
4
+ require 'TerraformDevKit/aws/terraform_remote_state'
5
+ require 'TerraformDevKit/aws/s3'
2
6
  require 'TerraformDevKit/backup_state'
3
7
  require 'TerraformDevKit/command'
4
8
  require 'TerraformDevKit/config'
5
- require 'TerraformDevKit/dynamodb'
6
9
  require 'TerraformDevKit/environment'
7
10
  require 'TerraformDevKit/extended_file_utils'
8
11
  require 'TerraformDevKit/os'
9
12
  require 'TerraformDevKit/request'
10
13
  require 'TerraformDevKit/retry'
11
- require 'TerraformDevKit/s3'
12
14
  require 'TerraformDevKit/terraform_config_manager'
13
15
  require 'TerraformDevKit/terraform_env_manager'
14
16
  require 'TerraformDevKit/terraform_installer'
15
- require 'TerraformDevKit/terraform_remote_state'
16
17
  require 'TerraformDevKit/terraform_log_filter'
17
18
  require 'TerraformDevKit/terraform_project_config'
18
19
  require 'TerraformDevKit/terraform_template_config_file'
data/tasks/devkit.rake CHANGED
@@ -40,16 +40,16 @@ def task_in_current_namespace(task_name, current_task)
40
40
  end
41
41
 
42
42
  def remote_state
43
- aws_config = TDK::AwsConfig.new(TDK::Configuration.get('aws'))
44
- dynamo_db = TDK::DynamoDB.new(
43
+ aws_config = TDK::Aws::AwsConfig.new(TDK::Configuration.get('aws'))
44
+ dynamo_db = TDK::Aws::DynamoDB.new(
45
45
  aws_config.credentials,
46
46
  aws_config.region
47
47
  )
48
- s3 = TDK::S3.new(
48
+ s3 = TDK::Aws::S3.new(
49
49
  aws_config.credentials,
50
50
  aws_config.region
51
51
  )
52
- TDK::TerraformRemoteState.new(dynamo_db, s3)
52
+ TDK::Aws::TerraformRemoteState.new(dynamo_db, s3)
53
53
  end
54
54
 
55
55
  desc 'Prepares the environment to create the infrastructure'
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.2.7
4
+ version: 0.3.1.pre.rc1
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-01-10 00:00:00.000000000 Z
11
+ date: 2018-01-23 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -94,6 +94,20 @@ dependencies:
94
94
  - - "~>"
95
95
  - !ruby/object:Gem::Version
96
96
  version: '1'
97
+ - !ruby/object:Gem::Dependency
98
+ name: aws-sdk-cloudfront
99
+ requirement: !ruby/object:Gem::Requirement
100
+ requirements:
101
+ - - "~>"
102
+ - !ruby/object:Gem::Version
103
+ version: '1'
104
+ type: :runtime
105
+ prerelease: false
106
+ version_requirements: !ruby/object:Gem::Requirement
107
+ requirements:
108
+ - - "~>"
109
+ - !ruby/object:Gem::Version
110
+ version: '1'
97
111
  - !ruby/object:Gem::Dependency
98
112
  name: aws-sdk-s3
99
113
  requirement: !ruby/object:Gem::Requirement
@@ -171,24 +185,25 @@ files:
171
185
  - bin/setup
172
186
  - exe/wait_for_url
173
187
  - lib/TerraformDevKit.rb
174
- - lib/TerraformDevKit/aws.rb
188
+ - lib/TerraformDevKit/aws/aws.rb
189
+ - lib/TerraformDevKit/aws/cloudfront.rb
190
+ - lib/TerraformDevKit/aws/dynamodb.rb
191
+ - lib/TerraformDevKit/aws/s3.rb
192
+ - lib/TerraformDevKit/aws/terraform_remote_state.rb
175
193
  - lib/TerraformDevKit/backup_state.rb
176
194
  - lib/TerraformDevKit/command.rb
177
195
  - lib/TerraformDevKit/config.rb
178
196
  - lib/TerraformDevKit/download.rb
179
- - lib/TerraformDevKit/dynamodb.rb
180
197
  - lib/TerraformDevKit/environment.rb
181
198
  - lib/TerraformDevKit/extended_file_utils.rb
182
199
  - lib/TerraformDevKit/os.rb
183
200
  - lib/TerraformDevKit/request.rb
184
201
  - lib/TerraformDevKit/retry.rb
185
- - lib/TerraformDevKit/s3.rb
186
202
  - lib/TerraformDevKit/terraform_config_manager.rb
187
203
  - lib/TerraformDevKit/terraform_env_manager.rb
188
204
  - lib/TerraformDevKit/terraform_installer.rb
189
205
  - lib/TerraformDevKit/terraform_log_filter.rb
190
206
  - lib/TerraformDevKit/terraform_project_config.rb
191
- - lib/TerraformDevKit/terraform_remote_state.rb
192
207
  - lib/TerraformDevKit/terraform_template_config_file.rb
193
208
  - lib/TerraformDevKit/url.rb
194
209
  - lib/TerraformDevKit/version.rb
@@ -209,9 +224,9 @@ required_ruby_version: !ruby/object:Gem::Requirement
209
224
  version: '0'
210
225
  required_rubygems_version: !ruby/object:Gem::Requirement
211
226
  requirements:
212
- - - ">="
227
+ - - ">"
213
228
  - !ruby/object:Gem::Version
214
- version: '0'
229
+ version: 1.3.1
215
230
  requirements: []
216
231
  rubyforge_project:
217
232
  rubygems_version: 2.6.13
@@ -1,63 +0,0 @@
1
- require 'aws-sdk-core'
2
-
3
- Aws.use_bundled_cert!
4
-
5
- module TerraformDevKit
6
- class AwsConfig
7
- def initialize(config)
8
- unless config.nil?
9
- @profile = config.fetch('profile', nil)
10
- @region = config.fetch('region', nil)
11
- @access_key_id = config.fetch('access_key_id', nil)
12
- @secret_access_key = config.fetch('secret_access_key', nil)
13
- end
14
- end
15
-
16
- def credentials
17
- unless profile.nil?
18
- credentials = Aws::SharedCredentials.new(profile_name: profile)
19
- return credentials if credentials.set?
20
- end
21
-
22
- return Aws::Credentials.new(*access_keys) if access_keys_available?
23
-
24
- raise 'Cannot find AWS credentials'
25
- end
26
-
27
- def region
28
- @region || ENV['AWS_REGION']
29
- end
30
-
31
- def profile
32
- @profile || ENV['AWS_PROFILE']
33
- end
34
-
35
- private
36
-
37
- def access_keys
38
- return config_access_keys if config_has_access_keys?
39
- return environment_access_keys if environment_has_access_keys?
40
- nil
41
- end
42
-
43
- def access_keys_available?
44
- config_has_access_keys? || environment_has_access_keys?
45
- end
46
-
47
- def config_has_access_keys?
48
- !@access_key_id.nil? && !@secret_access_key.nil?
49
- end
50
-
51
- def config_access_keys
52
- return @access_key_id, @secret_access_key
53
- end
54
-
55
- def environment_has_access_keys?
56
- ENV.key?('AWS_ACCESS_KEY_ID') && ENV.key?('AWS_SECRET_ACCESS_KEY')
57
- end
58
-
59
- def environment_access_keys
60
- return ENV['AWS_ACCESS_KEY_ID'], ENV['AWS_SECRET_ACCESS_KEY']
61
- end
62
- end
63
- end
@@ -1,45 +0,0 @@
1
- require 'aws-sdk-dynamodb'
2
-
3
- Aws.use_bundled_cert!
4
-
5
- module TerraformDevKit
6
- # Wrapper class around aws dynamodb
7
- class DynamoDB
8
- def initialize(credentials, region)
9
- @db_client = Aws::DynamoDB::Client.new(
10
- credentials: credentials,
11
- region: region
12
- )
13
- end
14
-
15
- def put_item(table_name, item)
16
- @db_client.put_item({item: item, table_name: table_name})
17
- end
18
-
19
- def create_table(table_name, attributes, keys, read_capacity, write_capacity)
20
- @db_client.create_table(
21
- attribute_definitions: attributes,
22
- key_schema: keys,
23
- provisioned_throughput: {
24
- read_capacity_units: read_capacity,
25
- write_capacity_units: write_capacity
26
- },
27
- table_name: table_name
28
- )
29
- end
30
-
31
- def get_table_status(table_name)
32
- resp = @db_client.describe_table({
33
- table_name: table_name,
34
- })
35
- resp.table.table_status
36
- end
37
-
38
- def delete_table(table_name)
39
- @db_client.delete_table({
40
- table_name: table_name,
41
- })
42
- end
43
-
44
- end
45
- end
@@ -1,43 +0,0 @@
1
- require 'aws-sdk-s3'
2
-
3
- Aws.use_bundled_cert!
4
-
5
- module TerraformDevKit
6
- # Wrapper class around aws s3
7
- class S3
8
- def initialize(credentials, region)
9
- @s3_client = Aws::S3::Client.new(
10
- credentials: credentials,
11
- region: region
12
- )
13
- end
14
-
15
- def create_bucket(bucket_name)
16
- @s3_client.create_bucket(
17
- bucket: bucket_name
18
- )
19
- end
20
-
21
- def delete_bucket(bucket_name)
22
- empty_bucket(bucket_name)
23
-
24
- @s3_client.delete_bucket(
25
- bucket: bucket_name
26
- )
27
- end
28
-
29
- def empty_bucket(bucket_name)
30
- keys_to_delete = @s3_client
31
- .list_objects_v2(bucket: bucket_name)
32
- .contents
33
- .map { |x| { key: x.key } }
34
-
35
- @s3_client.delete_objects(
36
- bucket: bucket_name,
37
- delete: {
38
- objects: keys_to_delete
39
- }
40
- )
41
- end
42
- end
43
- end
@@ -1,66 +0,0 @@
1
- require 'aws-sdk-dynamodb'
2
- require 'aws-sdk-s3'
3
-
4
- module TerraformDevKit
5
- # Represents a terraform lock table.
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