rusoto_eks/
generated.rs

1// =================================================================
2//
3//                           * WARNING *
4//
5//                    This file is generated!
6//
7//  Changes made to this file will be overwritten. If changes are
8//  required to the generated code, the service_crategen project
9//  must be updated to generate the changes.
10//
11// =================================================================
12
13use std::error::Error;
14use std::fmt;
15
16use async_trait::async_trait;
17use rusoto_core::credential::ProvideAwsCredentials;
18use rusoto_core::region;
19use rusoto_core::request::{BufferedHttpResponse, DispatchSignedRequest};
20use rusoto_core::{Client, RusotoError};
21
22use rusoto_core::param::{Params, ServiceParams};
23use rusoto_core::proto;
24use rusoto_core::signature::SignedRequest;
25#[allow(unused_imports)]
26use serde::{Deserialize, Serialize};
27use serde_json;
28/// <p>An Amazon EKS add-on.</p>
29#[derive(Clone, Debug, Default, Deserialize, PartialEq)]
30#[cfg_attr(any(test, feature = "serialize_structs"), derive(Serialize))]
31pub struct Addon {
32    /// <p>The Amazon Resource Name (ARN) of the add-on.</p>
33    #[serde(rename = "addonArn")]
34    #[serde(skip_serializing_if = "Option::is_none")]
35    pub addon_arn: Option<String>,
36    /// <p>The name of the add-on.</p>
37    #[serde(rename = "addonName")]
38    #[serde(skip_serializing_if = "Option::is_none")]
39    pub addon_name: Option<String>,
40    /// <p>The version of the add-on.</p>
41    #[serde(rename = "addonVersion")]
42    #[serde(skip_serializing_if = "Option::is_none")]
43    pub addon_version: Option<String>,
44    /// <p>The name of the cluster.</p>
45    #[serde(rename = "clusterName")]
46    #[serde(skip_serializing_if = "Option::is_none")]
47    pub cluster_name: Option<String>,
48    /// <p>The date and time that the add-on was created.</p>
49    #[serde(rename = "createdAt")]
50    #[serde(skip_serializing_if = "Option::is_none")]
51    pub created_at: Option<f64>,
52    /// <p>An object that represents the health of the add-on.</p>
53    #[serde(rename = "health")]
54    #[serde(skip_serializing_if = "Option::is_none")]
55    pub health: Option<AddonHealth>,
56    /// <p>The date and time that the add-on was last modified.</p>
57    #[serde(rename = "modifiedAt")]
58    #[serde(skip_serializing_if = "Option::is_none")]
59    pub modified_at: Option<f64>,
60    /// <p>The Amazon Resource Name (ARN) of the IAM role that is bound to the Kubernetes service account used by the add-on.</p>
61    #[serde(rename = "serviceAccountRoleArn")]
62    #[serde(skip_serializing_if = "Option::is_none")]
63    pub service_account_role_arn: Option<String>,
64    /// <p>The status of the add-on.</p>
65    #[serde(rename = "status")]
66    #[serde(skip_serializing_if = "Option::is_none")]
67    pub status: Option<String>,
68    /// <p>The metadata that you apply to the add-on to assist with categorization and organization. Each tag consists of a key and an optional value, both of which you define. Add-on tags do not propagate to any other resources associated with the cluster. </p>
69    #[serde(rename = "tags")]
70    #[serde(skip_serializing_if = "Option::is_none")]
71    pub tags: Option<::std::collections::HashMap<String, String>>,
72}
73
74/// <p>The health of the add-on.</p>
75#[derive(Clone, Debug, Default, Deserialize, PartialEq)]
76#[cfg_attr(any(test, feature = "serialize_structs"), derive(Serialize))]
77pub struct AddonHealth {
78    /// <p>An object that represents the add-on's health issues.</p>
79    #[serde(rename = "issues")]
80    #[serde(skip_serializing_if = "Option::is_none")]
81    pub issues: Option<Vec<AddonIssue>>,
82}
83
84/// <p>Information about an add-on.</p>
85#[derive(Clone, Debug, Default, Deserialize, PartialEq)]
86#[cfg_attr(any(test, feature = "serialize_structs"), derive(Serialize))]
87pub struct AddonInfo {
88    /// <p>The name of the add-on.</p>
89    #[serde(rename = "addonName")]
90    #[serde(skip_serializing_if = "Option::is_none")]
91    pub addon_name: Option<String>,
92    /// <p>An object that represents information about available add-on versions and compatible Kubernetes versions.</p>
93    #[serde(rename = "addonVersions")]
94    #[serde(skip_serializing_if = "Option::is_none")]
95    pub addon_versions: Option<Vec<AddonVersionInfo>>,
96    /// <p>The type of the add-on.</p>
97    #[serde(rename = "type")]
98    #[serde(skip_serializing_if = "Option::is_none")]
99    pub type_: Option<String>,
100}
101
102/// <p>An issue related to an add-on.</p>
103#[derive(Clone, Debug, Default, Deserialize, PartialEq)]
104#[cfg_attr(any(test, feature = "serialize_structs"), derive(Serialize))]
105pub struct AddonIssue {
106    /// <p>A code that describes the type of issue.</p>
107    #[serde(rename = "code")]
108    #[serde(skip_serializing_if = "Option::is_none")]
109    pub code: Option<String>,
110    /// <p>A message that provides details about the issue and what might cause it.</p>
111    #[serde(rename = "message")]
112    #[serde(skip_serializing_if = "Option::is_none")]
113    pub message: Option<String>,
114    /// <p>The resource IDs of the issue.</p>
115    #[serde(rename = "resourceIds")]
116    #[serde(skip_serializing_if = "Option::is_none")]
117    pub resource_ids: Option<Vec<String>>,
118}
119
120/// <p>Information about an add-on version.</p>
121#[derive(Clone, Debug, Default, Deserialize, PartialEq)]
122#[cfg_attr(any(test, feature = "serialize_structs"), derive(Serialize))]
123pub struct AddonVersionInfo {
124    /// <p>The version of the add-on.</p>
125    #[serde(rename = "addonVersion")]
126    #[serde(skip_serializing_if = "Option::is_none")]
127    pub addon_version: Option<String>,
128    /// <p>The architectures that the version supports.</p>
129    #[serde(rename = "architecture")]
130    #[serde(skip_serializing_if = "Option::is_none")]
131    pub architecture: Option<Vec<String>>,
132    /// <p>An object that represents the compatibilities of a version.</p>
133    #[serde(rename = "compatibilities")]
134    #[serde(skip_serializing_if = "Option::is_none")]
135    pub compatibilities: Option<Vec<Compatibility>>,
136}
137
138#[derive(Clone, Debug, Default, PartialEq, Serialize)]
139#[cfg_attr(feature = "deserialize_structs", derive(Deserialize))]
140pub struct AssociateEncryptionConfigRequest {
141    /// <p>The client request token you are using with the encryption configuration.</p>
142    #[serde(rename = "clientRequestToken")]
143    #[serde(skip_serializing_if = "Option::is_none")]
144    pub client_request_token: Option<String>,
145    /// <p>The name of the cluster that you are associating with encryption configuration.</p>
146    #[serde(rename = "clusterName")]
147    pub cluster_name: String,
148    /// <p>The configuration you are using for encryption.</p>
149    #[serde(rename = "encryptionConfig")]
150    pub encryption_config: Vec<EncryptionConfig>,
151}
152
153#[derive(Clone, Debug, Default, Deserialize, PartialEq)]
154#[cfg_attr(any(test, feature = "serialize_structs"), derive(Serialize))]
155pub struct AssociateEncryptionConfigResponse {
156    #[serde(rename = "update")]
157    #[serde(skip_serializing_if = "Option::is_none")]
158    pub update: Option<Update>,
159}
160
161#[derive(Clone, Debug, Default, PartialEq, Serialize)]
162#[cfg_attr(feature = "deserialize_structs", derive(Deserialize))]
163pub struct AssociateIdentityProviderConfigRequest {
164    /// <p>Unique, case-sensitive identifier that you provide to ensure the idempotency of the request.</p>
165    #[serde(rename = "clientRequestToken")]
166    #[serde(skip_serializing_if = "Option::is_none")]
167    pub client_request_token: Option<String>,
168    /// <p>The name of the cluster to associate the configuration to.</p>
169    #[serde(rename = "clusterName")]
170    pub cluster_name: String,
171    /// <p>An object that represents an OpenID Connect (OIDC) identity provider configuration.</p>
172    #[serde(rename = "oidc")]
173    pub oidc: OidcIdentityProviderConfigRequest,
174    /// <p>The metadata to apply to the configuration to assist with categorization and organization. Each tag consists of a key and an optional value, both of which you define.</p>
175    #[serde(rename = "tags")]
176    #[serde(skip_serializing_if = "Option::is_none")]
177    pub tags: Option<::std::collections::HashMap<String, String>>,
178}
179
180#[derive(Clone, Debug, Default, Deserialize, PartialEq)]
181#[cfg_attr(any(test, feature = "serialize_structs"), derive(Serialize))]
182pub struct AssociateIdentityProviderConfigResponse {
183    /// <p>The tags for the resource.</p>
184    #[serde(rename = "tags")]
185    #[serde(skip_serializing_if = "Option::is_none")]
186    pub tags: Option<::std::collections::HashMap<String, String>>,
187    #[serde(rename = "update")]
188    #[serde(skip_serializing_if = "Option::is_none")]
189    pub update: Option<Update>,
190}
191
192/// <p>An Auto Scaling group that is associated with an Amazon EKS managed node group.</p>
193#[derive(Clone, Debug, Default, Deserialize, PartialEq)]
194#[cfg_attr(any(test, feature = "serialize_structs"), derive(Serialize))]
195pub struct AutoScalingGroup {
196    /// <p>The name of the Auto Scaling group associated with an Amazon EKS managed node group.</p>
197    #[serde(rename = "name")]
198    #[serde(skip_serializing_if = "Option::is_none")]
199    pub name: Option<String>,
200}
201
202/// <p>An object representing the <code>certificate-authority-data</code> for your cluster.</p>
203#[derive(Clone, Debug, Default, Deserialize, PartialEq)]
204#[cfg_attr(any(test, feature = "serialize_structs"), derive(Serialize))]
205pub struct Certificate {
206    /// <p>The Base64-encoded certificate data required to communicate with your cluster. Add this to the <code>certificate-authority-data</code> section of the <code>kubeconfig</code> file for your cluster.</p>
207    #[serde(rename = "data")]
208    #[serde(skip_serializing_if = "Option::is_none")]
209    pub data: Option<String>,
210}
211
212/// <p>An object representing an Amazon EKS cluster.</p>
213#[derive(Clone, Debug, Default, Deserialize, PartialEq)]
214#[cfg_attr(any(test, feature = "serialize_structs"), derive(Serialize))]
215pub struct Cluster {
216    /// <p>The Amazon Resource Name (ARN) of the cluster.</p>
217    #[serde(rename = "arn")]
218    #[serde(skip_serializing_if = "Option::is_none")]
219    pub arn: Option<String>,
220    /// <p>The <code>certificate-authority-data</code> for your cluster.</p>
221    #[serde(rename = "certificateAuthority")]
222    #[serde(skip_serializing_if = "Option::is_none")]
223    pub certificate_authority: Option<Certificate>,
224    /// <p>Unique, case-sensitive identifier that you provide to ensure the idempotency of the request.</p>
225    #[serde(rename = "clientRequestToken")]
226    #[serde(skip_serializing_if = "Option::is_none")]
227    pub client_request_token: Option<String>,
228    /// <p>The Unix epoch timestamp in seconds for when the cluster was created.</p>
229    #[serde(rename = "createdAt")]
230    #[serde(skip_serializing_if = "Option::is_none")]
231    pub created_at: Option<f64>,
232    /// <p>The encryption configuration for the cluster.</p>
233    #[serde(rename = "encryptionConfig")]
234    #[serde(skip_serializing_if = "Option::is_none")]
235    pub encryption_config: Option<Vec<EncryptionConfig>>,
236    /// <p>The endpoint for your Kubernetes API server.</p>
237    #[serde(rename = "endpoint")]
238    #[serde(skip_serializing_if = "Option::is_none")]
239    pub endpoint: Option<String>,
240    /// <p>The identity provider information for the cluster.</p>
241    #[serde(rename = "identity")]
242    #[serde(skip_serializing_if = "Option::is_none")]
243    pub identity: Option<Identity>,
244    /// <p>The Kubernetes network configuration for the cluster.</p>
245    #[serde(rename = "kubernetesNetworkConfig")]
246    #[serde(skip_serializing_if = "Option::is_none")]
247    pub kubernetes_network_config: Option<KubernetesNetworkConfigResponse>,
248    /// <p>The logging configuration for your cluster.</p>
249    #[serde(rename = "logging")]
250    #[serde(skip_serializing_if = "Option::is_none")]
251    pub logging: Option<Logging>,
252    /// <p>The name of the cluster.</p>
253    #[serde(rename = "name")]
254    #[serde(skip_serializing_if = "Option::is_none")]
255    pub name: Option<String>,
256    /// <p>The platform version of your Amazon EKS cluster. For more information, see <a href="https://docs.aws.amazon.com/eks/latest/userguide/platform-versions.html">Platform Versions</a> in the <i> <i>Amazon EKS User Guide</i> </i>.</p>
257    #[serde(rename = "platformVersion")]
258    #[serde(skip_serializing_if = "Option::is_none")]
259    pub platform_version: Option<String>,
260    /// <p>The VPC configuration used by the cluster control plane. Amazon EKS VPC resources have specific requirements to work properly with Kubernetes. For more information, see <a href="https://docs.aws.amazon.com/eks/latest/userguide/network_reqs.html">Cluster VPC Considerations</a> and <a href="https://docs.aws.amazon.com/eks/latest/userguide/sec-group-reqs.html">Cluster Security Group Considerations</a> in the <i>Amazon EKS User Guide</i>.</p>
261    #[serde(rename = "resourcesVpcConfig")]
262    #[serde(skip_serializing_if = "Option::is_none")]
263    pub resources_vpc_config: Option<VpcConfigResponse>,
264    /// <p>The Amazon Resource Name (ARN) of the IAM role that provides permissions for the Kubernetes control plane to make calls to AWS API operations on your behalf.</p>
265    #[serde(rename = "roleArn")]
266    #[serde(skip_serializing_if = "Option::is_none")]
267    pub role_arn: Option<String>,
268    /// <p>The current status of the cluster.</p>
269    #[serde(rename = "status")]
270    #[serde(skip_serializing_if = "Option::is_none")]
271    pub status: Option<String>,
272    /// <p>The metadata that you apply to the cluster to assist with categorization and organization. Each tag consists of a key and an optional value, both of which you define. Cluster tags do not propagate to any other resources associated with the cluster. </p>
273    #[serde(rename = "tags")]
274    #[serde(skip_serializing_if = "Option::is_none")]
275    pub tags: Option<::std::collections::HashMap<String, String>>,
276    /// <p>The Kubernetes server version for the cluster.</p>
277    #[serde(rename = "version")]
278    #[serde(skip_serializing_if = "Option::is_none")]
279    pub version: Option<String>,
280}
281
282/// <p>Compatibility information.</p>
283#[derive(Clone, Debug, Default, Deserialize, PartialEq)]
284#[cfg_attr(any(test, feature = "serialize_structs"), derive(Serialize))]
285pub struct Compatibility {
286    /// <p>The supported Kubernetes version of the cluster.</p>
287    #[serde(rename = "clusterVersion")]
288    #[serde(skip_serializing_if = "Option::is_none")]
289    pub cluster_version: Option<String>,
290    /// <p>The supported default version.</p>
291    #[serde(rename = "defaultVersion")]
292    #[serde(skip_serializing_if = "Option::is_none")]
293    pub default_version: Option<bool>,
294    /// <p>The supported compute platform.</p>
295    #[serde(rename = "platformVersions")]
296    #[serde(skip_serializing_if = "Option::is_none")]
297    pub platform_versions: Option<Vec<String>>,
298}
299
300#[derive(Clone, Debug, Default, PartialEq, Serialize)]
301#[cfg_attr(feature = "deserialize_structs", derive(Deserialize))]
302pub struct CreateAddonRequest {
303    /// <p>The name of the add-on. The name must match one of the names returned by <a href="https://docs.aws.amazon.com/eks/latest/APIReference/API_ListAddons.html"> <code>ListAddons</code> </a>.</p>
304    #[serde(rename = "addonName")]
305    pub addon_name: String,
306    /// <p>The version of the add-on. The version must match one of the versions returned by <a href="https://docs.aws.amazon.com/eks/latest/APIReference/API_DescribeAddonVersions.html"> <code>DescribeAddonVersions</code> </a>.</p>
307    #[serde(rename = "addonVersion")]
308    #[serde(skip_serializing_if = "Option::is_none")]
309    pub addon_version: Option<String>,
310    /// <p>A unique, case-sensitive identifier that you provide to ensure the idempotency of the request.</p>
311    #[serde(rename = "clientRequestToken")]
312    #[serde(skip_serializing_if = "Option::is_none")]
313    pub client_request_token: Option<String>,
314    /// <p>The name of the cluster to create the add-on for.</p>
315    #[serde(rename = "clusterName")]
316    pub cluster_name: String,
317    /// <p>How to resolve parameter value conflicts when migrating an existing add-on to an Amazon EKS add-on.</p>
318    #[serde(rename = "resolveConflicts")]
319    #[serde(skip_serializing_if = "Option::is_none")]
320    pub resolve_conflicts: Option<String>,
321    /// <p><p>The Amazon Resource Name (ARN) of an existing IAM role to bind to the add-on&#39;s service account. The role must be assigned the IAM permissions required by the add-on. If you don&#39;t specify an existing IAM role, then the add-on uses the permissions assigned to the node IAM role. For more information, see <a href="https://docs.aws.amazon.com/eks/latest/userguide/create-node-role.html">Amazon EKS node IAM role</a> in the <i>Amazon EKS User Guide</i>.</p> <note> <p>To specify an existing IAM role, you must have an IAM OpenID Connect (OIDC) provider created for your cluster. For more information, see <a href="https://docs.aws.amazon.com/eks/latest/userguide/enable-iam-roles-for-service-accounts.html">Enabling IAM roles for service accounts on your cluster</a> in the <i>Amazon EKS User Guide</i>.</p> </note></p>
322    #[serde(rename = "serviceAccountRoleArn")]
323    #[serde(skip_serializing_if = "Option::is_none")]
324    pub service_account_role_arn: Option<String>,
325    /// <p>The metadata to apply to the cluster to assist with categorization and organization. Each tag consists of a key and an optional value, both of which you define. </p>
326    #[serde(rename = "tags")]
327    #[serde(skip_serializing_if = "Option::is_none")]
328    pub tags: Option<::std::collections::HashMap<String, String>>,
329}
330
331#[derive(Clone, Debug, Default, Deserialize, PartialEq)]
332#[cfg_attr(any(test, feature = "serialize_structs"), derive(Serialize))]
333pub struct CreateAddonResponse {
334    #[serde(rename = "addon")]
335    #[serde(skip_serializing_if = "Option::is_none")]
336    pub addon: Option<Addon>,
337}
338
339#[derive(Clone, Debug, Default, PartialEq, Serialize)]
340#[cfg_attr(feature = "deserialize_structs", derive(Deserialize))]
341pub struct CreateClusterRequest {
342    /// <p>Unique, case-sensitive identifier that you provide to ensure the idempotency of the request.</p>
343    #[serde(rename = "clientRequestToken")]
344    #[serde(skip_serializing_if = "Option::is_none")]
345    pub client_request_token: Option<String>,
346    /// <p>The encryption configuration for the cluster.</p>
347    #[serde(rename = "encryptionConfig")]
348    #[serde(skip_serializing_if = "Option::is_none")]
349    pub encryption_config: Option<Vec<EncryptionConfig>>,
350    /// <p>The Kubernetes network configuration for the cluster.</p>
351    #[serde(rename = "kubernetesNetworkConfig")]
352    #[serde(skip_serializing_if = "Option::is_none")]
353    pub kubernetes_network_config: Option<KubernetesNetworkConfigRequest>,
354    /// <p><p>Enable or disable exporting the Kubernetes control plane logs for your cluster to CloudWatch Logs. By default, cluster control plane logs aren&#39;t exported to CloudWatch Logs. For more information, see <a href="https://docs.aws.amazon.com/eks/latest/userguide/control-plane-logs.html">Amazon EKS Cluster Control Plane Logs</a> in the <i> <i>Amazon EKS User Guide</i> </i>.</p> <note> <p>CloudWatch Logs ingestion, archive storage, and data scanning rates apply to exported control plane logs. For more information, see <a href="http://aws.amazon.com/cloudwatch/pricing/">Amazon CloudWatch Pricing</a>.</p> </note></p>
355    #[serde(rename = "logging")]
356    #[serde(skip_serializing_if = "Option::is_none")]
357    pub logging: Option<Logging>,
358    /// <p>The unique name to give to your cluster.</p>
359    #[serde(rename = "name")]
360    pub name: String,
361    /// <p>The VPC configuration used by the cluster control plane. Amazon EKS VPC resources have specific requirements to work properly with Kubernetes. For more information, see <a href="https://docs.aws.amazon.com/eks/latest/userguide/network_reqs.html">Cluster VPC Considerations</a> and <a href="https://docs.aws.amazon.com/eks/latest/userguide/sec-group-reqs.html">Cluster Security Group Considerations</a> in the <i>Amazon EKS User Guide</i>. You must specify at least two subnets. You can specify up to five security groups, but we recommend that you use a dedicated security group for your cluster control plane.</p>
362    #[serde(rename = "resourcesVpcConfig")]
363    pub resources_vpc_config: VpcConfigRequest,
364    /// <p>The Amazon Resource Name (ARN) of the IAM role that provides permissions for the Kubernetes control plane to make calls to AWS API operations on your behalf. For more information, see <a href="https://docs.aws.amazon.com/eks/latest/userguide/service_IAM_role.html">Amazon EKS Service IAM Role</a> in the <i> <i>Amazon EKS User Guide</i> </i>.</p>
365    #[serde(rename = "roleArn")]
366    pub role_arn: String,
367    /// <p>The metadata to apply to the cluster to assist with categorization and organization. Each tag consists of a key and an optional value, both of which you define.</p>
368    #[serde(rename = "tags")]
369    #[serde(skip_serializing_if = "Option::is_none")]
370    pub tags: Option<::std::collections::HashMap<String, String>>,
371    /// <p>The desired Kubernetes version for your cluster. If you don't specify a value here, the latest version available in Amazon EKS is used.</p>
372    #[serde(rename = "version")]
373    #[serde(skip_serializing_if = "Option::is_none")]
374    pub version: Option<String>,
375}
376
377#[derive(Clone, Debug, Default, Deserialize, PartialEq)]
378#[cfg_attr(any(test, feature = "serialize_structs"), derive(Serialize))]
379pub struct CreateClusterResponse {
380    /// <p>The full description of your new cluster.</p>
381    #[serde(rename = "cluster")]
382    #[serde(skip_serializing_if = "Option::is_none")]
383    pub cluster: Option<Cluster>,
384}
385
386#[derive(Clone, Debug, Default, PartialEq, Serialize)]
387#[cfg_attr(feature = "deserialize_structs", derive(Deserialize))]
388pub struct CreateFargateProfileRequest {
389    /// <p>Unique, case-sensitive identifier that you provide to ensure the idempotency of the request.</p>
390    #[serde(rename = "clientRequestToken")]
391    #[serde(skip_serializing_if = "Option::is_none")]
392    pub client_request_token: Option<String>,
393    /// <p>The name of the Amazon EKS cluster to apply the Fargate profile to.</p>
394    #[serde(rename = "clusterName")]
395    pub cluster_name: String,
396    /// <p>The name of the Fargate profile.</p>
397    #[serde(rename = "fargateProfileName")]
398    pub fargate_profile_name: String,
399    /// <p>The Amazon Resource Name (ARN) of the pod execution role to use for pods that match the selectors in the Fargate profile. The pod execution role allows Fargate infrastructure to register with your cluster as a node, and it provides read access to Amazon ECR image repositories. For more information, see <a href="https://docs.aws.amazon.com/eks/latest/userguide/pod-execution-role.html">Pod Execution Role</a> in the <i>Amazon EKS User Guide</i>.</p>
400    #[serde(rename = "podExecutionRoleArn")]
401    pub pod_execution_role_arn: String,
402    /// <p>The selectors to match for pods to use this Fargate profile. Each selector must have an associated namespace. Optionally, you can also specify labels for a namespace. You may specify up to five selectors in a Fargate profile.</p>
403    #[serde(rename = "selectors")]
404    #[serde(skip_serializing_if = "Option::is_none")]
405    pub selectors: Option<Vec<FargateProfileSelector>>,
406    /// <p>The IDs of subnets to launch your pods into. At this time, pods running on Fargate are not assigned public IP addresses, so only private subnets (with no direct route to an Internet Gateway) are accepted for this parameter.</p>
407    #[serde(rename = "subnets")]
408    #[serde(skip_serializing_if = "Option::is_none")]
409    pub subnets: Option<Vec<String>>,
410    /// <p>The metadata to apply to the Fargate profile to assist with categorization and organization. Each tag consists of a key and an optional value, both of which you define. Fargate profile tags do not propagate to any other resources associated with the Fargate profile, such as the pods that are scheduled with it.</p>
411    #[serde(rename = "tags")]
412    #[serde(skip_serializing_if = "Option::is_none")]
413    pub tags: Option<::std::collections::HashMap<String, String>>,
414}
415
416#[derive(Clone, Debug, Default, Deserialize, PartialEq)]
417#[cfg_attr(any(test, feature = "serialize_structs"), derive(Serialize))]
418pub struct CreateFargateProfileResponse {
419    /// <p>The full description of your new Fargate profile.</p>
420    #[serde(rename = "fargateProfile")]
421    #[serde(skip_serializing_if = "Option::is_none")]
422    pub fargate_profile: Option<FargateProfile>,
423}
424
425#[derive(Clone, Debug, Default, PartialEq, Serialize)]
426#[cfg_attr(feature = "deserialize_structs", derive(Deserialize))]
427pub struct CreateNodegroupRequest {
428    /// <p>The AMI type for your node group. GPU instance types should use the <code>AL2_x86_64_GPU</code> AMI type. Non-GPU instances should use the <code>AL2_x86_64</code> AMI type. Arm instances should use the <code>AL2_ARM_64</code> AMI type. All types use the Amazon EKS optimized Amazon Linux 2 AMI. If you specify <code>launchTemplate</code>, and your launch template uses a custom AMI, then don't specify <code>amiType</code>, or the node group deployment will fail. For more information about using launch templates with Amazon EKS, see <a href="https://docs.aws.amazon.com/eks/latest/userguide/launch-templates.html">Launch template support</a> in the Amazon EKS User Guide.</p>
429    #[serde(rename = "amiType")]
430    #[serde(skip_serializing_if = "Option::is_none")]
431    pub ami_type: Option<String>,
432    /// <p>The capacity type for your node group.</p>
433    #[serde(rename = "capacityType")]
434    #[serde(skip_serializing_if = "Option::is_none")]
435    pub capacity_type: Option<String>,
436    /// <p>Unique, case-sensitive identifier that you provide to ensure the idempotency of the request.</p>
437    #[serde(rename = "clientRequestToken")]
438    #[serde(skip_serializing_if = "Option::is_none")]
439    pub client_request_token: Option<String>,
440    /// <p>The name of the cluster to create the node group in.</p>
441    #[serde(rename = "clusterName")]
442    pub cluster_name: String,
443    /// <p>The root device disk size (in GiB) for your node group instances. The default disk size is 20 GiB. If you specify <code>launchTemplate</code>, then don't specify <code>diskSize</code>, or the node group deployment will fail. For more information about using launch templates with Amazon EKS, see <a href="https://docs.aws.amazon.com/eks/latest/userguide/launch-templates.html">Launch template support</a> in the Amazon EKS User Guide.</p>
444    #[serde(rename = "diskSize")]
445    #[serde(skip_serializing_if = "Option::is_none")]
446    pub disk_size: Option<i64>,
447    /// <p>Specify the instance types for a node group. If you specify a GPU instance type, be sure to specify <code>AL2_x86_64_GPU</code> with the <code>amiType</code> parameter. If you specify <code>launchTemplate</code>, then you can specify zero or one instance type in your launch template <i>or</i> you can specify 0-20 instance types for <code>instanceTypes</code>. If however, you specify an instance type in your launch template <i>and</i> specify any <code>instanceTypes</code>, the node group deployment will fail. If you don't specify an instance type in a launch template or for <code>instanceTypes</code>, then <code>t3.medium</code> is used, by default. If you specify <code>Spot</code> for <code>capacityType</code>, then we recommend specifying multiple values for <code>instanceTypes</code>. For more information, see <a href="https://docs.aws.amazon.com/eks/latest/userguide/managed-node-groups.html#managed-node-group-capacity-types">Managed node group capacity types</a> and <a href="https://docs.aws.amazon.com/eks/latest/userguide/launch-templates.html">Launch template support</a> in the <i>Amazon EKS User Guide</i>.</p>
448    #[serde(rename = "instanceTypes")]
449    #[serde(skip_serializing_if = "Option::is_none")]
450    pub instance_types: Option<Vec<String>>,
451    /// <p>The Kubernetes labels to be applied to the nodes in the node group when they are created.</p>
452    #[serde(rename = "labels")]
453    #[serde(skip_serializing_if = "Option::is_none")]
454    pub labels: Option<::std::collections::HashMap<String, String>>,
455    /// <p>An object representing a node group's launch template specification. If specified, then do not specify <code>instanceTypes</code>, <code>diskSize</code>, or <code>remoteAccess</code> and make sure that the launch template meets the requirements in <code>launchTemplateSpecification</code>.</p>
456    #[serde(rename = "launchTemplate")]
457    #[serde(skip_serializing_if = "Option::is_none")]
458    pub launch_template: Option<LaunchTemplateSpecification>,
459    /// <p>The Amazon Resource Name (ARN) of the IAM role to associate with your node group. The Amazon EKS worker node <code>kubelet</code> daemon makes calls to AWS 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 <a href="https://docs.aws.amazon.com/eks/latest/userguide/worker_node_IAM_role.html">Amazon EKS node IAM role</a> in the <i> <i>Amazon EKS User Guide</i> </i>. If you specify <code>launchTemplate</code>, then don't specify <a href="https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_IamInstanceProfile.html"> <code>IamInstanceProfile</code> </a> in your launch template, or the node group deployment will fail. For more information about using launch templates with Amazon EKS, see <a href="https://docs.aws.amazon.com/eks/latest/userguide/launch-templates.html">Launch template support</a> in the Amazon EKS User Guide.</p>
460    #[serde(rename = "nodeRole")]
461    pub node_role: String,
462    /// <p>The unique name to give your node group.</p>
463    #[serde(rename = "nodegroupName")]
464    pub nodegroup_name: String,
465    /// <p>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 more information, see <a href="https://docs.aws.amazon.com/eks/latest/userguide/eks-linux-ami-versions.html">Amazon EKS optimized Amazon Linux 2 AMI versions</a> in the <i>Amazon EKS User Guide</i>. If you specify <code>launchTemplate</code>, and your launch template uses a custom AMI, then don't specify <code>releaseVersion</code>, or the node group deployment will fail. For more information about using launch templates with Amazon EKS, see <a href="https://docs.aws.amazon.com/eks/latest/userguide/launch-templates.html">Launch template support</a> in the Amazon EKS User Guide.</p>
466    #[serde(rename = "releaseVersion")]
467    #[serde(skip_serializing_if = "Option::is_none")]
468    pub release_version: Option<String>,
469    /// <p>The remote access (SSH) configuration to use with your node group. If you specify <code>launchTemplate</code>, then don't specify <code>remoteAccess</code>, or the node group deployment will fail. For more information about using launch templates with Amazon EKS, see <a href="https://docs.aws.amazon.com/eks/latest/userguide/launch-templates.html">Launch template support</a> in the Amazon EKS User Guide.</p>
470    #[serde(rename = "remoteAccess")]
471    #[serde(skip_serializing_if = "Option::is_none")]
472    pub remote_access: Option<RemoteAccessConfig>,
473    /// <p>The scaling configuration details for the Auto Scaling group that is created for your node group.</p>
474    #[serde(rename = "scalingConfig")]
475    #[serde(skip_serializing_if = "Option::is_none")]
476    pub scaling_config: Option<NodegroupScalingConfig>,
477    /// <p>The subnets to use for the Auto Scaling group that is created for your node group. If you specify <code>launchTemplate</code>, then don't specify <a href="https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_CreateNetworkInterface.html"> <code>SubnetId</code> </a> in your launch template, or the node group deployment will fail. For more information about using launch templates with Amazon EKS, see <a href="https://docs.aws.amazon.com/eks/latest/userguide/launch-templates.html">Launch template support</a> in the Amazon EKS User Guide.</p>
478    #[serde(rename = "subnets")]
479    pub subnets: Vec<String>,
480    /// <p>The metadata to apply to the node group to assist with categorization and organization. Each tag consists of a key and an optional value, both of which you define. Node group tags do not propagate to any other resources associated with the node group, such as the Amazon EC2 instances or subnets.</p>
481    #[serde(rename = "tags")]
482    #[serde(skip_serializing_if = "Option::is_none")]
483    pub tags: Option<::std::collections::HashMap<String, String>>,
484    /// <p>The Kubernetes taints to be applied to the nodes in the node group.</p>
485    #[serde(rename = "taints")]
486    #[serde(skip_serializing_if = "Option::is_none")]
487    pub taints: Option<Vec<Taint>>,
488    #[serde(rename = "updateConfig")]
489    #[serde(skip_serializing_if = "Option::is_none")]
490    pub update_config: Option<NodegroupUpdateConfig>,
491    /// <p>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 <code>launchTemplate</code>, and your launch template uses a custom AMI, then don't specify <code>version</code>, or the node group deployment will fail. For more information about using launch templates with Amazon EKS, see <a href="https://docs.aws.amazon.com/eks/latest/userguide/launch-templates.html">Launch template support</a> in the Amazon EKS User Guide.</p>
492    #[serde(rename = "version")]
493    #[serde(skip_serializing_if = "Option::is_none")]
494    pub version: Option<String>,
495}
496
497#[derive(Clone, Debug, Default, Deserialize, PartialEq)]
498#[cfg_attr(any(test, feature = "serialize_structs"), derive(Serialize))]
499pub struct CreateNodegroupResponse {
500    /// <p>The full description of your new node group.</p>
501    #[serde(rename = "nodegroup")]
502    #[serde(skip_serializing_if = "Option::is_none")]
503    pub nodegroup: Option<Nodegroup>,
504}
505
506#[derive(Clone, Debug, Default, PartialEq, Serialize)]
507#[cfg_attr(feature = "deserialize_structs", derive(Deserialize))]
508pub struct DeleteAddonRequest {
509    /// <p>The name of the add-on. The name must match one of the names returned by <a href="https://docs.aws.amazon.com/eks/latest/APIReference/API_ListAddons.html"> <code>ListAddons</code> </a>.</p>
510    #[serde(rename = "addonName")]
511    pub addon_name: String,
512    /// <p>The name of the cluster to delete the add-on from.</p>
513    #[serde(rename = "clusterName")]
514    pub cluster_name: String,
515}
516
517#[derive(Clone, Debug, Default, Deserialize, PartialEq)]
518#[cfg_attr(any(test, feature = "serialize_structs"), derive(Serialize))]
519pub struct DeleteAddonResponse {
520    #[serde(rename = "addon")]
521    #[serde(skip_serializing_if = "Option::is_none")]
522    pub addon: Option<Addon>,
523}
524
525#[derive(Clone, Debug, Default, PartialEq, Serialize)]
526#[cfg_attr(feature = "deserialize_structs", derive(Deserialize))]
527pub struct DeleteClusterRequest {
528    /// <p>The name of the cluster to delete.</p>
529    #[serde(rename = "name")]
530    pub name: String,
531}
532
533#[derive(Clone, Debug, Default, Deserialize, PartialEq)]
534#[cfg_attr(any(test, feature = "serialize_structs"), derive(Serialize))]
535pub struct DeleteClusterResponse {
536    /// <p>The full description of the cluster to delete.</p>
537    #[serde(rename = "cluster")]
538    #[serde(skip_serializing_if = "Option::is_none")]
539    pub cluster: Option<Cluster>,
540}
541
542#[derive(Clone, Debug, Default, PartialEq, Serialize)]
543#[cfg_attr(feature = "deserialize_structs", derive(Deserialize))]
544pub struct DeleteFargateProfileRequest {
545    /// <p>The name of the Amazon EKS cluster associated with the Fargate profile to delete.</p>
546    #[serde(rename = "clusterName")]
547    pub cluster_name: String,
548    /// <p>The name of the Fargate profile to delete.</p>
549    #[serde(rename = "fargateProfileName")]
550    pub fargate_profile_name: String,
551}
552
553#[derive(Clone, Debug, Default, Deserialize, PartialEq)]
554#[cfg_attr(any(test, feature = "serialize_structs"), derive(Serialize))]
555pub struct DeleteFargateProfileResponse {
556    /// <p>The deleted Fargate profile.</p>
557    #[serde(rename = "fargateProfile")]
558    #[serde(skip_serializing_if = "Option::is_none")]
559    pub fargate_profile: Option<FargateProfile>,
560}
561
562#[derive(Clone, Debug, Default, PartialEq, Serialize)]
563#[cfg_attr(feature = "deserialize_structs", derive(Deserialize))]
564pub struct DeleteNodegroupRequest {
565    /// <p>The name of the Amazon EKS cluster that is associated with your node group.</p>
566    #[serde(rename = "clusterName")]
567    pub cluster_name: String,
568    /// <p>The name of the node group to delete.</p>
569    #[serde(rename = "nodegroupName")]
570    pub nodegroup_name: String,
571}
572
573#[derive(Clone, Debug, Default, Deserialize, PartialEq)]
574#[cfg_attr(any(test, feature = "serialize_structs"), derive(Serialize))]
575pub struct DeleteNodegroupResponse {
576    /// <p>The full description of your deleted node group.</p>
577    #[serde(rename = "nodegroup")]
578    #[serde(skip_serializing_if = "Option::is_none")]
579    pub nodegroup: Option<Nodegroup>,
580}
581
582#[derive(Clone, Debug, Default, PartialEq, Serialize)]
583#[cfg_attr(feature = "deserialize_structs", derive(Deserialize))]
584pub struct DescribeAddonRequest {
585    /// <p>The name of the add-on. The name must match one of the names returned by <a href="https://docs.aws.amazon.com/eks/latest/APIReference/API_ListAddons.html"> <code>ListAddons</code> </a>.</p>
586    #[serde(rename = "addonName")]
587    pub addon_name: String,
588    /// <p>The name of the cluster.</p>
589    #[serde(rename = "clusterName")]
590    pub cluster_name: String,
591}
592
593#[derive(Clone, Debug, Default, Deserialize, PartialEq)]
594#[cfg_attr(any(test, feature = "serialize_structs"), derive(Serialize))]
595pub struct DescribeAddonResponse {
596    #[serde(rename = "addon")]
597    #[serde(skip_serializing_if = "Option::is_none")]
598    pub addon: Option<Addon>,
599}
600
601#[derive(Clone, Debug, Default, PartialEq, Serialize)]
602#[cfg_attr(feature = "deserialize_structs", derive(Deserialize))]
603pub struct DescribeAddonVersionsRequest {
604    /// <p>The name of the add-on. The name must match one of the names returned by <a href="https://docs.aws.amazon.com/eks/latest/APIReference/API_ListAddons.html"> <code>ListAddons</code> </a>.</p>
605    #[serde(rename = "addonName")]
606    #[serde(skip_serializing_if = "Option::is_none")]
607    pub addon_name: Option<String>,
608    /// <p>The Kubernetes versions that the add-on can be used with.</p>
609    #[serde(rename = "kubernetesVersion")]
610    #[serde(skip_serializing_if = "Option::is_none")]
611    pub kubernetes_version: Option<String>,
612    /// <p>The maximum number of results to return.</p>
613    #[serde(rename = "maxResults")]
614    #[serde(skip_serializing_if = "Option::is_none")]
615    pub max_results: Option<i64>,
616    /// <p><p>The <code>nextToken</code> value returned from a previous paginated <code>DescribeAddonVersionsRequest</code> where <code>maxResults</code> was used and the results exceeded the value of that parameter. Pagination continues from the end of the previous results that returned the <code>nextToken</code> value.</p> <note> <p>This token should be treated as an opaque identifier that is used only to retrieve the next items in a list and not for other programmatic purposes.</p> </note></p>
617    #[serde(rename = "nextToken")]
618    #[serde(skip_serializing_if = "Option::is_none")]
619    pub next_token: Option<String>,
620}
621
622#[derive(Clone, Debug, Default, Deserialize, PartialEq)]
623#[cfg_attr(any(test, feature = "serialize_structs"), derive(Serialize))]
624pub struct DescribeAddonVersionsResponse {
625    /// <p>The list of available versions with Kubernetes version compatibility.</p>
626    #[serde(rename = "addons")]
627    #[serde(skip_serializing_if = "Option::is_none")]
628    pub addons: Option<Vec<AddonInfo>>,
629    /// <p><p>The <code>nextToken</code> value returned from a previous paginated <code>DescribeAddonVersionsResponse</code> where <code>maxResults</code> was used and the results exceeded the value of that parameter. Pagination continues from the end of the previous results that returned the <code>nextToken</code> value.</p> <note> <p>This token should be treated as an opaque identifier that is used only to retrieve the next items in a list and not for other programmatic purposes.</p> </note></p>
630    #[serde(rename = "nextToken")]
631    #[serde(skip_serializing_if = "Option::is_none")]
632    pub next_token: Option<String>,
633}
634
635#[derive(Clone, Debug, Default, PartialEq, Serialize)]
636#[cfg_attr(feature = "deserialize_structs", derive(Deserialize))]
637pub struct DescribeClusterRequest {
638    /// <p>The name of the cluster to describe.</p>
639    #[serde(rename = "name")]
640    pub name: String,
641}
642
643#[derive(Clone, Debug, Default, Deserialize, PartialEq)]
644#[cfg_attr(any(test, feature = "serialize_structs"), derive(Serialize))]
645pub struct DescribeClusterResponse {
646    /// <p>The full description of your specified cluster.</p>
647    #[serde(rename = "cluster")]
648    #[serde(skip_serializing_if = "Option::is_none")]
649    pub cluster: Option<Cluster>,
650}
651
652#[derive(Clone, Debug, Default, PartialEq, Serialize)]
653#[cfg_attr(feature = "deserialize_structs", derive(Deserialize))]
654pub struct DescribeFargateProfileRequest {
655    /// <p>The name of the Amazon EKS cluster associated with the Fargate profile.</p>
656    #[serde(rename = "clusterName")]
657    pub cluster_name: String,
658    /// <p>The name of the Fargate profile to describe.</p>
659    #[serde(rename = "fargateProfileName")]
660    pub fargate_profile_name: String,
661}
662
663#[derive(Clone, Debug, Default, Deserialize, PartialEq)]
664#[cfg_attr(any(test, feature = "serialize_structs"), derive(Serialize))]
665pub struct DescribeFargateProfileResponse {
666    /// <p>The full description of your Fargate profile.</p>
667    #[serde(rename = "fargateProfile")]
668    #[serde(skip_serializing_if = "Option::is_none")]
669    pub fargate_profile: Option<FargateProfile>,
670}
671
672#[derive(Clone, Debug, Default, PartialEq, Serialize)]
673#[cfg_attr(feature = "deserialize_structs", derive(Deserialize))]
674pub struct DescribeIdentityProviderConfigRequest {
675    /// <p>The cluster name that the identity provider configuration is associated to.</p>
676    #[serde(rename = "clusterName")]
677    pub cluster_name: String,
678    /// <p>An object that represents an identity provider configuration.</p>
679    #[serde(rename = "identityProviderConfig")]
680    pub identity_provider_config: IdentityProviderConfig,
681}
682
683#[derive(Clone, Debug, Default, Deserialize, PartialEq)]
684#[cfg_attr(any(test, feature = "serialize_structs"), derive(Serialize))]
685pub struct DescribeIdentityProviderConfigResponse {
686    /// <p>The object that represents an OpenID Connect (OIDC) identity provider configuration.</p>
687    #[serde(rename = "identityProviderConfig")]
688    #[serde(skip_serializing_if = "Option::is_none")]
689    pub identity_provider_config: Option<IdentityProviderConfigResponse>,
690}
691
692#[derive(Clone, Debug, Default, PartialEq, Serialize)]
693#[cfg_attr(feature = "deserialize_structs", derive(Deserialize))]
694pub struct DescribeNodegroupRequest {
695    /// <p>The name of the Amazon EKS cluster associated with the node group.</p>
696    #[serde(rename = "clusterName")]
697    pub cluster_name: String,
698    /// <p>The name of the node group to describe.</p>
699    #[serde(rename = "nodegroupName")]
700    pub nodegroup_name: String,
701}
702
703#[derive(Clone, Debug, Default, Deserialize, PartialEq)]
704#[cfg_attr(any(test, feature = "serialize_structs"), derive(Serialize))]
705pub struct DescribeNodegroupResponse {
706    /// <p>The full description of your node group.</p>
707    #[serde(rename = "nodegroup")]
708    #[serde(skip_serializing_if = "Option::is_none")]
709    pub nodegroup: Option<Nodegroup>,
710}
711
712#[derive(Clone, Debug, Default, PartialEq, Serialize)]
713#[cfg_attr(feature = "deserialize_structs", derive(Deserialize))]
714pub struct DescribeUpdateRequest {
715    /// <p>The name of the add-on. The name must match one of the names returned by <a href="https://docs.aws.amazon.com/eks/latest/APIReference/API_ListAddons.html"> <code>ListAddons</code> </a>.</p>
716    #[serde(rename = "addonName")]
717    #[serde(skip_serializing_if = "Option::is_none")]
718    pub addon_name: Option<String>,
719    /// <p>The name of the Amazon EKS cluster associated with the update.</p>
720    #[serde(rename = "name")]
721    pub name: String,
722    /// <p>The name of the Amazon EKS node group associated with the update.</p>
723    #[serde(rename = "nodegroupName")]
724    #[serde(skip_serializing_if = "Option::is_none")]
725    pub nodegroup_name: Option<String>,
726    /// <p>The ID of the update to describe.</p>
727    #[serde(rename = "updateId")]
728    pub update_id: String,
729}
730
731#[derive(Clone, Debug, Default, Deserialize, PartialEq)]
732#[cfg_attr(any(test, feature = "serialize_structs"), derive(Serialize))]
733pub struct DescribeUpdateResponse {
734    /// <p>The full description of the specified update.</p>
735    #[serde(rename = "update")]
736    #[serde(skip_serializing_if = "Option::is_none")]
737    pub update: Option<Update>,
738}
739
740#[derive(Clone, Debug, Default, PartialEq, Serialize)]
741#[cfg_attr(feature = "deserialize_structs", derive(Deserialize))]
742pub struct DisassociateIdentityProviderConfigRequest {
743    /// <p>A unique, case-sensitive identifier that you provide to ensure the idempotency of the request.</p>
744    #[serde(rename = "clientRequestToken")]
745    #[serde(skip_serializing_if = "Option::is_none")]
746    pub client_request_token: Option<String>,
747    /// <p>The name of the cluster to disassociate an identity provider from.</p>
748    #[serde(rename = "clusterName")]
749    pub cluster_name: String,
750    /// <p>An object that represents an identity provider configuration.</p>
751    #[serde(rename = "identityProviderConfig")]
752    pub identity_provider_config: IdentityProviderConfig,
753}
754
755#[derive(Clone, Debug, Default, Deserialize, PartialEq)]
756#[cfg_attr(any(test, feature = "serialize_structs"), derive(Serialize))]
757pub struct DisassociateIdentityProviderConfigResponse {
758    #[serde(rename = "update")]
759    #[serde(skip_serializing_if = "Option::is_none")]
760    pub update: Option<Update>,
761}
762
763/// <p>The encryption configuration for the cluster.</p>
764#[derive(Clone, Debug, Default, Deserialize, PartialEq, Serialize)]
765pub struct EncryptionConfig {
766    /// <p>AWS Key Management Service (AWS KMS) key. Either the ARN or the alias can be used.</p>
767    #[serde(rename = "provider")]
768    #[serde(skip_serializing_if = "Option::is_none")]
769    pub provider: Option<Provider>,
770    /// <p>Specifies the resources to be encrypted. The only supported value is "secrets".</p>
771    #[serde(rename = "resources")]
772    #[serde(skip_serializing_if = "Option::is_none")]
773    pub resources: Option<Vec<String>>,
774}
775
776/// <p>An object representing an error when an asynchronous operation fails.</p>
777#[derive(Clone, Debug, Default, Deserialize, PartialEq)]
778#[cfg_attr(any(test, feature = "serialize_structs"), derive(Serialize))]
779pub struct ErrorDetail {
780    /// <p><p>A brief description of the error. </p> <ul> <li> <p> <b>SubnetNotFound</b>: We couldn&#39;t find one of the subnets associated with the cluster.</p> </li> <li> <p> <b>SecurityGroupNotFound</b>: We couldn&#39;t find one of the security groups associated with the cluster.</p> </li> <li> <p> <b>EniLimitReached</b>: You have reached the elastic network interface limit for your account.</p> </li> <li> <p> <b>IpNotAvailable</b>: A subnet associated with the cluster doesn&#39;t have any free IP addresses.</p> </li> <li> <p> <b>AccessDenied</b>: You don&#39;t have permissions to perform the specified operation.</p> </li> <li> <p> <b>OperationNotPermitted</b>: The service role associated with the cluster doesn&#39;t have the required access permissions for Amazon EKS.</p> </li> <li> <p> <b>VpcIdNotFound</b>: We couldn&#39;t find the VPC associated with the cluster.</p> </li> </ul></p>
781    #[serde(rename = "errorCode")]
782    #[serde(skip_serializing_if = "Option::is_none")]
783    pub error_code: Option<String>,
784    /// <p>A more complete description of the error.</p>
785    #[serde(rename = "errorMessage")]
786    #[serde(skip_serializing_if = "Option::is_none")]
787    pub error_message: Option<String>,
788    /// <p>An optional field that contains the resource IDs associated with the error.</p>
789    #[serde(rename = "resourceIds")]
790    #[serde(skip_serializing_if = "Option::is_none")]
791    pub resource_ids: Option<Vec<String>>,
792}
793
794/// <p>An object representing an AWS Fargate profile.</p>
795#[derive(Clone, Debug, Default, Deserialize, PartialEq)]
796#[cfg_attr(any(test, feature = "serialize_structs"), derive(Serialize))]
797pub struct FargateProfile {
798    /// <p>The name of the Amazon EKS cluster that the Fargate profile belongs to.</p>
799    #[serde(rename = "clusterName")]
800    #[serde(skip_serializing_if = "Option::is_none")]
801    pub cluster_name: Option<String>,
802    /// <p>The Unix epoch timestamp in seconds for when the Fargate profile was created.</p>
803    #[serde(rename = "createdAt")]
804    #[serde(skip_serializing_if = "Option::is_none")]
805    pub created_at: Option<f64>,
806    /// <p>The full Amazon Resource Name (ARN) of the Fargate profile.</p>
807    #[serde(rename = "fargateProfileArn")]
808    #[serde(skip_serializing_if = "Option::is_none")]
809    pub fargate_profile_arn: Option<String>,
810    /// <p>The name of the Fargate profile.</p>
811    #[serde(rename = "fargateProfileName")]
812    #[serde(skip_serializing_if = "Option::is_none")]
813    pub fargate_profile_name: Option<String>,
814    /// <p>The Amazon Resource Name (ARN) of the pod execution role to use for pods that match the selectors in the Fargate profile. For more information, see <a href="https://docs.aws.amazon.com/eks/latest/userguide/pod-execution-role.html">Pod Execution Role</a> in the <i>Amazon EKS User Guide</i>.</p>
815    #[serde(rename = "podExecutionRoleArn")]
816    #[serde(skip_serializing_if = "Option::is_none")]
817    pub pod_execution_role_arn: Option<String>,
818    /// <p>The selectors to match for pods to use this Fargate profile.</p>
819    #[serde(rename = "selectors")]
820    #[serde(skip_serializing_if = "Option::is_none")]
821    pub selectors: Option<Vec<FargateProfileSelector>>,
822    /// <p>The current status of the Fargate profile.</p>
823    #[serde(rename = "status")]
824    #[serde(skip_serializing_if = "Option::is_none")]
825    pub status: Option<String>,
826    /// <p>The IDs of subnets to launch pods into.</p>
827    #[serde(rename = "subnets")]
828    #[serde(skip_serializing_if = "Option::is_none")]
829    pub subnets: Option<Vec<String>>,
830    /// <p>The metadata applied to the Fargate profile to assist with categorization and organization. Each tag consists of a key and an optional value, both of which you define. Fargate profile tags do not propagate to any other resources associated with the Fargate profile, such as the pods that are scheduled with it.</p>
831    #[serde(rename = "tags")]
832    #[serde(skip_serializing_if = "Option::is_none")]
833    pub tags: Option<::std::collections::HashMap<String, String>>,
834}
835
836/// <p>An object representing an AWS Fargate profile selector.</p>
837#[derive(Clone, Debug, Default, Deserialize, PartialEq, Serialize)]
838pub struct FargateProfileSelector {
839    /// <p>The Kubernetes labels that the selector should match. A pod must contain all of the labels that are specified in the selector for it to be considered a match.</p>
840    #[serde(rename = "labels")]
841    #[serde(skip_serializing_if = "Option::is_none")]
842    pub labels: Option<::std::collections::HashMap<String, String>>,
843    /// <p>The Kubernetes namespace that the selector should match.</p>
844    #[serde(rename = "namespace")]
845    #[serde(skip_serializing_if = "Option::is_none")]
846    pub namespace: Option<String>,
847}
848
849/// <p>An object representing an identity provider.</p>
850#[derive(Clone, Debug, Default, Deserialize, PartialEq)]
851#[cfg_attr(any(test, feature = "serialize_structs"), derive(Serialize))]
852pub struct Identity {
853    /// <p>An object representing the <a href="https://openid.net/connect/">OpenID Connect</a> identity provider information.</p>
854    #[serde(rename = "oidc")]
855    #[serde(skip_serializing_if = "Option::is_none")]
856    pub oidc: Option<OIDC>,
857}
858
859/// <p>An object representing an identity provider configuration.</p>
860#[derive(Clone, Debug, Default, Deserialize, PartialEq, Serialize)]
861pub struct IdentityProviderConfig {
862    /// <p>The name of the identity provider configuration.</p>
863    #[serde(rename = "name")]
864    pub name: String,
865    /// <p>The type of the identity provider configuration.</p>
866    #[serde(rename = "type")]
867    pub type_: String,
868}
869
870/// <p>An object that represents an identity configuration.</p>
871#[derive(Clone, Debug, Default, Deserialize, PartialEq)]
872#[cfg_attr(any(test, feature = "serialize_structs"), derive(Serialize))]
873pub struct IdentityProviderConfigResponse {
874    /// <p>An object that represents an OpenID Connect (OIDC) identity provider configuration.</p>
875    #[serde(rename = "oidc")]
876    #[serde(skip_serializing_if = "Option::is_none")]
877    pub oidc: Option<OidcIdentityProviderConfig>,
878}
879
880/// <p>An object representing an issue with an Amazon EKS resource.</p>
881#[derive(Clone, Debug, Default, Deserialize, PartialEq)]
882#[cfg_attr(any(test, feature = "serialize_structs"), derive(Serialize))]
883pub struct Issue {
884    /// <p><p>A brief description of the error.</p> <ul> <li> <p> <b>AccessDenied</b>: Amazon EKS or one or more of your managed nodes is failing to authenticate or authorize with your Kubernetes cluster API server.</p> </li> <li> <p> <b>AsgInstanceLaunchFailures</b>: Your Auto Scaling group is experiencing failures while attempting to launch instances.</p> </li> <li> <p> <b>AutoScalingGroupNotFound</b>: We couldn&#39;t find the Auto Scaling group associated with the managed node group. You may be able to recreate an Auto Scaling group with the same settings to recover.</p> </li> <li> <p> <b>ClusterUnreachable</b>: Amazon EKS or one or more of your managed nodes is unable to to communicate with your Kubernetes cluster API server. This can happen if there are network disruptions or if API servers are timing out processing requests. </p> </li> <li> <p> <b>Ec2LaunchTemplateNotFound</b>: We couldn&#39;t find the Amazon EC2 launch template for your managed node group. You may be able to recreate a launch template with the same settings to recover.</p> </li> <li> <p> <b>Ec2LaunchTemplateVersionMismatch</b>: The Amazon EC2 launch template version for your managed node group does not match the version that Amazon EKS created. You may be able to revert to the version that Amazon EKS created to recover.</p> </li> <li> <p> <b>Ec2SecurityGroupDeletionFailure</b>: We could not delete the remote access security group for your managed node group. Remove any dependencies from the security group.</p> </li> <li> <p> <b>Ec2SecurityGroupNotFound</b>: We couldn&#39;t find the cluster security group for the cluster. You must recreate your cluster.</p> </li> <li> <p> <b>Ec2SubnetInvalidConfiguration</b>: One or more Amazon EC2 subnets specified for a node group do not automatically assign public IP addresses to instances launched into it. If you want your instances to be assigned a public IP address, then you need to enable the <code>auto-assign public IP address</code> setting for the subnet. See <a href="https://docs.aws.amazon.com/vpc/latest/userguide/vpc-ip-addressing.html#subnet-public-ip">Modifying the public IPv4 addressing attribute for your subnet</a> in the Amazon VPC User Guide.</p> </li> <li> <p> <b>IamInstanceProfileNotFound</b>: We couldn&#39;t find the IAM instance profile for your managed node group. You may be able to recreate an instance profile with the same settings to recover.</p> </li> <li> <p> <b>IamNodeRoleNotFound</b>: We couldn&#39;t find the IAM role for your managed node group. You may be able to recreate an IAM role with the same settings to recover.</p> </li> <li> <p> <b>InstanceLimitExceeded</b>: Your AWS account is unable to launch any more instances of the specified instance type. You may be able to request an Amazon EC2 instance limit increase to recover.</p> </li> <li> <p> <b>InsufficientFreeAddresses</b>: One or more of the subnets associated with your managed node group does not have enough available IP addresses for new nodes.</p> </li> <li> <p> <b>InternalFailure</b>: These errors are usually caused by an Amazon EKS server-side issue.</p> </li> <li> <p> <b>NodeCreationFailure</b>: Your launched instances are unable to register with your Amazon EKS cluster. Common causes of this failure are insufficient <a href="https://docs.aws.amazon.com/eks/latest/userguide/worker_node_IAM_role.html">node IAM role</a> permissions or lack of outbound internet access for the nodes. </p> </li> </ul></p>
885    #[serde(rename = "code")]
886    #[serde(skip_serializing_if = "Option::is_none")]
887    pub code: Option<String>,
888    /// <p>The error message associated with the issue.</p>
889    #[serde(rename = "message")]
890    #[serde(skip_serializing_if = "Option::is_none")]
891    pub message: Option<String>,
892    /// <p>The AWS resources that are afflicted by this issue.</p>
893    #[serde(rename = "resourceIds")]
894    #[serde(skip_serializing_if = "Option::is_none")]
895    pub resource_ids: Option<Vec<String>>,
896}
897
898/// <p>The Kubernetes network configuration for the cluster.</p>
899#[derive(Clone, Debug, Default, PartialEq, Serialize)]
900#[cfg_attr(feature = "deserialize_structs", derive(Deserialize))]
901pub struct KubernetesNetworkConfigRequest {
902    /// <p><p>The CIDR block to assign Kubernetes service IP addresses from. If you don&#39;t specify a block, Kubernetes assigns addresses from either the 10.100.0.0/16 or 172.20.0.0/16 CIDR blocks. We recommend that you specify a block that does not overlap with resources in other networks that are peered or connected to your VPC. The block must meet the following requirements:</p> <ul> <li> <p>Within one of the following private IP address blocks: 10.0.0.0/8, 172.16.0.0.0/12, or 192.168.0.0/16.</p> </li> <li> <p>Doesn&#39;t overlap with any CIDR block assigned to the VPC that you selected for VPC.</p> </li> <li> <p>Between /24 and /12.</p> </li> </ul> <important> <p>You can only specify a custom CIDR block when you create a cluster and can&#39;t change this value once the cluster is created.</p> </important></p>
903    #[serde(rename = "serviceIpv4Cidr")]
904    #[serde(skip_serializing_if = "Option::is_none")]
905    pub service_ipv_4_cidr: Option<String>,
906}
907
908/// <p>The Kubernetes network configuration for the cluster.</p>
909#[derive(Clone, Debug, Default, Deserialize, PartialEq)]
910#[cfg_attr(any(test, feature = "serialize_structs"), derive(Serialize))]
911pub struct KubernetesNetworkConfigResponse {
912    /// <p>The CIDR block that Kubernetes service IP addresses are assigned from. If you didn't specify a CIDR block when you created the cluster, then Kubernetes assigns addresses from either the 10.100.0.0/16 or 172.20.0.0/16 CIDR blocks. If this was specified, then it was specified when the cluster was created and it cannot be changed.</p>
913    #[serde(rename = "serviceIpv4Cidr")]
914    #[serde(skip_serializing_if = "Option::is_none")]
915    pub service_ipv_4_cidr: Option<String>,
916}
917
918/// <p>An object representing a node group launch template specification. The launch template cannot include <a href="https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_CreateNetworkInterface.html"> <code>SubnetId</code> </a>, <a href="https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_IamInstanceProfile.html"> <code>IamInstanceProfile</code> </a>, <a href="https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_RequestSpotInstances.html"> <code>RequestSpotInstances</code> </a>, <a href="https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_HibernationOptionsRequest.html"> <code>HibernationOptions</code> </a>, or <a href="https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_TerminateInstances.html"> <code>TerminateInstances</code> </a>, or the node group deployment or update will fail. For more information about launch templates, see <a href="https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_CreateLaunchTemplate.html"> <code>CreateLaunchTemplate</code> </a> in the Amazon EC2 API Reference. For more information about using launch templates with Amazon EKS, see <a href="https://docs.aws.amazon.com/eks/latest/userguide/launch-templates.html">Launch template support</a> in the Amazon EKS User Guide.</p> <p>Specify either <code>name</code> or <code>id</code>, but not both.</p>
919#[derive(Clone, Debug, Default, Deserialize, PartialEq, Serialize)]
920pub struct LaunchTemplateSpecification {
921    /// <p>The ID of the launch template.</p>
922    #[serde(rename = "id")]
923    #[serde(skip_serializing_if = "Option::is_none")]
924    pub id: Option<String>,
925    /// <p>The name of the launch template.</p>
926    #[serde(rename = "name")]
927    #[serde(skip_serializing_if = "Option::is_none")]
928    pub name: Option<String>,
929    /// <p>The version of the launch template to use. If no version is specified, then the template's default version is used.</p>
930    #[serde(rename = "version")]
931    #[serde(skip_serializing_if = "Option::is_none")]
932    pub version: Option<String>,
933}
934
935#[derive(Clone, Debug, Default, PartialEq, Serialize)]
936#[cfg_attr(feature = "deserialize_structs", derive(Deserialize))]
937pub struct ListAddonsRequest {
938    /// <p>The name of the cluster.</p>
939    #[serde(rename = "clusterName")]
940    pub cluster_name: String,
941    /// <p>The maximum number of add-on results returned by <code>ListAddonsRequest</code> in paginated output. When you use this parameter, <code>ListAddonsRequest</code> returns only <code>maxResults</code> results in a single page along with a <code>nextToken</code> response element. You can see the remaining results of the initial request by sending another <code>ListAddonsRequest</code> request with the returned <code>nextToken</code> value. This value can be between 1 and 100. If you don't use this parameter, <code>ListAddonsRequest</code> returns up to 100 results and a <code>nextToken</code> value, if applicable.</p>
942    #[serde(rename = "maxResults")]
943    #[serde(skip_serializing_if = "Option::is_none")]
944    pub max_results: Option<i64>,
945    /// <p><p>The <code>nextToken</code> value returned from a previous paginated <code>ListAddonsRequest</code> where <code>maxResults</code> was used and the results exceeded the value of that parameter. Pagination continues from the end of the previous results that returned the <code>nextToken</code> value.</p> <note> <p>This token should be treated as an opaque identifier that is used only to retrieve the next items in a list and not for other programmatic purposes.</p> </note></p>
946    #[serde(rename = "nextToken")]
947    #[serde(skip_serializing_if = "Option::is_none")]
948    pub next_token: Option<String>,
949}
950
951#[derive(Clone, Debug, Default, Deserialize, PartialEq)]
952#[cfg_attr(any(test, feature = "serialize_structs"), derive(Serialize))]
953pub struct ListAddonsResponse {
954    /// <p>A list of available add-ons.</p>
955    #[serde(rename = "addons")]
956    #[serde(skip_serializing_if = "Option::is_none")]
957    pub addons: Option<Vec<String>>,
958    /// <p><p>The <code>nextToken</code> value returned from a previous paginated <code>ListAddonsResponse</code> where <code>maxResults</code> was used and the results exceeded the value of that parameter. Pagination continues from the end of the previous results that returned the <code>nextToken</code> value.</p> <note> <p>This token should be treated as an opaque identifier that is used only to retrieve the next items in a list and not for other programmatic purposes.</p> </note></p>
959    #[serde(rename = "nextToken")]
960    #[serde(skip_serializing_if = "Option::is_none")]
961    pub next_token: Option<String>,
962}
963
964#[derive(Clone, Debug, Default, PartialEq, Serialize)]
965#[cfg_attr(feature = "deserialize_structs", derive(Deserialize))]
966pub struct ListClustersRequest {
967    /// <p>The maximum number of cluster results returned by <code>ListClusters</code> in paginated output. When you use this parameter, <code>ListClusters</code> returns only <code>maxResults</code> results in a single page along with a <code>nextToken</code> response element. You can see the remaining results of the initial request by sending another <code>ListClusters</code> request with the returned <code>nextToken</code> value. This value can be between 1 and 100. If you don't use this parameter, <code>ListClusters</code> returns up to 100 results and a <code>nextToken</code> value if applicable.</p>
968    #[serde(rename = "maxResults")]
969    #[serde(skip_serializing_if = "Option::is_none")]
970    pub max_results: Option<i64>,
971    /// <p><p>The <code>nextToken</code> value returned from a previous paginated <code>ListClusters</code> request where <code>maxResults</code> was used and the results exceeded the value of that parameter. Pagination continues from the end of the previous results that returned the <code>nextToken</code> value.</p> <note> <p>This token should be treated as an opaque identifier that is used only to retrieve the next items in a list and not for other programmatic purposes.</p> </note></p>
972    #[serde(rename = "nextToken")]
973    #[serde(skip_serializing_if = "Option::is_none")]
974    pub next_token: Option<String>,
975}
976
977#[derive(Clone, Debug, Default, Deserialize, PartialEq)]
978#[cfg_attr(any(test, feature = "serialize_structs"), derive(Serialize))]
979pub struct ListClustersResponse {
980    /// <p>A list of all of the clusters for your account in the specified Region.</p>
981    #[serde(rename = "clusters")]
982    #[serde(skip_serializing_if = "Option::is_none")]
983    pub clusters: Option<Vec<String>>,
984    /// <p>The <code>nextToken</code> value to include in a future <code>ListClusters</code> request. When the results of a <code>ListClusters</code> request exceed <code>maxResults</code>, you can use this value to retrieve the next page of results. This value is <code>null</code> when there are no more results to return.</p>
985    #[serde(rename = "nextToken")]
986    #[serde(skip_serializing_if = "Option::is_none")]
987    pub next_token: Option<String>,
988}
989
990#[derive(Clone, Debug, Default, PartialEq, Serialize)]
991#[cfg_attr(feature = "deserialize_structs", derive(Deserialize))]
992pub struct ListFargateProfilesRequest {
993    /// <p>The name of the Amazon EKS cluster that you would like to listFargate profiles in.</p>
994    #[serde(rename = "clusterName")]
995    pub cluster_name: String,
996    /// <p>The maximum number of Fargate profile results returned by <code>ListFargateProfiles</code> in paginated output. When you use this parameter, <code>ListFargateProfiles</code> returns only <code>maxResults</code> results in a single page along with a <code>nextToken</code> response element. You can see the remaining results of the initial request by sending another <code>ListFargateProfiles</code> request with the returned <code>nextToken</code> value. This value can be between 1 and 100. If you don't use this parameter, <code>ListFargateProfiles</code> returns up to 100 results and a <code>nextToken</code> value if applicable.</p>
997    #[serde(rename = "maxResults")]
998    #[serde(skip_serializing_if = "Option::is_none")]
999    pub max_results: Option<i64>,
1000    /// <p>The <code>nextToken</code> value returned from a previous paginated <code>ListFargateProfiles</code> request where <code>maxResults</code> was used and the results exceeded the value of that parameter. Pagination continues from the end of the previous results that returned the <code>nextToken</code> value.</p>
1001    #[serde(rename = "nextToken")]
1002    #[serde(skip_serializing_if = "Option::is_none")]
1003    pub next_token: Option<String>,
1004}
1005
1006#[derive(Clone, Debug, Default, Deserialize, PartialEq)]
1007#[cfg_attr(any(test, feature = "serialize_structs"), derive(Serialize))]
1008pub struct ListFargateProfilesResponse {
1009    /// <p>A list of all of the Fargate profiles associated with the specified cluster.</p>
1010    #[serde(rename = "fargateProfileNames")]
1011    #[serde(skip_serializing_if = "Option::is_none")]
1012    pub fargate_profile_names: Option<Vec<String>>,
1013    /// <p>The <code>nextToken</code> value to include in a future <code>ListFargateProfiles</code> request. When the results of a <code>ListFargateProfiles</code> request exceed <code>maxResults</code>, you can use this value to retrieve the next page of results. This value is <code>null</code> when there are no more results to return.</p>
1014    #[serde(rename = "nextToken")]
1015    #[serde(skip_serializing_if = "Option::is_none")]
1016    pub next_token: Option<String>,
1017}
1018
1019#[derive(Clone, Debug, Default, PartialEq, Serialize)]
1020#[cfg_attr(feature = "deserialize_structs", derive(Deserialize))]
1021pub struct ListIdentityProviderConfigsRequest {
1022    /// <p>The cluster name that you want to list identity provider configurations for.</p>
1023    #[serde(rename = "clusterName")]
1024    pub cluster_name: String,
1025    /// <p>The maximum number of identity provider configurations returned by <code>ListIdentityProviderConfigs</code> in paginated output. When you use this parameter, <code>ListIdentityProviderConfigs</code> returns only <code>maxResults</code> results in a single page along with a <code>nextToken</code> response element. You can see the remaining results of the initial request by sending another <code>ListIdentityProviderConfigs</code> request with the returned <code>nextToken</code> value. This value can be between 1 and 100. If you don't use this parameter, <code>ListIdentityProviderConfigs</code> returns up to 100 results and a <code>nextToken</code> value, if applicable.</p>
1026    #[serde(rename = "maxResults")]
1027    #[serde(skip_serializing_if = "Option::is_none")]
1028    pub max_results: Option<i64>,
1029    /// <p>The <code>nextToken</code> value returned from a previous paginated <code>IdentityProviderConfigsRequest</code> where <code>maxResults</code> was used and the results exceeded the value of that parameter. Pagination continues from the end of the previous results that returned the <code>nextToken</code> value.</p>
1030    #[serde(rename = "nextToken")]
1031    #[serde(skip_serializing_if = "Option::is_none")]
1032    pub next_token: Option<String>,
1033}
1034
1035#[derive(Clone, Debug, Default, Deserialize, PartialEq)]
1036#[cfg_attr(any(test, feature = "serialize_structs"), derive(Serialize))]
1037pub struct ListIdentityProviderConfigsResponse {
1038    /// <p>The identity provider configurations for the cluster.</p>
1039    #[serde(rename = "identityProviderConfigs")]
1040    #[serde(skip_serializing_if = "Option::is_none")]
1041    pub identity_provider_configs: Option<Vec<IdentityProviderConfig>>,
1042    /// <p>The <code>nextToken</code> value returned from a previous paginated <code>ListIdentityProviderConfigsResponse</code> where <code>maxResults</code> was used and the results exceeded the value of that parameter. Pagination continues from the end of the previous results that returned the <code>nextToken</code> value.</p>
1043    #[serde(rename = "nextToken")]
1044    #[serde(skip_serializing_if = "Option::is_none")]
1045    pub next_token: Option<String>,
1046}
1047
1048#[derive(Clone, Debug, Default, PartialEq, Serialize)]
1049#[cfg_attr(feature = "deserialize_structs", derive(Deserialize))]
1050pub struct ListNodegroupsRequest {
1051    /// <p>The name of the Amazon EKS cluster that you would like to list node groups in.</p>
1052    #[serde(rename = "clusterName")]
1053    pub cluster_name: String,
1054    /// <p>The maximum number of node group results returned by <code>ListNodegroups</code> in paginated output. When you use this parameter, <code>ListNodegroups</code> returns only <code>maxResults</code> results in a single page along with a <code>nextToken</code> response element. You can see the remaining results of the initial request by sending another <code>ListNodegroups</code> request with the returned <code>nextToken</code> value. This value can be between 1 and 100. If you don't use this parameter, <code>ListNodegroups</code> returns up to 100 results and a <code>nextToken</code> value if applicable.</p>
1055    #[serde(rename = "maxResults")]
1056    #[serde(skip_serializing_if = "Option::is_none")]
1057    pub max_results: Option<i64>,
1058    /// <p>The <code>nextToken</code> value returned from a previous paginated <code>ListNodegroups</code> request where <code>maxResults</code> was used and the results exceeded the value of that parameter. Pagination continues from the end of the previous results that returned the <code>nextToken</code> value.</p>
1059    #[serde(rename = "nextToken")]
1060    #[serde(skip_serializing_if = "Option::is_none")]
1061    pub next_token: Option<String>,
1062}
1063
1064#[derive(Clone, Debug, Default, Deserialize, PartialEq)]
1065#[cfg_attr(any(test, feature = "serialize_structs"), derive(Serialize))]
1066pub struct ListNodegroupsResponse {
1067    /// <p>The <code>nextToken</code> value to include in a future <code>ListNodegroups</code> request. When the results of a <code>ListNodegroups</code> request exceed <code>maxResults</code>, you can use this value to retrieve the next page of results. This value is <code>null</code> when there are no more results to return.</p>
1068    #[serde(rename = "nextToken")]
1069    #[serde(skip_serializing_if = "Option::is_none")]
1070    pub next_token: Option<String>,
1071    /// <p>A list of all of the node groups associated with the specified cluster.</p>
1072    #[serde(rename = "nodegroups")]
1073    #[serde(skip_serializing_if = "Option::is_none")]
1074    pub nodegroups: Option<Vec<String>>,
1075}
1076
1077#[derive(Clone, Debug, Default, PartialEq, Serialize)]
1078#[cfg_attr(feature = "deserialize_structs", derive(Deserialize))]
1079pub struct ListTagsForResourceRequest {
1080    /// <p>The Amazon Resource Name (ARN) that identifies the resource for which to list the tags. Currently, the supported resources are Amazon EKS clusters and managed node groups.</p>
1081    #[serde(rename = "resourceArn")]
1082    pub resource_arn: String,
1083}
1084
1085#[derive(Clone, Debug, Default, Deserialize, PartialEq)]
1086#[cfg_attr(any(test, feature = "serialize_structs"), derive(Serialize))]
1087pub struct ListTagsForResourceResponse {
1088    /// <p>The tags for the resource.</p>
1089    #[serde(rename = "tags")]
1090    #[serde(skip_serializing_if = "Option::is_none")]
1091    pub tags: Option<::std::collections::HashMap<String, String>>,
1092}
1093
1094#[derive(Clone, Debug, Default, PartialEq, Serialize)]
1095#[cfg_attr(feature = "deserialize_structs", derive(Deserialize))]
1096pub struct ListUpdatesRequest {
1097    /// <p>The names of the installed add-ons that have available updates.</p>
1098    #[serde(rename = "addonName")]
1099    #[serde(skip_serializing_if = "Option::is_none")]
1100    pub addon_name: Option<String>,
1101    /// <p>The maximum number of update results returned by <code>ListUpdates</code> in paginated output. When you use this parameter, <code>ListUpdates</code> returns only <code>maxResults</code> results in a single page along with a <code>nextToken</code> response element. You can see the remaining results of the initial request by sending another <code>ListUpdates</code> request with the returned <code>nextToken</code> value. This value can be between 1 and 100. If you don't use this parameter, <code>ListUpdates</code> returns up to 100 results and a <code>nextToken</code> value if applicable.</p>
1102    #[serde(rename = "maxResults")]
1103    #[serde(skip_serializing_if = "Option::is_none")]
1104    pub max_results: Option<i64>,
1105    /// <p>The name of the Amazon EKS cluster to list updates for.</p>
1106    #[serde(rename = "name")]
1107    pub name: String,
1108    /// <p>The <code>nextToken</code> value returned from a previous paginated <code>ListUpdates</code> request where <code>maxResults</code> was used and the results exceeded the value of that parameter. Pagination continues from the end of the previous results that returned the <code>nextToken</code> value.</p>
1109    #[serde(rename = "nextToken")]
1110    #[serde(skip_serializing_if = "Option::is_none")]
1111    pub next_token: Option<String>,
1112    /// <p>The name of the Amazon EKS managed node group to list updates for.</p>
1113    #[serde(rename = "nodegroupName")]
1114    #[serde(skip_serializing_if = "Option::is_none")]
1115    pub nodegroup_name: Option<String>,
1116}
1117
1118#[derive(Clone, Debug, Default, Deserialize, PartialEq)]
1119#[cfg_attr(any(test, feature = "serialize_structs"), derive(Serialize))]
1120pub struct ListUpdatesResponse {
1121    /// <p>The <code>nextToken</code> value to include in a future <code>ListUpdates</code> request. When the results of a <code>ListUpdates</code> request exceed <code>maxResults</code>, you can use this value to retrieve the next page of results. This value is <code>null</code> when there are no more results to return.</p>
1122    #[serde(rename = "nextToken")]
1123    #[serde(skip_serializing_if = "Option::is_none")]
1124    pub next_token: Option<String>,
1125    /// <p>A list of all the updates for the specified cluster and Region.</p>
1126    #[serde(rename = "updateIds")]
1127    #[serde(skip_serializing_if = "Option::is_none")]
1128    pub update_ids: Option<Vec<String>>,
1129}
1130
1131/// <p>An object representing the enabled or disabled Kubernetes control plane logs for your cluster.</p>
1132#[derive(Clone, Debug, Default, Deserialize, PartialEq, Serialize)]
1133pub struct LogSetup {
1134    /// <p>If a log type is enabled, that log type exports its control plane logs to CloudWatch Logs. If a log type isn't enabled, that log type doesn't export its control plane logs. Each individual log type can be enabled or disabled independently.</p>
1135    #[serde(rename = "enabled")]
1136    #[serde(skip_serializing_if = "Option::is_none")]
1137    pub enabled: Option<bool>,
1138    /// <p>The available cluster control plane log types.</p>
1139    #[serde(rename = "types")]
1140    #[serde(skip_serializing_if = "Option::is_none")]
1141    pub types: Option<Vec<String>>,
1142}
1143
1144/// <p>An object representing the logging configuration for resources in your cluster.</p>
1145#[derive(Clone, Debug, Default, Deserialize, PartialEq, Serialize)]
1146pub struct Logging {
1147    /// <p>The cluster control plane logging configuration for your cluster.</p>
1148    #[serde(rename = "clusterLogging")]
1149    #[serde(skip_serializing_if = "Option::is_none")]
1150    pub cluster_logging: Option<Vec<LogSetup>>,
1151}
1152
1153/// <p>An object representing an Amazon EKS managed node group.</p>
1154#[derive(Clone, Debug, Default, Deserialize, PartialEq)]
1155#[cfg_attr(any(test, feature = "serialize_structs"), derive(Serialize))]
1156pub struct Nodegroup {
1157    /// <p>If the node group was deployed using a launch template with a custom AMI, then this is <code>CUSTOM</code>. For node groups that weren't deployed using a launch template, this is the AMI type that was specified in the node group configuration.</p>
1158    #[serde(rename = "amiType")]
1159    #[serde(skip_serializing_if = "Option::is_none")]
1160    pub ami_type: Option<String>,
1161    /// <p>The capacity type of your managed node group.</p>
1162    #[serde(rename = "capacityType")]
1163    #[serde(skip_serializing_if = "Option::is_none")]
1164    pub capacity_type: Option<String>,
1165    /// <p>The name of the cluster that the managed node group resides in.</p>
1166    #[serde(rename = "clusterName")]
1167    #[serde(skip_serializing_if = "Option::is_none")]
1168    pub cluster_name: Option<String>,
1169    /// <p>The Unix epoch timestamp in seconds for when the managed node group was created.</p>
1170    #[serde(rename = "createdAt")]
1171    #[serde(skip_serializing_if = "Option::is_none")]
1172    pub created_at: Option<f64>,
1173    /// <p>If the node group wasn't deployed with a launch template, then this is the disk size in the node group configuration. If the node group was deployed with a launch template, then this is <code>null</code>.</p>
1174    #[serde(rename = "diskSize")]
1175    #[serde(skip_serializing_if = "Option::is_none")]
1176    pub disk_size: Option<i64>,
1177    /// <p>The health status of the node group. If there are issues with your node group's health, they are listed here.</p>
1178    #[serde(rename = "health")]
1179    #[serde(skip_serializing_if = "Option::is_none")]
1180    pub health: Option<NodegroupHealth>,
1181    /// <p>If the node group wasn't deployed with a launch template, then this is the instance type that is associated with the node group. If the node group was deployed with a launch template, then this is <code>null</code>.</p>
1182    #[serde(rename = "instanceTypes")]
1183    #[serde(skip_serializing_if = "Option::is_none")]
1184    pub instance_types: Option<Vec<String>>,
1185    /// <p><p>The Kubernetes labels applied to the nodes in the node group.</p> <note> <p>Only labels that are applied with the Amazon EKS API are shown here. There may be other Kubernetes labels applied to the nodes in this group.</p> </note></p>
1186    #[serde(rename = "labels")]
1187    #[serde(skip_serializing_if = "Option::is_none")]
1188    pub labels: Option<::std::collections::HashMap<String, String>>,
1189    /// <p>If a launch template was used to create the node group, then this is the launch template that was used.</p>
1190    #[serde(rename = "launchTemplate")]
1191    #[serde(skip_serializing_if = "Option::is_none")]
1192    pub launch_template: Option<LaunchTemplateSpecification>,
1193    /// <p>The Unix epoch timestamp in seconds for when the managed node group was last modified.</p>
1194    #[serde(rename = "modifiedAt")]
1195    #[serde(skip_serializing_if = "Option::is_none")]
1196    pub modified_at: Option<f64>,
1197    /// <p>The IAM role associated with your node group. The Amazon EKS node <code>kubelet</code> daemon makes calls to AWS APIs on your behalf. Nodes receive permissions for these API calls through an IAM instance profile and associated policies.</p>
1198    #[serde(rename = "nodeRole")]
1199    #[serde(skip_serializing_if = "Option::is_none")]
1200    pub node_role: Option<String>,
1201    /// <p>The Amazon Resource Name (ARN) associated with the managed node group.</p>
1202    #[serde(rename = "nodegroupArn")]
1203    #[serde(skip_serializing_if = "Option::is_none")]
1204    pub nodegroup_arn: Option<String>,
1205    /// <p>The name associated with an Amazon EKS managed node group.</p>
1206    #[serde(rename = "nodegroupName")]
1207    #[serde(skip_serializing_if = "Option::is_none")]
1208    pub nodegroup_name: Option<String>,
1209    /// <p>If the node group was deployed using a launch template with a custom AMI, then this is the AMI ID that was specified in the launch template. For node groups that weren't deployed using a launch template, this is the version of the Amazon EKS optimized AMI that the node group was deployed with.</p>
1210    #[serde(rename = "releaseVersion")]
1211    #[serde(skip_serializing_if = "Option::is_none")]
1212    pub release_version: Option<String>,
1213    /// <p>If the node group wasn't deployed with a launch template, then this is the remote access configuration that is associated with the node group. If the node group was deployed with a launch template, then this is <code>null</code>.</p>
1214    #[serde(rename = "remoteAccess")]
1215    #[serde(skip_serializing_if = "Option::is_none")]
1216    pub remote_access: Option<RemoteAccessConfig>,
1217    /// <p>The resources associated with the node group, such as Auto Scaling groups and security groups for remote access.</p>
1218    #[serde(rename = "resources")]
1219    #[serde(skip_serializing_if = "Option::is_none")]
1220    pub resources: Option<NodegroupResources>,
1221    /// <p>The scaling configuration details for the Auto Scaling group that is associated with your node group.</p>
1222    #[serde(rename = "scalingConfig")]
1223    #[serde(skip_serializing_if = "Option::is_none")]
1224    pub scaling_config: Option<NodegroupScalingConfig>,
1225    /// <p>The current status of the managed node group.</p>
1226    #[serde(rename = "status")]
1227    #[serde(skip_serializing_if = "Option::is_none")]
1228    pub status: Option<String>,
1229    /// <p>The subnets that were specified for the Auto Scaling group that is associated with your node group.</p>
1230    #[serde(rename = "subnets")]
1231    #[serde(skip_serializing_if = "Option::is_none")]
1232    pub subnets: Option<Vec<String>>,
1233    /// <p>The metadata applied to the node group to assist with categorization and organization. Each tag consists of a key and an optional value, both of which you define. Node group tags do not propagate to any other resources associated with the node group, such as the Amazon EC2 instances or subnets. </p>
1234    #[serde(rename = "tags")]
1235    #[serde(skip_serializing_if = "Option::is_none")]
1236    pub tags: Option<::std::collections::HashMap<String, String>>,
1237    /// <p>The Kubernetes taints to be applied to the nodes in the node group when they are created. Effect is one of <code>NoSchedule</code>, <code>PreferNoSchedule</code>, or <code>NoExecute</code>. Kubernetes taints can be used together with tolerations to control how workloads are scheduled to your nodes.</p>
1238    #[serde(rename = "taints")]
1239    #[serde(skip_serializing_if = "Option::is_none")]
1240    pub taints: Option<Vec<Taint>>,
1241    #[serde(rename = "updateConfig")]
1242    #[serde(skip_serializing_if = "Option::is_none")]
1243    pub update_config: Option<NodegroupUpdateConfig>,
1244    /// <p>The Kubernetes version of the managed node group.</p>
1245    #[serde(rename = "version")]
1246    #[serde(skip_serializing_if = "Option::is_none")]
1247    pub version: Option<String>,
1248}
1249
1250/// <p>An object representing the health status of the node group.</p>
1251#[derive(Clone, Debug, Default, Deserialize, PartialEq)]
1252#[cfg_attr(any(test, feature = "serialize_structs"), derive(Serialize))]
1253pub struct NodegroupHealth {
1254    /// <p>Any issues that are associated with the node group. </p>
1255    #[serde(rename = "issues")]
1256    #[serde(skip_serializing_if = "Option::is_none")]
1257    pub issues: Option<Vec<Issue>>,
1258}
1259
1260/// <p>An object representing the resources associated with the node group, such as Auto Scaling groups and security groups for remote access.</p>
1261#[derive(Clone, Debug, Default, Deserialize, PartialEq)]
1262#[cfg_attr(any(test, feature = "serialize_structs"), derive(Serialize))]
1263pub struct NodegroupResources {
1264    /// <p>The Auto Scaling groups associated with the node group.</p>
1265    #[serde(rename = "autoScalingGroups")]
1266    #[serde(skip_serializing_if = "Option::is_none")]
1267    pub auto_scaling_groups: Option<Vec<AutoScalingGroup>>,
1268    /// <p>The remote access security group associated with the node group. This security group controls SSH access to the nodes.</p>
1269    #[serde(rename = "remoteAccessSecurityGroup")]
1270    #[serde(skip_serializing_if = "Option::is_none")]
1271    pub remote_access_security_group: Option<String>,
1272}
1273
1274/// <p>An object representing the scaling configuration details for the Auto Scaling group that is associated with your node group. When creating a node group, you must specify all or none of the properties. When updating a node group, you can specify any or none of the properties.</p>
1275#[derive(Clone, Debug, Default, Deserialize, PartialEq, Serialize)]
1276pub struct NodegroupScalingConfig {
1277    /// <p>The current number of nodes that the managed node group should maintain.</p>
1278    #[serde(rename = "desiredSize")]
1279    #[serde(skip_serializing_if = "Option::is_none")]
1280    pub desired_size: Option<i64>,
1281    /// <p>The maximum number of nodes that the managed node group can scale out to. For information about the maximum number that you can specify, see <a href="https://docs.aws.amazon.com/eks/latest/userguide/service-quotas.html">Amazon EKS service quotas</a> in the <i>Amazon EKS User Guide</i>.</p>
1282    #[serde(rename = "maxSize")]
1283    #[serde(skip_serializing_if = "Option::is_none")]
1284    pub max_size: Option<i64>,
1285    /// <p>The minimum number of nodes that the managed node group can scale in to. This number must be greater than zero.</p>
1286    #[serde(rename = "minSize")]
1287    #[serde(skip_serializing_if = "Option::is_none")]
1288    pub min_size: Option<i64>,
1289}
1290
1291#[derive(Clone, Debug, Default, Deserialize, PartialEq, Serialize)]
1292pub struct NodegroupUpdateConfig {
1293    #[serde(rename = "maxUnavailable")]
1294    #[serde(skip_serializing_if = "Option::is_none")]
1295    pub max_unavailable: Option<i64>,
1296    #[serde(rename = "maxUnavailablePercentage")]
1297    #[serde(skip_serializing_if = "Option::is_none")]
1298    pub max_unavailable_percentage: Option<i64>,
1299}
1300
1301/// <p>An object representing the <a href="https://openid.net/connect/">OpenID Connect</a> (OIDC) identity provider information for the cluster.</p>
1302#[derive(Clone, Debug, Default, Deserialize, PartialEq)]
1303#[cfg_attr(any(test, feature = "serialize_structs"), derive(Serialize))]
1304pub struct OIDC {
1305    /// <p>The issuer URL for the OIDC identity provider.</p>
1306    #[serde(rename = "issuer")]
1307    #[serde(skip_serializing_if = "Option::is_none")]
1308    pub issuer: Option<String>,
1309}
1310
1311/// <p>An object that represents the configuration for an OpenID Connect (OIDC) identity provider. </p>
1312#[derive(Clone, Debug, Default, Deserialize, PartialEq)]
1313#[cfg_attr(any(test, feature = "serialize_structs"), derive(Serialize))]
1314pub struct OidcIdentityProviderConfig {
1315    /// <p>This is also known as <i>audience</i>. The ID of the client application that makes authentication requests to the OIDC identity provider.</p>
1316    #[serde(rename = "clientId")]
1317    #[serde(skip_serializing_if = "Option::is_none")]
1318    pub client_id: Option<String>,
1319    /// <p>The cluster that the configuration is associated to.</p>
1320    #[serde(rename = "clusterName")]
1321    #[serde(skip_serializing_if = "Option::is_none")]
1322    pub cluster_name: Option<String>,
1323    /// <p>The JSON web token (JWT) claim that the provider uses to return your groups.</p>
1324    #[serde(rename = "groupsClaim")]
1325    #[serde(skip_serializing_if = "Option::is_none")]
1326    pub groups_claim: Option<String>,
1327    /// <p>The prefix that is prepended to group claims to prevent clashes with existing names (such as <code>system:</code> groups). For example, the value<code> oidc:</code> creates group names like <code>oidc:engineering</code> and <code>oidc:infra</code>. The prefix can't contain <code>system:</code> </p>
1328    #[serde(rename = "groupsPrefix")]
1329    #[serde(skip_serializing_if = "Option::is_none")]
1330    pub groups_prefix: Option<String>,
1331    /// <p>The ARN of the configuration.</p>
1332    #[serde(rename = "identityProviderConfigArn")]
1333    #[serde(skip_serializing_if = "Option::is_none")]
1334    pub identity_provider_config_arn: Option<String>,
1335    /// <p>The name of the configuration.</p>
1336    #[serde(rename = "identityProviderConfigName")]
1337    #[serde(skip_serializing_if = "Option::is_none")]
1338    pub identity_provider_config_name: Option<String>,
1339    /// <p>The URL of the OIDC identity provider that allows the API server to discover public signing keys for verifying tokens.</p>
1340    #[serde(rename = "issuerUrl")]
1341    #[serde(skip_serializing_if = "Option::is_none")]
1342    pub issuer_url: Option<String>,
1343    /// <p>The key-value pairs that describe required claims in the identity token. If set, each claim is verified to be present in the token with a matching value.</p>
1344    #[serde(rename = "requiredClaims")]
1345    #[serde(skip_serializing_if = "Option::is_none")]
1346    pub required_claims: Option<::std::collections::HashMap<String, String>>,
1347    /// <p>The status of the OIDC identity provider.</p>
1348    #[serde(rename = "status")]
1349    #[serde(skip_serializing_if = "Option::is_none")]
1350    pub status: Option<String>,
1351    /// <p>The metadata to apply to the provider configuration to assist with categorization and organization. Each tag consists of a key and an optional value, both of which you defined.</p>
1352    #[serde(rename = "tags")]
1353    #[serde(skip_serializing_if = "Option::is_none")]
1354    pub tags: Option<::std::collections::HashMap<String, String>>,
1355    /// <p>The JSON Web token (JWT) claim that is used as the username.</p>
1356    #[serde(rename = "usernameClaim")]
1357    #[serde(skip_serializing_if = "Option::is_none")]
1358    pub username_claim: Option<String>,
1359    /// <p>The prefix that is prepended to username claims to prevent clashes with existing names. The prefix can't contain <code>system:</code> </p>
1360    #[serde(rename = "usernamePrefix")]
1361    #[serde(skip_serializing_if = "Option::is_none")]
1362    pub username_prefix: Option<String>,
1363}
1364
1365/// <p>An object representing an OpenID Connect (OIDC) configuration. Before associating an OIDC identity provider to your cluster, review the considerations in <a href="https://docs.aws.amazon.com/eks/latest/userguide/authenticate-oidc-identity-provider.html">Authenticating users for your cluster from an OpenID Connect identity provider</a> in the <i>Amazon EKS User Guide</i>.</p>
1366#[derive(Clone, Debug, Default, PartialEq, Serialize)]
1367#[cfg_attr(feature = "deserialize_structs", derive(Deserialize))]
1368pub struct OidcIdentityProviderConfigRequest {
1369    /// <p>This is also known as <i>audience</i>. The ID for the client application that makes authentication requests to the OpenID identity provider.</p>
1370    #[serde(rename = "clientId")]
1371    pub client_id: String,
1372    /// <p>The JWT claim that the provider uses to return your groups.</p>
1373    #[serde(rename = "groupsClaim")]
1374    #[serde(skip_serializing_if = "Option::is_none")]
1375    pub groups_claim: Option<String>,
1376    /// <p>The prefix that is prepended to group claims to prevent clashes with existing names (such as <code>system:</code> groups). For example, the value<code> oidc:</code> will create group names like <code>oidc:engineering</code> and <code>oidc:infra</code>.</p>
1377    #[serde(rename = "groupsPrefix")]
1378    #[serde(skip_serializing_if = "Option::is_none")]
1379    pub groups_prefix: Option<String>,
1380    /// <p>The name of the OIDC provider configuration.</p>
1381    #[serde(rename = "identityProviderConfigName")]
1382    pub identity_provider_config_name: String,
1383    /// <p>The URL of the OpenID identity provider that allows the API server to discover public signing keys for verifying tokens. The URL must begin with <code>https://</code> and should correspond to the <code>iss</code> claim in the provider's OIDC ID tokens. Per the OIDC standard, path components are allowed but query parameters are not. Typically the URL consists of only a hostname, like <code>https://server.example.org</code> or <code>https://example.com</code>. This URL should point to the level below <code>.well-known/openid-configuration</code> and must be publicly accessible over the internet.</p>
1384    #[serde(rename = "issuerUrl")]
1385    pub issuer_url: String,
1386    /// <p>The key value pairs that describe required claims in the identity token. If set, each claim is verified to be present in the token with a matching value. For the maximum number of claims that you can require, see <a href="https://docs.aws.amazon.com/eks/latest/userguide/service-quotas.html">Amazon EKS service quotas</a> in the <i>Amazon EKS User Guide</i>.</p>
1387    #[serde(rename = "requiredClaims")]
1388    #[serde(skip_serializing_if = "Option::is_none")]
1389    pub required_claims: Option<::std::collections::HashMap<String, String>>,
1390    /// <p>The JSON Web Token (JWT) claim to use as the username. The default is <code>sub</code>, which is expected to be a unique identifier of the end user. You can choose other claims, such as <code>email</code> or <code>name</code>, depending on the OpenID identity provider. Claims other than <code>email</code> are prefixed with the issuer URL to prevent naming clashes with other plug-ins.</p>
1391    #[serde(rename = "usernameClaim")]
1392    #[serde(skip_serializing_if = "Option::is_none")]
1393    pub username_claim: Option<String>,
1394    /// <p>The prefix that is prepended to username claims to prevent clashes with existing names. If you do not provide this field, and <code>username</code> is a value other than <code>email</code>, the prefix defaults to <code>issuerurl#</code>. You can use the value <code>-</code> to disable all prefixing.</p>
1395    #[serde(rename = "usernamePrefix")]
1396    #[serde(skip_serializing_if = "Option::is_none")]
1397    pub username_prefix: Option<String>,
1398}
1399
1400/// <p>Identifies the AWS Key Management Service (AWS KMS) key used to encrypt the secrets.</p>
1401#[derive(Clone, Debug, Default, Deserialize, PartialEq, Serialize)]
1402pub struct Provider {
1403    /// <p>Amazon Resource Name (ARN) or alias of the KMS key. The KMS key must be symmetric, created in the same region as the cluster, and if the KMS key was created in a different account, the user must have access to the KMS key. For more information, see <a href="https://docs.aws.amazon.com/kms/latest/developerguide/key-policy-modifying-external-accounts.html">Allowing Users in Other Accounts to Use a KMS key</a> in the <i>AWS Key Management Service Developer Guide</i>.</p>
1404    #[serde(rename = "keyArn")]
1405    #[serde(skip_serializing_if = "Option::is_none")]
1406    pub key_arn: Option<String>,
1407}
1408
1409/// <p>An object representing the remote access configuration for the managed node group.</p>
1410#[derive(Clone, Debug, Default, Deserialize, PartialEq, Serialize)]
1411pub struct RemoteAccessConfig {
1412    /// <p>The Amazon EC2 SSH key that provides access for SSH communication with the nodes in the managed node group. For more information, see <a href="https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-key-pairs.html">Amazon EC2 Key Pairs</a> in the <i>Amazon Elastic Compute Cloud User Guide for Linux Instances</i>.</p>
1413    #[serde(rename = "ec2SshKey")]
1414    #[serde(skip_serializing_if = "Option::is_none")]
1415    pub ec_2_ssh_key: Option<String>,
1416    /// <p>The security groups that are allowed SSH access (port 22) to the nodes. If you specify an Amazon EC2 SSH key but do not specify a source security group when you create a managed node group, then port 22 on the nodes is opened to the internet (0.0.0.0/0). For more information, see <a href="https://docs.aws.amazon.com/vpc/latest/userguide/VPC_SecurityGroups.html">Security Groups for Your VPC</a> in the <i>Amazon Virtual Private Cloud User Guide</i>.</p>
1417    #[serde(rename = "sourceSecurityGroups")]
1418    #[serde(skip_serializing_if = "Option::is_none")]
1419    pub source_security_groups: Option<Vec<String>>,
1420}
1421
1422#[derive(Clone, Debug, Default, PartialEq, Serialize)]
1423#[cfg_attr(feature = "deserialize_structs", derive(Deserialize))]
1424pub struct TagResourceRequest {
1425    /// <p>The Amazon Resource Name (ARN) of the resource to which to add tags. Currently, the supported resources are Amazon EKS clusters and managed node groups.</p>
1426    #[serde(rename = "resourceArn")]
1427    pub resource_arn: String,
1428    /// <p>The tags to add to the resource. A tag is an array of key-value pairs.</p>
1429    #[serde(rename = "tags")]
1430    pub tags: ::std::collections::HashMap<String, String>,
1431}
1432
1433#[derive(Clone, Debug, Default, Deserialize, PartialEq)]
1434#[cfg_attr(any(test, feature = "serialize_structs"), derive(Serialize))]
1435pub struct TagResourceResponse {}
1436
1437/// <p>A property that allows a node to repel a set of pods.</p>
1438#[derive(Clone, Debug, Default, Deserialize, PartialEq, Serialize)]
1439pub struct Taint {
1440    /// <p>The effect of the taint.</p>
1441    #[serde(rename = "effect")]
1442    #[serde(skip_serializing_if = "Option::is_none")]
1443    pub effect: Option<String>,
1444    /// <p>The key of the taint.</p>
1445    #[serde(rename = "key")]
1446    #[serde(skip_serializing_if = "Option::is_none")]
1447    pub key: Option<String>,
1448    /// <p>The value of the taint.</p>
1449    #[serde(rename = "value")]
1450    #[serde(skip_serializing_if = "Option::is_none")]
1451    pub value: Option<String>,
1452}
1453
1454#[derive(Clone, Debug, Default, PartialEq, Serialize)]
1455#[cfg_attr(feature = "deserialize_structs", derive(Deserialize))]
1456pub struct UntagResourceRequest {
1457    /// <p>The Amazon Resource Name (ARN) of the resource from which to delete tags. Currently, the supported resources are Amazon EKS clusters and managed node groups.</p>
1458    #[serde(rename = "resourceArn")]
1459    pub resource_arn: String,
1460    /// <p>The keys of the tags to be removed.</p>
1461    #[serde(rename = "tagKeys")]
1462    pub tag_keys: Vec<String>,
1463}
1464
1465#[derive(Clone, Debug, Default, Deserialize, PartialEq)]
1466#[cfg_attr(any(test, feature = "serialize_structs"), derive(Serialize))]
1467pub struct UntagResourceResponse {}
1468
1469/// <p>An object representing an asynchronous update.</p>
1470#[derive(Clone, Debug, Default, Deserialize, PartialEq)]
1471#[cfg_attr(any(test, feature = "serialize_structs"), derive(Serialize))]
1472pub struct Update {
1473    /// <p>The Unix epoch timestamp in seconds for when the update was created.</p>
1474    #[serde(rename = "createdAt")]
1475    #[serde(skip_serializing_if = "Option::is_none")]
1476    pub created_at: Option<f64>,
1477    /// <p>Any errors associated with a <code>Failed</code> update.</p>
1478    #[serde(rename = "errors")]
1479    #[serde(skip_serializing_if = "Option::is_none")]
1480    pub errors: Option<Vec<ErrorDetail>>,
1481    /// <p>A UUID that is used to track the update.</p>
1482    #[serde(rename = "id")]
1483    #[serde(skip_serializing_if = "Option::is_none")]
1484    pub id: Option<String>,
1485    /// <p>A key-value map that contains the parameters associated with the update.</p>
1486    #[serde(rename = "params")]
1487    #[serde(skip_serializing_if = "Option::is_none")]
1488    pub params: Option<Vec<UpdateParam>>,
1489    /// <p>The current status of the update.</p>
1490    #[serde(rename = "status")]
1491    #[serde(skip_serializing_if = "Option::is_none")]
1492    pub status: Option<String>,
1493    /// <p>The type of the update.</p>
1494    #[serde(rename = "type")]
1495    #[serde(skip_serializing_if = "Option::is_none")]
1496    pub type_: Option<String>,
1497}
1498
1499#[derive(Clone, Debug, Default, PartialEq, Serialize)]
1500#[cfg_attr(feature = "deserialize_structs", derive(Deserialize))]
1501pub struct UpdateAddonRequest {
1502    /// <p>The name of the add-on. The name must match one of the names returned by <a href="https://docs.aws.amazon.com/eks/latest/APIReference/API_ListAddons.html"> <code>ListAddons</code> </a>.</p>
1503    #[serde(rename = "addonName")]
1504    pub addon_name: String,
1505    /// <p>The version of the add-on. The version must match one of the versions returned by <a href="https://docs.aws.amazon.com/eks/latest/APIReference/API_DescribeAddonVersions.html"> <code>DescribeAddonVersions</code> </a>.</p>
1506    #[serde(rename = "addonVersion")]
1507    #[serde(skip_serializing_if = "Option::is_none")]
1508    pub addon_version: Option<String>,
1509    /// <p>Unique, case-sensitive identifier that you provide to ensure the idempotency of the request.</p>
1510    #[serde(rename = "clientRequestToken")]
1511    #[serde(skip_serializing_if = "Option::is_none")]
1512    pub client_request_token: Option<String>,
1513    /// <p>The name of the cluster.</p>
1514    #[serde(rename = "clusterName")]
1515    pub cluster_name: String,
1516    /// <p>How to resolve parameter value conflicts when applying the new version of the add-on to the cluster.</p>
1517    #[serde(rename = "resolveConflicts")]
1518    #[serde(skip_serializing_if = "Option::is_none")]
1519    pub resolve_conflicts: Option<String>,
1520    /// <p><p>The Amazon Resource Name (ARN) of an existing IAM role to bind to the add-on&#39;s service account. The role must be assigned the IAM permissions required by the add-on. If you don&#39;t specify an existing IAM role, then the add-on uses the permissions assigned to the node IAM role. For more information, see <a href="https://docs.aws.amazon.com/eks/latest/userguide/create-node-role.html">Amazon EKS node IAM role</a> in the <i>Amazon EKS User Guide</i>.</p> <note> <p>To specify an existing IAM role, you must have an IAM OpenID Connect (OIDC) provider created for your cluster. For more information, see <a href="https://docs.aws.amazon.com/eks/latest/userguide/enable-iam-roles-for-service-accounts.html">Enabling IAM roles for service accounts on your cluster</a> in the <i>Amazon EKS User Guide</i>.</p> </note></p>
1521    #[serde(rename = "serviceAccountRoleArn")]
1522    #[serde(skip_serializing_if = "Option::is_none")]
1523    pub service_account_role_arn: Option<String>,
1524}
1525
1526#[derive(Clone, Debug, Default, Deserialize, PartialEq)]
1527#[cfg_attr(any(test, feature = "serialize_structs"), derive(Serialize))]
1528pub struct UpdateAddonResponse {
1529    #[serde(rename = "update")]
1530    #[serde(skip_serializing_if = "Option::is_none")]
1531    pub update: Option<Update>,
1532}
1533
1534#[derive(Clone, Debug, Default, PartialEq, Serialize)]
1535#[cfg_attr(feature = "deserialize_structs", derive(Deserialize))]
1536pub struct UpdateClusterConfigRequest {
1537    /// <p>Unique, case-sensitive identifier that you provide to ensure the idempotency of the request.</p>
1538    #[serde(rename = "clientRequestToken")]
1539    #[serde(skip_serializing_if = "Option::is_none")]
1540    pub client_request_token: Option<String>,
1541    /// <p><p>Enable or disable exporting the Kubernetes control plane logs for your cluster to CloudWatch Logs. By default, cluster control plane logs aren&#39;t exported to CloudWatch Logs. For more information, see <a href="https://docs.aws.amazon.com/eks/latest/userguide/control-plane-logs.html">Amazon EKS Cluster Control Plane Logs</a> in the <i> <i>Amazon EKS User Guide</i> </i>.</p> <note> <p>CloudWatch Logs ingestion, archive storage, and data scanning rates apply to exported control plane logs. For more information, see <a href="http://aws.amazon.com/cloudwatch/pricing/">Amazon CloudWatch Pricing</a>.</p> </note></p>
1542    #[serde(rename = "logging")]
1543    #[serde(skip_serializing_if = "Option::is_none")]
1544    pub logging: Option<Logging>,
1545    /// <p>The name of the Amazon EKS cluster to update.</p>
1546    #[serde(rename = "name")]
1547    pub name: String,
1548    #[serde(rename = "resourcesVpcConfig")]
1549    #[serde(skip_serializing_if = "Option::is_none")]
1550    pub resources_vpc_config: Option<VpcConfigRequest>,
1551}
1552
1553#[derive(Clone, Debug, Default, Deserialize, PartialEq)]
1554#[cfg_attr(any(test, feature = "serialize_structs"), derive(Serialize))]
1555pub struct UpdateClusterConfigResponse {
1556    #[serde(rename = "update")]
1557    #[serde(skip_serializing_if = "Option::is_none")]
1558    pub update: Option<Update>,
1559}
1560
1561#[derive(Clone, Debug, Default, PartialEq, Serialize)]
1562#[cfg_attr(feature = "deserialize_structs", derive(Deserialize))]
1563pub struct UpdateClusterVersionRequest {
1564    /// <p>Unique, case-sensitive identifier that you provide to ensure the idempotency of the request.</p>
1565    #[serde(rename = "clientRequestToken")]
1566    #[serde(skip_serializing_if = "Option::is_none")]
1567    pub client_request_token: Option<String>,
1568    /// <p>The name of the Amazon EKS cluster to update.</p>
1569    #[serde(rename = "name")]
1570    pub name: String,
1571    /// <p>The desired Kubernetes version following a successful update.</p>
1572    #[serde(rename = "version")]
1573    pub version: String,
1574}
1575
1576#[derive(Clone, Debug, Default, Deserialize, PartialEq)]
1577#[cfg_attr(any(test, feature = "serialize_structs"), derive(Serialize))]
1578pub struct UpdateClusterVersionResponse {
1579    /// <p>The full description of the specified update</p>
1580    #[serde(rename = "update")]
1581    #[serde(skip_serializing_if = "Option::is_none")]
1582    pub update: Option<Update>,
1583}
1584
1585/// <p>An object representing a Kubernetes label change for a managed node group.</p>
1586#[derive(Clone, Debug, Default, PartialEq, Serialize)]
1587#[cfg_attr(feature = "deserialize_structs", derive(Deserialize))]
1588pub struct UpdateLabelsPayload {
1589    /// <p>Kubernetes labels to be added or updated.</p>
1590    #[serde(rename = "addOrUpdateLabels")]
1591    #[serde(skip_serializing_if = "Option::is_none")]
1592    pub add_or_update_labels: Option<::std::collections::HashMap<String, String>>,
1593    /// <p>Kubernetes labels to be removed.</p>
1594    #[serde(rename = "removeLabels")]
1595    #[serde(skip_serializing_if = "Option::is_none")]
1596    pub remove_labels: Option<Vec<String>>,
1597}
1598
1599#[derive(Clone, Debug, Default, PartialEq, Serialize)]
1600#[cfg_attr(feature = "deserialize_structs", derive(Deserialize))]
1601pub struct UpdateNodegroupConfigRequest {
1602    /// <p>Unique, case-sensitive identifier that you provide to ensure the idempotency of the request.</p>
1603    #[serde(rename = "clientRequestToken")]
1604    #[serde(skip_serializing_if = "Option::is_none")]
1605    pub client_request_token: Option<String>,
1606    /// <p>The name of the Amazon EKS cluster that the managed node group resides in.</p>
1607    #[serde(rename = "clusterName")]
1608    pub cluster_name: String,
1609    /// <p>The Kubernetes labels to be applied to the nodes in the node group after the update.</p>
1610    #[serde(rename = "labels")]
1611    #[serde(skip_serializing_if = "Option::is_none")]
1612    pub labels: Option<UpdateLabelsPayload>,
1613    /// <p>The name of the managed node group to update.</p>
1614    #[serde(rename = "nodegroupName")]
1615    pub nodegroup_name: String,
1616    /// <p>The scaling configuration details for the Auto Scaling group after the update.</p>
1617    #[serde(rename = "scalingConfig")]
1618    #[serde(skip_serializing_if = "Option::is_none")]
1619    pub scaling_config: Option<NodegroupScalingConfig>,
1620    /// <p>The Kubernetes taints to be applied to the nodes in the node group after the update.</p>
1621    #[serde(rename = "taints")]
1622    #[serde(skip_serializing_if = "Option::is_none")]
1623    pub taints: Option<UpdateTaintsPayload>,
1624    #[serde(rename = "updateConfig")]
1625    #[serde(skip_serializing_if = "Option::is_none")]
1626    pub update_config: Option<NodegroupUpdateConfig>,
1627}
1628
1629#[derive(Clone, Debug, Default, Deserialize, PartialEq)]
1630#[cfg_attr(any(test, feature = "serialize_structs"), derive(Serialize))]
1631pub struct UpdateNodegroupConfigResponse {
1632    #[serde(rename = "update")]
1633    #[serde(skip_serializing_if = "Option::is_none")]
1634    pub update: Option<Update>,
1635}
1636
1637#[derive(Clone, Debug, Default, PartialEq, Serialize)]
1638#[cfg_attr(feature = "deserialize_structs", derive(Deserialize))]
1639pub struct UpdateNodegroupVersionRequest {
1640    /// <p>Unique, case-sensitive identifier that you provide to ensure the idempotency of the request.</p>
1641    #[serde(rename = "clientRequestToken")]
1642    #[serde(skip_serializing_if = "Option::is_none")]
1643    pub client_request_token: Option<String>,
1644    /// <p>The name of the Amazon EKS cluster that is associated with the managed node group to update.</p>
1645    #[serde(rename = "clusterName")]
1646    pub cluster_name: String,
1647    /// <p>Force the update if the existing node group's pods are unable to be drained due to a pod disruption budget issue. If an update fails because pods could not be drained, you can force the update after it fails to terminate the old node whether or not any pods are running on the node.</p>
1648    #[serde(rename = "force")]
1649    #[serde(skip_serializing_if = "Option::is_none")]
1650    pub force: Option<bool>,
1651    /// <p>An object representing a node group's launch template specification. You can only update a node group using a launch template if the node group was originally deployed with a launch template.</p>
1652    #[serde(rename = "launchTemplate")]
1653    #[serde(skip_serializing_if = "Option::is_none")]
1654    pub launch_template: Option<LaunchTemplateSpecification>,
1655    /// <p>The name of the managed node group to update.</p>
1656    #[serde(rename = "nodegroupName")]
1657    pub nodegroup_name: String,
1658    /// <p>The AMI version of the Amazon EKS optimized AMI to use for the update. By default, the latest available AMI version for the node group's Kubernetes version is used. For more information, see <a href="https://docs.aws.amazon.com/eks/latest/userguide/eks-linux-ami-versions.html">Amazon EKS optimized Amazon Linux 2 AMI versions </a> in the <i>Amazon EKS User Guide</i>. If you specify <code>launchTemplate</code>, and your launch template uses a custom AMI, then don't specify <code>releaseVersion</code>, or the node group update will fail. For more information about using launch templates with Amazon EKS, see <a href="https://docs.aws.amazon.com/eks/latest/userguide/launch-templates.html">Launch template support</a> in the Amazon EKS User Guide.</p>
1659    #[serde(rename = "releaseVersion")]
1660    #[serde(skip_serializing_if = "Option::is_none")]
1661    pub release_version: Option<String>,
1662    /// <p>The Kubernetes version to update to. If no version is specified, then the Kubernetes version of the node group does not change. You can specify the Kubernetes version of the cluster to update the node group to the latest AMI version of the cluster's Kubernetes version. If you specify <code>launchTemplate</code>, and your launch template uses a custom AMI, then don't specify <code>version</code>, or the node group update will fail. For more information about using launch templates with Amazon EKS, see <a href="https://docs.aws.amazon.com/eks/latest/userguide/launch-templates.html">Launch template support</a> in the Amazon EKS User Guide.</p>
1663    #[serde(rename = "version")]
1664    #[serde(skip_serializing_if = "Option::is_none")]
1665    pub version: Option<String>,
1666}
1667
1668#[derive(Clone, Debug, Default, Deserialize, PartialEq)]
1669#[cfg_attr(any(test, feature = "serialize_structs"), derive(Serialize))]
1670pub struct UpdateNodegroupVersionResponse {
1671    #[serde(rename = "update")]
1672    #[serde(skip_serializing_if = "Option::is_none")]
1673    pub update: Option<Update>,
1674}
1675
1676/// <p>An object representing the details of an update request.</p>
1677#[derive(Clone, Debug, Default, Deserialize, PartialEq)]
1678#[cfg_attr(any(test, feature = "serialize_structs"), derive(Serialize))]
1679pub struct UpdateParam {
1680    /// <p>The keys associated with an update request.</p>
1681    #[serde(rename = "type")]
1682    #[serde(skip_serializing_if = "Option::is_none")]
1683    pub type_: Option<String>,
1684    /// <p>The value of the keys submitted as part of an update request.</p>
1685    #[serde(rename = "value")]
1686    #[serde(skip_serializing_if = "Option::is_none")]
1687    pub value: Option<String>,
1688}
1689
1690/// <p>An object representing the details of an update to a taints payload.</p>
1691#[derive(Clone, Debug, Default, PartialEq, Serialize)]
1692#[cfg_attr(feature = "deserialize_structs", derive(Deserialize))]
1693pub struct UpdateTaintsPayload {
1694    /// <p>Kubernetes taints to be added or updated.</p>
1695    #[serde(rename = "addOrUpdateTaints")]
1696    #[serde(skip_serializing_if = "Option::is_none")]
1697    pub add_or_update_taints: Option<Vec<Taint>>,
1698    /// <p>Kubernetes taints to be removed.</p>
1699    #[serde(rename = "removeTaints")]
1700    #[serde(skip_serializing_if = "Option::is_none")]
1701    pub remove_taints: Option<Vec<Taint>>,
1702}
1703
1704/// <p>An object representing the VPC configuration to use for an Amazon EKS cluster.</p>
1705#[derive(Clone, Debug, Default, PartialEq, Serialize)]
1706#[cfg_attr(feature = "deserialize_structs", derive(Deserialize))]
1707pub struct VpcConfigRequest {
1708    /// <p>Set this value to <code>true</code> to enable private access for your cluster's Kubernetes API server endpoint. If you enable private access, Kubernetes API requests from within your cluster's VPC use the private VPC endpoint. The default value for this parameter is <code>false</code>, which disables private access for your Kubernetes API server. If you disable private access and you have nodes or AWS Fargate pods in the cluster, then ensure that <code>publicAccessCidrs</code> includes the necessary CIDR blocks for communication with the nodes or Fargate pods. For more information, see <a href="https://docs.aws.amazon.com/eks/latest/userguide/cluster-endpoint.html">Amazon EKS Cluster Endpoint Access Control</a> in the <i> <i>Amazon EKS User Guide</i> </i>.</p>
1709    #[serde(rename = "endpointPrivateAccess")]
1710    #[serde(skip_serializing_if = "Option::is_none")]
1711    pub endpoint_private_access: Option<bool>,
1712    /// <p>Set this value to <code>false</code> to disable public access to your cluster's Kubernetes API server endpoint. If you disable public access, your cluster's Kubernetes API server can only receive requests from within the cluster VPC. The default value for this parameter is <code>true</code>, which enables public access for your Kubernetes API server. For more information, see <a href="https://docs.aws.amazon.com/eks/latest/userguide/cluster-endpoint.html">Amazon EKS Cluster Endpoint Access Control</a> in the <i> <i>Amazon EKS User Guide</i> </i>.</p>
1713    #[serde(rename = "endpointPublicAccess")]
1714    #[serde(skip_serializing_if = "Option::is_none")]
1715    pub endpoint_public_access: Option<bool>,
1716    /// <p>The CIDR blocks that are allowed access to your cluster's public Kubernetes API server endpoint. Communication to the endpoint from addresses outside of the CIDR blocks that you specify is denied. The default value is <code>0.0.0.0/0</code>. If you've disabled private endpoint access and you have nodes or AWS Fargate pods in the cluster, then ensure that you specify the necessary CIDR blocks. For more information, see <a href="https://docs.aws.amazon.com/eks/latest/userguide/cluster-endpoint.html">Amazon EKS Cluster Endpoint Access Control</a> in the <i> <i>Amazon EKS User Guide</i> </i>.</p>
1717    #[serde(rename = "publicAccessCidrs")]
1718    #[serde(skip_serializing_if = "Option::is_none")]
1719    pub public_access_cidrs: Option<Vec<String>>,
1720    /// <p>Specify one or more security groups for the cross-account elastic network interfaces that Amazon EKS creates to use to allow communication between your nodes and the Kubernetes control plane. If you don't specify any security groups, then familiarize yourself with the difference between Amazon EKS defaults for clusters deployed with Kubernetes:</p> <ul> <li> <p>1.14 Amazon EKS platform version <code>eks.2</code> and earlier</p> </li> <li> <p>1.14 Amazon EKS platform version <code>eks.3</code> and later </p> </li> </ul> <p>For more information, see <a href="https://docs.aws.amazon.com/eks/latest/userguide/sec-group-reqs.html">Amazon EKS security group considerations</a> in the <i> <i>Amazon EKS User Guide</i> </i>.</p>
1721    #[serde(rename = "securityGroupIds")]
1722    #[serde(skip_serializing_if = "Option::is_none")]
1723    pub security_group_ids: Option<Vec<String>>,
1724    /// <p>Specify subnets for your Amazon EKS nodes. Amazon EKS creates cross-account elastic network interfaces in these subnets to allow communication between your nodes and the Kubernetes control plane.</p>
1725    #[serde(rename = "subnetIds")]
1726    #[serde(skip_serializing_if = "Option::is_none")]
1727    pub subnet_ids: Option<Vec<String>>,
1728}
1729
1730/// <p>An object representing an Amazon EKS cluster VPC configuration response.</p>
1731#[derive(Clone, Debug, Default, Deserialize, PartialEq)]
1732#[cfg_attr(any(test, feature = "serialize_structs"), derive(Serialize))]
1733pub struct VpcConfigResponse {
1734    /// <p>The cluster security group that was created by Amazon EKS for the cluster. Managed node groups use this security group for control-plane-to-data-plane communication.</p>
1735    #[serde(rename = "clusterSecurityGroupId")]
1736    #[serde(skip_serializing_if = "Option::is_none")]
1737    pub cluster_security_group_id: Option<String>,
1738    /// <p>This parameter indicates whether the Amazon EKS private API server endpoint is enabled. If the Amazon EKS private API server endpoint is enabled, Kubernetes API requests that originate from within your cluster's VPC use the private VPC endpoint instead of traversing the internet. If this value is disabled and you have nodes or AWS Fargate pods in the cluster, then ensure that <code>publicAccessCidrs</code> includes the necessary CIDR blocks for communication with the nodes or Fargate pods. For more information, see <a href="https://docs.aws.amazon.com/eks/latest/userguide/cluster-endpoint.html">Amazon EKS Cluster Endpoint Access Control</a> in the <i> <i>Amazon EKS User Guide</i> </i>.</p>
1739    #[serde(rename = "endpointPrivateAccess")]
1740    #[serde(skip_serializing_if = "Option::is_none")]
1741    pub endpoint_private_access: Option<bool>,
1742    /// <p>This parameter indicates whether the Amazon EKS public API server endpoint is enabled. If the Amazon EKS public API server endpoint is disabled, your cluster's Kubernetes API server can only receive requests that originate from within the cluster VPC.</p>
1743    #[serde(rename = "endpointPublicAccess")]
1744    #[serde(skip_serializing_if = "Option::is_none")]
1745    pub endpoint_public_access: Option<bool>,
1746    /// <p>The CIDR blocks that are allowed access to your cluster's public Kubernetes API server endpoint. Communication to the endpoint from addresses outside of the listed CIDR blocks is denied. The default value is <code>0.0.0.0/0</code>. If you've disabled private endpoint access and you have nodes or AWS Fargate pods in the cluster, then ensure that the necessary CIDR blocks are listed. For more information, see <a href="https://docs.aws.amazon.com/eks/latest/userguide/cluster-endpoint.html">Amazon EKS Cluster Endpoint Access Control</a> in the <i> <i>Amazon EKS User Guide</i> </i>.</p>
1747    #[serde(rename = "publicAccessCidrs")]
1748    #[serde(skip_serializing_if = "Option::is_none")]
1749    pub public_access_cidrs: Option<Vec<String>>,
1750    /// <p>The security groups associated with the cross-account elastic network interfaces that are used to allow communication between your nodes and the Kubernetes control plane.</p>
1751    #[serde(rename = "securityGroupIds")]
1752    #[serde(skip_serializing_if = "Option::is_none")]
1753    pub security_group_ids: Option<Vec<String>>,
1754    /// <p>The subnets associated with your cluster.</p>
1755    #[serde(rename = "subnetIds")]
1756    #[serde(skip_serializing_if = "Option::is_none")]
1757    pub subnet_ids: Option<Vec<String>>,
1758    /// <p>The VPC associated with your cluster.</p>
1759    #[serde(rename = "vpcId")]
1760    #[serde(skip_serializing_if = "Option::is_none")]
1761    pub vpc_id: Option<String>,
1762}
1763
1764/// Errors returned by AssociateEncryptionConfig
1765#[derive(Debug, PartialEq)]
1766pub enum AssociateEncryptionConfigError {
1767    /// <p>These errors are usually caused by a client action. Actions can include using an action or resource on behalf of a user that doesn't have permissions to use the action or resource or specifying an identifier that is not valid.</p>
1768    Client(String),
1769    /// <p>The specified parameter is invalid. Review the available parameters for the API request.</p>
1770    InvalidParameter(String),
1771    /// <p>The request is invalid given the state of the cluster. Check the state of the cluster and the associated operations.</p>
1772    InvalidRequest(String),
1773    /// <p>The specified resource is in use.</p>
1774    ResourceInUse(String),
1775    /// <p>The specified resource could not be found. You can view your available clusters with <a>ListClusters</a>. You can view your available managed node groups with <a>ListNodegroups</a>. Amazon EKS clusters and node groups are Region-specific.</p>
1776    ResourceNotFound(String),
1777    /// <p>These errors are usually caused by a server-side issue.</p>
1778    Server(String),
1779}
1780
1781impl AssociateEncryptionConfigError {
1782    pub fn from_response(res: BufferedHttpResponse) -> RusotoError<AssociateEncryptionConfigError> {
1783        if let Some(err) = proto::json::Error::parse_rest(&res) {
1784            match err.typ.as_str() {
1785                "ClientException" => {
1786                    return RusotoError::Service(AssociateEncryptionConfigError::Client(err.msg))
1787                }
1788                "InvalidParameterException" => {
1789                    return RusotoError::Service(AssociateEncryptionConfigError::InvalidParameter(
1790                        err.msg,
1791                    ))
1792                }
1793                "InvalidRequestException" => {
1794                    return RusotoError::Service(AssociateEncryptionConfigError::InvalidRequest(
1795                        err.msg,
1796                    ))
1797                }
1798                "ResourceInUseException" => {
1799                    return RusotoError::Service(AssociateEncryptionConfigError::ResourceInUse(
1800                        err.msg,
1801                    ))
1802                }
1803                "ResourceNotFoundException" => {
1804                    return RusotoError::Service(AssociateEncryptionConfigError::ResourceNotFound(
1805                        err.msg,
1806                    ))
1807                }
1808                "ServerException" => {
1809                    return RusotoError::Service(AssociateEncryptionConfigError::Server(err.msg))
1810                }
1811                "ValidationException" => return RusotoError::Validation(err.msg),
1812                _ => {}
1813            }
1814        }
1815        RusotoError::Unknown(res)
1816    }
1817}
1818impl fmt::Display for AssociateEncryptionConfigError {
1819    #[allow(unused_variables)]
1820    fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
1821        match *self {
1822            AssociateEncryptionConfigError::Client(ref cause) => write!(f, "{}", cause),
1823            AssociateEncryptionConfigError::InvalidParameter(ref cause) => write!(f, "{}", cause),
1824            AssociateEncryptionConfigError::InvalidRequest(ref cause) => write!(f, "{}", cause),
1825            AssociateEncryptionConfigError::ResourceInUse(ref cause) => write!(f, "{}", cause),
1826            AssociateEncryptionConfigError::ResourceNotFound(ref cause) => write!(f, "{}", cause),
1827            AssociateEncryptionConfigError::Server(ref cause) => write!(f, "{}", cause),
1828        }
1829    }
1830}
1831impl Error for AssociateEncryptionConfigError {}
1832/// Errors returned by AssociateIdentityProviderConfig
1833#[derive(Debug, PartialEq)]
1834pub enum AssociateIdentityProviderConfigError {
1835    /// <p>These errors are usually caused by a client action. Actions can include using an action or resource on behalf of a user that doesn't have permissions to use the action or resource or specifying an identifier that is not valid.</p>
1836    Client(String),
1837    /// <p>The specified parameter is invalid. Review the available parameters for the API request.</p>
1838    InvalidParameter(String),
1839    /// <p>The request is invalid given the state of the cluster. Check the state of the cluster and the associated operations.</p>
1840    InvalidRequest(String),
1841    /// <p>The specified resource is in use.</p>
1842    ResourceInUse(String),
1843    /// <p>The specified resource could not be found. You can view your available clusters with <a>ListClusters</a>. You can view your available managed node groups with <a>ListNodegroups</a>. Amazon EKS clusters and node groups are Region-specific.</p>
1844    ResourceNotFound(String),
1845    /// <p>These errors are usually caused by a server-side issue.</p>
1846    Server(String),
1847}
1848
1849impl AssociateIdentityProviderConfigError {
1850    pub fn from_response(
1851        res: BufferedHttpResponse,
1852    ) -> RusotoError<AssociateIdentityProviderConfigError> {
1853        if let Some(err) = proto::json::Error::parse_rest(&res) {
1854            match err.typ.as_str() {
1855                "ClientException" => {
1856                    return RusotoError::Service(AssociateIdentityProviderConfigError::Client(
1857                        err.msg,
1858                    ))
1859                }
1860                "InvalidParameterException" => {
1861                    return RusotoError::Service(
1862                        AssociateIdentityProviderConfigError::InvalidParameter(err.msg),
1863                    )
1864                }
1865                "InvalidRequestException" => {
1866                    return RusotoError::Service(
1867                        AssociateIdentityProviderConfigError::InvalidRequest(err.msg),
1868                    )
1869                }
1870                "ResourceInUseException" => {
1871                    return RusotoError::Service(
1872                        AssociateIdentityProviderConfigError::ResourceInUse(err.msg),
1873                    )
1874                }
1875                "ResourceNotFoundException" => {
1876                    return RusotoError::Service(
1877                        AssociateIdentityProviderConfigError::ResourceNotFound(err.msg),
1878                    )
1879                }
1880                "ServerException" => {
1881                    return RusotoError::Service(AssociateIdentityProviderConfigError::Server(
1882                        err.msg,
1883                    ))
1884                }
1885                "ValidationException" => return RusotoError::Validation(err.msg),
1886                _ => {}
1887            }
1888        }
1889        RusotoError::Unknown(res)
1890    }
1891}
1892impl fmt::Display for AssociateIdentityProviderConfigError {
1893    #[allow(unused_variables)]
1894    fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
1895        match *self {
1896            AssociateIdentityProviderConfigError::Client(ref cause) => write!(f, "{}", cause),
1897            AssociateIdentityProviderConfigError::InvalidParameter(ref cause) => {
1898                write!(f, "{}", cause)
1899            }
1900            AssociateIdentityProviderConfigError::InvalidRequest(ref cause) => {
1901                write!(f, "{}", cause)
1902            }
1903            AssociateIdentityProviderConfigError::ResourceInUse(ref cause) => {
1904                write!(f, "{}", cause)
1905            }
1906            AssociateIdentityProviderConfigError::ResourceNotFound(ref cause) => {
1907                write!(f, "{}", cause)
1908            }
1909            AssociateIdentityProviderConfigError::Server(ref cause) => write!(f, "{}", cause),
1910        }
1911    }
1912}
1913impl Error for AssociateIdentityProviderConfigError {}
1914/// Errors returned by CreateAddon
1915#[derive(Debug, PartialEq)]
1916pub enum CreateAddonError {
1917    /// <p>These errors are usually caused by a client action. Actions can include using an action or resource on behalf of a user that doesn't have permissions to use the action or resource or specifying an identifier that is not valid.</p>
1918    Client(String),
1919    /// <p>The specified parameter is invalid. Review the available parameters for the API request.</p>
1920    InvalidParameter(String),
1921    /// <p>The request is invalid given the state of the cluster. Check the state of the cluster and the associated operations.</p>
1922    InvalidRequest(String),
1923    /// <p>The specified resource is in use.</p>
1924    ResourceInUse(String),
1925    /// <p>The specified resource could not be found. You can view your available clusters with <a>ListClusters</a>. You can view your available managed node groups with <a>ListNodegroups</a>. Amazon EKS clusters and node groups are Region-specific.</p>
1926    ResourceNotFound(String),
1927    /// <p>These errors are usually caused by a server-side issue.</p>
1928    Server(String),
1929}
1930
1931impl CreateAddonError {
1932    pub fn from_response(res: BufferedHttpResponse) -> RusotoError<CreateAddonError> {
1933        if let Some(err) = proto::json::Error::parse_rest(&res) {
1934            match err.typ.as_str() {
1935                "ClientException" => {
1936                    return RusotoError::Service(CreateAddonError::Client(err.msg))
1937                }
1938                "InvalidParameterException" => {
1939                    return RusotoError::Service(CreateAddonError::InvalidParameter(err.msg))
1940                }
1941                "InvalidRequestException" => {
1942                    return RusotoError::Service(CreateAddonError::InvalidRequest(err.msg))
1943                }
1944                "ResourceInUseException" => {
1945                    return RusotoError::Service(CreateAddonError::ResourceInUse(err.msg))
1946                }
1947                "ResourceNotFoundException" => {
1948                    return RusotoError::Service(CreateAddonError::ResourceNotFound(err.msg))
1949                }
1950                "ServerException" => {
1951                    return RusotoError::Service(CreateAddonError::Server(err.msg))
1952                }
1953                "ValidationException" => return RusotoError::Validation(err.msg),
1954                _ => {}
1955            }
1956        }
1957        RusotoError::Unknown(res)
1958    }
1959}
1960impl fmt::Display for CreateAddonError {
1961    #[allow(unused_variables)]
1962    fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
1963        match *self {
1964            CreateAddonError::Client(ref cause) => write!(f, "{}", cause),
1965            CreateAddonError::InvalidParameter(ref cause) => write!(f, "{}", cause),
1966            CreateAddonError::InvalidRequest(ref cause) => write!(f, "{}", cause),
1967            CreateAddonError::ResourceInUse(ref cause) => write!(f, "{}", cause),
1968            CreateAddonError::ResourceNotFound(ref cause) => write!(f, "{}", cause),
1969            CreateAddonError::Server(ref cause) => write!(f, "{}", cause),
1970        }
1971    }
1972}
1973impl Error for CreateAddonError {}
1974/// Errors returned by CreateCluster
1975#[derive(Debug, PartialEq)]
1976pub enum CreateClusterError {
1977    /// <p>These errors are usually caused by a client action. Actions can include using an action or resource on behalf of a user that doesn't have permissions to use the action or resource or specifying an identifier that is not valid.</p>
1978    Client(String),
1979    /// <p>The specified parameter is invalid. Review the available parameters for the API request.</p>
1980    InvalidParameter(String),
1981    /// <p>The specified resource is in use.</p>
1982    ResourceInUse(String),
1983    /// <p>You have encountered a service limit on the specified resource.</p>
1984    ResourceLimitExceeded(String),
1985    /// <p>These errors are usually caused by a server-side issue.</p>
1986    Server(String),
1987    /// <p>The service is unavailable. Back off and retry the operation.</p>
1988    ServiceUnavailable(String),
1989    /// <p>At least one of your specified cluster subnets is in an Availability Zone that does not support Amazon EKS. The exception output specifies the supported Availability Zones for your account, from which you can choose subnets for your cluster.</p>
1990    UnsupportedAvailabilityZone(String),
1991}
1992
1993impl CreateClusterError {
1994    pub fn from_response(res: BufferedHttpResponse) -> RusotoError<CreateClusterError> {
1995        if let Some(err) = proto::json::Error::parse_rest(&res) {
1996            match err.typ.as_str() {
1997                "ClientException" => {
1998                    return RusotoError::Service(CreateClusterError::Client(err.msg))
1999                }
2000                "InvalidParameterException" => {
2001                    return RusotoError::Service(CreateClusterError::InvalidParameter(err.msg))
2002                }
2003                "ResourceInUseException" => {
2004                    return RusotoError::Service(CreateClusterError::ResourceInUse(err.msg))
2005                }
2006                "ResourceLimitExceededException" => {
2007                    return RusotoError::Service(CreateClusterError::ResourceLimitExceeded(err.msg))
2008                }
2009                "ServerException" => {
2010                    return RusotoError::Service(CreateClusterError::Server(err.msg))
2011                }
2012                "ServiceUnavailableException" => {
2013                    return RusotoError::Service(CreateClusterError::ServiceUnavailable(err.msg))
2014                }
2015                "UnsupportedAvailabilityZoneException" => {
2016                    return RusotoError::Service(CreateClusterError::UnsupportedAvailabilityZone(
2017                        err.msg,
2018                    ))
2019                }
2020                "ValidationException" => return RusotoError::Validation(err.msg),
2021                _ => {}
2022            }
2023        }
2024        RusotoError::Unknown(res)
2025    }
2026}
2027impl fmt::Display for CreateClusterError {
2028    #[allow(unused_variables)]
2029    fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
2030        match *self {
2031            CreateClusterError::Client(ref cause) => write!(f, "{}", cause),
2032            CreateClusterError::InvalidParameter(ref cause) => write!(f, "{}", cause),
2033            CreateClusterError::ResourceInUse(ref cause) => write!(f, "{}", cause),
2034            CreateClusterError::ResourceLimitExceeded(ref cause) => write!(f, "{}", cause),
2035            CreateClusterError::Server(ref cause) => write!(f, "{}", cause),
2036            CreateClusterError::ServiceUnavailable(ref cause) => write!(f, "{}", cause),
2037            CreateClusterError::UnsupportedAvailabilityZone(ref cause) => write!(f, "{}", cause),
2038        }
2039    }
2040}
2041impl Error for CreateClusterError {}
2042/// Errors returned by CreateFargateProfile
2043#[derive(Debug, PartialEq)]
2044pub enum CreateFargateProfileError {
2045    /// <p>These errors are usually caused by a client action. Actions can include using an action or resource on behalf of a user that doesn't have permissions to use the action or resource or specifying an identifier that is not valid.</p>
2046    Client(String),
2047    /// <p>The specified parameter is invalid. Review the available parameters for the API request.</p>
2048    InvalidParameter(String),
2049    /// <p>The request is invalid given the state of the cluster. Check the state of the cluster and the associated operations.</p>
2050    InvalidRequest(String),
2051    /// <p>You have encountered a service limit on the specified resource.</p>
2052    ResourceLimitExceeded(String),
2053    /// <p>These errors are usually caused by a server-side issue.</p>
2054    Server(String),
2055    /// <p>At least one of your specified cluster subnets is in an Availability Zone that does not support Amazon EKS. The exception output specifies the supported Availability Zones for your account, from which you can choose subnets for your cluster.</p>
2056    UnsupportedAvailabilityZone(String),
2057}
2058
2059impl CreateFargateProfileError {
2060    pub fn from_response(res: BufferedHttpResponse) -> RusotoError<CreateFargateProfileError> {
2061        if let Some(err) = proto::json::Error::parse_rest(&res) {
2062            match err.typ.as_str() {
2063                "ClientException" => {
2064                    return RusotoError::Service(CreateFargateProfileError::Client(err.msg))
2065                }
2066                "InvalidParameterException" => {
2067                    return RusotoError::Service(CreateFargateProfileError::InvalidParameter(
2068                        err.msg,
2069                    ))
2070                }
2071                "InvalidRequestException" => {
2072                    return RusotoError::Service(CreateFargateProfileError::InvalidRequest(err.msg))
2073                }
2074                "ResourceLimitExceededException" => {
2075                    return RusotoError::Service(CreateFargateProfileError::ResourceLimitExceeded(
2076                        err.msg,
2077                    ))
2078                }
2079                "ServerException" => {
2080                    return RusotoError::Service(CreateFargateProfileError::Server(err.msg))
2081                }
2082                "UnsupportedAvailabilityZoneException" => {
2083                    return RusotoError::Service(
2084                        CreateFargateProfileError::UnsupportedAvailabilityZone(err.msg),
2085                    )
2086                }
2087                "ValidationException" => return RusotoError::Validation(err.msg),
2088                _ => {}
2089            }
2090        }
2091        RusotoError::Unknown(res)
2092    }
2093}
2094impl fmt::Display for CreateFargateProfileError {
2095    #[allow(unused_variables)]
2096    fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
2097        match *self {
2098            CreateFargateProfileError::Client(ref cause) => write!(f, "{}", cause),
2099            CreateFargateProfileError::InvalidParameter(ref cause) => write!(f, "{}", cause),
2100            CreateFargateProfileError::InvalidRequest(ref cause) => write!(f, "{}", cause),
2101            CreateFargateProfileError::ResourceLimitExceeded(ref cause) => write!(f, "{}", cause),
2102            CreateFargateProfileError::Server(ref cause) => write!(f, "{}", cause),
2103            CreateFargateProfileError::UnsupportedAvailabilityZone(ref cause) => {
2104                write!(f, "{}", cause)
2105            }
2106        }
2107    }
2108}
2109impl Error for CreateFargateProfileError {}
2110/// Errors returned by CreateNodegroup
2111#[derive(Debug, PartialEq)]
2112pub enum CreateNodegroupError {
2113    /// <p>These errors are usually caused by a client action. Actions can include using an action or resource on behalf of a user that doesn't have permissions to use the action or resource or specifying an identifier that is not valid.</p>
2114    Client(String),
2115    /// <p>The specified parameter is invalid. Review the available parameters for the API request.</p>
2116    InvalidParameter(String),
2117    /// <p>The request is invalid given the state of the cluster. Check the state of the cluster and the associated operations.</p>
2118    InvalidRequest(String),
2119    /// <p>The specified resource is in use.</p>
2120    ResourceInUse(String),
2121    /// <p>You have encountered a service limit on the specified resource.</p>
2122    ResourceLimitExceeded(String),
2123    /// <p>These errors are usually caused by a server-side issue.</p>
2124    Server(String),
2125    /// <p>The service is unavailable. Back off and retry the operation.</p>
2126    ServiceUnavailable(String),
2127}
2128
2129impl CreateNodegroupError {
2130    pub fn from_response(res: BufferedHttpResponse) -> RusotoError<CreateNodegroupError> {
2131        if let Some(err) = proto::json::Error::parse_rest(&res) {
2132            match err.typ.as_str() {
2133                "ClientException" => {
2134                    return RusotoError::Service(CreateNodegroupError::Client(err.msg))
2135                }
2136                "InvalidParameterException" => {
2137                    return RusotoError::Service(CreateNodegroupError::InvalidParameter(err.msg))
2138                }
2139                "InvalidRequestException" => {
2140                    return RusotoError::Service(CreateNodegroupError::InvalidRequest(err.msg))
2141                }
2142                "ResourceInUseException" => {
2143                    return RusotoError::Service(CreateNodegroupError::ResourceInUse(err.msg))
2144                }
2145                "ResourceLimitExceededException" => {
2146                    return RusotoError::Service(CreateNodegroupError::ResourceLimitExceeded(
2147                        err.msg,
2148                    ))
2149                }
2150                "ServerException" => {
2151                    return RusotoError::Service(CreateNodegroupError::Server(err.msg))
2152                }
2153                "ServiceUnavailableException" => {
2154                    return RusotoError::Service(CreateNodegroupError::ServiceUnavailable(err.msg))
2155                }
2156                "ValidationException" => return RusotoError::Validation(err.msg),
2157                _ => {}
2158            }
2159        }
2160        RusotoError::Unknown(res)
2161    }
2162}
2163impl fmt::Display for CreateNodegroupError {
2164    #[allow(unused_variables)]
2165    fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
2166        match *self {
2167            CreateNodegroupError::Client(ref cause) => write!(f, "{}", cause),
2168            CreateNodegroupError::InvalidParameter(ref cause) => write!(f, "{}", cause),
2169            CreateNodegroupError::InvalidRequest(ref cause) => write!(f, "{}", cause),
2170            CreateNodegroupError::ResourceInUse(ref cause) => write!(f, "{}", cause),
2171            CreateNodegroupError::ResourceLimitExceeded(ref cause) => write!(f, "{}", cause),
2172            CreateNodegroupError::Server(ref cause) => write!(f, "{}", cause),
2173            CreateNodegroupError::ServiceUnavailable(ref cause) => write!(f, "{}", cause),
2174        }
2175    }
2176}
2177impl Error for CreateNodegroupError {}
2178/// Errors returned by DeleteAddon
2179#[derive(Debug, PartialEq)]
2180pub enum DeleteAddonError {
2181    /// <p>These errors are usually caused by a client action. Actions can include using an action or resource on behalf of a user that doesn't have permissions to use the action or resource or specifying an identifier that is not valid.</p>
2182    Client(String),
2183    /// <p>The specified parameter is invalid. Review the available parameters for the API request.</p>
2184    InvalidParameter(String),
2185    /// <p>The request is invalid given the state of the cluster. Check the state of the cluster and the associated operations.</p>
2186    InvalidRequest(String),
2187    /// <p>The specified resource could not be found. You can view your available clusters with <a>ListClusters</a>. You can view your available managed node groups with <a>ListNodegroups</a>. Amazon EKS clusters and node groups are Region-specific.</p>
2188    ResourceNotFound(String),
2189    /// <p>These errors are usually caused by a server-side issue.</p>
2190    Server(String),
2191}
2192
2193impl DeleteAddonError {
2194    pub fn from_response(res: BufferedHttpResponse) -> RusotoError<DeleteAddonError> {
2195        if let Some(err) = proto::json::Error::parse_rest(&res) {
2196            match err.typ.as_str() {
2197                "ClientException" => {
2198                    return RusotoError::Service(DeleteAddonError::Client(err.msg))
2199                }
2200                "InvalidParameterException" => {
2201                    return RusotoError::Service(DeleteAddonError::InvalidParameter(err.msg))
2202                }
2203                "InvalidRequestException" => {
2204                    return RusotoError::Service(DeleteAddonError::InvalidRequest(err.msg))
2205                }
2206                "ResourceNotFoundException" => {
2207                    return RusotoError::Service(DeleteAddonError::ResourceNotFound(err.msg))
2208                }
2209                "ServerException" => {
2210                    return RusotoError::Service(DeleteAddonError::Server(err.msg))
2211                }
2212                "ValidationException" => return RusotoError::Validation(err.msg),
2213                _ => {}
2214            }
2215        }
2216        RusotoError::Unknown(res)
2217    }
2218}
2219impl fmt::Display for DeleteAddonError {
2220    #[allow(unused_variables)]
2221    fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
2222        match *self {
2223            DeleteAddonError::Client(ref cause) => write!(f, "{}", cause),
2224            DeleteAddonError::InvalidParameter(ref cause) => write!(f, "{}", cause),
2225            DeleteAddonError::InvalidRequest(ref cause) => write!(f, "{}", cause),
2226            DeleteAddonError::ResourceNotFound(ref cause) => write!(f, "{}", cause),
2227            DeleteAddonError::Server(ref cause) => write!(f, "{}", cause),
2228        }
2229    }
2230}
2231impl Error for DeleteAddonError {}
2232/// Errors returned by DeleteCluster
2233#[derive(Debug, PartialEq)]
2234pub enum DeleteClusterError {
2235    /// <p>These errors are usually caused by a client action. Actions can include using an action or resource on behalf of a user that doesn't have permissions to use the action or resource or specifying an identifier that is not valid.</p>
2236    Client(String),
2237    /// <p>The specified resource is in use.</p>
2238    ResourceInUse(String),
2239    /// <p>The specified resource could not be found. You can view your available clusters with <a>ListClusters</a>. You can view your available managed node groups with <a>ListNodegroups</a>. Amazon EKS clusters and node groups are Region-specific.</p>
2240    ResourceNotFound(String),
2241    /// <p>These errors are usually caused by a server-side issue.</p>
2242    Server(String),
2243    /// <p>The service is unavailable. Back off and retry the operation.</p>
2244    ServiceUnavailable(String),
2245}
2246
2247impl DeleteClusterError {
2248    pub fn from_response(res: BufferedHttpResponse) -> RusotoError<DeleteClusterError> {
2249        if let Some(err) = proto::json::Error::parse_rest(&res) {
2250            match err.typ.as_str() {
2251                "ClientException" => {
2252                    return RusotoError::Service(DeleteClusterError::Client(err.msg))
2253                }
2254                "ResourceInUseException" => {
2255                    return RusotoError::Service(DeleteClusterError::ResourceInUse(err.msg))
2256                }
2257                "ResourceNotFoundException" => {
2258                    return RusotoError::Service(DeleteClusterError::ResourceNotFound(err.msg))
2259                }
2260                "ServerException" => {
2261                    return RusotoError::Service(DeleteClusterError::Server(err.msg))
2262                }
2263                "ServiceUnavailableException" => {
2264                    return RusotoError::Service(DeleteClusterError::ServiceUnavailable(err.msg))
2265                }
2266                "ValidationException" => return RusotoError::Validation(err.msg),
2267                _ => {}
2268            }
2269        }
2270        RusotoError::Unknown(res)
2271    }
2272}
2273impl fmt::Display for DeleteClusterError {
2274    #[allow(unused_variables)]
2275    fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
2276        match *self {
2277            DeleteClusterError::Client(ref cause) => write!(f, "{}", cause),
2278            DeleteClusterError::ResourceInUse(ref cause) => write!(f, "{}", cause),
2279            DeleteClusterError::ResourceNotFound(ref cause) => write!(f, "{}", cause),
2280            DeleteClusterError::Server(ref cause) => write!(f, "{}", cause),
2281            DeleteClusterError::ServiceUnavailable(ref cause) => write!(f, "{}", cause),
2282        }
2283    }
2284}
2285impl Error for DeleteClusterError {}
2286/// Errors returned by DeleteFargateProfile
2287#[derive(Debug, PartialEq)]
2288pub enum DeleteFargateProfileError {
2289    /// <p>These errors are usually caused by a client action. Actions can include using an action or resource on behalf of a user that doesn't have permissions to use the action or resource or specifying an identifier that is not valid.</p>
2290    Client(String),
2291    /// <p>The specified parameter is invalid. Review the available parameters for the API request.</p>
2292    InvalidParameter(String),
2293    /// <p>The specified resource could not be found. You can view your available clusters with <a>ListClusters</a>. You can view your available managed node groups with <a>ListNodegroups</a>. Amazon EKS clusters and node groups are Region-specific.</p>
2294    ResourceNotFound(String),
2295    /// <p>These errors are usually caused by a server-side issue.</p>
2296    Server(String),
2297}
2298
2299impl DeleteFargateProfileError {
2300    pub fn from_response(res: BufferedHttpResponse) -> RusotoError<DeleteFargateProfileError> {
2301        if let Some(err) = proto::json::Error::parse_rest(&res) {
2302            match err.typ.as_str() {
2303                "ClientException" => {
2304                    return RusotoError::Service(DeleteFargateProfileError::Client(err.msg))
2305                }
2306                "InvalidParameterException" => {
2307                    return RusotoError::Service(DeleteFargateProfileError::InvalidParameter(
2308                        err.msg,
2309                    ))
2310                }
2311                "ResourceNotFoundException" => {
2312                    return RusotoError::Service(DeleteFargateProfileError::ResourceNotFound(
2313                        err.msg,
2314                    ))
2315                }
2316                "ServerException" => {
2317                    return RusotoError::Service(DeleteFargateProfileError::Server(err.msg))
2318                }
2319                "ValidationException" => return RusotoError::Validation(err.msg),
2320                _ => {}
2321            }
2322        }
2323        RusotoError::Unknown(res)
2324    }
2325}
2326impl fmt::Display for DeleteFargateProfileError {
2327    #[allow(unused_variables)]
2328    fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
2329        match *self {
2330            DeleteFargateProfileError::Client(ref cause) => write!(f, "{}", cause),
2331            DeleteFargateProfileError::InvalidParameter(ref cause) => write!(f, "{}", cause),
2332            DeleteFargateProfileError::ResourceNotFound(ref cause) => write!(f, "{}", cause),
2333            DeleteFargateProfileError::Server(ref cause) => write!(f, "{}", cause),
2334        }
2335    }
2336}
2337impl Error for DeleteFargateProfileError {}
2338/// Errors returned by DeleteNodegroup
2339#[derive(Debug, PartialEq)]
2340pub enum DeleteNodegroupError {
2341    /// <p>These errors are usually caused by a client action. Actions can include using an action or resource on behalf of a user that doesn't have permissions to use the action or resource or specifying an identifier that is not valid.</p>
2342    Client(String),
2343    /// <p>The specified parameter is invalid. Review the available parameters for the API request.</p>
2344    InvalidParameter(String),
2345    /// <p>The specified resource is in use.</p>
2346    ResourceInUse(String),
2347    /// <p>The specified resource could not be found. You can view your available clusters with <a>ListClusters</a>. You can view your available managed node groups with <a>ListNodegroups</a>. Amazon EKS clusters and node groups are Region-specific.</p>
2348    ResourceNotFound(String),
2349    /// <p>These errors are usually caused by a server-side issue.</p>
2350    Server(String),
2351    /// <p>The service is unavailable. Back off and retry the operation.</p>
2352    ServiceUnavailable(String),
2353}
2354
2355impl DeleteNodegroupError {
2356    pub fn from_response(res: BufferedHttpResponse) -> RusotoError<DeleteNodegroupError> {
2357        if let Some(err) = proto::json::Error::parse_rest(&res) {
2358            match err.typ.as_str() {
2359                "ClientException" => {
2360                    return RusotoError::Service(DeleteNodegroupError::Client(err.msg))
2361                }
2362                "InvalidParameterException" => {
2363                    return RusotoError::Service(DeleteNodegroupError::InvalidParameter(err.msg))
2364                }
2365                "ResourceInUseException" => {
2366                    return RusotoError::Service(DeleteNodegroupError::ResourceInUse(err.msg))
2367                }
2368                "ResourceNotFoundException" => {
2369                    return RusotoError::Service(DeleteNodegroupError::ResourceNotFound(err.msg))
2370                }
2371                "ServerException" => {
2372                    return RusotoError::Service(DeleteNodegroupError::Server(err.msg))
2373                }
2374                "ServiceUnavailableException" => {
2375                    return RusotoError::Service(DeleteNodegroupError::ServiceUnavailable(err.msg))
2376                }
2377                "ValidationException" => return RusotoError::Validation(err.msg),
2378                _ => {}
2379            }
2380        }
2381        RusotoError::Unknown(res)
2382    }
2383}
2384impl fmt::Display for DeleteNodegroupError {
2385    #[allow(unused_variables)]
2386    fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
2387        match *self {
2388            DeleteNodegroupError::Client(ref cause) => write!(f, "{}", cause),
2389            DeleteNodegroupError::InvalidParameter(ref cause) => write!(f, "{}", cause),
2390            DeleteNodegroupError::ResourceInUse(ref cause) => write!(f, "{}", cause),
2391            DeleteNodegroupError::ResourceNotFound(ref cause) => write!(f, "{}", cause),
2392            DeleteNodegroupError::Server(ref cause) => write!(f, "{}", cause),
2393            DeleteNodegroupError::ServiceUnavailable(ref cause) => write!(f, "{}", cause),
2394        }
2395    }
2396}
2397impl Error for DeleteNodegroupError {}
2398/// Errors returned by DescribeAddon
2399#[derive(Debug, PartialEq)]
2400pub enum DescribeAddonError {
2401    /// <p>These errors are usually caused by a client action. Actions can include using an action or resource on behalf of a user that doesn't have permissions to use the action or resource or specifying an identifier that is not valid.</p>
2402    Client(String),
2403    /// <p>The specified parameter is invalid. Review the available parameters for the API request.</p>
2404    InvalidParameter(String),
2405    /// <p>The request is invalid given the state of the cluster. Check the state of the cluster and the associated operations.</p>
2406    InvalidRequest(String),
2407    /// <p>The specified resource could not be found. You can view your available clusters with <a>ListClusters</a>. You can view your available managed node groups with <a>ListNodegroups</a>. Amazon EKS clusters and node groups are Region-specific.</p>
2408    ResourceNotFound(String),
2409    /// <p>These errors are usually caused by a server-side issue.</p>
2410    Server(String),
2411}
2412
2413impl DescribeAddonError {
2414    pub fn from_response(res: BufferedHttpResponse) -> RusotoError<DescribeAddonError> {
2415        if let Some(err) = proto::json::Error::parse_rest(&res) {
2416            match err.typ.as_str() {
2417                "ClientException" => {
2418                    return RusotoError::Service(DescribeAddonError::Client(err.msg))
2419                }
2420                "InvalidParameterException" => {
2421                    return RusotoError::Service(DescribeAddonError::InvalidParameter(err.msg))
2422                }
2423                "InvalidRequestException" => {
2424                    return RusotoError::Service(DescribeAddonError::InvalidRequest(err.msg))
2425                }
2426                "ResourceNotFoundException" => {
2427                    return RusotoError::Service(DescribeAddonError::ResourceNotFound(err.msg))
2428                }
2429                "ServerException" => {
2430                    return RusotoError::Service(DescribeAddonError::Server(err.msg))
2431                }
2432                "ValidationException" => return RusotoError::Validation(err.msg),
2433                _ => {}
2434            }
2435        }
2436        RusotoError::Unknown(res)
2437    }
2438}
2439impl fmt::Display for DescribeAddonError {
2440    #[allow(unused_variables)]
2441    fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
2442        match *self {
2443            DescribeAddonError::Client(ref cause) => write!(f, "{}", cause),
2444            DescribeAddonError::InvalidParameter(ref cause) => write!(f, "{}", cause),
2445            DescribeAddonError::InvalidRequest(ref cause) => write!(f, "{}", cause),
2446            DescribeAddonError::ResourceNotFound(ref cause) => write!(f, "{}", cause),
2447            DescribeAddonError::Server(ref cause) => write!(f, "{}", cause),
2448        }
2449    }
2450}
2451impl Error for DescribeAddonError {}
2452/// Errors returned by DescribeAddonVersions
2453#[derive(Debug, PartialEq)]
2454pub enum DescribeAddonVersionsError {
2455    /// <p>The specified parameter is invalid. Review the available parameters for the API request.</p>
2456    InvalidParameter(String),
2457    /// <p>The specified resource could not be found. You can view your available clusters with <a>ListClusters</a>. You can view your available managed node groups with <a>ListNodegroups</a>. Amazon EKS clusters and node groups are Region-specific.</p>
2458    ResourceNotFound(String),
2459    /// <p>These errors are usually caused by a server-side issue.</p>
2460    Server(String),
2461}
2462
2463impl DescribeAddonVersionsError {
2464    pub fn from_response(res: BufferedHttpResponse) -> RusotoError<DescribeAddonVersionsError> {
2465        if let Some(err) = proto::json::Error::parse_rest(&res) {
2466            match err.typ.as_str() {
2467                "InvalidParameterException" => {
2468                    return RusotoError::Service(DescribeAddonVersionsError::InvalidParameter(
2469                        err.msg,
2470                    ))
2471                }
2472                "ResourceNotFoundException" => {
2473                    return RusotoError::Service(DescribeAddonVersionsError::ResourceNotFound(
2474                        err.msg,
2475                    ))
2476                }
2477                "ServerException" => {
2478                    return RusotoError::Service(DescribeAddonVersionsError::Server(err.msg))
2479                }
2480                "ValidationException" => return RusotoError::Validation(err.msg),
2481                _ => {}
2482            }
2483        }
2484        RusotoError::Unknown(res)
2485    }
2486}
2487impl fmt::Display for DescribeAddonVersionsError {
2488    #[allow(unused_variables)]
2489    fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
2490        match *self {
2491            DescribeAddonVersionsError::InvalidParameter(ref cause) => write!(f, "{}", cause),
2492            DescribeAddonVersionsError::ResourceNotFound(ref cause) => write!(f, "{}", cause),
2493            DescribeAddonVersionsError::Server(ref cause) => write!(f, "{}", cause),
2494        }
2495    }
2496}
2497impl Error for DescribeAddonVersionsError {}
2498/// Errors returned by DescribeCluster
2499#[derive(Debug, PartialEq)]
2500pub enum DescribeClusterError {
2501    /// <p>These errors are usually caused by a client action. Actions can include using an action or resource on behalf of a user that doesn't have permissions to use the action or resource or specifying an identifier that is not valid.</p>
2502    Client(String),
2503    /// <p>The specified resource could not be found. You can view your available clusters with <a>ListClusters</a>. You can view your available managed node groups with <a>ListNodegroups</a>. Amazon EKS clusters and node groups are Region-specific.</p>
2504    ResourceNotFound(String),
2505    /// <p>These errors are usually caused by a server-side issue.</p>
2506    Server(String),
2507    /// <p>The service is unavailable. Back off and retry the operation.</p>
2508    ServiceUnavailable(String),
2509}
2510
2511impl DescribeClusterError {
2512    pub fn from_response(res: BufferedHttpResponse) -> RusotoError<DescribeClusterError> {
2513        if let Some(err) = proto::json::Error::parse_rest(&res) {
2514            match err.typ.as_str() {
2515                "ClientException" => {
2516                    return RusotoError::Service(DescribeClusterError::Client(err.msg))
2517                }
2518                "ResourceNotFoundException" => {
2519                    return RusotoError::Service(DescribeClusterError::ResourceNotFound(err.msg))
2520                }
2521                "ServerException" => {
2522                    return RusotoError::Service(DescribeClusterError::Server(err.msg))
2523                }
2524                "ServiceUnavailableException" => {
2525                    return RusotoError::Service(DescribeClusterError::ServiceUnavailable(err.msg))
2526                }
2527                "ValidationException" => return RusotoError::Validation(err.msg),
2528                _ => {}
2529            }
2530        }
2531        RusotoError::Unknown(res)
2532    }
2533}
2534impl fmt::Display for DescribeClusterError {
2535    #[allow(unused_variables)]
2536    fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
2537        match *self {
2538            DescribeClusterError::Client(ref cause) => write!(f, "{}", cause),
2539            DescribeClusterError::ResourceNotFound(ref cause) => write!(f, "{}", cause),
2540            DescribeClusterError::Server(ref cause) => write!(f, "{}", cause),
2541            DescribeClusterError::ServiceUnavailable(ref cause) => write!(f, "{}", cause),
2542        }
2543    }
2544}
2545impl Error for DescribeClusterError {}
2546/// Errors returned by DescribeFargateProfile
2547#[derive(Debug, PartialEq)]
2548pub enum DescribeFargateProfileError {
2549    /// <p>These errors are usually caused by a client action. Actions can include using an action or resource on behalf of a user that doesn't have permissions to use the action or resource or specifying an identifier that is not valid.</p>
2550    Client(String),
2551    /// <p>The specified parameter is invalid. Review the available parameters for the API request.</p>
2552    InvalidParameter(String),
2553    /// <p>The specified resource could not be found. You can view your available clusters with <a>ListClusters</a>. You can view your available managed node groups with <a>ListNodegroups</a>. Amazon EKS clusters and node groups are Region-specific.</p>
2554    ResourceNotFound(String),
2555    /// <p>These errors are usually caused by a server-side issue.</p>
2556    Server(String),
2557}
2558
2559impl DescribeFargateProfileError {
2560    pub fn from_response(res: BufferedHttpResponse) -> RusotoError<DescribeFargateProfileError> {
2561        if let Some(err) = proto::json::Error::parse_rest(&res) {
2562            match err.typ.as_str() {
2563                "ClientException" => {
2564                    return RusotoError::Service(DescribeFargateProfileError::Client(err.msg))
2565                }
2566                "InvalidParameterException" => {
2567                    return RusotoError::Service(DescribeFargateProfileError::InvalidParameter(
2568                        err.msg,
2569                    ))
2570                }
2571                "ResourceNotFoundException" => {
2572                    return RusotoError::Service(DescribeFargateProfileError::ResourceNotFound(
2573                        err.msg,
2574                    ))
2575                }
2576                "ServerException" => {
2577                    return RusotoError::Service(DescribeFargateProfileError::Server(err.msg))
2578                }
2579                "ValidationException" => return RusotoError::Validation(err.msg),
2580                _ => {}
2581            }
2582        }
2583        RusotoError::Unknown(res)
2584    }
2585}
2586impl fmt::Display for DescribeFargateProfileError {
2587    #[allow(unused_variables)]
2588    fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
2589        match *self {
2590            DescribeFargateProfileError::Client(ref cause) => write!(f, "{}", cause),
2591            DescribeFargateProfileError::InvalidParameter(ref cause) => write!(f, "{}", cause),
2592            DescribeFargateProfileError::ResourceNotFound(ref cause) => write!(f, "{}", cause),
2593            DescribeFargateProfileError::Server(ref cause) => write!(f, "{}", cause),
2594        }
2595    }
2596}
2597impl Error for DescribeFargateProfileError {}
2598/// Errors returned by DescribeIdentityProviderConfig
2599#[derive(Debug, PartialEq)]
2600pub enum DescribeIdentityProviderConfigError {
2601    /// <p>These errors are usually caused by a client action. Actions can include using an action or resource on behalf of a user that doesn't have permissions to use the action or resource or specifying an identifier that is not valid.</p>
2602    Client(String),
2603    /// <p>The specified parameter is invalid. Review the available parameters for the API request.</p>
2604    InvalidParameter(String),
2605    /// <p>The specified resource could not be found. You can view your available clusters with <a>ListClusters</a>. You can view your available managed node groups with <a>ListNodegroups</a>. Amazon EKS clusters and node groups are Region-specific.</p>
2606    ResourceNotFound(String),
2607    /// <p>These errors are usually caused by a server-side issue.</p>
2608    Server(String),
2609    /// <p>The service is unavailable. Back off and retry the operation.</p>
2610    ServiceUnavailable(String),
2611}
2612
2613impl DescribeIdentityProviderConfigError {
2614    pub fn from_response(
2615        res: BufferedHttpResponse,
2616    ) -> RusotoError<DescribeIdentityProviderConfigError> {
2617        if let Some(err) = proto::json::Error::parse_rest(&res) {
2618            match err.typ.as_str() {
2619                "ClientException" => {
2620                    return RusotoError::Service(DescribeIdentityProviderConfigError::Client(
2621                        err.msg,
2622                    ))
2623                }
2624                "InvalidParameterException" => {
2625                    return RusotoError::Service(
2626                        DescribeIdentityProviderConfigError::InvalidParameter(err.msg),
2627                    )
2628                }
2629                "ResourceNotFoundException" => {
2630                    return RusotoError::Service(
2631                        DescribeIdentityProviderConfigError::ResourceNotFound(err.msg),
2632                    )
2633                }
2634                "ServerException" => {
2635                    return RusotoError::Service(DescribeIdentityProviderConfigError::Server(
2636                        err.msg,
2637                    ))
2638                }
2639                "ServiceUnavailableException" => {
2640                    return RusotoError::Service(
2641                        DescribeIdentityProviderConfigError::ServiceUnavailable(err.msg),
2642                    )
2643                }
2644                "ValidationException" => return RusotoError::Validation(err.msg),
2645                _ => {}
2646            }
2647        }
2648        RusotoError::Unknown(res)
2649    }
2650}
2651impl fmt::Display for DescribeIdentityProviderConfigError {
2652    #[allow(unused_variables)]
2653    fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
2654        match *self {
2655            DescribeIdentityProviderConfigError::Client(ref cause) => write!(f, "{}", cause),
2656            DescribeIdentityProviderConfigError::InvalidParameter(ref cause) => {
2657                write!(f, "{}", cause)
2658            }
2659            DescribeIdentityProviderConfigError::ResourceNotFound(ref cause) => {
2660                write!(f, "{}", cause)
2661            }
2662            DescribeIdentityProviderConfigError::Server(ref cause) => write!(f, "{}", cause),
2663            DescribeIdentityProviderConfigError::ServiceUnavailable(ref cause) => {
2664                write!(f, "{}", cause)
2665            }
2666        }
2667    }
2668}
2669impl Error for DescribeIdentityProviderConfigError {}
2670/// Errors returned by DescribeNodegroup
2671#[derive(Debug, PartialEq)]
2672pub enum DescribeNodegroupError {
2673    /// <p>These errors are usually caused by a client action. Actions can include using an action or resource on behalf of a user that doesn't have permissions to use the action or resource or specifying an identifier that is not valid.</p>
2674    Client(String),
2675    /// <p>The specified parameter is invalid. Review the available parameters for the API request.</p>
2676    InvalidParameter(String),
2677    /// <p>The specified resource could not be found. You can view your available clusters with <a>ListClusters</a>. You can view your available managed node groups with <a>ListNodegroups</a>. Amazon EKS clusters and node groups are Region-specific.</p>
2678    ResourceNotFound(String),
2679    /// <p>These errors are usually caused by a server-side issue.</p>
2680    Server(String),
2681    /// <p>The service is unavailable. Back off and retry the operation.</p>
2682    ServiceUnavailable(String),
2683}
2684
2685impl DescribeNodegroupError {
2686    pub fn from_response(res: BufferedHttpResponse) -> RusotoError<DescribeNodegroupError> {
2687        if let Some(err) = proto::json::Error::parse_rest(&res) {
2688            match err.typ.as_str() {
2689                "ClientException" => {
2690                    return RusotoError::Service(DescribeNodegroupError::Client(err.msg))
2691                }
2692                "InvalidParameterException" => {
2693                    return RusotoError::Service(DescribeNodegroupError::InvalidParameter(err.msg))
2694                }
2695                "ResourceNotFoundException" => {
2696                    return RusotoError::Service(DescribeNodegroupError::ResourceNotFound(err.msg))
2697                }
2698                "ServerException" => {
2699                    return RusotoError::Service(DescribeNodegroupError::Server(err.msg))
2700                }
2701                "ServiceUnavailableException" => {
2702                    return RusotoError::Service(DescribeNodegroupError::ServiceUnavailable(
2703                        err.msg,
2704                    ))
2705                }
2706                "ValidationException" => return RusotoError::Validation(err.msg),
2707                _ => {}
2708            }
2709        }
2710        RusotoError::Unknown(res)
2711    }
2712}
2713impl fmt::Display for DescribeNodegroupError {
2714    #[allow(unused_variables)]
2715    fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
2716        match *self {
2717            DescribeNodegroupError::Client(ref cause) => write!(f, "{}", cause),
2718            DescribeNodegroupError::InvalidParameter(ref cause) => write!(f, "{}", cause),
2719            DescribeNodegroupError::ResourceNotFound(ref cause) => write!(f, "{}", cause),
2720            DescribeNodegroupError::Server(ref cause) => write!(f, "{}", cause),
2721            DescribeNodegroupError::ServiceUnavailable(ref cause) => write!(f, "{}", cause),
2722        }
2723    }
2724}
2725impl Error for DescribeNodegroupError {}
2726/// Errors returned by DescribeUpdate
2727#[derive(Debug, PartialEq)]
2728pub enum DescribeUpdateError {
2729    /// <p>These errors are usually caused by a client action. Actions can include using an action or resource on behalf of a user that doesn't have permissions to use the action or resource or specifying an identifier that is not valid.</p>
2730    Client(String),
2731    /// <p>The specified parameter is invalid. Review the available parameters for the API request.</p>
2732    InvalidParameter(String),
2733    /// <p>The specified resource could not be found. You can view your available clusters with <a>ListClusters</a>. You can view your available managed node groups with <a>ListNodegroups</a>. Amazon EKS clusters and node groups are Region-specific.</p>
2734    ResourceNotFound(String),
2735    /// <p>These errors are usually caused by a server-side issue.</p>
2736    Server(String),
2737}
2738
2739impl DescribeUpdateError {
2740    pub fn from_response(res: BufferedHttpResponse) -> RusotoError<DescribeUpdateError> {
2741        if let Some(err) = proto::json::Error::parse_rest(&res) {
2742            match err.typ.as_str() {
2743                "ClientException" => {
2744                    return RusotoError::Service(DescribeUpdateError::Client(err.msg))
2745                }
2746                "InvalidParameterException" => {
2747                    return RusotoError::Service(DescribeUpdateError::InvalidParameter(err.msg))
2748                }
2749                "ResourceNotFoundException" => {
2750                    return RusotoError::Service(DescribeUpdateError::ResourceNotFound(err.msg))
2751                }
2752                "ServerException" => {
2753                    return RusotoError::Service(DescribeUpdateError::Server(err.msg))
2754                }
2755                "ValidationException" => return RusotoError::Validation(err.msg),
2756                _ => {}
2757            }
2758        }
2759        RusotoError::Unknown(res)
2760    }
2761}
2762impl fmt::Display for DescribeUpdateError {
2763    #[allow(unused_variables)]
2764    fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
2765        match *self {
2766            DescribeUpdateError::Client(ref cause) => write!(f, "{}", cause),
2767            DescribeUpdateError::InvalidParameter(ref cause) => write!(f, "{}", cause),
2768            DescribeUpdateError::ResourceNotFound(ref cause) => write!(f, "{}", cause),
2769            DescribeUpdateError::Server(ref cause) => write!(f, "{}", cause),
2770        }
2771    }
2772}
2773impl Error for DescribeUpdateError {}
2774/// Errors returned by DisassociateIdentityProviderConfig
2775#[derive(Debug, PartialEq)]
2776pub enum DisassociateIdentityProviderConfigError {
2777    /// <p>These errors are usually caused by a client action. Actions can include using an action or resource on behalf of a user that doesn't have permissions to use the action or resource or specifying an identifier that is not valid.</p>
2778    Client(String),
2779    /// <p>The specified parameter is invalid. Review the available parameters for the API request.</p>
2780    InvalidParameter(String),
2781    /// <p>The request is invalid given the state of the cluster. Check the state of the cluster and the associated operations.</p>
2782    InvalidRequest(String),
2783    /// <p>The specified resource is in use.</p>
2784    ResourceInUse(String),
2785    /// <p>The specified resource could not be found. You can view your available clusters with <a>ListClusters</a>. You can view your available managed node groups with <a>ListNodegroups</a>. Amazon EKS clusters and node groups are Region-specific.</p>
2786    ResourceNotFound(String),
2787    /// <p>These errors are usually caused by a server-side issue.</p>
2788    Server(String),
2789}
2790
2791impl DisassociateIdentityProviderConfigError {
2792    pub fn from_response(
2793        res: BufferedHttpResponse,
2794    ) -> RusotoError<DisassociateIdentityProviderConfigError> {
2795        if let Some(err) = proto::json::Error::parse_rest(&res) {
2796            match err.typ.as_str() {
2797                "ClientException" => {
2798                    return RusotoError::Service(DisassociateIdentityProviderConfigError::Client(
2799                        err.msg,
2800                    ))
2801                }
2802                "InvalidParameterException" => {
2803                    return RusotoError::Service(
2804                        DisassociateIdentityProviderConfigError::InvalidParameter(err.msg),
2805                    )
2806                }
2807                "InvalidRequestException" => {
2808                    return RusotoError::Service(
2809                        DisassociateIdentityProviderConfigError::InvalidRequest(err.msg),
2810                    )
2811                }
2812                "ResourceInUseException" => {
2813                    return RusotoError::Service(
2814                        DisassociateIdentityProviderConfigError::ResourceInUse(err.msg),
2815                    )
2816                }
2817                "ResourceNotFoundException" => {
2818                    return RusotoError::Service(
2819                        DisassociateIdentityProviderConfigError::ResourceNotFound(err.msg),
2820                    )
2821                }
2822                "ServerException" => {
2823                    return RusotoError::Service(DisassociateIdentityProviderConfigError::Server(
2824                        err.msg,
2825                    ))
2826                }
2827                "ValidationException" => return RusotoError::Validation(err.msg),
2828                _ => {}
2829            }
2830        }
2831        RusotoError::Unknown(res)
2832    }
2833}
2834impl fmt::Display for DisassociateIdentityProviderConfigError {
2835    #[allow(unused_variables)]
2836    fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
2837        match *self {
2838            DisassociateIdentityProviderConfigError::Client(ref cause) => write!(f, "{}", cause),
2839            DisassociateIdentityProviderConfigError::InvalidParameter(ref cause) => {
2840                write!(f, "{}", cause)
2841            }
2842            DisassociateIdentityProviderConfigError::InvalidRequest(ref cause) => {
2843                write!(f, "{}", cause)
2844            }
2845            DisassociateIdentityProviderConfigError::ResourceInUse(ref cause) => {
2846                write!(f, "{}", cause)
2847            }
2848            DisassociateIdentityProviderConfigError::ResourceNotFound(ref cause) => {
2849                write!(f, "{}", cause)
2850            }
2851            DisassociateIdentityProviderConfigError::Server(ref cause) => write!(f, "{}", cause),
2852        }
2853    }
2854}
2855impl Error for DisassociateIdentityProviderConfigError {}
2856/// Errors returned by ListAddons
2857#[derive(Debug, PartialEq)]
2858pub enum ListAddonsError {
2859    /// <p>These errors are usually caused by a client action. Actions can include using an action or resource on behalf of a user that doesn't have permissions to use the action or resource or specifying an identifier that is not valid.</p>
2860    Client(String),
2861    /// <p>The specified parameter is invalid. Review the available parameters for the API request.</p>
2862    InvalidParameter(String),
2863    /// <p>The request is invalid given the state of the cluster. Check the state of the cluster and the associated operations.</p>
2864    InvalidRequest(String),
2865    /// <p>The specified resource could not be found. You can view your available clusters with <a>ListClusters</a>. You can view your available managed node groups with <a>ListNodegroups</a>. Amazon EKS clusters and node groups are Region-specific.</p>
2866    ResourceNotFound(String),
2867    /// <p>These errors are usually caused by a server-side issue.</p>
2868    Server(String),
2869}
2870
2871impl ListAddonsError {
2872    pub fn from_response(res: BufferedHttpResponse) -> RusotoError<ListAddonsError> {
2873        if let Some(err) = proto::json::Error::parse_rest(&res) {
2874            match err.typ.as_str() {
2875                "ClientException" => return RusotoError::Service(ListAddonsError::Client(err.msg)),
2876                "InvalidParameterException" => {
2877                    return RusotoError::Service(ListAddonsError::InvalidParameter(err.msg))
2878                }
2879                "InvalidRequestException" => {
2880                    return RusotoError::Service(ListAddonsError::InvalidRequest(err.msg))
2881                }
2882                "ResourceNotFoundException" => {
2883                    return RusotoError::Service(ListAddonsError::ResourceNotFound(err.msg))
2884                }
2885                "ServerException" => return RusotoError::Service(ListAddonsError::Server(err.msg)),
2886                "ValidationException" => return RusotoError::Validation(err.msg),
2887                _ => {}
2888            }
2889        }
2890        RusotoError::Unknown(res)
2891    }
2892}
2893impl fmt::Display for ListAddonsError {
2894    #[allow(unused_variables)]
2895    fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
2896        match *self {
2897            ListAddonsError::Client(ref cause) => write!(f, "{}", cause),
2898            ListAddonsError::InvalidParameter(ref cause) => write!(f, "{}", cause),
2899            ListAddonsError::InvalidRequest(ref cause) => write!(f, "{}", cause),
2900            ListAddonsError::ResourceNotFound(ref cause) => write!(f, "{}", cause),
2901            ListAddonsError::Server(ref cause) => write!(f, "{}", cause),
2902        }
2903    }
2904}
2905impl Error for ListAddonsError {}
2906/// Errors returned by ListClusters
2907#[derive(Debug, PartialEq)]
2908pub enum ListClustersError {
2909    /// <p>These errors are usually caused by a client action. Actions can include using an action or resource on behalf of a user that doesn't have permissions to use the action or resource or specifying an identifier that is not valid.</p>
2910    Client(String),
2911    /// <p>The specified parameter is invalid. Review the available parameters for the API request.</p>
2912    InvalidParameter(String),
2913    /// <p>These errors are usually caused by a server-side issue.</p>
2914    Server(String),
2915    /// <p>The service is unavailable. Back off and retry the operation.</p>
2916    ServiceUnavailable(String),
2917}
2918
2919impl ListClustersError {
2920    pub fn from_response(res: BufferedHttpResponse) -> RusotoError<ListClustersError> {
2921        if let Some(err) = proto::json::Error::parse_rest(&res) {
2922            match err.typ.as_str() {
2923                "ClientException" => {
2924                    return RusotoError::Service(ListClustersError::Client(err.msg))
2925                }
2926                "InvalidParameterException" => {
2927                    return RusotoError::Service(ListClustersError::InvalidParameter(err.msg))
2928                }
2929                "ServerException" => {
2930                    return RusotoError::Service(ListClustersError::Server(err.msg))
2931                }
2932                "ServiceUnavailableException" => {
2933                    return RusotoError::Service(ListClustersError::ServiceUnavailable(err.msg))
2934                }
2935                "ValidationException" => return RusotoError::Validation(err.msg),
2936                _ => {}
2937            }
2938        }
2939        RusotoError::Unknown(res)
2940    }
2941}
2942impl fmt::Display for ListClustersError {
2943    #[allow(unused_variables)]
2944    fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
2945        match *self {
2946            ListClustersError::Client(ref cause) => write!(f, "{}", cause),
2947            ListClustersError::InvalidParameter(ref cause) => write!(f, "{}", cause),
2948            ListClustersError::Server(ref cause) => write!(f, "{}", cause),
2949            ListClustersError::ServiceUnavailable(ref cause) => write!(f, "{}", cause),
2950        }
2951    }
2952}
2953impl Error for ListClustersError {}
2954/// Errors returned by ListFargateProfiles
2955#[derive(Debug, PartialEq)]
2956pub enum ListFargateProfilesError {
2957    /// <p>These errors are usually caused by a client action. Actions can include using an action or resource on behalf of a user that doesn't have permissions to use the action or resource or specifying an identifier that is not valid.</p>
2958    Client(String),
2959    /// <p>The specified parameter is invalid. Review the available parameters for the API request.</p>
2960    InvalidParameter(String),
2961    /// <p>The specified resource could not be found. You can view your available clusters with <a>ListClusters</a>. You can view your available managed node groups with <a>ListNodegroups</a>. Amazon EKS clusters and node groups are Region-specific.</p>
2962    ResourceNotFound(String),
2963    /// <p>These errors are usually caused by a server-side issue.</p>
2964    Server(String),
2965}
2966
2967impl ListFargateProfilesError {
2968    pub fn from_response(res: BufferedHttpResponse) -> RusotoError<ListFargateProfilesError> {
2969        if let Some(err) = proto::json::Error::parse_rest(&res) {
2970            match err.typ.as_str() {
2971                "ClientException" => {
2972                    return RusotoError::Service(ListFargateProfilesError::Client(err.msg))
2973                }
2974                "InvalidParameterException" => {
2975                    return RusotoError::Service(ListFargateProfilesError::InvalidParameter(
2976                        err.msg,
2977                    ))
2978                }
2979                "ResourceNotFoundException" => {
2980                    return RusotoError::Service(ListFargateProfilesError::ResourceNotFound(
2981                        err.msg,
2982                    ))
2983                }
2984                "ServerException" => {
2985                    return RusotoError::Service(ListFargateProfilesError::Server(err.msg))
2986                }
2987                "ValidationException" => return RusotoError::Validation(err.msg),
2988                _ => {}
2989            }
2990        }
2991        RusotoError::Unknown(res)
2992    }
2993}
2994impl fmt::Display for ListFargateProfilesError {
2995    #[allow(unused_variables)]
2996    fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
2997        match *self {
2998            ListFargateProfilesError::Client(ref cause) => write!(f, "{}", cause),
2999            ListFargateProfilesError::InvalidParameter(ref cause) => write!(f, "{}", cause),
3000            ListFargateProfilesError::ResourceNotFound(ref cause) => write!(f, "{}", cause),
3001            ListFargateProfilesError::Server(ref cause) => write!(f, "{}", cause),
3002        }
3003    }
3004}
3005impl Error for ListFargateProfilesError {}
3006/// Errors returned by ListIdentityProviderConfigs
3007#[derive(Debug, PartialEq)]
3008pub enum ListIdentityProviderConfigsError {
3009    /// <p>These errors are usually caused by a client action. Actions can include using an action or resource on behalf of a user that doesn't have permissions to use the action or resource or specifying an identifier that is not valid.</p>
3010    Client(String),
3011    /// <p>The specified parameter is invalid. Review the available parameters for the API request.</p>
3012    InvalidParameter(String),
3013    /// <p>The specified resource could not be found. You can view your available clusters with <a>ListClusters</a>. You can view your available managed node groups with <a>ListNodegroups</a>. Amazon EKS clusters and node groups are Region-specific.</p>
3014    ResourceNotFound(String),
3015    /// <p>These errors are usually caused by a server-side issue.</p>
3016    Server(String),
3017    /// <p>The service is unavailable. Back off and retry the operation.</p>
3018    ServiceUnavailable(String),
3019}
3020
3021impl ListIdentityProviderConfigsError {
3022    pub fn from_response(
3023        res: BufferedHttpResponse,
3024    ) -> RusotoError<ListIdentityProviderConfigsError> {
3025        if let Some(err) = proto::json::Error::parse_rest(&res) {
3026            match err.typ.as_str() {
3027                "ClientException" => {
3028                    return RusotoError::Service(ListIdentityProviderConfigsError::Client(err.msg))
3029                }
3030                "InvalidParameterException" => {
3031                    return RusotoError::Service(
3032                        ListIdentityProviderConfigsError::InvalidParameter(err.msg),
3033                    )
3034                }
3035                "ResourceNotFoundException" => {
3036                    return RusotoError::Service(
3037                        ListIdentityProviderConfigsError::ResourceNotFound(err.msg),
3038                    )
3039                }
3040                "ServerException" => {
3041                    return RusotoError::Service(ListIdentityProviderConfigsError::Server(err.msg))
3042                }
3043                "ServiceUnavailableException" => {
3044                    return RusotoError::Service(
3045                        ListIdentityProviderConfigsError::ServiceUnavailable(err.msg),
3046                    )
3047                }
3048                "ValidationException" => return RusotoError::Validation(err.msg),
3049                _ => {}
3050            }
3051        }
3052        RusotoError::Unknown(res)
3053    }
3054}
3055impl fmt::Display for ListIdentityProviderConfigsError {
3056    #[allow(unused_variables)]
3057    fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
3058        match *self {
3059            ListIdentityProviderConfigsError::Client(ref cause) => write!(f, "{}", cause),
3060            ListIdentityProviderConfigsError::InvalidParameter(ref cause) => write!(f, "{}", cause),
3061            ListIdentityProviderConfigsError::ResourceNotFound(ref cause) => write!(f, "{}", cause),
3062            ListIdentityProviderConfigsError::Server(ref cause) => write!(f, "{}", cause),
3063            ListIdentityProviderConfigsError::ServiceUnavailable(ref cause) => {
3064                write!(f, "{}", cause)
3065            }
3066        }
3067    }
3068}
3069impl Error for ListIdentityProviderConfigsError {}
3070/// Errors returned by ListNodegroups
3071#[derive(Debug, PartialEq)]
3072pub enum ListNodegroupsError {
3073    /// <p>These errors are usually caused by a client action. Actions can include using an action or resource on behalf of a user that doesn't have permissions to use the action or resource or specifying an identifier that is not valid.</p>
3074    Client(String),
3075    /// <p>The specified parameter is invalid. Review the available parameters for the API request.</p>
3076    InvalidParameter(String),
3077    /// <p>The specified resource could not be found. You can view your available clusters with <a>ListClusters</a>. You can view your available managed node groups with <a>ListNodegroups</a>. Amazon EKS clusters and node groups are Region-specific.</p>
3078    ResourceNotFound(String),
3079    /// <p>These errors are usually caused by a server-side issue.</p>
3080    Server(String),
3081    /// <p>The service is unavailable. Back off and retry the operation.</p>
3082    ServiceUnavailable(String),
3083}
3084
3085impl ListNodegroupsError {
3086    pub fn from_response(res: BufferedHttpResponse) -> RusotoError<ListNodegroupsError> {
3087        if let Some(err) = proto::json::Error::parse_rest(&res) {
3088            match err.typ.as_str() {
3089                "ClientException" => {
3090                    return RusotoError::Service(ListNodegroupsError::Client(err.msg))
3091                }
3092                "InvalidParameterException" => {
3093                    return RusotoError::Service(ListNodegroupsError::InvalidParameter(err.msg))
3094                }
3095                "ResourceNotFoundException" => {
3096                    return RusotoError::Service(ListNodegroupsError::ResourceNotFound(err.msg))
3097                }
3098                "ServerException" => {
3099                    return RusotoError::Service(ListNodegroupsError::Server(err.msg))
3100                }
3101                "ServiceUnavailableException" => {
3102                    return RusotoError::Service(ListNodegroupsError::ServiceUnavailable(err.msg))
3103                }
3104                "ValidationException" => return RusotoError::Validation(err.msg),
3105                _ => {}
3106            }
3107        }
3108        RusotoError::Unknown(res)
3109    }
3110}
3111impl fmt::Display for ListNodegroupsError {
3112    #[allow(unused_variables)]
3113    fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
3114        match *self {
3115            ListNodegroupsError::Client(ref cause) => write!(f, "{}", cause),
3116            ListNodegroupsError::InvalidParameter(ref cause) => write!(f, "{}", cause),
3117            ListNodegroupsError::ResourceNotFound(ref cause) => write!(f, "{}", cause),
3118            ListNodegroupsError::Server(ref cause) => write!(f, "{}", cause),
3119            ListNodegroupsError::ServiceUnavailable(ref cause) => write!(f, "{}", cause),
3120        }
3121    }
3122}
3123impl Error for ListNodegroupsError {}
3124/// Errors returned by ListTagsForResource
3125#[derive(Debug, PartialEq)]
3126pub enum ListTagsForResourceError {
3127    /// <p>This exception is thrown if the request contains a semantic error. The precise meaning will depend on the API, and will be documented in the error message.</p>
3128    BadRequest(String),
3129    /// <p>A service resource associated with the request could not be found. Clients should not retry such requests.</p>
3130    NotFound(String),
3131}
3132
3133impl ListTagsForResourceError {
3134    pub fn from_response(res: BufferedHttpResponse) -> RusotoError<ListTagsForResourceError> {
3135        if let Some(err) = proto::json::Error::parse_rest(&res) {
3136            match err.typ.as_str() {
3137                "BadRequestException" => {
3138                    return RusotoError::Service(ListTagsForResourceError::BadRequest(err.msg))
3139                }
3140                "NotFoundException" => {
3141                    return RusotoError::Service(ListTagsForResourceError::NotFound(err.msg))
3142                }
3143                "ValidationException" => return RusotoError::Validation(err.msg),
3144                _ => {}
3145            }
3146        }
3147        RusotoError::Unknown(res)
3148    }
3149}
3150impl fmt::Display for ListTagsForResourceError {
3151    #[allow(unused_variables)]
3152    fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
3153        match *self {
3154            ListTagsForResourceError::BadRequest(ref cause) => write!(f, "{}", cause),
3155            ListTagsForResourceError::NotFound(ref cause) => write!(f, "{}", cause),
3156        }
3157    }
3158}
3159impl Error for ListTagsForResourceError {}
3160/// Errors returned by ListUpdates
3161#[derive(Debug, PartialEq)]
3162pub enum ListUpdatesError {
3163    /// <p>These errors are usually caused by a client action. Actions can include using an action or resource on behalf of a user that doesn't have permissions to use the action or resource or specifying an identifier that is not valid.</p>
3164    Client(String),
3165    /// <p>The specified parameter is invalid. Review the available parameters for the API request.</p>
3166    InvalidParameter(String),
3167    /// <p>The specified resource could not be found. You can view your available clusters with <a>ListClusters</a>. You can view your available managed node groups with <a>ListNodegroups</a>. Amazon EKS clusters and node groups are Region-specific.</p>
3168    ResourceNotFound(String),
3169    /// <p>These errors are usually caused by a server-side issue.</p>
3170    Server(String),
3171}
3172
3173impl ListUpdatesError {
3174    pub fn from_response(res: BufferedHttpResponse) -> RusotoError<ListUpdatesError> {
3175        if let Some(err) = proto::json::Error::parse_rest(&res) {
3176            match err.typ.as_str() {
3177                "ClientException" => {
3178                    return RusotoError::Service(ListUpdatesError::Client(err.msg))
3179                }
3180                "InvalidParameterException" => {
3181                    return RusotoError::Service(ListUpdatesError::InvalidParameter(err.msg))
3182                }
3183                "ResourceNotFoundException" => {
3184                    return RusotoError::Service(ListUpdatesError::ResourceNotFound(err.msg))
3185                }
3186                "ServerException" => {
3187                    return RusotoError::Service(ListUpdatesError::Server(err.msg))
3188                }
3189                "ValidationException" => return RusotoError::Validation(err.msg),
3190                _ => {}
3191            }
3192        }
3193        RusotoError::Unknown(res)
3194    }
3195}
3196impl fmt::Display for ListUpdatesError {
3197    #[allow(unused_variables)]
3198    fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
3199        match *self {
3200            ListUpdatesError::Client(ref cause) => write!(f, "{}", cause),
3201            ListUpdatesError::InvalidParameter(ref cause) => write!(f, "{}", cause),
3202            ListUpdatesError::ResourceNotFound(ref cause) => write!(f, "{}", cause),
3203            ListUpdatesError::Server(ref cause) => write!(f, "{}", cause),
3204        }
3205    }
3206}
3207impl Error for ListUpdatesError {}
3208/// Errors returned by TagResource
3209#[derive(Debug, PartialEq)]
3210pub enum TagResourceError {
3211    /// <p>This exception is thrown if the request contains a semantic error. The precise meaning will depend on the API, and will be documented in the error message.</p>
3212    BadRequest(String),
3213    /// <p>A service resource associated with the request could not be found. Clients should not retry such requests.</p>
3214    NotFound(String),
3215}
3216
3217impl TagResourceError {
3218    pub fn from_response(res: BufferedHttpResponse) -> RusotoError<TagResourceError> {
3219        if let Some(err) = proto::json::Error::parse_rest(&res) {
3220            match err.typ.as_str() {
3221                "BadRequestException" => {
3222                    return RusotoError::Service(TagResourceError::BadRequest(err.msg))
3223                }
3224                "NotFoundException" => {
3225                    return RusotoError::Service(TagResourceError::NotFound(err.msg))
3226                }
3227                "ValidationException" => return RusotoError::Validation(err.msg),
3228                _ => {}
3229            }
3230        }
3231        RusotoError::Unknown(res)
3232    }
3233}
3234impl fmt::Display for TagResourceError {
3235    #[allow(unused_variables)]
3236    fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
3237        match *self {
3238            TagResourceError::BadRequest(ref cause) => write!(f, "{}", cause),
3239            TagResourceError::NotFound(ref cause) => write!(f, "{}", cause),
3240        }
3241    }
3242}
3243impl Error for TagResourceError {}
3244/// Errors returned by UntagResource
3245#[derive(Debug, PartialEq)]
3246pub enum UntagResourceError {
3247    /// <p>This exception is thrown if the request contains a semantic error. The precise meaning will depend on the API, and will be documented in the error message.</p>
3248    BadRequest(String),
3249    /// <p>A service resource associated with the request could not be found. Clients should not retry such requests.</p>
3250    NotFound(String),
3251}
3252
3253impl UntagResourceError {
3254    pub fn from_response(res: BufferedHttpResponse) -> RusotoError<UntagResourceError> {
3255        if let Some(err) = proto::json::Error::parse_rest(&res) {
3256            match err.typ.as_str() {
3257                "BadRequestException" => {
3258                    return RusotoError::Service(UntagResourceError::BadRequest(err.msg))
3259                }
3260                "NotFoundException" => {
3261                    return RusotoError::Service(UntagResourceError::NotFound(err.msg))
3262                }
3263                "ValidationException" => return RusotoError::Validation(err.msg),
3264                _ => {}
3265            }
3266        }
3267        RusotoError::Unknown(res)
3268    }
3269}
3270impl fmt::Display for UntagResourceError {
3271    #[allow(unused_variables)]
3272    fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
3273        match *self {
3274            UntagResourceError::BadRequest(ref cause) => write!(f, "{}", cause),
3275            UntagResourceError::NotFound(ref cause) => write!(f, "{}", cause),
3276        }
3277    }
3278}
3279impl Error for UntagResourceError {}
3280/// Errors returned by UpdateAddon
3281#[derive(Debug, PartialEq)]
3282pub enum UpdateAddonError {
3283    /// <p>These errors are usually caused by a client action. Actions can include using an action or resource on behalf of a user that doesn't have permissions to use the action or resource or specifying an identifier that is not valid.</p>
3284    Client(String),
3285    /// <p>The specified parameter is invalid. Review the available parameters for the API request.</p>
3286    InvalidParameter(String),
3287    /// <p>The request is invalid given the state of the cluster. Check the state of the cluster and the associated operations.</p>
3288    InvalidRequest(String),
3289    /// <p>The specified resource is in use.</p>
3290    ResourceInUse(String),
3291    /// <p>The specified resource could not be found. You can view your available clusters with <a>ListClusters</a>. You can view your available managed node groups with <a>ListNodegroups</a>. Amazon EKS clusters and node groups are Region-specific.</p>
3292    ResourceNotFound(String),
3293    /// <p>These errors are usually caused by a server-side issue.</p>
3294    Server(String),
3295}
3296
3297impl UpdateAddonError {
3298    pub fn from_response(res: BufferedHttpResponse) -> RusotoError<UpdateAddonError> {
3299        if let Some(err) = proto::json::Error::parse_rest(&res) {
3300            match err.typ.as_str() {
3301                "ClientException" => {
3302                    return RusotoError::Service(UpdateAddonError::Client(err.msg))
3303                }
3304                "InvalidParameterException" => {
3305                    return RusotoError::Service(UpdateAddonError::InvalidParameter(err.msg))
3306                }
3307                "InvalidRequestException" => {
3308                    return RusotoError::Service(UpdateAddonError::InvalidRequest(err.msg))
3309                }
3310                "ResourceInUseException" => {
3311                    return RusotoError::Service(UpdateAddonError::ResourceInUse(err.msg))
3312                }
3313                "ResourceNotFoundException" => {
3314                    return RusotoError::Service(UpdateAddonError::ResourceNotFound(err.msg))
3315                }
3316                "ServerException" => {
3317                    return RusotoError::Service(UpdateAddonError::Server(err.msg))
3318                }
3319                "ValidationException" => return RusotoError::Validation(err.msg),
3320                _ => {}
3321            }
3322        }
3323        RusotoError::Unknown(res)
3324    }
3325}
3326impl fmt::Display for UpdateAddonError {
3327    #[allow(unused_variables)]
3328    fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
3329        match *self {
3330            UpdateAddonError::Client(ref cause) => write!(f, "{}", cause),
3331            UpdateAddonError::InvalidParameter(ref cause) => write!(f, "{}", cause),
3332            UpdateAddonError::InvalidRequest(ref cause) => write!(f, "{}", cause),
3333            UpdateAddonError::ResourceInUse(ref cause) => write!(f, "{}", cause),
3334            UpdateAddonError::ResourceNotFound(ref cause) => write!(f, "{}", cause),
3335            UpdateAddonError::Server(ref cause) => write!(f, "{}", cause),
3336        }
3337    }
3338}
3339impl Error for UpdateAddonError {}
3340/// Errors returned by UpdateClusterConfig
3341#[derive(Debug, PartialEq)]
3342pub enum UpdateClusterConfigError {
3343    /// <p>These errors are usually caused by a client action. Actions can include using an action or resource on behalf of a user that doesn't have permissions to use the action or resource or specifying an identifier that is not valid.</p>
3344    Client(String),
3345    /// <p>The specified parameter is invalid. Review the available parameters for the API request.</p>
3346    InvalidParameter(String),
3347    /// <p>The request is invalid given the state of the cluster. Check the state of the cluster and the associated operations.</p>
3348    InvalidRequest(String),
3349    /// <p>The specified resource is in use.</p>
3350    ResourceInUse(String),
3351    /// <p>The specified resource could not be found. You can view your available clusters with <a>ListClusters</a>. You can view your available managed node groups with <a>ListNodegroups</a>. Amazon EKS clusters and node groups are Region-specific.</p>
3352    ResourceNotFound(String),
3353    /// <p>These errors are usually caused by a server-side issue.</p>
3354    Server(String),
3355}
3356
3357impl UpdateClusterConfigError {
3358    pub fn from_response(res: BufferedHttpResponse) -> RusotoError<UpdateClusterConfigError> {
3359        if let Some(err) = proto::json::Error::parse_rest(&res) {
3360            match err.typ.as_str() {
3361                "ClientException" => {
3362                    return RusotoError::Service(UpdateClusterConfigError::Client(err.msg))
3363                }
3364                "InvalidParameterException" => {
3365                    return RusotoError::Service(UpdateClusterConfigError::InvalidParameter(
3366                        err.msg,
3367                    ))
3368                }
3369                "InvalidRequestException" => {
3370                    return RusotoError::Service(UpdateClusterConfigError::InvalidRequest(err.msg))
3371                }
3372                "ResourceInUseException" => {
3373                    return RusotoError::Service(UpdateClusterConfigError::ResourceInUse(err.msg))
3374                }
3375                "ResourceNotFoundException" => {
3376                    return RusotoError::Service(UpdateClusterConfigError::ResourceNotFound(
3377                        err.msg,
3378                    ))
3379                }
3380                "ServerException" => {
3381                    return RusotoError::Service(UpdateClusterConfigError::Server(err.msg))
3382                }
3383                "ValidationException" => return RusotoError::Validation(err.msg),
3384                _ => {}
3385            }
3386        }
3387        RusotoError::Unknown(res)
3388    }
3389}
3390impl fmt::Display for UpdateClusterConfigError {
3391    #[allow(unused_variables)]
3392    fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
3393        match *self {
3394            UpdateClusterConfigError::Client(ref cause) => write!(f, "{}", cause),
3395            UpdateClusterConfigError::InvalidParameter(ref cause) => write!(f, "{}", cause),
3396            UpdateClusterConfigError::InvalidRequest(ref cause) => write!(f, "{}", cause),
3397            UpdateClusterConfigError::ResourceInUse(ref cause) => write!(f, "{}", cause),
3398            UpdateClusterConfigError::ResourceNotFound(ref cause) => write!(f, "{}", cause),
3399            UpdateClusterConfigError::Server(ref cause) => write!(f, "{}", cause),
3400        }
3401    }
3402}
3403impl Error for UpdateClusterConfigError {}
3404/// Errors returned by UpdateClusterVersion
3405#[derive(Debug, PartialEq)]
3406pub enum UpdateClusterVersionError {
3407    /// <p>These errors are usually caused by a client action. Actions can include using an action or resource on behalf of a user that doesn't have permissions to use the action or resource or specifying an identifier that is not valid.</p>
3408    Client(String),
3409    /// <p>The specified parameter is invalid. Review the available parameters for the API request.</p>
3410    InvalidParameter(String),
3411    /// <p>The request is invalid given the state of the cluster. Check the state of the cluster and the associated operations.</p>
3412    InvalidRequest(String),
3413    /// <p>The specified resource is in use.</p>
3414    ResourceInUse(String),
3415    /// <p>The specified resource could not be found. You can view your available clusters with <a>ListClusters</a>. You can view your available managed node groups with <a>ListNodegroups</a>. Amazon EKS clusters and node groups are Region-specific.</p>
3416    ResourceNotFound(String),
3417    /// <p>These errors are usually caused by a server-side issue.</p>
3418    Server(String),
3419}
3420
3421impl UpdateClusterVersionError {
3422    pub fn from_response(res: BufferedHttpResponse) -> RusotoError<UpdateClusterVersionError> {
3423        if let Some(err) = proto::json::Error::parse_rest(&res) {
3424            match err.typ.as_str() {
3425                "ClientException" => {
3426                    return RusotoError::Service(UpdateClusterVersionError::Client(err.msg))
3427                }
3428                "InvalidParameterException" => {
3429                    return RusotoError::Service(UpdateClusterVersionError::InvalidParameter(
3430                        err.msg,
3431                    ))
3432                }
3433                "InvalidRequestException" => {
3434                    return RusotoError::Service(UpdateClusterVersionError::InvalidRequest(err.msg))
3435                }
3436                "ResourceInUseException" => {
3437                    return RusotoError::Service(UpdateClusterVersionError::ResourceInUse(err.msg))
3438                }
3439                "ResourceNotFoundException" => {
3440                    return RusotoError::Service(UpdateClusterVersionError::ResourceNotFound(
3441                        err.msg,
3442                    ))
3443                }
3444                "ServerException" => {
3445                    return RusotoError::Service(UpdateClusterVersionError::Server(err.msg))
3446                }
3447                "ValidationException" => return RusotoError::Validation(err.msg),
3448                _ => {}
3449            }
3450        }
3451        RusotoError::Unknown(res)
3452    }
3453}
3454impl fmt::Display for UpdateClusterVersionError {
3455    #[allow(unused_variables)]
3456    fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
3457        match *self {
3458            UpdateClusterVersionError::Client(ref cause) => write!(f, "{}", cause),
3459            UpdateClusterVersionError::InvalidParameter(ref cause) => write!(f, "{}", cause),
3460            UpdateClusterVersionError::InvalidRequest(ref cause) => write!(f, "{}", cause),
3461            UpdateClusterVersionError::ResourceInUse(ref cause) => write!(f, "{}", cause),
3462            UpdateClusterVersionError::ResourceNotFound(ref cause) => write!(f, "{}", cause),
3463            UpdateClusterVersionError::Server(ref cause) => write!(f, "{}", cause),
3464        }
3465    }
3466}
3467impl Error for UpdateClusterVersionError {}
3468/// Errors returned by UpdateNodegroupConfig
3469#[derive(Debug, PartialEq)]
3470pub enum UpdateNodegroupConfigError {
3471    /// <p>These errors are usually caused by a client action. Actions can include using an action or resource on behalf of a user that doesn't have permissions to use the action or resource or specifying an identifier that is not valid.</p>
3472    Client(String),
3473    /// <p>The specified parameter is invalid. Review the available parameters for the API request.</p>
3474    InvalidParameter(String),
3475    /// <p>The request is invalid given the state of the cluster. Check the state of the cluster and the associated operations.</p>
3476    InvalidRequest(String),
3477    /// <p>The specified resource is in use.</p>
3478    ResourceInUse(String),
3479    /// <p>The specified resource could not be found. You can view your available clusters with <a>ListClusters</a>. You can view your available managed node groups with <a>ListNodegroups</a>. Amazon EKS clusters and node groups are Region-specific.</p>
3480    ResourceNotFound(String),
3481    /// <p>These errors are usually caused by a server-side issue.</p>
3482    Server(String),
3483}
3484
3485impl UpdateNodegroupConfigError {
3486    pub fn from_response(res: BufferedHttpResponse) -> RusotoError<UpdateNodegroupConfigError> {
3487        if let Some(err) = proto::json::Error::parse_rest(&res) {
3488            match err.typ.as_str() {
3489                "ClientException" => {
3490                    return RusotoError::Service(UpdateNodegroupConfigError::Client(err.msg))
3491                }
3492                "InvalidParameterException" => {
3493                    return RusotoError::Service(UpdateNodegroupConfigError::InvalidParameter(
3494                        err.msg,
3495                    ))
3496                }
3497                "InvalidRequestException" => {
3498                    return RusotoError::Service(UpdateNodegroupConfigError::InvalidRequest(
3499                        err.msg,
3500                    ))
3501                }
3502                "ResourceInUseException" => {
3503                    return RusotoError::Service(UpdateNodegroupConfigError::ResourceInUse(err.msg))
3504                }
3505                "ResourceNotFoundException" => {
3506                    return RusotoError::Service(UpdateNodegroupConfigError::ResourceNotFound(
3507                        err.msg,
3508                    ))
3509                }
3510                "ServerException" => {
3511                    return RusotoError::Service(UpdateNodegroupConfigError::Server(err.msg))
3512                }
3513                "ValidationException" => return RusotoError::Validation(err.msg),
3514                _ => {}
3515            }
3516        }
3517        RusotoError::Unknown(res)
3518    }
3519}
3520impl fmt::Display for UpdateNodegroupConfigError {
3521    #[allow(unused_variables)]
3522    fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
3523        match *self {
3524            UpdateNodegroupConfigError::Client(ref cause) => write!(f, "{}", cause),
3525            UpdateNodegroupConfigError::InvalidParameter(ref cause) => write!(f, "{}", cause),
3526            UpdateNodegroupConfigError::InvalidRequest(ref cause) => write!(f, "{}", cause),
3527            UpdateNodegroupConfigError::ResourceInUse(ref cause) => write!(f, "{}", cause),
3528            UpdateNodegroupConfigError::ResourceNotFound(ref cause) => write!(f, "{}", cause),
3529            UpdateNodegroupConfigError::Server(ref cause) => write!(f, "{}", cause),
3530        }
3531    }
3532}
3533impl Error for UpdateNodegroupConfigError {}
3534/// Errors returned by UpdateNodegroupVersion
3535#[derive(Debug, PartialEq)]
3536pub enum UpdateNodegroupVersionError {
3537    /// <p>These errors are usually caused by a client action. Actions can include using an action or resource on behalf of a user that doesn't have permissions to use the action or resource or specifying an identifier that is not valid.</p>
3538    Client(String),
3539    /// <p>The specified parameter is invalid. Review the available parameters for the API request.</p>
3540    InvalidParameter(String),
3541    /// <p>The request is invalid given the state of the cluster. Check the state of the cluster and the associated operations.</p>
3542    InvalidRequest(String),
3543    /// <p>The specified resource is in use.</p>
3544    ResourceInUse(String),
3545    /// <p>The specified resource could not be found. You can view your available clusters with <a>ListClusters</a>. You can view your available managed node groups with <a>ListNodegroups</a>. Amazon EKS clusters and node groups are Region-specific.</p>
3546    ResourceNotFound(String),
3547    /// <p>These errors are usually caused by a server-side issue.</p>
3548    Server(String),
3549}
3550
3551impl UpdateNodegroupVersionError {
3552    pub fn from_response(res: BufferedHttpResponse) -> RusotoError<UpdateNodegroupVersionError> {
3553        if let Some(err) = proto::json::Error::parse_rest(&res) {
3554            match err.typ.as_str() {
3555                "ClientException" => {
3556                    return RusotoError::Service(UpdateNodegroupVersionError::Client(err.msg))
3557                }
3558                "InvalidParameterException" => {
3559                    return RusotoError::Service(UpdateNodegroupVersionError::InvalidParameter(
3560                        err.msg,
3561                    ))
3562                }
3563                "InvalidRequestException" => {
3564                    return RusotoError::Service(UpdateNodegroupVersionError::InvalidRequest(
3565                        err.msg,
3566                    ))
3567                }
3568                "ResourceInUseException" => {
3569                    return RusotoError::Service(UpdateNodegroupVersionError::ResourceInUse(
3570                        err.msg,
3571                    ))
3572                }
3573                "ResourceNotFoundException" => {
3574                    return RusotoError::Service(UpdateNodegroupVersionError::ResourceNotFound(
3575                        err.msg,
3576                    ))
3577                }
3578                "ServerException" => {
3579                    return RusotoError::Service(UpdateNodegroupVersionError::Server(err.msg))
3580                }
3581                "ValidationException" => return RusotoError::Validation(err.msg),
3582                _ => {}
3583            }
3584        }
3585        RusotoError::Unknown(res)
3586    }
3587}
3588impl fmt::Display for UpdateNodegroupVersionError {
3589    #[allow(unused_variables)]
3590    fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
3591        match *self {
3592            UpdateNodegroupVersionError::Client(ref cause) => write!(f, "{}", cause),
3593            UpdateNodegroupVersionError::InvalidParameter(ref cause) => write!(f, "{}", cause),
3594            UpdateNodegroupVersionError::InvalidRequest(ref cause) => write!(f, "{}", cause),
3595            UpdateNodegroupVersionError::ResourceInUse(ref cause) => write!(f, "{}", cause),
3596            UpdateNodegroupVersionError::ResourceNotFound(ref cause) => write!(f, "{}", cause),
3597            UpdateNodegroupVersionError::Server(ref cause) => write!(f, "{}", cause),
3598        }
3599    }
3600}
3601impl Error for UpdateNodegroupVersionError {}
3602/// Trait representing the capabilities of the Amazon EKS API. Amazon EKS clients implement this trait.
3603#[async_trait]
3604pub trait Eks {
3605    /// <p>Associate encryption configuration to an existing cluster.</p> <p>You can use this API to enable encryption on existing clusters which do not have encryption already enabled. This allows you to implement a defense-in-depth security strategy without migrating applications to new EKS clusters.</p>
3606    async fn associate_encryption_config(
3607        &self,
3608        input: AssociateEncryptionConfigRequest,
3609    ) -> Result<AssociateEncryptionConfigResponse, RusotoError<AssociateEncryptionConfigError>>;
3610
3611    /// <p>Associate an identity provider configuration to a cluster.</p> <p>If you want to authenticate identities using an identity provider, you can create an identity provider configuration and associate it to your cluster. After configuring authentication to your cluster you can create Kubernetes <code>roles</code> and <code>clusterroles</code> to assign permissions to the roles, and then bind the roles to the identities using Kubernetes <code>rolebindings</code> and <code>clusterrolebindings</code>. For more information see <a href="https://kubernetes.io/docs/reference/access-authn-authz/rbac/">Using RBAC Authorization</a> in the Kubernetes documentation.</p>
3612    async fn associate_identity_provider_config(
3613        &self,
3614        input: AssociateIdentityProviderConfigRequest,
3615    ) -> Result<
3616        AssociateIdentityProviderConfigResponse,
3617        RusotoError<AssociateIdentityProviderConfigError>,
3618    >;
3619
3620    /// <p>Creates an Amazon EKS add-on.</p> <p>Amazon EKS add-ons help to automate the provisioning and lifecycle management of common operational software for Amazon EKS clusters. Amazon EKS add-ons can only be used with Amazon EKS clusters running version 1.18 with platform version <code>eks.3</code> or later because add-ons rely on the Server-side Apply Kubernetes feature, which is only available in Kubernetes 1.18 and later.</p>
3621    async fn create_addon(
3622        &self,
3623        input: CreateAddonRequest,
3624    ) -> Result<CreateAddonResponse, RusotoError<CreateAddonError>>;
3625
3626    /// <p>Creates an Amazon EKS control plane. </p> <p>The Amazon EKS control plane consists of control plane instances that run the Kubernetes software, such as <code>etcd</code> and the API server. The control plane runs in an account managed by AWS, and the Kubernetes API is exposed via the Amazon EKS API server endpoint. Each Amazon EKS cluster control plane is single-tenant and unique and runs on its own set of Amazon EC2 instances.</p> <p>The cluster control plane is provisioned across multiple Availability Zones and fronted by an Elastic Load Balancing Network Load Balancer. Amazon EKS also provisions elastic network interfaces in your VPC subnets to provide connectivity from the control plane instances to the nodes (for example, to support <code>kubectl exec</code>, <code>logs</code>, and <code>proxy</code> data flows).</p> <p>Amazon EKS nodes run in your AWS account and connect to your cluster's control plane via the Kubernetes API server endpoint and a certificate file that is created for your cluster.</p> <p>Cluster creation typically takes several minutes. After you create an Amazon EKS cluster, you must configure your Kubernetes tooling to communicate with the API server and launch nodes into your cluster. For more information, see <a href="https://docs.aws.amazon.com/eks/latest/userguide/managing-auth.html">Managing Cluster Authentication</a> and <a href="https://docs.aws.amazon.com/eks/latest/userguide/launch-workers.html">Launching Amazon EKS nodes</a> in the <i>Amazon EKS User Guide</i>.</p>
3627    async fn create_cluster(
3628        &self,
3629        input: CreateClusterRequest,
3630    ) -> Result<CreateClusterResponse, RusotoError<CreateClusterError>>;
3631
3632    /// <p>Creates an AWS Fargate profile for your Amazon EKS cluster. You must have at least one Fargate profile in a cluster to be able to run pods on Fargate.</p> <p>The Fargate profile allows an administrator to declare which pods run on Fargate and specify which pods run on which Fargate profile. This declaration is done through the profile’s selectors. Each profile can have up to five selectors that contain a namespace and labels. A namespace is required for every selector. The label field consists of multiple optional key-value pairs. Pods that match the selectors are scheduled on Fargate. If a to-be-scheduled pod matches any of the selectors in the Fargate profile, then that pod is run on Fargate.</p> <p>When you create a Fargate profile, you must specify a pod execution role to use with the pods that are scheduled with the profile. This role is added to the cluster's Kubernetes <a href="https://kubernetes.io/docs/admin/authorization/rbac/">Role Based Access Control</a> (RBAC) for authorization so that the <code>kubelet</code> that is running on the Fargate infrastructure can register with your Amazon EKS cluster so that it can appear in your cluster as a node. The pod execution role also provides IAM permissions to the Fargate infrastructure to allow read access to Amazon ECR image repositories. For more information, see <a href="https://docs.aws.amazon.com/eks/latest/userguide/pod-execution-role.html">Pod Execution Role</a> in the <i>Amazon EKS User Guide</i>.</p> <p>Fargate profiles are immutable. However, you can create a new updated profile to replace an existing profile and then delete the original after the updated profile has finished creating.</p> <p>If any Fargate profiles in a cluster are in the <code>DELETING</code> status, you must wait for that Fargate profile to finish deleting before you can create any other profiles in that cluster.</p> <p>For more information, see <a href="https://docs.aws.amazon.com/eks/latest/userguide/fargate-profile.html">AWS Fargate Profile</a> in the <i>Amazon EKS User Guide</i>.</p>
3633    async fn create_fargate_profile(
3634        &self,
3635        input: CreateFargateProfileRequest,
3636    ) -> Result<CreateFargateProfileResponse, RusotoError<CreateFargateProfileError>>;
3637
3638    /// <p>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 <a href="https://docs.aws.amazon.com/eks/latest/userguide/launch-templates.html">Launch template support</a>.</p> <p>An Amazon EKS managed node group is an Amazon EC2 Auto Scaling group and associated Amazon EC2 instances that are managed by AWS for an Amazon EKS cluster. Each node group uses a version of the Amazon EKS optimized Amazon Linux 2 AMI. For more information, see <a href="https://docs.aws.amazon.com/eks/latest/userguide/managed-node-groups.html">Managed Node Groups</a> in the <i>Amazon EKS User Guide</i>. </p>
3639    async fn create_nodegroup(
3640        &self,
3641        input: CreateNodegroupRequest,
3642    ) -> Result<CreateNodegroupResponse, RusotoError<CreateNodegroupError>>;
3643
3644    /// <p>Delete an Amazon EKS add-on.</p> <p>When you remove the add-on, it will also be deleted from the cluster. You can always manually start an add-on on the cluster using the Kubernetes API.</p>
3645    async fn delete_addon(
3646        &self,
3647        input: DeleteAddonRequest,
3648    ) -> Result<DeleteAddonResponse, RusotoError<DeleteAddonError>>;
3649
3650    /// <p>Deletes the Amazon EKS cluster control plane.</p> <p>If you have active services in your cluster that are associated with a load balancer, you must delete those services before deleting the cluster so that the load balancers are deleted properly. Otherwise, you can have orphaned resources in your VPC that prevent you from being able to delete the VPC. For more information, see <a href="https://docs.aws.amazon.com/eks/latest/userguide/delete-cluster.html">Deleting a Cluster</a> in the <i>Amazon EKS User Guide</i>.</p> <p>If you have managed node groups or Fargate profiles attached to the cluster, you must delete them first. For more information, see <a>DeleteNodegroup</a> and <a>DeleteFargateProfile</a>.</p>
3651    async fn delete_cluster(
3652        &self,
3653        input: DeleteClusterRequest,
3654    ) -> Result<DeleteClusterResponse, RusotoError<DeleteClusterError>>;
3655
3656    /// <p>Deletes an AWS Fargate profile.</p> <p>When you delete a Fargate profile, any pods running on Fargate that were created with the profile are deleted. If those pods match another Fargate profile, then they are scheduled on Fargate with that profile. If they no longer match any Fargate profiles, then they are not scheduled on Fargate and they may remain in a pending state.</p> <p>Only one Fargate profile in a cluster can be in the <code>DELETING</code> status at a time. You must wait for a Fargate profile to finish deleting before you can delete any other profiles in that cluster.</p>
3657    async fn delete_fargate_profile(
3658        &self,
3659        input: DeleteFargateProfileRequest,
3660    ) -> Result<DeleteFargateProfileResponse, RusotoError<DeleteFargateProfileError>>;
3661
3662    /// <p>Deletes an Amazon EKS node group for a cluster.</p>
3663    async fn delete_nodegroup(
3664        &self,
3665        input: DeleteNodegroupRequest,
3666    ) -> Result<DeleteNodegroupResponse, RusotoError<DeleteNodegroupError>>;
3667
3668    /// <p>Describes an Amazon EKS add-on.</p>
3669    async fn describe_addon(
3670        &self,
3671        input: DescribeAddonRequest,
3672    ) -> Result<DescribeAddonResponse, RusotoError<DescribeAddonError>>;
3673
3674    /// <p>Describes the Kubernetes versions that the add-on can be used with.</p>
3675    async fn describe_addon_versions(
3676        &self,
3677        input: DescribeAddonVersionsRequest,
3678    ) -> Result<DescribeAddonVersionsResponse, RusotoError<DescribeAddonVersionsError>>;
3679
3680    /// <p><p>Returns descriptive information about an Amazon EKS cluster.</p> <p>The API server endpoint and certificate authority data returned by this operation are required for <code>kubelet</code> and <code>kubectl</code> to communicate with your Kubernetes API server. For more information, see <a href="https://docs.aws.amazon.com/eks/latest/userguide/create-kubeconfig.html">Create a kubeconfig for Amazon EKS</a>.</p> <note> <p>The API server endpoint and certificate authority data aren&#39;t available until the cluster reaches the <code>ACTIVE</code> state.</p> </note></p>
3681    async fn describe_cluster(
3682        &self,
3683        input: DescribeClusterRequest,
3684    ) -> Result<DescribeClusterResponse, RusotoError<DescribeClusterError>>;
3685
3686    /// <p>Returns descriptive information about an AWS Fargate profile.</p>
3687    async fn describe_fargate_profile(
3688        &self,
3689        input: DescribeFargateProfileRequest,
3690    ) -> Result<DescribeFargateProfileResponse, RusotoError<DescribeFargateProfileError>>;
3691
3692    /// <p>Returns descriptive information about an identity provider configuration.</p>
3693    async fn describe_identity_provider_config(
3694        &self,
3695        input: DescribeIdentityProviderConfigRequest,
3696    ) -> Result<
3697        DescribeIdentityProviderConfigResponse,
3698        RusotoError<DescribeIdentityProviderConfigError>,
3699    >;
3700
3701    /// <p>Returns descriptive information about an Amazon EKS node group.</p>
3702    async fn describe_nodegroup(
3703        &self,
3704        input: DescribeNodegroupRequest,
3705    ) -> Result<DescribeNodegroupResponse, RusotoError<DescribeNodegroupError>>;
3706
3707    /// <p>Returns descriptive information about an update against your Amazon EKS cluster or associated managed node group.</p> <p>When the status of the update is <code>Succeeded</code>, the update is complete. If an update fails, the status is <code>Failed</code>, and an error detail explains the reason for the failure.</p>
3708    async fn describe_update(
3709        &self,
3710        input: DescribeUpdateRequest,
3711    ) -> Result<DescribeUpdateResponse, RusotoError<DescribeUpdateError>>;
3712
3713    /// <p>Disassociates an identity provider configuration from a cluster. If you disassociate an identity provider from your cluster, users included in the provider can no longer access the cluster. However, you can still access the cluster with AWS IAM users.</p>
3714    async fn disassociate_identity_provider_config(
3715        &self,
3716        input: DisassociateIdentityProviderConfigRequest,
3717    ) -> Result<
3718        DisassociateIdentityProviderConfigResponse,
3719        RusotoError<DisassociateIdentityProviderConfigError>,
3720    >;
3721
3722    /// <p>Lists the available add-ons.</p>
3723    async fn list_addons(
3724        &self,
3725        input: ListAddonsRequest,
3726    ) -> Result<ListAddonsResponse, RusotoError<ListAddonsError>>;
3727
3728    /// <p>Lists the Amazon EKS clusters in your AWS account in the specified Region.</p>
3729    async fn list_clusters(
3730        &self,
3731        input: ListClustersRequest,
3732    ) -> Result<ListClustersResponse, RusotoError<ListClustersError>>;
3733
3734    /// <p>Lists the AWS Fargate profiles associated with the specified cluster in your AWS account in the specified Region.</p>
3735    async fn list_fargate_profiles(
3736        &self,
3737        input: ListFargateProfilesRequest,
3738    ) -> Result<ListFargateProfilesResponse, RusotoError<ListFargateProfilesError>>;
3739
3740    /// <p>A list of identity provider configurations.</p>
3741    async fn list_identity_provider_configs(
3742        &self,
3743        input: ListIdentityProviderConfigsRequest,
3744    ) -> Result<ListIdentityProviderConfigsResponse, RusotoError<ListIdentityProviderConfigsError>>;
3745
3746    /// <p>Lists the Amazon EKS managed node groups associated with the specified cluster in your AWS account in the specified Region. Self-managed node groups are not listed.</p>
3747    async fn list_nodegroups(
3748        &self,
3749        input: ListNodegroupsRequest,
3750    ) -> Result<ListNodegroupsResponse, RusotoError<ListNodegroupsError>>;
3751
3752    /// <p>List the tags for an Amazon EKS resource.</p>
3753    async fn list_tags_for_resource(
3754        &self,
3755        input: ListTagsForResourceRequest,
3756    ) -> Result<ListTagsForResourceResponse, RusotoError<ListTagsForResourceError>>;
3757
3758    /// <p>Lists the updates associated with an Amazon EKS cluster or managed node group in your AWS account, in the specified Region.</p>
3759    async fn list_updates(
3760        &self,
3761        input: ListUpdatesRequest,
3762    ) -> Result<ListUpdatesResponse, RusotoError<ListUpdatesError>>;
3763
3764    /// <p>Associates the specified tags to a resource with the specified <code>resourceArn</code>. If existing tags on a resource are not specified in the request parameters, they are not changed. When a resource is deleted, the tags associated with that resource are deleted as well. Tags that you create for Amazon EKS resources do not propagate to any other resources associated with the cluster. For example, if you tag a cluster with this operation, that tag does not automatically propagate to the subnets and nodes associated with the cluster.</p>
3765    async fn tag_resource(
3766        &self,
3767        input: TagResourceRequest,
3768    ) -> Result<TagResourceResponse, RusotoError<TagResourceError>>;
3769
3770    /// <p>Deletes specified tags from a resource.</p>
3771    async fn untag_resource(
3772        &self,
3773        input: UntagResourceRequest,
3774    ) -> Result<UntagResourceResponse, RusotoError<UntagResourceError>>;
3775
3776    /// <p>Updates an Amazon EKS add-on.</p>
3777    async fn update_addon(
3778        &self,
3779        input: UpdateAddonRequest,
3780    ) -> Result<UpdateAddonResponse, RusotoError<UpdateAddonError>>;
3781
3782    /// <p>Updates an Amazon EKS cluster configuration. Your cluster continues to function during the update. The response output includes an update ID that you can use to track the status of your cluster update with the <a>DescribeUpdate</a> API operation.</p> <p>You can use this API operation to enable or disable exporting the Kubernetes control plane logs for your cluster to CloudWatch Logs. By default, cluster control plane logs aren't exported to CloudWatch Logs. For more information, see <a href="https://docs.aws.amazon.com/eks/latest/userguide/control-plane-logs.html">Amazon EKS Cluster Control Plane Logs</a> in the <i> <i>Amazon EKS User Guide</i> </i>.</p> <note> <p>CloudWatch Logs ingestion, archive storage, and data scanning rates apply to exported control plane logs. For more information, see <a href="http://aws.amazon.com/cloudwatch/pricing/">Amazon CloudWatch Pricing</a>.</p> </note> <p>You can also use this API operation to enable or disable public and private access to your cluster's Kubernetes API server endpoint. By default, public access is enabled, and private access is disabled. For more information, see <a href="https://docs.aws.amazon.com/eks/latest/userguide/cluster-endpoint.html">Amazon EKS Cluster Endpoint Access Control</a> in the <i> <i>Amazon EKS User Guide</i> </i>. </p> <important> <p>You can't update the subnets or security group IDs for an existing cluster.</p> </important> <p>Cluster updates are asynchronous, and they should finish within a few minutes. During an update, the cluster status moves to <code>UPDATING</code> (this status transition is eventually consistent). When the update is complete (either <code>Failed</code> or <code>Successful</code>), the cluster status moves to <code>Active</code>.</p>
3783    async fn update_cluster_config(
3784        &self,
3785        input: UpdateClusterConfigRequest,
3786    ) -> Result<UpdateClusterConfigResponse, RusotoError<UpdateClusterConfigError>>;
3787
3788    /// <p>Updates an Amazon EKS cluster to the specified Kubernetes version. Your cluster continues to function during the update. The response output includes an update ID that you can use to track the status of your cluster update with the <a>DescribeUpdate</a> API operation.</p> <p>Cluster updates are asynchronous, and they should finish within a few minutes. During an update, the cluster status moves to <code>UPDATING</code> (this status transition is eventually consistent). When the update is complete (either <code>Failed</code> or <code>Successful</code>), the cluster status moves to <code>Active</code>.</p> <p>If your cluster has managed node groups attached to it, all of your node groups’ Kubernetes versions must match the cluster’s Kubernetes version in order to update the cluster to a new Kubernetes version.</p>
3789    async fn update_cluster_version(
3790        &self,
3791        input: UpdateClusterVersionRequest,
3792    ) -> Result<UpdateClusterVersionResponse, RusotoError<UpdateClusterVersionError>>;
3793
3794    /// <p>Updates an Amazon EKS managed node group configuration. Your node group continues to function during the update. The response output includes an update ID that you can use to track the status of your node group update with the <a>DescribeUpdate</a> API operation. Currently you can update the Kubernetes labels for a node group or the scaling configuration.</p>
3795    async fn update_nodegroup_config(
3796        &self,
3797        input: UpdateNodegroupConfigRequest,
3798    ) -> Result<UpdateNodegroupConfigResponse, RusotoError<UpdateNodegroupConfigError>>;
3799
3800    /// <p>Updates the Kubernetes version or AMI version of an Amazon EKS managed node group.</p> <p>You can update a node group using a launch template only if the node group was originally deployed with a launch template. If you need to update a custom AMI in a node group that was deployed with a launch template, then update your custom AMI, specify the new ID in a new version of the launch template, and then update the node group to the new version of the launch template.</p> <p>If you update without a launch template, then you can update to the latest available AMI version of a node group's current Kubernetes version by not specifying a Kubernetes version in the request. You can update to the latest AMI version of your cluster's current Kubernetes version by specifying your cluster's Kubernetes version in the request. For more information, see <a href="https://docs.aws.amazon.com/eks/latest/userguide/eks-linux-ami-versions.html">Amazon EKS optimized Amazon Linux 2 AMI versions</a> in the <i>Amazon EKS User Guide</i>.</p> <p>You cannot roll back a node group to an earlier Kubernetes version or AMI version.</p> <p>When a node in a managed node group is terminated due to a scaling action or update, the pods in that node are drained first. Amazon EKS attempts to drain the nodes gracefully and will fail if it is unable to do so. You can <code>force</code> the update if Amazon EKS is unable to drain the nodes as a result of a pod disruption budget issue.</p>
3801    async fn update_nodegroup_version(
3802        &self,
3803        input: UpdateNodegroupVersionRequest,
3804    ) -> Result<UpdateNodegroupVersionResponse, RusotoError<UpdateNodegroupVersionError>>;
3805}
3806/// A client for the Amazon EKS API.
3807#[derive(Clone)]
3808pub struct EksClient {
3809    client: Client,
3810    region: region::Region,
3811}
3812
3813impl EksClient {
3814    /// Creates a client backed by the default tokio event loop.
3815    ///
3816    /// The client will use the default credentials provider and tls client.
3817    pub fn new(region: region::Region) -> EksClient {
3818        EksClient {
3819            client: Client::shared(),
3820            region,
3821        }
3822    }
3823
3824    pub fn new_with<P, D>(
3825        request_dispatcher: D,
3826        credentials_provider: P,
3827        region: region::Region,
3828    ) -> EksClient
3829    where
3830        P: ProvideAwsCredentials + Send + Sync + 'static,
3831        D: DispatchSignedRequest + Send + Sync + 'static,
3832    {
3833        EksClient {
3834            client: Client::new_with(credentials_provider, request_dispatcher),
3835            region,
3836        }
3837    }
3838
3839    pub fn new_with_client(client: Client, region: region::Region) -> EksClient {
3840        EksClient { client, region }
3841    }
3842}
3843
3844#[async_trait]
3845impl Eks for EksClient {
3846    /// <p>Associate encryption configuration to an existing cluster.</p> <p>You can use this API to enable encryption on existing clusters which do not have encryption already enabled. This allows you to implement a defense-in-depth security strategy without migrating applications to new EKS clusters.</p>
3847    #[allow(unused_mut)]
3848    async fn associate_encryption_config(
3849        &self,
3850        input: AssociateEncryptionConfigRequest,
3851    ) -> Result<AssociateEncryptionConfigResponse, RusotoError<AssociateEncryptionConfigError>>
3852    {
3853        let request_uri = format!(
3854            "/clusters/{name}/encryption-config/associate",
3855            name = input.cluster_name
3856        );
3857
3858        let mut request = SignedRequest::new("POST", "eks", &self.region, &request_uri);
3859        request.set_content_type("application/x-amz-json-1.1".to_owned());
3860
3861        let encoded = Some(serde_json::to_vec(&input).unwrap());
3862        request.set_payload(encoded);
3863
3864        let mut response = self
3865            .client
3866            .sign_and_dispatch(request)
3867            .await
3868            .map_err(RusotoError::from)?;
3869        if response.status.is_success() {
3870            let mut response = response.buffer().await.map_err(RusotoError::HttpDispatch)?;
3871            let result = proto::json::ResponsePayload::new(&response)
3872                .deserialize::<AssociateEncryptionConfigResponse, _>()?;
3873
3874            Ok(result)
3875        } else {
3876            let response = response.buffer().await.map_err(RusotoError::HttpDispatch)?;
3877            Err(AssociateEncryptionConfigError::from_response(response))
3878        }
3879    }
3880
3881    /// <p>Associate an identity provider configuration to a cluster.</p> <p>If you want to authenticate identities using an identity provider, you can create an identity provider configuration and associate it to your cluster. After configuring authentication to your cluster you can create Kubernetes <code>roles</code> and <code>clusterroles</code> to assign permissions to the roles, and then bind the roles to the identities using Kubernetes <code>rolebindings</code> and <code>clusterrolebindings</code>. For more information see <a href="https://kubernetes.io/docs/reference/access-authn-authz/rbac/">Using RBAC Authorization</a> in the Kubernetes documentation.</p>
3882    #[allow(unused_mut)]
3883    async fn associate_identity_provider_config(
3884        &self,
3885        input: AssociateIdentityProviderConfigRequest,
3886    ) -> Result<
3887        AssociateIdentityProviderConfigResponse,
3888        RusotoError<AssociateIdentityProviderConfigError>,
3889    > {
3890        let request_uri = format!(
3891            "/clusters/{name}/identity-provider-configs/associate",
3892            name = input.cluster_name
3893        );
3894
3895        let mut request = SignedRequest::new("POST", "eks", &self.region, &request_uri);
3896        request.set_content_type("application/x-amz-json-1.1".to_owned());
3897
3898        let encoded = Some(serde_json::to_vec(&input).unwrap());
3899        request.set_payload(encoded);
3900
3901        let mut response = self
3902            .client
3903            .sign_and_dispatch(request)
3904            .await
3905            .map_err(RusotoError::from)?;
3906        if response.status.is_success() {
3907            let mut response = response.buffer().await.map_err(RusotoError::HttpDispatch)?;
3908            let result = proto::json::ResponsePayload::new(&response)
3909                .deserialize::<AssociateIdentityProviderConfigResponse, _>()?;
3910
3911            Ok(result)
3912        } else {
3913            let response = response.buffer().await.map_err(RusotoError::HttpDispatch)?;
3914            Err(AssociateIdentityProviderConfigError::from_response(
3915                response,
3916            ))
3917        }
3918    }
3919
3920    /// <p>Creates an Amazon EKS add-on.</p> <p>Amazon EKS add-ons help to automate the provisioning and lifecycle management of common operational software for Amazon EKS clusters. Amazon EKS add-ons can only be used with Amazon EKS clusters running version 1.18 with platform version <code>eks.3</code> or later because add-ons rely on the Server-side Apply Kubernetes feature, which is only available in Kubernetes 1.18 and later.</p>
3921    #[allow(unused_mut)]
3922    async fn create_addon(
3923        &self,
3924        input: CreateAddonRequest,
3925    ) -> Result<CreateAddonResponse, RusotoError<CreateAddonError>> {
3926        let request_uri = format!("/clusters/{name}/addons", name = input.cluster_name);
3927
3928        let mut request = SignedRequest::new("POST", "eks", &self.region, &request_uri);
3929        request.set_content_type("application/x-amz-json-1.1".to_owned());
3930
3931        let encoded = Some(serde_json::to_vec(&input).unwrap());
3932        request.set_payload(encoded);
3933
3934        let mut response = self
3935            .client
3936            .sign_and_dispatch(request)
3937            .await
3938            .map_err(RusotoError::from)?;
3939        if response.status.is_success() {
3940            let mut response = response.buffer().await.map_err(RusotoError::HttpDispatch)?;
3941            let result = proto::json::ResponsePayload::new(&response)
3942                .deserialize::<CreateAddonResponse, _>()?;
3943
3944            Ok(result)
3945        } else {
3946            let response = response.buffer().await.map_err(RusotoError::HttpDispatch)?;
3947            Err(CreateAddonError::from_response(response))
3948        }
3949    }
3950
3951    /// <p>Creates an Amazon EKS control plane. </p> <p>The Amazon EKS control plane consists of control plane instances that run the Kubernetes software, such as <code>etcd</code> and the API server. The control plane runs in an account managed by AWS, and the Kubernetes API is exposed via the Amazon EKS API server endpoint. Each Amazon EKS cluster control plane is single-tenant and unique and runs on its own set of Amazon EC2 instances.</p> <p>The cluster control plane is provisioned across multiple Availability Zones and fronted by an Elastic Load Balancing Network Load Balancer. Amazon EKS also provisions elastic network interfaces in your VPC subnets to provide connectivity from the control plane instances to the nodes (for example, to support <code>kubectl exec</code>, <code>logs</code>, and <code>proxy</code> data flows).</p> <p>Amazon EKS nodes run in your AWS account and connect to your cluster's control plane via the Kubernetes API server endpoint and a certificate file that is created for your cluster.</p> <p>Cluster creation typically takes several minutes. After you create an Amazon EKS cluster, you must configure your Kubernetes tooling to communicate with the API server and launch nodes into your cluster. For more information, see <a href="https://docs.aws.amazon.com/eks/latest/userguide/managing-auth.html">Managing Cluster Authentication</a> and <a href="https://docs.aws.amazon.com/eks/latest/userguide/launch-workers.html">Launching Amazon EKS nodes</a> in the <i>Amazon EKS User Guide</i>.</p>
3952    #[allow(unused_mut)]
3953    async fn create_cluster(
3954        &self,
3955        input: CreateClusterRequest,
3956    ) -> Result<CreateClusterResponse, RusotoError<CreateClusterError>> {
3957        let request_uri = "/clusters";
3958
3959        let mut request = SignedRequest::new("POST", "eks", &self.region, &request_uri);
3960        request.set_content_type("application/x-amz-json-1.1".to_owned());
3961
3962        let encoded = Some(serde_json::to_vec(&input).unwrap());
3963        request.set_payload(encoded);
3964
3965        let mut response = self
3966            .client
3967            .sign_and_dispatch(request)
3968            .await
3969            .map_err(RusotoError::from)?;
3970        if response.status.is_success() {
3971            let mut response = response.buffer().await.map_err(RusotoError::HttpDispatch)?;
3972            let result = proto::json::ResponsePayload::new(&response)
3973                .deserialize::<CreateClusterResponse, _>()?;
3974
3975            Ok(result)
3976        } else {
3977            let response = response.buffer().await.map_err(RusotoError::HttpDispatch)?;
3978            Err(CreateClusterError::from_response(response))
3979        }
3980    }
3981
3982    /// <p>Creates an AWS Fargate profile for your Amazon EKS cluster. You must have at least one Fargate profile in a cluster to be able to run pods on Fargate.</p> <p>The Fargate profile allows an administrator to declare which pods run on Fargate and specify which pods run on which Fargate profile. This declaration is done through the profile’s selectors. Each profile can have up to five selectors that contain a namespace and labels. A namespace is required for every selector. The label field consists of multiple optional key-value pairs. Pods that match the selectors are scheduled on Fargate. If a to-be-scheduled pod matches any of the selectors in the Fargate profile, then that pod is run on Fargate.</p> <p>When you create a Fargate profile, you must specify a pod execution role to use with the pods that are scheduled with the profile. This role is added to the cluster's Kubernetes <a href="https://kubernetes.io/docs/admin/authorization/rbac/">Role Based Access Control</a> (RBAC) for authorization so that the <code>kubelet</code> that is running on the Fargate infrastructure can register with your Amazon EKS cluster so that it can appear in your cluster as a node. The pod execution role also provides IAM permissions to the Fargate infrastructure to allow read access to Amazon ECR image repositories. For more information, see <a href="https://docs.aws.amazon.com/eks/latest/userguide/pod-execution-role.html">Pod Execution Role</a> in the <i>Amazon EKS User Guide</i>.</p> <p>Fargate profiles are immutable. However, you can create a new updated profile to replace an existing profile and then delete the original after the updated profile has finished creating.</p> <p>If any Fargate profiles in a cluster are in the <code>DELETING</code> status, you must wait for that Fargate profile to finish deleting before you can create any other profiles in that cluster.</p> <p>For more information, see <a href="https://docs.aws.amazon.com/eks/latest/userguide/fargate-profile.html">AWS Fargate Profile</a> in the <i>Amazon EKS User Guide</i>.</p>
3983    #[allow(unused_mut)]
3984    async fn create_fargate_profile(
3985        &self,
3986        input: CreateFargateProfileRequest,
3987    ) -> Result<CreateFargateProfileResponse, RusotoError<CreateFargateProfileError>> {
3988        let request_uri = format!(
3989            "/clusters/{name}/fargate-profiles",
3990            name = input.cluster_name
3991        );
3992
3993        let mut request = SignedRequest::new("POST", "eks", &self.region, &request_uri);
3994        request.set_content_type("application/x-amz-json-1.1".to_owned());
3995
3996        let encoded = Some(serde_json::to_vec(&input).unwrap());
3997        request.set_payload(encoded);
3998
3999        let mut response = self
4000            .client
4001            .sign_and_dispatch(request)
4002            .await
4003            .map_err(RusotoError::from)?;
4004        if response.status.is_success() {
4005            let mut response = response.buffer().await.map_err(RusotoError::HttpDispatch)?;
4006            let result = proto::json::ResponsePayload::new(&response)
4007                .deserialize::<CreateFargateProfileResponse, _>()?;
4008
4009            Ok(result)
4010        } else {
4011            let response = response.buffer().await.map_err(RusotoError::HttpDispatch)?;
4012            Err(CreateFargateProfileError::from_response(response))
4013        }
4014    }
4015
4016    /// <p>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 <a href="https://docs.aws.amazon.com/eks/latest/userguide/launch-templates.html">Launch template support</a>.</p> <p>An Amazon EKS managed node group is an Amazon EC2 Auto Scaling group and associated Amazon EC2 instances that are managed by AWS for an Amazon EKS cluster. Each node group uses a version of the Amazon EKS optimized Amazon Linux 2 AMI. For more information, see <a href="https://docs.aws.amazon.com/eks/latest/userguide/managed-node-groups.html">Managed Node Groups</a> in the <i>Amazon EKS User Guide</i>. </p>
4017    #[allow(unused_mut)]
4018    async fn create_nodegroup(
4019        &self,
4020        input: CreateNodegroupRequest,
4021    ) -> Result<CreateNodegroupResponse, RusotoError<CreateNodegroupError>> {
4022        let request_uri = format!("/clusters/{name}/node-groups", name = input.cluster_name);
4023
4024        let mut request = SignedRequest::new("POST", "eks", &self.region, &request_uri);
4025        request.set_content_type("application/x-amz-json-1.1".to_owned());
4026
4027        let encoded = Some(serde_json::to_vec(&input).unwrap());
4028        request.set_payload(encoded);
4029
4030        let mut response = self
4031            .client
4032            .sign_and_dispatch(request)
4033            .await
4034            .map_err(RusotoError::from)?;
4035        if response.status.is_success() {
4036            let mut response = response.buffer().await.map_err(RusotoError::HttpDispatch)?;
4037            let result = proto::json::ResponsePayload::new(&response)
4038                .deserialize::<CreateNodegroupResponse, _>()?;
4039
4040            Ok(result)
4041        } else {
4042            let response = response.buffer().await.map_err(RusotoError::HttpDispatch)?;
4043            Err(CreateNodegroupError::from_response(response))
4044        }
4045    }
4046
4047    /// <p>Delete an Amazon EKS add-on.</p> <p>When you remove the add-on, it will also be deleted from the cluster. You can always manually start an add-on on the cluster using the Kubernetes API.</p>
4048    #[allow(unused_mut)]
4049    async fn delete_addon(
4050        &self,
4051        input: DeleteAddonRequest,
4052    ) -> Result<DeleteAddonResponse, RusotoError<DeleteAddonError>> {
4053        let request_uri = format!(
4054            "/clusters/{name}/addons/{addon_name}",
4055            addon_name = input.addon_name,
4056            name = input.cluster_name
4057        );
4058
4059        let mut request = SignedRequest::new("DELETE", "eks", &self.region, &request_uri);
4060        request.set_content_type("application/x-amz-json-1.1".to_owned());
4061
4062        let mut response = self
4063            .client
4064            .sign_and_dispatch(request)
4065            .await
4066            .map_err(RusotoError::from)?;
4067        if response.status.is_success() {
4068            let mut response = response.buffer().await.map_err(RusotoError::HttpDispatch)?;
4069            let result = proto::json::ResponsePayload::new(&response)
4070                .deserialize::<DeleteAddonResponse, _>()?;
4071
4072            Ok(result)
4073        } else {
4074            let response = response.buffer().await.map_err(RusotoError::HttpDispatch)?;
4075            Err(DeleteAddonError::from_response(response))
4076        }
4077    }
4078
4079    /// <p>Deletes the Amazon EKS cluster control plane.</p> <p>If you have active services in your cluster that are associated with a load balancer, you must delete those services before deleting the cluster so that the load balancers are deleted properly. Otherwise, you can have orphaned resources in your VPC that prevent you from being able to delete the VPC. For more information, see <a href="https://docs.aws.amazon.com/eks/latest/userguide/delete-cluster.html">Deleting a Cluster</a> in the <i>Amazon EKS User Guide</i>.</p> <p>If you have managed node groups or Fargate profiles attached to the cluster, you must delete them first. For more information, see <a>DeleteNodegroup</a> and <a>DeleteFargateProfile</a>.</p>
4080    #[allow(unused_mut)]
4081    async fn delete_cluster(
4082        &self,
4083        input: DeleteClusterRequest,
4084    ) -> Result<DeleteClusterResponse, RusotoError<DeleteClusterError>> {
4085        let request_uri = format!("/clusters/{name}", name = input.name);
4086
4087        let mut request = SignedRequest::new("DELETE", "eks", &self.region, &request_uri);
4088        request.set_content_type("application/x-amz-json-1.1".to_owned());
4089
4090        let mut response = self
4091            .client
4092            .sign_and_dispatch(request)
4093            .await
4094            .map_err(RusotoError::from)?;
4095        if response.status.is_success() {
4096            let mut response = response.buffer().await.map_err(RusotoError::HttpDispatch)?;
4097            let result = proto::json::ResponsePayload::new(&response)
4098                .deserialize::<DeleteClusterResponse, _>()?;
4099
4100            Ok(result)
4101        } else {
4102            let response = response.buffer().await.map_err(RusotoError::HttpDispatch)?;
4103            Err(DeleteClusterError::from_response(response))
4104        }
4105    }
4106
4107    /// <p>Deletes an AWS Fargate profile.</p> <p>When you delete a Fargate profile, any pods running on Fargate that were created with the profile are deleted. If those pods match another Fargate profile, then they are scheduled on Fargate with that profile. If they no longer match any Fargate profiles, then they are not scheduled on Fargate and they may remain in a pending state.</p> <p>Only one Fargate profile in a cluster can be in the <code>DELETING</code> status at a time. You must wait for a Fargate profile to finish deleting before you can delete any other profiles in that cluster.</p>
4108    #[allow(unused_mut)]
4109    async fn delete_fargate_profile(
4110        &self,
4111        input: DeleteFargateProfileRequest,
4112    ) -> Result<DeleteFargateProfileResponse, RusotoError<DeleteFargateProfileError>> {
4113        let request_uri = format!(
4114            "/clusters/{name}/fargate-profiles/{fargate_profile_name}",
4115            name = input.cluster_name,
4116            fargate_profile_name = input.fargate_profile_name
4117        );
4118
4119        let mut request = SignedRequest::new("DELETE", "eks", &self.region, &request_uri);
4120        request.set_content_type("application/x-amz-json-1.1".to_owned());
4121
4122        let mut response = self
4123            .client
4124            .sign_and_dispatch(request)
4125            .await
4126            .map_err(RusotoError::from)?;
4127        if response.status.is_success() {
4128            let mut response = response.buffer().await.map_err(RusotoError::HttpDispatch)?;
4129            let result = proto::json::ResponsePayload::new(&response)
4130                .deserialize::<DeleteFargateProfileResponse, _>()?;
4131
4132            Ok(result)
4133        } else {
4134            let response = response.buffer().await.map_err(RusotoError::HttpDispatch)?;
4135            Err(DeleteFargateProfileError::from_response(response))
4136        }
4137    }
4138
4139    /// <p>Deletes an Amazon EKS node group for a cluster.</p>
4140    #[allow(unused_mut)]
4141    async fn delete_nodegroup(
4142        &self,
4143        input: DeleteNodegroupRequest,
4144    ) -> Result<DeleteNodegroupResponse, RusotoError<DeleteNodegroupError>> {
4145        let request_uri = format!(
4146            "/clusters/{name}/node-groups/{nodegroup_name}",
4147            name = input.cluster_name,
4148            nodegroup_name = input.nodegroup_name
4149        );
4150
4151        let mut request = SignedRequest::new("DELETE", "eks", &self.region, &request_uri);
4152        request.set_content_type("application/x-amz-json-1.1".to_owned());
4153
4154        let mut response = self
4155            .client
4156            .sign_and_dispatch(request)
4157            .await
4158            .map_err(RusotoError::from)?;
4159        if response.status.is_success() {
4160            let mut response = response.buffer().await.map_err(RusotoError::HttpDispatch)?;
4161            let result = proto::json::ResponsePayload::new(&response)
4162                .deserialize::<DeleteNodegroupResponse, _>()?;
4163
4164            Ok(result)
4165        } else {
4166            let response = response.buffer().await.map_err(RusotoError::HttpDispatch)?;
4167            Err(DeleteNodegroupError::from_response(response))
4168        }
4169    }
4170
4171    /// <p>Describes an Amazon EKS add-on.</p>
4172    #[allow(unused_mut)]
4173    async fn describe_addon(
4174        &self,
4175        input: DescribeAddonRequest,
4176    ) -> Result<DescribeAddonResponse, RusotoError<DescribeAddonError>> {
4177        let request_uri = format!(
4178            "/clusters/{name}/addons/{addon_name}",
4179            addon_name = input.addon_name,
4180            name = input.cluster_name
4181        );
4182
4183        let mut request = SignedRequest::new("GET", "eks", &self.region, &request_uri);
4184        request.set_content_type("application/x-amz-json-1.1".to_owned());
4185
4186        let mut response = self
4187            .client
4188            .sign_and_dispatch(request)
4189            .await
4190            .map_err(RusotoError::from)?;
4191        if response.status.is_success() {
4192            let mut response = response.buffer().await.map_err(RusotoError::HttpDispatch)?;
4193            let result = proto::json::ResponsePayload::new(&response)
4194                .deserialize::<DescribeAddonResponse, _>()?;
4195
4196            Ok(result)
4197        } else {
4198            let response = response.buffer().await.map_err(RusotoError::HttpDispatch)?;
4199            Err(DescribeAddonError::from_response(response))
4200        }
4201    }
4202
4203    /// <p>Describes the Kubernetes versions that the add-on can be used with.</p>
4204    #[allow(unused_mut)]
4205    async fn describe_addon_versions(
4206        &self,
4207        input: DescribeAddonVersionsRequest,
4208    ) -> Result<DescribeAddonVersionsResponse, RusotoError<DescribeAddonVersionsError>> {
4209        let request_uri = "/addons/supported-versions";
4210
4211        let mut request = SignedRequest::new("GET", "eks", &self.region, &request_uri);
4212        request.set_content_type("application/x-amz-json-1.1".to_owned());
4213
4214        let mut params = Params::new();
4215        if let Some(ref x) = input.addon_name {
4216            params.put("addonName", x);
4217        }
4218        if let Some(ref x) = input.kubernetes_version {
4219            params.put("kubernetesVersion", x);
4220        }
4221        if let Some(ref x) = input.max_results {
4222            params.put("maxResults", x);
4223        }
4224        if let Some(ref x) = input.next_token {
4225            params.put("nextToken", x);
4226        }
4227        request.set_params(params);
4228
4229        let mut response = self
4230            .client
4231            .sign_and_dispatch(request)
4232            .await
4233            .map_err(RusotoError::from)?;
4234        if response.status.is_success() {
4235            let mut response = response.buffer().await.map_err(RusotoError::HttpDispatch)?;
4236            let result = proto::json::ResponsePayload::new(&response)
4237                .deserialize::<DescribeAddonVersionsResponse, _>()?;
4238
4239            Ok(result)
4240        } else {
4241            let response = response.buffer().await.map_err(RusotoError::HttpDispatch)?;
4242            Err(DescribeAddonVersionsError::from_response(response))
4243        }
4244    }
4245
4246    /// <p><p>Returns descriptive information about an Amazon EKS cluster.</p> <p>The API server endpoint and certificate authority data returned by this operation are required for <code>kubelet</code> and <code>kubectl</code> to communicate with your Kubernetes API server. For more information, see <a href="https://docs.aws.amazon.com/eks/latest/userguide/create-kubeconfig.html">Create a kubeconfig for Amazon EKS</a>.</p> <note> <p>The API server endpoint and certificate authority data aren&#39;t available until the cluster reaches the <code>ACTIVE</code> state.</p> </note></p>
4247    #[allow(unused_mut)]
4248    async fn describe_cluster(
4249        &self,
4250        input: DescribeClusterRequest,
4251    ) -> Result<DescribeClusterResponse, RusotoError<DescribeClusterError>> {
4252        let request_uri = format!("/clusters/{name}", name = input.name);
4253
4254        let mut request = SignedRequest::new("GET", "eks", &self.region, &request_uri);
4255        request.set_content_type("application/x-amz-json-1.1".to_owned());
4256
4257        let mut response = self
4258            .client
4259            .sign_and_dispatch(request)
4260            .await
4261            .map_err(RusotoError::from)?;
4262        if response.status.is_success() {
4263            let mut response = response.buffer().await.map_err(RusotoError::HttpDispatch)?;
4264            let result = proto::json::ResponsePayload::new(&response)
4265                .deserialize::<DescribeClusterResponse, _>()?;
4266
4267            Ok(result)
4268        } else {
4269            let response = response.buffer().await.map_err(RusotoError::HttpDispatch)?;
4270            Err(DescribeClusterError::from_response(response))
4271        }
4272    }
4273
4274    /// <p>Returns descriptive information about an AWS Fargate profile.</p>
4275    #[allow(unused_mut)]
4276    async fn describe_fargate_profile(
4277        &self,
4278        input: DescribeFargateProfileRequest,
4279    ) -> Result<DescribeFargateProfileResponse, RusotoError<DescribeFargateProfileError>> {
4280        let request_uri = format!(
4281            "/clusters/{name}/fargate-profiles/{fargate_profile_name}",
4282            name = input.cluster_name,
4283            fargate_profile_name = input.fargate_profile_name
4284        );
4285
4286        let mut request = SignedRequest::new("GET", "eks", &self.region, &request_uri);
4287        request.set_content_type("application/x-amz-json-1.1".to_owned());
4288
4289        let mut response = self
4290            .client
4291            .sign_and_dispatch(request)
4292            .await
4293            .map_err(RusotoError::from)?;
4294        if response.status.is_success() {
4295            let mut response = response.buffer().await.map_err(RusotoError::HttpDispatch)?;
4296            let result = proto::json::ResponsePayload::new(&response)
4297                .deserialize::<DescribeFargateProfileResponse, _>()?;
4298
4299            Ok(result)
4300        } else {
4301            let response = response.buffer().await.map_err(RusotoError::HttpDispatch)?;
4302            Err(DescribeFargateProfileError::from_response(response))
4303        }
4304    }
4305
4306    /// <p>Returns descriptive information about an identity provider configuration.</p>
4307    #[allow(unused_mut)]
4308    async fn describe_identity_provider_config(
4309        &self,
4310        input: DescribeIdentityProviderConfigRequest,
4311    ) -> Result<
4312        DescribeIdentityProviderConfigResponse,
4313        RusotoError<DescribeIdentityProviderConfigError>,
4314    > {
4315        let request_uri = format!(
4316            "/clusters/{name}/identity-provider-configs/describe",
4317            name = input.cluster_name
4318        );
4319
4320        let mut request = SignedRequest::new("POST", "eks", &self.region, &request_uri);
4321        request.set_content_type("application/x-amz-json-1.1".to_owned());
4322
4323        let encoded = Some(serde_json::to_vec(&input).unwrap());
4324        request.set_payload(encoded);
4325
4326        let mut response = self
4327            .client
4328            .sign_and_dispatch(request)
4329            .await
4330            .map_err(RusotoError::from)?;
4331        if response.status.is_success() {
4332            let mut response = response.buffer().await.map_err(RusotoError::HttpDispatch)?;
4333            let result = proto::json::ResponsePayload::new(&response)
4334                .deserialize::<DescribeIdentityProviderConfigResponse, _>()?;
4335
4336            Ok(result)
4337        } else {
4338            let response = response.buffer().await.map_err(RusotoError::HttpDispatch)?;
4339            Err(DescribeIdentityProviderConfigError::from_response(response))
4340        }
4341    }
4342
4343    /// <p>Returns descriptive information about an Amazon EKS node group.</p>
4344    #[allow(unused_mut)]
4345    async fn describe_nodegroup(
4346        &self,
4347        input: DescribeNodegroupRequest,
4348    ) -> Result<DescribeNodegroupResponse, RusotoError<DescribeNodegroupError>> {
4349        let request_uri = format!(
4350            "/clusters/{name}/node-groups/{nodegroup_name}",
4351            name = input.cluster_name,
4352            nodegroup_name = input.nodegroup_name
4353        );
4354
4355        let mut request = SignedRequest::new("GET", "eks", &self.region, &request_uri);
4356        request.set_content_type("application/x-amz-json-1.1".to_owned());
4357
4358        let mut response = self
4359            .client
4360            .sign_and_dispatch(request)
4361            .await
4362            .map_err(RusotoError::from)?;
4363        if response.status.is_success() {
4364            let mut response = response.buffer().await.map_err(RusotoError::HttpDispatch)?;
4365            let result = proto::json::ResponsePayload::new(&response)
4366                .deserialize::<DescribeNodegroupResponse, _>()?;
4367
4368            Ok(result)
4369        } else {
4370            let response = response.buffer().await.map_err(RusotoError::HttpDispatch)?;
4371            Err(DescribeNodegroupError::from_response(response))
4372        }
4373    }
4374
4375    /// <p>Returns descriptive information about an update against your Amazon EKS cluster or associated managed node group.</p> <p>When the status of the update is <code>Succeeded</code>, the update is complete. If an update fails, the status is <code>Failed</code>, and an error detail explains the reason for the failure.</p>
4376    #[allow(unused_mut)]
4377    async fn describe_update(
4378        &self,
4379        input: DescribeUpdateRequest,
4380    ) -> Result<DescribeUpdateResponse, RusotoError<DescribeUpdateError>> {
4381        let request_uri = format!(
4382            "/clusters/{name}/updates/{update_id}",
4383            name = input.name,
4384            update_id = input.update_id
4385        );
4386
4387        let mut request = SignedRequest::new("GET", "eks", &self.region, &request_uri);
4388        request.set_content_type("application/x-amz-json-1.1".to_owned());
4389
4390        let mut params = Params::new();
4391        if let Some(ref x) = input.addon_name {
4392            params.put("addonName", x);
4393        }
4394        if let Some(ref x) = input.nodegroup_name {
4395            params.put("nodegroupName", x);
4396        }
4397        request.set_params(params);
4398
4399        let mut response = self
4400            .client
4401            .sign_and_dispatch(request)
4402            .await
4403            .map_err(RusotoError::from)?;
4404        if response.status.is_success() {
4405            let mut response = response.buffer().await.map_err(RusotoError::HttpDispatch)?;
4406            let result = proto::json::ResponsePayload::new(&response)
4407                .deserialize::<DescribeUpdateResponse, _>()?;
4408
4409            Ok(result)
4410        } else {
4411            let response = response.buffer().await.map_err(RusotoError::HttpDispatch)?;
4412            Err(DescribeUpdateError::from_response(response))
4413        }
4414    }
4415
4416    /// <p>Disassociates an identity provider configuration from a cluster. If you disassociate an identity provider from your cluster, users included in the provider can no longer access the cluster. However, you can still access the cluster with AWS IAM users.</p>
4417    #[allow(unused_mut)]
4418    async fn disassociate_identity_provider_config(
4419        &self,
4420        input: DisassociateIdentityProviderConfigRequest,
4421    ) -> Result<
4422        DisassociateIdentityProviderConfigResponse,
4423        RusotoError<DisassociateIdentityProviderConfigError>,
4424    > {
4425        let request_uri = format!(
4426            "/clusters/{name}/identity-provider-configs/disassociate",
4427            name = input.cluster_name
4428        );
4429
4430        let mut request = SignedRequest::new("POST", "eks", &self.region, &request_uri);
4431        request.set_content_type("application/x-amz-json-1.1".to_owned());
4432
4433        let encoded = Some(serde_json::to_vec(&input).unwrap());
4434        request.set_payload(encoded);
4435
4436        let mut response = self
4437            .client
4438            .sign_and_dispatch(request)
4439            .await
4440            .map_err(RusotoError::from)?;
4441        if response.status.is_success() {
4442            let mut response = response.buffer().await.map_err(RusotoError::HttpDispatch)?;
4443            let result = proto::json::ResponsePayload::new(&response)
4444                .deserialize::<DisassociateIdentityProviderConfigResponse, _>()?;
4445
4446            Ok(result)
4447        } else {
4448            let response = response.buffer().await.map_err(RusotoError::HttpDispatch)?;
4449            Err(DisassociateIdentityProviderConfigError::from_response(
4450                response,
4451            ))
4452        }
4453    }
4454
4455    /// <p>Lists the available add-ons.</p>
4456    #[allow(unused_mut)]
4457    async fn list_addons(
4458        &self,
4459        input: ListAddonsRequest,
4460    ) -> Result<ListAddonsResponse, RusotoError<ListAddonsError>> {
4461        let request_uri = format!("/clusters/{name}/addons", name = input.cluster_name);
4462
4463        let mut request = SignedRequest::new("GET", "eks", &self.region, &request_uri);
4464        request.set_content_type("application/x-amz-json-1.1".to_owned());
4465
4466        let mut params = Params::new();
4467        if let Some(ref x) = input.max_results {
4468            params.put("maxResults", x);
4469        }
4470        if let Some(ref x) = input.next_token {
4471            params.put("nextToken", x);
4472        }
4473        request.set_params(params);
4474
4475        let mut response = self
4476            .client
4477            .sign_and_dispatch(request)
4478            .await
4479            .map_err(RusotoError::from)?;
4480        if response.status.is_success() {
4481            let mut response = response.buffer().await.map_err(RusotoError::HttpDispatch)?;
4482            let result = proto::json::ResponsePayload::new(&response)
4483                .deserialize::<ListAddonsResponse, _>()?;
4484
4485            Ok(result)
4486        } else {
4487            let response = response.buffer().await.map_err(RusotoError::HttpDispatch)?;
4488            Err(ListAddonsError::from_response(response))
4489        }
4490    }
4491
4492    /// <p>Lists the Amazon EKS clusters in your AWS account in the specified Region.</p>
4493    #[allow(unused_mut)]
4494    async fn list_clusters(
4495        &self,
4496        input: ListClustersRequest,
4497    ) -> Result<ListClustersResponse, RusotoError<ListClustersError>> {
4498        let request_uri = "/clusters";
4499
4500        let mut request = SignedRequest::new("GET", "eks", &self.region, &request_uri);
4501        request.set_content_type("application/x-amz-json-1.1".to_owned());
4502
4503        let mut params = Params::new();
4504        if let Some(ref x) = input.max_results {
4505            params.put("maxResults", x);
4506        }
4507        if let Some(ref x) = input.next_token {
4508            params.put("nextToken", x);
4509        }
4510        request.set_params(params);
4511
4512        let mut response = self
4513            .client
4514            .sign_and_dispatch(request)
4515            .await
4516            .map_err(RusotoError::from)?;
4517        if response.status.is_success() {
4518            let mut response = response.buffer().await.map_err(RusotoError::HttpDispatch)?;
4519            let result = proto::json::ResponsePayload::new(&response)
4520                .deserialize::<ListClustersResponse, _>()?;
4521
4522            Ok(result)
4523        } else {
4524            let response = response.buffer().await.map_err(RusotoError::HttpDispatch)?;
4525            Err(ListClustersError::from_response(response))
4526        }
4527    }
4528
4529    /// <p>Lists the AWS Fargate profiles associated with the specified cluster in your AWS account in the specified Region.</p>
4530    #[allow(unused_mut)]
4531    async fn list_fargate_profiles(
4532        &self,
4533        input: ListFargateProfilesRequest,
4534    ) -> Result<ListFargateProfilesResponse, RusotoError<ListFargateProfilesError>> {
4535        let request_uri = format!(
4536            "/clusters/{name}/fargate-profiles",
4537            name = input.cluster_name
4538        );
4539
4540        let mut request = SignedRequest::new("GET", "eks", &self.region, &request_uri);
4541        request.set_content_type("application/x-amz-json-1.1".to_owned());
4542
4543        let mut params = Params::new();
4544        if let Some(ref x) = input.max_results {
4545            params.put("maxResults", x);
4546        }
4547        if let Some(ref x) = input.next_token {
4548            params.put("nextToken", x);
4549        }
4550        request.set_params(params);
4551
4552        let mut response = self
4553            .client
4554            .sign_and_dispatch(request)
4555            .await
4556            .map_err(RusotoError::from)?;
4557        if response.status.is_success() {
4558            let mut response = response.buffer().await.map_err(RusotoError::HttpDispatch)?;
4559            let result = proto::json::ResponsePayload::new(&response)
4560                .deserialize::<ListFargateProfilesResponse, _>()?;
4561
4562            Ok(result)
4563        } else {
4564            let response = response.buffer().await.map_err(RusotoError::HttpDispatch)?;
4565            Err(ListFargateProfilesError::from_response(response))
4566        }
4567    }
4568
4569    /// <p>A list of identity provider configurations.</p>
4570    #[allow(unused_mut)]
4571    async fn list_identity_provider_configs(
4572        &self,
4573        input: ListIdentityProviderConfigsRequest,
4574    ) -> Result<ListIdentityProviderConfigsResponse, RusotoError<ListIdentityProviderConfigsError>>
4575    {
4576        let request_uri = format!(
4577            "/clusters/{name}/identity-provider-configs",
4578            name = input.cluster_name
4579        );
4580
4581        let mut request = SignedRequest::new("GET", "eks", &self.region, &request_uri);
4582        request.set_content_type("application/x-amz-json-1.1".to_owned());
4583
4584        let mut params = Params::new();
4585        if let Some(ref x) = input.max_results {
4586            params.put("maxResults", x);
4587        }
4588        if let Some(ref x) = input.next_token {
4589            params.put("nextToken", x);
4590        }
4591        request.set_params(params);
4592
4593        let mut response = self
4594            .client
4595            .sign_and_dispatch(request)
4596            .await
4597            .map_err(RusotoError::from)?;
4598        if response.status.is_success() {
4599            let mut response = response.buffer().await.map_err(RusotoError::HttpDispatch)?;
4600            let result = proto::json::ResponsePayload::new(&response)
4601                .deserialize::<ListIdentityProviderConfigsResponse, _>()?;
4602
4603            Ok(result)
4604        } else {
4605            let response = response.buffer().await.map_err(RusotoError::HttpDispatch)?;
4606            Err(ListIdentityProviderConfigsError::from_response(response))
4607        }
4608    }
4609
4610    /// <p>Lists the Amazon EKS managed node groups associated with the specified cluster in your AWS account in the specified Region. Self-managed node groups are not listed.</p>
4611    #[allow(unused_mut)]
4612    async fn list_nodegroups(
4613        &self,
4614        input: ListNodegroupsRequest,
4615    ) -> Result<ListNodegroupsResponse, RusotoError<ListNodegroupsError>> {
4616        let request_uri = format!("/clusters/{name}/node-groups", name = input.cluster_name);
4617
4618        let mut request = SignedRequest::new("GET", "eks", &self.region, &request_uri);
4619        request.set_content_type("application/x-amz-json-1.1".to_owned());
4620
4621        let mut params = Params::new();
4622        if let Some(ref x) = input.max_results {
4623            params.put("maxResults", x);
4624        }
4625        if let Some(ref x) = input.next_token {
4626            params.put("nextToken", x);
4627        }
4628        request.set_params(params);
4629
4630        let mut response = self
4631            .client
4632            .sign_and_dispatch(request)
4633            .await
4634            .map_err(RusotoError::from)?;
4635        if response.status.is_success() {
4636            let mut response = response.buffer().await.map_err(RusotoError::HttpDispatch)?;
4637            let result = proto::json::ResponsePayload::new(&response)
4638                .deserialize::<ListNodegroupsResponse, _>()?;
4639
4640            Ok(result)
4641        } else {
4642            let response = response.buffer().await.map_err(RusotoError::HttpDispatch)?;
4643            Err(ListNodegroupsError::from_response(response))
4644        }
4645    }
4646
4647    /// <p>List the tags for an Amazon EKS resource.</p>
4648    #[allow(unused_mut)]
4649    async fn list_tags_for_resource(
4650        &self,
4651        input: ListTagsForResourceRequest,
4652    ) -> Result<ListTagsForResourceResponse, RusotoError<ListTagsForResourceError>> {
4653        let request_uri = format!("/tags/{resource_arn}", resource_arn = input.resource_arn);
4654
4655        let mut request = SignedRequest::new("GET", "eks", &self.region, &request_uri);
4656        request.set_content_type("application/x-amz-json-1.1".to_owned());
4657
4658        let mut response = self
4659            .client
4660            .sign_and_dispatch(request)
4661            .await
4662            .map_err(RusotoError::from)?;
4663        if response.status.is_success() {
4664            let mut response = response.buffer().await.map_err(RusotoError::HttpDispatch)?;
4665            let result = proto::json::ResponsePayload::new(&response)
4666                .deserialize::<ListTagsForResourceResponse, _>()?;
4667
4668            Ok(result)
4669        } else {
4670            let response = response.buffer().await.map_err(RusotoError::HttpDispatch)?;
4671            Err(ListTagsForResourceError::from_response(response))
4672        }
4673    }
4674
4675    /// <p>Lists the updates associated with an Amazon EKS cluster or managed node group in your AWS account, in the specified Region.</p>
4676    #[allow(unused_mut)]
4677    async fn list_updates(
4678        &self,
4679        input: ListUpdatesRequest,
4680    ) -> Result<ListUpdatesResponse, RusotoError<ListUpdatesError>> {
4681        let request_uri = format!("/clusters/{name}/updates", name = input.name);
4682
4683        let mut request = SignedRequest::new("GET", "eks", &self.region, &request_uri);
4684        request.set_content_type("application/x-amz-json-1.1".to_owned());
4685
4686        let mut params = Params::new();
4687        if let Some(ref x) = input.addon_name {
4688            params.put("addonName", x);
4689        }
4690        if let Some(ref x) = input.max_results {
4691            params.put("maxResults", x);
4692        }
4693        if let Some(ref x) = input.next_token {
4694            params.put("nextToken", x);
4695        }
4696        if let Some(ref x) = input.nodegroup_name {
4697            params.put("nodegroupName", x);
4698        }
4699        request.set_params(params);
4700
4701        let mut response = self
4702            .client
4703            .sign_and_dispatch(request)
4704            .await
4705            .map_err(RusotoError::from)?;
4706        if response.status.is_success() {
4707            let mut response = response.buffer().await.map_err(RusotoError::HttpDispatch)?;
4708            let result = proto::json::ResponsePayload::new(&response)
4709                .deserialize::<ListUpdatesResponse, _>()?;
4710
4711            Ok(result)
4712        } else {
4713            let response = response.buffer().await.map_err(RusotoError::HttpDispatch)?;
4714            Err(ListUpdatesError::from_response(response))
4715        }
4716    }
4717
4718    /// <p>Associates the specified tags to a resource with the specified <code>resourceArn</code>. If existing tags on a resource are not specified in the request parameters, they are not changed. When a resource is deleted, the tags associated with that resource are deleted as well. Tags that you create for Amazon EKS resources do not propagate to any other resources associated with the cluster. For example, if you tag a cluster with this operation, that tag does not automatically propagate to the subnets and nodes associated with the cluster.</p>
4719    #[allow(unused_mut)]
4720    async fn tag_resource(
4721        &self,
4722        input: TagResourceRequest,
4723    ) -> Result<TagResourceResponse, RusotoError<TagResourceError>> {
4724        let request_uri = format!("/tags/{resource_arn}", resource_arn = input.resource_arn);
4725
4726        let mut request = SignedRequest::new("POST", "eks", &self.region, &request_uri);
4727        request.set_content_type("application/x-amz-json-1.1".to_owned());
4728
4729        let encoded = Some(serde_json::to_vec(&input).unwrap());
4730        request.set_payload(encoded);
4731
4732        let mut response = self
4733            .client
4734            .sign_and_dispatch(request)
4735            .await
4736            .map_err(RusotoError::from)?;
4737        if response.status.is_success() {
4738            let mut response = response.buffer().await.map_err(RusotoError::HttpDispatch)?;
4739            let result = proto::json::ResponsePayload::new(&response)
4740                .deserialize::<TagResourceResponse, _>()?;
4741
4742            Ok(result)
4743        } else {
4744            let response = response.buffer().await.map_err(RusotoError::HttpDispatch)?;
4745            Err(TagResourceError::from_response(response))
4746        }
4747    }
4748
4749    /// <p>Deletes specified tags from a resource.</p>
4750    #[allow(unused_mut)]
4751    async fn untag_resource(
4752        &self,
4753        input: UntagResourceRequest,
4754    ) -> Result<UntagResourceResponse, RusotoError<UntagResourceError>> {
4755        let request_uri = format!("/tags/{resource_arn}", resource_arn = input.resource_arn);
4756
4757        let mut request = SignedRequest::new("DELETE", "eks", &self.region, &request_uri);
4758        request.set_content_type("application/x-amz-json-1.1".to_owned());
4759
4760        let mut params = Params::new();
4761        for item in input.tag_keys.iter() {
4762            params.put("tagKeys", item);
4763        }
4764        request.set_params(params);
4765
4766        let mut response = self
4767            .client
4768            .sign_and_dispatch(request)
4769            .await
4770            .map_err(RusotoError::from)?;
4771        if response.status.is_success() {
4772            let mut response = response.buffer().await.map_err(RusotoError::HttpDispatch)?;
4773            let result = proto::json::ResponsePayload::new(&response)
4774                .deserialize::<UntagResourceResponse, _>()?;
4775
4776            Ok(result)
4777        } else {
4778            let response = response.buffer().await.map_err(RusotoError::HttpDispatch)?;
4779            Err(UntagResourceError::from_response(response))
4780        }
4781    }
4782
4783    /// <p>Updates an Amazon EKS add-on.</p>
4784    #[allow(unused_mut)]
4785    async fn update_addon(
4786        &self,
4787        input: UpdateAddonRequest,
4788    ) -> Result<UpdateAddonResponse, RusotoError<UpdateAddonError>> {
4789        let request_uri = format!(
4790            "/clusters/{name}/addons/{addon_name}/update",
4791            addon_name = input.addon_name,
4792            name = input.cluster_name
4793        );
4794
4795        let mut request = SignedRequest::new("POST", "eks", &self.region, &request_uri);
4796        request.set_content_type("application/x-amz-json-1.1".to_owned());
4797
4798        let encoded = Some(serde_json::to_vec(&input).unwrap());
4799        request.set_payload(encoded);
4800
4801        let mut response = self
4802            .client
4803            .sign_and_dispatch(request)
4804            .await
4805            .map_err(RusotoError::from)?;
4806        if response.status.is_success() {
4807            let mut response = response.buffer().await.map_err(RusotoError::HttpDispatch)?;
4808            let result = proto::json::ResponsePayload::new(&response)
4809                .deserialize::<UpdateAddonResponse, _>()?;
4810
4811            Ok(result)
4812        } else {
4813            let response = response.buffer().await.map_err(RusotoError::HttpDispatch)?;
4814            Err(UpdateAddonError::from_response(response))
4815        }
4816    }
4817
4818    /// <p>Updates an Amazon EKS cluster configuration. Your cluster continues to function during the update. The response output includes an update ID that you can use to track the status of your cluster update with the <a>DescribeUpdate</a> API operation.</p> <p>You can use this API operation to enable or disable exporting the Kubernetes control plane logs for your cluster to CloudWatch Logs. By default, cluster control plane logs aren't exported to CloudWatch Logs. For more information, see <a href="https://docs.aws.amazon.com/eks/latest/userguide/control-plane-logs.html">Amazon EKS Cluster Control Plane Logs</a> in the <i> <i>Amazon EKS User Guide</i> </i>.</p> <note> <p>CloudWatch Logs ingestion, archive storage, and data scanning rates apply to exported control plane logs. For more information, see <a href="http://aws.amazon.com/cloudwatch/pricing/">Amazon CloudWatch Pricing</a>.</p> </note> <p>You can also use this API operation to enable or disable public and private access to your cluster's Kubernetes API server endpoint. By default, public access is enabled, and private access is disabled. For more information, see <a href="https://docs.aws.amazon.com/eks/latest/userguide/cluster-endpoint.html">Amazon EKS Cluster Endpoint Access Control</a> in the <i> <i>Amazon EKS User Guide</i> </i>. </p> <important> <p>You can't update the subnets or security group IDs for an existing cluster.</p> </important> <p>Cluster updates are asynchronous, and they should finish within a few minutes. During an update, the cluster status moves to <code>UPDATING</code> (this status transition is eventually consistent). When the update is complete (either <code>Failed</code> or <code>Successful</code>), the cluster status moves to <code>Active</code>.</p>
4819    #[allow(unused_mut)]
4820    async fn update_cluster_config(
4821        &self,
4822        input: UpdateClusterConfigRequest,
4823    ) -> Result<UpdateClusterConfigResponse, RusotoError<UpdateClusterConfigError>> {
4824        let request_uri = format!("/clusters/{name}/update-config", name = input.name);
4825
4826        let mut request = SignedRequest::new("POST", "eks", &self.region, &request_uri);
4827        request.set_content_type("application/x-amz-json-1.1".to_owned());
4828
4829        let encoded = Some(serde_json::to_vec(&input).unwrap());
4830        request.set_payload(encoded);
4831
4832        let mut response = self
4833            .client
4834            .sign_and_dispatch(request)
4835            .await
4836            .map_err(RusotoError::from)?;
4837        if response.status.is_success() {
4838            let mut response = response.buffer().await.map_err(RusotoError::HttpDispatch)?;
4839            let result = proto::json::ResponsePayload::new(&response)
4840                .deserialize::<UpdateClusterConfigResponse, _>()?;
4841
4842            Ok(result)
4843        } else {
4844            let response = response.buffer().await.map_err(RusotoError::HttpDispatch)?;
4845            Err(UpdateClusterConfigError::from_response(response))
4846        }
4847    }
4848
4849    /// <p>Updates an Amazon EKS cluster to the specified Kubernetes version. Your cluster continues to function during the update. The response output includes an update ID that you can use to track the status of your cluster update with the <a>DescribeUpdate</a> API operation.</p> <p>Cluster updates are asynchronous, and they should finish within a few minutes. During an update, the cluster status moves to <code>UPDATING</code> (this status transition is eventually consistent). When the update is complete (either <code>Failed</code> or <code>Successful</code>), the cluster status moves to <code>Active</code>.</p> <p>If your cluster has managed node groups attached to it, all of your node groups’ Kubernetes versions must match the cluster’s Kubernetes version in order to update the cluster to a new Kubernetes version.</p>
4850    #[allow(unused_mut)]
4851    async fn update_cluster_version(
4852        &self,
4853        input: UpdateClusterVersionRequest,
4854    ) -> Result<UpdateClusterVersionResponse, RusotoError<UpdateClusterVersionError>> {
4855        let request_uri = format!("/clusters/{name}/updates", name = input.name);
4856
4857        let mut request = SignedRequest::new("POST", "eks", &self.region, &request_uri);
4858        request.set_content_type("application/x-amz-json-1.1".to_owned());
4859
4860        let encoded = Some(serde_json::to_vec(&input).unwrap());
4861        request.set_payload(encoded);
4862
4863        let mut response = self
4864            .client
4865            .sign_and_dispatch(request)
4866            .await
4867            .map_err(RusotoError::from)?;
4868        if response.status.is_success() {
4869            let mut response = response.buffer().await.map_err(RusotoError::HttpDispatch)?;
4870            let result = proto::json::ResponsePayload::new(&response)
4871                .deserialize::<UpdateClusterVersionResponse, _>()?;
4872
4873            Ok(result)
4874        } else {
4875            let response = response.buffer().await.map_err(RusotoError::HttpDispatch)?;
4876            Err(UpdateClusterVersionError::from_response(response))
4877        }
4878    }
4879
4880    /// <p>Updates an Amazon EKS managed node group configuration. Your node group continues to function during the update. The response output includes an update ID that you can use to track the status of your node group update with the <a>DescribeUpdate</a> API operation. Currently you can update the Kubernetes labels for a node group or the scaling configuration.</p>
4881    #[allow(unused_mut)]
4882    async fn update_nodegroup_config(
4883        &self,
4884        input: UpdateNodegroupConfigRequest,
4885    ) -> Result<UpdateNodegroupConfigResponse, RusotoError<UpdateNodegroupConfigError>> {
4886        let request_uri = format!(
4887            "/clusters/{name}/node-groups/{nodegroup_name}/update-config",
4888            name = input.cluster_name,
4889            nodegroup_name = input.nodegroup_name
4890        );
4891
4892        let mut request = SignedRequest::new("POST", "eks", &self.region, &request_uri);
4893        request.set_content_type("application/x-amz-json-1.1".to_owned());
4894
4895        let encoded = Some(serde_json::to_vec(&input).unwrap());
4896        request.set_payload(encoded);
4897
4898        let mut response = self
4899            .client
4900            .sign_and_dispatch(request)
4901            .await
4902            .map_err(RusotoError::from)?;
4903        if response.status.is_success() {
4904            let mut response = response.buffer().await.map_err(RusotoError::HttpDispatch)?;
4905            let result = proto::json::ResponsePayload::new(&response)
4906                .deserialize::<UpdateNodegroupConfigResponse, _>()?;
4907
4908            Ok(result)
4909        } else {
4910            let response = response.buffer().await.map_err(RusotoError::HttpDispatch)?;
4911            Err(UpdateNodegroupConfigError::from_response(response))
4912        }
4913    }
4914
4915    /// <p>Updates the Kubernetes version or AMI version of an Amazon EKS managed node group.</p> <p>You can update a node group using a launch template only if the node group was originally deployed with a launch template. If you need to update a custom AMI in a node group that was deployed with a launch template, then update your custom AMI, specify the new ID in a new version of the launch template, and then update the node group to the new version of the launch template.</p> <p>If you update without a launch template, then you can update to the latest available AMI version of a node group's current Kubernetes version by not specifying a Kubernetes version in the request. You can update to the latest AMI version of your cluster's current Kubernetes version by specifying your cluster's Kubernetes version in the request. For more information, see <a href="https://docs.aws.amazon.com/eks/latest/userguide/eks-linux-ami-versions.html">Amazon EKS optimized Amazon Linux 2 AMI versions</a> in the <i>Amazon EKS User Guide</i>.</p> <p>You cannot roll back a node group to an earlier Kubernetes version or AMI version.</p> <p>When a node in a managed node group is terminated due to a scaling action or update, the pods in that node are drained first. Amazon EKS attempts to drain the nodes gracefully and will fail if it is unable to do so. You can <code>force</code> the update if Amazon EKS is unable to drain the nodes as a result of a pod disruption budget issue.</p>
4916    #[allow(unused_mut)]
4917    async fn update_nodegroup_version(
4918        &self,
4919        input: UpdateNodegroupVersionRequest,
4920    ) -> Result<UpdateNodegroupVersionResponse, RusotoError<UpdateNodegroupVersionError>> {
4921        let request_uri = format!(
4922            "/clusters/{name}/node-groups/{nodegroup_name}/update-version",
4923            name = input.cluster_name,
4924            nodegroup_name = input.nodegroup_name
4925        );
4926
4927        let mut request = SignedRequest::new("POST", "eks", &self.region, &request_uri);
4928        request.set_content_type("application/x-amz-json-1.1".to_owned());
4929
4930        let encoded = Some(serde_json::to_vec(&input).unwrap());
4931        request.set_payload(encoded);
4932
4933        let mut response = self
4934            .client
4935            .sign_and_dispatch(request)
4936            .await
4937            .map_err(RusotoError::from)?;
4938        if response.status.is_success() {
4939            let mut response = response.buffer().await.map_err(RusotoError::HttpDispatch)?;
4940            let result = proto::json::ResponsePayload::new(&response)
4941                .deserialize::<UpdateNodegroupVersionResponse, _>()?;
4942
4943            Ok(result)
4944        } else {
4945            let response = response.buffer().await.map_err(RusotoError::HttpDispatch)?;
4946            Err(UpdateNodegroupVersionError::from_response(response))
4947        }
4948    }
4949}