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