diff --git a/Package.version b/Package.version index fbaaafa001b..84767f21634 100644 --- a/Package.version +++ b/Package.version @@ -1 +1 @@ -0.49.0 \ No newline at end of file +0.50.0 \ No newline at end of file diff --git a/Sources/Services/AWSResiliencehub/Sources/AWSResiliencehub/Models.swift b/Sources/Services/AWSResiliencehub/Sources/AWSResiliencehub/Models.swift index e2fadd44a35..073640d7d05 100644 --- a/Sources/Services/AWSResiliencehub/Sources/AWSResiliencehub/Models.swift +++ b/Sources/Services/AWSResiliencehub/Sources/AWSResiliencehub/Models.swift @@ -28,6 +28,23 @@ import struct SmithyReadWrite.ReadingClosureBox import struct SmithyReadWrite.WritingClosureBox import struct SmithyTimestamps.TimestampFormatter +extension ResiliencehubClientTypes { + /// Indicates the grouping recommendation you have accepted to include in your application. + public struct AcceptGroupingRecommendationEntry { + /// Indicates the identifier of the grouping recommendation. + /// This member is required. + public var groupingRecommendationId: Swift.String? + + public init( + groupingRecommendationId: Swift.String? = nil + ) + { + self.groupingRecommendationId = groupingRecommendationId + } + } + +} + /// You don't have permissions to perform the requested operation. The user or role that is making the request must have at least one IAM permissions policy attached that grants the required permissions. public struct AccessDeniedException: ClientRuntime.ModeledError, AWSClientRuntime.AWSServiceError, ClientRuntime.HTTPError, Swift.Error { @@ -52,8 +69,32 @@ public struct AccessDeniedException: ClientRuntime.ModeledError, AWSClientRuntim } } -/// This exception occurs when a conflict with a previous successful write is detected. This generally occurs when the previous write did not have time to propagate to the host serving the current request. A retry (with appropriate backoff logic) is the recommended response to this exception. -public struct ConflictException: ClientRuntime.ModeledError, AWSClientRuntime.AWSServiceError, ClientRuntime.HTTPError, Swift.Error { +/// This exception occurs when there is an internal failure in the Resilience Hub service. +public struct InternalServerException: ClientRuntime.ModeledError, AWSClientRuntime.AWSServiceError, ClientRuntime.HTTPError, Swift.Error { + + public struct Properties { + public internal(set) var message: Swift.String? = nil + } + + public internal(set) var properties = Properties() + public static var typeName: Swift.String { "InternalServerException" } + public static var fault: ClientRuntime.ErrorFault { .server } + public static var isRetryable: Swift.Bool { false } + public static var isThrottling: Swift.Bool { false } + public internal(set) var httpResponse = SmithyHTTPAPI.HTTPResponse() + public internal(set) var message: Swift.String? + public internal(set) var requestID: Swift.String? + + public init( + message: Swift.String? = nil + ) + { + self.properties.message = message + } +} + +/// This exception occurs when the specified resource could not be found. +public struct ResourceNotFoundException: ClientRuntime.ModeledError, AWSClientRuntime.AWSServiceError, ClientRuntime.HTTPError, Swift.Error { public struct Properties { public internal(set) var message: Swift.String? = nil @@ -64,7 +105,7 @@ public struct ConflictException: ClientRuntime.ModeledError, AWSClientRuntime.AW } public internal(set) var properties = Properties() - public static var typeName: Swift.String { "ConflictException" } + public static var typeName: Swift.String { "ResourceNotFoundException" } public static var fault: ClientRuntime.ErrorFault { .client } public static var isRetryable: Swift.Bool { false } public static var isThrottling: Swift.Bool { false } @@ -84,16 +125,18 @@ public struct ConflictException: ClientRuntime.ModeledError, AWSClientRuntime.AW } } -/// This exception occurs when there is an internal failure in the Resilience Hub service. -public struct InternalServerException: ClientRuntime.ModeledError, AWSClientRuntime.AWSServiceError, ClientRuntime.HTTPError, Swift.Error { +/// This exception occurs when you have exceeded the limit on the number of requests per second. +public struct ThrottlingException: ClientRuntime.ModeledError, AWSClientRuntime.AWSServiceError, ClientRuntime.HTTPError, Swift.Error { public struct Properties { public internal(set) var message: Swift.String? = nil + /// The number of seconds to wait before retrying the operation. + public internal(set) var retryAfterSeconds: Swift.Int? = nil } public internal(set) var properties = Properties() - public static var typeName: Swift.String { "InternalServerException" } - public static var fault: ClientRuntime.ErrorFault { .server } + public static var typeName: Swift.String { "ThrottlingException" } + public static var fault: ClientRuntime.ErrorFault { .client } public static var isRetryable: Swift.Bool { false } public static var isThrottling: Swift.Bool { false } public internal(set) var httpResponse = SmithyHTTPAPI.HTTPResponse() @@ -101,26 +144,24 @@ public struct InternalServerException: ClientRuntime.ModeledError, AWSClientRunt public internal(set) var requestID: Swift.String? public init( - message: Swift.String? = nil + message: Swift.String? = nil, + retryAfterSeconds: Swift.Int? = nil ) { self.properties.message = message + self.properties.retryAfterSeconds = retryAfterSeconds } } -/// This exception occurs when the specified resource could not be found. -public struct ResourceNotFoundException: ClientRuntime.ModeledError, AWSClientRuntime.AWSServiceError, ClientRuntime.HTTPError, Swift.Error { +/// This exception occurs when a request is not valid. +public struct ValidationException: ClientRuntime.ModeledError, AWSClientRuntime.AWSServiceError, ClientRuntime.HTTPError, Swift.Error { public struct Properties { public internal(set) var message: Swift.String? = nil - /// The identifier of the resource that the exception applies to. - public internal(set) var resourceId: Swift.String? = nil - /// The type of the resource that the exception applies to. - public internal(set) var resourceType: Swift.String? = nil } public internal(set) var properties = Properties() - public static var typeName: Swift.String { "ResourceNotFoundException" } + public static var typeName: Swift.String { "ValidationException" } public static var fault: ClientRuntime.ErrorFault { .client } public static var isRetryable: Swift.Bool { false } public static var isThrottling: Swift.Bool { false } @@ -129,28 +170,84 @@ public struct ResourceNotFoundException: ClientRuntime.ModeledError, AWSClientRu public internal(set) var requestID: Swift.String? public init( - message: Swift.String? = nil, - resourceId: Swift.String? = nil, - resourceType: Swift.String? = nil + message: Swift.String? = nil ) { self.properties.message = message - self.properties.resourceId = resourceId - self.properties.resourceType = resourceType } } -/// This exception occurs when you have exceeded the limit on the number of requests per second. -public struct ThrottlingException: ClientRuntime.ModeledError, AWSClientRuntime.AWSServiceError, ClientRuntime.HTTPError, Swift.Error { +public struct AcceptResourceGroupingRecommendationsInput { + /// Amazon Resource Name (ARN) of the Resilience Hub application. The format for this ARN is: arn:partition:resiliencehub:region:account:app/app-id. For more information about ARNs, see [ Amazon Resource Names (ARNs)](https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html) in the Amazon Web Services General Reference guide. + /// This member is required. + public var appArn: Swift.String? + /// Indicates the list of resource grouping recommendations you want to include in your application. + /// This member is required. + public var entries: [ResiliencehubClientTypes.AcceptGroupingRecommendationEntry]? + + public init( + appArn: Swift.String? = nil, + entries: [ResiliencehubClientTypes.AcceptGroupingRecommendationEntry]? = nil + ) + { + self.appArn = appArn + self.entries = entries + } +} + +extension ResiliencehubClientTypes { + /// Indicates the accepted grouping recommendation whose implementation failed. + public struct FailedGroupingRecommendationEntry { + /// Indicates the error that occurred while implementing a grouping recommendation. + /// This member is required. + public var errorMessage: Swift.String? + /// Indicates the identifier of the grouping recommendation. + /// This member is required. + public var groupingRecommendationId: Swift.String? + + public init( + errorMessage: Swift.String? = nil, + groupingRecommendationId: Swift.String? = nil + ) + { + self.errorMessage = errorMessage + self.groupingRecommendationId = groupingRecommendationId + } + } + +} + +public struct AcceptResourceGroupingRecommendationsOutput { + /// Amazon Resource Name (ARN) of the Resilience Hub application. The format for this ARN is: arn:partition:resiliencehub:region:account:app/app-id. For more information about ARNs, see [ Amazon Resource Names (ARNs)](https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html) in the Amazon Web Services General Reference guide. + /// This member is required. + public var appArn: Swift.String? + /// Indicates the list of resource grouping recommendations that could not be included in your application. + /// This member is required. + public var failedEntries: [ResiliencehubClientTypes.FailedGroupingRecommendationEntry]? + + public init( + appArn: Swift.String? = nil, + failedEntries: [ResiliencehubClientTypes.FailedGroupingRecommendationEntry]? = nil + ) + { + self.appArn = appArn + self.failedEntries = failedEntries + } +} + +/// This exception occurs when a conflict with a previous successful write is detected. This generally occurs when the previous write did not have time to propagate to the host serving the current request. A retry (with appropriate backoff logic) is the recommended response to this exception. +public struct ConflictException: ClientRuntime.ModeledError, AWSClientRuntime.AWSServiceError, ClientRuntime.HTTPError, Swift.Error { public struct Properties { public internal(set) var message: Swift.String? = nil - /// The number of seconds to wait before retrying the operation. - public internal(set) var retryAfterSeconds: Swift.Int? = nil + /// The identifier of the resource that the exception applies to. + public internal(set) var resourceId: Swift.String? = nil + /// The type of the resource that the exception applies to. + public internal(set) var resourceType: Swift.String? = nil } public internal(set) var properties = Properties() - public static var typeName: Swift.String { "ThrottlingException" } + public static var typeName: Swift.String { "ConflictException" } public static var fault: ClientRuntime.ErrorFault { .client } public static var isRetryable: Swift.Bool { false } public static var isThrottling: Swift.Bool { false } @@ -160,23 +257,25 @@ public struct ThrottlingException: ClientRuntime.ModeledError, AWSClientRuntime. public init( message: Swift.String? = nil, - retryAfterSeconds: Swift.Int? = nil + resourceId: Swift.String? = nil, + resourceType: Swift.String? = nil ) { self.properties.message = message - self.properties.retryAfterSeconds = retryAfterSeconds + self.properties.resourceId = resourceId + self.properties.resourceType = resourceType } } -/// This exception occurs when a request is not valid. -public struct ValidationException: ClientRuntime.ModeledError, AWSClientRuntime.AWSServiceError, ClientRuntime.HTTPError, Swift.Error { +/// This exception occurs when you have exceeded your service quota. To perform the requested action, remove some of the relevant resources, or use Service Quotas to request a service quota increase. +public struct ServiceQuotaExceededException: ClientRuntime.ModeledError, AWSClientRuntime.AWSServiceError, ClientRuntime.HTTPError, Swift.Error { public struct Properties { public internal(set) var message: Swift.String? = nil } public internal(set) var properties = Properties() - public static var typeName: Swift.String { "ValidationException" } + public static var typeName: Swift.String { "ServiceQuotaExceededException" } public static var fault: ClientRuntime.ErrorFault { .client } public static var isRetryable: Swift.Bool { false } public static var isThrottling: Swift.Bool { false } @@ -661,6 +760,8 @@ extension ResiliencehubClientTypes { public enum AppComplianceStatusType: Swift.Equatable, Swift.RawRepresentable, Swift.CaseIterable, Swift.Hashable { case changesDetected + case missingPolicy + case notApplicable case notAssessed case policyBreached case policyMet @@ -669,6 +770,8 @@ extension ResiliencehubClientTypes { public static var allCases: [AppComplianceStatusType] { return [ .changesDetected, + .missingPolicy, + .notApplicable, .notAssessed, .policyBreached, .policyMet @@ -683,6 +786,8 @@ extension ResiliencehubClientTypes { public var rawValue: Swift.String { switch self { case .changesDetected: return "ChangesDetected" + case .missingPolicy: return "MissingPolicy" + case .notApplicable: return "NotApplicable" case .notAssessed: return "NotAssessed" case .policyBreached: return "PolicyBreached" case .policyMet: return "PolicyMet" @@ -1035,12 +1140,16 @@ extension ResiliencehubClientTypes { extension ResiliencehubClientTypes { public enum ComplianceStatus: Swift.Equatable, Swift.RawRepresentable, Swift.CaseIterable, Swift.Hashable { + case missingPolicy + case notApplicable case policyBreached case policyMet case sdkUnknown(Swift.String) public static var allCases: [ComplianceStatus] { return [ + .missingPolicy, + .notApplicable, .policyBreached, .policyMet ] @@ -1053,6 +1162,8 @@ extension ResiliencehubClientTypes { public var rawValue: Swift.String { switch self { + case .missingPolicy: return "MissingPolicy" + case .notApplicable: return "NotApplicable" case .policyBreached: return "PolicyBreached" case .policyMet: return "PolicyMet" case let .sdkUnknown(s): return s @@ -1553,6 +1664,50 @@ extension ResiliencehubClientTypes { } +extension ResiliencehubClientTypes { + /// Indicates a specific risk identified in the Resilience Hub assessment and the corresponding recommendation provided to address that risk. The assessment summary generated by large language models (LLMs) on Amazon Bedrock are only suggestions. The current level of generative AI technology is not perfect and LLMs are not infallible. Bias and incorrect answers, although rare, should be expected. Review each recommendation in the assessment summary before you use the output from an LLM. This property is available only in the US East (N. Virginia) Region. + public struct AssessmentRiskRecommendation { + /// Indicates the Application Components (AppComponents) that were assessed as part of the assessnent and are associated with the identified risk and recommendation. This property is available only in the US East (N. Virginia) Region. + public var appComponents: [Swift.String]? + /// Indicates the recommendation provided by the Resilience Hub to address the identified risks in the application. This property is available only in the US East (N. Virginia) Region. + public var recommendation: Swift.String? + /// Indicates the description of the potential risk identified in the application as part of the Resilience Hub assessment. This property is available only in the US East (N. Virginia) Region. + public var risk: Swift.String? + + public init( + appComponents: [Swift.String]? = nil, + recommendation: Swift.String? = nil, + risk: Swift.String? = nil + ) + { + self.appComponents = appComponents + self.recommendation = recommendation + self.risk = risk + } + } + +} + +extension ResiliencehubClientTypes { + /// Indicates the AI-generated summary for the Resilience Hub assessment, providing a concise overview that highlights the top risks and recommendations. This property is available only in the US East (N. Virginia) Region. + public struct AssessmentSummary { + /// Indicates the top risks and recommendations identified by the Resilience Hub assessment, each representing a specific risk and the corresponding recommendation to address it. This property is available only in the US East (N. Virginia) Region. + public var riskRecommendations: [ResiliencehubClientTypes.AssessmentRiskRecommendation]? + /// Indicates a concise summary that provides an overview of the Resilience Hub assessment. This property is available only in the US East (N. Virginia) Region. + public var summary: Swift.String? + + public init( + riskRecommendations: [ResiliencehubClientTypes.AssessmentRiskRecommendation]? = nil, + summary: Swift.String? = nil + ) + { + self.riskRecommendations = riskRecommendations + self.summary = summary + } + } + +} + extension ResiliencehubClientTypes { /// Defines an application assessment. public struct AppAssessment { @@ -1591,6 +1746,8 @@ extension ResiliencehubClientTypes { public var resourceErrorsDetails: ResiliencehubClientTypes.ResourceErrorsDetails? /// Starting time for the action. public var startTime: Foundation.Date? + /// Indicates a concise summary that provides an overview of the Resilience Hub assessment. + public var summary: ResiliencehubClientTypes.AssessmentSummary? /// Tags assigned to the resource. A tag is a label that you assign to an Amazon Web Services resource. Each tag consists of a key/value pair. public var tags: [Swift.String: Swift.String]? /// Version name of the published application. @@ -1613,6 +1770,7 @@ extension ResiliencehubClientTypes { resiliencyScore: ResiliencehubClientTypes.ResiliencyScore? = nil, resourceErrorsDetails: ResiliencehubClientTypes.ResourceErrorsDetails? = nil, startTime: Foundation.Date? = nil, + summary: ResiliencehubClientTypes.AssessmentSummary? = nil, tags: [Swift.String: Swift.String]? = nil, versionName: Swift.String? = nil ) @@ -1633,6 +1791,7 @@ extension ResiliencehubClientTypes { self.resiliencyScore = resiliencyScore self.resourceErrorsDetails = resourceErrorsDetails self.startTime = startTime + self.summary = summary self.tags = tags self.versionName = versionName } @@ -1642,7 +1801,7 @@ extension ResiliencehubClientTypes { extension ResiliencehubClientTypes.AppAssessment: Swift.CustomDebugStringConvertible { public var debugDescription: Swift.String { - "AppAssessment(appArn: \(Swift.String(describing: appArn)), appVersion: \(Swift.String(describing: appVersion)), assessmentArn: \(Swift.String(describing: assessmentArn)), assessmentName: \(Swift.String(describing: assessmentName)), assessmentStatus: \(Swift.String(describing: assessmentStatus)), compliance: \(Swift.String(describing: compliance)), complianceStatus: \(Swift.String(describing: complianceStatus)), cost: \(Swift.String(describing: cost)), driftStatus: \(Swift.String(describing: driftStatus)), endTime: \(Swift.String(describing: endTime)), invoker: \(Swift.String(describing: invoker)), message: \(Swift.String(describing: message)), policy: \(Swift.String(describing: policy)), resiliencyScore: \(Swift.String(describing: resiliencyScore)), resourceErrorsDetails: \(Swift.String(describing: resourceErrorsDetails)), startTime: \(Swift.String(describing: startTime)), versionName: \(Swift.String(describing: versionName)), tags: \"CONTENT_REDACTED\")"} + "AppAssessment(appArn: \(Swift.String(describing: appArn)), appVersion: \(Swift.String(describing: appVersion)), assessmentArn: \(Swift.String(describing: assessmentArn)), assessmentName: \(Swift.String(describing: assessmentName)), assessmentStatus: \(Swift.String(describing: assessmentStatus)), compliance: \(Swift.String(describing: compliance)), complianceStatus: \(Swift.String(describing: complianceStatus)), cost: \(Swift.String(describing: cost)), driftStatus: \(Swift.String(describing: driftStatus)), endTime: \(Swift.String(describing: endTime)), invoker: \(Swift.String(describing: invoker)), message: \(Swift.String(describing: message)), policy: \(Swift.String(describing: policy)), resiliencyScore: \(Swift.String(describing: resiliencyScore)), resourceErrorsDetails: \(Swift.String(describing: resourceErrorsDetails)), startTime: \(Swift.String(describing: startTime)), summary: \(Swift.String(describing: summary)), versionName: \(Swift.String(describing: versionName)), tags: \"CONTENT_REDACTED\")"} } extension ResiliencehubClientTypes { @@ -1660,7 +1819,7 @@ extension ResiliencehubClientTypes { /// Current status of the assessment for the resiliency policy. /// This member is required. public var assessmentStatus: ResiliencehubClientTypes.AssessmentStatus? - /// TCurrent status of compliance for the resiliency policy. + /// Current status of compliance for the resiliency policy. public var complianceStatus: ResiliencehubClientTypes.ComplianceStatus? /// Cost for an application. public var cost: ResiliencehubClientTypes.Cost? @@ -2108,30 +2267,6 @@ public struct BatchUpdateRecommendationStatusOutput { } } -/// This exception occurs when you have exceeded your service quota. To perform the requested action, remove some of the relevant resources, or use Service Quotas to request a service quota increase. -public struct ServiceQuotaExceededException: ClientRuntime.ModeledError, AWSClientRuntime.AWSServiceError, ClientRuntime.HTTPError, Swift.Error { - - public struct Properties { - public internal(set) var message: Swift.String? = nil - } - - public internal(set) var properties = Properties() - public static var typeName: Swift.String { "ServiceQuotaExceededException" } - public static var fault: ClientRuntime.ErrorFault { .client } - public static var isRetryable: Swift.Bool { false } - public static var isThrottling: Swift.Bool { false } - public internal(set) var httpResponse = SmithyHTTPAPI.HTTPResponse() - public internal(set) var message: Swift.String? - public internal(set) var requestID: Swift.String? - - public init( - message: Swift.String? = nil - ) - { - self.properties.message = message - } -} - public struct CreateAppInput { /// Assessment execution schedule with 'Daily' or 'Disabled' values. public var assessmentSchedule: ResiliencehubClientTypes.AppAssessmentScheduleType? @@ -3536,6 +3671,80 @@ public struct DescribeResiliencyPolicyOutput { } } +public struct DescribeResourceGroupingRecommendationTaskInput { + /// Amazon Resource Name (ARN) of the Resilience Hub application. The format for this ARN is: arn:partition:resiliencehub:region:account:app/app-id. For more information about ARNs, see [ Amazon Resource Names (ARNs)](https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html) in the Amazon Web Services General Reference guide. + /// This member is required. + public var appArn: Swift.String? + /// Indicates the identifier of the grouping recommendation task. + public var groupingId: Swift.String? + + public init( + appArn: Swift.String? = nil, + groupingId: Swift.String? = nil + ) + { + self.appArn = appArn + self.groupingId = groupingId + } +} + +extension ResiliencehubClientTypes { + + public enum ResourcesGroupingRecGenStatusType: Swift.Equatable, Swift.RawRepresentable, Swift.CaseIterable, Swift.Hashable { + case failed + case inProgress + case pending + case success + case sdkUnknown(Swift.String) + + public static var allCases: [ResourcesGroupingRecGenStatusType] { + return [ + .failed, + .inProgress, + .pending, + .success + ] + } + + public init?(rawValue: Swift.String) { + let value = Self.allCases.first(where: { $0.rawValue == rawValue }) + self = value ?? Self.sdkUnknown(rawValue) + } + + public var rawValue: Swift.String { + switch self { + case .failed: return "Failed" + case .inProgress: return "InProgress" + case .pending: return "Pending" + case .success: return "Success" + case let .sdkUnknown(s): return s + } + } + } +} + +public struct DescribeResourceGroupingRecommendationTaskOutput { + /// Indicates the error that occurred while generating a grouping recommendation. + public var errorMessage: Swift.String? + /// Indicates the identifier of the grouping recommendation task. + /// This member is required. + public var groupingId: Swift.String? + /// Status of the action. + /// This member is required. + public var status: ResiliencehubClientTypes.ResourcesGroupingRecGenStatusType? + + public init( + errorMessage: Swift.String? = nil, + groupingId: Swift.String? = nil, + status: ResiliencehubClientTypes.ResourcesGroupingRecGenStatusType? = nil + ) + { + self.errorMessage = errorMessage + self.groupingId = groupingId + self.status = status + } +} + extension ResiliencehubClientTypes { /// The input source of the Amazon Elastic Kubernetes Service cluster. public struct EksSource { @@ -3693,9 +3902,9 @@ public struct ListAppAssessmentComplianceDriftsInput { /// Amazon Resource Name (ARN) of the assessment. The format for this ARN is: arn:partition:resiliencehub:region:account:app-assessment/app-id. For more information about ARNs, see [ Amazon Resource Names (ARNs)](https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html) in the Amazon Web Services General Reference guide. /// This member is required. public var assessmentArn: Swift.String? - /// Indicates the maximum number of applications requested. + /// Indicates the maximum number of compliance drifts requested. public var maxResults: Swift.Int? - /// Indicates the unique token number of the next application to be checked for compliance and regulatory requirements from the list of applications. + /// Null, or the token from a previous call to get the next set of results. public var nextToken: Swift.String? public init( @@ -3827,7 +4036,7 @@ public struct ListAppAssessmentComplianceDriftsOutput { /// Indicates compliance drifts (recovery time objective (RTO) and recovery point objective (RPO)) detected for an assessed entity. /// This member is required. public var complianceDrifts: [ResiliencehubClientTypes.ComplianceDrift]? - /// Token number of the next application to be checked for compliance and regulatory requirements from the list of applications. + /// Null, or the token from a previous call to get the next set of results. public var nextToken: Swift.String? public init( @@ -4219,13 +4428,15 @@ extension ResiliencehubClientTypes { case breachedCanMeet case breachedUnattainable case metCanImprove + case missingPolicy case sdkUnknown(Swift.String) public static var allCases: [RecommendationComplianceStatus] { return [ .breachedCanMeet, .breachedUnattainable, - .metCanImprove + .metCanImprove, + .missingPolicy ] } @@ -4239,6 +4450,7 @@ extension ResiliencehubClientTypes { case .breachedCanMeet: return "BreachedCanMeet" case .breachedUnattainable: return "BreachedUnattainable" case .metCanImprove: return "MetCanImprove" + case .missingPolicy: return "MissingPolicy" case let .sdkUnknown(s): return s } } @@ -4343,7 +4555,7 @@ public struct ListAppsInput { public var name: Swift.String? /// Null, or the token from a previous call to get the next set of results. public var nextToken: Swift.String? - /// The application list is sorted based on the values of lastAppComplianceEvaluationTime field. By default, application list is sorted in ascending order. To sort the appliation list in descending order, set this field to True. + /// The application list is sorted based on the values of lastAppComplianceEvaluationTime field. By default, application list is sorted in ascending order. To sort the application list in descending order, set this field to True. public var reverseOrder: Swift.Bool? /// Indicates the upper limit of the range that is used to filter the applications based on their last assessment times. public var toLastAssessmentTime: Foundation.Date? @@ -4667,17 +4879,270 @@ public struct ListResiliencyPoliciesOutput { } } -public struct ListSopRecommendationsInput { - /// Amazon Resource Name (ARN) of the assessment. The format for this ARN is: arn:partition:resiliencehub:region:account:app-assessment/app-id. For more information about ARNs, see [ Amazon Resource Names (ARNs)](https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html) in the Amazon Web Services General Reference guide. - /// This member is required. - public var assessmentArn: Swift.String? - /// Maximum number of results to include in the response. If more results exist than the specified MaxResults value, a token is included in the response so that the remaining results can be retrieved. +public struct ListResourceGroupingRecommendationsInput { + /// Amazon Resource Name (ARN) of the Resilience Hub application. The format for this ARN is: arn:partition:resiliencehub:region:account:app/app-id. For more information about ARNs, see [ Amazon Resource Names (ARNs)](https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html) in the Amazon Web Services General Reference guide. + public var appArn: Swift.String? + /// Maximum number of grouping recommendations to be displayed per Resilience Hub application. public var maxResults: Swift.Int? /// Null, or the token from a previous call to get the next set of results. public var nextToken: Swift.String? public init( - assessmentArn: Swift.String? = nil, + appArn: Swift.String? = nil, + maxResults: Swift.Int? = nil, + nextToken: Swift.String? = nil + ) + { + self.appArn = appArn + self.maxResults = maxResults + self.nextToken = nextToken + } +} + +extension ResiliencehubClientTypes { + + public enum GroupingRecommendationConfidenceLevel: Swift.Equatable, Swift.RawRepresentable, Swift.CaseIterable, Swift.Hashable { + case high + case medium + case sdkUnknown(Swift.String) + + public static var allCases: [GroupingRecommendationConfidenceLevel] { + return [ + .high, + .medium + ] + } + + public init?(rawValue: Swift.String) { + let value = Self.allCases.first(where: { $0.rawValue == rawValue }) + self = value ?? Self.sdkUnknown(rawValue) + } + + public var rawValue: Swift.String { + switch self { + case .high: return "High" + case .medium: return "Medium" + case let .sdkUnknown(s): return s + } + } + } +} + +extension ResiliencehubClientTypes { + /// Creates a new recommended Application Component (AppComponent). + public struct GroupingAppComponent { + /// Indicates the identifier of an AppComponent. + /// This member is required. + public var appComponentId: Swift.String? + /// Indicates the name of an AppComponent. + /// This member is required. + public var appComponentName: Swift.String? + /// Indicates the type of an AppComponent. + /// This member is required. + public var appComponentType: Swift.String? + + public init( + appComponentId: Swift.String? = nil, + appComponentName: Swift.String? = nil, + appComponentType: Swift.String? = nil + ) + { + self.appComponentId = appComponentId + self.appComponentName = appComponentName + self.appComponentType = appComponentType + } + } + +} + +extension ResiliencehubClientTypes { + + public enum GroupingRecommendationRejectionReason: Swift.Equatable, Swift.RawRepresentable, Swift.CaseIterable, Swift.Hashable { + case distinctBusinessPurpose + case distinctUserGroupHandling + case other + case separateDataConcern + case sdkUnknown(Swift.String) + + public static var allCases: [GroupingRecommendationRejectionReason] { + return [ + .distinctBusinessPurpose, + .distinctUserGroupHandling, + .other, + .separateDataConcern + ] + } + + public init?(rawValue: Swift.String) { + let value = Self.allCases.first(where: { $0.rawValue == rawValue }) + self = value ?? Self.sdkUnknown(rawValue) + } + + public var rawValue: Swift.String { + switch self { + case .distinctBusinessPurpose: return "DistinctBusinessPurpose" + case .distinctUserGroupHandling: return "DistinctUserGroupHandling" + case .other: return "Other" + case .separateDataConcern: return "SeparateDataConcern" + case let .sdkUnknown(s): return s + } + } + } +} + +extension ResiliencehubClientTypes { + /// Indicates the resource that will be grouped in the recommended Application Component (AppComponent). + public struct GroupingResource { + /// Indicates the logical identifier of the resource. + /// This member is required. + public var logicalResourceId: ResiliencehubClientTypes.LogicalResourceId? + /// Indicates the physical identifier of the resource. + /// This member is required. + public var physicalResourceId: ResiliencehubClientTypes.PhysicalResourceId? + /// Indicates the resource name. + /// This member is required. + public var resourceName: Swift.String? + /// Indicates the resource type. + /// This member is required. + public var resourceType: Swift.String? + /// Indicates the identifier of the source AppComponents in which the resources were previously grouped into. + /// This member is required. + public var sourceAppComponentIds: [Swift.String]? + + public init( + logicalResourceId: ResiliencehubClientTypes.LogicalResourceId? = nil, + physicalResourceId: ResiliencehubClientTypes.PhysicalResourceId? = nil, + resourceName: Swift.String? = nil, + resourceType: Swift.String? = nil, + sourceAppComponentIds: [Swift.String]? = nil + ) + { + self.logicalResourceId = logicalResourceId + self.physicalResourceId = physicalResourceId + self.resourceName = resourceName + self.resourceType = resourceType + self.sourceAppComponentIds = sourceAppComponentIds + } + } + +} + +extension ResiliencehubClientTypes { + + public enum GroupingRecommendationStatusType: Swift.Equatable, Swift.RawRepresentable, Swift.CaseIterable, Swift.Hashable { + case accepted + case pendingDecision + case rejected + case sdkUnknown(Swift.String) + + public static var allCases: [GroupingRecommendationStatusType] { + return [ + .accepted, + .pendingDecision, + .rejected + ] + } + + public init?(rawValue: Swift.String) { + let value = Self.allCases.first(where: { $0.rawValue == rawValue }) + self = value ?? Self.sdkUnknown(rawValue) + } + + public var rawValue: Swift.String { + switch self { + case .accepted: return "Accepted" + case .pendingDecision: return "PendingDecision" + case .rejected: return "Rejected" + case let .sdkUnknown(s): return s + } + } + } +} + +extension ResiliencehubClientTypes { + /// Creates a new grouping recommendation. + public struct GroupingRecommendation { + /// Indicates the confidence level of Resilience Hub on the grouping recommendation. + /// This member is required. + public var confidenceLevel: ResiliencehubClientTypes.GroupingRecommendationConfidenceLevel? + /// Indicates the creation time of the grouping recommendation. + /// This member is required. + public var creationTime: Foundation.Date? + /// Indicates the name of the recommended Application Component (AppComponent). + /// This member is required. + public var groupingAppComponent: ResiliencehubClientTypes.GroupingAppComponent? + /// Indicates all the reasons available for rejecting a grouping recommendation. + /// This member is required. + public var groupingRecommendationId: Swift.String? + /// Indicates all the reasons available for rejecting a grouping recommendation. + /// This member is required. + public var recommendationReasons: [Swift.String]? + /// Indicates the reason you had selected while rejecting a grouping recommendation. + public var rejectionReason: ResiliencehubClientTypes.GroupingRecommendationRejectionReason? + /// Indicates the resources that are grouped in a recommended AppComponent. + /// This member is required. + public var resources: [ResiliencehubClientTypes.GroupingResource]? + /// Indicates the confidence level of the grouping recommendation. + /// This member is required. + public var score: Swift.Double + /// Indicates the status of grouping resources into AppComponents. + /// This member is required. + public var status: ResiliencehubClientTypes.GroupingRecommendationStatusType? + + public init( + confidenceLevel: ResiliencehubClientTypes.GroupingRecommendationConfidenceLevel? = nil, + creationTime: Foundation.Date? = nil, + groupingAppComponent: ResiliencehubClientTypes.GroupingAppComponent? = nil, + groupingRecommendationId: Swift.String? = nil, + recommendationReasons: [Swift.String]? = nil, + rejectionReason: ResiliencehubClientTypes.GroupingRecommendationRejectionReason? = nil, + resources: [ResiliencehubClientTypes.GroupingResource]? = nil, + score: Swift.Double = 0.0, + status: ResiliencehubClientTypes.GroupingRecommendationStatusType? = nil + ) + { + self.confidenceLevel = confidenceLevel + self.creationTime = creationTime + self.groupingAppComponent = groupingAppComponent + self.groupingRecommendationId = groupingRecommendationId + self.recommendationReasons = recommendationReasons + self.rejectionReason = rejectionReason + self.resources = resources + self.score = score + self.status = status + } + } + +} + +public struct ListResourceGroupingRecommendationsOutput { + /// List of resource grouping recommendations generated by Resilience Hub. + /// This member is required. + public var groupingRecommendations: [ResiliencehubClientTypes.GroupingRecommendation]? + /// Null, or the token from a previous call to get the next set of results. + public var nextToken: Swift.String? + + public init( + groupingRecommendations: [ResiliencehubClientTypes.GroupingRecommendation]? = nil, + nextToken: Swift.String? = nil + ) + { + self.groupingRecommendations = groupingRecommendations + self.nextToken = nextToken + } +} + +public struct ListSopRecommendationsInput { + /// Amazon Resource Name (ARN) of the assessment. The format for this ARN is: arn:partition:resiliencehub:region:account:app-assessment/app-id. For more information about ARNs, see [ Amazon Resource Names (ARNs)](https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html) in the Amazon Web Services General Reference guide. + /// This member is required. + public var assessmentArn: Swift.String? + /// Maximum number of results to include in the response. If more results exist than the specified MaxResults value, a token is included in the response so that the remaining results can be retrieved. + public var maxResults: Swift.Int? + /// Null, or the token from a previous call to get the next set of results. + public var nextToken: Swift.String? + + public init( + assessmentArn: Swift.String? = nil, maxResults: Swift.Int? = nil, nextToken: Swift.String? = nil ) @@ -5244,6 +5709,63 @@ public struct PutDraftAppVersionTemplateOutput { } } +extension ResiliencehubClientTypes { + /// Indicates the rejected grouping recommendation. + public struct RejectGroupingRecommendationEntry { + /// Indicates the identifier of the grouping recommendation. + /// This member is required. + public var groupingRecommendationId: Swift.String? + /// Indicates the reason you had selected while rejecting a grouping recommendation. + public var rejectionReason: ResiliencehubClientTypes.GroupingRecommendationRejectionReason? + + public init( + groupingRecommendationId: Swift.String? = nil, + rejectionReason: ResiliencehubClientTypes.GroupingRecommendationRejectionReason? = nil + ) + { + self.groupingRecommendationId = groupingRecommendationId + self.rejectionReason = rejectionReason + } + } + +} + +public struct RejectResourceGroupingRecommendationsInput { + /// Amazon Resource Name (ARN) of the Resilience Hub application. The format for this ARN is: arn:partition:resiliencehub:region:account:app/app-id. For more information about ARNs, see [ Amazon Resource Names (ARNs)](https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html) in the Amazon Web Services General Reference guide. + /// This member is required. + public var appArn: Swift.String? + /// Indicates the list of resource grouping recommendations you have selected to exclude from your application. + /// This member is required. + public var entries: [ResiliencehubClientTypes.RejectGroupingRecommendationEntry]? + + public init( + appArn: Swift.String? = nil, + entries: [ResiliencehubClientTypes.RejectGroupingRecommendationEntry]? = nil + ) + { + self.appArn = appArn + self.entries = entries + } +} + +public struct RejectResourceGroupingRecommendationsOutput { + /// Amazon Resource Name (ARN) of the Resilience Hub application. The format for this ARN is: arn:partition:resiliencehub:region:account:app/app-id. For more information about ARNs, see [ Amazon Resource Names (ARNs)](https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html) in the Amazon Web Services General Reference guide. + /// This member is required. + public var appArn: Swift.String? + /// Indicates the list of resource grouping recommendations that failed to get excluded in your application. + /// This member is required. + public var failedEntries: [ResiliencehubClientTypes.FailedGroupingRecommendationEntry]? + + public init( + appArn: Swift.String? = nil, + failedEntries: [ResiliencehubClientTypes.FailedGroupingRecommendationEntry]? = nil + ) + { + self.appArn = appArn + self.failedEntries = failedEntries + } +} + public struct RemoveDraftAppVersionResourceMappingsInput { /// Amazon Resource Name (ARN) of the Resilience Hub application. The format for this ARN is: arn:partition:resiliencehub:region:account:app/app-id. For more information about ARNs, see [ Amazon Resource Names (ARNs)](https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html) in the Amazon Web Services General Reference guide. /// This member is required. @@ -5392,6 +5914,46 @@ public struct StartAppAssessmentOutput { } } +public struct StartResourceGroupingRecommendationTaskInput { + /// Amazon Resource Name (ARN) of the Resilience Hub application. The format for this ARN is: arn:partition:resiliencehub:region:account:app/app-id. For more information about ARNs, see [ Amazon Resource Names (ARNs)](https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html) in the Amazon Web Services General Reference guide. + /// This member is required. + public var appArn: Swift.String? + + public init( + appArn: Swift.String? = nil + ) + { + self.appArn = appArn + } +} + +public struct StartResourceGroupingRecommendationTaskOutput { + /// Amazon Resource Name (ARN) of the Resilience Hub application. The format for this ARN is: arn:partition:resiliencehub:region:account:app/app-id. For more information about ARNs, see [ Amazon Resource Names (ARNs)](https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html) in the Amazon Web Services General Reference guide. + /// This member is required. + public var appArn: Swift.String? + /// Indicates the error that occurred while executing a grouping recommendation task. + public var errorMessage: Swift.String? + /// Indicates the identifier of the grouping recommendation task. + /// This member is required. + public var groupingId: Swift.String? + /// Status of the action. + /// This member is required. + public var status: ResiliencehubClientTypes.ResourcesGroupingRecGenStatusType? + + public init( + appArn: Swift.String? = nil, + errorMessage: Swift.String? = nil, + groupingId: Swift.String? = nil, + status: ResiliencehubClientTypes.ResourcesGroupingRecGenStatusType? = nil + ) + { + self.appArn = appArn + self.errorMessage = errorMessage + self.groupingId = groupingId + self.status = status + } +} + public struct TagResourceInput { /// Amazon Resource Name (ARN) of the resource. /// This member is required. @@ -5706,6 +6268,13 @@ public struct UpdateResiliencyPolicyOutput { } } +extension AcceptResourceGroupingRecommendationsInput { + + static func urlPathProvider(_ value: AcceptResourceGroupingRecommendationsInput) -> Swift.String? { + return "/accept-resource-grouping-recommendations" + } +} + extension AddDraftAppVersionResourceMappingsInput { static func urlPathProvider(_ value: AddDraftAppVersionResourceMappingsInput) -> Swift.String? { @@ -5867,6 +6436,13 @@ extension DescribeResiliencyPolicyInput { } } +extension DescribeResourceGroupingRecommendationTaskInput { + + static func urlPathProvider(_ value: DescribeResourceGroupingRecommendationTaskInput) -> Swift.String? { + return "/describe-resource-grouping-recommendation-task" + } +} + extension ImportResourcesToDraftAppVersionInput { static func urlPathProvider(_ value: ImportResourcesToDraftAppVersionInput) -> Swift.String? { @@ -6108,6 +6684,33 @@ extension ListResiliencyPoliciesInput { } } +extension ListResourceGroupingRecommendationsInput { + + static func urlPathProvider(_ value: ListResourceGroupingRecommendationsInput) -> Swift.String? { + return "/list-resource-grouping-recommendations" + } +} + +extension ListResourceGroupingRecommendationsInput { + + static func queryItemProvider(_ value: ListResourceGroupingRecommendationsInput) throws -> [Smithy.URIQueryItem] { + var items = [Smithy.URIQueryItem]() + if let nextToken = value.nextToken { + let nextTokenQueryItem = Smithy.URIQueryItem(name: "nextToken".urlPercentEncoding(), value: Swift.String(nextToken).urlPercentEncoding()) + items.append(nextTokenQueryItem) + } + if let maxResults = value.maxResults { + let maxResultsQueryItem = Smithy.URIQueryItem(name: "maxResults".urlPercentEncoding(), value: Swift.String(maxResults).urlPercentEncoding()) + items.append(maxResultsQueryItem) + } + if let appArn = value.appArn { + let appArnQueryItem = Smithy.URIQueryItem(name: "appArn".urlPercentEncoding(), value: Swift.String(appArn).urlPercentEncoding()) + items.append(appArnQueryItem) + } + return items + } +} + extension ListSopRecommendationsInput { static func urlPathProvider(_ value: ListSopRecommendationsInput) -> Swift.String? { @@ -6176,6 +6779,13 @@ extension PutDraftAppVersionTemplateInput { } } +extension RejectResourceGroupingRecommendationsInput { + + static func urlPathProvider(_ value: RejectResourceGroupingRecommendationsInput) -> Swift.String? { + return "/reject-resource-grouping-recommendations" + } +} + extension RemoveDraftAppVersionResourceMappingsInput { static func urlPathProvider(_ value: RemoveDraftAppVersionResourceMappingsInput) -> Swift.String? { @@ -6197,6 +6807,13 @@ extension StartAppAssessmentInput { } } +extension StartResourceGroupingRecommendationTaskInput { + + static func urlPathProvider(_ value: StartResourceGroupingRecommendationTaskInput) -> Swift.String? { + return "/start-resource-grouping-recommendation-task" + } +} + extension TagResourceInput { static func urlPathProvider(_ value: TagResourceInput) -> Swift.String? { @@ -6268,6 +6885,15 @@ extension UpdateResiliencyPolicyInput { } } +extension AcceptResourceGroupingRecommendationsInput { + + static func write(value: AcceptResourceGroupingRecommendationsInput?, to writer: SmithyJSON.Writer) throws { + guard let value else { return } + try writer["appArn"].write(value.appArn) + try writer["entries"].writeList(value.entries, memberWritingClosure: ResiliencehubClientTypes.AcceptGroupingRecommendationEntry.write(value:to:), memberNodeInfo: "member", isFlattened: false) + } +} + extension AddDraftAppVersionResourceMappingsInput { static func write(value: AddDraftAppVersionResourceMappingsInput?, to writer: SmithyJSON.Writer) throws { @@ -6517,6 +7143,15 @@ extension DescribeResiliencyPolicyInput { } } +extension DescribeResourceGroupingRecommendationTaskInput { + + static func write(value: DescribeResourceGroupingRecommendationTaskInput?, to writer: SmithyJSON.Writer) throws { + guard let value else { return } + try writer["appArn"].write(value.appArn) + try writer["groupingId"].write(value.groupingId) + } +} + extension ImportResourcesToDraftAppVersionInput { static func write(value: ImportResourcesToDraftAppVersionInput?, to writer: SmithyJSON.Writer) throws { @@ -6686,6 +7321,15 @@ extension PutDraftAppVersionTemplateInput { } } +extension RejectResourceGroupingRecommendationsInput { + + static func write(value: RejectResourceGroupingRecommendationsInput?, to writer: SmithyJSON.Writer) throws { + guard let value else { return } + try writer["appArn"].write(value.appArn) + try writer["entries"].writeList(value.entries, memberWritingClosure: ResiliencehubClientTypes.RejectGroupingRecommendationEntry.write(value:to:), memberNodeInfo: "member", isFlattened: false) + } +} + extension RemoveDraftAppVersionResourceMappingsInput { static func write(value: RemoveDraftAppVersionResourceMappingsInput?, to writer: SmithyJSON.Writer) throws { @@ -6721,6 +7365,14 @@ extension StartAppAssessmentInput { } } +extension StartResourceGroupingRecommendationTaskInput { + + static func write(value: StartResourceGroupingRecommendationTaskInput?, to writer: SmithyJSON.Writer) throws { + guard let value else { return } + try writer["appArn"].write(value.appArn) + } +} + extension TagResourceInput { static func write(value: TagResourceInput?, to writer: SmithyJSON.Writer) throws { @@ -6794,6 +7446,19 @@ extension UpdateResiliencyPolicyInput { } } +extension AcceptResourceGroupingRecommendationsOutput { + + static func httpOutput(from httpResponse: SmithyHTTPAPI.HTTPResponse) async throws -> AcceptResourceGroupingRecommendationsOutput { + let data = try await httpResponse.data() + let responseReader = try SmithyJSON.Reader.from(data: data) + let reader = responseReader + var value = AcceptResourceGroupingRecommendationsOutput() + value.appArn = try reader["appArn"].readIfPresent() + value.failedEntries = try reader["failedEntries"].readListIfPresent(memberReadingClosure: ResiliencehubClientTypes.FailedGroupingRecommendationEntry.read(from:), memberNodeInfo: "member", isFlattened: false) + return value + } +} + extension AddDraftAppVersionResourceMappingsOutput { static func httpOutput(from httpResponse: SmithyHTTPAPI.HTTPResponse) async throws -> AddDraftAppVersionResourceMappingsOutput { @@ -7101,6 +7766,20 @@ extension DescribeResiliencyPolicyOutput { } } +extension DescribeResourceGroupingRecommendationTaskOutput { + + static func httpOutput(from httpResponse: SmithyHTTPAPI.HTTPResponse) async throws -> DescribeResourceGroupingRecommendationTaskOutput { + let data = try await httpResponse.data() + let responseReader = try SmithyJSON.Reader.from(data: data) + let reader = responseReader + var value = DescribeResourceGroupingRecommendationTaskOutput() + value.errorMessage = try reader["errorMessage"].readIfPresent() + value.groupingId = try reader["groupingId"].readIfPresent() + value.status = try reader["status"].readIfPresent() + return value + } +} + extension ImportResourcesToDraftAppVersionOutput { static func httpOutput(from httpResponse: SmithyHTTPAPI.HTTPResponse) async throws -> ImportResourcesToDraftAppVersionOutput { @@ -7303,6 +7982,19 @@ extension ListResiliencyPoliciesOutput { } } +extension ListResourceGroupingRecommendationsOutput { + + static func httpOutput(from httpResponse: SmithyHTTPAPI.HTTPResponse) async throws -> ListResourceGroupingRecommendationsOutput { + let data = try await httpResponse.data() + let responseReader = try SmithyJSON.Reader.from(data: data) + let reader = responseReader + var value = ListResourceGroupingRecommendationsOutput() + value.groupingRecommendations = try reader["groupingRecommendations"].readListIfPresent(memberReadingClosure: ResiliencehubClientTypes.GroupingRecommendation.read(from:), memberNodeInfo: "member", isFlattened: false) + value.nextToken = try reader["nextToken"].readIfPresent() + return value + } +} + extension ListSopRecommendationsOutput { static func httpOutput(from httpResponse: SmithyHTTPAPI.HTTPResponse) async throws -> ListSopRecommendationsOutput { @@ -7396,6 +8088,19 @@ extension PutDraftAppVersionTemplateOutput { } } +extension RejectResourceGroupingRecommendationsOutput { + + static func httpOutput(from httpResponse: SmithyHTTPAPI.HTTPResponse) async throws -> RejectResourceGroupingRecommendationsOutput { + let data = try await httpResponse.data() + let responseReader = try SmithyJSON.Reader.from(data: data) + let reader = responseReader + var value = RejectResourceGroupingRecommendationsOutput() + value.appArn = try reader["appArn"].readIfPresent() + value.failedEntries = try reader["failedEntries"].readListIfPresent(memberReadingClosure: ResiliencehubClientTypes.FailedGroupingRecommendationEntry.read(from:), memberNodeInfo: "member", isFlattened: false) + return value + } +} + extension RemoveDraftAppVersionResourceMappingsOutput { static func httpOutput(from httpResponse: SmithyHTTPAPI.HTTPResponse) async throws -> RemoveDraftAppVersionResourceMappingsOutput { @@ -7436,6 +8141,21 @@ extension StartAppAssessmentOutput { } } +extension StartResourceGroupingRecommendationTaskOutput { + + static func httpOutput(from httpResponse: SmithyHTTPAPI.HTTPResponse) async throws -> StartResourceGroupingRecommendationTaskOutput { + let data = try await httpResponse.data() + let responseReader = try SmithyJSON.Reader.from(data: data) + let reader = responseReader + var value = StartResourceGroupingRecommendationTaskOutput() + value.appArn = try reader["appArn"].readIfPresent() + value.errorMessage = try reader["errorMessage"].readIfPresent() + value.groupingId = try reader["groupingId"].readIfPresent() + value.status = try reader["status"].readIfPresent() + return value + } +} + extension TagResourceOutput { static func httpOutput(from httpResponse: SmithyHTTPAPI.HTTPResponse) async throws -> TagResourceOutput { @@ -7516,6 +8236,24 @@ extension UpdateResiliencyPolicyOutput { } } +enum AcceptResourceGroupingRecommendationsOutputError { + + static func httpError(from httpResponse: SmithyHTTPAPI.HTTPResponse) async throws -> Swift.Error { + let data = try await httpResponse.data() + let responseReader = try SmithyJSON.Reader.from(data: data) + let baseError = try AWSClientRuntime.RestJSONError(httpResponse: httpResponse, responseReader: responseReader, noErrorWrapping: false) + if let error = baseError.customError() { return error } + switch baseError.code { + case "AccessDeniedException": return try AccessDeniedException.makeError(baseError: baseError) + case "InternalServerException": return try InternalServerException.makeError(baseError: baseError) + case "ResourceNotFoundException": return try ResourceNotFoundException.makeError(baseError: baseError) + case "ThrottlingException": return try ThrottlingException.makeError(baseError: baseError) + case "ValidationException": return try ValidationException.makeError(baseError: baseError) + default: return try AWSClientRuntime.UnknownAWSHTTPServiceError.makeError(baseError: baseError) + } + } +} + enum AddDraftAppVersionResourceMappingsOutputError { static func httpError(from httpResponse: SmithyHTTPAPI.HTTPResponse) async throws -> Swift.Error { @@ -7528,6 +8266,7 @@ enum AddDraftAppVersionResourceMappingsOutputError { case "ConflictException": return try ConflictException.makeError(baseError: baseError) case "InternalServerException": return try InternalServerException.makeError(baseError: baseError) case "ResourceNotFoundException": return try ResourceNotFoundException.makeError(baseError: baseError) + case "ServiceQuotaExceededException": return try ServiceQuotaExceededException.makeError(baseError: baseError) case "ThrottlingException": return try ThrottlingException.makeError(baseError: baseError) case "ValidationException": return try ValidationException.makeError(baseError: baseError) default: return try AWSClientRuntime.UnknownAWSHTTPServiceError.makeError(baseError: baseError) @@ -7947,6 +8686,24 @@ enum DescribeResiliencyPolicyOutputError { } } +enum DescribeResourceGroupingRecommendationTaskOutputError { + + static func httpError(from httpResponse: SmithyHTTPAPI.HTTPResponse) async throws -> Swift.Error { + let data = try await httpResponse.data() + let responseReader = try SmithyJSON.Reader.from(data: data) + let baseError = try AWSClientRuntime.RestJSONError(httpResponse: httpResponse, responseReader: responseReader, noErrorWrapping: false) + if let error = baseError.customError() { return error } + switch baseError.code { + case "AccessDeniedException": return try AccessDeniedException.makeError(baseError: baseError) + case "InternalServerException": return try InternalServerException.makeError(baseError: baseError) + case "ResourceNotFoundException": return try ResourceNotFoundException.makeError(baseError: baseError) + case "ThrottlingException": return try ThrottlingException.makeError(baseError: baseError) + case "ValidationException": return try ValidationException.makeError(baseError: baseError) + default: return try AWSClientRuntime.UnknownAWSHTTPServiceError.makeError(baseError: baseError) + } + } +} + enum ImportResourcesToDraftAppVersionOutputError { static func httpError(from httpResponse: SmithyHTTPAPI.HTTPResponse) async throws -> Swift.Error { @@ -8216,6 +8973,24 @@ enum ListResiliencyPoliciesOutputError { } } +enum ListResourceGroupingRecommendationsOutputError { + + static func httpError(from httpResponse: SmithyHTTPAPI.HTTPResponse) async throws -> Swift.Error { + let data = try await httpResponse.data() + let responseReader = try SmithyJSON.Reader.from(data: data) + let baseError = try AWSClientRuntime.RestJSONError(httpResponse: httpResponse, responseReader: responseReader, noErrorWrapping: false) + if let error = baseError.customError() { return error } + switch baseError.code { + case "AccessDeniedException": return try AccessDeniedException.makeError(baseError: baseError) + case "InternalServerException": return try InternalServerException.makeError(baseError: baseError) + case "ResourceNotFoundException": return try ResourceNotFoundException.makeError(baseError: baseError) + case "ThrottlingException": return try ThrottlingException.makeError(baseError: baseError) + case "ValidationException": return try ValidationException.makeError(baseError: baseError) + default: return try AWSClientRuntime.UnknownAWSHTTPServiceError.makeError(baseError: baseError) + } + } +} + enum ListSopRecommendationsOutputError { static func httpError(from httpResponse: SmithyHTTPAPI.HTTPResponse) async throws -> Swift.Error { @@ -8347,6 +9122,24 @@ enum PutDraftAppVersionTemplateOutputError { } } +enum RejectResourceGroupingRecommendationsOutputError { + + static func httpError(from httpResponse: SmithyHTTPAPI.HTTPResponse) async throws -> Swift.Error { + let data = try await httpResponse.data() + let responseReader = try SmithyJSON.Reader.from(data: data) + let baseError = try AWSClientRuntime.RestJSONError(httpResponse: httpResponse, responseReader: responseReader, noErrorWrapping: false) + if let error = baseError.customError() { return error } + switch baseError.code { + case "AccessDeniedException": return try AccessDeniedException.makeError(baseError: baseError) + case "InternalServerException": return try InternalServerException.makeError(baseError: baseError) + case "ResourceNotFoundException": return try ResourceNotFoundException.makeError(baseError: baseError) + case "ThrottlingException": return try ThrottlingException.makeError(baseError: baseError) + case "ValidationException": return try ValidationException.makeError(baseError: baseError) + default: return try AWSClientRuntime.UnknownAWSHTTPServiceError.makeError(baseError: baseError) + } + } +} + enum RemoveDraftAppVersionResourceMappingsOutputError { static func httpError(from httpResponse: SmithyHTTPAPI.HTTPResponse) async throws -> Swift.Error { @@ -8405,6 +9198,25 @@ enum StartAppAssessmentOutputError { } } +enum StartResourceGroupingRecommendationTaskOutputError { + + static func httpError(from httpResponse: SmithyHTTPAPI.HTTPResponse) async throws -> Swift.Error { + let data = try await httpResponse.data() + let responseReader = try SmithyJSON.Reader.from(data: data) + let baseError = try AWSClientRuntime.RestJSONError(httpResponse: httpResponse, responseReader: responseReader, noErrorWrapping: false) + if let error = baseError.customError() { return error } + switch baseError.code { + case "AccessDeniedException": return try AccessDeniedException.makeError(baseError: baseError) + case "ConflictException": return try ConflictException.makeError(baseError: baseError) + case "InternalServerException": return try InternalServerException.makeError(baseError: baseError) + case "ResourceNotFoundException": return try ResourceNotFoundException.makeError(baseError: baseError) + case "ThrottlingException": return try ThrottlingException.makeError(baseError: baseError) + case "ValidationException": return try ValidationException.makeError(baseError: baseError) + default: return try AWSClientRuntime.UnknownAWSHTTPServiceError.makeError(baseError: baseError) + } + } +} + enum TagResourceOutputError { static func httpError(from httpResponse: SmithyHTTPAPI.HTTPResponse) async throws -> Swift.Error { @@ -8579,14 +9391,12 @@ extension ResourceNotFoundException { } } -extension ConflictException { +extension ValidationException { - static func makeError(baseError: AWSClientRuntime.RestJSONError) throws -> ConflictException { + static func makeError(baseError: AWSClientRuntime.RestJSONError) throws -> ValidationException { let reader = baseError.errorBodyReader - var value = ConflictException() + var value = ValidationException() value.properties.message = try reader["message"].readIfPresent() - value.properties.resourceId = try reader["resourceId"].readIfPresent() - value.properties.resourceType = try reader["resourceType"].readIfPresent() value.httpResponse = baseError.httpResponse value.requestID = baseError.requestID value.message = baseError.message @@ -8594,11 +9404,11 @@ extension ConflictException { } } -extension ValidationException { +extension InternalServerException { - static func makeError(baseError: AWSClientRuntime.RestJSONError) throws -> ValidationException { + static func makeError(baseError: AWSClientRuntime.RestJSONError) throws -> InternalServerException { let reader = baseError.errorBodyReader - var value = ValidationException() + var value = InternalServerException() value.properties.message = try reader["message"].readIfPresent() value.httpResponse = baseError.httpResponse value.requestID = baseError.requestID @@ -8607,11 +9417,11 @@ extension ValidationException { } } -extension InternalServerException { +extension ServiceQuotaExceededException { - static func makeError(baseError: AWSClientRuntime.RestJSONError) throws -> InternalServerException { + static func makeError(baseError: AWSClientRuntime.RestJSONError) throws -> ServiceQuotaExceededException { let reader = baseError.errorBodyReader - var value = InternalServerException() + var value = ServiceQuotaExceededException() value.properties.message = try reader["message"].readIfPresent() value.httpResponse = baseError.httpResponse value.requestID = baseError.requestID @@ -8620,12 +9430,14 @@ extension InternalServerException { } } -extension ServiceQuotaExceededException { +extension ConflictException { - static func makeError(baseError: AWSClientRuntime.RestJSONError) throws -> ServiceQuotaExceededException { + static func makeError(baseError: AWSClientRuntime.RestJSONError) throws -> ConflictException { let reader = baseError.errorBodyReader - var value = ServiceQuotaExceededException() + var value = ConflictException() value.properties.message = try reader["message"].readIfPresent() + value.properties.resourceId = try reader["resourceId"].readIfPresent() + value.properties.resourceType = try reader["resourceType"].readIfPresent() value.httpResponse = baseError.httpResponse value.requestID = baseError.requestID value.message = baseError.message @@ -8633,6 +9445,17 @@ extension ServiceQuotaExceededException { } } +extension ResiliencehubClientTypes.FailedGroupingRecommendationEntry { + + static func read(from reader: SmithyJSON.Reader) throws -> ResiliencehubClientTypes.FailedGroupingRecommendationEntry { + guard reader.hasContent else { throw SmithyReadWrite.ReaderError.requiredValueNotPresent } + var value = ResiliencehubClientTypes.FailedGroupingRecommendationEntry() + value.groupingRecommendationId = try reader["groupingRecommendationId"].readIfPresent() + value.errorMessage = try reader["errorMessage"].readIfPresent() + return value + } +} + extension ResiliencehubClientTypes.ResourceMapping { static func write(value: ResiliencehubClientTypes.ResourceMapping?, to writer: SmithyJSON.Writer) throws { @@ -8985,6 +9808,30 @@ extension ResiliencehubClientTypes.AppAssessment { value.resourceErrorsDetails = try reader["resourceErrorsDetails"].readIfPresent(with: ResiliencehubClientTypes.ResourceErrorsDetails.read(from:)) value.versionName = try reader["versionName"].readIfPresent() value.driftStatus = try reader["driftStatus"].readIfPresent() + value.summary = try reader["summary"].readIfPresent(with: ResiliencehubClientTypes.AssessmentSummary.read(from:)) + return value + } +} + +extension ResiliencehubClientTypes.AssessmentSummary { + + static func read(from reader: SmithyJSON.Reader) throws -> ResiliencehubClientTypes.AssessmentSummary { + guard reader.hasContent else { throw SmithyReadWrite.ReaderError.requiredValueNotPresent } + var value = ResiliencehubClientTypes.AssessmentSummary() + value.summary = try reader["summary"].readIfPresent() + value.riskRecommendations = try reader["riskRecommendations"].readListIfPresent(memberReadingClosure: ResiliencehubClientTypes.AssessmentRiskRecommendation.read(from:), memberNodeInfo: "member", isFlattened: false) + return value + } +} + +extension ResiliencehubClientTypes.AssessmentRiskRecommendation { + + static func read(from reader: SmithyJSON.Reader) throws -> ResiliencehubClientTypes.AssessmentRiskRecommendation { + guard reader.hasContent else { throw SmithyReadWrite.ReaderError.requiredValueNotPresent } + var value = ResiliencehubClientTypes.AssessmentRiskRecommendation() + value.risk = try reader["risk"].readIfPresent() + value.recommendation = try reader["recommendation"].readIfPresent() + value.appComponents = try reader["appComponents"].readListIfPresent(memberReadingClosure: SmithyReadWrite.ReadingClosures.readString(from:), memberNodeInfo: "member", isFlattened: false) return value } } @@ -9280,6 +10127,50 @@ extension ResiliencehubClientTypes.AppVersionSummary { } } +extension ResiliencehubClientTypes.GroupingRecommendation { + + static func read(from reader: SmithyJSON.Reader) throws -> ResiliencehubClientTypes.GroupingRecommendation { + guard reader.hasContent else { throw SmithyReadWrite.ReaderError.requiredValueNotPresent } + var value = ResiliencehubClientTypes.GroupingRecommendation() + value.groupingRecommendationId = try reader["groupingRecommendationId"].readIfPresent() + value.groupingAppComponent = try reader["groupingAppComponent"].readIfPresent(with: ResiliencehubClientTypes.GroupingAppComponent.read(from:)) + value.resources = try reader["resources"].readListIfPresent(memberReadingClosure: ResiliencehubClientTypes.GroupingResource.read(from:), memberNodeInfo: "member", isFlattened: false) + value.score = try reader["score"].readIfPresent() ?? 0 + value.recommendationReasons = try reader["recommendationReasons"].readListIfPresent(memberReadingClosure: SmithyReadWrite.ReadingClosures.readString(from:), memberNodeInfo: "member", isFlattened: false) + value.status = try reader["status"].readIfPresent() + value.confidenceLevel = try reader["confidenceLevel"].readIfPresent() + value.creationTime = try reader["creationTime"].readTimestampIfPresent(format: .epochSeconds) + value.rejectionReason = try reader["rejectionReason"].readIfPresent() + return value + } +} + +extension ResiliencehubClientTypes.GroupingResource { + + static func read(from reader: SmithyJSON.Reader) throws -> ResiliencehubClientTypes.GroupingResource { + guard reader.hasContent else { throw SmithyReadWrite.ReaderError.requiredValueNotPresent } + var value = ResiliencehubClientTypes.GroupingResource() + value.resourceName = try reader["resourceName"].readIfPresent() + value.resourceType = try reader["resourceType"].readIfPresent() + value.physicalResourceId = try reader["physicalResourceId"].readIfPresent(with: ResiliencehubClientTypes.PhysicalResourceId.read(from:)) + value.logicalResourceId = try reader["logicalResourceId"].readIfPresent(with: ResiliencehubClientTypes.LogicalResourceId.read(from:)) + value.sourceAppComponentIds = try reader["sourceAppComponentIds"].readListIfPresent(memberReadingClosure: SmithyReadWrite.ReadingClosures.readString(from:), memberNodeInfo: "member", isFlattened: false) + return value + } +} + +extension ResiliencehubClientTypes.GroupingAppComponent { + + static func read(from reader: SmithyJSON.Reader) throws -> ResiliencehubClientTypes.GroupingAppComponent { + guard reader.hasContent else { throw SmithyReadWrite.ReaderError.requiredValueNotPresent } + var value = ResiliencehubClientTypes.GroupingAppComponent() + value.appComponentId = try reader["appComponentId"].readIfPresent() + value.appComponentType = try reader["appComponentType"].readIfPresent() + value.appComponentName = try reader["appComponentName"].readIfPresent() + return value + } +} + extension ResiliencehubClientTypes.SopRecommendation { static func read(from reader: SmithyJSON.Reader) throws -> ResiliencehubClientTypes.SopRecommendation { @@ -9332,6 +10223,14 @@ extension ResiliencehubClientTypes.UnsupportedResource { } } +extension ResiliencehubClientTypes.AcceptGroupingRecommendationEntry { + + static func write(value: ResiliencehubClientTypes.AcceptGroupingRecommendationEntry?, to writer: SmithyJSON.Writer) throws { + guard let value else { return } + try writer["groupingRecommendationId"].write(value.groupingRecommendationId) + } +} + extension ResiliencehubClientTypes.UpdateRecommendationStatusRequestEntry { static func write(value: ResiliencehubClientTypes.UpdateRecommendationStatusRequestEntry?, to writer: SmithyJSON.Writer) throws { @@ -9344,4 +10243,13 @@ extension ResiliencehubClientTypes.UpdateRecommendationStatusRequestEntry { } } +extension ResiliencehubClientTypes.RejectGroupingRecommendationEntry { + + static func write(value: ResiliencehubClientTypes.RejectGroupingRecommendationEntry?, to writer: SmithyJSON.Writer) throws { + guard let value else { return } + try writer["groupingRecommendationId"].write(value.groupingRecommendationId) + try writer["rejectionReason"].write(value.rejectionReason) + } +} + public enum ResiliencehubClientTypes {} diff --git a/Sources/Services/AWSResiliencehub/Sources/AWSResiliencehub/Paginators.swift b/Sources/Services/AWSResiliencehub/Sources/AWSResiliencehub/Paginators.swift index 36846d54f3e..73dbb7dbb56 100644 --- a/Sources/Services/AWSResiliencehub/Sources/AWSResiliencehub/Paginators.swift +++ b/Sources/Services/AWSResiliencehub/Sources/AWSResiliencehub/Paginators.swift @@ -348,6 +348,37 @@ extension ListResiliencyPoliciesInput: ClientRuntime.PaginateToken { policyName: self.policyName )} } +extension ResiliencehubClient { + /// Paginate over `[ListResourceGroupingRecommendationsOutput]` results. + /// + /// When this operation is called, an `AsyncSequence` is created. AsyncSequences are lazy so no service + /// calls are made until the sequence is iterated over. This also means there is no guarantee that the request is valid + /// until then. If there are errors in your request, you will see the failures only after you start iterating. + /// - Parameters: + /// - input: A `[ListResourceGroupingRecommendationsInput]` to start pagination + /// - Returns: An `AsyncSequence` that can iterate over `ListResourceGroupingRecommendationsOutput` + public func listResourceGroupingRecommendationsPaginated(input: ListResourceGroupingRecommendationsInput) -> ClientRuntime.PaginatorSequence { + return ClientRuntime.PaginatorSequence(input: input, inputKey: \.nextToken, outputKey: \.nextToken, paginationFunction: self.listResourceGroupingRecommendations(input:)) + } +} + +extension ListResourceGroupingRecommendationsInput: ClientRuntime.PaginateToken { + public func usingPaginationToken(_ token: Swift.String) -> ListResourceGroupingRecommendationsInput { + return ListResourceGroupingRecommendationsInput( + appArn: self.appArn, + maxResults: self.maxResults, + nextToken: token + )} +} + +extension PaginatorSequence where OperationStackInput == ListResourceGroupingRecommendationsInput, OperationStackOutput == ListResourceGroupingRecommendationsOutput { + /// This paginator transforms the `AsyncSequence` returned by `listResourceGroupingRecommendationsPaginated` + /// to access the nested member `[ResiliencehubClientTypes.GroupingRecommendation]` + /// - Returns: `[ResiliencehubClientTypes.GroupingRecommendation]` + public func groupingRecommendations() async throws -> [ResiliencehubClientTypes.GroupingRecommendation] { + return try await self.asyncCompactMap { item in item.groupingRecommendations } + } +} extension ResiliencehubClient { /// Paginate over `[ListSopRecommendationsOutput]` results. /// diff --git a/Sources/Services/AWSResiliencehub/Sources/AWSResiliencehub/ResiliencehubClient.swift b/Sources/Services/AWSResiliencehub/Sources/AWSResiliencehub/ResiliencehubClient.swift index d800d40b201..07bf2813b34 100644 --- a/Sources/Services/AWSResiliencehub/Sources/AWSResiliencehub/ResiliencehubClient.swift +++ b/Sources/Services/AWSResiliencehub/Sources/AWSResiliencehub/ResiliencehubClient.swift @@ -193,9 +193,81 @@ extension ResiliencehubClient { } extension ResiliencehubClient { + /// Performs the `AcceptResourceGroupingRecommendations` operation on the `AwsResilienceHub` service. + /// + /// Accepts the resource grouping recommendations suggested by Resilience Hub for your application. + /// + /// - Parameter AcceptResourceGroupingRecommendationsInput : [no documentation found] + /// + /// - Returns: `AcceptResourceGroupingRecommendationsOutput` : [no documentation found] + /// + /// - Throws: One of the exceptions listed below __Possible Exceptions__. + /// + /// __Possible Exceptions:__ + /// - `AccessDeniedException` : You don't have permissions to perform the requested operation. The user or role that is making the request must have at least one IAM permissions policy attached that grants the required permissions. + /// - `InternalServerException` : This exception occurs when there is an internal failure in the Resilience Hub service. + /// - `ResourceNotFoundException` : This exception occurs when the specified resource could not be found. + /// - `ThrottlingException` : This exception occurs when you have exceeded the limit on the number of requests per second. + /// - `ValidationException` : This exception occurs when a request is not valid. + public func acceptResourceGroupingRecommendations(input: AcceptResourceGroupingRecommendationsInput) async throws -> AcceptResourceGroupingRecommendationsOutput { + let context = Smithy.ContextBuilder() + .withMethod(value: .post) + .withServiceName(value: serviceName) + .withOperation(value: "acceptResourceGroupingRecommendations") + .withIdempotencyTokenGenerator(value: config.idempotencyTokenGenerator) + .withLogger(value: config.logger) + .withPartitionID(value: config.partitionID) + .withAuthSchemes(value: config.authSchemes ?? []) + .withAuthSchemeResolver(value: config.authSchemeResolver) + .withUnsignedPayloadTrait(value: false) + .withSocketTimeout(value: config.httpClientConfiguration.socketTimeout) + .withIdentityResolver(value: config.bearerTokenIdentityResolver, schemeID: "smithy.api#httpBearerAuth") + .withIdentityResolver(value: config.awsCredentialIdentityResolver, schemeID: "aws.auth#sigv4") + .withIdentityResolver(value: config.awsCredentialIdentityResolver, schemeID: "aws.auth#sigv4a") + .withRegion(value: config.region) + .withSigningName(value: "resiliencehub") + .withSigningRegion(value: config.signingRegion) + .build() + let builder = ClientRuntime.OrchestratorBuilder() + config.interceptorProviders.forEach { provider in + builder.interceptors.add(provider.create()) + } + config.httpInterceptorProviders.forEach { provider in + let i: any ClientRuntime.HttpInterceptor = provider.create() + builder.interceptors.add(i) + } + builder.interceptors.add(ClientRuntime.URLPathMiddleware(AcceptResourceGroupingRecommendationsInput.urlPathProvider(_:))) + builder.interceptors.add(ClientRuntime.URLHostMiddleware()) + builder.interceptors.add(ClientRuntime.ContentTypeMiddleware(contentType: "application/json")) + builder.serialize(ClientRuntime.BodyMiddleware(rootNodeInfo: "", inputWritingClosure: AcceptResourceGroupingRecommendationsInput.write(value:to:))) + builder.interceptors.add(ClientRuntime.ContentLengthMiddleware()) + builder.deserialize(ClientRuntime.DeserializeMiddleware(AcceptResourceGroupingRecommendationsOutput.httpOutput(from:), AcceptResourceGroupingRecommendationsOutputError.httpError(from:))) + builder.interceptors.add(ClientRuntime.LoggerMiddleware(clientLogMode: config.clientLogMode)) + builder.retryStrategy(SmithyRetries.DefaultRetryStrategy(options: config.retryStrategyOptions)) + builder.retryErrorInfoProvider(AWSClientRuntime.AWSRetryErrorInfoProvider.errorInfo(for:)) + builder.applySigner(ClientRuntime.SignerMiddleware()) + let endpointParams = EndpointParams(endpoint: config.endpoint, region: config.region, useDualStack: config.useDualStack ?? false, useFIPS: config.useFIPS ?? false) + builder.applyEndpoint(AWSClientRuntime.EndpointResolverMiddleware(endpointResolverBlock: { [config] in try config.endpointResolver.resolve(params: $0) }, endpointParams: endpointParams)) + builder.interceptors.add(AWSClientRuntime.UserAgentMiddleware(metadata: AWSClientRuntime.AWSUserAgentMetadata.fromConfig(serviceID: serviceName, version: "1.0", config: config))) + builder.selectAuthScheme(ClientRuntime.AuthSchemeMiddleware()) + builder.interceptors.add(AWSClientRuntime.AmzSdkInvocationIdMiddleware()) + builder.interceptors.add(AWSClientRuntime.AmzSdkRequestMiddleware(maxRetries: config.retryStrategyOptions.maxRetriesBase)) + var metricsAttributes = Smithy.Attributes() + metricsAttributes.set(key: ClientRuntime.OrchestratorMetricsAttributesKeys.service, value: "Resiliencehub") + metricsAttributes.set(key: ClientRuntime.OrchestratorMetricsAttributesKeys.method, value: "AcceptResourceGroupingRecommendations") + let op = builder.attributes(context) + .telemetry(ClientRuntime.OrchestratorTelemetry( + telemetryProvider: config.telemetryProvider, + metricsAttributes: metricsAttributes + )) + .executeRequest(client) + .build() + return try await op.execute(input: input) + } + /// Performs the `AddDraftAppVersionResourceMappings` operation on the `AwsResilienceHub` service. /// - /// Adds the source of resource-maps to the draft version of an application. During assessment, Resilience Hub will use these resource-maps to resolve the latest physical ID for each resource in the application template. For more information about different types of resources suported by Resilience Hub and how to add them in your application, see [Step 2: How is your application managed?](https://docs.aws.amazon.com/resilience-hub/latest/userguide/how-app-manage.html) in the Resilience Hub User Guide. + /// Adds the source of resource-maps to the draft version of an application. During assessment, Resilience Hub will use these resource-maps to resolve the latest physical ID for each resource in the application template. For more information about different types of resources supported by Resilience Hub and how to add them in your application, see [Step 2: How is your application managed?](https://docs.aws.amazon.com/resilience-hub/latest/userguide/how-app-manage.html) in the Resilience Hub User Guide. /// /// - Parameter AddDraftAppVersionResourceMappingsInput : [no documentation found] /// @@ -208,6 +280,7 @@ extension ResiliencehubClient { /// - `ConflictException` : This exception occurs when a conflict with a previous successful write is detected. This generally occurs when the previous write did not have time to propagate to the host serving the current request. A retry (with appropriate backoff logic) is the recommended response to this exception. /// - `InternalServerException` : This exception occurs when there is an internal failure in the Resilience Hub service. /// - `ResourceNotFoundException` : This exception occurs when the specified resource could not be found. + /// - `ServiceQuotaExceededException` : This exception occurs when you have exceeded your service quota. To perform the requested action, remove some of the relevant resources, or use Service Quotas to request a service quota increase. /// - `ThrottlingException` : This exception occurs when you have exceeded the limit on the number of requests per second. /// - `ValidationException` : This exception occurs when a request is not valid. public func addDraftAppVersionResourceMappings(input: AddDraftAppVersionResourceMappingsInput) async throws -> AddDraftAppVersionResourceMappingsOutput { @@ -1535,7 +1608,7 @@ extension ResiliencehubClient { /// Performs the `DescribeAppVersionResource` operation on the `AwsResilienceHub` service. /// - /// Describes a resource of the Resilience Hub application. This API accepts only one of the following parameters to descibe the resource: + /// Describes a resource of the Resilience Hub application. This API accepts only one of the following parameters to describe the resource: /// /// * resourceName /// @@ -1900,6 +1973,78 @@ extension ResiliencehubClient { return try await op.execute(input: input) } + /// Performs the `DescribeResourceGroupingRecommendationTask` operation on the `AwsResilienceHub` service. + /// + /// Describes the resource grouping recommendation tasks run by Resilience Hub for your application. + /// + /// - Parameter DescribeResourceGroupingRecommendationTaskInput : [no documentation found] + /// + /// - Returns: `DescribeResourceGroupingRecommendationTaskOutput` : [no documentation found] + /// + /// - Throws: One of the exceptions listed below __Possible Exceptions__. + /// + /// __Possible Exceptions:__ + /// - `AccessDeniedException` : You don't have permissions to perform the requested operation. The user or role that is making the request must have at least one IAM permissions policy attached that grants the required permissions. + /// - `InternalServerException` : This exception occurs when there is an internal failure in the Resilience Hub service. + /// - `ResourceNotFoundException` : This exception occurs when the specified resource could not be found. + /// - `ThrottlingException` : This exception occurs when you have exceeded the limit on the number of requests per second. + /// - `ValidationException` : This exception occurs when a request is not valid. + public func describeResourceGroupingRecommendationTask(input: DescribeResourceGroupingRecommendationTaskInput) async throws -> DescribeResourceGroupingRecommendationTaskOutput { + let context = Smithy.ContextBuilder() + .withMethod(value: .post) + .withServiceName(value: serviceName) + .withOperation(value: "describeResourceGroupingRecommendationTask") + .withIdempotencyTokenGenerator(value: config.idempotencyTokenGenerator) + .withLogger(value: config.logger) + .withPartitionID(value: config.partitionID) + .withAuthSchemes(value: config.authSchemes ?? []) + .withAuthSchemeResolver(value: config.authSchemeResolver) + .withUnsignedPayloadTrait(value: false) + .withSocketTimeout(value: config.httpClientConfiguration.socketTimeout) + .withIdentityResolver(value: config.bearerTokenIdentityResolver, schemeID: "smithy.api#httpBearerAuth") + .withIdentityResolver(value: config.awsCredentialIdentityResolver, schemeID: "aws.auth#sigv4") + .withIdentityResolver(value: config.awsCredentialIdentityResolver, schemeID: "aws.auth#sigv4a") + .withRegion(value: config.region) + .withSigningName(value: "resiliencehub") + .withSigningRegion(value: config.signingRegion) + .build() + let builder = ClientRuntime.OrchestratorBuilder() + config.interceptorProviders.forEach { provider in + builder.interceptors.add(provider.create()) + } + config.httpInterceptorProviders.forEach { provider in + let i: any ClientRuntime.HttpInterceptor = provider.create() + builder.interceptors.add(i) + } + builder.interceptors.add(ClientRuntime.URLPathMiddleware(DescribeResourceGroupingRecommendationTaskInput.urlPathProvider(_:))) + builder.interceptors.add(ClientRuntime.URLHostMiddleware()) + builder.interceptors.add(ClientRuntime.ContentTypeMiddleware(contentType: "application/json")) + builder.serialize(ClientRuntime.BodyMiddleware(rootNodeInfo: "", inputWritingClosure: DescribeResourceGroupingRecommendationTaskInput.write(value:to:))) + builder.interceptors.add(ClientRuntime.ContentLengthMiddleware()) + builder.deserialize(ClientRuntime.DeserializeMiddleware(DescribeResourceGroupingRecommendationTaskOutput.httpOutput(from:), DescribeResourceGroupingRecommendationTaskOutputError.httpError(from:))) + builder.interceptors.add(ClientRuntime.LoggerMiddleware(clientLogMode: config.clientLogMode)) + builder.retryStrategy(SmithyRetries.DefaultRetryStrategy(options: config.retryStrategyOptions)) + builder.retryErrorInfoProvider(AWSClientRuntime.AWSRetryErrorInfoProvider.errorInfo(for:)) + builder.applySigner(ClientRuntime.SignerMiddleware()) + let endpointParams = EndpointParams(endpoint: config.endpoint, region: config.region, useDualStack: config.useDualStack ?? false, useFIPS: config.useFIPS ?? false) + builder.applyEndpoint(AWSClientRuntime.EndpointResolverMiddleware(endpointResolverBlock: { [config] in try config.endpointResolver.resolve(params: $0) }, endpointParams: endpointParams)) + builder.interceptors.add(AWSClientRuntime.UserAgentMiddleware(metadata: AWSClientRuntime.AWSUserAgentMetadata.fromConfig(serviceID: serviceName, version: "1.0", config: config))) + builder.selectAuthScheme(ClientRuntime.AuthSchemeMiddleware()) + builder.interceptors.add(AWSClientRuntime.AmzSdkInvocationIdMiddleware()) + builder.interceptors.add(AWSClientRuntime.AmzSdkRequestMiddleware(maxRetries: config.retryStrategyOptions.maxRetriesBase)) + var metricsAttributes = Smithy.Attributes() + metricsAttributes.set(key: ClientRuntime.OrchestratorMetricsAttributesKeys.service, value: "Resiliencehub") + metricsAttributes.set(key: ClientRuntime.OrchestratorMetricsAttributesKeys.method, value: "DescribeResourceGroupingRecommendationTask") + let op = builder.attributes(context) + .telemetry(ClientRuntime.OrchestratorTelemetry( + telemetryProvider: config.telemetryProvider, + metricsAttributes: metricsAttributes + )) + .executeRequest(client) + .build() + return try await op.execute(input: input) + } + /// Performs the `ImportResourcesToDraftAppVersion` operation on the `AwsResilienceHub` service. /// /// Imports resources to Resilience Hub application draft version from different input sources. For more information about the input sources supported by Resilience Hub, see [Discover the structure and describe your Resilience Hub application](https://docs.aws.amazon.com/resilience-hub/latest/userguide/discover-structure.html). @@ -2971,6 +3116,76 @@ extension ResiliencehubClient { return try await op.execute(input: input) } + /// Performs the `ListResourceGroupingRecommendations` operation on the `AwsResilienceHub` service. + /// + /// Lists the resource grouping recommendations suggested by Resilience Hub for your application. + /// + /// - Parameter ListResourceGroupingRecommendationsInput : [no documentation found] + /// + /// - Returns: `ListResourceGroupingRecommendationsOutput` : [no documentation found] + /// + /// - Throws: One of the exceptions listed below __Possible Exceptions__. + /// + /// __Possible Exceptions:__ + /// - `AccessDeniedException` : You don't have permissions to perform the requested operation. The user or role that is making the request must have at least one IAM permissions policy attached that grants the required permissions. + /// - `InternalServerException` : This exception occurs when there is an internal failure in the Resilience Hub service. + /// - `ResourceNotFoundException` : This exception occurs when the specified resource could not be found. + /// - `ThrottlingException` : This exception occurs when you have exceeded the limit on the number of requests per second. + /// - `ValidationException` : This exception occurs when a request is not valid. + public func listResourceGroupingRecommendations(input: ListResourceGroupingRecommendationsInput) async throws -> ListResourceGroupingRecommendationsOutput { + let context = Smithy.ContextBuilder() + .withMethod(value: .get) + .withServiceName(value: serviceName) + .withOperation(value: "listResourceGroupingRecommendations") + .withIdempotencyTokenGenerator(value: config.idempotencyTokenGenerator) + .withLogger(value: config.logger) + .withPartitionID(value: config.partitionID) + .withAuthSchemes(value: config.authSchemes ?? []) + .withAuthSchemeResolver(value: config.authSchemeResolver) + .withUnsignedPayloadTrait(value: false) + .withSocketTimeout(value: config.httpClientConfiguration.socketTimeout) + .withIdentityResolver(value: config.bearerTokenIdentityResolver, schemeID: "smithy.api#httpBearerAuth") + .withIdentityResolver(value: config.awsCredentialIdentityResolver, schemeID: "aws.auth#sigv4") + .withIdentityResolver(value: config.awsCredentialIdentityResolver, schemeID: "aws.auth#sigv4a") + .withRegion(value: config.region) + .withSigningName(value: "resiliencehub") + .withSigningRegion(value: config.signingRegion) + .build() + let builder = ClientRuntime.OrchestratorBuilder() + config.interceptorProviders.forEach { provider in + builder.interceptors.add(provider.create()) + } + config.httpInterceptorProviders.forEach { provider in + let i: any ClientRuntime.HttpInterceptor = provider.create() + builder.interceptors.add(i) + } + builder.interceptors.add(ClientRuntime.URLPathMiddleware(ListResourceGroupingRecommendationsInput.urlPathProvider(_:))) + builder.interceptors.add(ClientRuntime.URLHostMiddleware()) + builder.serialize(ClientRuntime.QueryItemMiddleware(ListResourceGroupingRecommendationsInput.queryItemProvider(_:))) + builder.deserialize(ClientRuntime.DeserializeMiddleware(ListResourceGroupingRecommendationsOutput.httpOutput(from:), ListResourceGroupingRecommendationsOutputError.httpError(from:))) + builder.interceptors.add(ClientRuntime.LoggerMiddleware(clientLogMode: config.clientLogMode)) + builder.retryStrategy(SmithyRetries.DefaultRetryStrategy(options: config.retryStrategyOptions)) + builder.retryErrorInfoProvider(AWSClientRuntime.AWSRetryErrorInfoProvider.errorInfo(for:)) + builder.applySigner(ClientRuntime.SignerMiddleware()) + let endpointParams = EndpointParams(endpoint: config.endpoint, region: config.region, useDualStack: config.useDualStack ?? false, useFIPS: config.useFIPS ?? false) + builder.applyEndpoint(AWSClientRuntime.EndpointResolverMiddleware(endpointResolverBlock: { [config] in try config.endpointResolver.resolve(params: $0) }, endpointParams: endpointParams)) + builder.interceptors.add(AWSClientRuntime.UserAgentMiddleware(metadata: AWSClientRuntime.AWSUserAgentMetadata.fromConfig(serviceID: serviceName, version: "1.0", config: config))) + builder.selectAuthScheme(ClientRuntime.AuthSchemeMiddleware()) + builder.interceptors.add(AWSClientRuntime.AmzSdkInvocationIdMiddleware()) + builder.interceptors.add(AWSClientRuntime.AmzSdkRequestMiddleware(maxRetries: config.retryStrategyOptions.maxRetriesBase)) + var metricsAttributes = Smithy.Attributes() + metricsAttributes.set(key: ClientRuntime.OrchestratorMetricsAttributesKeys.service, value: "Resiliencehub") + metricsAttributes.set(key: ClientRuntime.OrchestratorMetricsAttributesKeys.method, value: "ListResourceGroupingRecommendations") + let op = builder.attributes(context) + .telemetry(ClientRuntime.OrchestratorTelemetry( + telemetryProvider: config.telemetryProvider, + metricsAttributes: metricsAttributes + )) + .executeRequest(client) + .build() + return try await op.execute(input: input) + } + /// Performs the `ListSopRecommendations` operation on the `AwsResilienceHub` service. /// /// Lists the standard operating procedure (SOP) recommendations for the Resilience Hub applications. @@ -3475,6 +3690,78 @@ extension ResiliencehubClient { return try await op.execute(input: input) } + /// Performs the `RejectResourceGroupingRecommendations` operation on the `AwsResilienceHub` service. + /// + /// Rejects resource grouping recommendations. + /// + /// - Parameter RejectResourceGroupingRecommendationsInput : [no documentation found] + /// + /// - Returns: `RejectResourceGroupingRecommendationsOutput` : [no documentation found] + /// + /// - Throws: One of the exceptions listed below __Possible Exceptions__. + /// + /// __Possible Exceptions:__ + /// - `AccessDeniedException` : You don't have permissions to perform the requested operation. The user or role that is making the request must have at least one IAM permissions policy attached that grants the required permissions. + /// - `InternalServerException` : This exception occurs when there is an internal failure in the Resilience Hub service. + /// - `ResourceNotFoundException` : This exception occurs when the specified resource could not be found. + /// - `ThrottlingException` : This exception occurs when you have exceeded the limit on the number of requests per second. + /// - `ValidationException` : This exception occurs when a request is not valid. + public func rejectResourceGroupingRecommendations(input: RejectResourceGroupingRecommendationsInput) async throws -> RejectResourceGroupingRecommendationsOutput { + let context = Smithy.ContextBuilder() + .withMethod(value: .post) + .withServiceName(value: serviceName) + .withOperation(value: "rejectResourceGroupingRecommendations") + .withIdempotencyTokenGenerator(value: config.idempotencyTokenGenerator) + .withLogger(value: config.logger) + .withPartitionID(value: config.partitionID) + .withAuthSchemes(value: config.authSchemes ?? []) + .withAuthSchemeResolver(value: config.authSchemeResolver) + .withUnsignedPayloadTrait(value: false) + .withSocketTimeout(value: config.httpClientConfiguration.socketTimeout) + .withIdentityResolver(value: config.bearerTokenIdentityResolver, schemeID: "smithy.api#httpBearerAuth") + .withIdentityResolver(value: config.awsCredentialIdentityResolver, schemeID: "aws.auth#sigv4") + .withIdentityResolver(value: config.awsCredentialIdentityResolver, schemeID: "aws.auth#sigv4a") + .withRegion(value: config.region) + .withSigningName(value: "resiliencehub") + .withSigningRegion(value: config.signingRegion) + .build() + let builder = ClientRuntime.OrchestratorBuilder() + config.interceptorProviders.forEach { provider in + builder.interceptors.add(provider.create()) + } + config.httpInterceptorProviders.forEach { provider in + let i: any ClientRuntime.HttpInterceptor = provider.create() + builder.interceptors.add(i) + } + builder.interceptors.add(ClientRuntime.URLPathMiddleware(RejectResourceGroupingRecommendationsInput.urlPathProvider(_:))) + builder.interceptors.add(ClientRuntime.URLHostMiddleware()) + builder.interceptors.add(ClientRuntime.ContentTypeMiddleware(contentType: "application/json")) + builder.serialize(ClientRuntime.BodyMiddleware(rootNodeInfo: "", inputWritingClosure: RejectResourceGroupingRecommendationsInput.write(value:to:))) + builder.interceptors.add(ClientRuntime.ContentLengthMiddleware()) + builder.deserialize(ClientRuntime.DeserializeMiddleware(RejectResourceGroupingRecommendationsOutput.httpOutput(from:), RejectResourceGroupingRecommendationsOutputError.httpError(from:))) + builder.interceptors.add(ClientRuntime.LoggerMiddleware(clientLogMode: config.clientLogMode)) + builder.retryStrategy(SmithyRetries.DefaultRetryStrategy(options: config.retryStrategyOptions)) + builder.retryErrorInfoProvider(AWSClientRuntime.AWSRetryErrorInfoProvider.errorInfo(for:)) + builder.applySigner(ClientRuntime.SignerMiddleware()) + let endpointParams = EndpointParams(endpoint: config.endpoint, region: config.region, useDualStack: config.useDualStack ?? false, useFIPS: config.useFIPS ?? false) + builder.applyEndpoint(AWSClientRuntime.EndpointResolverMiddleware(endpointResolverBlock: { [config] in try config.endpointResolver.resolve(params: $0) }, endpointParams: endpointParams)) + builder.interceptors.add(AWSClientRuntime.UserAgentMiddleware(metadata: AWSClientRuntime.AWSUserAgentMetadata.fromConfig(serviceID: serviceName, version: "1.0", config: config))) + builder.selectAuthScheme(ClientRuntime.AuthSchemeMiddleware()) + builder.interceptors.add(AWSClientRuntime.AmzSdkInvocationIdMiddleware()) + builder.interceptors.add(AWSClientRuntime.AmzSdkRequestMiddleware(maxRetries: config.retryStrategyOptions.maxRetriesBase)) + var metricsAttributes = Smithy.Attributes() + metricsAttributes.set(key: ClientRuntime.OrchestratorMetricsAttributesKeys.service, value: "Resiliencehub") + metricsAttributes.set(key: ClientRuntime.OrchestratorMetricsAttributesKeys.method, value: "RejectResourceGroupingRecommendations") + let op = builder.attributes(context) + .telemetry(ClientRuntime.OrchestratorTelemetry( + telemetryProvider: config.telemetryProvider, + metricsAttributes: metricsAttributes + )) + .executeRequest(client) + .build() + return try await op.execute(input: input) + } + /// Performs the `RemoveDraftAppVersionResourceMappings` operation on the `AwsResilienceHub` service. /// /// Removes resource mappings from a draft application version. @@ -3696,6 +3983,79 @@ extension ResiliencehubClient { return try await op.execute(input: input) } + /// Performs the `StartResourceGroupingRecommendationTask` operation on the `AwsResilienceHub` service. + /// + /// Starts grouping recommendation task. + /// + /// - Parameter StartResourceGroupingRecommendationTaskInput : [no documentation found] + /// + /// - Returns: `StartResourceGroupingRecommendationTaskOutput` : [no documentation found] + /// + /// - Throws: One of the exceptions listed below __Possible Exceptions__. + /// + /// __Possible Exceptions:__ + /// - `AccessDeniedException` : You don't have permissions to perform the requested operation. The user or role that is making the request must have at least one IAM permissions policy attached that grants the required permissions. + /// - `ConflictException` : This exception occurs when a conflict with a previous successful write is detected. This generally occurs when the previous write did not have time to propagate to the host serving the current request. A retry (with appropriate backoff logic) is the recommended response to this exception. + /// - `InternalServerException` : This exception occurs when there is an internal failure in the Resilience Hub service. + /// - `ResourceNotFoundException` : This exception occurs when the specified resource could not be found. + /// - `ThrottlingException` : This exception occurs when you have exceeded the limit on the number of requests per second. + /// - `ValidationException` : This exception occurs when a request is not valid. + public func startResourceGroupingRecommendationTask(input: StartResourceGroupingRecommendationTaskInput) async throws -> StartResourceGroupingRecommendationTaskOutput { + let context = Smithy.ContextBuilder() + .withMethod(value: .post) + .withServiceName(value: serviceName) + .withOperation(value: "startResourceGroupingRecommendationTask") + .withIdempotencyTokenGenerator(value: config.idempotencyTokenGenerator) + .withLogger(value: config.logger) + .withPartitionID(value: config.partitionID) + .withAuthSchemes(value: config.authSchemes ?? []) + .withAuthSchemeResolver(value: config.authSchemeResolver) + .withUnsignedPayloadTrait(value: false) + .withSocketTimeout(value: config.httpClientConfiguration.socketTimeout) + .withIdentityResolver(value: config.bearerTokenIdentityResolver, schemeID: "smithy.api#httpBearerAuth") + .withIdentityResolver(value: config.awsCredentialIdentityResolver, schemeID: "aws.auth#sigv4") + .withIdentityResolver(value: config.awsCredentialIdentityResolver, schemeID: "aws.auth#sigv4a") + .withRegion(value: config.region) + .withSigningName(value: "resiliencehub") + .withSigningRegion(value: config.signingRegion) + .build() + let builder = ClientRuntime.OrchestratorBuilder() + config.interceptorProviders.forEach { provider in + builder.interceptors.add(provider.create()) + } + config.httpInterceptorProviders.forEach { provider in + let i: any ClientRuntime.HttpInterceptor = provider.create() + builder.interceptors.add(i) + } + builder.interceptors.add(ClientRuntime.URLPathMiddleware(StartResourceGroupingRecommendationTaskInput.urlPathProvider(_:))) + builder.interceptors.add(ClientRuntime.URLHostMiddleware()) + builder.interceptors.add(ClientRuntime.ContentTypeMiddleware(contentType: "application/json")) + builder.serialize(ClientRuntime.BodyMiddleware(rootNodeInfo: "", inputWritingClosure: StartResourceGroupingRecommendationTaskInput.write(value:to:))) + builder.interceptors.add(ClientRuntime.ContentLengthMiddleware()) + builder.deserialize(ClientRuntime.DeserializeMiddleware(StartResourceGroupingRecommendationTaskOutput.httpOutput(from:), StartResourceGroupingRecommendationTaskOutputError.httpError(from:))) + builder.interceptors.add(ClientRuntime.LoggerMiddleware(clientLogMode: config.clientLogMode)) + builder.retryStrategy(SmithyRetries.DefaultRetryStrategy(options: config.retryStrategyOptions)) + builder.retryErrorInfoProvider(AWSClientRuntime.AWSRetryErrorInfoProvider.errorInfo(for:)) + builder.applySigner(ClientRuntime.SignerMiddleware()) + let endpointParams = EndpointParams(endpoint: config.endpoint, region: config.region, useDualStack: config.useDualStack ?? false, useFIPS: config.useFIPS ?? false) + builder.applyEndpoint(AWSClientRuntime.EndpointResolverMiddleware(endpointResolverBlock: { [config] in try config.endpointResolver.resolve(params: $0) }, endpointParams: endpointParams)) + builder.interceptors.add(AWSClientRuntime.UserAgentMiddleware(metadata: AWSClientRuntime.AWSUserAgentMetadata.fromConfig(serviceID: serviceName, version: "1.0", config: config))) + builder.selectAuthScheme(ClientRuntime.AuthSchemeMiddleware()) + builder.interceptors.add(AWSClientRuntime.AmzSdkInvocationIdMiddleware()) + builder.interceptors.add(AWSClientRuntime.AmzSdkRequestMiddleware(maxRetries: config.retryStrategyOptions.maxRetriesBase)) + var metricsAttributes = Smithy.Attributes() + metricsAttributes.set(key: ClientRuntime.OrchestratorMetricsAttributesKeys.service, value: "Resiliencehub") + metricsAttributes.set(key: ClientRuntime.OrchestratorMetricsAttributesKeys.method, value: "StartResourceGroupingRecommendationTask") + let op = builder.attributes(context) + .telemetry(ClientRuntime.OrchestratorTelemetry( + telemetryProvider: config.telemetryProvider, + metricsAttributes: metricsAttributes + )) + .executeRequest(client) + .build() + return try await op.execute(input: input) + } + /// Performs the `TagResource` operation on the `AwsResilienceHub` service. /// /// Applies one or more tags to a resource.