fog-aws 0.12.0 → 0.13.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 (47) hide show
  1. checksums.yaml +4 -4
  2. data/.travis.yml +2 -0
  3. data/CHANGELOG.md +29 -1
  4. data/Gemfile +6 -2
  5. data/gemfiles/Gemfile-edge +1 -1
  6. data/lib/fog/aws.rb +3 -1
  7. data/lib/fog/aws/efs.rb +177 -0
  8. data/lib/fog/aws/models/auto_scaling/group.rb +2 -0
  9. data/lib/fog/aws/models/compute/image.rb +2 -0
  10. data/lib/fog/aws/models/compute/images.rb +3 -1
  11. data/lib/fog/aws/models/compute/vpc.rb +4 -0
  12. data/lib/fog/aws/models/efs/file_system.rb +42 -0
  13. data/lib/fog/aws/models/efs/file_systems.rb +23 -0
  14. data/lib/fog/aws/models/efs/mount_target.rb +59 -0
  15. data/lib/fog/aws/models/efs/mount_targets.rb +25 -0
  16. data/lib/fog/aws/parsers/auto_scaling/describe_auto_scaling_groups.rb +8 -0
  17. data/lib/fog/aws/parsers/cloud_formation/describe_change_set.rb +1 -1
  18. data/lib/fog/aws/parsers/compute/describe_images.rb +3 -1
  19. data/lib/fog/aws/parsers/rds/modify_db_subnet_group.rb +24 -0
  20. data/lib/fog/aws/rds.rb +1 -1
  21. data/lib/fog/aws/requests/auto_scaling/create_auto_scaling_group.rb +1 -0
  22. data/lib/fog/aws/requests/auto_scaling/put_scaling_policy.rb +1 -1
  23. data/lib/fog/aws/requests/cloud_formation/create_change_set.rb +5 -0
  24. data/lib/fog/aws/requests/compute/describe_availability_zones.rb +4 -0
  25. data/lib/fog/aws/requests/compute/describe_images.rb +2 -0
  26. data/lib/fog/aws/requests/efs/create_file_system.rb +51 -0
  27. data/lib/fog/aws/requests/efs/create_mount_target.rb +69 -0
  28. data/lib/fog/aws/requests/efs/delete_file_system.rb +41 -0
  29. data/lib/fog/aws/requests/efs/delete_mount_target.rb +38 -0
  30. data/lib/fog/aws/requests/efs/describe_file_systems.rb +62 -0
  31. data/lib/fog/aws/requests/efs/describe_mount_target_security_groups.rb +34 -0
  32. data/lib/fog/aws/requests/efs/describe_mount_targets.rb +61 -0
  33. data/lib/fog/aws/requests/efs/modify_mount_target_security_groups.rb +39 -0
  34. data/lib/fog/aws/requests/rds/modify_db_subnet_group.rb +27 -0
  35. data/lib/fog/aws/requests/storage/delete_multiple_objects.rb +1 -1
  36. data/lib/fog/aws/requests/sts/assume_role.rb +25 -0
  37. data/lib/fog/aws/version.rb +1 -1
  38. data/tests/helper.rb +3 -2
  39. data/tests/models/efs/file_system_tests.rb +12 -0
  40. data/tests/models/efs/mount_target_tests.rb +43 -0
  41. data/tests/models/efs/mount_targets_tests.rb +30 -0
  42. data/tests/requests/auto_scaling/helper.rb +1 -0
  43. data/tests/requests/compute/image_tests.rb +3 -1
  44. data/tests/requests/efs/file_system_tests.rb +152 -0
  45. data/tests/requests/efs/helper.rb +42 -0
  46. data/tests/requests/storage/object_tests.rb +4 -0
  47. metadata +23 -2
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 2cad9d793cac288d1f03fc73d7d531608f269b4c
4
- data.tar.gz: 2dafa327b192217ba04f4a20b4adf7cddaa09be3
3
+ metadata.gz: badc87e616be93da06befa9fd46e268c422729db
4
+ data.tar.gz: 35e964f02dbd63c4b6911fca95bf53e72fffa4b1
5
5
  SHA512:
