aws_sdk_redshift/operation/modify_cluster/
_modify_cluster_input.rs

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