1// Code generated by smithy-go-codegen DO NOT EDIT.
2
3package configservice
4
5import (
6	"context"
7	"fmt"
8	awsmiddleware "github.com/aws/aws-sdk-go-v2/aws/middleware"
9	"github.com/aws/aws-sdk-go-v2/aws/signer/v4"
10	"github.com/aws/aws-sdk-go-v2/service/configservice/types"
11	"github.com/aws/smithy-go/middleware"
12	smithyhttp "github.com/aws/smithy-go/transport/http"
13)
14
15// Returns the details of one or more remediation exceptions. A detailed view of a
16// remediation exception for a set of resources that includes an explanation of an
17// exception and the time when the exception will be deleted. When you specify the
18// limit and the next token, you receive a paginated response. AWS Config generates
19// a remediation exception when a problem occurs executing a remediation action to
20// a specific resource. Remediation exceptions blocks auto-remediation until the
21// exception is cleared. When you specify the limit and the next token, you receive
22// a paginated response. Limit and next token are not applicable if you request
23// resources in batch. It is only applicable, when you request all resources.
24func (c *Client) DescribeRemediationExceptions(ctx context.Context, params *DescribeRemediationExceptionsInput, optFns ...func(*Options)) (*DescribeRemediationExceptionsOutput, error) {
25	if params == nil {
26		params = &DescribeRemediationExceptionsInput{}
27	}
28
29	result, metadata, err := c.invokeOperation(ctx, "DescribeRemediationExceptions", params, optFns, addOperationDescribeRemediationExceptionsMiddlewares)
30	if err != nil {
31		return nil, err
32	}
33
34	out := result.(*DescribeRemediationExceptionsOutput)
35	out.ResultMetadata = metadata
36	return out, nil
37}
38
39type DescribeRemediationExceptionsInput struct {
40
41	// The name of the AWS Config rule.
42	//
43	// This member is required.
44	ConfigRuleName *string
45
46	// The maximum number of RemediationExceptionResourceKey returned on each page. The
47	// default is 25. If you specify 0, AWS Config uses the default.
48	Limit int32
49
50	// The nextToken string returned in a previous request that you use to request the
51	// next page of results in a paginated response.
52	NextToken *string
53
54	// An exception list of resource exception keys to be processed with the current
55	// request. AWS Config adds exception for each resource key. For example, AWS
56	// Config adds 3 exceptions for 3 resource keys.
57	ResourceKeys []types.RemediationExceptionResourceKey
58}
59
60type DescribeRemediationExceptionsOutput struct {
61
62	// The nextToken string returned in a previous request that you use to request the
63	// next page of results in a paginated response.
64	NextToken *string
65
66	// Returns a list of remediation exception objects.
67	RemediationExceptions []types.RemediationException
68
69	// Metadata pertaining to the operation's result.
70	ResultMetadata middleware.Metadata
71}
72
73func addOperationDescribeRemediationExceptionsMiddlewares(stack *middleware.Stack, options Options) (err error) {
74	err = stack.Serialize.Add(&awsAwsjson11_serializeOpDescribeRemediationExceptions{}, middleware.After)
75	if err != nil {
76		return err
77	}
78	err = stack.Deserialize.Add(&awsAwsjson11_deserializeOpDescribeRemediationExceptions{}, middleware.After)
79	if err != nil {
80		return err
81	}
82	if err = addSetLoggerMiddleware(stack, options); err != nil {
83		return err
84	}
85	if err = awsmiddleware.AddClientRequestIDMiddleware(stack); err != nil {
86		return err
87	}
88	if err = smithyhttp.AddComputeContentLengthMiddleware(stack); err != nil {
89		return err
90	}
91	if err = addResolveEndpointMiddleware(stack, options); err != nil {
92		return err
93	}
94	if err = v4.AddComputePayloadSHA256Middleware(stack); err != nil {
95		return err
96	}
97	if err = addRetryMiddlewares(stack, options); err != nil {
98		return err
99	}
100	if err = addHTTPSignerV4Middleware(stack, options); err != nil {
101		return err
102	}
103	if err = awsmiddleware.AddRawResponseToMetadata(stack); err != nil {
104		return err
105	}
106	if err = awsmiddleware.AddRecordResponseTiming(stack); err != nil {
107		return err
108	}
109	if err = addClientUserAgent(stack); err != nil {
110		return err
111	}
112	if err = smithyhttp.AddErrorCloseResponseBodyMiddleware(stack); err != nil {
113		return err
114	}
115	if err = smithyhttp.AddCloseResponseBodyMiddleware(stack); err != nil {
116		return err
117	}
118	if err = addOpDescribeRemediationExceptionsValidationMiddleware(stack); err != nil {
119		return err
120	}
121	if err = stack.Initialize.Add(newServiceMetadataMiddleware_opDescribeRemediationExceptions(options.Region), middleware.Before); err != nil {
122		return err
123	}
124	if err = addRequestIDRetrieverMiddleware(stack); err != nil {
125		return err
126	}
127	if err = addResponseErrorMiddleware(stack); err != nil {
128		return err
129	}
130	if err = addRequestResponseLogging(stack, options); err != nil {
131		return err
132	}
133	return nil
134}
135
136// DescribeRemediationExceptionsAPIClient is a client that implements the
137// DescribeRemediationExceptions operation.
138type DescribeRemediationExceptionsAPIClient interface {
139	DescribeRemediationExceptions(context.Context, *DescribeRemediationExceptionsInput, ...func(*Options)) (*DescribeRemediationExceptionsOutput, error)
140}
141
142var _ DescribeRemediationExceptionsAPIClient = (*Client)(nil)
143
144// DescribeRemediationExceptionsPaginatorOptions is the paginator options for
145// DescribeRemediationExceptions
146type DescribeRemediationExceptionsPaginatorOptions struct {
147	// The maximum number of RemediationExceptionResourceKey returned on each page. The
148	// default is 25. If you specify 0, AWS Config uses the default.
149	Limit int32
150
151	// Set to true if pagination should stop if the service returns a pagination token
152	// that matches the most recent token provided to the service.
153	StopOnDuplicateToken bool
154}
155
156// DescribeRemediationExceptionsPaginator is a paginator for
157// DescribeRemediationExceptions
158type DescribeRemediationExceptionsPaginator struct {
159	options   DescribeRemediationExceptionsPaginatorOptions
160	client    DescribeRemediationExceptionsAPIClient
161	params    *DescribeRemediationExceptionsInput
162	nextToken *string
163	firstPage bool
164}
165
166// NewDescribeRemediationExceptionsPaginator returns a new
167// DescribeRemediationExceptionsPaginator
168func NewDescribeRemediationExceptionsPaginator(client DescribeRemediationExceptionsAPIClient, params *DescribeRemediationExceptionsInput, optFns ...func(*DescribeRemediationExceptionsPaginatorOptions)) *DescribeRemediationExceptionsPaginator {
169	options := DescribeRemediationExceptionsPaginatorOptions{}
170	if params.Limit != 0 {
171		options.Limit = params.Limit
172	}
173
174	for _, fn := range optFns {
175		fn(&options)
176	}
177
178	if params == nil {
179		params = &DescribeRemediationExceptionsInput{}
180	}
181
182	return &DescribeRemediationExceptionsPaginator{
183		options:   options,
184		client:    client,
185		params:    params,
186		firstPage: true,
187	}
188}
189
190// HasMorePages returns a boolean indicating whether more pages are available
191func (p *DescribeRemediationExceptionsPaginator) HasMorePages() bool {
192	return p.firstPage || p.nextToken != nil
193}
194
195// NextPage retrieves the next DescribeRemediationExceptions page.
196func (p *DescribeRemediationExceptionsPaginator) NextPage(ctx context.Context, optFns ...func(*Options)) (*DescribeRemediationExceptionsOutput, error) {
197	if !p.HasMorePages() {
198		return nil, fmt.Errorf("no more pages available")
199	}
200
201	params := *p.params
202	params.NextToken = p.nextToken
203
204	params.Limit = p.options.Limit
205
206	result, err := p.client.DescribeRemediationExceptions(ctx, &params, optFns...)
207	if err != nil {
208		return nil, err
209	}
210	p.firstPage = false
211
212	prevToken := p.nextToken
213	p.nextToken = result.NextToken
214
215	if p.options.StopOnDuplicateToken && prevToken != nil && p.nextToken != nil && *prevToken == *p.nextToken {
216		p.nextToken = nil
217	}
218
219	return result, nil
220}
221
222func newServiceMetadataMiddleware_opDescribeRemediationExceptions(region string) *awsmiddleware.RegisterServiceMetadata {
223	return &awsmiddleware.RegisterServiceMetadata{
224		Region:        region,
225		ServiceID:     ServiceID,
226		SigningName:   "config",
227		OperationName: "DescribeRemediationExceptions",
228	}
229}
230