6
- metadata.gz: 5aa5e8a00c298e743959011f936c5a4b6d8640c30501aaeb5e2593cb9ff6e69ca7cd5c6f9a3b35e247b382099d0ceabb5b21270a39364a265e1a1a84f769853d
7
- data.tar.gz: 87e376f15aa50548604c98047f491ce81698c0807cb04993d343f4f7cb17a481893d8a9d0d81a99109c537665b4b8bbb9f0054d7d7bef4162b272ca9307eaa7f
6
+ metadata.gz: a6ca15f2dcb849b4f9a1bdf89fe9c22b9b69c5e8f916223f75158cf70adab53bbe70d3bff1b782823d022173b56e5a4b94cf3dfadc1d1815b52625406ba9ea5b
7
+ data.tar.gz: 87078c05b1e205f2230cb37b60cc65c57db0b694969bb88bb757d5b5c0127f77f900e79cf035ce392632843d49b11dfaf81fae8a3ba1b93f068d09bc89f8a178
@@ -50,3 +50,5 @@ notifications:
50
50
  env:
51
51
  global:
52
52
  secure: LlDKdKSRo3sEjQ55XesbOXhKZ3RrOtqoD1ZL8Wx39K3iVzeEV3Kc8HjDfEvo7R4pOc3BMTNJcputklVEPN0FkWGN7Py+OEtbHj3IZl0MX+KEWNk0gU+4+sgPrL1eXUQyMUSkCrBsKg08rPel4KMYUOXbtnLyUU9PDbBwm4LJYOc=
53
+ after_success:
54
+ - bundle exec codeclimate-test-reporter
@@ -2,7 +2,35 @@
2
2
 
3
3
  ## [Unreleased](https://github.com/fog/fog-aws/tree/HEAD)
4
4
 
