
    Vh+                         d Z dZdZddl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
 Zd Zd Zd Zedk(  r e        yy# e$ r Y <w xY w)a	  
---
module: codepipeline
version_added: 1.0.0
short_description: Create or delete AWS CodePipelines
notes:
    - For details of the parameters and returns see U(http://boto3.readthedocs.io/en/latest/reference/services/codepipeline.html).
description:
    - Create or delete a CodePipeline on AWS.
    - Prior to release 5.0.0 this module was called C(community.aws.aws_codepipeline).
      The usage did not change.
author:
    - Stefan Horning (@stefanhorning) <horning@mediapeers.com>
options:
    name:
        description:
            - Name of the CodePipeline.
        required: true
        type: str
    role_arn:
        description:
            - ARN of the IAM role to use when executing the CodePipeline.
        required: true
        type: str
    artifact_store:
        description:
            - Location information where artifacts are stored (on S3). Dictionary with fields type and location.
        required: true
        suboptions:
            type:
                description:
                    - Type of the artifacts storage (only 'S3' is currently supported).
                type: str
            location:
                description:
                    - Bucket name for artifacts.
                type: str
        type: dict
    stages:
        description:
            - List of stages to perform in the CodePipeline. List of dictionaries containing name and actions for each stage.
        required: true
        suboptions:
            name:
                description:
                    - Name of the stage (step) in the CodePipeline.
                type: str
            actions:
                description:
                    - List of action configurations for that stage.
                    - 'See the boto3 documentation for full documentation of suboptions:'
                    - 'U(https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/codepipeline.html#CodePipeline.Client.create_pipeline)'
                type: list
                elements: dict
        elements: dict
        type: list
    version:
        description:
            - Version number of the CodePipeline. This number is automatically incremented when a CodePipeline is updated.
        required: false
        type: int
    state:
        description:
            - Create or remove CodePipeline.
        default: 'present'
        choices: ['present', 'absent']
        type: str
extends_documentation_fragment:
    - amazon.aws.common.modules
    - amazon.aws.region.modules
    - amazon.aws.boto3
a	  
# Note: These examples do not set authentication details, see the AWS Guide for details.

# Example for creating a pipeline for continuous deploy of Github code to an ECS cluster (container)
- community.aws.codepipeline:
    name: my_deploy_pipeline
    role_arn: arn:aws:iam::123456:role/AWS-CodePipeline-Service
    artifact_store:
      type: S3
      location: my_s3_codepipline_bucket
    stages:
      - name: Get_source
        actions:
          -
            name: Git_pull
            actionTypeId:
              category: Source
              owner: ThirdParty
              provider: GitHub
              version: '1'
            outputArtifacts:
              - { name: my-app-source }
            configuration:
              Owner: mediapeers
              Repo: my_gh_repo
              PollForSourceChanges: 'true'
              Branch: master
              # Generate token like this:
              # https://docs.aws.amazon.com/codepipeline/latest/userguide/GitHub-rotate-personal-token-CLI.html
              # GH Link: https://github.com/settings/tokens
              OAuthToken: 'abc123def456'
            runOrder: 1
      - name: Build
        actions:
          -
            name: CodeBuild
            actionTypeId:
              category: Build
              owner: AWS
              provider: CodeBuild
              version: '1'
            inputArtifacts:
              - { name: my-app-source }
            outputArtifacts:
              - { name: my-app-build }
            configuration:
              # A project with that name needs to be setup on AWS CodeBuild already (use code_build module).
              ProjectName: codebuild-project-name
            runOrder: 1
      - name: ECS_deploy
        actions:
          -
            name: ECS_deploy
            actionTypeId:
              category: Deploy
              owner: AWS
              provider: ECS
              version: '1'
            inputArtifacts:
              - { name: vod-api-app-build }
            configuration:
              # an ECS cluster with that name needs to be setup on AWS ECS already (use ecs_cluster and ecs_service module)
              ClusterName: ecs-cluster-name
              ServiceName: ecs-cluster-service-name
              FileName: imagedefinitions.json
    region: us-east-1
    state: present
a  
pipeline:
  description: Returns the dictionary describing the CodePipeline configuration.
  returned: success
  type: complex
  contains:
    name:
      description: Name of the CodePipeline
      returned: always
      type: str
      sample: my_deploy_pipeline
    role_arn:
      description: ARN of the IAM role attached to the CodePipeline
      returned: always
      type: str
      sample: arn:aws:iam::123123123:role/codepipeline-service-role
    artifact_store:
      description: Information about where the build artifacts are stored
      returned: always
      type: complex
      contains:
        type:
          description: The type of the artifacts store, such as S3
          returned: always
          type: str
          sample: S3
        location:
          description: The location of the artifacts storage (s3 bucket name)
          returned: always
          type: str
          sample: my_s3_codepipline_bucket
        encryption_key:
          description: The encryption key used to encrypt the artifacts store, such as an AWS KMS key.
          returned: when configured
          type: str
    stages:
      description: List of stages configured for this CodePipeline
      returned: always
      type: list
    version:
      description:
        - The version number of the CodePipeline.
        - This number is auto incremented when CodePipeline params are changed.
      returned: always
      type: int
    N)camel_dict_to_snake_dict)is_boto3_error_code)compare_policies)AnsibleCommunityAWSModulec                    ||||d}|r||d<   	 | j                  |      }|S # t        j                  j                  t        j                  j                  f$ r#}	|j                  |	d|d           Y d }	~	y d }	~	ww xY w)N)nameroleArnartifactStorestagesversionpipelinezUnable create pipeline r   msg)create_pipelinebotocore
