tfrb 0.1.0

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 (44) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +11 -0
  3. data/.rspec +3 -0
  4. data/.ruby-gemset +1 -0
  5. data/.ruby-version +1 -0
  6. data/.travis.yml +7 -0
  7. data/Gemfile +3 -0
  8. data/Gemfile.lock +57 -0
  9. data/LICENSE +202 -0
  10. data/README.md +35 -0
  11. data/Rakefile +6 -0
  12. data/bin/console +14 -0
  13. data/bin/setup +8 -0
  14. data/exe/tfrb +5 -0
  15. data/lib/tfrb/base.rb +198 -0
  16. data/lib/tfrb/block.rb +44 -0
  17. data/lib/tfrb/cli.rb +68 -0
  18. data/lib/tfrb/config.rb +15 -0
  19. data/lib/tfrb/provider/aws.rb +10 -0
  20. data/lib/tfrb/provider.rb +22 -0
  21. data/lib/tfrb/resource/aws_db_instance.rb +32 -0
  22. data/lib/tfrb/resource/aws_db_subnet_group.rb +28 -0
  23. data/lib/tfrb/resource/aws_dynamodb_table.rb +26 -0
  24. data/lib/tfrb/resource/aws_ebs_volume.rb +32 -0
  25. data/lib/tfrb/resource/aws_elasticache_replication_group.rb +30 -0
  26. data/lib/tfrb/resource/aws_elasticache_subnet_group.rb +24 -0
  27. data/lib/tfrb/resource/aws_iam_policy.rb +142 -0
  28. data/lib/tfrb/resource/aws_iam_role.rb +39 -0
  29. data/lib/tfrb/resource/aws_iam_role_policy_attachment.rb +27 -0
  30. data/lib/tfrb/resource/aws_instance.rb +46 -0
  31. data/lib/tfrb/resource/aws_kms_key.rb +26 -0
  32. data/lib/tfrb/resource/aws_s3_bucket.rb +20 -0
  33. data/lib/tfrb/resource/aws_security_group.rb +39 -0
  34. data/lib/tfrb/resource/aws_storagegateway_cache.rb +21 -0
  35. data/lib/tfrb/resource/aws_storagegateway_gateway.rb +24 -0
  36. data/lib/tfrb/resource/aws_storagegateway_nfs_file_share.rb +27 -0
  37. data/lib/tfrb/resource/aws_subnet.rb +28 -0
  38. data/lib/tfrb/resource/aws_volume_attachment.rb +30 -0
  39. data/lib/tfrb/resource/aws_vpc.rb +24 -0
  40. data/lib/tfrb/resource.rb +124 -0
  41. data/lib/tfrb/version.rb +3 -0
  42. data/lib/tfrb.rb +1 -0
  43. data/tfrb.gemspec +32 -0
  44. metadata +187 -0