5
- [Full Changelog](https://github.com/fog/fog-aws/compare/v0.11.0...HEAD)
5
+ [Full Changelog](https://github.com/fog/fog-aws/compare/v0.12.0...HEAD)
6
+
7
+ **Closed issues:**
8
+
9
+ - Fog::Compute::AWS::Image not properly loaded [\#324](https://github.com/fog/fog-aws/issues/324)
10
+ - Add creation\_date field for aws images [\#320](https://github.com/fog/fog-aws/issues/320)
11
+ - Bug: \[fog\]\[WARNING\] Unrecognized arguments: region, use\_iam\_profile [\#315](https://github.com/fog/fog-aws/issues/315)
12
+ - Better contributing documentation [\#311](https://github.com/fog/fog-aws/issues/311)
13
+ - AutoscalingGroups with a TargetGroup set are not parsed correctly [\#308](https://github.com/fog/fog-aws/issues/308)
14
+ - autoscaling create launch config doesn't work with BlockDeviceMappings [\#307](https://github.com/fog/fog-aws/issues/307)
15
+ - Is there a configuration setting for the AWS provider to adjust the url scheme for S3 buckets? [\#305](https://github.com/fog/fog-aws/issues/305)
16
+ - DB Subnet Group id for Cluster returns nil [\#292](https://github.com/fog/fog-aws/issues/292)
17
+
18
+ **Merged pull requests:**
19
+
20
+ - Fixed some missing parts in change sets [\#322](https://github.com/fog/fog-aws/pull/322) ([nilroy](https://github.com/nilroy))
21
+ - Add creation date and enhanced networking support for images [\#321](https://github.com/fog/fog-aws/pull/321) ([puneetloya](https://github.com/puneetloya))
22
+ - Fix warnings in running tests [\#319](https://github.com/fog/fog-aws/pull/319) ([ebihara99999](https://github.com/ebihara99999))
23
+ - Add `Fog::AWS::STS.Mock\#assume\_role` [\#316](https://github.com/fog/fog-aws/pull/316) ([pedrommonteiro](https://github.com/pedrommonteiro))
24
+ - Ohio region [\#314](https://github.com/fog/fog-aws/pull/314) ([chanakyacool](https://github.com/chanakyacool))
25
+ - mime types gem update [\#312](https://github.com/fog/fog-aws/pull/312) ([lucianosousa](https://github.com/lucianosousa))
26
+ - fix S3 \#delete\_multiple\_objects for UTF-8 names [\#310](https://github.com/fog/fog-aws/pull/310) ([alepore](https://github.com/alepore))
27
+ - Support for target groups \(fix for \#308\) [\#309](https://github.com/fog/fog-aws/pull/309) ([msiuts](https://github.com/msiuts))
28
+ - create, describe, and destroy elastic file systems [\#304](https://github.com/fog/fog-aws/pull/304) ([ehowe](https://github.com/ehowe))
29
+ - Correct optional parameter naming in documentation for Fog::AWS::Auto… [\#302](https://github.com/fog/fog-aws/pull/302) ([ehealy](https://github.com/ehealy))
30
+ - Modify Db subnet group [\#293](https://github.com/fog/fog-aws/pull/293) ([chanakyacool](https://github.com/chanakyacool))
31
+
32
+ ## [v0.12.0](https://github.com/fog/fog-aws/tree/v0.12.0) (2016-09-22)
33
+ [Full Changelog](https://github.com/fog/fog-aws/compare/v0.11.0...v0.12.0)
6
34
 
7
35
  **Implemented enhancements:**
8
36
 
data/Gemfile CHANGED
@@ -5,6 +5,10 @@ gemspec
5
5
 
6
6
  group :test, :default do
7
7
  gem 'pry-nav'
8
- gem 'mime-types', '~> 2.6', '>= 2.6.2'
8
+ gem 'mime-types', '~> 3.1'
9
9
  end
10
- gem "codeclimate-test-reporter", group: :test, require: nil
10
+
11
+ group :test do
12
+ gem "simplecov"
13
+ gem "codeclimate-test-reporter", "~> 1.0.0"
14
+ end
@@ -6,7 +6,7 @@ gem "fog-json", :github => "fog/fog-json"
6
6
 
7
7
  group :test, :default do
8
8
  gem 'pry-nav'
9
- gem 'mime-types', '~> 2.6', '>= 2.6.2'
9
+ gem 'mime-types', '~> 3.1'
10
10
  end
11
11
 
12
12
  gem "codeclimate-test-reporter", group: :test, require: nil
@@ -36,6 +36,7 @@ module Fog
36
36
  autoload :DataPipeline, File.expand_path('../aws/data_pipeline', __FILE__)
37
37
  autoload :DynamoDB, File.expand_path('../aws/dynamodb', __FILE__)
38
38
  autoload :ECS, File.expand_path('../aws/ecs', __FILE__)
39
+ autoload :EFS, File.expand_path('../aws/efs', __FILE__)
39
40
  autoload :ELB, File.expand_path('../aws/elb', __FILE__)
40
41
  autoload :EMR, File.expand_path('../aws/emr', __FILE__)
41
42
  autoload :ElasticBeanstalk, File.expand_path('../aws/beanstalk', __FILE__)
@@ -66,6 +67,7 @@ module Fog
66
67
  service(:dynamodb, 'DynamoDB')
67
68
  service(:elasticache, 'Elasticache')
68
69
  service(:ecs, 'ECS')
70
+ service(:efs, 'EFS')
69
71
  service(:elb, 'ELB')
70
72
  service(:emr, 'EMR')
71
73
  service(:federation, 'Federation')
@@ -226,7 +228,7 @@ module Fog
226
228
  end
227
229
 
228
230
  def self.regions
229
- @regions ||= ['ap-northeast-1', 'ap-northeast-2', 'ap-southeast-1', 'ap-southeast-2', 'eu-central-1', 'eu-west-1', 'us-east-1', 'us-west-1', 'us-west-2', 'sa-east-1', 'cn-north-1', 'us-gov-west-1', 'ap-south-1']
231
+ @regions ||= ['ap-northeast-1', 'ap-northeast-2', 'ap-southeast-1', 'ap-southeast-2', 'eu-central-1', 'eu-west-1', 'us-east-1', 'us-east-2', 'us-west-1', 'us-west-2', 'sa-east-1', 'cn-north-1', 'us-gov-west-1', 'ap-south-1']
230
232
  end
231
233
 
232
234
  def self.validate_region!(region, host=nil)
@@ -0,0 +1,177 @@
1
+ module Fog
2
+ module AWS
3
+ class EFS < Fog::Service
4
+ extend Fog::AWS::CredentialFetcher::ServiceMethods
5
+
6
+ class FileSystemInUse < Fog::Errors::Error; end
7
+ class IncorrectFileSystemLifeCycleState < Fog::Errors::Error; end
8
+ class InvalidSubnet < Fog::Errors::Error; end
9
+
10
+ requires :aws_access_key_id, :aws_secret_access_key
11
+ recognizes :region, :host, :path, :port, :scheme, :persistent, :instrumentor, :instrumentor_name
12
+
13
+ model_path 'fog/aws/models/efs'
14
+ request_path 'fog/aws/requests/efs'
15
+
16
+ model :file_system
17
+ model :mount_target
18
+
19
+ collection :file_systems
20
+ collection :mount_targets
21
+
22
+ request :create_file_system
23
+ request :create_mount_target
24
+ request :delete_file_system
25
+ request :delete_mount_target
26
+ request :describe_file_systems
27
+ request :describe_mount_target_security_groups
28
+ request :describe_mount_targets
29
+ request :modify_mount_target_security_groups
30
+
31
+ class Mock
32
+ include Fog::AWS::CredentialFetcher::ConnectionMethods
33
+
34
+ def self.data
35
+ @data ||= Hash.new do |hash, region|
36
+ hash[region] = Hash.new do |region_hash, key|
37
+ region_hash[key] = {
38
+ :file_systems => {},
39
+ :mount_targets => {},
40
+ :security_groups => {}
41
+ }
42
+ end
43
+ end
44
+ end
45
+
46
+ def self.reset
47
+ @data = nil
48
+ end
49
+
50
+ def data
51
+ self.class.data[@region][@aws_access_key_id]
52
+ end
53
+
54
+ def reset
55
+ self.class.reset
56
+ end
57
+
58
+ attr_accessor :region
59
+
60
+ def initialize(options={})
61
+ @region = options[:region] || "us-east-1"
62
+ @aws_access_key_id = options[:aws_access_key_id]
63
+ @aws_secret_access_key = options[:aws_secret_access_key]
64
+ end
65
+
66
+ def mock_compute
67
+ @mock_compute ||= Fog::Compute::AWS.new(:aws_access_key_id => @aws_access_key_id, :aws_secret_access_key => @aws_secret_access_key, :region => @region)
68
+ end
69
+ end
70
+
71
+ class Real
72
+ include Fog::AWS::CredentialFetcher::ConnectionMethods
73
+
74
+ def initialize(options={})
75
+ @connection_options = options[:connection_options] || {}
76
+ @instrumentor = options[:instrumentor]
77
+ @instrumentor_name = options[:instrumentor_name] || 'fog.aws.efs'
78
+
79
+ @region = options[:region] || 'us-east-1'
80
+ @host = options[:host] || "elasticfilesystem.#{@region}.amazonaws.com"
81
+ @port = options[:port] || 443
82
+ @scheme = options[:scheme] || "https"
83
+ @persistent = options[:persistent] || false
84
+ @connection = Fog::XML::Connection.new("#{@scheme}://#{@host}:#{@port}#{@path}", @persistent, @connection_options)
85
+ @version = options[:version] || '2015-02-01'
86
+ @path = options[:path] || "/#{@version}/"
87
+
88
+ setup_credentials(options)
89
+ end
90
+
91
+ def reload
92
+ @connection.reset
93
+ end
94
+
95
+ def setup_credentials(options)
96
+ @aws_access_key_id = options[:aws_access_key_id]
97
+ @aws_secret_access_key = options[:aws_secret_access_key]
98
+ @aws_session_token = options[:aws_session_token]
99
+ @aws_credentials_expire_at = options[:aws_credentials_expire_at]
100
+
101
+ #global services that have no region are signed with the us-east-1 region
102
+ #the only exception is GovCloud, which requires the region to be explicitly specified as us-gov-west-1
103
+ @signer = Fog::AWS::SignatureV4.new(@aws_access_key_id, @aws_secret_access_key, @region, 'elasticfilesystem')
104
+ end
105
+
106
+ def request(params)
107
+ refresh_credentials_if_expired
108
+ idempotent = params.delete(:idempotent)
109
+ parser = params.delete(:parser)
110
+ expects = params.delete(:expects) || 200
111
+ path = @path + params.delete(:path)
112
+ method = params.delete(:method) || 'GET'
113
+ request_body = Fog::JSON.encode(params)
114
+
115
+ body, headers = Fog::AWS.signed_params_v4(
116
+ params,
117
+ {
118
+ 'Content-Type' => "application/x-amz-json-1.0",
119
+ },
120
+ {
121
+ :host => @host,
122
+ :path => path,
123
+ :port => @port,
124
+ :version => @version,
125
+ :signer => @signer,
126
+ :aws_session_token => @aws_session_token,
127
+ :method => method,
128
+ :body => request_body
129
+ }
130
+ )
131
+
132
+ if @instrumentor
133
+ @instrumentor.instrument("#{@instrumentor_name}.request", params) do
134
+ _request(body, headers, idempotent, parser, method, path, expects)
135
+ end
136
+ else
137
+ _request(body, headers, idempotent, parser, method, path, expects)
138
+ end
139
+ end
140
+
141
+ def _request(body, headers, idempotent, parser, method, path, expects)
142
+ response = @connection.request({
143
+ :body => body,
144
+ :expects => expects,
145
+ :idempotent => idempotent,
146
+ :headers => headers,
147
+ :method => method,
148
+ :parser => parser,
149
+ :path => path
150
+ })
151
+ unless response.body.empty?
152
+ response.body = Fog::JSON.decode(response.body)
153
+ end
154
+ response
155
+ rescue Excon::Errors::HTTPStatusError => error
156
+ match = Fog::AWS::Errors.match_error(error)
157
+ raise if match.empty?
158
+ if match[:code] == "IncorrectFileSystemLifeCycleState"
159
+ raise Fog::AWS::EFS::IncorrectFileSystemLifeCycleState.slurp(error, match[:message])
160
+ elsif match[:code] == 'FileSystemInUse'
161
+ raise Fog::AWS::EFS::FileSystemInUse.slurp(error, match[:message])
162
+ elsif match[:code].match(/(FileSystem|MountTarget)NotFound/)
163
+ raise Fog::AWS::EFS::NotFound.slurp(error, match[:message])
164
+ end
165
+ raise case match[:message]
166
+ when /invalid ((file system)|(mount target)|(security group)) id/i
167
+ Fog::AWS::EFS::NotFound.slurp(error, match[:message])
168
+ when /invalid subnet id/i
169
+ Fog::AWS::EFS::InvalidSubnet.slurp(error, match[:message])
170
+ else
171
+ Fog::AWS::EFS::Error.slurp(error, "#{match[:code]} => #{match[:message]}")
172
+ end
173
+ end
174
+ end
175
+ end
176
+ end
177
+ end
@@ -21,6 +21,7 @@ module Fog
21
21
  attribute :tags, :aliases => 'Tags'
22
22
  attribute :termination_policies, :aliases => 'TerminationPolicies'
23
23
  attribute :vpc_zone_identifier, :aliases => 'VPCZoneIdentifier'
24
+ attribute :target_group_arns, :aliases => 'TargetGroupARNs'
24
25
 
25
26
  def initialize(attributes={})
26
27
  self.instances = []
@@ -35,6 +36,7 @@ module Fog
35
36
  self.suspended_processes = []
36
37
  self.tags = {}
37
38
  self.termination_policies = ['Default']
39
+ self.target_group_arns = []
38
40
  super
39
41
  end
40
42
 
@@ -22,6 +22,8 @@ module Fog
22
22
  attribute :tags, :aliases => 'tagSet'
23
23
  attribute :name
24
24
  attribute :virtualization_type, :aliases => 'virtualizationType'
25
+ attribute :creation_date, :aliases => 'creationDate'
26
+ attribute :ena_support, :aliases => 'enaSupport'
25
27
 
26
28
  def deregister(delete_snapshot = false)
27
29
  service.deregister_image(id)
@@ -32,7 +32,9 @@ module Fog
32
32
  # ramdisk_id=nil,
33
33
  # root_device_type=nil,
34
34
  # root_device_name=nil,
35
- # tags=nil
35
+ # tags=nil,
36
+ # creation_date=nil,
37
+ # ena_support=nil
36
38
  # >
37
39
  #
38
40
 
@@ -11,6 +11,10 @@ module Fog
11
11
  attribute :tenancy, :aliases => 'instanceTenancy'
12
12
  attribute :is_default, :aliases => 'isDefault'
13
13
 
14
+ def subnets
15
+ service.subnets(:filters => {'vpcId' => self.identity}).all
16
+ end
17
+
14
18
  def initialize(attributes={})
15
19
  self.dhcp_options_id ||= "default"
16
20
  self.tenancy ||= "default"
@@ -0,0 +1,42 @@
1
+ module Fog
2
+ module AWS
3
+ class EFS
4
+ class FileSystem < Fog::Model
5
+ identity :id, :aliases => 'FileSystemId'
6
+
7
+ attribute :owner_id, :aliases => 'OwnerId'
8
+ attribute :creation_token, :aliases => 'CreationToken'
9
+ attribute :performance_mode, :aliases => 'PerformanceMode'
10
+ attribute :creation_time, :aliases => 'CreationTime'
11
+ attribute :state, :aliases => 'LifeCycleState'
12
+ attribute :name, :aliases => 'Name'
13
+ attribute :number_of_mount_targets, :aliases => 'NumberOfMountTargets'
14
+ attribute :size_in_bytes, :aliases => 'SizeInBytes'
15
+
16
+ def ready?
17
+ state == 'available'
18
+ end
19
+
20
+ def mount_targets
21
+ requires :identity
22
+ service.mount_targets(:file_system_id => self.identity).all
23
+ end
24
+
25
+ def destroy
26
+ requires :identity
27
+
28
+ service.delete_file_system(self.identity)
29
+
30
+ true
31
+ end
32
+
33
+ def save
34
+ params = {}
35
+ params.merge!(:performance_mode => self.performance_mode) if self.performance_mode
36
+
37
+ merge_attributes(service.create_file_system(self.creation_token || Fog::Mock.random_hex(32), params).body)
38
+ end
39
+ end
40
+ end
41
+ end
42
+ end
@@ -0,0 +1,23 @@
1
+ require 'fog/aws/models/efs/file_system'
2
+
3
+ module Fog
4
+ module AWS
5
+ class EFS
6
+ class FileSystems < Fog::Collection
7
+ model Fog::AWS::EFS::FileSystem
8
+
9
+ def all
10
+ data = service.describe_file_systems.body["FileSystems"]
11
+ load(data)
12
+ end
13
+
14
+ def get(identity)
15
+ data = service.describe_file_systems(:id => identity).body["FileSystems"].first
16
+ new(data)
17
+ rescue Fog::AWS::EFS::NotFound
18
+ nil
19
+ end
20
+ end
21
+ end
22
+ end
23
+ end
@@ -0,0 +1,59 @@
1
+ module Fog
2
+ module AWS
3
+ class EFS
4
+ class MountTarget < Fog::Model
5
+ identity :id, :aliases => "MountTargetId"
6
+
7
+ attribute :file_system_id, :aliases => "FileSystemId"
8
+ attribute :ip_address, :aliases => "IpAddress"
9
+ attribute :state, :aliases => "LifeCycleState"
10
+ attribute :network_interface_id, :aliases => "NetworkInterfaceId"
11
+ attribute :owner_id, :aliases => "OwnerId"
12
+ attribute :subnet_id, :aliases => "SubnetId"
13
+
14
+ def ready?
15
+ state == 'available'
16
+ end
17
+
18
+ def destroy
19
+ requires :identity
20
+ service.delete_mount_target(self.identity)
21
+ true
22
+ end
23
+
24
+ def file_system
25
+ requires :file_system_id
26
+ service.file_systems.get(self.file_system_id)
27
+ end
28
+
29
+ def security_groups
30
+ if persisted?
31
+ requires :identity
32
+ service.describe_mount_target_security_groups(self.identity).body["SecurityGroups"]
33
+ else
34
+ @security_groups || []
35
+ end
36
+ end
37
+
38
+ def security_groups=(security_groups)
39
+ if persisted?
40
+ requires :identity
41
+ service.modify_mount_target_security_groups(self.identity, security_groups)
42
+ else
43
+ @security_groups = security_groups
44
+ end
45
+ security_groups
46
+ end
47
+
48
+ def save
49
+ requires :file_system_id, :subnet_id
50
+ params = {}
51
+ params.merge!('IpAddress' => self.ip_address) if self.ip_address
52
+ params.merge!('SecurityGroups' => @security_groups) if @security_groups
53
+
54
+ merge_attributes(service.create_mount_target(self.file_system_id, self.subnet_id, params).body)
55
+ end
56
+ end
57
+ end
58
+ end
59
+ end