--- # A Note about ec2 environment variable name preference: # - EC2_URL -> AWS_URL # - EC2_ACCESS_KEY -> AWS_ACCESS_KEY_ID -> AWS_ACCESS_KEY # - EC2_SECRET_KEY -> AWS_SECRET_ACCESS_KEY -> AWX_SECRET_KEY # - EC2_REGION -> AWS_REGION # - block: - name: set connection information for all tasks set_fact: aws_connection_info: &aws_connection_info aws_access_key: "{{ aws_access_key }}" aws_secret_key: "{{ aws_secret_key }}" security_token: "{{ security_token | default(omit) }}" region: "{{ aws_region }}" no_log: yes # ============================================================ - name: test failure with no parameters redshift: <<: *aws_connection_info register: result ignore_errors: true - name: assert failure with no parameters assert: that: - 'result.failed' - 'result.msg == "missing required arguments: command, identifier"' # ============================================================ - name: test failure with only identifier redshift: identifier: '{{ redshift_cluster_name }}' <<: *aws_connection_info register: result ignore_errors: true - name: assert failure with only identifier assert: that: - 'result.failed' - 'result.msg == "missing required arguments: command"' # ============================================================ - name: test create with no identifier redshift: command: create <<: *aws_connection_info register: result ignore_errors: true - name: assert failure with no identifier assert: that: - 'result.failed' - 'result.msg == "missing required arguments: identifier"' # ============================================================ - name: test create with missing node_type redshift: command: create identifier: "{{ redshift_cluster_name }}" <<: *aws_connection_info register: result ignore_errors: true - name: assert failure with missing node_type assert: that: - 'result.failed' - 'result.msg == "command is create but all of the following are missing: node_type, username, password"' # ============================================================ - name: test create with missing username redshift: command: create identifier: "{{ redshift_cluster_name }}" username: "{{ redshift_master_username }}" <<: *aws_connection_info register: result ignore_errors: true - name: assert create failure with missing username assert: that: - 'result.failed' - 'result.msg == "command is create but all of the following are missing: node_type, password"' # ============================================================ - name: test create with missing username redshift: command: create identifier: "{{ redshift_cluster_name }}" password: "{{ reshift_master_password }}" <<: *aws_connection_info register: result ignore_errors: true - name: assert create failure with missing username assert: that: - 'result.failed' - 'result.msg == "command is create but all of the following are missing: node_type, username"' # ============================================================ - name: test create with default params redshift: command: create identifier: "{{ redshift_cluster_name }}" username: "{{ redshift_master_username }}" password: "{{ reshift_master_password }}" node_type: "{{ node_type }}" wait: yes wait_timeout: 1000 <<: *aws_connection_info register: result - debug: msg: "{{ result }}" verbosity: 1 - name: assert create success assert: that: - 'result.changed' - 'result.cluster.identifier == "{{ redshift_cluster_name }}"' # ============================================================ - name: test create again with default params redshift: command: create identifier: "{{ redshift_cluster_name }}" username: "{{ redshift_master_username }}" password: "{{ reshift_master_password }}" node_type: "{{ node_type }}" <<: *aws_connection_info register: result - name: assert no change gets made to the existing cluster assert: that: - 'not result.changed' - 'result.cluster.identifier == "{{ redshift_cluster_name }}"' # ============================================================ - name: test modify cluster redshift: command: modify identifier: "{{ redshift_cluster_name }}" new_cluster_identifier: "{{ redshift_cluster_name }}-modified" enhanced_vpc_routing: True wait: yes wait_timeout: 1000 <<: *aws_connection_info register: result - name: assert cluster was modified assert: that: - 'result.changed' - 'result.cluster.identifier == "{{ redshift_cluster_name }}-modified"' - 'result.cluster.enhanced_vpc_routing == True' # ============================================================ - name: test delete with no cluster identifier redshift: command: delete <<: *aws_connection_info register: result ignore_errors: true - name: assert failure with no identifier assert: that: - 'result.failed' - 'result.msg == "missing required arguments: identifier"' # ============================================================ - name: test delete with no snapshot id redshift: command: delete identifier: "{{ redshift_cluster_name }}" <<: *aws_connection_info register: result ignore_errors: true - name: assert failure for no snapshot identifier assert: that: - 'result.failed' - 'result.msg == "Need to specifiy final_cluster_snapshot_identifier if skip_final_cluster_snapshot is False"' # ============================================================ - name: test successful delete redshift: command: delete identifier: "{{ redshift_cluster_name }}-modified" skip_final_cluster_snapshot: true wait: yes wait_timeout: 1200 <<: *aws_connection_info register: result - name: assert delete assert: that: - 'result.changed' # ============================================================ - name: test create multi-node cluster with custom db-name redshift: command: create identifier: "{{ redshift_cluster_name }}" username: "{{ redshift_master_username }}" password: "{{ reshift_master_password }}" node_type: "{{ node_type }}" cluster_type: multi-node number_of_nodes: 3 wait: yes db_name: "integration_test" wait_timeout: 1800 <<: *aws_connection_info register: result - name: assert create assert: that: - 'result.changed' - 'result.cluster.identifier == "{{ redshift_cluster_name }}"' - 'result.cluster.db_name == "integration_test"' # ============================================================ - name: test successful delete of multi-node cluster redshift: command: delete identifier: "{{ redshift_cluster_name }}" skip_final_cluster_snapshot: true wait: yes wait_timeout: 1200 <<: *aws_connection_info register: result - name: assert delete assert: that: - 'result.changed' always: - name: Remove cluster if tests failed redshift: command: delete identifier: "{{ item }}" skip_final_cluster_snapshot: true wait: yes wait_timeout: 1200 <<: *aws_connection_info register: cleanup ignore_errors: yes retries: 10 delay: 10 until: cleanup is success loop: - "{{ redshift_cluster_name }}" - "{{ redshift_cluster_name }}-modified"