data/lib/tfrb/cli.rb ADDED
@@ -0,0 +1,68 @@
1
+ require 'tfrb'
2
+ require 'tfrb/version'
3
+ require 'tfrb/config'
4
+ require 'thor'
5
+ require 'mixlib/shellout'
6
+
7
+ class Tfrb::CLI < Thor
8
+ map %w[--version -v] => :__print_version
9
+
10
+ desc '--version, -v', 'print the version'
11
+ def __print_version
12
+ puts Tfrb::VERSION
13
+ end
14
+
15
+ [:init, :plan, :apply].each do |cmd|
16
+ desc "#{cmd}", "Runs a terraform #{cmd}"
17
+ method_option :skip_import, aliases: '-s', type: :boolean, desc: 'Skip automatic terraform import', default: false
18
+ define_method(cmd) do
19
+ tfrb = load_tfrb(options[:skip_import] || [:init].include?(cmd))
20
+ tfrb.send("#{cmd}!".to_sym)
21
+ tfrb.clean! unless cmd == :init
22
+ end
23
+ end
24
+
25
+ desc 'import TYPE NAME ID', 'Runs a terraform import'
26
+ def import(resource_type, resource_name, resource_id)
27
+ tfrb = load_tfrb
28
+ tfrb.skip_import = false
29
+ tfrb.import!(resource_type, resource_name, resource_id)
30
+ tfrb.clean!
31
+ end
32
+
33
+ [:staterm, :taint].each do |cmd|
34
+ desc "#{cmd} RESOURCE", "Runs a terraform #{cmd}"
35
+ define_method(cmd) do |resource_id|
36
+ tfrb = load_tfrb
37
+ tfrb.send("#{cmd}!".to_sym, resource_id)
38
+ tfrb.clean!
39
+ end
40
+ end
41
+
42
+ desc 'unlock LOCK_ID', 'Runs a terraform unlock'
43
+ def unlock(lock_id)
44
+ tfrb = load_tfrb
45
+ tfrb.unlock!(lock_id)
46
+ tfrb.clean!
47
+ end
48
+
49
+ private
50
+
51
+ def load_tfrb(skip_import = true)
52
+ unless File.exist?('tfrb.rb')
53
+ puts 'Missing tfrb.rb file'
54
+ exit(false)
55
+ end
56
+
57
+ require File.expand_path('tfrb.rb')
58
+
59
+ unless Tfrb::Config[:files] && Tfrb::Config[:files].size > 0
60
+ puts 'No tfrb files found'
61
+ exit(false)
62
+ end
63
+
64
+ require 'tfrb/base'
65
+
66
+ Tfrb::Base.load(Tfrb::Config[:environment_name], Tfrb::Config[:files], skip_import)
67
+ end
68
+ end
@@ -0,0 +1,15 @@
1
+ module Tfrb
2
+ class Config
3
+ @@config = {}
4
+
5
+ class << self
6
+ def [](key)
7
+ @@config[key]
8
+ end
9
+
10
+ def []=(key, value)
11
+ @@config[key] = value
12
+ end
13
+ end
14
+ end
15
+ end
@@ -0,0 +1,10 @@
1
+ module Tfrb::Provider::Aws
2
+ def self.load(base, environment)
3
+ if environment.has_key?('provider') && environment['provider'].has_key?('aws')
4
+ unless environment['provider']['aws'].has_key?('access_key') || environment['provider']['aws'].has_key?('secret_key')
5
+ environment['provider']['aws']['access_key'] = ENV['AWS_ACCESS_KEY_ID']
6
+ environment['provider']['aws']['secret_key'] = ENV['AWS_SECRET_ACCESS_KEY']
7
+ end
8
+ end
9
+ end
10
+ end
@@ -0,0 +1,22 @@
1
+ module Tfrb::Provider
2
+ def self.load(tfrb)
3
+ tfrb.environments.each do |environment_name, environment|
4
+ if environment['provider']
5
+ environment['provider'].keys.each do |provider|
6
+ self.constants.each do |c|
7
+ if provider == c.to_s.gsub(/(.)([A-Z])/,'\1_\2').downcase
8
+ Kernel.const_get("Tfrb::Provider::#{c}").load(tfrb, environment)
9
+
10
+ # Inject overrides from Config
11
+ if Tfrb::Config[:overrides].has_key?('provider') && Tfrb::Config[:overrides]['provider'].has_key?(provider)
12
+ environment['provider'][provider].merge!(Tfrb::Config[:overrides]['provider'][provider])
13
+ end
14
+ end
15
+ end
16
+ end
17
+ end
18
+ end
19
+ end
20
+ end
21
+
22
+ Dir[File.join(File.dirname(__FILE__), 'provider', '*.rb')].each { |file| require_relative file }
@@ -0,0 +1,32 @@
1
+ require 'aws-sdk'
2
+
3
+ module Tfrb::Resource::AwsDbInstance
4
+ extend Tfrb::Resource
5
+
6
+ def self.preload(base, environment_name, resource_type, new_resources)
7
+ new_resources.each do |resource_name, resource|
8
+ set_default(resource, 'identifier', resource_name)
9
+ set_default(resource, 'backup_window', '07:00-08:00')
10
+ set_default(resource, 'backup_retention_period', 30)
11
+ set_default(resource, 'deletion_protection', true)
12
+ set_default(resource, 'maintenance_window', 'sat:08:00-sat:09:00')
13
+ set_default(resource, 'multi_az', false)
14
+ set_default(resource, 'publicly_accessible', false)
15
+ end
16
+ end
17
+
18
+ def self.load(base, environment_name, resource_type, new_resources)
19
+ new_resources.each do |resource_name, resource|
20
+ client = ::Aws::RDS::Client.new(aws_options(base, resource))
21
+ begin
22
+ response = client.describe_db_instances({
23
+ db_instance_identifier: resource_name
24
+ })
25
+ id = response.db_instances.first.db_instance_identifier
26
+ import!(base, resource_type, resource_name, id)
27
+ rescue ::Aws::RDS::Errors::DBInstanceNotFound
28
+ # Does not exist to import
29
+ end
30
+ end
31
+ end
32
+ end
@@ -0,0 +1,28 @@
1
+ require 'aws-sdk'
2
+
3
+ module Tfrb::Resource::AwsDbSubnetGroup
4
+ extend Tfrb::Resource
5
+
6
+ def self.preload(base, environment_name, resource_type, new_resources)
7
+ new_resources.each do |resource_name, resource|
8
+ resource['tags'] = {} unless resource.has_key?('tags')
9
+ resource['tags']['Name'] = resource_name unless resource['tags'].has_key?('Name')
10
+ set_default(resource, 'name', resource_name)
11
+ end
12
+ end
13
+
14
+ def self.load(base, environment_name, resource_type, new_resources)
15
+ new_resources.each do |resource_name, resource|
16
+ client = ::Aws::RDS::Client.new(aws_options(base, resource))
17
+ begin
18
+ response = client.describe_db_subnet_groups({
19
+ db_subnet_group_name: resource_name
20
+ })
21
+ id = response.db_subnet_groups.first.db_subnet_group_name
22
+ import!(base, resource_type, resource_name, id)
23
+ rescue ::Aws::RDS::Errors::DBSubnetGroupNotFoundFault
24
+ # Does not exist to import
25
+ end
26
+ end
27
+ end
28
+ end
@@ -0,0 +1,26 @@
1
+ require 'aws-sdk'
2
+
3
+ module Tfrb::Resource::AwsDynamodbTable
4
+ extend Tfrb::Resource
5
+
6
+ def self.preload(base, environment_name, resource_type, new_resources)
7
+ new_resources.each do |resource_name, resource|
8
+ set_default(resource, 'name', resource_name)
9
+ end
10
+ end
11
+
12
+ def self.load(base, environment_name, resource_type, new_resources)
13
+ new_resources.each do |resource_name, resource|
14
+ client = ::Aws::DynamoDB::Client.new(aws_options(base, resource))
15
+ begin
16
+ response = client.describe_table({
17
+ table_name: resource_name
18
+ })
19
+ id = response.table.table_name
20
+ import!(base, resource_type, resource_name, id)
21
+ rescue ::Aws::DynamoDB::Errors::TableNotFoundException, ::Aws::DynamoDB::Errors::ResourceNotFoundException
22
+ # Does not exist to import
23
+ end
24
+ end
25
+ end
26
+ end
@@ -0,0 +1,32 @@
1
+ require 'aws-sdk'
2
+
3
+ module Tfrb::Resource::AwsEbsVolume
4
+ extend Tfrb::Resource
5
+
6
+ def self.preload(base, environment_name, resource_type, new_resources)
7
+ new_resources.each do |resource_name, resource|
8
+ resource['tags'] = {} unless resource.has_key?('tags')
9
+ resource['tags']['Name'] = resource_name unless resource['tags'].has_key?('Name')
10
+ end
11
+ end
12
+
13
+ def self.load(base, environment_name, resource_type, new_resources)
14
+ new_resources.each do |resource_name, resource|
15
+ client = ::Aws::EC2::Client.new(aws_options(base, resource))
16
+ response = client.describe_volumes({
17
+ filters: [
18
+ {
19
+ name: "tag:Name",
20
+ values: [
21
+ resource_name,
22
+ ],
23
+ },
24
+ ],
25
+ })
26
+ if response.volumes && response.volumes.size >= 1
27
+ id = response.volumes.first.volume_id
28
+ import!(base, resource_type, resource_name, id)
29
+ end
30
+ end
31
+ end
32
+ end
@@ -0,0 +1,30 @@
1
+ require 'aws-sdk'
2
+
3
+ module Tfrb::Resource::AwsElasticacheReplicationGroup
4
+ extend Tfrb::Resource
5
+
6
+ def self.preload(base, environment_name, resource_type, new_resources)
7
+ new_resources.each do |resource_name, resource|
8
+ set_default(resource, 'snapshot_window', '07:00-08:00')
9
+ set_default(resource, 'snapshot_retention_limit', '30')
10
+ set_default(resource, 'maintenance_window', 'sat:08:00-sat:09:00')
11
+ end
12
+ end
13
+
14
+ def self.load(base, environment_name, resource_type, new_resources)
15
+ new_resources.each do |resource_name, resource|
16
+ client = ::Aws::ElastiCache::Client.new(aws_options(base, resource))
17
+ begin
18
+ response = client.describe_replication_groups({
19
+ replication_group_id: resource['replication_group_id']
20
+ })
21
+ if response.replication_groups.size >= 1
22
+ id = response.replication_groups.first.replication_group_id
23
+ import!(base, resource_type, resource_name, id)
24
+ end
25
+ rescue ::Aws::ElastiCache::Errors::ReplicationGroupNotFoundFault
26
+ # Does not exist to import
27
+ end
28
+ end
29
+ end
30
+ end
@@ -0,0 +1,24 @@
1
+ require 'aws-sdk'
2
+
3
+ module Tfrb::Resource::AwsElasticacheSubnetGroup
4
+ extend Tfrb::Resource
5
+
6
+ def self.preload(base, environment_name, resource_type, new_resources)
7
+ new_resources.each do |resource_name, resource|
8
+ set_default(resource, 'name', resource_name.gsub('_', ' '))
9
+ end
10
+ end
11
+
12
+ def self.load(base, environment_name, resource_type, new_resources)
13
+ new_resources.each do |resource_name, resource|
14
+ client = ::Aws::ElastiCache::Client.new(aws_options(base, resource))
15
+ response = client.describe_cache_subnet_groups({
16
+ cache_subnet_group_name: resource_name
17
+ })
18
+ if response.cache_subnet_groups.size >= 1
19
+ id = response.cache_subnet_groups.first.cache_subnet_group_name
20
+ import!(base, resource_type, resource_name, id)
21
+ end
22
+ end
23
+ end
24
+ end
@@ -0,0 +1,142 @@
1
+ require 'aws-sdk'
2
+
3
+ module Tfrb::Resource::AwsIamPolicy
4
+ extend Tfrb::Resource
5
+
6
+ Tfrb::Block.send(:define_method, :s3_replication_policy) do |bucket|
7
+ policy = <<-POLICY
8
+ {
9
+ "Version": "2012-10-17",
10
+ "Statement": [
11
+ {
12
+ "Effect": "Allow",
13
+ "Action": [
14
+ "s3:ListAllMyBuckets"
15
+ ],
16
+ "Resource": "arn:aws:s3:::*"
17
+ },
18
+ {
19
+ "Effect": "Allow",
20
+ "Action": [
21
+ "s3:ListBucket",
22
+ "s3:GetBucketLocation"
23
+ ],
24
+ "Resource": [
25
+ "arn:aws:s3:::#{bucket}"
26
+ ]
27
+ },
28
+ {
29
+ "Effect": "Allow",
30
+ "Action": [
31
+ "s3:PutObject",
32
+ "s3:PutObjectAcl",
33
+ "s3:GetObject",
34
+ "s3:GetObjectAcl",
35
+ "s3:DeleteObject"
36
+ ],
37
+ "Resource": [
38
+ "arn:aws:s3:::#{bucket}/*"
39
+ ]
40
+ }
41
+ ]
42
+ }
43
+ POLICY
44
+ policy
45
+ end
46
+
47
+ Tfrb::Block.send(:define_method, :s3_replication_policy) do |source_bucket, destination_bucket|
48
+ policy = <<-POLICY
49
+ {
50
+ "Version": "2012-10-17",
51
+ "Statement": [
52
+ {
53
+ "Action": [
54
+ "s3:GetReplicationConfiguration",
55
+ "s3:ListBucket"
56
+ ],
57
+ "Effect": "Allow",
58
+ "Resource": [
59
+ "arn:aws:s3:::#{source_bucket}"
60
+ ]
61
+ },
62
+ {
63
+ "Action": [
64
+ "s3:GetObjectVersion",
65
+ "s3:GetObjectVersionAcl"
66
+ ],
67
+ "Effect": "Allow",
68
+ "Resource": [
69
+ "arn:aws:s3:::#{source_bucket}/*"
70
+ ]
71
+ },
72
+ {
73
+ "Action": [
74
+ "s3:ReplicateObject",
75
+ "s3:ReplicateDelete"
76
+ ],
77
+ "Effect": "Allow",
78
+ "Resource": "arn:aws:s3:::#{destination_bucket}/*"
79
+ }
80
+ ]
81
+ }
82
+ POLICY
83
+ policy
84
+ end
85
+
86
+ Tfrb::Block.send(:define_method, :sgw_bucket_access_policy) do |bucket|
87
+ policy = <<-POLICY
88
+ {
89
+ "Version": "2012-10-17",
90
+ "Statement": [
91
+ {
92
+ "Action": [
93
+ "s3:GetAccelerateConfiguration",
94
+ "s3:GetBucketLocation",
95
+ "s3:GetBucketVersioning",
96
+ "s3:ListBucket",
97
+ "s3:ListBucketVersions",
98
+ "s3:ListBucketMultipartUploads"
99
+ ],
100
+ "Resource": "arn:aws:s3:::#{bucket}",
101
+ "Effect": "Allow"
102
+ },
103
+ {
104
+ "Action": [
105
+ "s3:AbortMultipartUpload",
106
+ "s3:DeleteObject",
107
+ "s3:DeleteObjectVersion",
108
+ "s3:GetObject",
109
+ "s3:GetObjectAcl",
110
+ "s3:GetObjectVersion",
111
+ "s3:ListMultipartUploadParts",
112
+ "s3:PutObject",
113
+ "s3:PutObjectAcl"
114
+ ],
115
+ "Resource": "arn:aws:s3:::#{bucket}/*",
116
+ "Effect": "Allow"
117
+ }
118
+ ]
119
+ }
120
+ POLICY
121
+ policy
122
+ end
123
+
124
+ def self.load(base, environment_name, resource_type, new_resources)
125
+ new_resources.each do |resource_name, resource|
126
+ client = ::Aws::IAM::Client.new(aws_options(base, resource))
127
+ begin
128
+ response = client.list_policies({
129
+ scope: 'Local',
130
+ path_prefix: '/',
131
+ max_items: 1000
132
+ })
133
+ if policy = response.policies.find { |p| p.arn =~ /policy\/#{resource_name}$/ }
134
+ id = policy.arn
135
+ import!(base, resource_type, resource_name, id)
136
+ end
137
+ rescue ::Aws::IAM::Errors::NoSuchEntity
138
+ # Does not exist to import
139
+ end
140
+ end
141
+ end
142
+ end
@@ -0,0 +1,39 @@
1
+ require 'aws-sdk'
2
+
3
+ module Tfrb::Resource::AwsIamRole
4
+ extend Tfrb::Resource
5
+
6
+ Tfrb::Block.send(:define_method, :sts_assume_role) do |service|
7
+ role = <<-ROLE
8
+ {
9
+ "Version": "2012-10-17",
10
+ "Statement": [
11
+ {
12
+ "Sid": "",
13
+ "Effect": "Allow",
14
+ "Principal": {
15
+ "Service": "#{service}.amazonaws.com"
16
+ },
17
+ "Action": "sts:AssumeRole"
18
+ }
19
+ ]
20
+ }
21
+ ROLE
22
+ role
23
+ end
24
+
25
+ def self.load(base, environment_name, resource_type, new_resources)
26
+ new_resources.each do |resource_name, resource|
27
+ client = ::Aws::IAM::Client.new(aws_options(base, resource))
28
+ begin
29
+ response = client.get_role({
30
+ role_name: resource['name']
31
+ })
32
+ id = response.role.role_name
33
+ import!(base, resource_type, resource_name, id)
34
+ rescue ::Aws::IAM::Errors::NoSuchEntity
35
+ # Does not exist to import
36
+ end
37
+ end
38
+ end
39
+ end
@@ -0,0 +1,27 @@
1
+ require 'aws-sdk'
2
+
3
+ module Tfrb::Resource::AwsIamRolePolicyAttachment
4
+ extend Tfrb::Resource
5
+
6
+ def self.load(base, environment_name, resource_type, new_resources)
7
+ new_resources.each do |resource_name, resource|
8
+ client = ::Aws::IAM::Client.new(aws_options(base, resource))
9
+ role_name = resolve_tfvar(base, resource_type, resource_name, 'role')
10
+ next if role_name.empty?
11
+ begin
12
+ response = client.list_attached_role_policies({
13
+ role_name: role_name
14
+ })
15
+ if response.attached_policies
16
+ response.attached_policies.each do |attached_policy|
17
+ next unless attached_policy.policy_arn == resolve_tfvar(base, resource_type, resource_name, 'policy_arn')
18
+ id = "#{role_name}/#{attached_policy.policy_arn}"
19
+ import!(base, resource_type, resource_name, id)
20
+ end
21
+ end
22
+ rescue ::Aws::IAM::Errors::NoSuchEntity, NoMethodError
23
+ # Does not exist to import
24
+ end
25
+ end
26
+ end
27
+ end
@@ -0,0 +1,46 @@
1
+ require 'aws-sdk'
2
+
3
+ module Tfrb::Resource::AwsInstance
4
+ extend Tfrb::Resource
5
+
6
+ def self.preload(base, environment_name, resource_type, new_resources)
7
+ new_resources.each do |resource_name, resource|
8
+ resource['tags'] = {} unless resource.has_key?('tags')
9
+ resource['tags']['Name'] = resource_name unless resource['tags'].has_key?('Name')
10
+ resource['root_block_device'] = {} unless resource.has_key?('root_block_device')
11
+ resource['root_block_device']['volume_type'] = 'gp2' unless resource['root_block_device'].has_key?('volume_type')
12
+ resource['root_block_device']['volume_size'] = 8 unless resource['root_block_device'].has_key?('volume_size')
13
+ end
14
+ end
15
+
16
+ def self.load(base, environment_name, resource_type, new_resources)
17
+ new_resources.each do |resource_name, resource|
18
+ client = ::Aws::EC2::Client.new(aws_options(base, resource))
19
+ response = client.describe_instances({
20
+ filters: [
21
+ {
22
+ name: 'tag:Name',
23
+ values: [
24
+ resource_name,
25
+ ],
26
+ },
27
+ {
28
+ name: 'instance-state-name',
29
+ values: [
30
+ 'pending',
31
+ 'running',
32
+ 'stopping',
33
+ 'stopped'
34
+ ],
35
+ },
36
+ ],
37
+ })
38
+ if response.reservations && response.reservations.size >= 1
39
+ if response.reservations.first.instances && response.reservations.first.instances.size >= 1
40
+ id = response.reservations.first.instances.first.instance_id
41
+ import!(base, resource_type, resource_name, id)
42
+ end
43
+ end
44
+ end
45
+ end
46
+ end
@@ -0,0 +1,26 @@
1
+ require 'aws-sdk'
2
+
3
+ module Tfrb::Resource::AwsKmsKey
4
+ extend Tfrb::Resource
5
+
6
+ def self.preload(base, environment_name, resource_type, new_resources)
7
+ new_resources.each do |resource_name, resource|
8
+ set_default(resource, 'enable_key_rotation', true)
9
+ end
10
+ end
11
+
12
+ def self.load(base, environment_name, resource_type, new_resources)
13
+ new_resources.each do |resource_name, resource|
14
+ client = ::Aws::KMS::Client.new(aws_options(base, resource))
15
+ begin
16
+ response = client.describe_key({
17
+ key_id: "alias/#{resource_name}"
18
+ })
19
+ id = response.key_metadata.key_id
20
+ import!(base, resource_type, resource_name, id)
21
+ rescue ::Aws::KMS::Errors::NotFoundException
22
+ # Does not exist to import
23
+ end
24
+ end
25
+ end
26
+ end
@@ -0,0 +1,20 @@
1
+ require 'aws-sdk'
2
+
3
+ module Tfrb::Resource::AwsS3Bucket
4
+ extend Tfrb::Resource
5
+
6
+ def self.load(base, environment_name, resource_type, new_resources)
7
+ new_resources.each do |resource_name, resource|
8
+ client = ::Aws::S3::Client.new(aws_options(base, resource))
9
+ begin
10
+ response = client.head_bucket({
11
+ bucket: resource['bucket']
12
+ })
13
+ id = resource['bucket']
14
+ import!(base, resource_type, resource_name, id)
15
+ rescue ::Aws::S3::Errors::NoSuchBucket, ::Aws::S3::Errors::NotFound
16
+ # Does not exist to import
17
+ end
18
+ end
19
+ end
20
+ end
@@ -0,0 +1,39 @@
1
+ require 'aws-sdk'
2
+
3
+ module Tfrb::Resource::AwsSecurityGroup
4
+ extend Tfrb::Resource
5
+
6
+ def self.preload(base, environment_name, resource_type, new_resources)
7
+ new_resources.each do |resource_name, resource|
8
+ set_default(resource, 'name', resource_name.gsub('_', ' '))
9
+ resource['lifecycle'] = {} unless resource.has_key?('lifecycle')
10
+ resource['lifecycle']['create_before_destroy'] = true unless resource['lifecycle'].has_key?('create_before_destroy')
11
+ resource['tags'] = {} unless resource.has_key?('tags')
12
+ resource['tags']['Name'] = resource_name.gsub('_', ' ') unless resource['tags'].has_key?('Name')
13
+ end
14
+ end
15
+
16
+ def self.load(base, environment_name, resource_type, new_resources)
17
+ new_resources.each do |resource_name, resource|
18
+ client = ::Aws::EC2::Client.new(aws_options(base, resource))
19
+ vpc_id = resolve_tfvar(base, resource_type, resource_name, 'vpc_id')
20
+ next if vpc_id.empty?
21
+ response = client.describe_security_groups({
22
+ filters: [
23
+ {
24
+ name: 'vpc-id',
25
+ values: [vpc_id]
26
+ },
27
+ {
28
+ name: 'group-name',
29
+ values: [resource['name']]
30
+ }
31
+ ]
32
+ })
33
+ if response.security_groups.size >= 1
34
+ id = response.security_groups.first.group_id
35
+ import!(base, resource_type, resource_name, id)
36
+ end
37
+ end
38
+ end
39
+ end
@@ -0,0 +1,21 @@
1
+ require 'aws-sdk'
2
+
3
+ module Tfrb::Resource::AwsStoragegatewayCache
4
+ extend Tfrb::Resource
5
+
6
+ def self.load(base, environment_name, resource_type, new_resources)
7
+ new_resources.each do |resource_name, resource|
8
+ client = ::Aws::StorageGateway::Client.new(aws_options(base, resource))
9
+ disk_id = resolve_tfvar(base, resource_type, resource_name, 'disk_id')
10
+ gateway_arn = resolve_tfvar(base, resource_type, resource_name, 'gateway_arn')
11
+ next if disk_id.empty? || gateway_arn.empty?
12
+ response = client.describe_cache({
13
+ gateway_arn: gateway_arn
14
+ })
15
+ if response.disk_ids && response.disk_ids.include?(disk_id)
16
+ id = "#{gateway_arn}:#{disk_id}"
17
+ import!(base, resource_type, resource_name, id)
18
+ end
19
+ end
20
+ end
21
+ end