aws_sdk_redshift/operation/create_cluster/
_create_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 CreateClusterInput {
7    /// <p>The name of the first database to be created when the cluster is created.</p>
8    /// <p>To create additional databases after the cluster is created, connect to the cluster with a SQL client and use SQL commands to create a database. For more information, go to <a href="https://docs.aws.amazon.com/redshift/latest/dg/t_creating_database.html">Create a Database</a> in the Amazon Redshift Database Developer Guide.</p>
9    /// <p>Default: <code>dev</code></p>
10    /// <p>Constraints:</p>
11    /// <ul>
12    /// <li>
13    /// <p>Must contain 1 to 64 alphanumeric characters.</p></li>
14    /// <li>
15    /// <p>Must contain only lowercase letters.</p></li>
16    /// <li>
17    /// <p>Cannot be a word that is reserved by the service. A list of reserved words can be found in <a href="https://docs.aws.amazon.com/redshift/latest/dg/r_pg_keywords.html">Reserved Words</a> in the Amazon Redshift Database Developer Guide.</p></li>
18    /// </ul>
19    pub db_name: ::std::option::Option<::std::string::String>,
20    /// <p>A unique identifier for the cluster. You use this identifier to refer to the cluster for any subsequent cluster operations such as deleting or modifying. The identifier also appears in the Amazon Redshift console.</p>
21    /// <p>Constraints:</p>
22    /// <ul>
23    /// <li>
24    /// <p>Must contain from 1 to 63 alphanumeric characters or hyphens.</p></li>
25    /// <li>
26    /// <p>Alphabetic characters must be lowercase.</p></li>
27    /// <li>
28    /// <p>First character must be a letter.</p></li>
29    /// <li>
30    /// <p>Cannot end with a hyphen or contain two consecutive hyphens.</p></li>
31    /// <li>
32    /// <p>Must be unique for all clusters within an Amazon Web Services account.</p></li>
33    /// </ul>
34    /// <p>Example: <code>myexamplecluster</code></p>
35    pub cluster_identifier: ::std::option::Option<::std::string::String>,
36    /// <p>The type of the cluster. When cluster type is specified as</p>
37    /// <ul>
38    /// <li>
39    /// <p><code>single-node</code>, the <b>NumberOfNodes</b> parameter is not required.</p></li>
40    /// <li>
41    /// <p><code>multi-node</code>, the <b>NumberOfNodes</b> parameter is required.</p></li>
42    /// </ul>
43    /// <p>Valid Values: <code>multi-node</code> | <code>single-node</code></p>
44    /// <p>Default: <code>multi-node</code></p>
45    pub cluster_type: ::std::option::Option<::std::string::String>,
46    /// <p>The node type to be provisioned for the cluster. For information about node types, go to <a href="https://docs.aws.amazon.com/redshift/latest/mgmt/working-with-clusters.html#how-many-nodes"> Working with Clusters</a> in the <i>Amazon Redshift Cluster Management Guide</i>.</p>
47    /// <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>
48    pub node_type: ::std::option::Option<::std::string::String>,
49    /// <p>The user name associated with the admin user account for the cluster that is being created.</p>
50    /// <p>Constraints:</p>
51    /// <ul>
52    /// <li>
53    /// <p>Must be 1 - 128 alphanumeric characters or hyphens. The user name can't be <code>PUBLIC</code>.</p></li>
54    /// <li>
55    /// <p>Must contain only lowercase letters, numbers, underscore, plus sign, period (dot), at symbol (@), or hyphen.</p></li>
56    /// <li>
57    /// <p>The first character must be a letter.</p></li>
58    /// <li>
59    /// <p>Must not contain a colon (:) or a slash (/).</p></li>
60    /// <li>
61    /// <p>Cannot be a reserved word. A list of reserved words can be found in <a href="https://docs.aws.amazon.com/redshift/latest/dg/r_pg_keywords.html">Reserved Words</a> in the Amazon Redshift Database Developer Guide.</p></li>
62    /// </ul>
63    pub master_username: ::std::option::Option<::std::string::String>,
64    /// <p>The password associated with the admin user account for the cluster that is being created.</p>
65    /// <p>You can't use <code>MasterUserPassword</code> if <code>ManageMasterPassword</code> is <code>true</code>.</p>
66    /// <p>Constraints:</p>
67    /// <ul>
68    /// <li>
69    /// <p>Must be between 8 and 64 characters in length.</p></li>
70    /// <li>
71    /// <p>Must contain at least one uppercase letter.</p></li>
72    /// <li>
73    /// <p>Must contain at least one lowercase letter.</p></li>
74    /// <li>
75    /// <p>Must contain one number.</p></li>
76    /// <li>
77    /// <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>
78    /// </ul>
79    pub master_user_password: ::std::option::Option<::std::string::String>,
80    /// <p>A list of security groups to be associated with this cluster.</p>
81    /// <p>Default: The default cluster security group for Amazon Redshift.</p>
82    pub cluster_security_groups: ::std::option::Option<::std::vec::Vec<::std::string::String>>,
83    /// <p>A list of Virtual Private Cloud (VPC) security groups to be associated with the cluster.</p>
84    /// <p>Default: The default VPC security group is associated with the cluster.</p>
85    pub vpc_security_group_ids: ::std::option::Option<::std::vec::Vec<::std::string::String>>,
86    /// <p>The name of a cluster subnet group to be associated with this cluster.</p>
87    /// <p>If this parameter is not provided the resulting cluster will be deployed outside virtual private cloud (VPC).</p>
88    pub cluster_subnet_group_name: ::std::option::Option<::std::string::String>,
89    /// <p>The EC2 Availability Zone (AZ) in which you want Amazon Redshift to provision the cluster. For example, if you have several EC2 instances running in a specific Availability Zone, then you might want the cluster to be provisioned in the same zone in order to decrease network latency.</p>
90    /// <p>Default: A random, system-chosen Availability Zone in the region that is specified by the endpoint.</p>
91    /// <p>Example: <code>us-east-2d</code></p>
92    /// <p>Constraint: The specified Availability Zone must be in the same region as the current endpoint.</p>
93    pub availability_zone: ::std::option::Option<::std::string::String>,
94    /// <p>The weekly time range (in UTC) during which automated cluster maintenance can occur.</p>
95    /// <p>Format: <code>ddd:hh24:mi-ddd:hh24:mi</code></p>
96    /// <p>Default: A 30-minute window selected at random from an 8-hour block of time per region, occurring on a random day of the week. For more information about the time blocks for each region, see <a href="https://docs.aws.amazon.com/redshift/latest/mgmt/working-with-clusters.html#rs-maintenance-windows">Maintenance Windows</a> in Amazon Redshift Cluster Management Guide.</p>
97    /// <p>Valid Days: Mon | Tue | Wed | Thu | Fri | Sat | Sun</p>
98    /// <p>Constraints: Minimum 30-minute window.</p>
99    pub preferred_maintenance_window: ::std::option::Option<::std::string::String>,
100    /// <p>The name of the parameter group to be associated with this cluster.</p>
101    /// <p>Default: The default Amazon Redshift cluster parameter group. For information about the default parameter group, go to <a href="https://docs.aws.amazon.com/redshift/latest/mgmt/working-with-parameter-groups.html">Working with Amazon Redshift Parameter Groups</a></p>
102    /// <p>Constraints:</p>
103    /// <ul>
104    /// <li>
105    /// <p>Must be 1 to 255 alphanumeric characters or hyphens.</p></li>
106    /// <li>
107    /// <p>First character must be a letter.</p></li>
108    /// <li>
109    /// <p>Cannot end with a hyphen or contain two consecutive hyphens.</p></li>
110    /// </ul>
111    pub cluster_parameter_group_name: ::std::option::Option<::std::string::String>,
112    /// <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>
113    /// <p>You can't disable automated snapshots for RA3 node types. Set the automated retention period from 1-35 days.</p>
114    /// <p>Default: <code>1</code></p>
115    /// <p>Constraints: Must be a value from 0 to 35.</p>
116    pub automated_snapshot_retention_period: ::std::option::Option<i32>,
117    /// <p>The default number of days to retain a manual snapshot. If the value is -1, the snapshot is retained indefinitely. This setting doesn't change the retention period of existing snapshots.</p>
118    /// <p>The value must be either -1 or an integer between 1 and 3,653.</p>
119    pub manual_snapshot_retention_period: ::std::option::Option<i32>,
120    /// <p>The port number on which the cluster accepts incoming connections.</p>
121    /// <p>The cluster is accessible only via the JDBC and ODBC connection strings. Part of the connection string requires the port on which the cluster will listen for incoming connections.</p>
122    /// <p>Default: <code>5439</code></p>
123    /// <p>Valid Values:</p>
124    /// <ul>
125    /// <li>
126    /// <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>
127    /// <li>
128    /// <p>For clusters with dc2 nodes - Select a port within the range <code>1150-65535</code>.</p></li>
129    /// </ul>
130    pub port: ::std::option::Option<i32>,
131    /// <p>The version of the Amazon Redshift engine software that you want to deploy on the cluster.</p>
132    /// <p>The version selected runs on all the nodes in the cluster.</p>
133    /// <p>Constraints: Only version 1.0 is currently available.</p>
134    /// <p>Example: <code>1.0</code></p>
135    pub cluster_version: ::std::option::Option<::std::string::String>,
136    /// <p>If <code>true</code>, major version upgrades can be applied during the maintenance window to the Amazon Redshift engine that is running on the cluster.</p>
137    /// <p>When a new major version of the Amazon Redshift engine is released, you can request that the service automatically apply upgrades during the maintenance window to the Amazon Redshift engine that is running on your cluster.</p>
138    /// <p>Default: <code>true</code></p>
139    pub allow_version_upgrade: ::std::option::Option<bool>,
140    /// <p>The number of compute nodes in the cluster. This parameter is required when the <b>ClusterType</b> parameter is specified as <code>multi-node</code>.</p>
141    /// <p>For information about determining how many nodes you need, go to <a href="https://docs.aws.amazon.com/redshift/latest/mgmt/working-with-clusters.html#how-many-nodes"> Working with Clusters</a> in the <i>Amazon Redshift Cluster Management Guide</i>.</p>
142    /// <p>If you don't specify this parameter, you get a single-node cluster. When requesting a multi-node cluster, you must specify the number of nodes that you want in the cluster.</p>
143    /// <p>Default: <code>1</code></p>
144    /// <p>Constraints: Value must be at least 1 and no more than 100.</p>
145    pub number_of_nodes: ::std::option::Option<i32>,
146    /// <p>If <code>true</code>, the cluster can be accessed from a public network.</p>
147    /// <p>Default: false</p>
148    pub publicly_accessible: ::std::option::Option<bool>,
149    /// <p>If <code>true</code>, the data in the cluster is encrypted at rest. If you set the value on this parameter to <code>false</code>, the request will fail.</p>
150    /// <p>Default: true</p>
151    pub encrypted: ::std::option::Option<bool>,
152    /// <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>
153    pub hsm_client_certificate_identifier: ::std::option::Option<::std::string::String>,
154    /// <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>
155    pub hsm_configuration_identifier: ::std::option::Option<::std::string::String>,
156    /// <p>The Elastic IP (EIP) address for the cluster.</p>
157    /// <p>Constraints: The cluster must be provisioned in EC2-VPC and publicly-accessible through an Internet gateway. Don't specify the Elastic IP address for a publicly accessible cluster with availability zone relocation turned on. 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>
158    pub elastic_ip: ::std::option::Option<::std::string::String>,
159    /// <p>A list of tag instances.</p>
160    pub tags: ::std::option::Option<::std::vec::Vec<crate::types::Tag>>,
161    /// <p>The Key Management Service (KMS) key ID of the encryption key that you want to use to encrypt data in the cluster.</p>
162    pub kms_key_id: ::std::option::Option<::std::string::String>,
163    /// <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>
164    /// <p>If this option is <code>true</code>, enhanced VPC routing is enabled.</p>
165    /// <p>Default: false</p>
166    pub enhanced_vpc_routing: ::std::option::Option<bool>,
167    /// <p>Reserved.</p>
168    pub additional_info: ::std::option::Option<::std::string::String>,
169    /// <p>A list of Identity and Access Management (IAM) roles that can be used by the cluster to access other Amazon Web Services services. You must supply the IAM roles in their Amazon Resource Name (ARN) format.</p>
170    /// <p>The maximum number of IAM roles that you can associate is subject to a quota. For more information, go to <a href="https://docs.aws.amazon.com/redshift/latest/mgmt/amazon-redshift-limits.html">Quotas and limits</a> in the <i>Amazon Redshift Cluster Management Guide</i>.</p>
171    pub iam_roles: ::std::option::Option<::std::vec::Vec<::std::string::String>>,
172    /// <p>An optional parameter for the name of the maintenance track for the cluster. If you don't provide a maintenance track name, the cluster is assigned to the <code>current</code> track.</p>
173    pub maintenance_track_name: ::std::option::Option<::std::string::String>,
174    /// <p>A unique identifier for the snapshot schedule.</p>
175    pub snapshot_schedule_identifier: ::std::option::Option<::std::string::String>,
176    /// <p>The option to enable relocation for an Amazon Redshift cluster between Availability Zones after the cluster is created.</p>
177    pub availability_zone_relocation: ::std::option::Option<bool>,
178    /// <p>This parameter is retired. It does not set the AQUA configuration status. Amazon Redshift automatically determines whether to use AQUA (Advanced Query Accelerator).</p>
179    pub aqua_configuration_status: ::std::option::Option<crate::types::AquaConfigurationStatus>,
180    /// <p>The Amazon Resource Name (ARN) for the IAM role that was set as default for the cluster when the cluster was created.</p>
181    pub default_iam_role_arn: ::std::option::Option<::std::string::String>,
182    /// <p>A flag that specifies whether to load sample data once the cluster is created.</p>
183    pub load_sample_data: ::std::option::Option<::std::string::String>,
184    /// <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>
185    pub manage_master_password: ::std::option::Option<bool>,
186    /// <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>
187    pub master_password_secret_kms_key_id: ::std::option::Option<::std::string::String>,
188    /// <p>The IP address types that the cluster supports. Possible values are <code>ipv4</code> and <code>dualstack</code>.</p>
189    pub ip_address_type: ::std::option::Option<::std::string::String>,
190    /// <p>If true, Amazon Redshift will deploy the cluster in two Availability Zones (AZ).</p>
191    pub multi_az: ::std::option::Option<bool>,
192    /// <p>The Amazon resource name (ARN) of the Amazon Redshift IAM Identity Center application.</p>
193    pub redshift_idc_application_arn: ::std::option::Option<::std::string::String>,
194    /// <p>The name of the Glue data catalog that will be associated with the cluster enabled with Amazon Redshift federated permissions.</p>
195    /// <p>Constraints:</p>
196    /// <ul>
197    /// <li>
198    /// <p>Must contain at least one lowercase letter.</p></li>
199    /// <li>
200    /// <p>Can only contain lowercase letters (a-z), numbers (0-9), underscores (_), and hyphens (-).</p></li>
201    /// </ul>
202    /// <p>Pattern: <code>^\[a-z0-9_-\]*\[a-z\]+\[a-z0-9_-\]*$</code></p>
203    /// <p>Example: <code>my-catalog_01</code></p>
204    pub catalog_name: ::std::option::Option<::std::string::String>,
205}
206impl CreateClusterInput {
207    /// <p>The name of the first database to be created when the cluster is created.</p>
208    /// <p>To create additional databases after the cluster is created, connect to the cluster with a SQL client and use SQL commands to create a database. For more information, go to <a href="https://docs.aws.amazon.com/redshift/latest/dg/t_creating_database.html">Create a Database</a> in the Amazon Redshift Database Developer Guide.</p>
209    /// <p>Default: <code>dev</code></p>
210    /// <p>Constraints:</p>
211    /// <ul>
212    /// <li>
213    /// <p>Must contain 1 to 64 alphanumeric characters.</p></li>
214    /// <li>
215    /// <p>Must contain only lowercase letters.</p></li>
216    /// <li>
217    /// <p>Cannot be a word that is reserved by the service. A list of reserved words can be found in <a href="https://docs.aws.amazon.com/redshift/latest/dg/r_pg_keywords.html">Reserved Words</a> in the Amazon Redshift Database Developer Guide.</p></li>
218    /// </ul>
219    pub fn db_name(&self) -> ::std::option::Option<&str> {
220        self.db_name.as_deref()
221    }
222    /// <p>A unique identifier for the cluster. You use this identifier to refer to the cluster for any subsequent cluster operations such as deleting or modifying. The identifier also appears in the Amazon Redshift console.</p>
223    /// <p>Constraints:</p>
224    /// <ul>
225    /// <li>
226    /// <p>Must contain from 1 to 63 alphanumeric characters or hyphens.</p></li>
227    /// <li>
228    /// <p>Alphabetic characters must be lowercase.</p></li>
229    /// <li>
230    /// <p>First character must be a letter.</p></li>
231    /// <li>
232    /// <p>Cannot end with a hyphen or contain two consecutive hyphens.</p></li>
233    /// <li>
234    /// <p>Must be unique for all clusters within an Amazon Web Services account.</p></li>
235    /// </ul>
236    /// <p>Example: <code>myexamplecluster</code></p>
237    pub fn cluster_identifier(&self) -> ::std::option::Option<&str> {
238        self.cluster_identifier.as_deref()
239    }
240    /// <p>The type of the cluster. When cluster type is specified as</p>
241    /// <ul>
242    /// <li>
243    /// <p><code>single-node</code>, the <b>NumberOfNodes</b> parameter is not required.</p></li>
244    /// <li>
245    /// <p><code>multi-node</code>, the <b>NumberOfNodes</b> parameter is required.</p></li>
246    /// </ul>
247    /// <p>Valid Values: <code>multi-node</code> | <code>single-node</code></p>
248    /// <p>Default: <code>multi-node</code></p>
249    pub fn cluster_type(&self) -> ::std::option::Option<&str> {
250        self.cluster_type.as_deref()
251    }
252    /// <p>The node type to be provisioned for the cluster. For information about node types, go to <a href="https://docs.aws.amazon.com/redshift/latest/mgmt/working-with-clusters.html#how-many-nodes"> Working with Clusters</a> in the <i>Amazon Redshift Cluster Management Guide</i>.</p>
253    /// <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>
254    pub fn node_type(&self) -> ::std::option::Option<&str> {
255        self.node_type.as_deref()
256    }
257    /// <p>The user name associated with the admin user account for the cluster that is being created.</p>
258    /// <p>Constraints:</p>
259    /// <ul>
260    /// <li>
261    /// <p>Must be 1 - 128 alphanumeric characters or hyphens. The user name can't be <code>PUBLIC</code>.</p></li>
262    /// <li>
263    /// <p>Must contain only lowercase letters, numbers, underscore, plus sign, period (dot), at symbol (@), or hyphen.</p></li>
264    /// <li>
265    /// <p>The first character must be a letter.</p></li>
266    /// <li>
267    /// <p>Must not contain a colon (:) or a slash (/).</p></li>
268    /// <li>
269    /// <p>Cannot be a reserved word. A list of reserved words can be found in <a href="https://docs.aws.amazon.com/redshift/latest/dg/r_pg_keywords.html">Reserved Words</a> in the Amazon Redshift Database Developer Guide.</p></li>
270    /// </ul>
271    pub fn master_username(&self) -> ::std::option::Option<&str> {
272        self.master_username.as_deref()
273    }
274    /// <p>The password associated with the admin user account for the cluster that is being created.</p>
275    /// <p>You can't use <code>MasterUserPassword</code> if <code>ManageMasterPassword</code> is <code>true</code>.</p>
276    /// <p>Constraints:</p>
277    /// <ul>
278    /// <li>
279    /// <p>Must be between 8 and 64 characters in length.</p></li>
280    /// <li>
281    /// <p>Must contain at least one uppercase letter.</p></li>
282    /// <li>
283    /// <p>Must contain at least one lowercase letter.</p></li>
284    /// <li>
285    /// <p>Must contain one number.</p></li>
286    /// <li>
287    /// <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>
288    /// </ul>
289    pub fn master_user_password(&self) -> ::std::option::Option<&str> {
290        self.master_user_password.as_deref()
291    }
292    /// <p>A list of security groups to be associated with this cluster.</p>
293    /// <p>Default: The default cluster security group for Amazon Redshift.</p>
294    ///
295    /// 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()`.
296    pub fn cluster_security_groups(&self) -> &[::std::string::String] {
297        self.cluster_security_groups.as_deref().unwrap_or_default()
298    }
299    /// <p>A list of Virtual Private Cloud (VPC) security groups to be associated with the cluster.</p>
300    /// <p>Default: The default VPC security group is associated with the cluster.</p>
301    ///
302    /// 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()`.
303    pub fn vpc_security_group_ids(&self) -> &[::std::string::String] {
304        self.vpc_security_group_ids.as_deref().unwrap_or_default()
305    }
306    /// <p>The name of a cluster subnet group to be associated with this cluster.</p>
307    /// <p>If this parameter is not provided the resulting cluster will be deployed outside virtual private cloud (VPC).</p>
308    pub fn cluster_subnet_group_name(&self) -> ::std::option::Option<&str> {
309        self.cluster_subnet_group_name.as_deref()
310    }
311    /// <p>The EC2 Availability Zone (AZ) in which you want Amazon Redshift to provision the cluster. For example, if you have several EC2 instances running in a specific Availability Zone, then you might want the cluster to be provisioned in the same zone in order to decrease network latency.</p>
312    /// <p>Default: A random, system-chosen Availability Zone in the region that is specified by the endpoint.</p>
313    /// <p>Example: <code>us-east-2d</code></p>
314    /// <p>Constraint: The specified Availability Zone must be in the same region as the current endpoint.</p>
315    pub fn availability_zone(&self) -> ::std::option::Option<&str> {
316        self.availability_zone.as_deref()
317    }
318    /// <p>The weekly time range (in UTC) during which automated cluster maintenance can occur.</p>
319    /// <p>Format: <code>ddd:hh24:mi-ddd:hh24:mi</code></p>
320    /// <p>Default: A 30-minute window selected at random from an 8-hour block of time per region, occurring on a random day of the week. For more information about the time blocks for each region, see <a href="https://docs.aws.amazon.com/redshift/latest/mgmt/working-with-clusters.html#rs-maintenance-windows">Maintenance Windows</a> in Amazon Redshift Cluster Management Guide.</p>
321    /// <p>Valid Days: Mon | Tue | Wed | Thu | Fri | Sat | Sun</p>
322    /// <p>Constraints: Minimum 30-minute window.</p>
323    pub fn preferred_maintenance_window(&self) -> ::std::option::Option<&str> {
324        self.preferred_maintenance_window.as_deref()
325    }
326    /// <p>The name of the parameter group to be associated with this cluster.</p>
327    /// <p>Default: The default Amazon Redshift cluster parameter group. For information about the default parameter group, go to <a href="https://docs.aws.amazon.com/redshift/latest/mgmt/working-with-parameter-groups.html">Working with Amazon Redshift Parameter Groups</a></p>
328    /// <p>Constraints:</p>
329    /// <ul>
330    /// <li>
331    /// <p>Must be 1 to 255 alphanumeric characters or hyphens.</p></li>
332    /// <li>
333    /// <p>First character must be a letter.</p></li>
334    /// <li>
335    /// <p>Cannot end with a hyphen or contain two consecutive hyphens.</p></li>
336    /// </ul>
337    pub fn cluster_parameter_group_name(&self) -> ::std::option::Option<&str> {
338        self.cluster_parameter_group_name.as_deref()
339    }
340    /// <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>
341    /// <p>You can't disable automated snapshots for RA3 node types. Set the automated retention period from 1-35 days.</p>
342    /// <p>Default: <code>1</code></p>
343    /// <p>Constraints: Must be a value from 0 to 35.</p>
344    pub fn automated_snapshot_retention_period(&self) -> ::std::option::Option<i32> {
345        self.automated_snapshot_retention_period
346    }
347    /// <p>The default number of days to retain a manual snapshot. If the value is -1, the snapshot is retained indefinitely. This setting doesn't change the retention period of existing snapshots.</p>
348    /// <p>The value must be either -1 or an integer between 1 and 3,653.</p>
349    pub fn manual_snapshot_retention_period(&self) -> ::std::option::Option<i32> {
350        self.manual_snapshot_retention_period
351    }
352    /// <p>The port number on which the cluster accepts incoming connections.</p>
353    /// <p>The cluster is accessible only via the JDBC and ODBC connection strings. Part of the connection string requires the port on which the cluster will listen for incoming connections.</p>
354    /// <p>Default: <code>5439</code></p>
355    /// <p>Valid Values:</p>
356    /// <ul>
357    /// <li>
358    /// <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>
359    /// <li>
360    /// <p>For clusters with dc2 nodes - Select a port within the range <code>1150-65535</code>.</p></li>
361    /// </ul>
362    pub fn port(&self) -> ::std::option::Option<i32> {
363        self.port
364    }
365    /// <p>The version of the Amazon Redshift engine software that you want to deploy on the cluster.</p>
366    /// <p>The version selected runs on all the nodes in the cluster.</p>
367    /// <p>Constraints: Only version 1.0 is currently available.</p>
368    /// <p>Example: <code>1.0</code></p>
369    pub fn cluster_version(&self) -> ::std::option::Option<&str> {
370        self.cluster_version.as_deref()
371    }
372    /// <p>If <code>true</code>, major version upgrades can be applied during the maintenance window to the Amazon Redshift engine that is running on the cluster.</p>
373    /// <p>When a new major version of the Amazon Redshift engine is released, you can request that the service automatically apply upgrades during the maintenance window to the Amazon Redshift engine that is running on your cluster.</p>
374    /// <p>Default: <code>true</code></p>
375    pub fn allow_version_upgrade(&self) -> ::std::option::Option<bool> {
376        self.allow_version_upgrade
377    }
378    /// <p>The number of compute nodes in the cluster. This parameter is required when the <b>ClusterType</b> parameter is specified as <code>multi-node</code>.</p>
379    /// <p>For information about determining how many nodes you need, go to <a href="https://docs.aws.amazon.com/redshift/latest/mgmt/working-with-clusters.html#how-many-nodes"> Working with Clusters</a> in the <i>Amazon Redshift Cluster Management Guide</i>.</p>
380    /// <p>If you don't specify this parameter, you get a single-node cluster. When requesting a multi-node cluster, you must specify the number of nodes that you want in the cluster.</p>
381    /// <p>Default: <code>1</code></p>
382    /// <p>Constraints: Value must be at least 1 and no more than 100.</p>
383    pub fn number_of_nodes(&self) -> ::std::option::Option<i32> {
384        self.number_of_nodes
385    }
386    /// <p>If <code>true</code>, the cluster can be accessed from a public network.</p>
387    /// <p>Default: false</p>
388    pub fn publicly_accessible(&self) -> ::std::option::Option<bool> {
389        self.publicly_accessible
390    }
391    /// <p>If <code>true</code>, the data in the cluster is encrypted at rest. If you set the value on this parameter to <code>false</code>, the request will fail.</p>
392    /// <p>Default: true</p>
393    pub fn encrypted(&self) -> ::std::option::Option<bool> {
394        self.encrypted
395    }
396    /// <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>
397    pub fn hsm_client_certificate_identifier(&self) -> ::std::option::Option<&str> {
398        self.hsm_client_certificate_identifier.as_deref()
399    }
400    /// <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>
401    pub fn hsm_configuration_identifier(&self) -> ::std::option::Option<&str> {
402        self.hsm_configuration_identifier.as_deref()
403    }
404    /// <p>The Elastic IP (EIP) address for the cluster.</p>
405    /// <p>Constraints: The cluster must be provisioned in EC2-VPC and publicly-accessible through an Internet gateway. Don't specify the Elastic IP address for a publicly accessible cluster with availability zone relocation turned on. 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>
406    pub fn elastic_ip(&self) -> ::std::option::Option<&str> {
407        self.elastic_ip.as_deref()
408    }
409    /// <p>A list of tag instances.</p>
410    ///
411    /// If no value was sent for this field, a default will be set. If you want to determine if no value was sent, use `.tags.is_none()`.
412    pub fn tags(&self) -> &[crate::types::Tag] {
413        self.tags.as_deref().unwrap_or_default()
414    }
415    /// <p>The Key Management Service (KMS) key ID of the encryption key that you want to use to encrypt data in the cluster.</p>
416    pub fn kms_key_id(&self) -> ::std::option::Option<&str> {
417        self.kms_key_id.as_deref()
418    }
419    /// <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>
420    /// <p>If this option is <code>true</code>, enhanced VPC routing is enabled.</p>
421    /// <p>Default: false</p>
422    pub fn enhanced_vpc_routing(&self) -> ::std::option::Option<bool> {
423        self.enhanced_vpc_routing
424    }
425    /// <p>Reserved.</p>
426    pub fn additional_info(&self) -> ::std::option::Option<&str> {
427        self.additional_info.as_deref()
428    }
429    /// <p>A list of Identity and Access Management (IAM) roles that can be used by the cluster to access other Amazon Web Services services. You must supply the IAM roles in their Amazon Resource Name (ARN) format.</p>
430    /// <p>The maximum number of IAM roles that you can associate is subject to a quota. For more information, go to <a href="https://docs.aws.amazon.com/redshift/latest/mgmt/amazon-redshift-limits.html">Quotas and limits</a> in the <i>Amazon Redshift Cluster Management Guide</i>.</p>
431    ///
432    /// If no value was sent for this field, a default will be set. If you want to determine if no value was sent, use `.iam_roles.is_none()`.
433    pub fn iam_roles(&self) -> &[::std::string::String] {
434        self.iam_roles.as_deref().unwrap_or_default()
435    }
436    /// <p>An optional parameter for the name of the maintenance track for the cluster. If you don't provide a maintenance track name, the cluster is assigned to the <code>current</code> track.</p>
437    pub fn maintenance_track_name(&self) -> ::std::option::Option<&str> {
438        self.maintenance_track_name.as_deref()
439    }
440    /// <p>A unique identifier for the snapshot schedule.</p>
441    pub fn snapshot_schedule_identifier(&self) -> ::std::option::Option<&str> {
442        self.snapshot_schedule_identifier.as_deref()
443    }
444    /// <p>The option to enable relocation for an Amazon Redshift cluster between Availability Zones after the cluster is created.</p>
445    pub fn availability_zone_relocation(&self) -> ::std::option::Option<bool> {
446        self.availability_zone_relocation
447    }
448    /// <p>This parameter is retired. It does not set the AQUA configuration status. Amazon Redshift automatically determines whether to use AQUA (Advanced Query Accelerator).</p>
449    pub fn aqua_configuration_status(&self) -> ::std::option::Option<&crate::types::AquaConfigurationStatus> {
450        self.aqua_configuration_status.as_ref()
451    }
452    /// <p>The Amazon Resource Name (ARN) for the IAM role that was set as default for the cluster when the cluster was created.</p>
453    pub fn default_iam_role_arn(&self) -> ::std::option::Option<&str> {
454        self.default_iam_role_arn.as_deref()
455    }
456    /// <p>A flag that specifies whether to load sample data once the cluster is created.</p>
457    pub fn load_sample_data(&self) -> ::std::option::Option<&str> {
458        self.load_sample_data.as_deref()
459    }
460    /// <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>
461    pub fn manage_master_password(&self) -> ::std::option::Option<bool> {
462        self.manage_master_password
463    }
464    /// <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>
465    pub fn master_password_secret_kms_key_id(&self) -> ::std::option::Option<&str> {
466        self.master_password_secret_kms_key_id.as_deref()
467    }
468    /// <p>The IP address types that the cluster supports. Possible values are <code>ipv4</code> and <code>dualstack</code>.</p>
469    pub fn ip_address_type(&self) -> ::std::option::Option<&str> {
470        self.ip_address_type.as_deref()
471    }
472    /// <p>If true, Amazon Redshift will deploy the cluster in two Availability Zones (AZ).</p>
473    pub fn multi_az(&self) -> ::std::option::Option<bool> {
474        self.multi_az
475    }
476    /// <p>The Amazon resource name (ARN) of the Amazon Redshift IAM Identity Center application.</p>
477    pub fn redshift_idc_application_arn(&self) -> ::std::option::Option<&str> {
478        self.redshift_idc_application_arn.as_deref()
479    }
480    /// <p>The name of the Glue data catalog that will be associated with the cluster enabled with Amazon Redshift federated permissions.</p>
481    /// <p>Constraints:</p>
482    /// <ul>
483    /// <li>
484    /// <p>Must contain at least one lowercase letter.</p></li>
485    /// <li>
486    /// <p>Can only contain lowercase letters (a-z), numbers (0-9), underscores (_), and hyphens (-).</p></li>
487    /// </ul>
488    /// <p>Pattern: <code>^\[a-z0-9_-\]*\[a-z\]+\[a-z0-9_-\]*$</code></p>
489    /// <p>Example: <code>my-catalog_01</code></p>
490    pub fn catalog_name(&self) -> ::std::option::Option<&str> {
491        self.catalog_name.as_deref()
492    }
493}
494impl ::std::fmt::Debug for CreateClusterInput {
495    fn fmt(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
496        let mut formatter = f.debug_struct("CreateClusterInput");
497        formatter.field("db_name", &self.db_name);
498        formatter.field("cluster_identifier", &self.cluster_identifier);
499        formatter.field("cluster_type", &self.cluster_type);
500        formatter.field("node_type", &self.node_type);
501        formatter.field("master_username", &self.master_username);
502        formatter.field("master_user_password", &"*** Sensitive Data Redacted ***");
503        formatter.field("cluster_security_groups", &self.cluster_security_groups);
504        formatter.field("vpc_security_group_ids", &self.vpc_security_group_ids);
505        formatter.field("cluster_subnet_group_name", &self.cluster_subnet_group_name);
506        formatter.field("availability_zone", &self.availability_zone);
507        formatter.field("preferred_maintenance_window", &self.preferred_maintenance_window);
508        formatter.field("cluster_parameter_group_name", &self.cluster_parameter_group_name);
509        formatter.field("automated_snapshot_retention_period", &self.automated_snapshot_retention_period);
510        formatter.field("manual_snapshot_retention_period", &self.manual_snapshot_retention_period);
511        formatter.field("port", &self.port);
512        formatter.field("cluster_version", &self.cluster_version);
513        formatter.field("allow_version_upgrade", &self.allow_version_upgrade);
514        formatter.field("number_of_nodes", &self.number_of_nodes);
515        formatter.field("publicly_accessible", &self.publicly_accessible);
516        formatter.field("encrypted", &self.encrypted);
517        formatter.field("hsm_client_certificate_identifier", &self.hsm_client_certificate_identifier);
518        formatter.field("hsm_configuration_identifier", &self.hsm_configuration_identifier);
519        formatter.field("elastic_ip", &self.elastic_ip);
520        formatter.field("tags", &self.tags);
521        formatter.field("kms_key_id", &self.kms_key_id);
522        formatter.field("enhanced_vpc_routing", &self.enhanced_vpc_routing);
523        formatter.field("additional_info", &self.additional_info);
524        formatter.field("iam_roles", &self.iam_roles);
525        formatter.field("maintenance_track_name", &self.maintenance_track_name);
526        formatter.field("snapshot_schedule_identifier", &self.snapshot_schedule_identifier);
527        formatter.field("availability_zone_relocation", &self.availability_zone_relocation);
528        formatter.field("aqua_configuration_status", &self.aqua_configuration_status);
529        formatter.field("default_iam_role_arn", &self.default_iam_role_arn);
530        formatter.field("load_sample_data", &self.load_sample_data);
531        formatter.field("manage_master_password", &self.manage_master_password);
532        formatter.field("master_password_secret_kms_key_id", &self.master_password_secret_kms_key_id);
533        formatter.field("ip_address_type", &self.ip_address_type);
534        formatter.field("multi_az", &self.multi_az);
535        formatter.field("redshift_idc_application_arn", &self.redshift_idc_application_arn);
536        formatter.field("catalog_name", &self.catalog_name);
537        formatter.finish()
538    }
539}
540impl CreateClusterInput {
541    /// Creates a new builder-style object to manufacture [`CreateClusterInput`](crate::operation::create_cluster::CreateClusterInput).
542    pub fn builder() -> crate::operation::create_cluster::builders::CreateClusterInputBuilder {
543        crate::operation::create_cluster::builders::CreateClusterInputBuilder::default()
544    }
545}
546
547/// A builder for [`CreateClusterInput`](crate::operation::create_cluster::CreateClusterInput).
548#[derive(::std::clone::Clone, ::std::cmp::PartialEq, ::std::default::Default)]
549#[non_exhaustive]
550pub struct CreateClusterInputBuilder {
551    pub(crate) db_name: ::std::option::Option<::std::string::String>,
552    pub(crate) cluster_identifier: ::std::option::Option<::std::string::String>,
553    pub(crate) cluster_type: ::std::option::Option<::std::string::String>,
554    pub(crate) node_type: ::std::option::Option<::std::string::String>,
555    pub(crate) master_username: ::std::option::Option<::std::string::String>,
556    pub(crate) master_user_password: ::std::option::Option<::std::string::String>,
557    pub(crate) cluster_security_groups: ::std::option::Option<::std::vec::Vec<::std::string::String>>,
558    pub(crate) vpc_security_group_ids: ::std::option::Option<::std::vec::Vec<::std::string::String>>,
559    pub(crate) cluster_subnet_group_name: ::std::option::Option<::std::string::String>,
560    pub(crate) availability_zone: ::std::option::Option<::std::string::String>,
561    pub(crate) preferred_maintenance_window: ::std::option::Option<::std::string::String>,
562    pub(crate) cluster_parameter_group_name: ::std::option::Option<::std::string::String>,
563    pub(crate) automated_snapshot_retention_period: ::std::option::Option<i32>,
564    pub(crate) manual_snapshot_retention_period: ::std::option::Option<i32>,
565    pub(crate) port: ::std::option::Option<i32>,
566    pub(crate) cluster_version: ::std::option::Option<::std::string::String>,
567    pub(crate) allow_version_upgrade: ::std::option::Option<bool>,
568    pub(crate) number_of_nodes: ::std::option::Option<i32>,
569    pub(crate) publicly_accessible: ::std::option::Option<bool>,
570    pub(crate) encrypted: ::std::option::Option<bool>,
571    pub(crate) hsm_client_certificate_identifier: ::std::option::Option<::std::string::String>,
572    pub(crate) hsm_configuration_identifier: ::std::option::Option<::std::string::String>,
573    pub(crate) elastic_ip: ::std::option::Option<::std::string::String>,
574    pub(crate) tags: ::std::option::Option<::std::vec::Vec<crate::types::Tag>>,
575    pub(crate) kms_key_id: ::std::option::Option<::std::string::String>,
576    pub(crate) enhanced_vpc_routing: ::std::option::Option<bool>,
577    pub(crate) additional_info: ::std::option::Option<::std::string::String>,
578    pub(crate) iam_roles: ::std::option::Option<::std::vec::Vec<::std::string::String>>,
579    pub(crate) maintenance_track_name: ::std::option::Option<::std::string::String>,
580    pub(crate) snapshot_schedule_identifier: ::std::option::Option<::std::string::String>,
581    pub(crate) availability_zone_relocation: ::std::option::Option<bool>,
582    pub(crate) aqua_configuration_status: ::std::option::Option<crate::types::AquaConfigurationStatus>,
583    pub(crate) default_iam_role_arn: ::std::option::Option<::std::string::String>,
584    pub(crate) load_sample_data: ::std::option::Option<::std::string::String>,
585    pub(crate) manage_master_password: ::std::option::Option<bool>,
586    pub(crate) master_password_secret_kms_key_id: ::std::option::Option<::std::string::String>,
587    pub(crate) ip_address_type: ::std::option::Option<::std::string::String>,
588    pub(crate) multi_az: ::std::option::Option<bool>,
589    pub(crate) redshift_idc_application_arn: ::std::option::Option<::std::string::String>,
590    pub(crate) catalog_name: ::std::option::Option<::std::string::String>,
591}
592impl CreateClusterInputBuilder {
593    /// <p>The name of the first database to be created when the cluster is created.</p>
594    /// <p>To create additional databases after the cluster is created, connect to the cluster with a SQL client and use SQL commands to create a database. For more information, go to <a href="https://docs.aws.amazon.com/redshift/latest/dg/t_creating_database.html">Create a Database</a> in the Amazon Redshift Database Developer Guide.</p>
595    /// <p>Default: <code>dev</code></p>
596    /// <p>Constraints:</p>
597    /// <ul>
598    /// <li>
599    /// <p>Must contain 1 to 64 alphanumeric characters.</p></li>
600    /// <li>
601    /// <p>Must contain only lowercase letters.</p></li>
602    /// <li>
603    /// <p>Cannot be a word that is reserved by the service. A list of reserved words can be found in <a href="https://docs.aws.amazon.com/redshift/latest/dg/r_pg_keywords.html">Reserved Words</a> in the Amazon Redshift Database Developer Guide.</p></li>
604    /// </ul>
605    pub fn db_name(mut self, input: impl ::std::convert::Into<::std::string::String>) -> Self {
606        self.db_name = ::std::option::Option::Some(input.into());
607        self
608    }
609    /// <p>The name of the first database to be created when the cluster is created.</p>
610    /// <p>To create additional databases after the cluster is created, connect to the cluster with a SQL client and use SQL commands to create a database. For more information, go to <a href="https://docs.aws.amazon.com/redshift/latest/dg/t_creating_database.html">Create a Database</a> in the Amazon Redshift Database Developer Guide.</p>
611    /// <p>Default: <code>dev</code></p>
612    /// <p>Constraints:</p>
613    /// <ul>
614    /// <li>
615    /// <p>Must contain 1 to 64 alphanumeric characters.</p></li>
616    /// <li>
617    /// <p>Must contain only lowercase letters.</p></li>
618    /// <li>
619    /// <p>Cannot be a word that is reserved by the service. A list of reserved words can be found in <a href="https://docs.aws.amazon.com/redshift/latest/dg/r_pg_keywords.html">Reserved Words</a> in the Amazon Redshift Database Developer Guide.</p></li>
620    /// </ul>
621    pub fn set_db_name(mut self, input: ::std::option::Option<::std::string::String>) -> Self {
622        self.db_name = input;
623        self
624    }
625    /// <p>The name of the first database to be created when the cluster is created.</p>
626    /// <p>To create additional databases after the cluster is created, connect to the cluster with a SQL client and use SQL commands to create a database. For more information, go to <a href="https://docs.aws.amazon.com/redshift/latest/dg/t_creating_database.html">Create a Database</a> in the Amazon Redshift Database Developer Guide.</p>
627    /// <p>Default: <code>dev</code></p>
628    /// <p>Constraints:</p>
629    /// <ul>
630    /// <li>
631    /// <p>Must contain 1 to 64 alphanumeric characters.</p></li>
632    /// <li>
633    /// <p>Must contain only lowercase letters.</p></li>
634    /// <li>
635    /// <p>Cannot be a word that is reserved by the service. A list of reserved words can be found in <a href="https://docs.aws.amazon.com/redshift/latest/dg/r_pg_keywords.html">Reserved Words</a> in the Amazon Redshift Database Developer Guide.</p></li>
636    /// </ul>
637    pub fn get_db_name(&self) -> &::std::option::Option<::std::string::String> {
638        &self.db_name
639    }
640    /// <p>A unique identifier for the cluster. You use this identifier to refer to the cluster for any subsequent cluster operations such as deleting or modifying. The identifier also appears in the Amazon Redshift console.</p>
641    /// <p>Constraints:</p>
642    /// <ul>
643    /// <li>
644    /// <p>Must contain from 1 to 63 alphanumeric characters or hyphens.</p></li>
645    /// <li>
646    /// <p>Alphabetic characters must be lowercase.</p></li>
647    /// <li>
648    /// <p>First character must be a letter.</p></li>
649    /// <li>
650    /// <p>Cannot end with a hyphen or contain two consecutive hyphens.</p></li>
651    /// <li>
652    /// <p>Must be unique for all clusters within an Amazon Web Services account.</p></li>
653    /// </ul>
654    /// <p>Example: <code>myexamplecluster</code></p>
655    /// This field is required.
656    pub fn cluster_identifier(mut self, input: impl ::std::convert::Into<::std::string::String>) -> Self {
657        self.cluster_identifier = ::std::option::Option::Some(input.into());
658        self
659    }
660    /// <p>A unique identifier for the cluster. You use this identifier to refer to the cluster for any subsequent cluster operations such as deleting or modifying. The identifier also appears in the Amazon Redshift console.</p>
661    /// <p>Constraints:</p>
662    /// <ul>
663    /// <li>
664    /// <p>Must contain from 1 to 63 alphanumeric characters or hyphens.</p></li>
665    /// <li>
666    /// <p>Alphabetic characters must be lowercase.</p></li>
667    /// <li>
668    /// <p>First character must be a letter.</p></li>
669    /// <li>
670    /// <p>Cannot end with a hyphen or contain two consecutive hyphens.</p></li>
671    /// <li>
672    /// <p>Must be unique for all clusters within an Amazon Web Services account.</p></li>
673    /// </ul>
674    /// <p>Example: <code>myexamplecluster</code></p>
675    pub fn set_cluster_identifier(mut self, input: ::std::option::Option<::std::string::String>) -> Self {
676        self.cluster_identifier = input;
677        self
678    }
679    /// <p>A unique identifier for the cluster. You use this identifier to refer to the cluster for any subsequent cluster operations such as deleting or modifying. The identifier also appears in the Amazon Redshift console.</p>
680    /// <p>Constraints:</p>
681    /// <ul>
682    /// <li>
683    /// <p>Must contain from 1 to 63 alphanumeric characters or hyphens.</p></li>
684    /// <li>
685    /// <p>Alphabetic characters must be lowercase.</p></li>
686    /// <li>
687    /// <p>First character must be a letter.</p></li>
688    /// <li>
689    /// <p>Cannot end with a hyphen or contain two consecutive hyphens.</p></li>
690    /// <li>
691    /// <p>Must be unique for all clusters within an Amazon Web Services account.</p></li>
692    /// </ul>
693    /// <p>Example: <code>myexamplecluster</code></p>
694    pub fn get_cluster_identifier(&self) -> &::std::option::Option<::std::string::String> {
695        &self.cluster_identifier
696    }
697    /// <p>The type of the cluster. When cluster type is specified as</p>
698    /// <ul>
699    /// <li>
700    /// <p><code>single-node</code>, the <b>NumberOfNodes</b> parameter is not required.</p></li>
701    /// <li>
702    /// <p><code>multi-node</code>, the <b>NumberOfNodes</b> parameter is required.</p></li>
703    /// </ul>
704    /// <p>Valid Values: <code>multi-node</code> | <code>single-node</code></p>
705    /// <p>Default: <code>multi-node</code></p>
706    pub fn cluster_type(mut self, input: impl ::std::convert::Into<::std::string::String>) -> Self {
707        self.cluster_type = ::std::option::Option::Some(input.into());
708        self
709    }
710    /// <p>The type of the cluster. When cluster type is specified as</p>
711    /// <ul>
712    /// <li>
713    /// <p><code>single-node</code>, the <b>NumberOfNodes</b> parameter is not required.</p></li>
714    /// <li>
715    /// <p><code>multi-node</code>, the <b>NumberOfNodes</b> parameter is required.</p></li>
716    /// </ul>
717    /// <p>Valid Values: <code>multi-node</code> | <code>single-node</code></p>
718    /// <p>Default: <code>multi-node</code></p>
719    pub fn set_cluster_type(mut self, input: ::std::option::Option<::std::string::String>) -> Self {
720        self.cluster_type = input;
721        self
722    }
723    /// <p>The type of the cluster. When cluster type is specified as</p>
724    /// <ul>
725    /// <li>
726    /// <p><code>single-node</code>, the <b>NumberOfNodes</b> parameter is not required.</p></li>
727    /// <li>
728    /// <p><code>multi-node</code>, the <b>NumberOfNodes</b> parameter is required.</p></li>
729    /// </ul>
730    /// <p>Valid Values: <code>multi-node</code> | <code>single-node</code></p>
731    /// <p>Default: <code>multi-node</code></p>
732    pub fn get_cluster_type(&self) -> &::std::option::Option<::std::string::String> {
733        &self.cluster_type
734    }
735    /// <p>The node type to be provisioned for the cluster. For information about node types, go to <a href="https://docs.aws.amazon.com/redshift/latest/mgmt/working-with-clusters.html#how-many-nodes"> Working with Clusters</a> in the <i>Amazon Redshift Cluster Management Guide</i>.</p>
736    /// <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>
737    /// This field is required.
738    pub fn node_type(mut self, input: impl ::std::convert::Into<::std::string::String>) -> Self {
739        self.node_type = ::std::option::Option::Some(input.into());
740        self
741    }
742    /// <p>The node type to be provisioned for the cluster. For information about node types, go to <a href="https://docs.aws.amazon.com/redshift/latest/mgmt/working-with-clusters.html#how-many-nodes"> Working with Clusters</a> in the <i>Amazon Redshift Cluster Management Guide</i>.</p>
743    /// <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>
744    pub fn set_node_type(mut self, input: ::std::option::Option<::std::string::String>) -> Self {
745        self.node_type = input;
746        self
747    }
748    /// <p>The node type to be provisioned for the cluster. For information about node types, go to <a href="https://docs.aws.amazon.com/redshift/latest/mgmt/working-with-clusters.html#how-many-nodes"> Working with Clusters</a> in the <i>Amazon Redshift Cluster Management Guide</i>.</p>
749    /// <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>
750    pub fn get_node_type(&self) -> &::std::option::Option<::std::string::String> {
751        &self.node_type
752    }
753    /// <p>The user name associated with the admin user account for the cluster that is being created.</p>
754    /// <p>Constraints:</p>
755    /// <ul>
756    /// <li>
757    /// <p>Must be 1 - 128 alphanumeric characters or hyphens. The user name can't be <code>PUBLIC</code>.</p></li>
758    /// <li>
759    /// <p>Must contain only lowercase letters, numbers, underscore, plus sign, period (dot), at symbol (@), or hyphen.</p></li>
760    /// <li>
761    /// <p>The first character must be a letter.</p></li>
762    /// <li>
763    /// <p>Must not contain a colon (:) or a slash (/).</p></li>
764    /// <li>
765    /// <p>Cannot be a reserved word. A list of reserved words can be found in <a href="https://docs.aws.amazon.com/redshift/latest/dg/r_pg_keywords.html">Reserved Words</a> in the Amazon Redshift Database Developer Guide.</p></li>
766    /// </ul>
767    /// This field is required.
768    pub fn master_username(mut self, input: impl ::std::convert::Into<::std::string::String>) -> Self {
769        self.master_username = ::std::option::Option::Some(input.into());
770        self
771    }
772    /// <p>The user name associated with the admin user account for the cluster that is being created.</p>
773    /// <p>Constraints:</p>
774    /// <ul>
775    /// <li>
776    /// <p>Must be 1 - 128 alphanumeric characters or hyphens. The user name can't be <code>PUBLIC</code>.</p></li>
777    /// <li>
778    /// <p>Must contain only lowercase letters, numbers, underscore, plus sign, period (dot), at symbol (@), or hyphen.</p></li>
779    /// <li>
780    /// <p>The first character must be a letter.</p></li>
781    /// <li>
782    /// <p>Must not contain a colon (:) or a slash (/).</p></li>
783    /// <li>
784    /// <p>Cannot be a reserved word. A list of reserved words can be found in <a href="https://docs.aws.amazon.com/redshift/latest/dg/r_pg_keywords.html">Reserved Words</a> in the Amazon Redshift Database Developer Guide.</p></li>
785    /// </ul>
786    pub fn set_master_username(mut self, input: ::std::option::Option<::std::string::String>) -> Self {
787        self.master_username = input;
788        self
789    }
790    /// <p>The user name associated with the admin user account for the cluster that is being created.</p>
791    /// <p>Constraints:</p>
792    /// <ul>
793    /// <li>
794    /// <p>Must be 1 - 128 alphanumeric characters or hyphens. The user name can't be <code>PUBLIC</code>.</p></li>
795    /// <li>
796    /// <p>Must contain only lowercase letters, numbers, underscore, plus sign, period (dot), at symbol (@), or hyphen.</p></li>
797    /// <li>
798    /// <p>The first character must be a letter.</p></li>
799    /// <li>
800    /// <p>Must not contain a colon (:) or a slash (/).</p></li>
801    /// <li>
802    /// <p>Cannot be a reserved word. A list of reserved words can be found in <a href="https://docs.aws.amazon.com/redshift/latest/dg/r_pg_keywords.html">Reserved Words</a> in the Amazon Redshift Database Developer Guide.</p></li>
803    /// </ul>
804    pub fn get_master_username(&self) -> &::std::option::Option<::std::string::String> {
805        &self.master_username
806    }
807    /// <p>The password associated with the admin user account for the cluster that is being created.</p>
808    /// <p>You can't use <code>MasterUserPassword</code> if <code>ManageMasterPassword</code> is <code>true</code>.</p>
809    /// <p>Constraints:</p>
810    /// <ul>
811    /// <li>
812    /// <p>Must be between 8 and 64 characters in length.</p></li>
813    /// <li>
814    /// <p>Must contain at least one uppercase letter.</p></li>
815    /// <li>
816    /// <p>Must contain at least one lowercase letter.</p></li>
817    /// <li>
818    /// <p>Must contain one number.</p></li>
819    /// <li>
820    /// <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>
821    /// </ul>
822    pub fn master_user_password(mut self, input: impl ::std::convert::Into<::std::string::String>) -> Self {
823        self.master_user_password = ::std::option::Option::Some(input.into());
824        self
825    }
826    /// <p>The password associated with the admin user account for the cluster that is being created.</p>
827    /// <p>You can't use <code>MasterUserPassword</code> if <code>ManageMasterPassword</code> is <code>true</code>.</p>
828    /// <p>Constraints:</p>
829    /// <ul>
830    /// <li>
831    /// <p>Must be between 8 and 64 characters in length.</p></li>
832    /// <li>
833    /// <p>Must contain at least one uppercase letter.</p></li>
834    /// <li>
835    /// <p>Must contain at least one lowercase letter.</p></li>
836    /// <li>
837    /// <p>Must contain one number.</p></li>
838    /// <li>
839    /// <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>
840    /// </ul>
841    pub fn set_master_user_password(mut self, input: ::std::option::Option<::std::string::String>) -> Self {
842        self.master_user_password = input;
843        self
844    }
845    /// <p>The password associated with the admin user account for the cluster that is being created.</p>
846    /// <p>You can't use <code>MasterUserPassword</code> if <code>ManageMasterPassword</code> is <code>true</code>.</p>
847    /// <p>Constraints:</p>
848    /// <ul>
849    /// <li>
850    /// <p>Must be between 8 and 64 characters in length.</p></li>
851    /// <li>
852    /// <p>Must contain at least one uppercase letter.</p></li>
853    /// <li>
854    /// <p>Must contain at least one lowercase letter.</p></li>
855    /// <li>
856    /// <p>Must contain one number.</p></li>
857    /// <li>
858    /// <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>
859    /// </ul>
860    pub fn get_master_user_password(&self) -> &::std::option::Option<::std::string::String> {
861        &self.master_user_password
862    }
863    /// Appends an item to `cluster_security_groups`.
864    ///
865    /// To override the contents of this collection use [`set_cluster_security_groups`](Self::set_cluster_security_groups).
866    ///
867    /// <p>A list of security groups to be associated with this cluster.</p>
868    /// <p>Default: The default cluster security group for Amazon Redshift.</p>
869    pub fn cluster_security_groups(mut self, input: impl ::std::convert::Into<::std::string::String>) -> Self {
870        let mut v = self.cluster_security_groups.unwrap_or_default();
871        v.push(input.into());
872        self.cluster_security_groups = ::std::option::Option::Some(v);
873        self
874    }
875    /// <p>A list of security groups to be associated with this cluster.</p>
876    /// <p>Default: The default cluster security group for Amazon Redshift.</p>
877    pub fn set_cluster_security_groups(mut self, input: ::std::option::Option<::std::vec::Vec<::std::string::String>>) -> Self {
878        self.cluster_security_groups = input;
879        self
880    }
881    /// <p>A list of security groups to be associated with this cluster.</p>
882    /// <p>Default: The default cluster security group for Amazon Redshift.</p>
883    pub fn get_cluster_security_groups(&self) -> &::std::option::Option<::std::vec::Vec<::std::string::String>> {
884        &self.cluster_security_groups
885    }
886    /// Appends an item to `vpc_security_group_ids`.
887    ///
888    /// To override the contents of this collection use [`set_vpc_security_group_ids`](Self::set_vpc_security_group_ids).
889    ///
890    /// <p>A list of Virtual Private Cloud (VPC) security groups to be associated with the cluster.</p>
891    /// <p>Default: The default VPC security group is associated with the cluster.</p>
892    pub fn vpc_security_group_ids(mut self, input: impl ::std::convert::Into<::std::string::String>) -> Self {
893        let mut v = self.vpc_security_group_ids.unwrap_or_default();
894        v.push(input.into());
895        self.vpc_security_group_ids = ::std::option::Option::Some(v);
896        self
897    }
898    /// <p>A list of Virtual Private Cloud (VPC) security groups to be associated with the cluster.</p>
899    /// <p>Default: The default VPC security group is associated with the cluster.</p>
900    pub fn set_vpc_security_group_ids(mut self, input: ::std::option::Option<::std::vec::Vec<::std::string::String>>) -> Self {
901        self.vpc_security_group_ids = input;
902        self
903    }
904    /// <p>A list of Virtual Private Cloud (VPC) security groups to be associated with the cluster.</p>
905    /// <p>Default: The default VPC security group is associated with the cluster.</p>
906    pub fn get_vpc_security_group_ids(&self) -> &::std::option::Option<::std::vec::Vec<::std::string::String>> {
907        &self.vpc_security_group_ids
908    }
909    /// <p>The name of a cluster subnet group to be associated with this cluster.</p>
910    /// <p>If this parameter is not provided the resulting cluster will be deployed outside virtual private cloud (VPC).</p>
911    pub fn cluster_subnet_group_name(mut self, input: impl ::std::convert::Into<::std::string::String>) -> Self {
912        self.cluster_subnet_group_name = ::std::option::Option::Some(input.into());
913        self
914    }
915    /// <p>The name of a cluster subnet group to be associated with this cluster.</p>
916    /// <p>If this parameter is not provided the resulting cluster will be deployed outside virtual private cloud (VPC).</p>
917    pub fn set_cluster_subnet_group_name(mut self, input: ::std::option::Option<::std::string::String>) -> Self {
918        self.cluster_subnet_group_name = input;
919        self
920    }
921    /// <p>The name of a cluster subnet group to be associated with this cluster.</p>
922    /// <p>If this parameter is not provided the resulting cluster will be deployed outside virtual private cloud (VPC).</p>
923    pub fn get_cluster_subnet_group_name(&self) -> &::std::option::Option<::std::string::String> {
924        &self.cluster_subnet_group_name
925    }
926    /// <p>The EC2 Availability Zone (AZ) in which you want Amazon Redshift to provision the cluster. For example, if you have several EC2 instances running in a specific Availability Zone, then you might want the cluster to be provisioned in the same zone in order to decrease network latency.</p>
927    /// <p>Default: A random, system-chosen Availability Zone in the region that is specified by the endpoint.</p>
928    /// <p>Example: <code>us-east-2d</code></p>
929    /// <p>Constraint: The specified Availability Zone must be in the same region as the current endpoint.</p>
930    pub fn availability_zone(mut self, input: impl ::std::convert::Into<::std::string::String>) -> Self {
931        self.availability_zone = ::std::option::Option::Some(input.into());
932        self
933    }
934    /// <p>The EC2 Availability Zone (AZ) in which you want Amazon Redshift to provision the cluster. For example, if you have several EC2 instances running in a specific Availability Zone, then you might want the cluster to be provisioned in the same zone in order to decrease network latency.</p>
935    /// <p>Default: A random, system-chosen Availability Zone in the region that is specified by the endpoint.</p>
936    /// <p>Example: <code>us-east-2d</code></p>
937    /// <p>Constraint: The specified Availability Zone must be in the same region as the current endpoint.</p>
938    pub fn set_availability_zone(mut self, input: ::std::option::Option<::std::string::String>) -> Self {
939        self.availability_zone = input;
940        self
941    }
942    /// <p>The EC2 Availability Zone (AZ) in which you want Amazon Redshift to provision the cluster. For example, if you have several EC2 instances running in a specific Availability Zone, then you might want the cluster to be provisioned in the same zone in order to decrease network latency.</p>
943    /// <p>Default: A random, system-chosen Availability Zone in the region that is specified by the endpoint.</p>
944    /// <p>Example: <code>us-east-2d</code></p>
945    /// <p>Constraint: The specified Availability Zone must be in the same region as the current endpoint.</p>
946    pub fn get_availability_zone(&self) -> &::std::option::Option<::std::string::String> {
947        &self.availability_zone
948    }
949    /// <p>The weekly time range (in UTC) during which automated cluster maintenance can occur.</p>
950    /// <p>Format: <code>ddd:hh24:mi-ddd:hh24:mi</code></p>
951    /// <p>Default: A 30-minute window selected at random from an 8-hour block of time per region, occurring on a random day of the week. For more information about the time blocks for each region, see <a href="https://docs.aws.amazon.com/redshift/latest/mgmt/working-with-clusters.html#rs-maintenance-windows">Maintenance Windows</a> in Amazon Redshift Cluster Management Guide.</p>
952    /// <p>Valid Days: Mon | Tue | Wed | Thu | Fri | Sat | Sun</p>
953    /// <p>Constraints: Minimum 30-minute window.</p>
954    pub fn preferred_maintenance_window(mut self, input: impl ::std::convert::Into<::std::string::String>) -> Self {
955        self.preferred_maintenance_window = ::std::option::Option::Some(input.into());
956        self
957    }
958    /// <p>The weekly time range (in UTC) during which automated cluster maintenance can occur.</p>
959    /// <p>Format: <code>ddd:hh24:mi-ddd:hh24:mi</code></p>
960    /// <p>Default: A 30-minute window selected at random from an 8-hour block of time per region, occurring on a random day of the week. For more information about the time blocks for each region, see <a href="https://docs.aws.amazon.com/redshift/latest/mgmt/working-with-clusters.html#rs-maintenance-windows">Maintenance Windows</a> in Amazon Redshift Cluster Management Guide.</p>
961    /// <p>Valid Days: Mon | Tue | Wed | Thu | Fri | Sat | Sun</p>
962    /// <p>Constraints: Minimum 30-minute window.</p>
963    pub fn set_preferred_maintenance_window(mut self, input: ::std::option::Option<::std::string::String>) -> Self {
964        self.preferred_maintenance_window = input;
965        self
966    }
967    /// <p>The weekly time range (in UTC) during which automated cluster maintenance can occur.</p>
968    /// <p>Format: <code>ddd:hh24:mi-ddd:hh24:mi</code></p>
969    /// <p>Default: A 30-minute window selected at random from an 8-hour block of time per region, occurring on a random day of the week. For more information about the time blocks for each region, see <a href="https://docs.aws.amazon.com/redshift/latest/mgmt/working-with-clusters.html#rs-maintenance-windows">Maintenance Windows</a> in Amazon Redshift Cluster Management Guide.</p>
970    /// <p>Valid Days: Mon | Tue | Wed | Thu | Fri | Sat | Sun</p>
971    /// <p>Constraints: Minimum 30-minute window.</p>
972    pub fn get_preferred_maintenance_window(&self) -> &::std::option::Option<::std::string::String> {
973        &self.preferred_maintenance_window
974    }
975    /// <p>The name of the parameter group to be associated with this cluster.</p>
976    /// <p>Default: The default Amazon Redshift cluster parameter group. For information about the default parameter group, go to <a href="https://docs.aws.amazon.com/redshift/latest/mgmt/working-with-parameter-groups.html">Working with Amazon Redshift Parameter Groups</a></p>
977    /// <p>Constraints:</p>
978    /// <ul>
979    /// <li>
980    /// <p>Must be 1 to 255 alphanumeric characters or hyphens.</p></li>
981    /// <li>
982    /// <p>First character must be a letter.</p></li>
983    /// <li>
984    /// <p>Cannot end with a hyphen or contain two consecutive hyphens.</p></li>
985    /// </ul>
986    pub fn cluster_parameter_group_name(mut self, input: impl ::std::convert::Into<::std::string::String>) -> Self {
987        self.cluster_parameter_group_name = ::std::option::Option::Some(input.into());
988        self
989    }
990    /// <p>The name of the parameter group to be associated with this cluster.</p>
991    /// <p>Default: The default Amazon Redshift cluster parameter group. For information about the default parameter group, go to <a href="https://docs.aws.amazon.com/redshift/latest/mgmt/working-with-parameter-groups.html">Working with Amazon Redshift Parameter Groups</a></p>
992    /// <p>Constraints:</p>
993    /// <ul>
994    /// <li>
995    /// <p>Must be 1 to 255 alphanumeric characters or hyphens.</p></li>
996    /// <li>
997    /// <p>First character must be a letter.</p></li>
998    /// <li>
999    /// <p>Cannot end with a hyphen or contain two consecutive hyphens.</p></li>
1000    /// </ul>
1001    pub fn set_cluster_parameter_group_name(mut self, input: ::std::option::Option<::std::string::String>) -> Self {
1002        self.cluster_parameter_group_name = input;
1003        self
1004    }
1005    /// <p>The name of the parameter group to be associated with this cluster.</p>
1006    /// <p>Default: The default Amazon Redshift cluster parameter group. For information about the default parameter group, go to <a href="https://docs.aws.amazon.com/redshift/latest/mgmt/working-with-parameter-groups.html">Working with Amazon Redshift Parameter Groups</a></p>
1007    /// <p>Constraints:</p>
1008    /// <ul>
1009    /// <li>
1010    /// <p>Must be 1 to 255 alphanumeric characters or hyphens.</p></li>
1011    /// <li>
1012    /// <p>First character must be a letter.</p></li>
1013    /// <li>
1014    /// <p>Cannot end with a hyphen or contain two consecutive hyphens.</p></li>
1015    /// </ul>
1016    pub fn get_cluster_parameter_group_name(&self) -> &::std::option::Option<::std::string::String> {
1017        &self.cluster_parameter_group_name
1018    }
1019    /// <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>
1020    /// <p>You can't disable automated snapshots for RA3 node types. Set the automated retention period from 1-35 days.</p>
1021    /// <p>Default: <code>1</code></p>
1022    /// <p>Constraints: Must be a value from 0 to 35.</p>
1023    pub fn automated_snapshot_retention_period(mut self, input: i32) -> Self {
1024        self.automated_snapshot_retention_period = ::std::option::Option::Some(input);
1025        self
1026    }
1027    /// <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>
1028    /// <p>You can't disable automated snapshots for RA3 node types. Set the automated retention period from 1-35 days.</p>
1029    /// <p>Default: <code>1</code></p>
1030    /// <p>Constraints: Must be a value from 0 to 35.</p>
1031    pub fn set_automated_snapshot_retention_period(mut self, input: ::std::option::Option<i32>) -> Self {
1032        self.automated_snapshot_retention_period = input;
1033        self
1034    }
1035    /// <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>
1036    /// <p>You can't disable automated snapshots for RA3 node types. Set the automated retention period from 1-35 days.</p>
1037    /// <p>Default: <code>1</code></p>
1038    /// <p>Constraints: Must be a value from 0 to 35.</p>
1039    pub fn get_automated_snapshot_retention_period(&self) -> &::std::option::Option<i32> {
1040        &self.automated_snapshot_retention_period
1041    }
1042    /// <p>The default number of days to retain a manual snapshot. If the value is -1, the snapshot is retained indefinitely. This setting doesn't change the retention period of existing snapshots.</p>
1043    /// <p>The value must be either -1 or an integer between 1 and 3,653.</p>
1044    pub fn manual_snapshot_retention_period(mut self, input: i32) -> Self {
1045        self.manual_snapshot_retention_period = ::std::option::Option::Some(input);
1046        self
1047    }
1048    /// <p>The default number of days to retain a manual snapshot. If the value is -1, the snapshot is retained indefinitely. This setting doesn't change the retention period of existing snapshots.</p>
1049    /// <p>The value must be either -1 or an integer between 1 and 3,653.</p>
1050    pub fn set_manual_snapshot_retention_period(mut self, input: ::std::option::Option<i32>) -> Self {
1051        self.manual_snapshot_retention_period = input;
1052        self
1053    }
1054    /// <p>The default number of days to retain a manual snapshot. If the value is -1, the snapshot is retained indefinitely. This setting doesn't change the retention period of existing snapshots.</p>
1055    /// <p>The value must be either -1 or an integer between 1 and 3,653.</p>
1056    pub fn get_manual_snapshot_retention_period(&self) -> &::std::option::Option<i32> {
1057        &self.manual_snapshot_retention_period
1058    }
1059    /// <p>The port number on which the cluster accepts incoming connections.</p>
1060    /// <p>The cluster is accessible only via the JDBC and ODBC connection strings. Part of the connection string requires the port on which the cluster will listen for incoming connections.</p>
1061    /// <p>Default: <code>5439</code></p>
1062    /// <p>Valid Values:</p>
1063    /// <ul>
1064    /// <li>
1065    /// <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>
1066    /// <li>
1067    /// <p>For clusters with dc2 nodes - Select a port within the range <code>1150-65535</code>.</p></li>
1068    /// </ul>
1069    pub fn port(mut self, input: i32) -> Self {
1070        self.port = ::std::option::Option::Some(input);
1071        self
1072    }
1073    /// <p>The port number on which the cluster accepts incoming connections.</p>
1074    /// <p>The cluster is accessible only via the JDBC and ODBC connection strings. Part of the connection string requires the port on which the cluster will listen for incoming connections.</p>
1075    /// <p>Default: <code>5439</code></p>
1076    /// <p>Valid Values:</p>
1077    /// <ul>
1078    /// <li>
1079    /// <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>
1080    /// <li>
1081    /// <p>For clusters with dc2 nodes - Select a port within the range <code>1150-65535</code>.</p></li>
1082    /// </ul>
1083    pub fn set_port(mut self, input: ::std::option::Option<i32>) -> Self {
1084        self.port = input;
1085        self
1086    }
1087    /// <p>The port number on which the cluster accepts incoming connections.</p>
1088    /// <p>The cluster is accessible only via the JDBC and ODBC connection strings. Part of the connection string requires the port on which the cluster will listen for incoming connections.</p>
1089    /// <p>Default: <code>5439</code></p>
1090    /// <p>Valid Values:</p>
1091    /// <ul>
1092    /// <li>
1093    /// <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>
1094    /// <li>
1095    /// <p>For clusters with dc2 nodes - Select a port within the range <code>1150-65535</code>.</p></li>
1096    /// </ul>
1097    pub fn get_port(&self) -> &::std::option::Option<i32> {
1098        &self.port
1099    }
1100    /// <p>The version of the Amazon Redshift engine software that you want to deploy on the cluster.</p>
1101    /// <p>The version selected runs on all the nodes in the cluster.</p>
1102    /// <p>Constraints: Only version 1.0 is currently available.</p>
1103    /// <p>Example: <code>1.0</code></p>
1104    pub fn cluster_version(mut self, input: impl ::std::convert::Into<::std::string::String>) -> Self {
1105        self.cluster_version = ::std::option::Option::Some(input.into());
1106        self
1107    }
1108    /// <p>The version of the Amazon Redshift engine software that you want to deploy on the cluster.</p>
1109    /// <p>The version selected runs on all the nodes in the cluster.</p>
1110    /// <p>Constraints: Only version 1.0 is currently available.</p>
1111    /// <p>Example: <code>1.0</code></p>
1112    pub fn set_cluster_version(mut self, input: ::std::option::Option<::std::string::String>) -> Self {
1113        self.cluster_version = input;
1114        self
1115    }
1116    /// <p>The version of the Amazon Redshift engine software that you want to deploy on the cluster.</p>
1117    /// <p>The version selected runs on all the nodes in the cluster.</p>
1118    /// <p>Constraints: Only version 1.0 is currently available.</p>
1119    /// <p>Example: <code>1.0</code></p>
1120    pub fn get_cluster_version(&self) -> &::std::option::Option<::std::string::String> {
1121        &self.cluster_version
1122    }
1123    /// <p>If <code>true</code>, major version upgrades can be applied during the maintenance window to the Amazon Redshift engine that is running on the cluster.</p>
1124    /// <p>When a new major version of the Amazon Redshift engine is released, you can request that the service automatically apply upgrades during the maintenance window to the Amazon Redshift engine that is running on your cluster.</p>
1125    /// <p>Default: <code>true</code></p>
1126    pub fn allow_version_upgrade(mut self, input: bool) -> Self {
1127        self.allow_version_upgrade = ::std::option::Option::Some(input);
1128        self
1129    }
1130    /// <p>If <code>true</code>, major version upgrades can be applied during the maintenance window to the Amazon Redshift engine that is running on the cluster.</p>
1131    /// <p>When a new major version of the Amazon Redshift engine is released, you can request that the service automatically apply upgrades during the maintenance window to the Amazon Redshift engine that is running on your cluster.</p>
1132    /// <p>Default: <code>true</code></p>
1133    pub fn set_allow_version_upgrade(mut self, input: ::std::option::Option<bool>) -> Self {
1134        self.allow_version_upgrade = input;
1135        self
1136    }
1137    /// <p>If <code>true</code>, major version upgrades can be applied during the maintenance window to the Amazon Redshift engine that is running on the cluster.</p>
1138    /// <p>When a new major version of the Amazon Redshift engine is released, you can request that the service automatically apply upgrades during the maintenance window to the Amazon Redshift engine that is running on your cluster.</p>
1139    /// <p>Default: <code>true</code></p>
1140    pub fn get_allow_version_upgrade(&self) -> &::std::option::Option<bool> {
1141        &self.allow_version_upgrade
1142    }
1143    /// <p>The number of compute nodes in the cluster. This parameter is required when the <b>ClusterType</b> parameter is specified as <code>multi-node</code>.</p>
1144    /// <p>For information about determining how many nodes you need, go to <a href="https://docs.aws.amazon.com/redshift/latest/mgmt/working-with-clusters.html#how-many-nodes"> Working with Clusters</a> in the <i>Amazon Redshift Cluster Management Guide</i>.</p>
1145    /// <p>If you don't specify this parameter, you get a single-node cluster. When requesting a multi-node cluster, you must specify the number of nodes that you want in the cluster.</p>
1146    /// <p>Default: <code>1</code></p>
1147    /// <p>Constraints: Value must be at least 1 and no more than 100.</p>
1148    pub fn number_of_nodes(mut self, input: i32) -> Self {
1149        self.number_of_nodes = ::std::option::Option::Some(input);
1150        self
1151    }
1152    /// <p>The number of compute nodes in the cluster. This parameter is required when the <b>ClusterType</b> parameter is specified as <code>multi-node</code>.</p>
1153    /// <p>For information about determining how many nodes you need, go to <a href="https://docs.aws.amazon.com/redshift/latest/mgmt/working-with-clusters.html#how-many-nodes"> Working with Clusters</a> in the <i>Amazon Redshift Cluster Management Guide</i>.</p>
1154    /// <p>If you don't specify this parameter, you get a single-node cluster. When requesting a multi-node cluster, you must specify the number of nodes that you want in the cluster.</p>
1155    /// <p>Default: <code>1</code></p>
1156    /// <p>Constraints: Value must be at least 1 and no more than 100.</p>
1157    pub fn set_number_of_nodes(mut self, input: ::std::option::Option<i32>) -> Self {
1158        self.number_of_nodes = input;
1159        self
1160    }
1161    /// <p>The number of compute nodes in the cluster. This parameter is required when the <b>ClusterType</b> parameter is specified as <code>multi-node</code>.</p>
1162    /// <p>For information about determining how many nodes you need, go to <a href="https://docs.aws.amazon.com/redshift/latest/mgmt/working-with-clusters.html#how-many-nodes"> Working with Clusters</a> in the <i>Amazon Redshift Cluster Management Guide</i>.</p>
1163    /// <p>If you don't specify this parameter, you get a single-node cluster. When requesting a multi-node cluster, you must specify the number of nodes that you want in the cluster.</p>
1164    /// <p>Default: <code>1</code></p>
1165    /// <p>Constraints: Value must be at least 1 and no more than 100.</p>
1166    pub fn get_number_of_nodes(&self) -> &::std::option::Option<i32> {
1167        &self.number_of_nodes
1168    }
1169    /// <p>If <code>true</code>, the cluster can be accessed from a public network.</p>
1170    /// <p>Default: false</p>
1171    pub fn publicly_accessible(mut self, input: bool) -> Self {
1172        self.publicly_accessible = ::std::option::Option::Some(input);
1173        self
1174    }
1175    /// <p>If <code>true</code>, the cluster can be accessed from a public network.</p>
1176    /// <p>Default: false</p>
1177    pub fn set_publicly_accessible(mut self, input: ::std::option::Option<bool>) -> Self {
1178        self.publicly_accessible = input;
1179        self
1180    }
1181    /// <p>If <code>true</code>, the cluster can be accessed from a public network.</p>
1182    /// <p>Default: false</p>
1183    pub fn get_publicly_accessible(&self) -> &::std::option::Option<bool> {
1184        &self.publicly_accessible
1185    }
1186    /// <p>If <code>true</code>, the data in the cluster is encrypted at rest. If you set the value on this parameter to <code>false</code>, the request will fail.</p>
1187    /// <p>Default: true</p>
1188    pub fn encrypted(mut self, input: bool) -> Self {
1189        self.encrypted = ::std::option::Option::Some(input);
1190        self
1191    }
1192    /// <p>If <code>true</code>, the data in the cluster is encrypted at rest. If you set the value on this parameter to <code>false</code>, the request will fail.</p>
1193    /// <p>Default: true</p>
1194    pub fn set_encrypted(mut self, input: ::std::option::Option<bool>) -> Self {
1195        self.encrypted = input;
1196        self
1197    }
1198    /// <p>If <code>true</code>, the data in the cluster is encrypted at rest. If you set the value on this parameter to <code>false</code>, the request will fail.</p>
1199    /// <p>Default: true</p>
1200    pub fn get_encrypted(&self) -> &::std::option::Option<bool> {
1201        &self.encrypted
1202    }
1203    /// <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>
1204    pub fn hsm_client_certificate_identifier(mut self, input: impl ::std::convert::Into<::std::string::String>) -> Self {
1205        self.hsm_client_certificate_identifier = ::std::option::Option::Some(input.into());
1206        self
1207    }
1208    /// <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>
1209    pub fn set_hsm_client_certificate_identifier(mut self, input: ::std::option::Option<::std::string::String>) -> Self {
1210        self.hsm_client_certificate_identifier = input;
1211        self
1212    }
1213    /// <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>
1214    pub fn get_hsm_client_certificate_identifier(&self) -> &::std::option::Option<::std::string::String> {
1215        &self.hsm_client_certificate_identifier
1216    }
1217    /// <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>
1218    pub fn hsm_configuration_identifier(mut self, input: impl ::std::convert::Into<::std::string::String>) -> Self {
1219        self.hsm_configuration_identifier = ::std::option::Option::Some(input.into());
1220        self
1221    }
1222    /// <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>
1223    pub fn set_hsm_configuration_identifier(mut self, input: ::std::option::Option<::std::string::String>) -> Self {
1224        self.hsm_configuration_identifier = input;
1225        self
1226    }
1227    /// <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>
1228    pub fn get_hsm_configuration_identifier(&self) -> &::std::option::Option<::std::string::String> {
1229        &self.hsm_configuration_identifier
1230    }
1231    /// <p>The Elastic IP (EIP) address for the cluster.</p>
1232    /// <p>Constraints: The cluster must be provisioned in EC2-VPC and publicly-accessible through an Internet gateway. Don't specify the Elastic IP address for a publicly accessible cluster with availability zone relocation turned on. 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>
1233    pub fn elastic_ip(mut self, input: impl ::std::convert::Into<::std::string::String>) -> Self {
1234        self.elastic_ip = ::std::option::Option::Some(input.into());
1235        self
1236    }
1237    /// <p>The Elastic IP (EIP) address for the cluster.</p>
1238    /// <p>Constraints: The cluster must be provisioned in EC2-VPC and publicly-accessible through an Internet gateway. Don't specify the Elastic IP address for a publicly accessible cluster with availability zone relocation turned on. 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>
1239    pub fn set_elastic_ip(mut self, input: ::std::option::Option<::std::string::String>) -> Self {
1240        self.elastic_ip = input;
1241        self
1242    }
1243    /// <p>The Elastic IP (EIP) address for the cluster.</p>
1244    /// <p>Constraints: The cluster must be provisioned in EC2-VPC and publicly-accessible through an Internet gateway. Don't specify the Elastic IP address for a publicly accessible cluster with availability zone relocation turned on. 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>
1245    pub fn get_elastic_ip(&self) -> &::std::option::Option<::std::string::String> {
1246        &self.elastic_ip
1247    }
1248    /// Appends an item to `tags`.
1249    ///
1250    /// To override the contents of this collection use [`set_tags`](Self::set_tags).
1251    ///
1252    /// <p>A list of tag instances.</p>
1253    pub fn tags(mut self, input: crate::types::Tag) -> Self {
1254        let mut v = self.tags.unwrap_or_default();
1255        v.push(input);
1256        self.tags = ::std::option::Option::Some(v);
1257        self
1258    }
1259    /// <p>A list of tag instances.</p>
1260    pub fn set_tags(mut self, input: ::std::option::Option<::std::vec::Vec<crate::types::Tag>>) -> Self {
1261        self.tags = input;
1262        self
1263    }
1264    /// <p>A list of tag instances.</p>
1265    pub fn get_tags(&self) -> &::std::option::Option<::std::vec::Vec<crate::types::Tag>> {
1266        &self.tags
1267    }
1268    /// <p>The Key Management Service (KMS) key ID of the encryption key that you want to use to encrypt data in the cluster.</p>
1269    pub fn kms_key_id(mut self, input: impl ::std::convert::Into<::std::string::String>) -> Self {
1270        self.kms_key_id = ::std::option::Option::Some(input.into());
1271        self
1272    }
1273    /// <p>The Key Management Service (KMS) key ID of the encryption key that you want to use to encrypt data in the cluster.</p>
1274    pub fn set_kms_key_id(mut self, input: ::std::option::Option<::std::string::String>) -> Self {
1275        self.kms_key_id = input;
1276        self
1277    }
1278    /// <p>The Key Management Service (KMS) key ID of the encryption key that you want to use to encrypt data in the cluster.</p>
1279    pub fn get_kms_key_id(&self) -> &::std::option::Option<::std::string::String> {
1280        &self.kms_key_id
1281    }
1282    /// <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>
1283    /// <p>If this option is <code>true</code>, enhanced VPC routing is enabled.</p>
1284    /// <p>Default: false</p>
1285    pub fn enhanced_vpc_routing(mut self, input: bool) -> Self {
1286        self.enhanced_vpc_routing = ::std::option::Option::Some(input);
1287        self
1288    }
1289    /// <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>
1290    /// <p>If this option is <code>true</code>, enhanced VPC routing is enabled.</p>
1291    /// <p>Default: false</p>
1292    pub fn set_enhanced_vpc_routing(mut self, input: ::std::option::Option<bool>) -> Self {
1293        self.enhanced_vpc_routing = input;
1294        self
1295    }
1296    /// <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>
1297    /// <p>If this option is <code>true</code>, enhanced VPC routing is enabled.</p>
1298    /// <p>Default: false</p>
1299    pub fn get_enhanced_vpc_routing(&self) -> &::std::option::Option<bool> {
1300        &self.enhanced_vpc_routing
1301    }
1302    /// <p>Reserved.</p>
1303    pub fn additional_info(mut self, input: impl ::std::convert::Into<::std::string::String>) -> Self {
1304        self.additional_info = ::std::option::Option::Some(input.into());
1305        self
1306    }
1307    /// <p>Reserved.</p>
1308    pub fn set_additional_info(mut self, input: ::std::option::Option<::std::string::String>) -> Self {
1309        self.additional_info = input;
1310        self
1311    }
1312    /// <p>Reserved.</p>
1313    pub fn get_additional_info(&self) -> &::std::option::Option<::std::string::String> {
1314        &self.additional_info
1315    }
1316    /// Appends an item to `iam_roles`.
1317    ///
1318    /// To override the contents of this collection use [`set_iam_roles`](Self::set_iam_roles).
1319    ///
1320    /// <p>A list of Identity and Access Management (IAM) roles that can be used by the cluster to access other Amazon Web Services services. You must supply the IAM roles in their Amazon Resource Name (ARN) format.</p>
1321    /// <p>The maximum number of IAM roles that you can associate is subject to a quota. For more information, go to <a href="https://docs.aws.amazon.com/redshift/latest/mgmt/amazon-redshift-limits.html">Quotas and limits</a> in the <i>Amazon Redshift Cluster Management Guide</i>.</p>
1322    pub fn iam_roles(mut self, input: impl ::std::convert::Into<::std::string::String>) -> Self {
1323        let mut v = self.iam_roles.unwrap_or_default();
1324        v.push(input.into());
1325        self.iam_roles = ::std::option::Option::Some(v);
1326        self
1327    }
1328    /// <p>A list of Identity and Access Management (IAM) roles that can be used by the cluster to access other Amazon Web Services services. You must supply the IAM roles in their Amazon Resource Name (ARN) format.</p>
1329    /// <p>The maximum number of IAM roles that you can associate is subject to a quota. For more information, go to <a href="https://docs.aws.amazon.com/redshift/latest/mgmt/amazon-redshift-limits.html">Quotas and limits</a> in the <i>Amazon Redshift Cluster Management Guide</i>.</p>
1330    pub fn set_iam_roles(mut self, input: ::std::option::Option<::std::vec::Vec<::std::string::String>>) -> Self {
1331        self.iam_roles = input;
1332        self
1333    }
1334    /// <p>A list of Identity and Access Management (IAM) roles that can be used by the cluster to access other Amazon Web Services services. You must supply the IAM roles in their Amazon Resource Name (ARN) format.</p>
1335    /// <p>The maximum number of IAM roles that you can associate is subject to a quota. For more information, go to <a href="https://docs.aws.amazon.com/redshift/latest/mgmt/amazon-redshift-limits.html">Quotas and limits</a> in the <i>Amazon Redshift Cluster Management Guide</i>.</p>
1336    pub fn get_iam_roles(&self) -> &::std::option::Option<::std::vec::Vec<::std::string::String>> {
1337        &self.iam_roles
1338    }
1339    /// <p>An optional parameter for the name of the maintenance track for the cluster. If you don't provide a maintenance track name, the cluster is assigned to the <code>current</code> track.</p>
1340    pub fn maintenance_track_name(mut self, input: impl ::std::convert::Into<::std::string::String>) -> Self {
1341        self.maintenance_track_name = ::std::option::Option::Some(input.into());
1342        self
1343    }
1344    /// <p>An optional parameter for the name of the maintenance track for the cluster. If you don't provide a maintenance track name, the cluster is assigned to the <code>current</code> track.</p>
1345    pub fn set_maintenance_track_name(mut self, input: ::std::option::Option<::std::string::String>) -> Self {
1346        self.maintenance_track_name = input;
1347        self
1348    }
1349    /// <p>An optional parameter for the name of the maintenance track for the cluster. If you don't provide a maintenance track name, the cluster is assigned to the <code>current</code> track.</p>
1350    pub fn get_maintenance_track_name(&self) -> &::std::option::Option<::std::string::String> {
1351        &self.maintenance_track_name
1352    }
1353    /// <p>A unique identifier for the snapshot schedule.</p>
1354    pub fn snapshot_schedule_identifier(mut self, input: impl ::std::convert::Into<::std::string::String>) -> Self {
1355        self.snapshot_schedule_identifier = ::std::option::Option::Some(input.into());
1356        self
1357    }
1358    /// <p>A unique identifier for the snapshot schedule.</p>
1359    pub fn set_snapshot_schedule_identifier(mut self, input: ::std::option::Option<::std::string::String>) -> Self {
1360        self.snapshot_schedule_identifier = input;
1361        self
1362    }
1363    /// <p>A unique identifier for the snapshot schedule.</p>
1364    pub fn get_snapshot_schedule_identifier(&self) -> &::std::option::Option<::std::string::String> {
1365        &self.snapshot_schedule_identifier
1366    }
1367    /// <p>The option to enable relocation for an Amazon Redshift cluster between Availability Zones after the cluster is created.</p>
1368    pub fn availability_zone_relocation(mut self, input: bool) -> Self {
1369        self.availability_zone_relocation = ::std::option::Option::Some(input);
1370        self
1371    }
1372    /// <p>The option to enable relocation for an Amazon Redshift cluster between Availability Zones after the cluster is created.</p>
1373    pub fn set_availability_zone_relocation(mut self, input: ::std::option::Option<bool>) -> Self {
1374        self.availability_zone_relocation = input;
1375        self
1376    }
1377    /// <p>The option to enable relocation for an Amazon Redshift cluster between Availability Zones after the cluster is created.</p>
1378    pub fn get_availability_zone_relocation(&self) -> &::std::option::Option<bool> {
1379        &self.availability_zone_relocation
1380    }
1381    /// <p>This parameter is retired. It does not set the AQUA configuration status. Amazon Redshift automatically determines whether to use AQUA (Advanced Query Accelerator).</p>
1382    pub fn aqua_configuration_status(mut self, input: crate::types::AquaConfigurationStatus) -> Self {
1383        self.aqua_configuration_status = ::std::option::Option::Some(input);
1384        self
1385    }
1386    /// <p>This parameter is retired. It does not set the AQUA configuration status. Amazon Redshift automatically determines whether to use AQUA (Advanced Query Accelerator).</p>
1387    pub fn set_aqua_configuration_status(mut self, input: ::std::option::Option<crate::types::AquaConfigurationStatus>) -> Self {
1388        self.aqua_configuration_status = input;
1389        self
1390    }
1391    /// <p>This parameter is retired. It does not set the AQUA configuration status. Amazon Redshift automatically determines whether to use AQUA (Advanced Query Accelerator).</p>
1392    pub fn get_aqua_configuration_status(&self) -> &::std::option::Option<crate::types::AquaConfigurationStatus> {
1393        &self.aqua_configuration_status
1394    }
1395    /// <p>The Amazon Resource Name (ARN) for the IAM role that was set as default for the cluster when the cluster was created.</p>
1396    pub fn default_iam_role_arn(mut self, input: impl ::std::convert::Into<::std::string::String>) -> Self {
1397        self.default_iam_role_arn = ::std::option::Option::Some(input.into());
1398        self
1399    }
1400    /// <p>The Amazon Resource Name (ARN) for the IAM role that was set as default for the cluster when the cluster was created.</p>
1401    pub fn set_default_iam_role_arn(mut self, input: ::std::option::Option<::std::string::String>) -> Self {
1402        self.default_iam_role_arn = input;
1403        self
1404    }
1405    /// <p>The Amazon Resource Name (ARN) for the IAM role that was set as default for the cluster when the cluster was created.</p>
1406    pub fn get_default_iam_role_arn(&self) -> &::std::option::Option<::std::string::String> {
1407        &self.default_iam_role_arn
1408    }
1409    /// <p>A flag that specifies whether to load sample data once the cluster is created.</p>
1410    pub fn load_sample_data(mut self, input: impl ::std::convert::Into<::std::string::String>) -> Self {
1411        self.load_sample_data = ::std::option::Option::Some(input.into());
1412        self
1413    }
1414    /// <p>A flag that specifies whether to load sample data once the cluster is created.</p>
1415    pub fn set_load_sample_data(mut self, input: ::std::option::Option<::std::string::String>) -> Self {
1416        self.load_sample_data = input;
1417        self
1418    }
1419    /// <p>A flag that specifies whether to load sample data once the cluster is created.</p>
1420    pub fn get_load_sample_data(&self) -> &::std::option::Option<::std::string::String> {
1421        &self.load_sample_data
1422    }
1423    /// <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>
1424    pub fn manage_master_password(mut self, input: bool) -> Self {
1425        self.manage_master_password = ::std::option::Option::Some(input);
1426        self
1427    }
1428    /// <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>
1429    pub fn set_manage_master_password(mut self, input: ::std::option::Option<bool>) -> Self {
1430        self.manage_master_password = input;
1431        self
1432    }
1433    /// <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>
1434    pub fn get_manage_master_password(&self) -> &::std::option::Option<bool> {
1435        &self.manage_master_password
1436    }
1437    /// <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>
1438    pub fn master_password_secret_kms_key_id(mut self, input: impl ::std::convert::Into<::std::string::String>) -> Self {
1439        self.master_password_secret_kms_key_id = ::std::option::Option::Some(input.into());
1440        self
1441    }
1442    /// <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>
1443    pub fn set_master_password_secret_kms_key_id(mut self, input: ::std::option::Option<::std::string::String>) -> Self {
1444        self.master_password_secret_kms_key_id = input;
1445        self
1446    }
1447    /// <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>
1448    pub fn get_master_password_secret_kms_key_id(&self) -> &::std::option::Option<::std::string::String> {
1449        &self.master_password_secret_kms_key_id
1450    }
1451    /// <p>The IP address types that the cluster supports. Possible values are <code>ipv4</code> and <code>dualstack</code>.</p>
1452    pub fn ip_address_type(mut self, input: impl ::std::convert::Into<::std::string::String>) -> Self {
1453        self.ip_address_type = ::std::option::Option::Some(input.into());
1454        self
1455    }
1456    /// <p>The IP address types that the cluster supports. Possible values are <code>ipv4</code> and <code>dualstack</code>.</p>
1457    pub fn set_ip_address_type(mut self, input: ::std::option::Option<::std::string::String>) -> Self {
1458        self.ip_address_type = input;
1459        self
1460    }
1461    /// <p>The IP address types that the cluster supports. Possible values are <code>ipv4</code> and <code>dualstack</code>.</p>
1462    pub fn get_ip_address_type(&self) -> &::std::option::Option<::std::string::String> {
1463        &self.ip_address_type
1464    }
1465    /// <p>If true, Amazon Redshift will deploy the cluster in two Availability Zones (AZ).</p>
1466    pub fn multi_az(mut self, input: bool) -> Self {
1467        self.multi_az = ::std::option::Option::Some(input);
1468        self
1469    }
1470    /// <p>If true, Amazon Redshift will deploy the cluster in two Availability Zones (AZ).</p>
1471    pub fn set_multi_az(mut self, input: ::std::option::Option<bool>) -> Self {
1472        self.multi_az = input;
1473        self
1474    }
1475    /// <p>If true, Amazon Redshift will deploy the cluster in two Availability Zones (AZ).</p>
1476    pub fn get_multi_az(&self) -> &::std::option::Option<bool> {
1477        &self.multi_az
1478    }
1479    /// <p>The Amazon resource name (ARN) of the Amazon Redshift IAM Identity Center application.</p>
1480    pub fn redshift_idc_application_arn(mut self, input: impl ::std::convert::Into<::std::string::String>) -> Self {
1481        self.redshift_idc_application_arn = ::std::option::Option::Some(input.into());
1482        self
1483    }
1484    /// <p>The Amazon resource name (ARN) of the Amazon Redshift IAM Identity Center application.</p>
1485    pub fn set_redshift_idc_application_arn(mut self, input: ::std::option::Option<::std::string::String>) -> Self {
1486        self.redshift_idc_application_arn = input;
1487        self
1488    }
1489    /// <p>The Amazon resource name (ARN) of the Amazon Redshift IAM Identity Center application.</p>
1490    pub fn get_redshift_idc_application_arn(&self) -> &::std::option::Option<::std::string::String> {
1491        &self.redshift_idc_application_arn
1492    }
1493    /// <p>The name of the Glue data catalog that will be associated with the cluster enabled with Amazon Redshift federated permissions.</p>
1494    /// <p>Constraints:</p>
1495    /// <ul>
1496    /// <li>
1497    /// <p>Must contain at least one lowercase letter.</p></li>
1498    /// <li>
1499    /// <p>Can only contain lowercase letters (a-z), numbers (0-9), underscores (_), and hyphens (-).</p></li>
1500    /// </ul>
1501    /// <p>Pattern: <code>^\[a-z0-9_-\]*\[a-z\]+\[a-z0-9_-\]*$</code></p>
1502    /// <p>Example: <code>my-catalog_01</code></p>
1503    pub fn catalog_name(mut self, input: impl ::std::convert::Into<::std::string::String>) -> Self {
1504        self.catalog_name = ::std::option::Option::Some(input.into());
1505        self
1506    }
1507    /// <p>The name of the Glue data catalog that will be associated with the cluster enabled with Amazon Redshift federated permissions.</p>
1508    /// <p>Constraints:</p>
1509    /// <ul>
1510    /// <li>
1511    /// <p>Must contain at least one lowercase letter.</p></li>
1512    /// <li>
1513    /// <p>Can only contain lowercase letters (a-z), numbers (0-9), underscores (_), and hyphens (-).</p></li>
1514    /// </ul>
1515    /// <p>Pattern: <code>^\[a-z0-9_-\]*\[a-z\]+\[a-z0-9_-\]*$</code></p>
1516    /// <p>Example: <code>my-catalog_01</code></p>
1517    pub fn set_catalog_name(mut self, input: ::std::option::Option<::std::string::String>) -> Self {
1518        self.catalog_name = input;
1519        self
1520    }
1521    /// <p>The name of the Glue data catalog that will be associated with the cluster enabled with Amazon Redshift federated permissions.</p>
1522    /// <p>Constraints:</p>
1523    /// <ul>
1524    /// <li>
1525    /// <p>Must contain at least one lowercase letter.</p></li>
1526    /// <li>
1527    /// <p>Can only contain lowercase letters (a-z), numbers (0-9), underscores (_), and hyphens (-).</p></li>
1528    /// </ul>
1529    /// <p>Pattern: <code>^\[a-z0-9_-\]*\[a-z\]+\[a-z0-9_-\]*$</code></p>
1530    /// <p>Example: <code>my-catalog_01</code></p>
1531    pub fn get_catalog_name(&self) -> &::std::option::Option<::std::string::String> {
1532        &self.catalog_name
1533    }
1534    /// Consumes the builder and constructs a [`CreateClusterInput`](crate::operation::create_cluster::CreateClusterInput).
1535    pub fn build(
1536        self,
1537    ) -> ::std::result::Result<crate::operation::create_cluster::CreateClusterInput, ::aws_smithy_types::error::operation::BuildError> {
1538        ::std::result::Result::Ok(crate::operation::create_cluster::CreateClusterInput {
1539            db_name: self.db_name,
1540            cluster_identifier: self.cluster_identifier,
1541            cluster_type: self.cluster_type,
1542            node_type: self.node_type,
1543            master_username: self.master_username,
1544            master_user_password: self.master_user_password,
1545            cluster_security_groups: self.cluster_security_groups,
1546            vpc_security_group_ids: self.vpc_security_group_ids,
1547            cluster_subnet_group_name: self.cluster_subnet_group_name,
1548            availability_zone: self.availability_zone,
1549            preferred_maintenance_window: self.preferred_maintenance_window,
1550            cluster_parameter_group_name: self.cluster_parameter_group_name,
1551            automated_snapshot_retention_period: self.automated_snapshot_retention_period,
1552            manual_snapshot_retention_period: self.manual_snapshot_retention_period,
1553            port: self.port,
1554            cluster_version: self.cluster_version,
1555            allow_version_upgrade: self.allow_version_upgrade,
1556            number_of_nodes: self.number_of_nodes,
1557            publicly_accessible: self.publicly_accessible,
1558            encrypted: self.encrypted,
1559            hsm_client_certificate_identifier: self.hsm_client_certificate_identifier,
1560            hsm_configuration_identifier: self.hsm_configuration_identifier,
1561            elastic_ip: self.elastic_ip,
1562            tags: self.tags,
1563            kms_key_id: self.kms_key_id,
1564            enhanced_vpc_routing: self.enhanced_vpc_routing,
1565            additional_info: self.additional_info,
1566            iam_roles: self.iam_roles,
1567            maintenance_track_name: self.maintenance_track_name,
1568            snapshot_schedule_identifier: self.snapshot_schedule_identifier,
1569            availability_zone_relocation: self.availability_zone_relocation,
1570            aqua_configuration_status: self.aqua_configuration_status,
1571            default_iam_role_arn: self.default_iam_role_arn,
1572            load_sample_data: self.load_sample_data,
1573            manage_master_password: self.manage_master_password,
1574            master_password_secret_kms_key_id: self.master_password_secret_kms_key_id,
1575            ip_address_type: self.ip_address_type,
1576            multi_az: self.multi_az,
1577            redshift_idc_application_arn: self.redshift_idc_application_arn,
1578            catalog_name: self.catalog_name,
1579        })
1580    }
1581}
1582impl ::std::fmt::Debug for CreateClusterInputBuilder {
1583    fn fmt(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
1584        let mut formatter = f.debug_struct("CreateClusterInputBuilder");
1585        formatter.field("db_name", &self.db_name);
1586        formatter.field("cluster_identifier", &self.cluster_identifier);
1587        formatter.field("cluster_type", &self.cluster_type);
1588        formatter.field("node_type", &self.node_type);
1589        formatter.field("master_username", &self.master_username);
1590        formatter.field("master_user_password", &"*** Sensitive Data Redacted ***");
1591        formatter.field("cluster_security_groups", &self.cluster_security_groups);
1592        formatter.field("vpc_security_group_ids", &self.vpc_security_group_ids);
1593        formatter.field("cluster_subnet_group_name", &self.cluster_subnet_group_name);
1594        formatter.field("availability_zone", &self.availability_zone);
1595        formatter.field("preferred_maintenance_window", &self.preferred_maintenance_window);
1596        formatter.field("cluster_parameter_group_name", &self.cluster_parameter_group_name);
1597        formatter.field("automated_snapshot_retention_period", &self.automated_snapshot_retention_period);
1598        formatter.field("manual_snapshot_retention_period", &self.manual_snapshot_retention_period);
1599        formatter.field("port", &self.port);
1600        formatter.field("cluster_version", &self.cluster_version);
1601        formatter.field("allow_version_upgrade", &self.allow_version_upgrade);
1602        formatter.field("number_of_nodes", &self.number_of_nodes);
1603        formatter.field("publicly_accessible", &self.publicly_accessible);
1604        formatter.field("encrypted", &self.encrypted);
1605        formatter.field("hsm_client_certificate_identifier", &self.hsm_client_certificate_identifier);
1606        formatter.field("hsm_configuration_identifier", &self.hsm_configuration_identifier);
1607        formatter.field("elastic_ip", &self.elastic_ip);
1608        formatter.field("tags", &self.tags);
1609        formatter.field("kms_key_id", &self.kms_key_id);
1610        formatter.field("enhanced_vpc_routing", &self.enhanced_vpc_routing);
1611        formatter.field("additional_info", &self.additional_info);
1612        formatter.field("iam_roles", &self.iam_roles);
1613        formatter.field("maintenance_track_name", &self.maintenance_track_name);
1614        formatter.field("snapshot_schedule_identifier", &self.snapshot_schedule_identifier);
1615        formatter.field("availability_zone_relocation", &self.availability_zone_relocation);
1616        formatter.field("aqua_configuration_status", &self.aqua_configuration_status);
1617        formatter.field("default_iam_role_arn", &self.default_iam_role_arn);
1618        formatter.field("load_sample_data", &self.load_sample_data);
1619        formatter.field("manage_master_password", &self.manage_master_password);
1620        formatter.field("master_password_secret_kms_key_id", &self.master_password_secret_kms_key_id);
1621        formatter.field("ip_address_type", &self.ip_address_type);
1622        formatter.field("multi_az", &self.multi_az);
1623        formatter.field("redshift_idc_application_arn", &self.redshift_idc_application_arn);
1624        formatter.field("catalog_name", &self.catalog_name);
1625        formatter.finish()
1626    }
1627}