
    Vh?(                         d Z dZdZddlZ	 ddlmZ ddlmZ ddlm	Z	 ddl
mZ d	 Zdd
Zd Zedk(  r e        yy# e$ r Y +w xY w)aY  
---
module: redshift_info
version_added: 1.0.0
author:
  - "Jens Carl (@j-carl)"
short_description: Gather information about Redshift cluster(s)
description:
  - Gather information about Redshift cluster(s).
options:
  cluster_identifier:
    description:
      - The prefix of cluster identifier of the Redshift cluster you are searching for.
      - "This is a regular expression match with implicit '^'. Append '$' for a complete match."
    required: false
    aliases: ['name', 'identifier']
    type: str
  tags:
    description:
      - "A dictionary/hash of tags in the format { tag1_name: 'tag1_value', tag2_name: 'tag2_value' }
       to match against the security group(s) you are searching for."
    required: false
    type: dict
extends_documentation_fragment:
  - amazon.aws.region.modules
  - amazon.aws.common.modules
  - amazon.aws.boto3
a  
# Note: These examples do net set authentication details, see the AWS guide for details.

- name: Find all clusters
  community.aws.redshift_info:
  register: redshift

- name: Find cluster(s) with matching tags
  community.aws.redshift_info:
    tags:
      env: prd
      stack: monitoring
  register: redshift_tags

- name: Find cluster(s) with matching name/prefix and tags
  community.aws.redshift_info:
    tags:
      env: dev
      stack: web
    name: user-
  register: redshift_web

- name: Fail if no cluster(s) is/are found
  community.aws.redshift_info:
    tags:
      env: stg
      stack: db
  register: redshift_user
  failed_when: redshift_user.results | length == 0
a?  
# For more information see U(http://boto3.readthedocs.io/en/latest/reference/services/redshift.html#Redshift.Client.describe_clusters)
---
cluster_identifier:
    description: Unique key to identify the cluster.
    returned: success
    type: str
    sample: "redshift-identifier"
node_type:
    description: The node type for nodes in the cluster.
    returned: success
    type: str
    sample: "ds2.xlarge"
cluster_status:
    description: Current state of the cluster.
    returned: success
    type: str
    sample: "available"
modify_status:
    description: The status of a modify operation.
    returned: optional
    type: str
    sample: ""
master_username:
    description: The master user name for the cluster.
    returned: success
    type: str
    sample: "admin"
db_name:
    description: The name of the initial database that was created when the cluster was created.
    returned: success
    type: str
    sample: "dev"
endpoint:
    description: The connection endpoint.
    returned: success
    type: str
    sample: {
        "address": "cluster-ds2.ocmugla0rf.us-east-1.redshift.amazonaws.com",
        "port": 5439
    }
cluster_create_time:
    description: The date and time that the cluster was created.
    returned: success
    type: str
    sample: "2016-05-10T08:33:16.629000+00:00"
automated_snapshot_retention_period:
    description: The number of days that automatic cluster snapshots are retained.
    returned: success
    type: int
    sample: 1
cluster_security_groups:
    description: A list of cluster security groups that are associated with the cluster.
    returned: success
    type: list
    sample: []
vpc_security_groups:
    description: A list of VPC security groups the are associated with the cluster.
    returned: success
    type: list
    sample: [
        {
            "status": "active",
            "vpc_security_group_id": "sg-12cghhg"
        }
    ]
cluster_paramater_groups:
    description: The list of cluster parameters that are associated with this cluster.
    returned: success
    type: list
    sample: [
        {
            "cluster_parameter_status_list": [
                {
                    "parameter_apply_status": "in-sync",
                    "parameter_name": "statement_timeout"
                },
                {
                    "parameter_apply_status": "in-sync",
                    "parameter_name": "require_ssl"
                }
            ],
            "parameter_apply_status": "in-sync",
            "parameter_group_name": "tuba"
        }
    ]
cluster_subnet_group_name:
    description: The name of the subnet group that is associated with the cluster.
    returned: success
    type: str
    sample: "redshift-subnet"
vpc_id:
    description: The identifier of the VPC the cluster is in, if the cluster is in a VPC.
    returned: success
    type: str
    sample: "vpc-1234567"
availability_zone:
    description: The name of the Availability Zone in which the cluster is located.
    returned: success
    type: str
    sample: "us-east-1b"
preferred_maintenance_window:
    description: The weekly time range, in Universal Coordinated Time (UTC), during which system maintenance can occur.
    returned: success
    type: str
    sample: "tue:07:30-tue:08:00"
pending_modified_values:
    description: A value that, if present, indicates that changes to the cluster are pending.
    returned: success
    type: dict
    sample: {}
cluster_version:
    description: The version ID of the Amazon Redshift engine that is running on the cluster.
    returned: success
    type: str
    sample: "1.0"
allow_version_upgrade:
    description: >
      A Boolean value that, if true, indicates that major version upgrades will be applied
      automatically to the cluster during the maintenance window.
    returned: success
    type: bool
    sample: true|false
number_of_nodes:
    description:  The number of compute nodes in the cluster.
    returned: success
    type: int
    sample: 12
publicly_accessible:
    description: A Boolean value that, if true , indicates that the cluster can be accessed from a public network.
    returned: success
    type: bool
    sample: true|false
encrypted:
    description: Boolean value that, if true , indicates that data in the cluster is encrypted at rest.
    returned: success
    type: bool
    sample: true|false
restore_status:
    description: A value that describes the status of a cluster restore action.
    returned: success
    type: dict
    sample: {}
hsm_status:
    description: >
      A value that reports whether the Amazon Redshift cluster has finished applying any hardware
      security module (HSM) settings changes specified in a modify cluster command.
    returned: success
    type: dict
    sample: {}
cluster_snapshot_copy_status:
    description: A value that returns the destination region and retention period that are configured for cross-region snapshot copy.
    returned: success
    type: dict
    sample: {}
cluster_public_keys:
    description: The public key for the cluster.
    returned: success
    type: str
    sample: "ssh-rsa anjigfam Amazon-Redshift\n"
cluster_nodes:
    description: The nodes in the cluster.
    returned: success
    type: list
    sample: [
        {
            "node_role": "LEADER",
            "private_ip_address": "10.0.0.1",
            "public_ip_address": "x.x.x.x"
        },
        {
            "node_role": "COMPUTE-1",
            "private_ip_address": "10.0.0.3",
            "public_ip_address": "x.x.x.x"
        }
    ]
elastic_ip_status:
    description: The status of the elastic IP (EIP) address.
    returned: success
    type: dict
    sample: {}
cluster_revision_number:
    description: The specific revision number of the database in the cluster.
    returned: success
    type: str
    sample: "1231"
tags:
    description: The list of tags for the cluster.
    returned: success
    type: list
    sample: []
kms_key_id:
    description: The AWS Key Management Service (AWS KMS) key ID of the encryption key used to encrypt data in the cluster.
    returned: success
    type: str
    sample: ""
enhanced_vpc_routing:
    description: An option that specifies whether to create the cluster with enhanced VPC routing enabled.
    returned: success
    type: bool
    sample: true|false
iam_roles:
    description: List of IAM roles attached to the cluster.
    returned: success
    type: list
    sample: []
    N)BotoCoreError)ClientError)camel_dict_to_snake_dict)AnsibleCommunityAWSModulec                 p    | j                         D ]#  \  }}|d   D ]  }||d   k(  s||d   k(  s  y % y)NTagsKeyValueTF)items)tags_to_matchclusterkeyvaluetags        o/home/dcms/DCMS/lib/python3.12/site-packages/ansible_collections/community/aws/plugins/modules/redshift_info.py