exceptionsClientErrorBotoCoreErrorfail_json_aws)
clientr   role_arnartifact_storer   r   modulepipeline_dictrespes
             n/home/dcms/DCMS/lib/python3.12/site-packages/ansible_collections/community/aws/plugins/modules/codepipeline.pyr   r      s    !hcijM#*i W%%}%=++X-@-@-N-NO WQ&=mF>S=T$UVVWs   $ 7A>A99A>c                     	 | j                  |      }|S # t        j                  j                  t        j                  j                  f$ r#}|j                  |d|d           Y d }~y d }~ww xY w)Nr   zUnable update pipeline r   r   )update_pipeliner   r   r   r   r   )r   r   r   r   r   s        r   r    r       ss    W%%}%=++X-@-@-N-NO WQ&=mF>S=T$UVVWs    7A0A++A0c                     	 | j                  |      }|S # t        j                  j                  t        j                  j                  f$ r }|j                  |d|        Y d }~y d }~ww xY w)Nr   zUnable delete pipeline r   )delete_pipeliner   r   r   r   r   )r   r   r   r   r   s        r   r#   r#      sm    F%%4%0++X-@-@-N-NO FQ&=dV$DEEFs    7A-A((A-c                 *   i }	 || j                  ||      }|S | j                  |      }|S # t        d      $ r |cY S t        j                  j                  t        j                  j
                  f$ r}|j                  |       Y d }~y d }~ww xY w)N)r   r   r"   PipelineNotFoundException)get_pipeliner   r   r   r   r   r   )r   r   r   r   r   r   s         r   describe_pipeliner'      s    H **g*FHO***5HO:; ))''   	Q	 s   / / B6B7BBc                     t        t        dd      t        dd      t        dd      t        ddd      t        d      t        d	d
gd	            } t        |       }|j                  d      }|j                  j	                  d      }d}t        ||j                  d   |j                  d   |      }i }|d	k(  rd|v rt        j                  |d         }|j                  d   |d<   |j                  d   |d<   |j                  d   |d<   |j                  d   |j                  d   |d<   t        |||      }t        |d   |d         r}d}nzt        ||j                  d   |j                  d   |j                  d   |j                  d   |j                  d   |      }d}n$|d
k(  r|rt        ||j                  d   |      }d} |j                  dd|it        |       y )NTstr)requiredtypedictlist)r*   r+   elementsint)r+   presentabsent)choicesdefault)r   r   r   r   r   state)argument_speccodepipeliner4   Fr   r   )r   r   r   r   r   r   r	   r   r
   r   )r   r   r   )r   r   r   r   r   r   r   )r   r   r   changed )r,   AnsibleAWSModuler   paramsgetr'   copydeepcopyr    r   r   r#   	exit_jsonr   )r5   r   client_connr4   r7   found_code_pipelinepipeline_resultr   s           r   mainrB      s   4e,t%0T7T@% Ix0)DM M:F--/KMMg&EG ,v!6i@Xag O	,, MM*=j*IJM'-}}Z'@M)$-3]];K-LM/*&,mmH&=M(#}}Y'3+1==+Ci(-[P]flmO 3J ?Q[A\]-"]]6*z2%}}-=>}}X.i0O G	(	-[v}}U[G\eklOGFRWR(@(QR    __main__)DOCUMENTATIONEXAMPLESRETURNr<   r   ImportError0ansible.module_utils.common.dict_transformationsr   <ansible_collections.amazon.aws.plugins.module_utils.botocorer   :ansible_collections.amazon.aws.plugins.module_utils.policyr   >ansible_collections.community.aws.plugins.module_utils.modulesr   r9   r   r    r#   r'   rB   __name__r8   rC   r   <module>rN      s   GRCJ-
^ 	 V \ W xWWF $4Sn zF _  		s   A AA