1// Code generated by smithy-go-codegen DO NOT EDIT. 2 3package eks 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/eks/types" 11 "github.com/aws/smithy-go/middleware" 12 smithyhttp "github.com/aws/smithy-go/transport/http" 13) 14 15// Creates an Amazon EKS add-on. Amazon EKS add-ons help to automate the 16// provisioning and lifecycle management of common operational software for Amazon 17// EKS clusters. Amazon EKS add-ons can only be used with Amazon EKS clusters 18// running version 1.18 with platform version eks.3 or later because add-ons rely 19// on the Server-side Apply Kubernetes feature, which is only available in 20// Kubernetes 1.18 and later. 21func (c *Client) CreateAddon(ctx context.Context, params *CreateAddonInput, optFns ...func(*Options)) (*CreateAddonOutput, error) { 22 if params == nil { 23 params = &CreateAddonInput{} 24 } 25 26 result, metadata, err := c.invokeOperation(ctx, "CreateAddon", params, optFns, addOperationCreateAddonMiddlewares) 27 if err != nil { 28 return nil, err 29 } 30 31 out := result.(*CreateAddonOutput) 32 out.ResultMetadata = metadata 33 return out, nil 34} 35 36type CreateAddonInput struct { 37 38 // The name of the add-on. The name must match one of the names returned by 39 // ListAddons 40 // (https://docs.aws.amazon.com/eks/latest/APIReference/API_ListAddons.html). 41 // 42 // This member is required. 43 AddonName *string 44 45 // The name of the cluster to create the add-on for. 46 // 47 // This member is required. 48 ClusterName *string 49 50 // The version of the add-on. The version must match one of the versions returned 51 // by DescribeAddonVersions 52 // (https://docs.aws.amazon.com/eks/latest/APIReference/API_DescribeAddonVersions.html). 53 AddonVersion *string 54 55 // A unique, case-sensitive identifier that you provide to ensure the idempotency 56 // of the request. 57 ClientRequestToken *string 58 59 // How to resolve parameter value conflicts when migrating an existing add-on to an 60 // Amazon EKS add-on. 61 ResolveConflicts types.ResolveConflicts 62 63 // The Amazon Resource Name (ARN) of an existing IAM role to bind to the add-on's 64 // service account. The role must be assigned the IAM permissions required by the 65 // add-on. If you don't specify an existing IAM role, then the add-on uses the 66 // permissions assigned to the node IAM role. For more information, see Amazon EKS 67 // node IAM role 68 // (https://docs.aws.amazon.com/eks/latest/userguide/create-node-role.html) in the 69 // Amazon EKS User Guide. To specify an existing IAM role, you must have an IAM 70 // OpenID Connect (OIDC) provider created for your cluster. For more information, 71 // see Enabling IAM roles for service accounts on your cluster 72 // (https://docs.aws.amazon.com/eks/latest/userguide/enable-iam-roles-for-service-accounts.html) 73 // in the Amazon EKS User Guide. 74 ServiceAccountRoleArn *string 75 76 // The metadata to apply to the cluster to assist with categorization and 77 // organization. Each tag consists of a key and an optional value, both of which 78 // you define. 79 Tags map[string]string 80} 81 82type CreateAddonOutput struct { 83 84 // An Amazon EKS add-on. 85 Addon *types.Addon 86 87 // Metadata pertaining to the operation's result. 88 ResultMetadata middleware.Metadata 89} 90 91func addOperationCreateAddonMiddlewares(stack *middleware.Stack, options Options) (err error) { 92 err = stack.Serialize.Add(&awsRestjson1_serializeOpCreateAddon{}, middleware.After) 93 if err != nil { 94 return err 95 } 96 err = stack.Deserialize.Add(&awsRestjson1_deserializeOpCreateAddon{}, middleware.After) 97 if err != nil { 98 return err 99 } 100 if err = addSetLoggerMiddleware(stack, options); err != nil { 101 return err 102 } 103 if err = awsmiddleware.AddClientRequestIDMiddleware(stack); err != nil { 104 return err 105 } 106 if err = smithyhttp.AddComputeContentLengthMiddleware(stack); err != nil { 107 return err 108 } 109 if err = addResolveEndpointMiddleware(stack, options); err != nil { 110 return err 111 } 112 if err = v4.AddComputePayloadSHA256Middleware(stack); err != nil { 113 return err 114 } 115 if err = addRetryMiddlewares(stack, options); err != nil { 116 return err 117 } 118 if err = addHTTPSignerV4Middleware(stack, options); err != nil { 119 return err 120 } 121 if err = awsmiddleware.AddRawResponseToMetadata(stack); err != nil { 122 return err 123 } 124 if err = awsmiddleware.AddRecordResponseTiming(stack); err != nil { 125 return err 126 } 127 if err = addClientUserAgent(stack); err != nil { 128 return err 129 } 130 if err = smithyhttp.AddErrorCloseResponseBodyMiddleware(stack); err != nil { 131 return err 132 } 133 if err = smithyhttp.AddCloseResponseBodyMiddleware(stack); err != nil { 134 return err 135 } 136 if err = addIdempotencyToken_opCreateAddonMiddleware(stack, options); err != nil { 137 return err 138 } 139 if err = addOpCreateAddonValidationMiddleware(stack); err != nil { 140 return err 141 } 142 if err = stack.Initialize.Add(newServiceMetadataMiddleware_opCreateAddon(options.Region), middleware.Before); err != nil { 143 return err 144 } 145 if err = addRequestIDRetrieverMiddleware(stack); err != nil { 146 return err 147 } 148 if err = addResponseErrorMiddleware(stack); err != nil { 149 return err 150 } 151 if err = addRequestResponseLogging(stack, options); err != nil { 152 return err 153 } 154 return nil 155} 156 157type idempotencyToken_initializeOpCreateAddon struct { 158 tokenProvider IdempotencyTokenProvider 159} 160 161func (*idempotencyToken_initializeOpCreateAddon) ID() string { 162 return "OperationIdempotencyTokenAutoFill" 163} 164 165func (m *idempotencyToken_initializeOpCreateAddon) HandleInitialize(ctx context.Context, in middleware.InitializeInput, next middleware.InitializeHandler) ( 166 out middleware.InitializeOutput, metadata middleware.Metadata, err error, 167) { 168 if m.tokenProvider == nil { 169 return next.HandleInitialize(ctx, in) 170 } 171 172 input, ok := in.Parameters.(*CreateAddonInput) 173 if !ok { 174 return out, metadata, fmt.Errorf("expected middleware input to be of type *CreateAddonInput ") 175 } 176 177 if input.ClientRequestToken == nil { 178 t, err := m.tokenProvider.GetIdempotencyToken() 179 if err != nil { 180 return out, metadata, err 181 } 182 input.ClientRequestToken = &t 183 } 184 return next.HandleInitialize(ctx, in) 185} 186func addIdempotencyToken_opCreateAddonMiddleware(stack *middleware.Stack, cfg Options) error { 187 return stack.Initialize.Add(&idempotencyToken_initializeOpCreateAddon{tokenProvider: cfg.IdempotencyTokenProvider}, middleware.Before) 188} 189 190func newServiceMetadataMiddleware_opCreateAddon(region string) *awsmiddleware.RegisterServiceMetadata { 191 return &awsmiddleware.RegisterServiceMetadata{ 192 Region: region, 193 ServiceID: ServiceID, 194 SigningName: "eks", 195 OperationName: "CreateAddon", 196 } 197} 198