match_tagsr      sP    #))+ 
U6? 	Cc%j Uc'l%:	
     c                    	 | j                  d      }|j                         j                         }g }|t        j                  d|z         }d   D ]J  }	d}
|rj                  |	d         }
d}|rt        ||	      }|
s.|s1|j                  t        |	             L |S # t        t        f$ r}|j                  |d       Y d }~d }~ww xY w)Ndescribe_clusterszFailed to fetch clusters.)msg^ClustersTClusterIdentifier)get_paginatorpaginatebuild_full_resultr   r   fail_json_awsrecompilesearchr   appendr   )connmodule
identifiertagscluster_paginatorclustersematched_clustersidentifier_progr   matched_identifiermatched_tagss               r   find_clustersr-   )  s    A ../BC$--/AAC **S:%56J' 
G!!0!7!7@S8T!U%dG4L,##$<W$EF
G ) ;' AQ$?@@As   /B! !C0CCc                  6   t        t        dddg      t        d            } t        | d	      }|j                  j                  d
      }|j                  j                  d      }|j	                  d      }t        ||||      }|j                  |       y )Nstrr$   name)typealiasesdict)r1   )cluster_identifierr%   T)argument_specsupports_check_moder4   r%   redshift)r$   r%   )results)r3   AnsibleAWSModuleparamsgetclientr-   	exit_json)r5   r#   r4   cluster_tagsr7   r8   s         r   mainr?   D  s    U\64JKvM # F
  **+?@==$$V,L}}Z(HHf9KR^_G
W%r   __main__)NN)DOCUMENTATIONEXAMPLESRETURNr   botocore.exceptionsr   r   ImportError0ansible.module_utils.common.dict_transformationsr   >ansible_collections.community.aws.plugins.module_utils.modulesr   r9   r   r-   r?   __name__ r   r   <module>rJ      sm   :>N
` 
	1/ V x6&& zF   		s   < AA