"""
Autogenerated state module using `pop-create-idem <https://gitlab.com/saltstack/pop/pop-create-idem>`__

hub.exec.boto3.client.rds.backtrack_db_cluster
hub.exec.boto3.client.rds.create_db_cluster
hub.exec.boto3.client.rds.delete_db_cluster
hub.exec.boto3.client.rds.describe_db_clusters
hub.exec.boto3.client.rds.failover_db_cluster
hub.exec.boto3.client.rds.modify_db_cluster
hub.exec.boto3.client.rds.start_db_cluster
hub.exec.boto3.client.rds.stop_db_cluster
"""



from typing import *
import dict_tools.differ as differ
async def present(hub, ctx, name: Text, db_cluster_identifier: Text, engine: Text, availability_zones: List = None, backup_retention_period: int = None, character_set_name: Text = None, database_name: Text = None, db_cluster_parameter_group_name: Text = None, vpc_security_group_ids: List = None, db_subnet_group_name: Text = None, engine_version: Text = None, port: int = None, master_username: Text = None, master_user_password: Text = None, option_group_name: Text = None, preferred_backup_window: Text = None, preferred_maintenance_window: Text = None, replication_source_identifier: Text = None, tags: List = None, storage_encrypted: bool = None, kms_key_id: Text = None, pre_signed_url: Text = None, enable_iam_database_authentication: bool = None, backtrack_window: int = None, enable_cloudwatch_logs_exports: List = None, engine_mode: Text = None, scaling_configuration: Dict = None, deletion_protection: bool = None, global_cluster_identifier: Text = None, enable_http_endpoint: bool = None, copy_tags_to_snapshot: bool = None, domain: Text = None, domain_iam_role_name: Text = None, enable_global_write_forwarding: bool = None, source_region: Text = None)  -> Dict[str, Any]:
    r'''
    **Autogenerated function**
    
    Creates a new Amazon Aurora DB cluster. You can use the ReplicationSourceIdentifier parameter to create the DB
    cluster as a read replica of another DB cluster or Amazon RDS MySQL or PostgreSQL DB instance. For cross-region
    replication where the DB cluster identified by ReplicationSourceIdentifier is encrypted, you must also specify
    the PreSignedUrl parameter. For more information on Amazon Aurora, see  What Is Amazon Aurora? in the Amazon
    Aurora User Guide.   This action only applies to Aurora DB clusters.

    Args:
        name(Text): A name, ID, or JMES search path to identify the resource.
        availability_zones(List, optional): A list of Availability Zones (AZs) where instances in the DB cluster can be created. For
            information on Amazon Web Services Regions and Availability Zones, see Choosing the Regions and
            Availability Zones in the Amazon Aurora User Guide. Defaults to None.
        backup_retention_period(int, optional): The number of days for which automated backups are retained. Default: 1 Constraints:   Must be a
            value from 1 to 35. Defaults to None.
        character_set_name(Text, optional): A value that indicates that the DB cluster should be associated with the specified CharacterSet. Defaults to None.
        database_name(Text, optional): The name for your database of up to 64 alphanumeric characters. If you do not provide a name,
            Amazon RDS doesn't create a database in the DB cluster you are creating. Defaults to None.
        db_cluster_identifier(Text): The DB cluster identifier. This parameter is stored as a lowercase string. Constraints:   Must
            contain from 1 to 63 letters, numbers, or hyphens.   First character must be a letter.   Can't
            end with a hyphen or contain two consecutive hyphens.   Example: my-cluster1.
        db_cluster_parameter_group_name(Text, optional):  The name of the DB cluster parameter group to associate with this DB cluster. If you do not
            specify a value, then the default DB cluster parameter group for the specified DB engine and
            version is used.  Constraints:   If supplied, must match the name of an existing DB cluster
            parameter group. Defaults to None.
        vpc_security_group_ids(List, optional): A list of EC2 VPC security groups to associate with this DB cluster. Defaults to None.
        db_subnet_group_name(Text, optional): A DB subnet group to associate with this DB cluster. Constraints: Must match the name of an
            existing DBSubnetGroup. Must not be default. Example: mySubnetgroup. Defaults to None.
        engine(Text): The name of the database engine to be used for this DB cluster. Valid Values: aurora (for MySQL
            5.6-compatible Aurora), aurora-mysql (for MySQL 5.7-compatible Aurora), and aurora-postgresql.
        engine_version(Text, optional): The version number of the database engine to use. To list all of the available engine versions
            for aurora (for MySQL 5.6-compatible Aurora), use the following command:  aws rds describe-db-
            engine-versions --engine aurora --query "DBEngineVersions[].EngineVersion"  To list all of the
            available engine versions for aurora-mysql (for MySQL 5.7-compatible Aurora), use the following
            command:  aws rds describe-db-engine-versions --engine aurora-mysql --query
            "DBEngineVersions[].EngineVersion"  To list all of the available engine versions for aurora-
            postgresql, use the following command:  aws rds describe-db-engine-versions --engine aurora-
            postgresql --query "DBEngineVersions[].EngineVersion"   Aurora MySQL  Example: 5.6.10a,
            5.6.mysql_aurora.1.19.2, 5.7.12, 5.7.mysql_aurora.2.04.5   Aurora PostgreSQL  Example: 9.6.3,
            10.7. Defaults to None.
        port(int, optional): The port number on which the instances in the DB cluster accept connections.  Default: 3306 if
            engine is set as aurora or 5432 if set to aurora-postgresql. Defaults to None.
        master_username(Text, optional): The name of the master user for the DB cluster. Constraints:   Must be 1 to 16 letters or
            numbers.   First character must be a letter.   Can't be a reserved word for the chosen database
            engine. Defaults to None.
        master_user_password(Text, optional): The password for the master database user. This password can contain any printable ASCII
            character except "/", """, or "@". Constraints: Must contain from 8 to 41 characters. Defaults to None.
        option_group_name(Text, optional): A value that indicates that the DB cluster should be associated with the specified option group.
            Permanent options can't be removed from an option group. The option group can't be removed from
            a DB cluster once it is associated with a DB cluster. Defaults to None.
        preferred_backup_window(Text, optional): The daily time range during which automated backups are created if automated backups are enabled
            using the BackupRetentionPeriod parameter.  The default is a 30-minute window selected at random
            from an 8-hour block of time for each Amazon Web Services Region. To view the time blocks
            available, see  Backup window in the Amazon Aurora User Guide.  Constraints:   Must be in the
            format hh24:mi-hh24:mi.   Must be in Universal Coordinated Time (UTC).   Must not conflict with
            the preferred maintenance window.   Must be at least 30 minutes. Defaults to None.
        preferred_maintenance_window(Text, optional): The weekly time range during which system maintenance can occur, in Universal Coordinated Time
            (UTC). Format: ddd:hh24:mi-ddd:hh24:mi  The default is a 30-minute window selected at random
            from an 8-hour block of time for each Amazon Web Services Region, occurring on a random day of
            the week. To see the time blocks available, see  Adjusting the Preferred DB Cluster Maintenance
            Window in the Amazon Aurora User Guide.  Valid Days: Mon, Tue, Wed, Thu, Fri, Sat, Sun.
            Constraints: Minimum 30-minute window. Defaults to None.
        replication_source_identifier(Text, optional): The Amazon Resource Name (ARN) of the source DB instance or DB cluster if this DB cluster is
            created as a read replica. Defaults to None.
        tags(List, optional): Tags to assign to the DB cluster. Defaults to None.
        storage_encrypted(bool, optional): A value that indicates whether the DB cluster is encrypted. Defaults to None.
        kms_key_id(Text, optional): The Amazon Web Services KMS key identifier for an encrypted DB cluster. The Amazon Web Services
            KMS key identifier is the key ARN, key ID, alias ARN, or alias name for the Amazon Web Services
            KMS customer master key (CMK). To use a CMK in a different Amazon Web Services account, specify
            the key ARN or alias ARN. When a CMK isn't specified in KmsKeyId:   If
            ReplicationSourceIdentifier identifies an encrypted source, then Amazon RDS will use the CMK
            used to encrypt the source. Otherwise, Amazon RDS will use your default CMK.    If the
            StorageEncrypted parameter is enabled and ReplicationSourceIdentifier isn't specified, then
            Amazon RDS will use your default CMK.   There is a default CMK for your Amazon Web Services
            account. Your Amazon Web Services account has a different default CMK for each Amazon Web
            Services Region. If you create a read replica of an encrypted DB cluster in another Amazon Web
            Services Region, you must set KmsKeyId to a Amazon Web Services KMS key identifier that is valid
            in the destination Amazon Web Services Region. This CMK is used to encrypt the read replica in
            that Amazon Web Services Region. Defaults to None.
        pre_signed_url(Text, optional): A URL that contains a Signature Version 4 signed request for the CreateDBCluster action to be
            called in the source Amazon Web Services Region where the DB cluster is replicated from. You
            only need to specify PreSignedUrl when you are performing cross-region replication from an
            encrypted DB cluster. The pre-signed URL must be a valid request for the CreateDBCluster API
            action that can be executed in the source Amazon Web Services Region that contains the encrypted
            DB cluster to be copied. The pre-signed URL request must contain the following parameter values:
            KmsKeyId - The Amazon Web Services KMS key identifier for the key to use to encrypt the copy of
            the DB cluster in the destination Amazon Web Services Region. This should refer to the same
            Amazon Web Services KMS CMK for both the CreateDBCluster action that is called in the
            destination Amazon Web Services Region, and the action contained in the pre-signed URL.
            DestinationRegion - The name of the Amazon Web Services Region that Aurora read replica will be
            created in.    ReplicationSourceIdentifier - The DB cluster identifier for the encrypted DB
            cluster to be copied. This identifier must be in the Amazon Resource Name (ARN) format for the
            source Amazon Web Services Region. For example, if you are copying an encrypted DB cluster from
            the us-west-2 Amazon Web Services Region, then your ReplicationSourceIdentifier would look like
            Example: arn:aws:rds:us-west-2:123456789012:cluster:aurora-cluster1.   To learn how to generate
            a Signature Version 4 signed request, see  Authenticating Requests: Using Query Parameters
            (Amazon Web Services Signature Version 4) and  Signature Version 4 Signing Process.  If you are
            using an Amazon Web Services SDK tool or the CLI, you can specify SourceRegion (or --source-
            region for the CLI) instead of specifying PreSignedUrl manually. Specifying SourceRegion
            autogenerates a pre-signed URL that is a valid request for the operation that can be executed in
            the source Amazon Web Services Region. Defaults to None.
        enable_iam_database_authentication(bool, optional): A value that indicates whether to enable mapping of Amazon Web Services Identity and Access
            Management (IAM) accounts to database accounts. By default, mapping is disabled. For more
            information, see  IAM Database Authentication in the Amazon Aurora User Guide. Defaults to None.
        backtrack_window(int, optional): The target backtrack window, in seconds. To disable backtracking, set this value to 0.
            Currently, Backtrack is only supported for Aurora MySQL DB clusters.  Default: 0 Constraints:
            If specified, this value must be set to a number from 0 to 259,200 (72 hours). Defaults to None.
        enable_cloudwatch_logs_exports(List, optional): The list of log types that need to be enabled for exporting to CloudWatch Logs. The values in
            the list depend on the DB engine being used. For more information, see Publishing Database Logs
            to Amazon CloudWatch Logs in the Amazon Aurora User Guide.  Aurora MySQL  Possible values are
            audit, error, general, and slowquery.   Aurora PostgreSQL  Possible value is postgresql. Defaults to None.
        engine_mode(Text, optional): The DB engine mode of the DB cluster, either provisioned, serverless, parallelquery, global, or
            multimaster. The parallelquery engine mode isn't required for Aurora MySQL version 1.23 and
            higher 1.x versions, and version 2.09 and higher 2.x versions. The global engine mode isn't
            required for Aurora MySQL version 1.22 and higher 1.x versions, and global engine mode isn't
            required for any 2.x versions. The multimaster engine mode only applies for DB clusters created
            with Aurora MySQL version 5.6.10a. For Aurora PostgreSQL, the global engine mode isn't required,
            and both the parallelquery and the multimaster engine modes currently aren't supported.
            Limitations and requirements apply to some DB engine modes. For more information, see the
            following sections in the Amazon Aurora User Guide:     Limitations of Aurora Serverless
            Limitations of Parallel Query      Limitations of Aurora Global Databases      Limitations of
            Multi-Master Clusters. Defaults to None.
        scaling_configuration(Dict, optional): For DB clusters in serverless DB engine mode, the scaling properties of the DB cluster. Defaults to None.
        deletion_protection(bool, optional): A value that indicates whether the DB cluster has deletion protection enabled. The database
            can't be deleted when deletion protection is enabled. By default, deletion protection is
            disabled. Defaults to None.
        global_cluster_identifier(Text, optional):  The global cluster ID of an Aurora cluster that becomes the primary cluster in the new global
            database cluster. Defaults to None.
        enable_http_endpoint(bool, optional): A value that indicates whether to enable the HTTP endpoint for an Aurora Serverless DB cluster.
            By default, the HTTP endpoint is disabled. When enabled, the HTTP endpoint provides a
            connectionless web service API for running SQL queries on the Aurora Serverless DB cluster. You
            can also query your database from inside the RDS console with the query editor. For more
            information, see Using the Data API for Aurora Serverless in the Amazon Aurora User Guide. Defaults to None.
        copy_tags_to_snapshot(bool, optional): A value that indicates whether to copy all tags from the DB cluster to snapshots of the DB
            cluster. The default is not to copy them. Defaults to None.
        domain(Text, optional): The Active Directory directory ID to create the DB cluster in.  For Amazon Aurora DB clusters,
            Amazon RDS can use Kerberos Authentication to authenticate users that connect to the DB cluster.
            For more information, see Kerberos Authentication in the Amazon Aurora User Guide. Defaults to None.
        domain_iam_role_name(Text, optional): Specify the name of the IAM role to be used when making API calls to the Directory Service. Defaults to None.
        enable_global_write_forwarding(bool, optional): A value that indicates whether to enable this DB cluster to forward write operations to the
            primary cluster of an Aurora global database (GlobalCluster). By default, write operations are
            not allowed on Aurora DB clusters that are secondary clusters in an Aurora global database. You
            can set this value only on Aurora DB clusters that are members of an Aurora global database.
            With this parameter enabled, a secondary cluster can forward writes to the current primary
            cluster and the resulting changes are replicated back to this cluster. For the primary DB
            cluster of an Aurora global database, this value is used immediately if the primary is demoted
            by the FailoverGlobalCluster API operation, but it does nothing until then. Defaults to None.
        source_region(Text, optional): The ID of the region that contains the source for the db cluster. Defaults to None.

    Returns:
        Dict[str, Any]

    Examples:

        .. code-block:: sls

            resource_is_present:
              aws_auto.rds.db_cluster.present:
                - name: value
                - db_cluster_identifier: value
                - engine: value
    '''
    
    result = dict(comment="", changes= None, name=name, result=True)
    ret = await hub.exec.boto3.client.rds.db_cluster.id(
        ctx,
        jmes_path=name
    )
    if ret["status"]:
        # name is now the first id that matched the JMES search path
        name = ret["ret"]
    

    
    before = await hub.exec.boto3.client.rds.describe_db_clusters(name)

    if before:
        result["comment"] = f"'{name}' already exists"
    else:
        try:
            ret = await hub.exec.boto3.client.rds.create_db_cluster(
                ctx,
                
                
                **{"AvailabilityZones": availability_zones, "BackupRetentionPeriod": backup_retention_period, "CharacterSetName": character_set_name, "DatabaseName": database_name, "DBClusterIdentifier": db_cluster_identifier, "DBClusterParameterGroupName": db_cluster_parameter_group_name, "VpcSecurityGroupIds": vpc_security_group_ids, "DBSubnetGroupName": db_subnet_group_name, "Engine": engine, "EngineVersion": engine_version, "Port": port, "MasterUsername": master_username, "MasterUserPassword": master_user_password, "OptionGroupName": option_group_name, "PreferredBackupWindow": preferred_backup_window, "PreferredMaintenanceWindow": preferred_maintenance_window, "ReplicationSourceIdentifier": replication_source_identifier, "Tags": tags, "StorageEncrypted": storage_encrypted, "KmsKeyId": kms_key_id, "PreSignedUrl": pre_signed_url, "EnableIAMDatabaseAuthentication": enable_iam_database_authentication, "BacktrackWindow": backtrack_window, "EnableCloudwatchLogsExports": enable_cloudwatch_logs_exports, "EngineMode": engine_mode, "ScalingConfiguration": scaling_configuration, "DeletionProtection": deletion_protection, "GlobalClusterIdentifier": global_cluster_identifier, "EnableHttpEndpoint": enable_http_endpoint, "CopyTagsToSnapshot": copy_tags_to_snapshot, "Domain": domain, "DomainIAMRoleName": domain_iam_role_name, "EnableGlobalWriteForwarding": enable_global_write_forwarding, "SourceRegion": source_region}
            )
            result["result"] = ret["status"]
            if not result["result"]:
                result["comment"] = ret["comment"]
                return result
            ret["comment"] = f"Created '{name}'"
        except hub.tool.boto3.exception.ClientError as e:
            result["comment"] = f"{e.__class__.__name__}: {e}"

    
    # TODO perform other modifications as needed here
    ...

    after = await hub.exec.boto3.client.rds.describe_db_clusters(name)
    result["changes"] = differ.deep_diff(before, after)
    return result

