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