1
2
3 package ecr
4
5 import (
6 "context"
7 "errors"
8 "fmt"
9 "github.com/aws/aws-sdk-go-v2/aws"
10 awsmiddleware "github.com/aws/aws-sdk-go-v2/aws/middleware"
11 "github.com/aws/aws-sdk-go-v2/aws/signer/v4"
12 internalauth "github.com/aws/aws-sdk-go-v2/internal/auth"
13 smithyendpoints "github.com/aws/smithy-go/endpoints"
14 "github.com/aws/smithy-go/middleware"
15 smithyhttp "github.com/aws/smithy-go/transport/http"
16 )
17
18
19
20
21 func (c *Client) PutLifecyclePolicy(ctx context.Context, params *PutLifecyclePolicyInput, optFns ...func(*Options)) (*PutLifecyclePolicyOutput, error) {
22 if params == nil {
23 params = &PutLifecyclePolicyInput{}
24 }
25
26 result, metadata, err := c.invokeOperation(ctx, "PutLifecyclePolicy", params, optFns, c.addOperationPutLifecyclePolicyMiddlewares)
27 if err != nil {
28 return nil, err
29 }
30
31 out := result.(*PutLifecyclePolicyOutput)
32 out.ResultMetadata = metadata
33 return out, nil
34 }
35
36 type PutLifecyclePolicyInput struct {
37
38
39
40
41 LifecyclePolicyText *string
42
43
44
45
46 RepositoryName *string
47
48
49
50
51 RegistryId *string
52
53 noSmithyDocumentSerde
54 }
55
56 type PutLifecyclePolicyOutput struct {
57
58
59 LifecyclePolicyText *string
60
61
62 RegistryId *string
63
64
65 RepositoryName *string
66
67
68 ResultMetadata middleware.Metadata
69
70 noSmithyDocumentSerde
71 }
72
73 func (c *Client) addOperationPutLifecyclePolicyMiddlewares(stack *middleware.Stack, options Options) (err error) {
74 err = stack.Serialize.Add(&awsAwsjson11_serializeOpPutLifecyclePolicy{}, middleware.After)
75 if err != nil {
76 return err
77 }
78 err = stack.Deserialize.Add(&awsAwsjson11_deserializeOpPutLifecyclePolicy{}, middleware.After)
79 if err != nil {
80 return err
81 }
82 if err = addlegacyEndpointContextSetter(stack, options); err != nil {
83 return err
84 }
85 if err = addSetLoggerMiddleware(stack, options); err != nil {
86 return err
87 }
88 if err = awsmiddleware.AddClientRequestIDMiddleware(stack); err != nil {
89 return err
90 }
91 if err = smithyhttp.AddComputeContentLengthMiddleware(stack); err != nil {
92 return err
93 }
94 if err = addResolveEndpointMiddleware(stack, options); err != nil {
95 return err
96 }
97 if err = v4.AddComputePayloadSHA256Middleware(stack); err != nil {
98 return err
99 }
100 if err = addRetryMiddlewares(stack, options); err != nil {
101 return err
102 }
103 if err = addHTTPSignerV4Middleware(stack, options); err != nil {
104 return err
105 }
106 if err = awsmiddleware.AddRawResponseToMetadata(stack); err != nil {
107 return err
108 }
109 if err = awsmiddleware.AddRecordResponseTiming(stack); err != nil {
110 return err
111 }
112 if err = addClientUserAgent(stack, options); err != nil {
113 return err
114 }
115 if err = smithyhttp.AddErrorCloseResponseBodyMiddleware(stack); err != nil {
116 return err
117 }
118 if err = smithyhttp.AddCloseResponseBodyMiddleware(stack); err != nil {
119 return err
120 }
121 if err = addPutLifecyclePolicyResolveEndpointMiddleware(stack, options); err != nil {
122 return err
123 }
124 if err = addOpPutLifecyclePolicyValidationMiddleware(stack); err != nil {
125 return err
126 }
127 if err = stack.Initialize.Add(newServiceMetadataMiddleware_opPutLifecyclePolicy(options.Region), middleware.Before); err != nil {
128 return err
129 }
130 if err = awsmiddleware.AddRecursionDetection(stack); err != nil {
131 return err
132 }
133 if err = addRequestIDRetrieverMiddleware(stack); err != nil {
134 return err
135 }
136 if err = addResponseErrorMiddleware(stack); err != nil {
137 return err
138 }
139 if err = addRequestResponseLogging(stack, options); err != nil {
140 return err
141 }
142 if err = addendpointDisableHTTPSMiddleware(stack, options); err != nil {
143 return err
144 }
145 return nil
146 }
147
148 func newServiceMetadataMiddleware_opPutLifecyclePolicy(region string) *awsmiddleware.RegisterServiceMetadata {
149 return &awsmiddleware.RegisterServiceMetadata{
150 Region: region,
151 ServiceID: ServiceID,
152 SigningName: "ecr",
153 OperationName: "PutLifecyclePolicy",
154 }
155 }
156
157 type opPutLifecyclePolicyResolveEndpointMiddleware struct {
158 EndpointResolver EndpointResolverV2
159 BuiltInResolver builtInParameterResolver
160 }
161
162 func (*opPutLifecyclePolicyResolveEndpointMiddleware) ID() string {
163 return "ResolveEndpointV2"
164 }
165
166 func (m *opPutLifecyclePolicyResolveEndpointMiddleware) HandleSerialize(ctx context.Context, in middleware.SerializeInput, next middleware.SerializeHandler) (
167 out middleware.SerializeOutput, metadata middleware.Metadata, err error,
168 ) {
169 if awsmiddleware.GetRequiresLegacyEndpoints(ctx) {
170 return next.HandleSerialize(ctx, in)
171 }
172
173 req, ok := in.Request.(*smithyhttp.Request)
174 if !ok {
175 return out, metadata, fmt.Errorf("unknown transport type %T", in.Request)
176 }
177
178 if m.EndpointResolver == nil {
179 return out, metadata, fmt.Errorf("expected endpoint resolver to not be nil")
180 }
181
182 params := EndpointParameters{}
183
184 m.BuiltInResolver.ResolveBuiltIns(¶ms)
185
186 var resolvedEndpoint smithyendpoints.Endpoint
187 resolvedEndpoint, err = m.EndpointResolver.ResolveEndpoint(ctx, params)
188 if err != nil {
189 return out, metadata, fmt.Errorf("failed to resolve service endpoint, %w", err)
190 }
191
192 req.URL = &resolvedEndpoint.URI
193
194 for k := range resolvedEndpoint.Headers {
195 req.Header.Set(
196 k,
197 resolvedEndpoint.Headers.Get(k),
198 )
199 }
200
201 authSchemes, err := internalauth.GetAuthenticationSchemes(&resolvedEndpoint.Properties)
202 if err != nil {
203 var nfe *internalauth.NoAuthenticationSchemesFoundError
204 if errors.As(err, &nfe) {
205
206 signingName := "ecr"
207 signingRegion := m.BuiltInResolver.(*builtInResolver).Region
208 ctx = awsmiddleware.SetSigningName(ctx, signingName)
209 ctx = awsmiddleware.SetSigningRegion(ctx, signingRegion)
210
211 }
212 var ue *internalauth.UnSupportedAuthenticationSchemeSpecifiedError
213 if errors.As(err, &ue) {
214 return out, metadata, fmt.Errorf(
215 "This operation requests signer version(s) %v but the client only supports %v",
216 ue.UnsupportedSchemes,
217 internalauth.SupportedSchemes,
218 )
219 }
220 }
221
222 for _, authScheme := range authSchemes {
223 switch authScheme.(type) {
224 case *internalauth.AuthenticationSchemeV4:
225 v4Scheme, _ := authScheme.(*internalauth.AuthenticationSchemeV4)
226 var signingName, signingRegion string
227 if v4Scheme.SigningName == nil {
228 signingName = "ecr"
229 } else {
230 signingName = *v4Scheme.SigningName
231 }
232 if v4Scheme.SigningRegion == nil {
233 signingRegion = m.BuiltInResolver.(*builtInResolver).Region
234 } else {
235 signingRegion = *v4Scheme.SigningRegion
236 }
237 if v4Scheme.DisableDoubleEncoding != nil {
238
239
240
241 ctx = internalauth.SetDisableDoubleEncoding(ctx, *v4Scheme.DisableDoubleEncoding)
242 }
243 ctx = awsmiddleware.SetSigningName(ctx, signingName)
244 ctx = awsmiddleware.SetSigningRegion(ctx, signingRegion)
245 break
246 case *internalauth.AuthenticationSchemeV4A:
247 v4aScheme, _ := authScheme.(*internalauth.AuthenticationSchemeV4A)
248 if v4aScheme.SigningName == nil {
249 v4aScheme.SigningName = aws.String("ecr")
250 }
251 if v4aScheme.DisableDoubleEncoding != nil {
252
253
254
255 ctx = internalauth.SetDisableDoubleEncoding(ctx, *v4aScheme.DisableDoubleEncoding)
256 }
257 ctx = awsmiddleware.SetSigningName(ctx, *v4aScheme.SigningName)
258 ctx = awsmiddleware.SetSigningRegion(ctx, v4aScheme.SigningRegionSet[0])
259 break
260 case *internalauth.AuthenticationSchemeNone:
261 break
262 }
263 }
264
265 return next.HandleSerialize(ctx, in)
266 }
267
268 func addPutLifecyclePolicyResolveEndpointMiddleware(stack *middleware.Stack, options Options) error {
269 return stack.Serialize.Insert(&opPutLifecyclePolicyResolveEndpointMiddleware{
270 EndpointResolver: options.EndpointResolverV2,
271 BuiltInResolver: &builtInResolver{
272 Region: options.Region,
273 UseDualStack: options.EndpointOptions.UseDualStackEndpoint,
274 UseFIPS: options.EndpointOptions.UseFIPSEndpoint,
275 Endpoint: options.BaseEndpoint,
276 },
277 }, "ResolveEndpoint", middleware.After)
278 }
279
View as plain text