async def absent(hub, ctx, name: Text, db_cluster_identifier: Text, skip_final_snapshot: bool = None, final_db_snapshot_identifier: Text = None)  -> Dict[str, Any]:
    r'''
    **Autogenerated function**
    
    The DeleteDBCluster action deletes a previously provisioned DB cluster. When you delete a DB cluster, all
    automated backups for that DB cluster are deleted and can't be recovered. Manual DB cluster snapshots of the
    specified DB cluster are not deleted.  For more information on Amazon Aurora, see  What Is Amazon Aurora? in the
    Amazon Aurora User Guide.   This action only applies to Aurora DB clusters.

    Args:
        name(Text): A name, ID, or JMES search path to identify the resource.
        db_cluster_identifier(Text): The DB cluster identifier for the DB cluster to be deleted. This parameter isn't case-sensitive.
            Constraints:   Must match an existing DBClusterIdentifier.
        skip_final_snapshot(bool, optional): A value that indicates whether to skip the creation of a final DB cluster snapshot before the DB
            cluster is deleted. If skip is specified, no DB cluster snapshot is created. If skip isn't
            specified, a DB cluster snapshot is created before the DB cluster is deleted. By default, skip
            isn't specified, and the DB cluster snapshot is created. By default, this parameter is disabled.
            You must specify a FinalDBSnapshotIdentifier parameter if SkipFinalSnapshot is disabled. Defaults to None.
        final_db_snapshot_identifier(Text, optional):  The DB cluster snapshot identifier of the new DB cluster snapshot created when
            SkipFinalSnapshot is disabled.    Specifying this parameter and also skipping the creation of a
            final DB cluster snapshot with the SkipFinalShapshot parameter results in an error.
            Constraints:   Must be 1 to 255 letters, numbers, or hyphens.   First character must be a letter
            Can't end with a hyphen or contain two consecutive hyphens. Defaults to None.

    Returns:
        Dict[str, Any]

    Examples:

        .. code-block:: sls

            resource_is_absent:
              aws_auto.rds.db_cluster.absent:
                - name: value
                - db_cluster_identifier: value
    '''
    
    result = dict(comment="", changes= None, name=name, result=True)
    ret = await hub.exec.boto3.client.rds.db_cluster.id(
        ctx,
        jmes_path=name
    )
    if ret["status"]:
        # name is now the first id that matched the JMES search path
        name = ret["ret"]
    

    

    before = await hub.exec.boto3.client.rds.describe_db_clusters(name)

    if not before:
        result["comment"] = f"'{name}' already absent"
    else:
        try:
            ret = await hub.exec.boto3.client.rds.delete_db_cluster(
                ctx,
                
                
                **{"DBClusterIdentifier": db_cluster_identifier, "SkipFinalSnapshot": skip_final_snapshot, "FinalDBSnapshotIdentifier": final_db_snapshot_identifier}
            )
            result["result"] = ret["status"]
            if not result["result"]:
                result["comment"] = ret["comment"]
                return result
            result["comment"] = f"Deleted '{name}'"
        except hub.tool.boto3.exception.ClientError as e:
            result["comment"] = f"{e.__class__.__name__}: {e}"

    

    after = await hub.exec.boto3.client.rds.describe_db_clusters(name)
    result["changes"] = differ.deep_diff(before, after)
    return result

