Skip to main content

aws_sdk_redshift/operation/modify_cluster/
_modify_cluster_input.rs

1// Code generated by software.amazon.smithy.rust.codegen.smithy-rs. DO NOT EDIT.
2
3/// <p></p>
4#[non_exhaustive]
5#[derive(::std::clone::Clone, ::std::cmp::PartialEq)]
6pub struct ModifyClusterInput {
7    /// <p>The unique identifier of the cluster to be modified.</p>
8    /// <p>Example: <code>examplecluster</code></p>
9    pub cluster_identifier: ::std::option::Option<::std::string::String>,
10    /// <p>The new cluster type.</p>
11    /// <p>When you submit your cluster resize request, your existing cluster goes into a read-only mode. After Amazon Redshift provisions a new cluster based on your resize requirements, there will be outage for a period while the old cluster is deleted and your connection is switched to the new cluster. You can use <code>DescribeResize</code> to track the progress of the resize request.</p>
12    /// <p>Valid Values: <code> multi-node | single-node </code></p>
13    pub cluster_type: ::std::option::Option<::std::string::String>,
14    /// <p>The new node type of the cluster. If you specify a new node type, you must also specify the number of nodes parameter.</p>
15    /// <p>For more information about resizing clusters, go to <a href="https://docs.aws.amazon.com/redshift/latest/mgmt/rs-resize-tutorial.html">Resizing Clusters in Amazon Redshift</a> in the <i>Amazon Redshift Cluster Management Guide</i>.</p>
16    /// <p>Valid Values: <code>dc2.large</code> | <code>dc2.8xlarge</code> | <code>ra3.large</code> | <code>ra3.xlplus</code> | <code>ra3.4xlarge</code> | <code>ra3.16xlarge</code></p>
17    pub node_type: ::std::option::Option<::std::string::String>,
18    /// <p>The new number of nodes of the cluster. If you specify a new number of nodes, you must also specify the node type parameter.</p>
19    /// <p>For more information about resizing clusters, go to <a href="https://docs.aws.amazon.com/redshift/latest/mgmt/rs-resize-tutorial.html">Resizing Clusters in Amazon Redshift</a> in the <i>Amazon Redshift Cluster Management Guide</i>.</p>
20    /// <p>Valid Values: Integer greater than <code>0</code>.</p>
21    pub number_of_nodes: ::std::option::Option<i32>,
22    /// <p>A list of cluster security groups to be authorized on this cluster. This change is asynchronously applied as soon as possible.</p>
23    /// <p>Security groups currently associated with the cluster, and not in the list of groups to apply, will be revoked from the cluster.</p>
24    /// <p>Constraints:</p>
25    /// <ul>
26    /// <li>
27    /// <p>Must be 1 to 255 alphanumeric characters or hyphens</p></li>
28    /// <li>
29    /// <p>First character must be a letter</p></li>
30    /// <li>
31    /// <p>Cannot end with a hyphen or contain two consecutive hyphens</p></li>
32    /// </ul>
33    pub cluster_security_groups: ::std::option::Option<::std::vec::Vec<::std::string::String>>,
34    /// <p>A list of virtual private cloud (VPC) security groups to be associated with the cluster. This change is asynchronously applied as soon as possible.</p>
35    pub vpc_security_group_ids: ::std::option::Option<::std::vec::Vec<::std::string::String>>,
36    /// <p>The new password for the cluster admin user. This change is asynchronously applied as soon as possible. Between the time of the request and the completion of the request, the <code>MasterUserPassword</code> element exists in the <code>PendingModifiedValues</code> element of the operation response.</p>
37    /// <p>You can't use <code>MasterUserPassword</code> if <code>ManageMasterPassword</code> is <code>true</code>.</p><note>
38    /// <p>Operations never return the password, so this operation provides a way to regain access to the admin user account for a cluster if the password is lost.</p>
39    /// </note>
40    /// <p>Default: Uses existing setting.</p>
41    /// <p>Constraints:</p>
42    /// <ul>
43    /// <li>
44    /// <p>Must be between 8 and 64 characters in length.</p></li>
45    /// <li>
46    /// <p>Must contain at least one uppercase letter.</p></li>
47    /// <li>
48    /// <p>Must contain at least one lowercase letter.</p></li>
49    /// <li>
50    /// <p>Must contain one number.</p></li>
51    /// <li>
52    /// <p>Can be any printable ASCII character (ASCII code 33-126) except <code>'</code> (single quote), <code>"</code> (double quote), <code>\</code>, <code>/</code>, or <code>@</code>.</p></li>
53    /// </ul>
54    pub master_user_password: ::std::option::Option<::std::string::String>,
55    /// <p>The name of the cluster parameter group to apply to this cluster. This change is applied only after the cluster is rebooted. To reboot a cluster use <code>RebootCluster</code>.</p>
56    /// <p>Default: Uses existing setting.</p>
57    /// <p>Constraints: The cluster parameter group must be in the same parameter group family that matches the cluster version.</p>
58    pub cluster_parameter_group_name: ::std::option::Option<::std::string::String>,
59    /// <p>The number of days that automated snapshots are retained. If the value is 0, automated snapshots are disabled. Even if automated snapshots are disabled, you can still create manual snapshots when you want with <code>CreateClusterSnapshot</code>.</p>
60    /// <p>If you decrease the automated snapshot retention period from its current value, existing automated snapshots that fall outside of the new retention period will be immediately deleted.</p>
61    /// <p>You can't disable automated snapshots for RA3 node types. Set the automated retention period from 1-35 days.</p>
62    /// <p>Default: Uses existing setting.</p>
63    /// <p>Constraints: Must be a value from 0 to 35.</p>
64    pub automated_snapshot_retention_period: ::std::option::Option<i32>,
65    /// <p>The default for number of days that a newly created manual snapshot is retained. If the value is -1, the manual snapshot is retained indefinitely. This value doesn't retroactively change the retention periods of existing manual snapshots.</p>
66    /// <p>The value must be either -1 or an integer between 1 and 3,653.</p>
67    /// <p>The default value is -1.</p>
68    pub manual_snapshot_retention_period: ::std::option::Option<i32>,
69    /// <p>The weekly time range (in UTC) during which system maintenance can occur, if necessary. If system maintenance is necessary during the window, it may result in an outage.</p>
70    /// <p>This maintenance window change is made immediately. If the new maintenance window indicates the current time, there must be at least 120 minutes between the current time and end of the window in order to ensure that pending changes are applied.</p>
71    /// <p>Default: Uses existing setting.</p>
72    /// <p>Format: ddd:hh24:mi-ddd:hh24:mi, for example <code>wed:07:30-wed:08:00</code>.</p>
73    /// <p>Valid Days: Mon | Tue | Wed | Thu | Fri | Sat | Sun</p>
74    /// <p>Constraints: Must be at least 30 minutes.</p>
75    pub preferred_maintenance_window: ::std::option::Option<::std::string::String>,
76    /// <p>The new version number of the Amazon Redshift engine to upgrade to.</p>
77    /// <p>For major version upgrades, if a non-default cluster parameter group is currently in use, a new cluster parameter group in the cluster parameter group family for the new version must be specified. The new cluster parameter group can be the default for that cluster parameter group family. For more information about parameters and parameter groups, go to <a href="https://docs.aws.amazon.com/redshift/latest/mgmt/working-with-parameter-groups.html">Amazon Redshift Parameter Groups</a> in the <i>Amazon Redshift Cluster Management Guide</i>.</p>
78    /// <p>Example: <code>1.0</code></p>
79    pub cluster_version: ::std::option::Option<::std::string::String>,
80    /// <p>If <code>true</code>, major version upgrades will be applied automatically to the cluster during the maintenance window.</p>
81    /// <p>Default: <code>false</code></p>
82    pub allow_version_upgrade: ::std::option::Option<bool>,
83    /// <p>Specifies the name of the HSM client certificate the Amazon Redshift cluster uses to retrieve the data encryption keys stored in an HSM.</p>
84    pub hsm_client_certificate_identifier: ::std::option::Option<::std::string::String>,
85    /// <p>Specifies the name of the HSM configuration that contains the information the Amazon Redshift cluster can use to retrieve and store keys in an HSM.</p>
86    pub hsm_configuration_identifier: ::std::option::Option<::std::string::String>,
87    /// <p>The new identifier for the cluster.</p>
88    /// <p>Constraints:</p>
89    /// <ul>
90    /// <li>
91    /// <p>Must contain from 1 to 63 alphanumeric characters or hyphens.</p></li>
92    /// <li>
93    /// <p>Alphabetic characters must be lowercase.</p></li>
94    /// <li>
95    /// <p>First character must be a letter.</p></li>
96    /// <li>
97    /// <p>Cannot end with a hyphen or contain two consecutive hyphens.</p></li>
98    /// <li>
99    /// <p>Must be unique for all clusters within an Amazon Web Services account.</p></li>
100    /// </ul>
101    /// <p>Example: <code>examplecluster</code></p>
102    pub new_cluster_identifier: ::std::option::Option<::std::string::String>,
103    /// <p>If <code>true</code>, the cluster can be accessed from a public network. Only clusters in VPCs can be set to be publicly available.</p>
104    /// <p>Default: false</p>
105    pub publicly_accessible: ::std::option::Option<bool>,
106    /// <p>The Elastic IP (EIP) address for the cluster.</p>
107    /// <p>Constraints: The cluster must be provisioned in EC2-VPC and publicly-accessible through an Internet gateway. For more information about provisioning clusters in EC2-VPC, go to <a href="https://docs.aws.amazon.com/redshift/latest/mgmt/working-with-clusters.html#cluster-platforms">Supported Platforms to Launch Your Cluster</a> in the Amazon Redshift Cluster Management Guide.</p>
108    pub elastic_ip: ::std::option::Option<::std::string::String>,
109    /// <p>An option that specifies whether to create the cluster with enhanced VPC routing enabled. To create a cluster that uses enhanced VPC routing, the cluster must be in a VPC. For more information, see <a href="https://docs.aws.amazon.com/redshift/latest/mgmt/enhanced-vpc-routing.html">Enhanced VPC Routing</a> in the Amazon Redshift Cluster Management Guide.</p>
110    /// <p>If this option is <code>true</code>, enhanced VPC routing is enabled.</p>
111    /// <p>Default: false</p>
112    pub enhanced_vpc_routing: ::std::option::Option<bool>,
113    /// <p>The name for the maintenance track that you want to assign for the cluster. This name change is asynchronous. The new track name stays in the <code>PendingModifiedValues</code> for the cluster until the next maintenance window. When the maintenance track changes, the cluster is switched to the latest cluster release available for the maintenance track. At this point, the maintenance track name is applied.</p>
114    pub maintenance_track_name: ::std::option::Option<::std::string::String>,
115    /// <p>Indicates whether the cluster is encrypted. If the value is encrypted (true) and you provide a value for the <code>KmsKeyId</code> parameter, we encrypt the cluster with the provided <code>KmsKeyId</code>. If you don't provide a <code>KmsKeyId</code>, we encrypt with the default key.</p>
116    /// <p>If the value is not encrypted (false), then the cluster is decrypted.</p>
117    pub encrypted: ::std::option::Option<bool>,
118    /// <p>The Key Management Service (KMS) key ID of the encryption key that you want to use to encrypt data in the cluster.</p>
119    pub kms_key_id: ::std::option::Option<::std::string::String>,
120    /// <p>The option to enable relocation for an Amazon Redshift cluster between Availability Zones after the cluster modification is complete.</p>
121    pub availability_zone_relocation: ::std::option::Option<bool>,
122    /// <p>The option to initiate relocation for an Amazon Redshift cluster to the target Availability Zone.</p>
123    pub availability_zone: ::std::option::Option<::std::string::String>,
124    /// <p>The option to change the port of an Amazon Redshift cluster.</p>
125    /// <p>Valid Values:</p>
126    /// <ul>
127    /// <li>
128    /// <p>For clusters with ra3 nodes - Select a port within the ranges <code>5431-5455</code> or <code>8191-8215</code>. (If you have an existing cluster with ra3 nodes, it isn't required that you change the port to these ranges.)</p></li>
129    /// <li>
130    /// <p>For clusters with dc2 nodes - Select a port within the range <code>1150-65535</code>.</p></li>
131    /// </ul>
132    pub port: ::std::option::Option<i32>,
133    /// <p>If <code>true</code>, Amazon Redshift uses Secrets Manager to manage this cluster's admin credentials. You can't use <code>MasterUserPassword</code> if <code>ManageMasterPassword</code> is true. If <code>ManageMasterPassword</code> is false or not set, Amazon Redshift uses <code>MasterUserPassword</code> for the admin user account's password.</p>
134    pub manage_master_password: ::std::option::Option<bool>,
135    /// <p>The ID of the Key Management Service (KMS) key used to encrypt and store the cluster's admin credentials secret. You can only use this parameter if <code>ManageMasterPassword</code> is true.</p>
136    pub master_password_secret_kms_key_id: ::std::option::Option<::std::string::String>,
137    /// <p>The IP address types that the cluster supports. Possible values are <code>ipv4</code> and <code>dualstack</code>.</p>
138    pub ip_address_type: ::std::option::Option<::std::string::String>,
139    /// <p>If true and the cluster is currently only deployed in a single Availability Zone, the cluster will be modified to be deployed in two Availability Zones.</p>
140    pub multi_az: ::std::option::Option<bool>,
141    /// <p>If <code>true</code>, allocates additional compute resources for running automatic optimization operations.</p>
142    /// <p>Default: false</p>
143    pub extra_compute_for_automatic_optimization: ::std::option::Option<bool>,
144}
145impl ModifyClusterInput {
146    /// <p>The unique identifier of the cluster to be modified.</p>
147    /// <p>Example: <code>examplecluster</code></p>
148    pub fn cluster_identifier(&self) -> ::std::option::Option<&str> {
149        self.cluster_identifier.as_deref()
150    }
151    /// <p>The new cluster type.</p>
152    /// <p>When you submit your cluster resize request, your existing cluster goes into a read-only mode. After Amazon Redshift provisions a new cluster based on your resize requirements, there will be outage for a period while the old cluster is deleted and your connection is switched to the new cluster. You can use <code>DescribeResize</code> to track the progress of the resize request.</p>
153    /// <p>Valid Values: <code> multi-node | single-node </code></p>
154    pub fn cluster_type(&self) -> ::std::option::Option<&str> {
155        self.cluster_type.as_deref()
156    }
157    /// <p>The new node type of the cluster. If you specify a new node type, you must also specify the number of nodes parameter.</p>
158    /// <p>For more information about resizing clusters, go to <a href="https://docs.aws.amazon.com/redshift/latest/mgmt/rs-resize-tutorial.html">Resizing Clusters in Amazon Redshift</a> in the <i>Amazon Redshift Cluster Management Guide</i>.</p>
159    /// <p>Valid Values: <code>dc2.large</code> | <code>dc2.8xlarge</code> | <code>ra3.large</code> | <code>ra3.xlplus</code> | <code>ra3.4xlarge</code> | <code>ra3.16xlarge</code></p>
160    pub fn node_type(&self) -> ::std::option::Option<&str> {
161        self.node_type.as_deref()
162    }
163    /// <p>The new number of nodes of the cluster. If you specify a new number of nodes, you must also specify the node type parameter.</p>
164    /// <p>For more information about resizing clusters, go to <a href="https://docs.aws.amazon.com/redshift/latest/mgmt/rs-resize-tutorial.html">Resizing Clusters in Amazon Redshift</a> in the <i>Amazon Redshift Cluster Management Guide</i>.</p>
165    /// <p>Valid Values: Integer greater than <code>0</code>.</p>
166    pub fn number_of_nodes(&self) -> ::std::option::Option<i32> {
167        self.number_of_nodes
168    }
169    /// <p>A list of cluster security groups to be authorized on this cluster. This change is asynchronously applied as soon as possible.</p>
170    /// <p>Security groups currently associated with the cluster, and not in the list of groups to apply, will be revoked from the cluster.</p>
171    /// <p>Constraints:</p>
172    /// <ul>
173    /// <li>
174    /// <p>Must be 1 to 255 alphanumeric characters or hyphens</p></li>
175    /// <li>
176    /// <p>First character must be a letter</p></li>
177    /// <li>
178    /// <p>Cannot end with a hyphen or contain two consecutive hyphens</p></li>
179    /// </ul>
180    ///
181    /// If no value was sent for this field, a default will be set. If you want to determine if no value was sent, use `.cluster_security_groups.is_none()`.
182    pub fn cluster_security_groups(&self) -> &[::std::string::String] {
183        self.cluster_security_groups.as_deref().unwrap_or_default()
184    }
185    /// <p>A list of virtual private cloud (VPC) security groups to be associated with the cluster. This change is asynchronously applied as soon as possible.</p>
186    ///
187    /// If no value was sent for this field, a default will be set. If you want to determine if no value was sent, use `.vpc_security_group_ids.is_none()`.
188    pub fn vpc_security_group_ids(&self) -> &[::std::string::String] {
189        self.vpc_security_group_ids.as_deref().unwrap_or_default()
190    }
191    /// <p>The new password for the cluster admin user. This change is asynchronously applied as soon as possible. Between the time of the request and the completion of the request, the <code>MasterUserPassword</code> element exists in the <code>PendingModifiedValues</code> element of the operation response.</p>
192    /// <p>You can't use <code>MasterUserPassword</code> if <code>ManageMasterPassword</code> is <code>true</code>.</p><note>
193    /// <p>Operations never return the password, so this operation provides a way to regain access to the admin user account for a cluster if the password is lost.</p>
194    /// </note>
195    /// <p>Default: Uses existing setting.</p>
196    /// <p>Constraints:</p>
197    /// <ul>
198    /// <li>
199    /// <p>Must be between 8 and 64 characters in length.</p></li>
200    /// <li>
201    /// <p>Must contain at least one uppercase letter.</p></li>
202    /// <li>
203    /// <p>Must contain at least one lowercase letter.</p></li>
204    /// <li>
205    /// <p>Must contain one number.</p></li>
206    /// <li>
207    /// <p>Can be any printable ASCII character (ASCII code 33-126) except <code>'</code> (single quote), <code>"</code> (double quote), <code>\</code>, <code>/</code>, or <code>@</code>.</p></li>
208    /// </ul>
209    pub fn master_user_password(&self) -> ::std::option::Option<&str> {
210        self.master_user_password.as_deref()
211    }
212    /// <p>The name of the cluster parameter group to apply to this cluster. This change is applied only after the cluster is rebooted. To reboot a cluster use <code>RebootCluster</code>.</p>
213    /// <p>Default: Uses existing setting.</p>
214    /// <p>Constraints: The cluster parameter group must be in the same parameter group family that matches the cluster version.</p>
215    pub fn cluster_parameter_group_name(&self) -> ::std::option::Option<&str> {
216        self.cluster_parameter_group_name.as_deref()
217    }
218    /// <p>The number of days that automated snapshots are retained. If the value is 0, automated snapshots are disabled. Even if automated snapshots are disabled, you can still create manual snapshots when you want with <code>CreateClusterSnapshot</code>.</p>
219    /// <p>If you decrease the automated snapshot retention period from its current value, existing automated snapshots that fall outside of the new retention period will be immediately deleted.</p>
220    /// <p>You can't disable automated snapshots for RA3 node types. Set the automated retention period from 1-35 days.</p>
221    /// <p>Default: Uses existing setting.</p>
222    /// <p>Constraints: Must be a value from 0 to 35.</p>
223    pub fn automated_snapshot_retention_period(&self) -> ::std::option::Option<i32> {
224        self.automated_snapshot_retention_period
225    }
226    /// <p>The default for number of days that a newly created manual snapshot is retained. If the value is -1, the manual snapshot is retained indefinitely. This value doesn't retroactively change the retention periods of existing manual snapshots.</p>
227    /// <p>The value must be either -1 or an integer between 1 and 3,653.</p>
228    /// <p>The default value is -1.</p>
229    pub fn manual_snapshot_retention_period(&self) -> ::std::option::Option<i32> {
230        self.manual_snapshot_retention_period
231    }
232    /// <p>The weekly time range (in UTC) during which system maintenance can occur, if necessary. If system maintenance is necessary during the window, it may result in an outage.</p>
233    /// <p>This maintenance window change is made immediately. If the new maintenance window indicates the current time, there must be at least 120 minutes between the current time and end of the window in order to ensure that pending changes are applied.</p>
234    /// <p>Default: Uses existing setting.</p>
235    /// <p>Format: ddd:hh24:mi-ddd:hh24:mi, for example <code>wed:07:30-wed:08:00</code>.</p>
236    /// <p>Valid Days: Mon | Tue | Wed | Thu | Fri | Sat | Sun</p>
237    /// <p>Constraints: Must be at least 30 minutes.</p>
238    pub fn preferred_maintenance_window(&self) -> ::std::option::Option<&str> {
239        self.preferred_maintenance_window.as_deref()
240    }
241    /// <p>The new version number of the Amazon Redshift engine to upgrade to.</p>
242    /// <p>For major version upgrades, if a non-default cluster parameter group is currently in use, a new cluster parameter group in the cluster parameter group family for the new version must be specified. The new cluster parameter group can be the default for that cluster parameter group family. For more information about parameters and parameter groups, go to <a href="https://docs.aws.amazon.com/redshift/latest/mgmt/working-with-parameter-groups.html">Amazon Redshift Parameter Groups</a> in the <i>Amazon Redshift Cluster Management Guide</i>.</p>
243    /// <p>Example: <code>1.0</code></p>
244    pub fn cluster_version(&self) -> ::std::option::Option<&str> {
245        self.cluster_version.as_deref()
246    }
247    /// <p>If <code>true</code>, major version upgrades will be applied automatically to the cluster during the maintenance window.</p>
248    /// <p>Default: <code>false</code></p>
249    pub fn allow_version_upgrade(&self) -> ::std::option::Option<bool> {
250        self.allow_version_upgrade
251    }
252    /// <p>Specifies the name of the HSM client certificate the Amazon Redshift cluster uses to retrieve the data encryption keys stored in an HSM.</p>
253    pub fn hsm_client_certificate_identifier(&self) -> ::std::option::Option<&str> {
254        self.hsm_client_certificate_identifier.as_deref()
255    }
256    /// <p>Specifies the name of the HSM configuration that contains the information the Amazon Redshift cluster can use to retrieve and store keys in an HSM.</p>
257    pub fn hsm_configuration_identifier(&self) -> ::std::option::Option<&str> {
258        self.hsm_configuration_identifier.as_deref()
259    }
260    /// <p>The new identifier for the cluster.</p>
261    /// <p>Constraints:</p>
262    /// <ul>
263    /// <li>
264    /// <p>Must contain from 1 to 63 alphanumeric characters or hyphens.</p></li>
265    /// <li>
266    /// <p>Alphabetic characters must be lowercase.</p></li>
267    /// <li>
268    /// <p>First character must be a letter.</p></li>
269    /// <li>
270    /// <p>Cannot end with a hyphen or contain two consecutive hyphens.</p></li>
271    /// <li>
272    /// <p>Must be unique for all clusters within an Amazon Web Services account.</p></li>
273    /// </ul>
274    /// <p>Example: <code>examplecluster</code></p>
275    pub fn new_cluster_identifier(&self) -> ::std::option::Option<&str> {
276        self.new_cluster_identifier.as_deref()
277    }
278    /// <p>If <code>true</code>, the cluster can be accessed from a public network. Only clusters in VPCs can be set to be publicly available.</p>
279    /// <p>Default: false</p>
280    pub fn publicly_accessible(&self) -> ::std::option::Option<bool> {
281        self.publicly_accessible
282    }
283    /// <p>The Elastic IP (EIP) address for the cluster.</p>
284    /// <p>Constraints: The cluster must be provisioned in EC2-VPC and publicly-accessible through an Internet gateway. For more information about provisioning clusters in EC2-VPC, go to <a href="https://docs.aws.amazon.com/redshift/latest/mgmt/working-with-clusters.html#cluster-platforms">Supported Platforms to Launch Your Cluster</a> in the Amazon Redshift Cluster Management Guide.</p>
285    pub fn elastic_ip(&self) -> ::std::option::Option<&str> {
286        self.elastic_ip.as_deref()
287    }
288    /// <p>An option that specifies whether to create the cluster with enhanced VPC routing enabled. To create a cluster that uses enhanced VPC routing, the cluster must be in a VPC. For more information, see <a href="https://docs.aws.amazon.com/redshift/latest/mgmt/enhanced-vpc-routing.html">Enhanced VPC Routing</a> in the Amazon Redshift Cluster Management Guide.</p>
289    /// <p>If this option is <code>true</code>, enhanced VPC routing is enabled.</p>
290    /// <p>Default: false</p>
291    pub fn enhanced_vpc_routing(&self) -> ::std::option::Option<bool> {
292        self.enhanced_vpc_routing
293    }
294    /// <p>The name for the maintenance track that you want to assign for the cluster. This name change is asynchronous. The new track name stays in the <code>PendingModifiedValues</code> for the cluster until the next maintenance window. When the maintenance track changes, the cluster is switched to the latest cluster release available for the maintenance track. At this point, the maintenance track name is applied.</p>
295    pub fn maintenance_track_name(&self) -> ::std::option::Option<&str> {
296        self.maintenance_track_name.as_deref()
297    }
298    /// <p>Indicates whether the cluster is encrypted. If the value is encrypted (true) and you provide a value for the <code>KmsKeyId</code> parameter, we encrypt the cluster with the provided <code>KmsKeyId</code>. If you don't provide a <code>KmsKeyId</code>, we encrypt with the default key.</p>
299    /// <p>If the value is not encrypted (false), then the cluster is decrypted.</p>
300    pub fn encrypted(&self) -> ::std::option::Option<bool> {
301        self.encrypted
302    }
303    /// <p>The Key Management Service (KMS) key ID of the encryption key that you want to use to encrypt data in the cluster.</p>
304    pub fn kms_key_id(&self) -> ::std::option::Option<&str> {
305        self.kms_key_id.as_deref()
306    }
307    /// <p>The option to enable relocation for an Amazon Redshift cluster between Availability Zones after the cluster modification is complete.</p>
308    pub fn availability_zone_relocation(&self) -> ::std::option::Option<bool> {
309        self.availability_zone_relocation
310    }
311    /// <p>The option to initiate relocation for an Amazon Redshift cluster to the target Availability Zone.</p>
312    pub fn availability_zone(&self) -> ::std::option::Option<&str> {
313        self.availability_zone.as_deref()
314    }
315    /// <p>The option to change the port of an Amazon Redshift cluster.</p>
316    /// <p>Valid Values:</p>
317    /// <ul>
318    /// <li>
319    /// <p>For clusters with ra3 nodes - Select a port within the ranges <code>5431-5455</code> or <code>8191-8215</code>. (If you have an existing cluster with ra3 nodes, it isn't required that you change the port to these ranges.)</p></li>
320    /// <li>
321    /// <p>For clusters with dc2 nodes - Select a port within the range <code>1150-65535</code>.</p></li>
322    /// </ul>
323    pub fn port(&self) -> ::std::option::Option<i32> {
324        self.port
325    }
326    /// <p>If <code>true</code>, Amazon Redshift uses Secrets Manager to manage this cluster's admin credentials. You can't use <code>MasterUserPassword</code> if <code>ManageMasterPassword</code> is true. If <code>ManageMasterPassword</code> is false or not set, Amazon Redshift uses <code>MasterUserPassword</code> for the admin user account's password.</p>
327    pub fn manage_master_password(&self) -> ::std::option::Option<bool> {
328        self.manage_master_password
329    }
330    /// <p>The ID of the Key Management Service (KMS) key used to encrypt and store the cluster's admin credentials secret. You can only use this parameter if <code>ManageMasterPassword</code> is true.</p>
331    pub fn master_password_secret_kms_key_id(&self) -> ::std::option::Option<&str> {
332        self.master_password_secret_kms_key_id.as_deref()
333    }
334    /// <p>The IP address types that the cluster supports. Possible values are <code>ipv4</code> and <code>dualstack</code>.</p>
335    pub fn ip_address_type(&self) -> ::std::option::Option<&str> {
336        self.ip_address_type.as_deref()
337    }
338    /// <p>If true and the cluster is currently only deployed in a single Availability Zone, the cluster will be modified to be deployed in two Availability Zones.</p>
339    pub fn multi_az(&self) -> ::std::option::Option<bool> {
340        self.multi_az
341    }
342    /// <p>If <code>true</code>, allocates additional compute resources for running automatic optimization operations.</p>
343    /// <p>Default: false</p>
344    pub fn extra_compute_for_automatic_optimization(&self) -> ::std::option::Option<bool> {
345        self.extra_compute_for_automatic_optimization
346    }
347}
348impl ::std::fmt::Debug for ModifyClusterInput {
349    fn fmt(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
350        let mut formatter = f.debug_struct("ModifyClusterInput");
351        formatter.field("cluster_identifier", &self.cluster_identifier);
352        formatter.field("cluster_type", &self.cluster_type);
353        formatter.field("node_type", &self.node_type);
354        formatter.field("number_of_nodes", &self.number_of_nodes);
355        formatter.field("cluster_security_groups", &self.cluster_security_groups);
356        formatter.field("vpc_security_group_ids", &self.vpc_security_group_ids);
357        formatter.field("master_user_password", &"*** Sensitive Data Redacted ***");
358        formatter.field("cluster_parameter_group_name", &self.cluster_parameter_group_name);
359        formatter.field("automated_snapshot_retention_period", &self.automated_snapshot_retention_period);
360        formatter.field("manual_snapshot_retention_period", &self.manual_snapshot_retention_period);
361        formatter.field("preferred_maintenance_window", &self.preferred_maintenance_window);
362        formatter.field("cluster_version", &self.cluster_version);
363        formatter.field("allow_version_upgrade", &self.allow_version_upgrade);
364        formatter.field("hsm_client_certificate_identifier", &self.hsm_client_certificate_identifier);
365        formatter.field("hsm_configuration_identifier", &self.hsm_configuration_identifier);
366        formatter.field("new_cluster_identifier", &self.new_cluster_identifier);
367        formatter.field("publicly_accessible", &self.publicly_accessible);
368        formatter.field("elastic_ip", &self.elastic_ip);
369        formatter.field("enhanced_vpc_routing", &self.enhanced_vpc_routing);
370        formatter.field("maintenance_track_name", &self.maintenance_track_name);
371        formatter.field("encrypted", &self.encrypted);
372        formatter.field("kms_key_id", &self.kms_key_id);
373        formatter.field("availability_zone_relocation", &self.availability_zone_relocation);
374        formatter.field("availability_zone", &self.availability_zone);
375        formatter.field("port", &self.port);
376        formatter.field("manage_master_password", &self.manage_master_password);
377        formatter.field("master_password_secret_kms_key_id", &self.master_password_secret_kms_key_id);
378        formatter.field("ip_address_type", &self.ip_address_type);
379        formatter.field("multi_az", &self.multi_az);
380        formatter.field("extra_compute_for_automatic_optimization", &self.extra_compute_for_automatic_optimization);
381        formatter.finish()
382    }
383}
384impl ModifyClusterInput {
385    /// Creates a new builder-style object to manufacture [`ModifyClusterInput`](crate::operation::modify_cluster::ModifyClusterInput).
386    pub fn builder() -> crate::operation::modify_cluster::builders::ModifyClusterInputBuilder {
387        crate::operation::modify_cluster::builders::ModifyClusterInputBuilder::default()
388    }
389}
390
391/// A builder for [`ModifyClusterInput`](crate::operation::modify_cluster::ModifyClusterInput).
392#[derive(::std::clone::Clone, ::std::cmp::PartialEq, ::std::default::Default)]
393#[non_exhaustive]
394pub struct ModifyClusterInputBuilder {
395    pub(crate) cluster_identifier: ::std::option::Option<::std::string::String>,
396    pub(crate) cluster_type: ::std::option::Option<::std::string::String>,
397    pub(crate) node_type: ::std::option::Option<::std::string::String>,
398    pub(crate) number_of_nodes: ::std::option::Option<i32>,
399    pub(crate) cluster_security_groups: ::std::option::Option<::std::vec::Vec<::std::string::String>>,
400    pub(crate) vpc_security_group_ids: ::std::option::Option<::std::vec::Vec<::std::string::String>>,
401    pub(crate) master_user_password: ::std::option::Option<::std::string::String>,
402    pub(crate) cluster_parameter_group_name: ::std::option::Option<::std::string::String>,
403    pub(crate) automated_snapshot_retention_period: ::std::option::Option<i32>,
404    pub(crate) manual_snapshot_retention_period: ::std::option::Option<i32>,
405    pub(crate) preferred_maintenance_window: ::std::option::Option<::std::string::String>,
406    pub(crate) cluster_version: ::std::option::Option<::std::string::String>,
407    pub(crate) allow_version_upgrade: ::std::option::Option<bool>,
408    pub(crate) hsm_client_certificate_identifier: ::std::option::Option<::std::string::String>,
409    pub(crate) hsm_configuration_identifier: ::std::option::Option<::std::string::String>,
410    pub(crate) new_cluster_identifier: ::std::option::Option<::std::string::String>,
411    pub(crate) publicly_accessible: ::std::option::Option<bool>,
412    pub(crate) elastic_ip: ::std::option::Option<::std::string::String>,
413    pub(crate) enhanced_vpc_routing: ::std::option::Option<bool>,
414    pub(crate) maintenance_track_name: ::std::option::Option<::std::string::String>,
415    pub(crate) encrypted: ::std::option::Option<bool>,
416    pub(crate) kms_key_id: ::std::option::Option<::std::string::String>,
417    pub(crate) availability_zone_relocation: ::std::option::Option<bool>,
418    pub(crate) availability_zone: ::std::option::Option<::std::string::String>,
419    pub(crate) port: ::std::option::Option<i32>,
420    pub(crate) manage_master_password: ::std::option::Option<bool>,
421    pub(crate) master_password_secret_kms_key_id: ::std::option::Option<::std::string::String>,
422    pub(crate) ip_address_type: ::std::option::Option<::std::string::String>,
423    pub(crate) multi_az: ::std::option::Option<bool>,
424    pub(crate) extra_compute_for_automatic_optimization: ::std::option::Option<bool>,
425}
426impl ModifyClusterInputBuilder {
427    /// <p>The unique identifier of the cluster to be modified.</p>
428    /// <p>Example: <code>examplecluster</code></p>
429    /// This field is required.
430    pub fn cluster_identifier(mut self, input: impl ::std::convert::Into<::std::string::String>) -> Self {
431        self.cluster_identifier = ::std::option::Option::Some(input.into());
432        self
433    }
434    /// <p>The unique identifier of the cluster to be modified.</p>
435    /// <p>Example: <code>examplecluster</code></p>
436    pub fn set_cluster_identifier(mut self, input: ::std::option::Option<::std::string::String>) -> Self {
437        self.cluster_identifier = input;
438        self
439    }
440    /// <p>The unique identifier of the cluster to be modified.</p>
441    /// <p>Example: <code>examplecluster</code></p>
442    pub fn get_cluster_identifier(&self) -> &::std::option::Option<::std::string::String> {
443        &self.cluster_identifier
444    }
445    /// <p>The new cluster type.</p>
446    /// <p>When you submit your cluster resize request, your existing cluster goes into a read-only mode. After Amazon Redshift provisions a new cluster based on your resize requirements, there will be outage for a period while the old cluster is deleted and your connection is switched to the new cluster. You can use <code>DescribeResize</code> to track the progress of the resize request.</p>
447    /// <p>Valid Values: <code> multi-node | single-node </code></p>
448    pub fn cluster_type(mut self, input: impl ::std::convert::Into<::std::string::String>) -> Self {
449        self.cluster_type = ::std::option::Option::Some(input.into());
450        self
451    }
452    /// <p>The new cluster type.</p>
453    /// <p>When you submit your cluster resize request, your existing cluster goes into a read-only mode. After Amazon Redshift provisions a new cluster based on your resize requirements, there will be outage for a period while the old cluster is deleted and your connection is switched to the new cluster. You can use <code>DescribeResize</code> to track the progress of the resize request.</p>
454    /// <p>Valid Values: <code> multi-node | single-node </code></p>
455    pub fn set_cluster_type(mut self, input: ::std::option::Option<::std::string::String>) -> Self {
456        self.cluster_type = input;
457        self
458    }
459    /// <p>The new cluster type.</p>
460    /// <p>When you submit your cluster resize request, your existing cluster goes into a read-only mode. After Amazon Redshift provisions a new cluster based on your resize requirements, there will be outage for a period while the old cluster is deleted and your connection is switched to the new cluster. You can use <code>DescribeResize</code> to track the progress of the resize request.</p>
461    /// <p>Valid Values: <code> multi-node | single-node </code></p>
462    pub fn get_cluster_type(&self) -> &::std::option::Option<::std::string::String> {
463        &self.cluster_type
464    }
465    /// <p>The new node type of the cluster. If you specify a new node type, you must also specify the number of nodes parameter.</p>
466    /// <p>For more information about resizing clusters, go to <a href="https://docs.aws.amazon.com/redshift/latest/mgmt/rs-resize-tutorial.html">Resizing Clusters in Amazon Redshift</a> in the <i>Amazon Redshift Cluster Management Guide</i>.</p>
467    /// <p>Valid Values: <code>dc2.large</code> | <code>dc2.8xlarge</code> | <code>ra3.large</code> | <code>ra3.xlplus</code> | <code>ra3.4xlarge</code> | <code>ra3.16xlarge</code></p>
468    pub fn node_type(mut self, input: impl ::std::convert::Into<::std::string::String>) -> Self {
469        self.node_type = ::std::option::Option::Some(input.into());
470        self
471    }
472    /// <p>The new node type of the cluster. If you specify a new node type, you must also specify the number of nodes parameter.</p>
473    /// <p>For more information about resizing clusters, go to <a href="https://docs.aws.amazon.com/redshift/latest/mgmt/rs-resize-tutorial.html">Resizing Clusters in Amazon Redshift</a> in the <i>Amazon Redshift Cluster Management Guide</i>.</p>
474    /// <p>Valid Values: <code>dc2.large</code> | <code>dc2.8xlarge</code> | <code>ra3.large</code> | <code>ra3.xlplus</code> | <code>ra3.4xlarge</code> | <code>ra3.16xlarge</code></p>
475    pub fn set_node_type(mut self, input: ::std::option::Option<::std::string::String>) -> Self {
476        self.node_type = input;
477        self
478    }
479    /// <p>The new node type of the cluster. If you specify a new node type, you must also specify the number of nodes parameter.</p>
480    /// <p>For more information about resizing clusters, go to <a href="https://docs.aws.amazon.com/redshift/latest/mgmt/rs-resize-tutorial.html">Resizing Clusters in Amazon Redshift</a> in the <i>Amazon Redshift Cluster Management Guide</i>.</p>
481    /// <p>Valid Values: <code>dc2.large</code> | <code>dc2.8xlarge</code> | <code>ra3.large</code> | <code>ra3.xlplus</code> | <code>ra3.4xlarge</code> | <code>ra3.16xlarge</code></p>
482    pub fn get_node_type(&self) -> &::std::option::Option<::std::string::String> {
483        &self.node_type
484    }
485    /// <p>The new number of nodes of the cluster. If you specify a new number of nodes, you must also specify the node type parameter.</p>
486    /// <p>For more information about resizing clusters, go to <a href="https://docs.aws.amazon.com/redshift/latest/mgmt/rs-resize-tutorial.html">Resizing Clusters in Amazon Redshift</a> in the <i>Amazon Redshift Cluster Management Guide</i>.</p>
487    /// <p>Valid Values: Integer greater than <code>0</code>.</p>
488    pub fn number_of_nodes(mut self, input: i32) -> Self {
489        self.number_of_nodes = ::std::option::Option::Some(input);
490        self
491    }
492    /// <p>The new number of nodes of the cluster. If you specify a new number of nodes, you must also specify the node type parameter.</p>
493    /// <p>For more information about resizing clusters, go to <a href="https://docs.aws.amazon.com/redshift/latest/mgmt/rs-resize-tutorial.html">Resizing Clusters in Amazon Redshift</a> in the <i>Amazon Redshift Cluster Management Guide</i>.</p>
494    /// <p>Valid Values: Integer greater than <code>0</code>.</p>
495    pub fn set_number_of_nodes(mut self, input: ::std::option::Option<i32>) -> Self {
496        self.number_of_nodes = input;
497        self
498    }
499    /// <p>The new number of nodes of the cluster. If you specify a new number of nodes, you must also specify the node type parameter.</p>
500    /// <p>For more information about resizing clusters, go to <a href="https://docs.aws.amazon.com/redshift/latest/mgmt/rs-resize-tutorial.html">Resizing Clusters in Amazon Redshift</a> in the <i>Amazon Redshift Cluster Management Guide</i>.</p>
501    /// <p>Valid Values: Integer greater than <code>0</code>.</p>
502    pub fn get_number_of_nodes(&self) -> &::std::option::Option<i32> {
503        &self.number_of_nodes
504    }
505    /// Appends an item to `cluster_security_groups`.
506    ///
507    /// To override the contents of this collection use [`set_cluster_security_groups`](Self::set_cluster_security_groups).
508    ///
509    /// <p>A list of cluster security groups to be authorized on this cluster. This change is asynchronously applied as soon as possible.</p>
510    /// <p>Security groups currently associated with the cluster, and not in the list of groups to apply, will be revoked from the cluster.</p>
511    /// <p>Constraints:</p>
512    /// <ul>
513    /// <li>
514    /// <p>Must be 1 to 255 alphanumeric characters or hyphens</p></li>
515    /// <li>
516    /// <p>First character must be a letter</p></li>
517    /// <li>
518    /// <p>Cannot end with a hyphen or contain two consecutive hyphens</p></li>
519    /// </ul>
520    pub fn cluster_security_groups(mut self, input: impl ::std::convert::Into<::std::string::String>) -> Self {
521        let mut v = self.cluster_security_groups.unwrap_or_default();
522        v.push(input.into());
523        self.cluster_security_groups = ::std::option::Option::Some(v);
524        self
525    }
526    /// <p>A list of cluster security groups to be authorized on this cluster. This change is asynchronously applied as soon as possible.</p>
527    /// <p>Security groups currently associated with the cluster, and not in the list of groups to apply, will be revoked from the cluster.</p>
528    /// <p>Constraints:</p>
529    /// <ul>
530    /// <li>
531    /// <p>Must be 1 to 255 alphanumeric characters or hyphens</p></li>
532    /// <li>
533    /// <p>First character must be a letter</p></li>
534    /// <li>
535    /// <p>Cannot end with a hyphen or contain two consecutive hyphens</p></li>
536    /// </ul>
537    pub fn set_cluster_security_groups(mut self, input: ::std::option::Option<::std::vec::Vec<::std::string::String>>) -> Self {
538        self.cluster_security_groups = input;
539        self
540    }
541    /// <p>A list of cluster security groups to be authorized on this cluster. This change is asynchronously applied as soon as possible.</p>
542    /// <p>Security groups currently associated with the cluster, and not in the list of groups to apply, will be revoked from the cluster.</p>
543    /// <p>Constraints:</p>
544    /// <ul>
545    /// <li>
546    /// <p>Must be 1 to 255 alphanumeric characters or hyphens</p></li>
547    /// <li>
548    /// <p>First character must be a letter</p></li>
549    /// <li>
550    /// <p>Cannot end with a hyphen or contain two consecutive hyphens</p></li>
551    /// </ul>
552    pub fn get_cluster_security_groups(&self) -> &::std::option::Option<::std::vec::Vec<::std::string::String>> {
553        &self.cluster_security_groups
554    }
555    /// Appends an item to `vpc_security_group_ids`.
556    ///
557    /// To override the contents of this collection use [`set_vpc_security_group_ids`](Self::set_vpc_security_group_ids).
558    ///
559    /// <p>A list of virtual private cloud (VPC) security groups to be associated with the cluster. This change is asynchronously applied as soon as possible.</p>
560    pub fn vpc_security_group_ids(mut self, input: impl ::std::convert::Into<::std::string::String>) -> Self {
561        let mut v = self.vpc_security_group_ids.unwrap_or_default();
562        v.push(input.into());
563        self.vpc_security_group_ids = ::std::option::Option::Some(v);
564        self
565    }
566    /// <p>A list of virtual private cloud (VPC) security groups to be associated with the cluster. This change is asynchronously applied as soon as possible.</p>
567    pub fn set_vpc_security_group_ids(mut self, input: ::std::option::Option<::std::vec::Vec<::std::string::String>>) -> Self {
568        self.vpc_security_group_ids = input;
569        self
570    }
571    /// <p>A list of virtual private cloud (VPC) security groups to be associated with the cluster. This change is asynchronously applied as soon as possible.</p>
572    pub fn get_vpc_security_group_ids(&self) -> &::std::option::Option<::std::vec::Vec<::std::string::String>> {
573        &self.vpc_security_group_ids
574    }
575    /// <p>The new password for the cluster admin user. This change is asynchronously applied as soon as possible. Between the time of the request and the completion of the request, the <code>MasterUserPassword</code> element exists in the <code>PendingModifiedValues</code> element of the operation response.</p>
576    /// <p>You can't use <code>MasterUserPassword</code> if <code>ManageMasterPassword</code> is <code>true</code>.</p><note>
577    /// <p>Operations never return the password, so this operation provides a way to regain access to the admin user account for a cluster if the password is lost.</p>
578    /// </note>
579    /// <p>Default: Uses existing setting.</p>
580    /// <p>Constraints:</p>
581    /// <ul>
582    /// <li>
583    /// <p>Must be between 8 and 64 characters in length.</p></li>
584    /// <li>
585    /// <p>Must contain at least one uppercase letter.</p></li>
586    /// <li>
587    /// <p>Must contain at least one lowercase letter.</p></li>
588    /// <li>
589    /// <p>Must contain one number.</p></li>
590    /// <li>
591    /// <p>Can be any printable ASCII character (ASCII code 33-126) except <code>'</code> (single quote), <code>"</code> (double quote), <code>\</code>, <code>/</code>, or <code>@</code>.</p></li>
592    /// </ul>
593    pub fn master_user_password(mut self, input: impl ::std::convert::Into<::std::string::String>) -> Self {
594        self.master_user_password = ::std::option::Option::Some(input.into());
595        self
596    }
597    /// <p>The new password for the cluster admin user. This change is asynchronously applied as soon as possible. Between the time of the request and the completion of the request, the <code>MasterUserPassword</code> element exists in the <code>PendingModifiedValues</code> element of the operation response.</p>
598    /// <p>You can't use <code>MasterUserPassword</code> if <code>ManageMasterPassword</code> is <code>true</code>.</p><note>
599    /// <p>Operations never return the password, so this operation provides a way to regain access to the admin user account for a cluster if the password is lost.</p>
600    /// </note>
601    /// <p>Default: Uses existing setting.</p>
602    /// <p>Constraints:</p>
603    /// <ul>
604    /// <li>
605    /// <p>Must be between 8 and 64 characters in length.</p></li>
606    /// <li>
607    /// <p>Must contain at least one uppercase letter.</p></li>
608    /// <li>
609    /// <p>Must contain at least one lowercase letter.</p></li>
610    /// <li>
611    /// <p>Must contain one number.</p></li>
612    /// <li>
613    /// <p>Can be any printable ASCII character (ASCII code 33-126) except <code>'</code> (single quote), <code>"</code> (double quote), <code>\</code>, <code>/</code>, or <code>@</code>.</p></li>
614    /// </ul>
615    pub fn set_master_user_password(mut self, input: ::std::option::Option<::std::string::String>) -> Self {
616        self.master_user_password = input;
617        self
618    }
619    /// <p>The new password for the cluster admin user. This change is asynchronously applied as soon as possible. Between the time of the request and the completion of the request, the <code>MasterUserPassword</code> element exists in the <code>PendingModifiedValues</code> element of the operation response.</p>
620    /// <p>You can't use <code>MasterUserPassword</code> if <code>ManageMasterPassword</code> is <code>true</code>.</p><note>
621    /// <p>Operations never return the password, so this operation provides a way to regain access to the admin user account for a cluster if the password is lost.</p>
622    /// </note>
623    /// <p>Default: Uses existing setting.</p>
624    /// <p>Constraints:</p>
625    /// <ul>
626    /// <li>
627    /// <p>Must be between 8 and 64 characters in length.</p></li>
628    /// <li>
629    /// <p>Must contain at least one uppercase letter.</p></li>
630    /// <li>
631    /// <p>Must contain at least one lowercase letter.</p></li>
632    /// <li>
633    /// <p>Must contain one number.</p></li>
634    /// <li>
635    /// <p>Can be any printable ASCII character (ASCII code 33-126) except <code>'</code> (single quote), <code>"</code> (double quote), <code>\</code>, <code>/</code>, or <code>@</code>.</p></li>
636    /// </ul>
637    pub fn get_master_user_password(&self) -> &::std::option::Option<::std::string::String> {
638        &self.master_user_password
639    }
640    /// <p>The name of the cluster parameter group to apply to this cluster. This change is applied only after the cluster is rebooted. To reboot a cluster use <code>RebootCluster</code>.</p>
641    /// <p>Default: Uses existing setting.</p>
642    /// <p>Constraints: The cluster parameter group must be in the same parameter group family that matches the cluster version.</p>
643    pub fn cluster_parameter_group_name(mut self, input: impl ::std::convert::Into<::std::string::String>) -> Self {
644        self.cluster_parameter_group_name = ::std::option::Option::Some(input.into());
645        self
646    }
647    /// <p>The name of the cluster parameter group to apply to this cluster. This change is applied only after the cluster is rebooted. To reboot a cluster use <code>RebootCluster</code>.</p>
648    /// <p>Default: Uses existing setting.</p>
649    /// <p>Constraints: The cluster parameter group must be in the same parameter group family that matches the cluster version.</p>
650    pub fn set_cluster_parameter_group_name(mut self, input: ::std::option::Option<::std::string::String>) -> Self {
651        self.cluster_parameter_group_name = input;
652        self
653    }
654    /// <p>The name of the cluster parameter group to apply to this cluster. This change is applied only after the cluster is rebooted. To reboot a cluster use <code>RebootCluster</code>.</p>
655    /// <p>Default: Uses existing setting.</p>
656    /// <p>Constraints: The cluster parameter group must be in the same parameter group family that matches the cluster version.</p>
657    pub fn get_cluster_parameter_group_name(&self) -> &::std::option::Option<::std::string::String> {
658        &self.cluster_parameter_group_name
659    }
660    /// <p>The number of days that automated snapshots are retained. If the value is 0, automated snapshots are disabled. Even if automated snapshots are disabled, you can still create manual snapshots when you want with <code>CreateClusterSnapshot</code>.</p>
661    /// <p>If you decrease the automated snapshot retention period from its current value, existing automated snapshots that fall outside of the new retention period will be immediately deleted.</p>
662    /// <p>You can't disable automated snapshots for RA3 node types. Set the automated retention period from 1-35 days.</p>
663    /// <p>Default: Uses existing setting.</p>
664    /// <p>Constraints: Must be a value from 0 to 35.</p>
665    pub fn automated_snapshot_retention_period(mut self, input: i32) -> Self {
666        self.automated_snapshot_retention_period = ::std::option::Option::Some(input);
667        self
668    }
669    /// <p>The number of days that automated snapshots are retained. If the value is 0, automated snapshots are disabled. Even if automated snapshots are disabled, you can still create manual snapshots when you want with <code>CreateClusterSnapshot</code>.</p>
670    /// <p>If you decrease the automated snapshot retention period from its current value, existing automated snapshots that fall outside of the new retention period will be immediately deleted.</p>
671    /// <p>You can't disable automated snapshots for RA3 node types. Set the automated retention period from 1-35 days.</p>
672    /// <p>Default: Uses existing setting.</p>
673    /// <p>Constraints: Must be a value from 0 to 35.</p>
674    pub fn set_automated_snapshot_retention_period(mut self, input: ::std::option::Option<i32>) -> Self {
675        self.automated_snapshot_retention_period = input;
676        self
677    }
678    /// <p>The number of days that automated snapshots are retained. If the value is 0, automated snapshots are disabled. Even if automated snapshots are disabled, you can still create manual snapshots when you want with <code>CreateClusterSnapshot</code>.</p>
679    /// <p>If you decrease the automated snapshot retention period from its current value, existing automated snapshots that fall outside of the new retention period will be immediately deleted.</p>
680    /// <p>You can't disable automated snapshots for RA3 node types. Set the automated retention period from 1-35 days.</p>
681    /// <p>Default: Uses existing setting.</p>
682    /// <p>Constraints: Must be a value from 0 to 35.</p>
683    pub fn get_automated_snapshot_retention_period(&self) -> &::std::option::Option<i32> {
684        &self.automated_snapshot_retention_period
685    }
686    /// <p>The default for number of days that a newly created manual snapshot is retained. If the value is -1, the manual snapshot is retained indefinitely. This value doesn't retroactively change the retention periods of existing manual snapshots.</p>
687    /// <p>The value must be either -1 or an integer between 1 and 3,653.</p>
688    /// <p>The default value is -1.</p>
689    pub fn manual_snapshot_retention_period(mut self, input: i32) -> Self {
690        self.manual_snapshot_retention_period = ::std::option::Option::Some(input);
691        self
692    }
693    /// <p>The default for number of days that a newly created manual snapshot is retained. If the value is -1, the manual snapshot is retained indefinitely. This value doesn't retroactively change the retention periods of existing manual snapshots.</p>
694    /// <p>The value must be either -1 or an integer between 1 and 3,653.</p>
695    /// <p>The default value is -1.</p>
696    pub fn set_manual_snapshot_retention_period(mut self, input: ::std::option::Option<i32>) -> Self {
697        self.manual_snapshot_retention_period = input;
698        self
699    }
700    /// <p>The default for number of days that a newly created manual snapshot is retained. If the value is -1, the manual snapshot is retained indefinitely. This value doesn't retroactively change the retention periods of existing manual snapshots.</p>
701    /// <p>The value must be either -1 or an integer between 1 and 3,653.</p>
702    /// <p>The default value is -1.</p>
703    pub fn get_manual_snapshot_retention_period(&self) -> &::std::option::Option<i32> {
704        &self.manual_snapshot_retention_period
705    }
706    /// <p>The weekly time range (in UTC) during which system maintenance can occur, if necessary. If system maintenance is necessary during the window, it may result in an outage.</p>
707    /// <p>This maintenance window change is made immediately. If the new maintenance window indicates the current time, there must be at least 120 minutes between the current time and end of the window in order to ensure that pending changes are applied.</p>
708    /// <p>Default: Uses existing setting.</p>
709    /// <p>Format: ddd:hh24:mi-ddd:hh24:mi, for example <code>wed:07:30-wed:08:00</code>.</p>
710    /// <p>Valid Days: Mon | Tue | Wed | Thu | Fri | Sat | Sun</p>
711    /// <p>Constraints: Must be at least 30 minutes.</p>
712    pub fn preferred_maintenance_window(mut self, input: impl ::std::convert::Into<::std::string::String>) -> Self {
713        self.preferred_maintenance_window = ::std::option::Option::Some(input.into());
714        self
715    }
716    /// <p>The weekly time range (in UTC) during which system maintenance can occur, if necessary. If system maintenance is necessary during the window, it may result in an outage.</p>
717    /// <p>This maintenance window change is made immediately. If the new maintenance window indicates the current time, there must be at least 120 minutes between the current time and end of the window in order to ensure that pending changes are applied.</p>
718    /// <p>Default: Uses existing setting.</p>
719    /// <p>Format: ddd:hh24:mi-ddd:hh24:mi, for example <code>wed:07:30-wed:08:00</code>.</p>
720    /// <p>Valid Days: Mon | Tue | Wed | Thu | Fri | Sat | Sun</p>
721    /// <p>Constraints: Must be at least 30 minutes.</p>
722    pub fn set_preferred_maintenance_window(mut self, input: ::std::option::Option<::std::string::String>) -> Self {
723        self.preferred_maintenance_window = input;
724        self
725    }
726    /// <p>The weekly time range (in UTC) during which system maintenance can occur, if necessary. If system maintenance is necessary during the window, it may result in an outage.</p>
727    /// <p>This maintenance window change is made immediately. If the new maintenance window indicates the current time, there must be at least 120 minutes between the current time and end of the window in order to ensure that pending changes are applied.</p>
728    /// <p>Default: Uses existing setting.</p>
729    /// <p>Format: ddd:hh24:mi-ddd:hh24:mi, for example <code>wed:07:30-wed:08:00</code>.</p>
730    /// <p>Valid Days: Mon | Tue | Wed | Thu | Fri | Sat | Sun</p>
731    /// <p>Constraints: Must be at least 30 minutes.</p>
732    pub fn get_preferred_maintenance_window(&self) -> &::std::option::Option<::std::string::String> {
733        &self.preferred_maintenance_window
734    }
735    /// <p>The new version number of the Amazon Redshift engine to upgrade to.</p>
736    /// <p>For major version upgrades, if a non-default cluster parameter group is currently in use, a new cluster parameter group in the cluster parameter group family for the new version must be specified. The new cluster parameter group can be the default for that cluster parameter group family. For more information about parameters and parameter groups, go to <a href="https://docs.aws.amazon.com/redshift/latest/mgmt/working-with-parameter-groups.html">Amazon Redshift Parameter Groups</a> in the <i>Amazon Redshift Cluster Management Guide</i>.</p>
737    /// <p>Example: <code>1.0</code></p>
738    pub fn cluster_version(mut self, input: impl ::std::convert::Into<::std::string::String>) -> Self {
739        self.cluster_version = ::std::option::Option::Some(input.into());
740        self
741    }
742    /// <p>The new version number of the Amazon Redshift engine to upgrade to.</p>
743    /// <p>For major version upgrades, if a non-default cluster parameter group is currently in use, a new cluster parameter group in the cluster parameter group family for the new version must be specified. The new cluster parameter group can be the default for that cluster parameter group family. For more information about parameters and parameter groups, go to <a href="https://docs.aws.amazon.com/redshift/latest/mgmt/working-with-parameter-groups.html">Amazon Redshift Parameter Groups</a> in the <i>Amazon Redshift Cluster Management Guide</i>.</p>
744    /// <p>Example: <code>1.0</code></p>
745    pub fn set_cluster_version(mut self, input: ::std::option::Option<::std::string::String>) -> Self {
746        self.cluster_version = input;
747        self
748    }
749    /// <p>The new version number of the Amazon Redshift engine to upgrade to.</p>
750    /// <p>For major version upgrades, if a non-default cluster parameter group is currently in use, a new cluster parameter group in the cluster parameter group family for the new version must be specified. The new cluster parameter group can be the default for that cluster parameter group family. For more information about parameters and parameter groups, go to <a href="https://docs.aws.amazon.com/redshift/latest/mgmt/working-with-parameter-groups.html">Amazon Redshift Parameter Groups</a> in the <i>Amazon Redshift Cluster Management Guide</i>.</p>
751    /// <p>Example: <code>1.0</code></p>
752    pub fn get_cluster_version(&self) -> &::std::option::Option<::std::string::String> {
753        &self.cluster_version
754    }
755    /// <p>If <code>true</code>, major version upgrades will be applied automatically to the cluster during the maintenance window.</p>
756    /// <p>Default: <code>false</code></p>
757    pub fn allow_version_upgrade(mut self, input: bool) -> Self {
758        self.allow_version_upgrade = ::std::option::Option::Some(input);
759        self
760    }
761    /// <p>If <code>true</code>, major version upgrades will be applied automatically to the cluster during the maintenance window.</p>
762    /// <p>Default: <code>false</code></p>
763    pub fn set_allow_version_upgrade(mut self, input: ::std::option::Option<bool>) -> Self {
764        self.allow_version_upgrade = input;
765        self
766    }
767    /// <p>If <code>true</code>, major version upgrades will be applied automatically to the cluster during the maintenance window.</p>
768    /// <p>Default: <code>false</code></p>
769    pub fn get_allow_version_upgrade(&self) -> &::std::option::Option<bool> {
770        &self.allow_version_upgrade
771    }
772    /// <p>Specifies the name of the HSM client certificate the Amazon Redshift cluster uses to retrieve the data encryption keys stored in an HSM.</p>
773    pub fn hsm_client_certificate_identifier(mut self, input: impl ::std::convert::Into<::std::string::String>) -> Self {
774        self.hsm_client_certificate_identifier = ::std::option::Option::Some(input.into());
775        self
776    }
777    /// <p>Specifies the name of the HSM client certificate the Amazon Redshift cluster uses to retrieve the data encryption keys stored in an HSM.</p>
778    pub fn set_hsm_client_certificate_identifier(mut self, input: ::std::option::Option<::std::string::String>) -> Self {
779        self.hsm_client_certificate_identifier = input;
780        self
781    }
782    /// <p>Specifies the name of the HSM client certificate the Amazon Redshift cluster uses to retrieve the data encryption keys stored in an HSM.</p>
783    pub fn get_hsm_client_certificate_identifier(&self) -> &::std::option::Option<::std::string::String> {
784        &self.hsm_client_certificate_identifier
785    }
786    /// <p>Specifies the name of the HSM configuration that contains the information the Amazon Redshift cluster can use to retrieve and store keys in an HSM.</p>
787    pub fn hsm_configuration_identifier(mut self, input: impl ::std::convert::Into<::std::string::String>) -> Self {
788        self.hsm_configuration_identifier = ::std::option::Option::Some(input.into());
789        self
790    }
791    /// <p>Specifies the name of the HSM configuration that contains the information the Amazon Redshift cluster can use to retrieve and store keys in an HSM.</p>
792    pub fn set_hsm_configuration_identifier(mut self, input: ::std::option::Option<::std::string::String>) -> Self {
793        self.hsm_configuration_identifier = input;
794        self
795    }
796    /// <p>Specifies the name of the HSM configuration that contains the information the Amazon Redshift cluster can use to retrieve and store keys in an HSM.</p>
797    pub fn get_hsm_configuration_identifier(&self) -> &::std::option::Option<::std::string::String> {
798        &self.hsm_configuration_identifier
799    }
800    /// <p>The new identifier for the cluster.</p>
801    /// <p>Constraints:</p>
802    /// <ul>
803    /// <li>
804    /// <p>Must contain from 1 to 63 alphanumeric characters or hyphens.</p></li>
805    /// <li>
806    /// <p>Alphabetic characters must be lowercase.</p></li>
807    /// <li>
808    /// <p>First character must be a letter.</p></li>
809    /// <li>
810    /// <p>Cannot end with a hyphen or contain two consecutive hyphens.</p></li>
811    /// <li>
812    /// <p>Must be unique for all clusters within an Amazon Web Services account.</p></li>
813    /// </ul>
814    /// <p>Example: <code>examplecluster</code></p>
815    pub fn new_cluster_identifier(mut self, input: impl ::std::convert::Into<::std::string::String>) -> Self {
816        self.new_cluster_identifier = ::std::option::Option::Some(input.into());
817        self
818    }
819    /// <p>The new identifier for the cluster.</p>
820    /// <p>Constraints:</p>
821    /// <ul>
822    /// <li>
823    /// <p>Must contain from 1 to 63 alphanumeric characters or hyphens.</p></li>
824    /// <li>
825    /// <p>Alphabetic characters must be lowercase.</p></li>
826    /// <li>
827    /// <p>First character must be a letter.</p></li>
828    /// <li>
829    /// <p>Cannot end with a hyphen or contain two consecutive hyphens.</p></li>
830    /// <li>
831    /// <p>Must be unique for all clusters within an Amazon Web Services account.</p></li>
832    /// </ul>
833    /// <p>Example: <code>examplecluster</code></p>
834    pub fn set_new_cluster_identifier(mut self, input: ::std::option::Option<::std::string::String>) -> Self {
835        self.new_cluster_identifier = input;
836        self
837    }
838    /// <p>The new identifier for the cluster.</p>
839    /// <p>Constraints:</p>
840    /// <ul>
841    /// <li>
842    /// <p>Must contain from 1 to 63 alphanumeric characters or hyphens.</p></li>
843    /// <li>
844    /// <p>Alphabetic characters must be lowercase.</p></li>
845    /// <li>
846    /// <p>First character must be a letter.</p></li>
847    /// <li>
848    /// <p>Cannot end with a hyphen or contain two consecutive hyphens.</p></li>
849    /// <li>
850    /// <p>Must be unique for all clusters within an Amazon Web Services account.</p></li>
851    /// </ul>
852    /// <p>Example: <code>examplecluster</code></p>
853    pub fn get_new_cluster_identifier(&self) -> &::std::option::Option<::std::string::String> {
854        &self.new_cluster_identifier
855    }
856    /// <p>If <code>true</code>, the cluster can be accessed from a public network. Only clusters in VPCs can be set to be publicly available.</p>
857    /// <p>Default: false</p>
858    pub fn publicly_accessible(mut self, input: bool) -> Self {
859        self.publicly_accessible = ::std::option::Option::Some(input);
860        self
861    }
862    /// <p>If <code>true</code>, the cluster can be accessed from a public network. Only clusters in VPCs can be set to be publicly available.</p>
863    /// <p>Default: false</p>
864    pub fn set_publicly_accessible(mut self, input: ::std::option::Option<bool>) -> Self {
865        self.publicly_accessible = input;
866        self
867    }
868    /// <p>If <code>true</code>, the cluster can be accessed from a public network. Only clusters in VPCs can be set to be publicly available.</p>
869    /// <p>Default: false</p>
870    pub fn get_publicly_accessible(&self) -> &::std::option::Option<bool> {
871        &self.publicly_accessible
872    }
873    /// <p>The Elastic IP (EIP) address for the cluster.</p>
874    /// <p>Constraints: The cluster must be provisioned in EC2-VPC and publicly-accessible through an Internet gateway. For more information about provisioning clusters in EC2-VPC, go to <a href="https://docs.aws.amazon.com/redshift/latest/mgmt/working-with-clusters.html#cluster-platforms">Supported Platforms to Launch Your Cluster</a> in the Amazon Redshift Cluster Management Guide.</p>
875    pub fn elastic_ip(mut self, input: impl ::std::convert::Into<::std::string::String>) -> Self {
876        self.elastic_ip = ::std::option::Option::Some(input.into());
877        self
878    }
879    /// <p>The Elastic IP (EIP) address for the cluster.</p>
880    /// <p>Constraints: The cluster must be provisioned in EC2-VPC and publicly-accessible through an Internet gateway. For more information about provisioning clusters in EC2-VPC, go to <a href="https://docs.aws.amazon.com/redshift/latest/mgmt/working-with-clusters.html#cluster-platforms">Supported Platforms to Launch Your Cluster</a> in the Amazon Redshift Cluster Management Guide.</p>
881    pub fn set_elastic_ip(mut self, input: ::std::option::Option<::std::string::String>) -> Self {
882        self.elastic_ip = input;
883        self
884    }
885    /// <p>The Elastic IP (EIP) address for the cluster.</p>
886    /// <p>Constraints: The cluster must be provisioned in EC2-VPC and publicly-accessible through an Internet gateway. For more information about provisioning clusters in EC2-VPC, go to <a href="https://docs.aws.amazon.com/redshift/latest/mgmt/working-with-clusters.html#cluster-platforms">Supported Platforms to Launch Your Cluster</a> in the Amazon Redshift Cluster Management Guide.</p>
887    pub fn get_elastic_ip(&self) -> &::std::option::Option<::std::string::String> {
888        &self.elastic_ip
889    }
890    /// <p>An option that specifies whether to create the cluster with enhanced VPC routing enabled. To create a cluster that uses enhanced VPC routing, the cluster must be in a VPC. For more information, see <a href="https://docs.aws.amazon.com/redshift/latest/mgmt/enhanced-vpc-routing.html">Enhanced VPC Routing</a> in the Amazon Redshift Cluster Management Guide.</p>
891    /// <p>If this option is <code>true</code>, enhanced VPC routing is enabled.</p>
892    /// <p>Default: false</p>
893    pub fn enhanced_vpc_routing(mut self, input: bool) -> Self {
894        self.enhanced_vpc_routing = ::std::option::Option::Some(input);
895        self
896    }
897    /// <p>An option that specifies whether to create the cluster with enhanced VPC routing enabled. To create a cluster that uses enhanced VPC routing, the cluster must be in a VPC. For more information, see <a href="https://docs.aws.amazon.com/redshift/latest/mgmt/enhanced-vpc-routing.html">Enhanced VPC Routing</a> in the Amazon Redshift Cluster Management Guide.</p>
898    /// <p>If this option is <code>true</code>, enhanced VPC routing is enabled.</p>
899    /// <p>Default: false</p>
900    pub fn set_enhanced_vpc_routing(mut self, input: ::std::option::Option<bool>) -> Self {
901        self.enhanced_vpc_routing = input;
902        self
903    }
904    /// <p>An option that specifies whether to create the cluster with enhanced VPC routing enabled. To create a cluster that uses enhanced VPC routing, the cluster must be in a VPC. For more information, see <a href="https://docs.aws.amazon.com/redshift/latest/mgmt/enhanced-vpc-routing.html">Enhanced VPC Routing</a> in the Amazon Redshift Cluster Management Guide.</p>
905    /// <p>If this option is <code>true</code>, enhanced VPC routing is enabled.</p>
906    /// <p>Default: false</p>
907    pub fn get_enhanced_vpc_routing(&self) -> &::std::option::Option<bool> {
908        &self.enhanced_vpc_routing
909    }
910    /// <p>The name for the maintenance track that you want to assign for the cluster. This name change is asynchronous. The new track name stays in the <code>PendingModifiedValues</code> for the cluster until the next maintenance window. When the maintenance track changes, the cluster is switched to the latest cluster release available for the maintenance track. At this point, the maintenance track name is applied.</p>
911    pub fn maintenance_track_name(mut self, input: impl ::std::convert::Into<::std::string::String>) -> Self {
912        self.maintenance_track_name = ::std::option::Option::Some(input.into());
913        self
914    }
915    /// <p>The name for the maintenance track that you want to assign for the cluster. This name change is asynchronous. The new track name stays in the <code>PendingModifiedValues</code> for the cluster until the next maintenance window. When the maintenance track changes, the cluster is switched to the latest cluster release available for the maintenance track. At this point, the maintenance track name is applied.</p>
916    pub fn set_maintenance_track_name(mut self, input: ::std::option::Option<::std::string::String>) -> Self {
917        self.maintenance_track_name = input;
918        self
919    }
920    /// <p>The name for the maintenance track that you want to assign for the cluster. This name change is asynchronous. The new track name stays in the <code>PendingModifiedValues</code> for the cluster until the next maintenance window. When the maintenance track changes, the cluster is switched to the latest cluster release available for the maintenance track. At this point, the maintenance track name is applied.</p>
921    pub fn get_maintenance_track_name(&self) -> &::std::option::Option<::std::string::String> {
922        &self.maintenance_track_name
923    }
924    /// <p>Indicates whether the cluster is encrypted. If the value is encrypted (true) and you provide a value for the <code>KmsKeyId</code> parameter, we encrypt the cluster with the provided <code>KmsKeyId</code>. If you don't provide a <code>KmsKeyId</code>, we encrypt with the default key.</p>
925    /// <p>If the value is not encrypted (false), then the cluster is decrypted.</p>
926    pub fn encrypted(mut self, input: bool) -> Self {
927        self.encrypted = ::std::option::Option::Some(input);
928        self
929    }
930    /// <p>Indicates whether the cluster is encrypted. If the value is encrypted (true) and you provide a value for the <code>KmsKeyId</code> parameter, we encrypt the cluster with the provided <code>KmsKeyId</code>. If you don't provide a <code>KmsKeyId</code>, we encrypt with the default key.</p>
931    /// <p>If the value is not encrypted (false), then the cluster is decrypted.</p>
932    pub fn set_encrypted(mut self, input: ::std::option::Option<bool>) -> Self {
933        self.encrypted = input;
934        self
935    }
936    /// <p>Indicates whether the cluster is encrypted. If the value is encrypted (true) and you provide a value for the <code>KmsKeyId</code> parameter, we encrypt the cluster with the provided <code>KmsKeyId</code>. If you don't provide a <code>KmsKeyId</code>, we encrypt with the default key.</p>
937    /// <p>If the value is not encrypted (false), then the cluster is decrypted.</p>
938    pub fn get_encrypted(&self) -> &::std::option::Option<bool> {
939        &self.encrypted
940    }
941    /// <p>The Key Management Service (KMS) key ID of the encryption key that you want to use to encrypt data in the cluster.</p>
942    pub fn kms_key_id(mut self, input: impl ::std::convert::Into<::std::string::String>) -> Self {
943        self.kms_key_id = ::std::option::Option::Some(input.into());
944        self
945    }
946    /// <p>The Key Management Service (KMS) key ID of the encryption key that you want to use to encrypt data in the cluster.</p>
947    pub fn set_kms_key_id(mut self, input: ::std::option::Option<::std::string::String>) -> Self {
948        self.kms_key_id = input;
949        self
950    }
951    /// <p>The Key Management Service (KMS) key ID of the encryption key that you want to use to encrypt data in the cluster.</p>
952    pub fn get_kms_key_id(&self) -> &::std::option::Option<::std::string::String> {
953        &self.kms_key_id
954    }
955    /// <p>The option to enable relocation for an Amazon Redshift cluster between Availability Zones after the cluster modification is complete.</p>
956    pub fn availability_zone_relocation(mut self, input: bool) -> Self {
957        self.availability_zone_relocation = ::std::option::Option::Some(input);
958        self
959    }
960    /// <p>The option to enable relocation for an Amazon Redshift cluster between Availability Zones after the cluster modification is complete.</p>
961    pub fn set_availability_zone_relocation(mut self, input: ::std::option::Option<bool>) -> Self {
962        self.availability_zone_relocation = input;
963        self
964    }
965    /// <p>The option to enable relocation for an Amazon Redshift cluster between Availability Zones after the cluster modification is complete.</p>
966    pub fn get_availability_zone_relocation(&self) -> &::std::option::Option<bool> {
967        &self.availability_zone_relocation
968    }
969    /// <p>The option to initiate relocation for an Amazon Redshift cluster to the target Availability Zone.</p>
970    pub fn availability_zone(mut self, input: impl ::std::convert::Into<::std::string::String>) -> Self {
971        self.availability_zone = ::std::option::Option::Some(input.into());
972        self
973    }
974    /// <p>The option to initiate relocation for an Amazon Redshift cluster to the target Availability Zone.</p>
975    pub fn set_availability_zone(mut self, input: ::std::option::Option<::std::string::String>) -> Self {
976        self.availability_zone = input;
977        self
978    }
979    /// <p>The option to initiate relocation for an Amazon Redshift cluster to the target Availability Zone.</p>
980    pub fn get_availability_zone(&self) -> &::std::option::Option<::std::string::String> {
981        &self.availability_zone
982    }
983    /// <p>The option to change the port of an Amazon Redshift cluster.</p>
984    /// <p>Valid Values:</p>
985    /// <ul>
986    /// <li>
987    /// <p>For clusters with ra3 nodes - Select a port within the ranges <code>5431-5455</code> or <code>8191-8215</code>. (If you have an existing cluster with ra3 nodes, it isn't required that you change the port to these ranges.)</p></li>
988    /// <li>
989    /// <p>For clusters with dc2 nodes - Select a port within the range <code>1150-65535</code>.</p></li>
990    /// </ul>
991    pub fn port(mut self, input: i32) -> Self {
992        self.port = ::std::option::Option::Some(input);
993        self
994    }
995    /// <p>The option to change the port of an Amazon Redshift cluster.</p>
996    /// <p>Valid Values:</p>
997    /// <ul>
998    /// <li>
999    /// <p>For clusters with ra3 nodes - Select a port within the ranges <code>5431-5455</code> or <code>8191-8215</code>. (If you have an existing cluster with ra3 nodes, it isn't required that you change the port to these ranges.)</p></li>
1000    /// <li>
1001    /// <p>For clusters with dc2 nodes - Select a port within the range <code>1150-65535</code>.</p></li>
1002    /// </ul>
1003    pub fn set_port(mut self, input: ::std::option::Option<i32>) -> Self {
1004        self.port = input;
1005        self
1006    }
1007    /// <p>The option to change the port of an Amazon Redshift cluster.</p>
1008    /// <p>Valid Values:</p>
1009    /// <ul>
1010    /// <li>
1011    /// <p>For clusters with ra3 nodes - Select a port within the ranges <code>5431-5455</code> or <code>8191-8215</code>. (If you have an existing cluster with ra3 nodes, it isn't required that you change the port to these ranges.)</p></li>
1012    /// <li>
1013    /// <p>For clusters with dc2 nodes - Select a port within the range <code>1150-65535</code>.</p></li>
1014    /// </ul>
1015    pub fn get_port(&self) -> &::std::option::Option<i32> {
1016        &self.port
1017    }
1018    /// <p>If <code>true</code>, Amazon Redshift uses Secrets Manager to manage this cluster's admin credentials. You can't use <code>MasterUserPassword</code> if <code>ManageMasterPassword</code> is true. If <code>ManageMasterPassword</code> is false or not set, Amazon Redshift uses <code>MasterUserPassword</code> for the admin user account's password.</p>
1019    pub fn manage_master_password(mut self, input: bool) -> Self {
1020        self.manage_master_password = ::std::option::Option::Some(input);
1021        self
1022    }
1023    /// <p>If <code>true</code>, Amazon Redshift uses Secrets Manager to manage this cluster's admin credentials. You can't use <code>MasterUserPassword</code> if <code>ManageMasterPassword</code> is true. If <code>ManageMasterPassword</code> is false or not set, Amazon Redshift uses <code>MasterUserPassword</code> for the admin user account's password.</p>
1024    pub fn set_manage_master_password(mut self, input: ::std::option::Option<bool>) -> Self {
1025        self.manage_master_password = input;
1026        self
1027    }
1028    /// <p>If <code>true</code>, Amazon Redshift uses Secrets Manager to manage this cluster's admin credentials. You can't use <code>MasterUserPassword</code> if <code>ManageMasterPassword</code> is true. If <code>ManageMasterPassword</code> is false or not set, Amazon Redshift uses <code>MasterUserPassword</code> for the admin user account's password.</p>
1029    pub fn get_manage_master_password(&self) -> &::std::option::Option<bool> {
1030        &self.manage_master_password
1031    }
1032    /// <p>The ID of the Key Management Service (KMS) key used to encrypt and store the cluster's admin credentials secret. You can only use this parameter if <code>ManageMasterPassword</code> is true.</p>
1033    pub fn master_password_secret_kms_key_id(mut self, input: impl ::std::convert::Into<::std::string::String>) -> Self {
1034        self.master_password_secret_kms_key_id = ::std::option::Option::Some(input.into());
1035        self
1036    }
1037    /// <p>The ID of the Key Management Service (KMS) key used to encrypt and store the cluster's admin credentials secret. You can only use this parameter if <code>ManageMasterPassword</code> is true.</p>
1038    pub fn set_master_password_secret_kms_key_id(mut self, input: ::std::option::Option<::std::string::String>) -> Self {
1039        self.master_password_secret_kms_key_id = input;
1040        self
1041    }
1042    /// <p>The ID of the Key Management Service (KMS) key used to encrypt and store the cluster's admin credentials secret. You can only use this parameter if <code>ManageMasterPassword</code> is true.</p>
1043    pub fn get_master_password_secret_kms_key_id(&self) -> &::std::option::Option<::std::string::String> {
1044        &self.master_password_secret_kms_key_id
1045    }
1046    /// <p>The IP address types that the cluster supports. Possible values are <code>ipv4</code> and <code>dualstack</code>.</p>
1047    pub fn ip_address_type(mut self, input: impl ::std::convert::Into<::std::string::String>) -> Self {
1048        self.ip_address_type = ::std::option::Option::Some(input.into());
1049        self
1050    }
1051    /// <p>The IP address types that the cluster supports. Possible values are <code>ipv4</code> and <code>dualstack</code>.</p>
1052    pub fn set_ip_address_type(mut self, input: ::std::option::Option<::std::string::String>) -> Self {
1053        self.ip_address_type = input;
1054        self
1055    }
1056    /// <p>The IP address types that the cluster supports. Possible values are <code>ipv4</code> and <code>dualstack</code>.</p>
1057    pub fn get_ip_address_type(&self) -> &::std::option::Option<::std::string::String> {
1058        &self.ip_address_type
1059    }
1060    /// <p>If true and the cluster is currently only deployed in a single Availability Zone, the cluster will be modified to be deployed in two Availability Zones.</p>
1061    pub fn multi_az(mut self, input: bool) -> Self {
1062        self.multi_az = ::std::option::Option::Some(input);
1063        self
1064    }
1065    /// <p>If true and the cluster is currently only deployed in a single Availability Zone, the cluster will be modified to be deployed in two Availability Zones.</p>
1066    pub fn set_multi_az(mut self, input: ::std::option::Option<bool>) -> Self {
1067        self.multi_az = input;
1068        self
1069    }
1070    /// <p>If true and the cluster is currently only deployed in a single Availability Zone, the cluster will be modified to be deployed in two Availability Zones.</p>
1071    pub fn get_multi_az(&self) -> &::std::option::Option<bool> {
1072        &self.multi_az
1073    }
1074    /// <p>If <code>true</code>, allocates additional compute resources for running automatic optimization operations.</p>
1075    /// <p>Default: false</p>
1076    pub fn extra_compute_for_automatic_optimization(mut self, input: bool) -> Self {
1077        self.extra_compute_for_automatic_optimization = ::std::option::Option::Some(input);
1078        self
1079    }
1080    /// <p>If <code>true</code>, allocates additional compute resources for running automatic optimization operations.</p>
1081    /// <p>Default: false</p>
1082    pub fn set_extra_compute_for_automatic_optimization(mut self, input: ::std::option::Option<bool>) -> Self {
1083        self.extra_compute_for_automatic_optimization = input;
1084        self
1085    }
1086    /// <p>If <code>true</code>, allocates additional compute resources for running automatic optimization operations.</p>
1087    /// <p>Default: false</p>
1088    pub fn get_extra_compute_for_automatic_optimization(&self) -> &::std::option::Option<bool> {
1089        &self.extra_compute_for_automatic_optimization
1090    }
1091    /// Consumes the builder and constructs a [`ModifyClusterInput`](crate::operation::modify_cluster::ModifyClusterInput).
1092    pub fn build(
1093        self,
1094    ) -> ::std::result::Result<crate::operation::modify_cluster::ModifyClusterInput, ::aws_smithy_types::error::operation::BuildError> {
1095        ::std::result::Result::Ok(crate::operation::modify_cluster::ModifyClusterInput {
1096            cluster_identifier: self.cluster_identifier,
1097            cluster_type: self.cluster_type,
1098            node_type: self.node_type,
1099            number_of_nodes: self.number_of_nodes,
1100            cluster_security_groups: self.cluster_security_groups,
1101            vpc_security_group_ids: self.vpc_security_group_ids,
1102            master_user_password: self.master_user_password,
1103            cluster_parameter_group_name: self.cluster_parameter_group_name,
1104            automated_snapshot_retention_period: self.automated_snapshot_retention_period,
1105            manual_snapshot_retention_period: self.manual_snapshot_retention_period,
1106            preferred_maintenance_window: self.preferred_maintenance_window,
1107            cluster_version: self.cluster_version,
1108            allow_version_upgrade: self.allow_version_upgrade,
1109            hsm_client_certificate_identifier: self.hsm_client_certificate_identifier,
1110            hsm_configuration_identifier: self.hsm_configuration_identifier,
1111            new_cluster_identifier: self.new_cluster_identifier,
1112            publicly_accessible: self.publicly_accessible,
1113            elastic_ip: self.elastic_ip,
1114            enhanced_vpc_routing: self.enhanced_vpc_routing,
1115            maintenance_track_name: self.maintenance_track_name,
1116            encrypted: self.encrypted,
1117            kms_key_id: self.kms_key_id,
1118            availability_zone_relocation: self.availability_zone_relocation,
1119            availability_zone: self.availability_zone,
1120            port: self.port,
1121            manage_master_password: self.manage_master_password,
1122            master_password_secret_kms_key_id: self.master_password_secret_kms_key_id,
1123            ip_address_type: self.ip_address_type,
1124            multi_az: self.multi_az,
1125            extra_compute_for_automatic_optimization: self.extra_compute_for_automatic_optimization,
1126        })
1127    }
1128}
1129impl ::std::fmt::Debug for ModifyClusterInputBuilder {
1130    fn fmt(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
1131        let mut formatter = f.debug_struct("ModifyClusterInputBuilder");
1132        formatter.field("cluster_identifier", &self.cluster_identifier);
1133        formatter.field("cluster_type", &self.cluster_type);
1134        formatter.field("node_type", &self.node_type);
1135        formatter.field("number_of_nodes", &self.number_of_nodes);
1136        formatter.field("cluster_security_groups", &self.cluster_security_groups);
1137        formatter.field("vpc_security_group_ids", &self.vpc_security_group_ids);
1138        formatter.field("master_user_password", &"*** Sensitive Data Redacted ***");
1139        formatter.field("cluster_parameter_group_name", &self.cluster_parameter_group_name);
1140        formatter.field("automated_snapshot_retention_period", &self.automated_snapshot_retention_period);
1141        formatter.field("manual_snapshot_retention_period", &self.manual_snapshot_retention_period);
1142        formatter.field("preferred_maintenance_window", &self.preferred_maintenance_window);
1143        formatter.field("cluster_version", &self.cluster_version);
1144        formatter.field("allow_version_upgrade", &self.allow_version_upgrade);
1145        formatter.field("hsm_client_certificate_identifier", &self.hsm_client_certificate_identifier);
1146        formatter.field("hsm_configuration_identifier", &self.hsm_configuration_identifier);
1147        formatter.field("new_cluster_identifier", &self.new_cluster_identifier);
1148        formatter.field("publicly_accessible", &self.publicly_accessible);
1149        formatter.field("elastic_ip", &self.elastic_ip);
1150        formatter.field("enhanced_vpc_routing", &self.enhanced_vpc_routing);
1151        formatter.field("maintenance_track_name", &self.maintenance_track_name);
1152        formatter.field("encrypted", &self.encrypted);
1153        formatter.field("kms_key_id", &self.kms_key_id);
1154        formatter.field("availability_zone_relocation", &self.availability_zone_relocation);
1155        formatter.field("availability_zone", &self.availability_zone);
1156        formatter.field("port", &self.port);
1157        formatter.field("manage_master_password", &self.manage_master_password);
1158        formatter.field("master_password_secret_kms_key_id", &self.master_password_secret_kms_key_id);
1159        formatter.field("ip_address_type", &self.ip_address_type);
1160        formatter.field("multi_az", &self.multi_az);
1161        formatter.field("extra_compute_for_automatic_optimization", &self.extra_compute_for_automatic_optimization);
1162        formatter.finish()
1163    }
1164}