1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311
|
// Code generated by smithy-go-codegen DO NOT EDIT.
package eks
import (
"context"
"fmt"
awsmiddleware "github.com/aws/aws-sdk-go-v2/aws/middleware"
"github.com/aws/aws-sdk-go-v2/aws/signer/v4"
"github.com/aws/aws-sdk-go-v2/service/eks/types"
"github.com/aws/smithy-go/middleware"
smithyhttp "github.com/aws/smithy-go/transport/http"
)
// Creates a managed node group for an Amazon EKS cluster. You can only create a
// node group for your cluster that is equal to the current Kubernetes version for
// the cluster. All node groups are created with the latest AMI release version for
// the respective minor Kubernetes version of the cluster, unless you deploy a
// custom AMI using a launch template. For more information about using launch
// templates, see Launch template support (https://docs.aws.amazon.com/eks/latest/userguide/launch-templates.html)
// . An Amazon EKS managed node group is an Amazon EC2 Auto Scaling group and
// associated Amazon EC2 instances that are managed by Amazon Web Services for an
// Amazon EKS cluster. For more information, see Managed node groups (https://docs.aws.amazon.com/eks/latest/userguide/managed-node-groups.html)
// in the Amazon EKS User Guide. Windows AMI types are only supported for
// commercial Amazon Web Services Regions that support Windows on Amazon EKS.
func (c *Client) CreateNodegroup(ctx context.Context, params *CreateNodegroupInput, optFns ...func(*Options)) (*CreateNodegroupOutput, error) {
if params == nil {
params = &CreateNodegroupInput{}
}
result, metadata, err := c.invokeOperation(ctx, "CreateNodegroup", params, optFns, c.addOperationCreateNodegroupMiddlewares)
if err != nil {
return nil, err
}
out := result.(*CreateNodegroupOutput)
out.ResultMetadata = metadata
return out, nil
}
type CreateNodegroupInput struct {
// The name of your cluster.
//
// This member is required.
ClusterName *string
// The Amazon Resource Name (ARN) of the IAM role to associate with your node
// group. The Amazon EKS worker node kubelet daemon makes calls to Amazon Web
// Services APIs on your behalf. Nodes receive permissions for these API calls
// through an IAM instance profile and associated policies. Before you can launch
// nodes and register them into a cluster, you must create an IAM role for those
// nodes to use when they are launched. For more information, see Amazon EKS node
// IAM role (https://docs.aws.amazon.com/eks/latest/userguide/create-node-role.html)
// in the Amazon EKS User Guide . If you specify launchTemplate , then don't
// specify IamInstanceProfile (https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_IamInstanceProfile.html)
// in your launch template, or the node group deployment will fail. For more
// information about using launch templates with Amazon EKS, see Launch template
// support (https://docs.aws.amazon.com/eks/latest/userguide/launch-templates.html)
// in the Amazon EKS User Guide.
//
// This member is required.
NodeRole *string
// The unique name to give your node group.
//
// This member is required.
NodegroupName *string
// The subnets to use for the Auto Scaling group that is created for your node
// group. If you specify launchTemplate , then don't specify SubnetId (https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_CreateNetworkInterface.html)
// in your launch template, or the node group deployment will fail. For more
// information about using launch templates with Amazon EKS, see Launch template
// support (https://docs.aws.amazon.com/eks/latest/userguide/launch-templates.html)
// in the Amazon EKS User Guide.
//
// This member is required.
Subnets []string
// The AMI type for your node group. If you specify launchTemplate , and your
// launch template uses a custom AMI, then don't specify amiType , or the node
// group deployment will fail. If your launch template uses a Windows custom AMI,
// then add eks:kube-proxy-windows to your Windows nodes rolearn in the aws-auth
// ConfigMap . For more information about using launch templates with Amazon EKS,
// see Launch template support (https://docs.aws.amazon.com/eks/latest/userguide/launch-templates.html)
// in the Amazon EKS User Guide.
AmiType types.AMITypes
// The capacity type for your node group.
CapacityType types.CapacityTypes
// A unique, case-sensitive identifier that you provide to ensure the idempotency
// of the request.
ClientRequestToken *string
// The root device disk size (in GiB) for your node group instances. The default
// disk size is 20 GiB for Linux and Bottlerocket. The default disk size is 50 GiB
// for Windows. If you specify launchTemplate , then don't specify diskSize , or
// the node group deployment will fail. For more information about using launch
// templates with Amazon EKS, see Launch template support (https://docs.aws.amazon.com/eks/latest/userguide/launch-templates.html)
// in the Amazon EKS User Guide.
DiskSize *int32
// Specify the instance types for a node group. If you specify a GPU instance
// type, make sure to also specify an applicable GPU AMI type with the amiType
// parameter. If you specify launchTemplate , then you can specify zero or one
// instance type in your launch template or you can specify 0-20 instance types for
// instanceTypes . If however, you specify an instance type in your launch template
// and specify any instanceTypes , the node group deployment will fail. If you
// don't specify an instance type in a launch template or for instanceTypes , then
// t3.medium is used, by default. If you specify Spot for capacityType , then we
// recommend specifying multiple values for instanceTypes . For more information,
// see Managed node group capacity types (https://docs.aws.amazon.com/eks/latest/userguide/managed-node-groups.html#managed-node-group-capacity-types)
// and Launch template support (https://docs.aws.amazon.com/eks/latest/userguide/launch-templates.html)
// in the Amazon EKS User Guide.
InstanceTypes []string
// The Kubernetes labels to apply to the nodes in the node group when they are
// created.
Labels map[string]string
// An object representing a node group's launch template specification. If
// specified, then do not specify instanceTypes , diskSize , or remoteAccess and
// make sure that the launch template meets the requirements in
// launchTemplateSpecification .
LaunchTemplate *types.LaunchTemplateSpecification
// The AMI version of the Amazon EKS optimized AMI to use with your node group. By
// default, the latest available AMI version for the node group's current
// Kubernetes version is used. For information about Linux versions, see Amazon
// EKS optimized Amazon Linux AMI versions (https://docs.aws.amazon.com/eks/latest/userguide/eks-linux-ami-versions.html)
// in the Amazon EKS User Guide. Amazon EKS managed node groups support the
// November 2022 and later releases of the Windows AMIs. For information about
// Windows versions, see Amazon EKS optimized Windows AMI versions (https://docs.aws.amazon.com/eks/latest/userguide/eks-ami-versions-windows.html)
// in the Amazon EKS User Guide. If you specify launchTemplate , and your launch
// template uses a custom AMI, then don't specify releaseVersion , or the node
// group deployment will fail. For more information about using launch templates
// with Amazon EKS, see Launch template support (https://docs.aws.amazon.com/eks/latest/userguide/launch-templates.html)
// in the Amazon EKS User Guide.
ReleaseVersion *string
// The remote access configuration to use with your node group. For Linux, the
// protocol is SSH. For Windows, the protocol is RDP. If you specify launchTemplate
// , then don't specify remoteAccess , or the node group deployment will fail. For
// more information about using launch templates with Amazon EKS, see Launch
// template support (https://docs.aws.amazon.com/eks/latest/userguide/launch-templates.html)
// in the Amazon EKS User Guide.
RemoteAccess *types.RemoteAccessConfig
// The scaling configuration details for the Auto Scaling group that is created
// for your node group.
ScalingConfig *types.NodegroupScalingConfig
// Metadata that assists with categorization and organization. Each tag consists
// of a key and an optional value. You define both. Tags don't propagate to any
// other cluster or Amazon Web Services resources.
Tags map[string]string
// The Kubernetes taints to be applied to the nodes in the node group. For more
// information, see Node taints on managed node groups (https://docs.aws.amazon.com/eks/latest/userguide/node-taints-managed-node-groups.html)
// .
Taints []types.Taint
// The node group update configuration.
UpdateConfig *types.NodegroupUpdateConfig
// The Kubernetes version to use for your managed nodes. By default, the
// Kubernetes version of the cluster is used, and this is the only accepted
// specified value. If you specify launchTemplate , and your launch template uses a
// custom AMI, then don't specify version , or the node group deployment will fail.
// For more information about using launch templates with Amazon EKS, see Launch
// template support (https://docs.aws.amazon.com/eks/latest/userguide/launch-templates.html)
// in the Amazon EKS User Guide.
Version *string
noSmithyDocumentSerde
}
type CreateNodegroupOutput struct {
// The full description of your new node group.
Nodegroup *types.Nodegroup
// Metadata pertaining to the operation's result.
ResultMetadata middleware.Metadata
noSmithyDocumentSerde
}
func (c *Client) addOperationCreateNodegroupMiddlewares(stack *middleware.Stack, options Options) (err error) {
if err := stack.Serialize.Add(&setOperationInputMiddleware{}, middleware.After); err != nil {
return err
}
err = stack.Serialize.Add(&awsRestjson1_serializeOpCreateNodegroup{}, middleware.After)
if err != nil {
return err
}
err = stack.Deserialize.Add(&awsRestjson1_deserializeOpCreateNodegroup{}, middleware.After)
if err != nil {
return err
}
if err := addProtocolFinalizerMiddlewares(stack, options, "CreateNodegroup"); err != nil {
return fmt.Errorf("add protocol finalizers: %v", err)
}
if err = addlegacyEndpointContextSetter(stack, options); err != nil {
return err
}
if err = addSetLoggerMiddleware(stack, options); err != nil {
return err
}
if err = awsmiddleware.AddClientRequestIDMiddleware(stack); err != nil {
return err
}
if err = smithyhttp.AddComputeContentLengthMiddleware(stack); err != nil {
return err
}
if err = addResolveEndpointMiddleware(stack, options); err != nil {
return err
}
if err = v4.AddComputePayloadSHA256Middleware(stack); err != nil {
return err
}
if err = addRetryMiddlewares(stack, options); err != nil {
return err
}
if err = awsmiddleware.AddRawResponseToMetadata(stack); err != nil {
return err
}
if err = awsmiddleware.AddRecordResponseTiming(stack); err != nil {
return err
}
if err = addClientUserAgent(stack, options); err != nil {
return err
}
if err = smithyhttp.AddErrorCloseResponseBodyMiddleware(stack); err != nil {
return err
}
if err = smithyhttp.AddCloseResponseBodyMiddleware(stack); err != nil {
return err
}
if err = addSetLegacyContextSigningOptionsMiddleware(stack); err != nil {
return err
}
if err = addIdempotencyToken_opCreateNodegroupMiddleware(stack, options); err != nil {
return err
}
if err = addOpCreateNodegroupValidationMiddleware(stack); err != nil {
return err
}
if err = stack.Initialize.Add(newServiceMetadataMiddleware_opCreateNodegroup(options.Region), middleware.Before); err != nil {
return err
}
if err = awsmiddleware.AddRecursionDetection(stack); err != nil {
return err
}
if err = addRequestIDRetrieverMiddleware(stack); err != nil {
return err
}
if err = addResponseErrorMiddleware(stack); err != nil {
return err
}
if err = addRequestResponseLogging(stack, options); err != nil {
return err
}
if err = addDisableHTTPSMiddleware(stack, options); err != nil {
return err
}
return nil
}
type idempotencyToken_initializeOpCreateNodegroup struct {
tokenProvider IdempotencyTokenProvider
}
func (*idempotencyToken_initializeOpCreateNodegroup) ID() string {
return "OperationIdempotencyTokenAutoFill"
}
func (m *idempotencyToken_initializeOpCreateNodegroup) HandleInitialize(ctx context.Context, in middleware.InitializeInput, next middleware.InitializeHandler) (
out middleware.InitializeOutput, metadata middleware.Metadata, err error,
) {
if m.tokenProvider == nil {
return next.HandleInitialize(ctx, in)
}
input, ok := in.Parameters.(*CreateNodegroupInput)
if !ok {
return out, metadata, fmt.Errorf("expected middleware input to be of type *CreateNodegroupInput ")
}
if input.ClientRequestToken == nil {
t, err := m.tokenProvider.GetIdempotencyToken()
if err != nil {
return out, metadata, err
}
input.ClientRequestToken = &t
}
return next.HandleInitialize(ctx, in)
}
func addIdempotencyToken_opCreateNodegroupMiddleware(stack *middleware.Stack, cfg Options) error {
return stack.Initialize.Add(&idempotencyToken_initializeOpCreateNodegroup{tokenProvider: cfg.IdempotencyTokenProvider}, middleware.Before)
}
func newServiceMetadataMiddleware_opCreateNodegroup(region string) *awsmiddleware.RegisterServiceMetadata {
return &awsmiddleware.RegisterServiceMetadata{
Region: region,
ServiceID: ServiceID,
OperationName: "CreateNodegroup",
}
}
|