aws-sdk-costexplorer 1.79.0 → 1.80.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.
- checksums.yaml +4 -4
- data/CHANGELOG.md +5 -0
- data/VERSION +1 -1
- data/lib/aws-sdk-costexplorer/client.rb +87 -3
- data/lib/aws-sdk-costexplorer/client_api.rb +62 -0
- data/lib/aws-sdk-costexplorer/endpoint_parameters.rb +3 -0
- data/lib/aws-sdk-costexplorer/endpoint_provider.rb +180 -181
- data/lib/aws-sdk-costexplorer/endpoints.rb +28 -0
- data/lib/aws-sdk-costexplorer/errors.rb +16 -0
- data/lib/aws-sdk-costexplorer/plugins/endpoints.rb +4 -0
- data/lib/aws-sdk-costexplorer/types.rb +118 -1450
- data/lib/aws-sdk-costexplorer.rb +1 -1
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: f29b723690f77b46793898db81ba6e1f209f34e2354626394a2d2b8efd17b35b
|
4
|
+
data.tar.gz: cb6e46daf2706629f949d5ef43238ae6d27dfca49bc916d9c4475181f017d44a
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: b34ff974f7f1e5a69df15f3ceb033001b4f73771ddcaabedcb05d598499fc1e386f00d4cf10767d8888335c9b176c66d327f0ae2d6c39f775833adeda9806441
|
7
|
+
data.tar.gz: 77c3259379b7d91dc6fc6a0048c5ed9a52d16fd77c81738ea8a33c5c4265210e9606f5ea32a266be4fd4b1f912427c584a093057b08d440c1fe793a28ea27c2c
|
data/CHANGELOG.md
CHANGED
@@ -1,6 +1,11 @@
|
|
1
1
|
Unreleased Changes
|
2
2
|
------------------
|
3
3
|
|
4
|
+
1.80.0 (2022-12-05)
|
5
|
+
------------------
|
6
|
+
|
7
|
+
* Feature - This release introduces two new APIs that offer a 1-click experience to refresh Savings Plans recommendations. The two APIs are StartSavingsPlansPurchaseRecommendationGeneration and ListSavingsPlansPurchaseRecommendationGeneration.
|
8
|
+
|
4
9
|
1.79.0 (2022-10-25)
|
5
10
|
------------------
|
6
11
|
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
1.
|
1
|
+
1.80.0
|
@@ -3292,8 +3292,10 @@ module Aws::CostExplorer
|
|
3292
3292
|
req.send_request(options)
|
3293
3293
|
end
|
3294
3294
|
|
3295
|
-
# Retrieves
|
3296
|
-
#
|
3295
|
+
# Retrieves the Savings Plans recommendations for your account. First
|
3296
|
+
# use `StartSavingsPlansPurchaseRecommendationGeneration` to generate a
|
3297
|
+
# new set of recommendations, and then use
|
3298
|
+
# `GetSavingsPlansPurchaseRecommendation` to retrieve them.
|
3297
3299
|
#
|
3298
3300
|
# @option params [required, String] :savings_plans_type
|
3299
3301
|
# The Savings Plans recommendation type that's requested.
|
@@ -4208,6 +4210,55 @@ module Aws::CostExplorer
|
|
4208
4210
|
req.send_request(options)
|
4209
4211
|
end
|
4210
4212
|
|
4213
|
+
# Retrieves a list of your historical recommendation generations within
|
4214
|
+
# the past 30 days.
|
4215
|
+
#
|
4216
|
+
# @option params [String] :generation_status
|
4217
|
+
# The status of the recommendation generation.
|
4218
|
+
#
|
4219
|
+
# @option params [Array<String>] :recommendation_ids
|
4220
|
+
# The IDs for each specific recommendation.
|
4221
|
+
#
|
4222
|
+
# @option params [Integer] :page_size
|
4223
|
+
# The number of recommendations that you want returned in a single
|
4224
|
+
# response object.
|
4225
|
+
#
|
4226
|
+
# @option params [String] :next_page_token
|
4227
|
+
# The token to retrieve the next set of results.
|
4228
|
+
#
|
4229
|
+
# @return [Types::ListSavingsPlansPurchaseRecommendationGenerationResponse] Returns a {Seahorse::Client::Response response} object which responds to the following methods:
|
4230
|
+
#
|
4231
|
+
# * {Types::ListSavingsPlansPurchaseRecommendationGenerationResponse#generation_summary_list #generation_summary_list} => Array<Types::GenerationSummary>
|
4232
|
+
# * {Types::ListSavingsPlansPurchaseRecommendationGenerationResponse#next_page_token #next_page_token} => String
|
4233
|
+
#
|
4234
|
+
# @example Request syntax with placeholder values
|
4235
|
+
#
|
4236
|
+
# resp = client.list_savings_plans_purchase_recommendation_generation({
|
4237
|
+
# generation_status: "SUCCEEDED", # accepts SUCCEEDED, PROCESSING, FAILED
|
4238
|
+
# recommendation_ids: ["RecommendationId"],
|
4239
|
+
# page_size: 1,
|
4240
|
+
# next_page_token: "NextPageToken",
|
4241
|
+
# })
|
4242
|
+
#
|
4243
|
+
# @example Response structure
|
4244
|
+
#
|
4245
|
+
# resp.generation_summary_list #=> Array
|
4246
|
+
# resp.generation_summary_list[0].recommendation_id #=> String
|
4247
|
+
# resp.generation_summary_list[0].generation_status #=> String, one of "SUCCEEDED", "PROCESSING", "FAILED"
|
4248
|
+
# resp.generation_summary_list[0].generation_started_time #=> String
|
4249
|
+
# resp.generation_summary_list[0].generation_completion_time #=> String
|
4250
|
+
# resp.generation_summary_list[0].estimated_completion_time #=> String
|
4251
|
+
# resp.next_page_token #=> String
|
4252
|
+
#
|
4253
|
+
# @see http://docs.aws.amazon.com/goto/WebAPI/ce-2017-10-25/ListSavingsPlansPurchaseRecommendationGeneration AWS API Documentation
|
4254
|
+
#
|
4255
|
+
# @overload list_savings_plans_purchase_recommendation_generation(params = {})
|
4256
|
+
# @param [Hash] params ({})
|
4257
|
+
def list_savings_plans_purchase_recommendation_generation(params = {}, options = {})
|
4258
|
+
req = build_request(:list_savings_plans_purchase_recommendation_generation, params)
|
4259
|
+
req.send_request(options)
|
4260
|
+
end
|
4261
|
+
|
4211
4262
|
# Returns a list of resource tags associated with the resource specified
|
4212
4263
|
# by the Amazon Resource Name (ARN).
|
4213
4264
|
#
|
@@ -4277,6 +4328,39 @@ module Aws::CostExplorer
|
|
4277
4328
|
req.send_request(options)
|
4278
4329
|
end
|
4279
4330
|
|
4331
|
+
# Requests a Savings Plans recommendation generation. This enables you
|
4332
|
+
# to calculate a fresh set of Savings Plans recommendations that takes
|
4333
|
+
# your latest usage data and current Savings Plans inventory into
|
4334
|
+
# account. You can refresh Savings Plans recommendations up to three
|
4335
|
+
# times daily for a consolidated billing family.
|
4336
|
+
#
|
4337
|
+
# <note markdown="1"> `StartSavingsPlansPurchaseRecommendationGeneration` has no request
|
4338
|
+
# syntax because no input parameters are needed to support this
|
4339
|
+
# operation.
|
4340
|
+
#
|
4341
|
+
# </note>
|
4342
|
+
#
|
4343
|
+
# @return [Types::StartSavingsPlansPurchaseRecommendationGenerationResponse] Returns a {Seahorse::Client::Response response} object which responds to the following methods:
|
4344
|
+
#
|
4345
|
+
# * {Types::StartSavingsPlansPurchaseRecommendationGenerationResponse#recommendation_id #recommendation_id} => String
|
4346
|
+
# * {Types::StartSavingsPlansPurchaseRecommendationGenerationResponse#generation_started_time #generation_started_time} => String
|
4347
|
+
# * {Types::StartSavingsPlansPurchaseRecommendationGenerationResponse#estimated_completion_time #estimated_completion_time} => String
|
4348
|
+
#
|
4349
|
+
# @example Response structure
|
4350
|
+
#
|
4351
|
+
# resp.recommendation_id #=> String
|
4352
|
+
# resp.generation_started_time #=> String
|
4353
|
+
# resp.estimated_completion_time #=> String
|
4354
|
+
#
|
4355
|
+
# @see http://docs.aws.amazon.com/goto/WebAPI/ce-2017-10-25/StartSavingsPlansPurchaseRecommendationGeneration AWS API Documentation
|
4356
|
+
#
|
4357
|
+
# @overload start_savings_plans_purchase_recommendation_generation(params = {})
|
4358
|
+
# @param [Hash] params ({})
|
4359
|
+
def start_savings_plans_purchase_recommendation_generation(params = {}, options = {})
|
4360
|
+
req = build_request(:start_savings_plans_purchase_recommendation_generation, params)
|
4361
|
+
req.send_request(options)
|
4362
|
+
end
|
4363
|
+
|
4280
4364
|
# An API operation for adding one or more tags (key-value pairs) to a
|
4281
4365
|
# resource.
|
4282
4366
|
#
|
@@ -4634,7 +4718,7 @@ module Aws::CostExplorer
|
|
4634
4718
|
params: params,
|
4635
4719
|
config: config)
|
4636
4720
|
context[:gem_name] = 'aws-sdk-costexplorer'
|
4637
|
-
context[:gem_version] = '1.
|
4721
|
+
context[:gem_version] = '1.80.0'
|
4638
4722
|
Seahorse::Client::Request.new(handlers, context)
|
4639
4723
|
end
|
4640
4724
|
|
@@ -113,6 +113,10 @@ module Aws::CostExplorer
|
|
113
113
|
FindingReasonCodes = Shapes::ListShape.new(name: 'FindingReasonCodes')
|
114
114
|
ForecastResult = Shapes::StructureShape.new(name: 'ForecastResult')
|
115
115
|
ForecastResultsByTime = Shapes::ListShape.new(name: 'ForecastResultsByTime')
|
116
|
+
GenerationExistsException = Shapes::StructureShape.new(name: 'GenerationExistsException')
|
117
|
+
GenerationStatus = Shapes::StringShape.new(name: 'GenerationStatus')
|
118
|
+
GenerationSummary = Shapes::StructureShape.new(name: 'GenerationSummary')
|
119
|
+
GenerationSummaryList = Shapes::ListShape.new(name: 'GenerationSummaryList')
|
116
120
|
GenericBoolean = Shapes::BooleanShape.new(name: 'GenericBoolean')
|
117
121
|
GenericDouble = Shapes::FloatShape.new(name: 'GenericDouble')
|
118
122
|
GenericString = Shapes::StringShape.new(name: 'GenericString')
|
@@ -169,6 +173,8 @@ module Aws::CostExplorer
|
|
169
173
|
ListCostAllocationTagsResponse = Shapes::StructureShape.new(name: 'ListCostAllocationTagsResponse')
|
170
174
|
ListCostCategoryDefinitionsRequest = Shapes::StructureShape.new(name: 'ListCostCategoryDefinitionsRequest')
|
171
175
|
ListCostCategoryDefinitionsResponse = Shapes::StructureShape.new(name: 'ListCostCategoryDefinitionsResponse')
|
176
|
+
ListSavingsPlansPurchaseRecommendationGenerationRequest = Shapes::StructureShape.new(name: 'ListSavingsPlansPurchaseRecommendationGenerationRequest')
|
177
|
+
ListSavingsPlansPurchaseRecommendationGenerationResponse = Shapes::StructureShape.new(name: 'ListSavingsPlansPurchaseRecommendationGenerationResponse')
|
172
178
|
ListTagsForResourceRequest = Shapes::StructureShape.new(name: 'ListTagsForResourceRequest')
|
173
179
|
ListTagsForResourceResponse = Shapes::StructureShape.new(name: 'ListTagsForResourceResponse')
|
174
180
|
LookbackPeriodInDays = Shapes::StringShape.new(name: 'LookbackPeriodInDays')
|
@@ -209,6 +215,8 @@ module Aws::CostExplorer
|
|
209
215
|
RDSInstanceDetails = Shapes::StructureShape.new(name: 'RDSInstanceDetails')
|
210
216
|
RICostForUnusedHours = Shapes::StringShape.new(name: 'RICostForUnusedHours')
|
211
217
|
RealizedSavings = Shapes::StringShape.new(name: 'RealizedSavings')
|
218
|
+
RecommendationId = Shapes::StringShape.new(name: 'RecommendationId')
|
219
|
+
RecommendationIdList = Shapes::ListShape.new(name: 'RecommendationIdList')
|
212
220
|
RecommendationTarget = Shapes::StringShape.new(name: 'RecommendationTarget')
|
213
221
|
RedshiftInstanceDetails = Shapes::StructureShape.new(name: 'RedshiftInstanceDetails')
|
214
222
|
RequestChangedException = Shapes::StructureShape.new(name: 'RequestChangedException')
|
@@ -272,6 +280,8 @@ module Aws::CostExplorer
|
|
272
280
|
SortDefinitionKey = Shapes::StringShape.new(name: 'SortDefinitionKey')
|
273
281
|
SortDefinitions = Shapes::ListShape.new(name: 'SortDefinitions')
|
274
282
|
SortOrder = Shapes::StringShape.new(name: 'SortOrder')
|
283
|
+
StartSavingsPlansPurchaseRecommendationGenerationRequest = Shapes::StructureShape.new(name: 'StartSavingsPlansPurchaseRecommendationGenerationRequest')
|
284
|
+
StartSavingsPlansPurchaseRecommendationGenerationResponse = Shapes::StructureShape.new(name: 'StartSavingsPlansPurchaseRecommendationGenerationResponse')
|
275
285
|
Subscriber = Shapes::StructureShape.new(name: 'Subscriber')
|
276
286
|
SubscriberAddress = Shapes::StringShape.new(name: 'SubscriberAddress')
|
277
287
|
SubscriberStatus = Shapes::StringShape.new(name: 'SubscriberStatus')
|
@@ -645,6 +655,18 @@ module Aws::CostExplorer
|
|
645
655
|
|
646
656
|
ForecastResultsByTime.member = Shapes::ShapeRef.new(shape: ForecastResult)
|
647
657
|
|
658
|
+
GenerationExistsException.add_member(:message, Shapes::ShapeRef.new(shape: ErrorMessage, location_name: "Message"))
|
659
|
+
GenerationExistsException.struct_class = Types::GenerationExistsException
|
660
|
+
|
661
|
+
GenerationSummary.add_member(:recommendation_id, Shapes::ShapeRef.new(shape: RecommendationId, location_name: "RecommendationId"))
|
662
|
+
GenerationSummary.add_member(:generation_status, Shapes::ShapeRef.new(shape: GenerationStatus, location_name: "GenerationStatus"))
|
663
|
+
GenerationSummary.add_member(:generation_started_time, Shapes::ShapeRef.new(shape: ZonedDateTime, location_name: "GenerationStartedTime"))
|
664
|
+
GenerationSummary.add_member(:generation_completion_time, Shapes::ShapeRef.new(shape: ZonedDateTime, location_name: "GenerationCompletionTime"))
|
665
|
+
GenerationSummary.add_member(:estimated_completion_time, Shapes::ShapeRef.new(shape: ZonedDateTime, location_name: "EstimatedCompletionTime"))
|
666
|
+
GenerationSummary.struct_class = Types::GenerationSummary
|
667
|
+
|
668
|
+
GenerationSummaryList.member = Shapes::ShapeRef.new(shape: GenerationSummary)
|
669
|
+
|
648
670
|
GetAnomaliesRequest.add_member(:monitor_arn, Shapes::ShapeRef.new(shape: GenericString, location_name: "MonitorArn"))
|
649
671
|
GetAnomaliesRequest.add_member(:date_interval, Shapes::ShapeRef.new(shape: AnomalyDateInterval, required: true, location_name: "DateInterval"))
|
650
672
|
GetAnomaliesRequest.add_member(:feedback, Shapes::ShapeRef.new(shape: AnomalyFeedbackType, location_name: "Feedback"))
|
@@ -937,6 +959,16 @@ module Aws::CostExplorer
|
|
937
959
|
ListCostCategoryDefinitionsResponse.add_member(:next_token, Shapes::ShapeRef.new(shape: NextPageToken, location_name: "NextToken"))
|
938
960
|
ListCostCategoryDefinitionsResponse.struct_class = Types::ListCostCategoryDefinitionsResponse
|
939
961
|
|
962
|
+
ListSavingsPlansPurchaseRecommendationGenerationRequest.add_member(:generation_status, Shapes::ShapeRef.new(shape: GenerationStatus, location_name: "GenerationStatus"))
|
963
|
+
ListSavingsPlansPurchaseRecommendationGenerationRequest.add_member(:recommendation_ids, Shapes::ShapeRef.new(shape: RecommendationIdList, location_name: "RecommendationIds"))
|
964
|
+
ListSavingsPlansPurchaseRecommendationGenerationRequest.add_member(:page_size, Shapes::ShapeRef.new(shape: NonNegativeInteger, location_name: "PageSize"))
|
965
|
+
ListSavingsPlansPurchaseRecommendationGenerationRequest.add_member(:next_page_token, Shapes::ShapeRef.new(shape: NextPageToken, location_name: "NextPageToken"))
|
966
|
+
ListSavingsPlansPurchaseRecommendationGenerationRequest.struct_class = Types::ListSavingsPlansPurchaseRecommendationGenerationRequest
|
967
|
+
|
968
|
+
ListSavingsPlansPurchaseRecommendationGenerationResponse.add_member(:generation_summary_list, Shapes::ShapeRef.new(shape: GenerationSummaryList, location_name: "GenerationSummaryList"))
|
969
|
+
ListSavingsPlansPurchaseRecommendationGenerationResponse.add_member(:next_page_token, Shapes::ShapeRef.new(shape: NextPageToken, location_name: "NextPageToken"))
|
970
|
+
ListSavingsPlansPurchaseRecommendationGenerationResponse.struct_class = Types::ListSavingsPlansPurchaseRecommendationGenerationResponse
|
971
|
+
|
940
972
|
ListTagsForResourceRequest.add_member(:resource_arn, Shapes::ShapeRef.new(shape: Arn, required: true, location_name: "ResourceArn"))
|
941
973
|
ListTagsForResourceRequest.struct_class = Types::ListTagsForResourceRequest
|
942
974
|
|
@@ -985,6 +1017,8 @@ module Aws::CostExplorer
|
|
985
1017
|
RDSInstanceDetails.add_member(:size_flex_eligible, Shapes::ShapeRef.new(shape: GenericBoolean, location_name: "SizeFlexEligible"))
|
986
1018
|
RDSInstanceDetails.struct_class = Types::RDSInstanceDetails
|
987
1019
|
|
1020
|
+
RecommendationIdList.member = Shapes::ShapeRef.new(shape: RecommendationId)
|
1021
|
+
|
988
1022
|
RedshiftInstanceDetails.add_member(:family, Shapes::ShapeRef.new(shape: GenericString, location_name: "Family"))
|
989
1023
|
RedshiftInstanceDetails.add_member(:node_type, Shapes::ShapeRef.new(shape: GenericString, location_name: "NodeType"))
|
990
1024
|
RedshiftInstanceDetails.add_member(:region, Shapes::ShapeRef.new(shape: GenericString, location_name: "Region"))
|
@@ -1247,6 +1281,13 @@ module Aws::CostExplorer
|
|
1247
1281
|
|
1248
1282
|
SortDefinitions.member = Shapes::ShapeRef.new(shape: SortDefinition)
|
1249
1283
|
|
1284
|
+
StartSavingsPlansPurchaseRecommendationGenerationRequest.struct_class = Types::StartSavingsPlansPurchaseRecommendationGenerationRequest
|
1285
|
+
|
1286
|
+
StartSavingsPlansPurchaseRecommendationGenerationResponse.add_member(:recommendation_id, Shapes::ShapeRef.new(shape: RecommendationId, location_name: "RecommendationId"))
|
1287
|
+
StartSavingsPlansPurchaseRecommendationGenerationResponse.add_member(:generation_started_time, Shapes::ShapeRef.new(shape: ZonedDateTime, location_name: "GenerationStartedTime"))
|
1288
|
+
StartSavingsPlansPurchaseRecommendationGenerationResponse.add_member(:estimated_completion_time, Shapes::ShapeRef.new(shape: ZonedDateTime, location_name: "EstimatedCompletionTime"))
|
1289
|
+
StartSavingsPlansPurchaseRecommendationGenerationResponse.struct_class = Types::StartSavingsPlansPurchaseRecommendationGenerationResponse
|
1290
|
+
|
1250
1291
|
Subscriber.add_member(:address, Shapes::ShapeRef.new(shape: SubscriberAddress, location_name: "Address"))
|
1251
1292
|
Subscriber.add_member(:type, Shapes::ShapeRef.new(shape: SubscriberType, location_name: "Type"))
|
1252
1293
|
Subscriber.add_member(:status, Shapes::ShapeRef.new(shape: SubscriberStatus, location_name: "Status"))
|
@@ -1695,6 +1736,16 @@ module Aws::CostExplorer
|
|
1695
1736
|
)
|
1696
1737
|
end)
|
1697
1738
|
|
1739
|
+
api.add_operation(:list_savings_plans_purchase_recommendation_generation, Seahorse::Model::Operation.new.tap do |o|
|
1740
|
+
o.name = "ListSavingsPlansPurchaseRecommendationGeneration"
|
1741
|
+
o.http_method = "POST"
|
1742
|
+
o.http_request_uri = "/"
|
1743
|
+
o.input = Shapes::ShapeRef.new(shape: ListSavingsPlansPurchaseRecommendationGenerationRequest)
|
1744
|
+
o.output = Shapes::ShapeRef.new(shape: ListSavingsPlansPurchaseRecommendationGenerationResponse)
|
1745
|
+
o.errors << Shapes::ShapeRef.new(shape: LimitExceededException)
|
1746
|
+
o.errors << Shapes::ShapeRef.new(shape: InvalidNextTokenException)
|
1747
|
+
end)
|
1748
|
+
|
1698
1749
|
api.add_operation(:list_tags_for_resource, Seahorse::Model::Operation.new.tap do |o|
|
1699
1750
|
o.name = "ListTagsForResource"
|
1700
1751
|
o.http_method = "POST"
|
@@ -1714,6 +1765,17 @@ module Aws::CostExplorer
|
|
1714
1765
|
o.errors << Shapes::ShapeRef.new(shape: LimitExceededException)
|
1715
1766
|
end)
|
1716
1767
|
|
1768
|
+
api.add_operation(:start_savings_plans_purchase_recommendation_generation, Seahorse::Model::Operation.new.tap do |o|
|
1769
|
+
o.name = "StartSavingsPlansPurchaseRecommendationGeneration"
|
1770
|
+
o.http_method = "POST"
|
1771
|
+
o.http_request_uri = "/"
|
1772
|
+
o.input = Shapes::ShapeRef.new(shape: StartSavingsPlansPurchaseRecommendationGenerationRequest)
|
1773
|
+
o.output = Shapes::ShapeRef.new(shape: StartSavingsPlansPurchaseRecommendationGenerationResponse)
|
1774
|
+
o.errors << Shapes::ShapeRef.new(shape: LimitExceededException)
|
1775
|
+
o.errors << Shapes::ShapeRef.new(shape: ServiceQuotaExceededException)
|
1776
|
+
o.errors << Shapes::ShapeRef.new(shape: GenerationExistsException)
|
1777
|
+
end)
|
1778
|
+
|
1717
1779
|
api.add_operation(:tag_resource, Seahorse::Model::Operation.new.tap do |o|
|
1718
1780
|
o.name = "TagResource"
|
1719
1781
|
o.http_method = "POST"
|
@@ -50,6 +50,9 @@ module Aws::CostExplorer
|
|
50
50
|
|
51
51
|
def initialize(options = {})
|
52
52
|
self[:region] = options[:region]
|
53
|
+
if self[:region].nil?
|
54
|
+
raise ArgumentError, "Missing required EndpointParameter: :region"
|
55
|
+
end
|
53
56
|
self[:use_dual_stack] = options[:use_dual_stack]
|
54
57
|
self[:use_dual_stack] = false if self[:use_dual_stack].nil?
|
55
58
|
if self[:use_dual_stack].nil?
|