Repository: ansible/ansible

Issue:
Create Cloud Formation Change Set fails with a KeyError exception
##### ISSUE TYPE
 - Bug Report

##### COMPONENT NAME
cloudformation

##### ANSIBLE VERSION
```
ansible-playbook 2.5.0
  config file = /Users/e48687/.ansible.cfg
  configured module search path = [u'/Users/e48687/.ansible/plugins/modules', u'/usr/share/ansible/plugins/modules']
  ansible python module location = /Library/Python/2.7/site-packages/ansible
  executable location = /usr/local/bin/ansible-playbook
  python version = 2.7.10 (default, Feb  7 2017, 00:08:15) [GCC 4.2.1 Compatible Apple LLVM 8.0.0 (clang-800.0.34)]
```

##### CONFIGURATION
N/A

##### OS / ENVIRONMENT
N/A

##### SUMMARY
When I try to create a new Cloud Formation Change Set, Ansible fails with a python error: 
KeyError: 'ResourceType'
I did a bit of investigation and I found out this feature was working fine until 6d167399261e656262bbf7ece575cdfd9bd2dc85 and it stopped working on b9e15d0df1100d492c5bd766cc0d65f2465f9a50.

##### STEPS TO REPRODUCE

```yaml
- name: "Create EC2 Cloudformation Change Set for Test1"
  cloudformation:
    region: "us-east-1"
    state: "present"
    stack_name: "Test1"
    template_url: "{{ TemplateURL }}"
    template_parameters: "{{ TemplateParameters }}"
    tags: "{{ Tags }}"
    create_changeset: true
    changeset_name: "New change set"
```

##### EXPECTED RESULTS
changed: [localhost] => {
    "changed": true, 
    "events": [
        ...
    ], 
    "failed": false, 
    "log": [], 
    "output": "Stack CREATE_CHANGESET complete", 
    "stack_outputs": {
       ...
    }, 
    "stack_resources": [
        ...
    ]
}

##### ACTUAL RESULTS

```
The full traceback is:
Traceback (most recent call last):
  File "/tmp/ansible_w3U9Kn/ansible_module_cloudformation.py", line 329, in create_changeset
    result = stack_operation(cfn, stack_params['StackName'], 'CREATE_CHANGESET')
  File "/tmp/ansible_w3U9Kn/ansible_module_cloudformation.py", line 402, in stack_operation
    ret = get_stack_events(cfn, stack_name, op_token)
  File "/tmp/ansible_w3U9Kn/ansible_module_cloudformation.py", line 270, in get_stack_events
    eventline = 'StackEvent {ResourceType} {LogicalResourceId} {ResourceStatus}'.format(**e)
KeyError: 'ResourceType'

fatal: [localhost]: FAILED! => {
    "changed": false, 
    "invocation": {
        "module_args": {
            "aws_access_key": null, 
            "aws_secret_key": null, 
            "changeset_name": "New change set", 
            "create_changeset": true, 
            "disable_rollback": false, 
            "ec2_url": null, 
            "notification_arns": null, 
            "profile": null, 
            "region": "us-east-1", 
            "role_arn": null, 
            "security_token": null, 
            "stack_name": "Test1", 
            "stack_policy": null, 
            "state": "present", 
            "tags": {
                ...
            }, 
            "template": null, 
            "template_format": null, 
            "template_parameters": {}, 
            "template_url": "...", 
            "termination_protection": null, 
            "validate_certs": true
        }
    }, 
    "msg": "Failed to create change set: ResourceType 'ResourceType' - <type 'exceptions.KeyError'>"
}
```

Create Cloud Formation Change Set fails with a KeyError exception
##### ISSUE TYPE
 - Bug Report

##### COMPONENT NAME
cloudformation

##### ANSIBLE VERSION
```
ansible-playbook 2.5.0
  config file = /Users/e48687/.ansible.cfg
  configured module search path = [u'/Users/e48687/.ansible/plugins/modules', u'/usr/share/ansible/plugins/modules']
  ansible python module location = /Library/Python/2.7/site-packages/ansible
  executable location = /usr/local/bin/ansible-playbook
  python version = 2.7.10 (default, Feb  7 2017, 00:08:15) [GCC 4.2.1 Compatible Apple LLVM 8.0.0 (clang-800.0.34)]
```

##### CONFIGURATION
N/A

##### OS / ENVIRONMENT
N/A

##### SUMMARY
When I try to create a new Cloud Formation Change Set, Ansible fails with a python error: 
KeyError: 'ResourceType'
I did a bit of investigation and I found out this feature was working fine until 6d167399261e656262bbf7ece575cdfd9bd2dc85 and it stopped working on b9e15d0df1100d492c5bd766cc0d65f2465f9a50.

##### STEPS TO REPRODUCE

```yaml
- name: "Create EC2 Cloudformation Change Set for Test1"
  cloudformation:
    region: "us-east-1"
    state: "present"
    stack_name: "Test1"
    template_url: "{{ TemplateURL }}"
    template_parameters: "{{ TemplateParameters }}"
    tags: "{{ Tags }}"
    create_changeset: true
    changeset_name: "New change set"
```

##### EXPECTED RESULTS
changed: [localhost] => {
    "changed": true, 
    "events": [
        ...
    ], 
    "failed": false, 
    "log": [], 
    "output": "Stack CREATE_CHANGESET complete", 
    "stack_outputs": {
       ...
    }, 
    "stack_resources": [
        ...
    ]
}

##### ACTUAL RESULTS

```
The full traceback is:
Traceback (most recent call last):
  File "/tmp/ansible_w3U9Kn/ansible_module_cloudformation.py", line 329, in create_changeset
    result = stack_operation(cfn, stack_params['StackName'], 'CREATE_CHANGESET')
  File "/tmp/ansible_w3U9Kn/ansible_module_cloudformation.py", line 402, in stack_operation
    ret = get_stack_events(cfn, stack_name, op_token)
  File "/tmp/ansible_w3U9Kn/ansible_module_cloudformation.py", line 270, in get_stack_events
    eventline = 'StackEvent {ResourceType} {LogicalResourceId} {ResourceStatus}'.format(**e)
KeyError: 'ResourceType'

fatal: [localhost]: FAILED! => {
    "changed": false, 
    "invocation": {
        "module_args": {
            "aws_access_key": null, 
            "aws_secret_key": null, 
            "changeset_name": "New change set", 
            "create_changeset": true, 
            "disable_rollback": false, 
            "ec2_url": null, 
            "notification_arns": null, 
            "profile": null, 
            "region": "us-east-1", 
            "role_arn": null, 
            "security_token": null, 
            "stack_name": "Test1", 
            "stack_policy": null, 
            "state": "present", 
            "tags": {
                ...
            }, 
            "template": null, 
            "template_format": null, 
            "template_parameters": {}, 
            "template_url": "...", 
            "termination_protection": null, 
            "validate_certs": true
        }
    }, 
    "msg": "Failed to create change set: ResourceType 'ResourceType' - <type 'exceptions.KeyError'>"
}
```



Discussion:
cc @jsmartin @ryansb @tedder
[click here for bot help](https://github.com/ansible/ansibullbot/blob/master/ISSUE_HELP.md)
<!--- boilerplate: notify --->
I think it's more likely from @ryansb's change in 11c225e0396259e93bd616a2e833a38e89b26627 around line 269.

In the AWS console (or with awscli), can you tell us what the events are for this stack?
@tedder this is the list of events, taken from the AWS CLI (describe-stack-events):

```
{
    "StackEvents": [
        {
            "StackId": "arn:aws:cloudformation:us-east-1:XXXXXXXXXXX:stack/Test1/77c0aaf0-be61-11e7-979b-500c5242948e", 
            "EventId": "e361c7e0-be65-11e7-b982-503f23fb5536", 
            "ResourceStatus": "UPDATE_COMPLETE", 
            "ResourceType": "AWS::CloudFormation::Stack", 
            "Timestamp": "2017-10-31T18:04:07.219Z", 
            "StackName": "Test1", 
            "PhysicalResourceId": "arn:aws:cloudformation:us-east-1:XXXXXXXXXXX:stack/Test1/77c0aaf0-be61-11e7-979b-500c5242948e", 
            "ClientRequestToken": "351686c8-2561-4b26-8bfc-efa4e579d09f", 
            "LogicalResourceId": "Test1"
        }, 
        {
            "StackId": "arn:aws:cloudformation:us-east-1:XXXXXXXXXXX:stack/Test1/77c0aaf0-be61-11e7-979b-500c5242948e", 
            "EventId": "e27ac340-be65-11e7-a80b-500c28903236", 
            "ResourceStatus": "UPDATE_COMPLETE_CLEANUP_IN_PROGRESS", 
            "ResourceType": "AWS::CloudFormation::Stack", 
            "Timestamp": "2017-10-31T18:04:05.776Z", 
            "StackName": "Test1", 
            "PhysicalResourceId": "arn:aws:cloudformation:us-east-1:XXXXXXXXXXX:stack/Test1/77c0aaf0-be61-11e7-979b-500c5242948e", 
            "ClientRequestToken": "351686c8-2561-4b26-8bfc-efa4e579d09f", 
            "LogicalResourceId": "Test1"
        }, 
        {
            "StackId": "arn:aws:cloudformation:us-east-1:XXXXXXXXXXX:stack/Test1/77c0aaf0-be61-11e7-979b-500c5242948e", 
            "EventId": "Test-UPDATE_COMPLETE-2017-10-31T18:03:59.387Z", 
            "ResourceStatus": "UPDATE_COMPLETE", 
            "ResourceType": "AWS::EC2::Instance", 
            "Timestamp": "2017-10-31T18:03:59.387Z", 
            "StackName": "Test1", 
            "ResourceProperties": "XXXXX", 
            "PhysicalResourceId": "i-074a45422e8ac41f3", 
            "ClientRequestToken": "351686c8-2561-4b26-8bfc-efa4e579d09f", 
            "LogicalResourceId": "Test"
        }, 
        {
            "StackId": "arn:aws:cloudformation:us-east-1:XXXXXXXXXXX:stack/Test1/77c0aaf0-be61-11e7-979b-500c5242948e", 
            "EventId": "Test-UPDATE_IN_PROGRESS-2017-10-31T18:03:43.919Z", 
            "ResourceStatus": "UPDATE_IN_PROGRESS", 
            "ResourceType": "AWS::EC2::Instance", 
            "Timestamp": "2017-10-31T18:03:43.919Z", 
            "StackName": "Test1", 
            "ResourceProperties": "XXXXX", 
            "PhysicalResourceId": "i-074a45422e8ac41f3", 
            "ClientRequestToken": "351686c8-2561-4b26-8bfc-efa4e579d09f", 
            "LogicalResourceId": "Test"
        }, 
        {
            "StackId": "arn:aws:cloudformation:us-east-1:XXXXXXXXXXX:stack/Test1/77c0aaf0-be61-11e7-979b-500c5242948e", 
            "EventId": "volumeTest-UPDATE_COMPLETE-2017-10-31T18:03:40.751Z", 
            "ResourceStatus": "UPDATE_COMPLETE", 
            "ResourceType": "AWS::EC2::Volume", 
            "Timestamp": "2017-10-31T18:03:40.751Z", 
            "StackName": "Test1", 
            "ResourceProperties": "XXXXXX", 
            "PhysicalResourceId": "vol-0a903d1db31bc8deb", 
            "ClientRequestToken": "351686c8-2561-4b26-8bfc-efa4e579d09f", 
            "LogicalResourceId": "volumeTest"
        }, 
        {
            "StackId": "arn:aws:cloudformation:us-east-1:XXXXXXXXXXX:stack/Test1/77c0aaf0-be61-11e7-979b-500c5242948e", 
            "EventId": "volumeTest-UPDATE_IN_PROGRESS-2017-10-31T18:03:25.102Z", 
            "ResourceStatus": "UPDATE_IN_PROGRESS", 
            "ResourceType": "AWS::EC2::Volume", 
            "Timestamp": "2017-10-31T18:03:25.102Z", 
            "StackName": "Test1", 
            "ResourceProperties": "XXXXXXX", 
            "PhysicalResourceId": "vol-0a903d1db31bc8deb", 
            "ClientRequestToken": "351686c8-2561-4b26-8bfc-efa4e579d09f", 
            "LogicalResourceId": "volumeTest"
        }, 
        {
            "StackId": "arn:aws:cloudformation:us-east-1:XXXXXXXXXXX:stack/Test1/77c0aaf0-be61-11e7-979b-500c5242948e", 
            "EventId": "c62e0ad0-be65-11e7-bc40-503aca2616c5", 
            "ResourceStatus": "UPDATE_IN_PROGRESS", 
            "ResourceType": "AWS::CloudFormation::Stack", 
            "Timestamp": "2017-10-31T18:03:18.170Z", 
            "ResourceStatusReason": "User Initiated", 
            "StackName": "Test1", 
            "PhysicalResourceId": "arn:aws:cloudformation:us-east-1:XXXXXXXXXXX:stack/Test1/77c0aaf0-be61-11e7-979b-500c5242948e", 
            "ClientRequestToken": "351686c8-2561-4b26-8bfc-efa4e579d09f", 
            "LogicalResourceId": "Test1"
        }, 
        {
            "StackId": "arn:aws:cloudformation:us-east-1:XXXXXXXXXXX:stack/Test1/77c0aaf0-be61-11e7-979b-500c5242948e", 
            "EventId": "ce46a190-be61-11e7-a80b-500c28903236", 
            "ResourceStatus": "CREATE_COMPLETE", 
            "ResourceType": "AWS::CloudFormation::Stack", 
            "Timestamp": "2017-10-31T17:34:53.882Z", 
            "StackName": "Test1", 
            "PhysicalResourceId": "arn:aws:cloudformation:us-east-1:XXXXXXXXXXX:stack/Test1/77c0aaf0-be61-11e7-979b-500c5242948e", 
            "ClientRequestToken": "e90a47c2-7f66-4d53-a39f-ed0eef803397", 
            "LogicalResourceId": "Test1"
        }, 
        {
            "StackId": "arn:aws:cloudformation:us-east-1:XXXXXXXXXXX:stack/Test1/77c0aaf0-be61-11e7-979b-500c5242948e", 
            "EventId": "dnsTestArecord-CREATE_COMPLETE-2017-10-31T17:34:51.122Z", 
            "ResourceStatus": "CREATE_COMPLETE", 
            "ResourceType": "AWS::Route53::RecordSet", 
            "Timestamp": "2017-10-31T17:34:51.122Z", 
            "StackName": "Test1", 
            "ResourceProperties": "XXXXXXX", 
            "PhysicalResourceId": "192.168.0.5", 
            "ClientRequestToken": "e90a47c2-7f66-4d53-a39f-ed0eef803397", 
            "LogicalResourceId": "dnsTestArecord"
        }, 
        {
            "StackId": "arn:aws:cloudformation:us-east-1:XXXXXXXXXXX:stack/Test1/77c0aaf0-be61-11e7-979b-500c5242948e", 
            "EventId": "dnsTestTXTrecords-CREATE_COMPLETE-2017-10-31T17:34:50.282Z", 
            "ResourceStatus": "CREATE_COMPLETE", 
            "ResourceType": "AWS::Route53::RecordSet", 
            "Timestamp": "2017-10-31T17:34:50.282Z", 
            "StackName": "Test1", 
            "ResourceProperties": "XXXXXX", 
            "PhysicalResourceId": "192.168.0.5", 
            "ClientRequestToken": "e90a47c2-7f66-4d53-a39f-ed0eef803397", 
            "LogicalResourceId": "dnsTestTXTrecords"
        }, 
        {
            "StackId": "arn:aws:cloudformation:us-east-1:XXXXXXXXXXX:stack/Test1/77c0aaf0-be61-11e7-979b-500c5242948e", 
            "EventId": "dnsTestArecord-CREATE_IN_PROGRESS-2017-10-31T17:33:49.626Z", 
            "ResourceStatus": "CREATE_IN_PROGRESS", 
            "ResourceType": "AWS::Route53::RecordSet", 
            "Timestamp": "2017-10-31T17:33:49.626Z", 
            "ResourceStatusReason": "Resource creation Initiated", 
            "StackName": "Test1", 
            "ResourceProperties": "XXXXXX", 
            "PhysicalResourceId": "192.168.0.5", 
            "ClientRequestToken": "e90a47c2-7f66-4d53-a39f-ed0eef803397", 
            "LogicalResourceId": "dnsTestArecord"
        }, 
        {
            "StackId": "arn:aws:cloudformation:us-east-1:XXXXXXXXXXX:stack/Test1/77c0aaf0-be61-11e7-979b-500c5242948e", 
            "EventId": "dnsTestArecord-CREATE_IN_PROGRESS-2017-10-31T17:33:49.032Z", 
            "ResourceStatus": "CREATE_IN_PROGRESS", 
            "ResourceType": "AWS::Route53::RecordSet", 
            "Timestamp": "2017-10-31T17:33:49.032Z", 
            "StackName": "Test1", 
            "ResourceProperties": "XXXXXX", 
            "PhysicalResourceId": "", 
            "ClientRequestToken": "e90a47c2-7f66-4d53-a39f-ed0eef803397", 
            "LogicalResourceId": "dnsTestArecord"
        }, 
        {
            "StackId": "arn:aws:cloudformation:us-east-1:XXXXXXXXXXX:stack/Test1/77c0aaf0-be61-11e7-979b-500c5242948e", 
            "EventId": "dnsTestTXTrecords-CREATE_IN_PROGRESS-2017-10-31T17:33:48.660Z", 
            "ResourceStatus": "CREATE_IN_PROGRESS", 
            "ResourceType": "AWS::Route53::RecordSet", 
            "Timestamp": "2017-10-31T17:33:48.660Z", 
            "ResourceStatusReason": "Resource creation Initiated", 
            "StackName": "Test1", 
            "ResourceProperties": "XXXXXX", 
            "PhysicalResourceId": "192.168.0.5", 
            "ClientRequestToken": "e90a47c2-7f66-4d53-a39f-ed0eef803397", 
            "LogicalResourceId": "dnsTestTXTrecords"
        }, 
        {
            "StackId": "arn:aws:cloudformation:us-east-1:XXXXXXXXXXX:stack/Test1/77c0aaf0-be61-11e7-979b-500c5242948e", 
            "EventId": "dnsTestTXTrecords-CREATE_IN_PROGRESS-2017-10-31T17:33:47.898Z", 
            "ResourceStatus": "CREATE_IN_PROGRESS", 
            "ResourceType": "AWS::Route53::RecordSet", 
            "Timestamp": "2017-10-31T17:33:47.898Z", 
            "StackName": "Test1", 
            "ResourceProperties": "XXXXXXX", 
            "PhysicalResourceId": "", 
            "ClientRequestToken": "e90a47c2-7f66-4d53-a39f-ed0eef803397", 
            "LogicalResourceId": "dnsTestTXTrecords"
        }, 
        {
            "StackId": "arn:aws:cloudformation:us-east-1:XXXXXXXXXXX:stack/Test1/77c0aaf0-be61-11e7-979b-500c5242948e", 
            "EventId": "Test-CREATE_COMPLETE-2017-10-31T17:33:45.495Z", 
            "ResourceStatus": "CREATE_COMPLETE", 
            "ResourceType": "AWS::EC2::Instance", 
            "Timestamp": "2017-10-31T17:33:45.495Z", 
            "StackName": "Test1", 
            "ResourceProperties": "XXXXXX", 
            "PhysicalResourceId": "i-074a45422e8ac41f3", 
            "ClientRequestToken": "e90a47c2-7f66-4d53-a39f-ed0eef803397", 
            "LogicalResourceId": "Test"
        }, 
        {
            "StackId": "arn:aws:cloudformation:us-east-1:XXXXXXXXXXX:stack/Test1/77c0aaf0-be61-11e7-979b-500c5242948e", 
            "EventId": "Test-CREATE_IN_PROGRESS-2017-10-31T17:32:55.258Z", 
            "ResourceStatus": "CREATE_IN_PROGRESS", 
            "ResourceType": "AWS::EC2::Instance", 
            "Timestamp": "2017-10-31T17:32:55.258Z", 
            "ResourceStatusReason": "Resource creation Initiated", 
            "StackName": "Test1", 
            "ResourceProperties": "XXXXXX", 
            "PhysicalResourceId": "i-074a45422e8ac41f3", 
            "ClientRequestToken": "e90a47c2-7f66-4d53-a39f-ed0eef803397", 
            "LogicalResourceId": "Test"
        }, 
        {
            "StackId": "arn:aws:cloudformation:us-east-1:XXXXXXXXXXX:stack/Test1/77c0aaf0-be61-11e7-979b-500c5242948e", 
            "EventId": "Test-CREATE_IN_PROGRESS-2017-10-31T17:32:53.741Z", 
            "ResourceStatus": "CREATE_IN_PROGRESS", 
            "ResourceType": "AWS::EC2::Instance", 
            "Timestamp": "2017-10-31T17:32:53.741Z", 
            "StackName": "Test1", 
            "ResourceProperties": "XXXXXX", 
            "PhysicalResourceId": "", 
            "ClientRequestToken": "e90a47c2-7f66-4d53-a39f-ed0eef803397", 
            "LogicalResourceId": "Test"
        }, 
        {
            "StackId": "arn:aws:cloudformation:us-east-1:XXXXXXXXXXX:stack/Test1/77c0aaf0-be61-11e7-979b-500c5242948e", 
            "EventId": "volumeTest-CREATE_COMPLETE-2017-10-31T17:32:51.177Z", 
            "ResourceStatus": "CREATE_COMPLETE", 
            "ResourceType": "AWS::EC2::Volume", 
            "Timestamp": "2017-10-31T17:32:51.177Z", 
            "StackName": "Test1", 
            "ResourceProperties": "XXXXXXX", 
            "PhysicalResourceId": "vol-0a903d1db31bc8deb", 
            "ClientRequestToken": "e90a47c2-7f66-4d53-a39f-ed0eef803397", 
            "LogicalResourceId": "volumeTest"
        }, 
        {
            "StackId": "arn:aws:cloudformation:us-east-1:XXXXXXXXXXX:stack/Test1/77c0aaf0-be61-11e7-979b-500c5242948e", 
            "EventId": "volumeTest-CREATE_IN_PROGRESS-2017-10-31T17:32:34.871Z", 
            "ResourceStatus": "CREATE_IN_PROGRESS", 
            "ResourceType": "AWS::EC2::Volume", 
            "Timestamp": "2017-10-31T17:32:34.871Z", 
            "ResourceStatusReason": "Resource creation Initiated", 
            "StackName": "Test1", 
            "ResourceProperties": "XXXXXXX", 
            "PhysicalResourceId": "vol-0a903d1db31bc8deb", 
            "ClientRequestToken": "e90a47c2-7f66-4d53-a39f-ed0eef803397", 
            "LogicalResourceId": "volumeTest"
        }, 
        {
            "StackId": "arn:aws:cloudformation:us-east-1:XXXXXXXXXXX:stack/Test1/77c0aaf0-be61-11e7-979b-500c5242948e", 
            "EventId": "volumeTest-CREATE_IN_PROGRESS-2017-10-31T17:32:34.122Z", 
            "ResourceStatus": "CREATE_IN_PROGRESS", 
            "ResourceType": "AWS::EC2::Volume", 
            "Timestamp": "2017-10-31T17:32:34.122Z", 
            "StackName": "Test1", 
            "ResourceProperties": "XXXXXXX", 
            "PhysicalResourceId": "", 
            "ClientRequestToken": "e90a47c2-7f66-4d53-a39f-ed0eef803397", 
            "LogicalResourceId": "volumeTest"
        }, 
        {
            "StackId": "arn:aws:cloudformation:us-east-1:XXXXXXXXXXX:stack/Test1/77c0aaf0-be61-11e7-979b-500c5242948e", 
            "EventId": "77c1e370-be61-11e7-979b-500c5242948e", 
            "ResourceStatus": "CREATE_IN_PROGRESS", 
            "ResourceType": "AWS::CloudFormation::Stack", 
            "Timestamp": "2017-10-31T17:32:29.215Z", 
            "ResourceStatusReason": "User Initiated", 
            "StackName": "Test1", 
            "PhysicalResourceId": "arn:aws:cloudformation:us-east-1:XXXXXXXXXXX:stack/Test1/77c0aaf0-be61-11e7-979b-500c5242948e", 
            "ClientRequestToken": "e90a47c2-7f66-4d53-a39f-ed0eef803397", 
            "LogicalResourceId": "Test1"
        }
    ]
}

```
cc @jsmartin @ryansb @tedder
[click here for bot help](https://github.com/ansible/ansibullbot/blob/master/ISSUE_HELP.md)
<!--- boilerplate: notify --->
I think it's more likely from @ryansb's change in 11c225e0396259e93bd616a2e833a38e89b26627 around line 269.

In the AWS console (or with awscli), can you tell us what the events are for this stack?
@tedder this is the list of events, taken from the AWS CLI (describe-stack-events):

```
{
    "StackEvents": [
        {
            "StackId": "arn:aws:cloudformation:us-east-1:XXXXXXXXXXX:stack/Test1/77c0aaf0-be61-11e7-979b-500c5242948e", 
            "EventId": "e361c7e0-be65-11e7-b982-503f23fb5536", 
            "ResourceStatus": "UPDATE_COMPLETE", 
            "ResourceType": "AWS::CloudFormation::Stack", 
            "Timestamp": "2017-10-31T18:04:07.219Z", 
            "StackName": "Test1", 
            "PhysicalResourceId": "arn:aws:cloudformation:us-east-1:XXXXXXXXXXX:stack/Test1/77c0aaf0-be61-11e7-979b-500c5242948e", 
            "ClientRequestToken": "351686c8-2561-4b26-8bfc-efa4e579d09f", 
            "LogicalResourceId": "Test1"
        }, 
        {
            "StackId": "arn:aws:cloudformation:us-east-1:XXXXXXXXXXX:stack/Test1/77c0aaf0-be61-11e7-979b-500c5242948e", 
            "EventId": "e27ac340-be65-11e7-a80b-500c28903236", 
            "ResourceStatus": "UPDATE_COMPLETE_CLEANUP_IN_PROGRESS", 
            "ResourceType": "AWS::CloudFormation::Stack", 
            "Timestamp": "2017-10-31T18:04:05.776Z", 
            "StackName": "Test1", 
            "PhysicalResourceId": "arn:aws:cloudformation:us-east-1:XXXXXXXXXXX:stack/Test1/77c0aaf0-be61-11e7-979b-500c5242948e", 
            "ClientRequestToken": "351686c8-2561-4b26-8bfc-efa4e579d09f", 
            "LogicalResourceId": "Test1"
        }, 
        {
            "StackId": "arn:aws:cloudformation:us-east-1:XXXXXXXXXXX:stack/Test1/77c0aaf0-be61-11e7-979b-500c5242948e", 
            "EventId": "Test-UPDATE_COMPLETE-2017-10-31T18:03:59.387Z", 
            "ResourceStatus": "UPDATE_COMPLETE", 
            "ResourceType": "AWS::EC2::Instance", 
            "Timestamp": "2017-10-31T18:03:59.387Z", 
            "StackName": "Test1", 
            "ResourceProperties": "XXXXX", 
            "PhysicalResourceId": "i-074a45422e8ac41f3", 
            "ClientRequestToken": "351686c8-2561-4b26-8bfc-efa4e579d09f", 
            "LogicalResourceId": "Test"
        }, 
        {
            "StackId": "arn:aws:cloudformation:us-east-1:XXXXXXXXXXX:stack/Test1/77c0aaf0-be61-11e7-979b-500c5242948e", 
            "EventId": "Test-UPDATE_IN_PROGRESS-2017-10-31T18:03:43.919Z", 
            "ResourceStatus": "UPDATE_IN_PROGRESS", 
            "ResourceType": "AWS::EC2::Instance", 
            "Timestamp": "2017-10-31T18:03:43.919Z", 
            "StackName": "Test1", 
            "ResourceProperties": "XXXXX", 
            "PhysicalResourceId": "i-074a45422e8ac41f3", 
            "ClientRequestToken": "351686c8-2561-4b26-8bfc-efa4e579d09f", 
            "LogicalResourceId": "Test"
        }, 
        {
            "StackId": "arn:aws:cloudformation:us-east-1:XXXXXXXXXXX:stack/Test1/77c0aaf0-be61-11e7-979b-500c5242948e", 
            "EventId": "volumeTest-UPDATE_COMPLETE-2017-10-31T18:03:40.751Z", 
            "ResourceStatus": "UPDATE_COMPLETE", 
            "ResourceType": "AWS::EC2::Volume", 
            "Timestamp": "2017-10-31T18:03:40.751Z", 
            "StackName": "Test1", 
            "ResourceProperties": "XXXXXX", 
            "PhysicalResourceId": "vol-0a903d1db31bc8deb", 
            "ClientRequestToken": "351686c8-2561-4b26-8bfc-efa4e579d09f", 
            "LogicalResourceId": "volumeTest"
        }, 
        {
            "StackId": "arn:aws:cloudformation:us-east-1:XXXXXXXXXXX:stack/Test1/77c0aaf0-be61-11e7-979b-500c5242948e", 
            "EventId": "volumeTest-UPDATE_IN_PROGRESS-2017-10-31T18:03:25.102Z", 
            "ResourceStatus": "UPDATE_IN_PROGRESS", 
            "ResourceType": "AWS::EC2::Volume", 
            "Timestamp": "2017-10-31T18:03:25.102Z", 
            "StackName": "Test1", 
            "ResourceProperties": "XXXXXXX", 
            "PhysicalResourceId": "vol-0a903d1db31bc8deb", 
            "ClientRequestToken": "351686c8-2561-4b26-8bfc-efa4e579d09f", 
            "LogicalResourceId": "volumeTest"
        }, 
        {
            "StackId": "arn:aws:cloudformation:us-east-1:XXXXXXXXXXX:stack/Test1/77c0aaf0-be61-11e7-979b-500c5242948e", 
            "EventId": "c62e0ad0-be65-11e7-bc40-503aca2616c5", 
            "ResourceStatus": "UPDATE_IN_PROGRESS", 
            "ResourceType": "AWS::CloudFormation::Stack", 
            "Timestamp": "2017-10-31T18:03:18.170Z", 
            "ResourceStatusReason": "User Initiated", 
            "StackName": "Test1", 
            "PhysicalResourceId": "arn:aws:cloudformation:us-east-1:XXXXXXXXXXX:stack/Test1/77c0aaf0-be61-11e7-979b-500c5242948e", 
            "ClientRequestToken": "351686c8-2561-4b26-8bfc-efa4e579d09f", 
            "LogicalResourceId": "Test1"
        }, 
        {
            "StackId": "arn:aws:cloudformation:us-east-1:XXXXXXXXXXX:stack/Test1/77c0aaf0-be61-11e7-979b-500c5242948e", 
            "EventId": "ce46a190-be61-11e7-a80b-500c28903236", 
            "ResourceStatus": "CREATE_COMPLETE", 
            "ResourceType": "AWS::CloudFormation::Stack", 
            "Timestamp": "2017-10-31T17:34:53.882Z", 
            "StackName": "Test1", 
            "PhysicalResourceId": "arn:aws:cloudformation:us-east-1:XXXXXXXXXXX:stack/Test1/77c0aaf0-be61-11e7-979b-500c5242948e", 
            "ClientRequestToken": "e90a47c2-7f66-4d53-a39f-ed0eef803397", 
            "LogicalResourceId": "Test1"
        }, 
        {
            "StackId": "arn:aws:cloudformation:us-east-1:XXXXXXXXXXX:stack/Test1/77c0aaf0-be61-11e7-979b-500c5242948e", 
            "EventId": "dnsTestArecord-CREATE_COMPLETE-2017-10-31T17:34:51.122Z", 
            "ResourceStatus": "CREATE_COMPLETE", 
            "ResourceType": "AWS::Route53::RecordSet", 
            "Timestamp": "2017-10-31T17:34:51.122Z", 
            "StackName": "Test1", 
            "ResourceProperties": "XXXXXXX", 
            "PhysicalResourceId": "192.168.0.5", 
            "ClientRequestToken": "e90a47c2-7f66-4d53-a39f-ed0eef803397", 
            "LogicalResourceId": "dnsTestArecord"
        }, 
        {
            "StackId": "arn:aws:cloudformation:us-east-1:XXXXXXXXXXX:stack/Test1/77c0aaf0-be61-11e7-979b-500c5242948e", 
            "EventId": "dnsTestTXTrecords-CREATE_COMPLETE-2017-10-31T17:34:50.282Z", 
            "ResourceStatus": "CREATE_COMPLETE", 
            "ResourceType": "AWS::Route53::RecordSet", 
            "Timestamp": "2017-10-31T17:34:50.282Z", 
            "StackName": "Test1", 
            "ResourceProperties": "XXXXXX", 
            "PhysicalResourceId": "192.168.0.5", 
            "ClientRequestToken": "e90a47c2-7f66-4d53-a39f-ed0eef803397", 
            "LogicalResourceId": "dnsTestTXTrecords"
        }, 
        {
            "StackId": "arn:aws:cloudformation:us-east-1:XXXXXXXXXXX:stack/Test1/77c0aaf0-be61-11e7-979b-500c5242948e", 
            "EventId": "dnsTestArecord-CREATE_IN_PROGRESS-2017-10-31T17:33:49.626Z", 
            "ResourceStatus": "CREATE_IN_PROGRESS", 
            "ResourceType": "AWS::Route53::RecordSet", 
            "Timestamp": "2017-10-31T17:33:49.626Z", 
            "ResourceStatusReason": "Resource creation Initiated", 
            "StackName": "Test1", 
            "ResourceProperties": "XXXXXX", 
            "PhysicalResourceId": "192.168.0.5", 
            "ClientRequestToken": "e90a47c2-7f66-4d53-a39f-ed0eef803397", 
            "LogicalResourceId": "dnsTestArecord"
        }, 
        {
            "StackId": "arn:aws:cloudformation:us-east-1:XXXXXXXXXXX:stack/Test1/77c0aaf0-be61-11e7-979b-500c5242948e", 
            "EventId": "dnsTestArecord-CREATE_IN_PROGRESS-2017-10-31T17:33:49.032Z", 
            "ResourceStatus": "CREATE_IN_PROGRESS", 
            "ResourceType": "AWS::Route53::RecordSet", 
            "Timestamp": "2017-10-31T17:33:49.032Z", 
            "StackName": "Test1", 
            "ResourceProperties": "XXXXXX", 
            "PhysicalResourceId": "", 
            "ClientRequestToken": "e90a47c2-7f66-4d53-a39f-ed0eef803397", 
            "LogicalResourceId": "dnsTestArecord"
        }, 
        {
            "StackId": "arn:aws:cloudformation:us-east-1:XXXXXXXXXXX:stack/Test1/77c0aaf0-be61-11e7-979b-500c5242948e", 
            "EventId": "dnsTestTXTrecords-CREATE_IN_PROGRESS-2017-10-31T17:33:48.660Z", 
            "ResourceStatus": "CREATE_IN_PROGRESS", 
            "ResourceType": "AWS::Route53::RecordSet", 
            "Timestamp": "2017-10-31T17:33:48.660Z", 
            "ResourceStatusReason": "Resource creation Initiated", 
            "StackName": "Test1", 
            "ResourceProperties": "XXXXXX", 
            "PhysicalResourceId": "192.168.0.5", 
            "ClientRequestToken": "e90a47c2-7f66-4d53-a39f-ed0eef803397", 
            "LogicalResourceId": "dnsTestTXTrecords"
        }, 
        {
            "StackId": "arn:aws:cloudformation:us-east-1:XXXXXXXXXXX:stack/Test1/77c0aaf0-be61-11e7-979b-500c5242948e", 
            "EventId": "dnsTestTXTrecords-CREATE_IN_PROGRESS-2017-10-31T17:33:47.898Z", 
            "ResourceStatus": "CREATE_IN_PROGRESS", 
            "ResourceType": "AWS::Route53::RecordSet", 
            "Timestamp": "2017-10-31T17:33:47.898Z", 
            "StackName": "Test1", 
            "ResourceProperties": "XXXXXXX", 
            "PhysicalResourceId": "", 
            "ClientRequestToken": "e90a47c2-7f66-4d53-a39f-ed0eef803397", 
            "LogicalResourceId": "dnsTestTXTrecords"
        }, 
        {
            "StackId": "arn:aws:cloudformation:us-east-1:XXXXXXXXXXX:stack/Test1/77c0aaf0-be61-11e7-979b-500c5242948e", 
            "EventId": "Test-CREATE_COMPLETE-2017-10-31T17:33:45.495Z", 
            "ResourceStatus": "CREATE_COMPLETE", 
            "ResourceType": "AWS::EC2::Instance", 
            "Timestamp": "2017-10-31T17:33:45.495Z", 
            "StackName": "Test1", 
            "ResourceProperties": "XXXXXX", 
            "PhysicalResourceId": "i-074a45422e8ac41f3", 
            "ClientRequestToken": "e90a47c2-7f66-4d53-a39f-ed0eef803397", 
            "LogicalResourceId": "Test"
        }, 
        {
            "StackId": "arn:aws:cloudformation:us-east-1:XXXXXXXXXXX:stack/Test1/77c0aaf0-be61-11e7-979b-500c5242948e", 
            "EventId": "Test-CREATE_IN_PROGRESS-2017-10-31T17:32:55.258Z", 
            "ResourceStatus": "CREATE_IN_PROGRESS", 
            "ResourceType": "AWS::EC2::Instance", 
            "Timestamp": "2017-10-31T17:32:55.258Z", 
            "ResourceStatusReason": "Resource creation Initiated", 
            "StackName": "Test1", 
            "ResourceProperties": "XXXXXX", 
            "PhysicalResourceId": "i-074a45422e8ac41f3", 
            "ClientRequestToken": "e90a47c2-7f66-4d53-a39f-ed0eef803397", 
            "LogicalResourceId": "Test"
        }, 
        {
            "StackId": "arn:aws:cloudformation:us-east-1:XXXXXXXXXXX:stack/Test1/77c0aaf0-be61-11e7-979b-500c5242948e", 
            "EventId": "Test-CREATE_IN_PROGRESS-2017-10-31T17:32:53.741Z", 
            "ResourceStatus": "CREATE_IN_PROGRESS", 
            "ResourceType": "AWS::EC2::Instance", 
            "Timestamp": "2017-10-31T17:32:53.741Z", 
            "StackName": "Test1", 
            "ResourceProperties": "XXXXXX", 
            "PhysicalResourceId": "", 
            "ClientRequestToken": "e90a47c2-7f66-4d53-a39f-ed0eef803397", 
            "LogicalResourceId": "Test"
        }, 
        {
            "StackId": "arn:aws:cloudformation:us-east-1:XXXXXXXXXXX:stack/Test1/77c0aaf0-be61-11e7-979b-500c5242948e", 
            "EventId": "volumeTest-CREATE_COMPLETE-2017-10-31T17:32:51.177Z", 
            "ResourceStatus": "CREATE_COMPLETE", 
            "ResourceType": "AWS::EC2::Volume", 
            "Timestamp": "2017-10-31T17:32:51.177Z", 
            "StackName": "Test1", 
            "ResourceProperties": "XXXXXXX", 
            "PhysicalResourceId": "vol-0a903d1db31bc8deb", 
            "ClientRequestToken": "e90a47c2-7f66-4d53-a39f-ed0eef803397", 
            "LogicalResourceId": "volumeTest"
        }, 
        {
            "StackId": "arn:aws:cloudformation:us-east-1:XXXXXXXXXXX:stack/Test1/77c0aaf0-be61-11e7-979b-500c5242948e", 
            "EventId": "volumeTest-CREATE_IN_PROGRESS-2017-10-31T17:32:34.871Z", 
            "ResourceStatus": "CREATE_IN_PROGRESS", 
            "ResourceType": "AWS::EC2::Volume", 
            "Timestamp": "2017-10-31T17:32:34.871Z", 
            "ResourceStatusReason": "Resource creation Initiated", 
            "StackName": "Test1", 
            "ResourceProperties": "XXXXXXX", 
            "PhysicalResourceId": "vol-0a903d1db31bc8deb", 
            "ClientRequestToken": "e90a47c2-7f66-4d53-a39f-ed0eef803397", 
            "LogicalResourceId": "volumeTest"
        }, 
        {
            "StackId": "arn:aws:cloudformation:us-east-1:XXXXXXXXXXX:stack/Test1/77c0aaf0-be61-11e7-979b-500c5242948e", 
            "EventId": "volumeTest-CREATE_IN_PROGRESS-2017-10-31T17:32:34.122Z", 
            "ResourceStatus": "CREATE_IN_PROGRESS", 
            "ResourceType": "AWS::EC2::Volume", 
            "Timestamp": "2017-10-31T17:32:34.122Z", 
            "StackName": "Test1", 
            "ResourceProperties": "XXXXXXX", 
            "PhysicalResourceId": "", 
            "ClientRequestToken": "e90a47c2-7f66-4d53-a39f-ed0eef803397", 
            "LogicalResourceId": "volumeTest"
        }, 
        {
            "StackId": "arn:aws:cloudformation:us-east-1:XXXXXXXXXXX:stack/Test1/77c0aaf0-be61-11e7-979b-500c5242948e", 
            "EventId": "77c1e370-be61-11e7-979b-500c5242948e", 
            "ResourceStatus": "CREATE_IN_PROGRESS", 
            "ResourceType": "AWS::CloudFormation::Stack", 
            "Timestamp": "2017-10-31T17:32:29.215Z", 
            "ResourceStatusReason": "User Initiated", 
            "StackName": "Test1", 
            "PhysicalResourceId": "arn:aws:cloudformation:us-east-1:XXXXXXXXXXX:stack/Test1/77c0aaf0-be61-11e7-979b-500c5242948e", 
            "ClientRequestToken": "e90a47c2-7f66-4d53-a39f-ed0eef803397", 
            "LogicalResourceId": "Test1"
        }
    ]
}

```

Resolving patch:
diff --git a/lib/ansible/modules/cloud/amazon/cloudformation.py b/lib/ansible/modules/cloud/amazon/cloudformation.py
--- a/lib/ansible/modules/cloud/amazon/cloudformation.py
+++ b/lib/ansible/modules/cloud/amazon/cloudformation.py
@@ -256,7 +256,7 @@ def get_stack_events(cfn, stack_name, token_filter=None):
                 "StackEvents[?ClientRequestToken == '{0}']".format(token_filter)
             ))
         else:
-            events = list(pg)
+            events = list(pg.search("StackEvents[*]"))
     except (botocore.exceptions.ValidationError, botocore.exceptions.ClientError) as err:
         error_msg = boto_exception(err)
         if 'does not exist' in error_msg:
@@ -292,7 +292,7 @@ def create_stack(module, stack_params, cfn):
 
     try:
         cfn.create_stack(**stack_params)
-        result = stack_operation(cfn, stack_params['StackName'], 'CREATE', stack_params['ClientRequestToken'])
+        result = stack_operation(cfn, stack_params['StackName'], 'CREATE', stack_params.get('ClientRequestToken', None))
     except Exception as err:
         error_msg = boto_exception(err)
         module.fail_json(msg="Failed to create stack {0}: {1}.".format(stack_params.get('StackName'), error_msg), exception=traceback.format_exc())
@@ -351,7 +351,7 @@ def update_stack(module, stack_params, cfn):
     # don't need to be updated.
     try:
         cfn.update_stack(**stack_params)
-        result = stack_operation(cfn, stack_params['StackName'], 'UPDATE', stack_params['ClientRequestToken'])
+        result = stack_operation(cfn, stack_params['StackName'], 'UPDATE', stack_params.get('ClientRequestToken', None))
     except Exception as err:
         error_msg = boto_exception(err)
         if 'No updates are to be performed.' in error_msg:
@@ -630,7 +630,7 @@ def main():
                 result = {'changed': False, 'output': 'Stack not found.'}
             else:
                 cfn.delete_stack(StackName=stack_params['StackName'])
-                result = stack_operation(cfn, stack_params['StackName'], 'DELETE', stack_params['ClientRequestToken'])
+                result = stack_operation(cfn, stack_params['StackName'], 'DELETE', stack_params.get('ClientRequestToken', None))
         except Exception as err:
             module.fail_json(msg=boto_exception(err), exception=traceback.format_exc())
 


Test patch:
diff --git a/test/units/modules/cloud/amazon/placebo_recordings/cloudformation/basic_s3_stack/cloudformation.DescribeStackEvents_1.json b/test/units/modules/cloud/amazon/placebo_recordings/cloudformation/basic_s3_stack/cloudformation.DescribeStackEvents_1.json
--- a/test/units/modules/cloud/amazon/placebo_recordings/cloudformation/basic_s3_stack/cloudformation.DescribeStackEvents_1.json
+++ b/test/units/modules/cloud/amazon/placebo_recordings/cloudformation/basic_s3_stack/cloudformation.DescribeStackEvents_1.json
@@ -20,7 +20,6 @@
                 "ResourceStatusReason": "User Initiated",
                 "StackName": "ansible-test-basic-yaml",
                 "PhysicalResourceId": "arn:aws:cloudformation:us-west-2:123456789012:stack/ansible-test-basic-yaml/04023cd0-b5d0-11e7-86b8-503ac93168c5",
-                "ClientRequestToken": "3faf3fb5-b289-41fc-b940-44151828f6cf",
                 "LogicalResourceId": "ansible-test-basic-yaml"
             }
         ],
diff --git a/test/units/modules/cloud/amazon/placebo_recordings/cloudformation/basic_s3_stack/cloudformation.DescribeStackEvents_2.json b/test/units/modules/cloud/amazon/placebo_recordings/cloudformation/basic_s3_stack/cloudformation.DescribeStackEvents_2.json
--- a/test/units/modules/cloud/amazon/placebo_recordings/cloudformation/basic_s3_stack/cloudformation.DescribeStackEvents_2.json
+++ b/test/units/modules/cloud/amazon/placebo_recordings/cloudformation/basic_s3_stack/cloudformation.DescribeStackEvents_2.json
@@ -21,7 +21,6 @@
                 "StackName": "ansible-test-basic-yaml",
                 "ResourceProperties": "{}\n",
                 "PhysicalResourceId": "ansible-test-basic-yaml-mybucket-13m2y4v8bptj4",
-                "ClientRequestToken": "3faf3fb5-b289-41fc-b940-44151828f6cf",
                 "LogicalResourceId": "MyBucket"
             },
             {
@@ -42,7 +41,6 @@
                 "StackName": "ansible-test-basic-yaml",
                 "ResourceProperties": "{}\n",
                 "PhysicalResourceId": "",
-                "ClientRequestToken": "3faf3fb5-b289-41fc-b940-44151828f6cf",
                 "LogicalResourceId": "MyBucket"
             },
             {
@@ -63,7 +61,6 @@
                 "ResourceStatusReason": "User Initiated",
                 "StackName": "ansible-test-basic-yaml",
                 "PhysicalResourceId": "arn:aws:cloudformation:us-west-2:123456789012:stack/ansible-test-basic-yaml/04023cd0-b5d0-11e7-86b8-503ac93168c5",
-                "ClientRequestToken": "3faf3fb5-b289-41fc-b940-44151828f6cf",
                 "LogicalResourceId": "ansible-test-basic-yaml"
             }
         ],
diff --git a/test/units/modules/cloud/amazon/placebo_recordings/cloudformation/basic_s3_stack/cloudformation.DescribeStackEvents_3.json b/test/units/modules/cloud/amazon/placebo_recordings/cloudformation/basic_s3_stack/cloudformation.DescribeStackEvents_3.json
--- a/test/units/modules/cloud/amazon/placebo_recordings/cloudformation/basic_s3_stack/cloudformation.DescribeStackEvents_3.json
+++ b/test/units/modules/cloud/amazon/placebo_recordings/cloudformation/basic_s3_stack/cloudformation.DescribeStackEvents_3.json
@@ -21,7 +21,6 @@
                 "StackName": "ansible-test-basic-yaml",
                 "ResourceProperties": "{}\n",
                 "PhysicalResourceId": "ansible-test-basic-yaml-mybucket-13m2y4v8bptj4",
-                "ClientRequestToken": "3faf3fb5-b289-41fc-b940-44151828f6cf",
                 "LogicalResourceId": "MyBucket"
             },
             {
@@ -42,7 +41,6 @@
                 "StackName": "ansible-test-basic-yaml",
                 "ResourceProperties": "{}\n",
                 "PhysicalResourceId": "",
-                "ClientRequestToken": "3faf3fb5-b289-41fc-b940-44151828f6cf",
                 "LogicalResourceId": "MyBucket"
             },
             {
@@ -63,7 +61,6 @@
                 "ResourceStatusReason": "User Initiated",
                 "StackName": "ansible-test-basic-yaml",
                 "PhysicalResourceId": "arn:aws:cloudformation:us-west-2:123456789012:stack/ansible-test-basic-yaml/04023cd0-b5d0-11e7-86b8-503ac93168c5",
-                "ClientRequestToken": "3faf3fb5-b289-41fc-b940-44151828f6cf",
                 "LogicalResourceId": "ansible-test-basic-yaml"
             }
         ],
diff --git a/test/units/modules/cloud/amazon/placebo_recordings/cloudformation/basic_s3_stack/cloudformation.DescribeStackEvents_4.json b/test/units/modules/cloud/amazon/placebo_recordings/cloudformation/basic_s3_stack/cloudformation.DescribeStackEvents_4.json
--- a/test/units/modules/cloud/amazon/placebo_recordings/cloudformation/basic_s3_stack/cloudformation.DescribeStackEvents_4.json
+++ b/test/units/modules/cloud/amazon/placebo_recordings/cloudformation/basic_s3_stack/cloudformation.DescribeStackEvents_4.json
@@ -21,7 +21,6 @@
                 "StackName": "ansible-test-basic-yaml",
                 "ResourceProperties": "{}\n",
                 "PhysicalResourceId": "ansible-test-basic-yaml-mybucket-13m2y4v8bptj4",
-                "ClientRequestToken": "3faf3fb5-b289-41fc-b940-44151828f6cf",
                 "LogicalResourceId": "MyBucket"
             },
             {
@@ -42,7 +41,6 @@
                 "StackName": "ansible-test-basic-yaml",
                 "ResourceProperties": "{}\n",
                 "PhysicalResourceId": "",
-                "ClientRequestToken": "3faf3fb5-b289-41fc-b940-44151828f6cf",
                 "LogicalResourceId": "MyBucket"
             },
             {
@@ -63,7 +61,6 @@
                 "ResourceStatusReason": "User Initiated",
                 "StackName": "ansible-test-basic-yaml",
                 "PhysicalResourceId": "arn:aws:cloudformation:us-west-2:123456789012:stack/ansible-test-basic-yaml/04023cd0-b5d0-11e7-86b8-503ac93168c5",
-                "ClientRequestToken": "3faf3fb5-b289-41fc-b940-44151828f6cf",
                 "LogicalResourceId": "ansible-test-basic-yaml"
             }
         ],
diff --git a/test/units/modules/cloud/amazon/placebo_recordings/cloudformation/basic_s3_stack/cloudformation.DescribeStackEvents_5.json b/test/units/modules/cloud/amazon/placebo_recordings/cloudformation/basic_s3_stack/cloudformation.DescribeStackEvents_5.json
--- a/test/units/modules/cloud/amazon/placebo_recordings/cloudformation/basic_s3_stack/cloudformation.DescribeStackEvents_5.json
+++ b/test/units/modules/cloud/amazon/placebo_recordings/cloudformation/basic_s3_stack/cloudformation.DescribeStackEvents_5.json
@@ -21,7 +21,6 @@
                 "StackName": "ansible-test-basic-yaml",
                 "ResourceProperties": "{}\n",
                 "PhysicalResourceId": "ansible-test-basic-yaml-mybucket-13m2y4v8bptj4",
-                "ClientRequestToken": "3faf3fb5-b289-41fc-b940-44151828f6cf",
                 "LogicalResourceId": "MyBucket"
             },
             {
@@ -42,7 +41,6 @@
                 "StackName": "ansible-test-basic-yaml",
                 "ResourceProperties": "{}\n",
                 "PhysicalResourceId": "",
-                "ClientRequestToken": "3faf3fb5-b289-41fc-b940-44151828f6cf",
                 "LogicalResourceId": "MyBucket"
             },
             {
@@ -63,7 +61,6 @@
                 "ResourceStatusReason": "User Initiated",
                 "StackName": "ansible-test-basic-yaml",
                 "PhysicalResourceId": "arn:aws:cloudformation:us-west-2:123456789012:stack/ansible-test-basic-yaml/04023cd0-b5d0-11e7-86b8-503ac93168c5",
-                "ClientRequestToken": "3faf3fb5-b289-41fc-b940-44151828f6cf",
                 "LogicalResourceId": "ansible-test-basic-yaml"
             }
         ],
diff --git a/test/units/modules/cloud/amazon/placebo_recordings/cloudformation/basic_s3_stack/cloudformation.DescribeStackEvents_6.json b/test/units/modules/cloud/amazon/placebo_recordings/cloudformation/basic_s3_stack/cloudformation.DescribeStackEvents_6.json
--- a/test/units/modules/cloud/amazon/placebo_recordings/cloudformation/basic_s3_stack/cloudformation.DescribeStackEvents_6.json
+++ b/test/units/modules/cloud/amazon/placebo_recordings/cloudformation/basic_s3_stack/cloudformation.DescribeStackEvents_6.json
@@ -20,7 +20,6 @@
                 "StackName": "ansible-test-basic-yaml",
                 "ResourceProperties": "{}\n",
                 "PhysicalResourceId": "ansible-test-basic-yaml-mybucket-13m2y4v8bptj4",
-                "ClientRequestToken": "3faf3fb5-b289-41fc-b940-44151828f6cf",
                 "LogicalResourceId": "MyBucket"
             },
             {
@@ -42,7 +41,6 @@
                 "StackName": "ansible-test-basic-yaml",
                 "ResourceProperties": "{}\n",
                 "PhysicalResourceId": "ansible-test-basic-yaml-mybucket-13m2y4v8bptj4",
-                "ClientRequestToken": "3faf3fb5-b289-41fc-b940-44151828f6cf",
                 "LogicalResourceId": "MyBucket"
             },
             {
@@ -63,7 +61,6 @@
                 "StackName": "ansible-test-basic-yaml",
                 "ResourceProperties": "{}\n",
                 "PhysicalResourceId": "",
-                "ClientRequestToken": "3faf3fb5-b289-41fc-b940-44151828f6cf",
                 "LogicalResourceId": "MyBucket"
             },
             {
@@ -84,7 +81,6 @@
                 "ResourceStatusReason": "User Initiated",
                 "StackName": "ansible-test-basic-yaml",
                 "PhysicalResourceId": "arn:aws:cloudformation:us-west-2:123456789012:stack/ansible-test-basic-yaml/04023cd0-b5d0-11e7-86b8-503ac93168c5",
-                "ClientRequestToken": "3faf3fb5-b289-41fc-b940-44151828f6cf",
                 "LogicalResourceId": "ansible-test-basic-yaml"
             }
         ],
diff --git a/test/units/modules/cloud/amazon/placebo_recordings/cloudformation/basic_s3_stack/cloudformation.DescribeStackEvents_7.json b/test/units/modules/cloud/amazon/placebo_recordings/cloudformation/basic_s3_stack/cloudformation.DescribeStackEvents_7.json
--- a/test/units/modules/cloud/amazon/placebo_recordings/cloudformation/basic_s3_stack/cloudformation.DescribeStackEvents_7.json
+++ b/test/units/modules/cloud/amazon/placebo_recordings/cloudformation/basic_s3_stack/cloudformation.DescribeStackEvents_7.json
@@ -19,7 +19,6 @@
                 },
                 "StackName": "ansible-test-basic-yaml",
                 "PhysicalResourceId": "arn:aws:cloudformation:us-west-2:123456789012:stack/ansible-test-basic-yaml/04023cd0-b5d0-11e7-86b8-503ac93168c5",
-                "ClientRequestToken": "3faf3fb5-b289-41fc-b940-44151828f6cf",
                 "LogicalResourceId": "ansible-test-basic-yaml"
             },
             {
@@ -40,7 +39,6 @@
                 "StackName": "ansible-test-basic-yaml",
                 "ResourceProperties": "{}\n",
                 "PhysicalResourceId": "ansible-test-basic-yaml-mybucket-13m2y4v8bptj4",
-                "ClientRequestToken": "3faf3fb5-b289-41fc-b940-44151828f6cf",
                 "LogicalResourceId": "MyBucket"
             },
             {
@@ -62,7 +60,6 @@
                 "StackName": "ansible-test-basic-yaml",
                 "ResourceProperties": "{}\n",
                 "PhysicalResourceId": "ansible-test-basic-yaml-mybucket-13m2y4v8bptj4",
-                "ClientRequestToken": "3faf3fb5-b289-41fc-b940-44151828f6cf",
                 "LogicalResourceId": "MyBucket"
             },
             {
@@ -83,7 +80,6 @@
                 "StackName": "ansible-test-basic-yaml",
                 "ResourceProperties": "{}\n",
                 "PhysicalResourceId": "",
-                "ClientRequestToken": "3faf3fb5-b289-41fc-b940-44151828f6cf",
                 "LogicalResourceId": "MyBucket"
             },
             {
@@ -104,7 +100,6 @@
                 "ResourceStatusReason": "User Initiated",
                 "StackName": "ansible-test-basic-yaml",
                 "PhysicalResourceId": "arn:aws:cloudformation:us-west-2:123456789012:stack/ansible-test-basic-yaml/04023cd0-b5d0-11e7-86b8-503ac93168c5",
-                "ClientRequestToken": "3faf3fb5-b289-41fc-b940-44151828f6cf",
                 "LogicalResourceId": "ansible-test-basic-yaml"
             }
         ],
diff --git a/test/units/modules/cloud/amazon/placebo_recordings/cloudformation/client_request_token_s3_stack/cloudformation.CreateStack_1.json b/test/units/modules/cloud/amazon/placebo_recordings/cloudformation/client_request_token_s3_stack/cloudformation.CreateStack_1.json
new file mode 100644
--- /dev/null
+++ b/test/units/modules/cloud/amazon/placebo_recordings/cloudformation/client_request_token_s3_stack/cloudformation.CreateStack_1.json
@@ -0,0 +1,17 @@
+{
+    "status_code": 200,
+    "data": {
+        "StackId": "arn:aws:cloudformation:us-west-2:123456789012:stack/ansible-test-client-request-token-yaml/04023cd0-b5d0-11e7-86b8-503ac93168c5",
+        "ResponseMetadata": {
+            "RetryAttempts": 0,
+            "HTTPStatusCode": 200,
+            "RequestId": "03fbfc36-b5d0-11e7-ae09-550cfe4b2358",
+            "HTTPHeaders": {
+                "x-amzn-requestid": "03fbfc36-b5d0-11e7-ae09-550cfe4b2358",
+                "date": "Fri, 20 Oct 2017 19:51:07 GMT",
+                "content-length": "393",
+                "content-type": "text/xml"
+            }
+        }
+    }
+}
\ No newline at end of file
diff --git a/test/units/modules/cloud/amazon/placebo_recordings/cloudformation/client_request_token_s3_stack/cloudformation.DeleteStack_1.json b/test/units/modules/cloud/amazon/placebo_recordings/cloudformation/client_request_token_s3_stack/cloudformation.DeleteStack_1.json
new file mode 100644
--- /dev/null
+++ b/test/units/modules/cloud/amazon/placebo_recordings/cloudformation/client_request_token_s3_stack/cloudformation.DeleteStack_1.json
@@ -0,0 +1,16 @@
+{
+    "status_code": 200,
+    "data": {
+        "ResponseMetadata": {
+            "RetryAttempts": 0,
+            "HTTPStatusCode": 200,
+            "RequestId": "170d1e02-b5d0-11e7-ae09-550cfe4b2358",
+            "HTTPHeaders": {
+                "x-amzn-requestid": "170d1e02-b5d0-11e7-ae09-550cfe4b2358",
+                "date": "Fri, 20 Oct 2017 19:51:39 GMT",
+                "content-length": "212",
+                "content-type": "text/xml"
+            }
+        }
+    }
+}
\ No newline at end of file
diff --git a/test/units/modules/cloud/amazon/placebo_recordings/cloudformation/client_request_token_s3_stack/cloudformation.DescribeStackEvents_1.json b/test/units/modules/cloud/amazon/placebo_recordings/cloudformation/client_request_token_s3_stack/cloudformation.DescribeStackEvents_1.json
new file mode 100644
--- /dev/null
+++ b/test/units/modules/cloud/amazon/placebo_recordings/cloudformation/client_request_token_s3_stack/cloudformation.DescribeStackEvents_1.json
@@ -0,0 +1,39 @@
+{
+    "status_code": 200,
+    "data": {
+        "StackEvents": [
+            {
+                "StackId": "arn:aws:cloudformation:us-west-2:123456789012:stack/ansible-test-client-request-token-yaml/04023cd0-b5d0-11e7-86b8-503ac93168c5",
+                "EventId": "04032730-b5d0-11e7-86b8-503ac93168c5",
+                "ResourceStatus": "CREATE_IN_PROGRESS",
+                "ResourceType": "AWS::CloudFormation::Stack",
+                "Timestamp": {
+                    "hour": 19,
+                    "__class__": "datetime",
+                    "month": 10,
+                    "second": 8,
+                    "microsecond": 324000,
+                    "year": 2017,
+                    "day": 20,
+                    "minute": 51
+                },
+                "ResourceStatusReason": "User Initiated",
+                "StackName": "ansible-test-client-request-token-yaml",
+                "PhysicalResourceId": "arn:aws:cloudformation:us-west-2:123456789012:stack/ansible-test-client-request-token-yaml/04023cd0-b5d0-11e7-86b8-503ac93168c5",
+                "ClientRequestToken": "3faf3fb5-b289-41fc-b940-44151828f6cf",
+                "LogicalResourceId": "ansible-test-client-request-token-yaml"
+            }
+        ],
+        "ResponseMetadata": {
+            "RetryAttempts": 0,
+            "HTTPStatusCode": 200,
+            "RequestId": "043d4a05-b5d0-11e7-ae09-550cfe4b2358",
+            "HTTPHeaders": {
+                "x-amzn-requestid": "043d4a05-b5d0-11e7-ae09-550cfe4b2358",
+                "date": "Fri, 20 Oct 2017 19:51:08 GMT",
+                "content-length": "1183",
+                "content-type": "text/xml"
+            }
+        }
+    }
+}
\ No newline at end of file
diff --git a/test/units/modules/cloud/amazon/placebo_recordings/cloudformation/client_request_token_s3_stack/cloudformation.DescribeStackEvents_2.json b/test/units/modules/cloud/amazon/placebo_recordings/cloudformation/client_request_token_s3_stack/cloudformation.DescribeStackEvents_2.json
new file mode 100644
--- /dev/null
+++ b/test/units/modules/cloud/amazon/placebo_recordings/cloudformation/client_request_token_s3_stack/cloudformation.DescribeStackEvents_2.json
@@ -0,0 +1,83 @@
+{
+    "status_code": 200,
+    "data": {
+        "StackEvents": [
+            {
+                "StackId": "arn:aws:cloudformation:us-west-2:123456789012:stack/ansible-test-client-request-token-yaml/04023cd0-b5d0-11e7-86b8-503ac93168c5",
+                "EventId": "MyBucket-CREATE_IN_PROGRESS-2017-10-20T19:51:12.754Z",
+                "ResourceStatus": "CREATE_IN_PROGRESS",
+                "ResourceType": "AWS::S3::Bucket",
+                "Timestamp": {
+                    "hour": 19,
+                    "__class__": "datetime",
+                    "month": 10,
+                    "second": 12,
+                    "microsecond": 754000,
+                    "year": 2017,
+                    "day": 20,
+                    "minute": 51
+                },
+                "ResourceStatusReason": "Resource creation Initiated",
+                "StackName": "ansible-test-client-request-token-yaml",
+                "ResourceProperties": "{}\n",
+                "PhysicalResourceId": "ansible-test-client-request-token-yaml-mybucket-13m2y4v8bptj4",
+                "ClientRequestToken": "3faf3fb5-b289-41fc-b940-44151828f6cf",
+                "LogicalResourceId": "MyBucket"
+            },
+            {
+                "StackId": "arn:aws:cloudformation:us-west-2:123456789012:stack/ansible-test-client-request-token-yaml/04023cd0-b5d0-11e7-86b8-503ac93168c5",
+                "EventId": "MyBucket-CREATE_IN_PROGRESS-2017-10-20T19:51:11.159Z",
+                "ResourceStatus": "CREATE_IN_PROGRESS",
+                "ResourceType": "AWS::S3::Bucket",
+                "Timestamp": {
+                    "hour": 19,
+                    "__class__": "datetime",
+                    "month": 10,
+                    "second": 11,
+                    "microsecond": 159000,
+                    "year": 2017,
+                    "day": 20,
+                    "minute": 51
+                },
+                "StackName": "ansible-test-client-request-token-yaml",
+                "ResourceProperties": "{}\n",
+                "PhysicalResourceId": "",
+                "ClientRequestToken": "3faf3fb5-b289-41fc-b940-44151828f6cf",
+                "LogicalResourceId": "MyBucket"
+            },
+            {
+                "StackId": "arn:aws:cloudformation:us-west-2:123456789012:stack/ansible-test-client-request-token-yaml/04023cd0-b5d0-11e7-86b8-503ac93168c5",
+                "EventId": "04032730-b5d0-11e7-86b8-503ac93168c5",
+                "ResourceStatus": "CREATE_IN_PROGRESS",
+                "ResourceType": "AWS::CloudFormation::Stack",
+                "Timestamp": {
+                    "hour": 19,
+                    "__class__": "datetime",
+                    "month": 10,
+                    "second": 8,
+                    "microsecond": 324000,
+                    "year": 2017,
+                    "day": 20,
+                    "minute": 51
+                },
+                "ResourceStatusReason": "User Initiated",
+                "StackName": "ansible-test-client-request-token-yaml",
+                "PhysicalResourceId": "arn:aws:cloudformation:us-west-2:123456789012:stack/ansible-test-client-request-token-yaml/04023cd0-b5d0-11e7-86b8-503ac93168c5",
+                "ClientRequestToken": "3faf3fb5-b289-41fc-b940-44151828f6cf",
+                "LogicalResourceId": "ansible-test-client-request-token-yaml"
+            }
+        ],
+        "ResponseMetadata": {
+            "RetryAttempts": 0,
+            "HTTPStatusCode": 200,
+            "RequestId": "075d9d71-b5d0-11e7-ae09-550cfe4b2358",
+            "HTTPHeaders": {
+                "x-amzn-requestid": "075d9d71-b5d0-11e7-ae09-550cfe4b2358",
+                "vary": "Accept-Encoding",
+                "content-length": "2730",
+                "content-type": "text/xml",
+                "date": "Fri, 20 Oct 2017 19:51:13 GMT"
+            }
+        }
+    }
+}
\ No newline at end of file
diff --git a/test/units/modules/cloud/amazon/placebo_recordings/cloudformation/client_request_token_s3_stack/cloudformation.DescribeStackEvents_3.json b/test/units/modules/cloud/amazon/placebo_recordings/cloudformation/client_request_token_s3_stack/cloudformation.DescribeStackEvents_3.json
new file mode 100644
--- /dev/null
+++ b/test/units/modules/cloud/amazon/placebo_recordings/cloudformation/client_request_token_s3_stack/cloudformation.DescribeStackEvents_3.json
@@ -0,0 +1,83 @@
+{
+    "status_code": 200,
+    "data": {
+        "StackEvents": [
+            {
+                "StackId": "arn:aws:cloudformation:us-west-2:123456789012:stack/ansible-test-client-request-token-yaml/04023cd0-b5d0-11e7-86b8-503ac93168c5",
+                "EventId": "MyBucket-CREATE_IN_PROGRESS-2017-10-20T19:51:12.754Z",
+                "ResourceStatus": "CREATE_IN_PROGRESS",
+                "ResourceType": "AWS::S3::Bucket",
+                "Timestamp": {
+                    "hour": 19,
+                    "__class__": "datetime",
+                    "month": 10,
+                    "second": 12,
+                    "microsecond": 754000,
+                    "year": 2017,
+                    "day": 20,
+                    "minute": 51
+                },
+                "ResourceStatusReason": "Resource creation Initiated",
+                "StackName": "ansible-test-client-request-token-yaml",
+                "ResourceProperties": "{}\n",
+                "PhysicalResourceId": "ansible-test-client-request-token-yaml-mybucket-13m2y4v8bptj4",
+                "ClientRequestToken": "3faf3fb5-b289-41fc-b940-44151828f6cf",
+                "LogicalResourceId": "MyBucket"
+            },
+            {
+                "StackId": "arn:aws:cloudformation:us-west-2:123456789012:stack/ansible-test-client-request-token-yaml/04023cd0-b5d0-11e7-86b8-503ac93168c5",
+                "EventId": "MyBucket-CREATE_IN_PROGRESS-2017-10-20T19:51:11.159Z",
+                "ResourceStatus": "CREATE_IN_PROGRESS",
+                "ResourceType": "AWS::S3::Bucket",
+                "Timestamp": {
+                    "hour": 19,
+                    "__class__": "datetime",
+                    "month": 10,
+                    "second": 11,
+                    "microsecond": 159000,
+                    "year": 2017,
+                    "day": 20,
+                    "minute": 51
+                },
+                "StackName": "ansible-test-client-request-token-yaml",
+                "ResourceProperties": "{}\n",
+                "PhysicalResourceId": "",
+                "ClientRequestToken": "3faf3fb5-b289-41fc-b940-44151828f6cf",
+                "LogicalResourceId": "MyBucket"
+            },
+            {
+                "StackId": "arn:aws:cloudformation:us-west-2:123456789012:stack/ansible-test-client-request-token-yaml/04023cd0-b5d0-11e7-86b8-503ac93168c5",
+                "EventId": "04032730-b5d0-11e7-86b8-503ac93168c5",
+                "ResourceStatus": "CREATE_IN_PROGRESS",
+                "ResourceType": "AWS::CloudFormation::Stack",
+                "Timestamp": {
+                    "hour": 19,
+                    "__class__": "datetime",
+                    "month": 10,
+                    "second": 8,
+                    "microsecond": 324000,
+                    "year": 2017,
+                    "day": 20,
+                    "minute": 51
+                },
+                "ResourceStatusReason": "User Initiated",
+                "StackName": "ansible-test-client-request-token-yaml",
+                "PhysicalResourceId": "arn:aws:cloudformation:us-west-2:123456789012:stack/ansible-test-client-request-token-yaml/04023cd0-b5d0-11e7-86b8-503ac93168c5",
+                "ClientRequestToken": "3faf3fb5-b289-41fc-b940-44151828f6cf",
+                "LogicalResourceId": "ansible-test-client-request-token-yaml"
+            }
+        ],
+        "ResponseMetadata": {
+            "RetryAttempts": 0,
+            "HTTPStatusCode": 200,
+            "RequestId": "0a7eb31b-b5d0-11e7-ae09-550cfe4b2358",
+            "HTTPHeaders": {
+                "x-amzn-requestid": "0a7eb31b-b5d0-11e7-ae09-550cfe4b2358",
+                "vary": "Accept-Encoding",
+                "content-length": "2730",
+                "content-type": "text/xml",
+                "date": "Fri, 20 Oct 2017 19:51:19 GMT"
+            }
+        }
+    }
+}
\ No newline at end of file
diff --git a/test/units/modules/cloud/amazon/placebo_recordings/cloudformation/client_request_token_s3_stack/cloudformation.DescribeStackEvents_4.json b/test/units/modules/cloud/amazon/placebo_recordings/cloudformation/client_request_token_s3_stack/cloudformation.DescribeStackEvents_4.json
new file mode 100644
--- /dev/null
+++ b/test/units/modules/cloud/amazon/placebo_recordings/cloudformation/client_request_token_s3_stack/cloudformation.DescribeStackEvents_4.json
@@ -0,0 +1,83 @@
+{
+    "status_code": 200,
+    "data": {
+        "StackEvents": [
+            {
+                "StackId": "arn:aws:cloudformation:us-west-2:123456789012:stack/ansible-test-client-request-token-yaml/04023cd0-b5d0-11e7-86b8-503ac93168c5",
+                "EventId": "MyBucket-CREATE_IN_PROGRESS-2017-10-20T19:51:12.754Z",
+                "ResourceStatus": "CREATE_IN_PROGRESS",
+                "ResourceType": "AWS::S3::Bucket",
+                "Timestamp": {
+                    "hour": 19,
+                    "__class__": "datetime",
+                    "month": 10,
+                    "second": 12,
+                    "microsecond": 754000,
+                    "year": 2017,
+                    "day": 20,
+                    "minute": 51
+                },
+                "ResourceStatusReason": "Resource creation Initiated",
+                "StackName": "ansible-test-client-request-token-yaml",
+                "ResourceProperties": "{}\n",
+                "PhysicalResourceId": "ansible-test-client-request-token-yaml-mybucket-13m2y4v8bptj4",
+                "ClientRequestToken": "3faf3fb5-b289-41fc-b940-44151828f6cf",
+                "LogicalResourceId": "MyBucket"
+            },
+            {
+                "StackId": "arn:aws:cloudformation:us-west-2:123456789012:stack/ansible-test-client-request-token-yaml/04023cd0-b5d0-11e7-86b8-503ac93168c5",
+                "EventId": "MyBucket-CREATE_IN_PROGRESS-2017-10-20T19:51:11.159Z",
+                "ResourceStatus": "CREATE_IN_PROGRESS",
+                "ResourceType": "AWS::S3::Bucket",
+                "Timestamp": {
+                    "hour": 19,
+                    "__class__": "datetime",
+                    "month": 10,
+                    "second": 11,
+                    "microsecond": 159000,
+                    "year": 2017,
+                    "day": 20,
+                    "minute": 51
+                },
+                "StackName": "ansible-test-client-request-token-yaml",
+                "ResourceProperties": "{}\n",
+                "PhysicalResourceId": "",
+                "ClientRequestToken": "3faf3fb5-b289-41fc-b940-44151828f6cf",
+                "LogicalResourceId": "MyBucket"
+            },
+            {
+                "StackId": "arn:aws:cloudformation:us-west-2:123456789012:stack/ansible-test-client-request-token-yaml/04023cd0-b5d0-11e7-86b8-503ac93168c5",
+                "EventId": "04032730-b5d0-11e7-86b8-503ac93168c5",
+                "ResourceStatus": "CREATE_IN_PROGRESS",
+                "ResourceType": "AWS::CloudFormation::Stack",
+                "Timestamp": {
+                    "hour": 19,
+                    "__class__": "datetime",
+                    "month": 10,
+                    "second": 8,
+                    "microsecond": 324000,
+                    "year": 2017,
+                    "day": 20,
+                    "minute": 51
+                },
+                "ResourceStatusReason": "User Initiated",
+                "StackName": "ansible-test-client-request-token-yaml",
+                "PhysicalResourceId": "arn:aws:cloudformation:us-west-2:123456789012:stack/ansible-test-client-request-token-yaml/04023cd0-b5d0-11e7-86b8-503ac93168c5",
+                "ClientRequestToken": "3faf3fb5-b289-41fc-b940-44151828f6cf",
+                "LogicalResourceId": "ansible-test-client-request-token-yaml"
+            }
+        ],
+        "ResponseMetadata": {
+            "RetryAttempts": 0,
+            "HTTPStatusCode": 200,
+            "RequestId": "0d9e1c06-b5d0-11e7-ae09-550cfe4b2358",
+            "HTTPHeaders": {
+                "x-amzn-requestid": "0d9e1c06-b5d0-11e7-ae09-550cfe4b2358",
+                "vary": "Accept-Encoding",
+                "content-length": "2730",
+                "content-type": "text/xml",
+                "date": "Fri, 20 Oct 2017 19:51:24 GMT"
+            }
+        }
+    }
+}
\ No newline at end of file
diff --git a/test/units/modules/cloud/amazon/placebo_recordings/cloudformation/client_request_token_s3_stack/cloudformation.DescribeStackEvents_5.json b/test/units/modules/cloud/amazon/placebo_recordings/cloudformation/client_request_token_s3_stack/cloudformation.DescribeStackEvents_5.json
new file mode 100644
--- /dev/null
+++ b/test/units/modules/cloud/amazon/placebo_recordings/cloudformation/client_request_token_s3_stack/cloudformation.DescribeStackEvents_5.json
@@ -0,0 +1,83 @@
+{
+    "status_code": 200,
+    "data": {
+        "StackEvents": [
+            {
+                "StackId": "arn:aws:cloudformation:us-west-2:123456789012:stack/ansible-test-client-request-token-yaml/04023cd0-b5d0-11e7-86b8-503ac93168c5",
+                "EventId": "MyBucket-CREATE_IN_PROGRESS-2017-10-20T19:51:12.754Z",
+                "ResourceStatus": "CREATE_IN_PROGRESS",
+                "ResourceType": "AWS::S3::Bucket",
+                "Timestamp": {
+                    "hour": 19,
+                    "__class__": "datetime",
+                    "month": 10,
+                    "second": 12,
+                    "microsecond": 754000,
+                    "year": 2017,
+                    "day": 20,
+                    "minute": 51
+                },
+                "ResourceStatusReason": "Resource creation Initiated",
+                "StackName": "ansible-test-client-request-token-yaml",
+                "ResourceProperties": "{}\n",
+                "PhysicalResourceId": "ansible-test-client-request-token-yaml-mybucket-13m2y4v8bptj4",
+                "ClientRequestToken": "3faf3fb5-b289-41fc-b940-44151828f6cf",
+                "LogicalResourceId": "MyBucket"
+            },
+            {
+                "StackId": "arn:aws:cloudformation:us-west-2:123456789012:stack/ansible-test-client-request-token-yaml/04023cd0-b5d0-11e7-86b8-503ac93168c5",
+                "EventId": "MyBucket-CREATE_IN_PROGRESS-2017-10-20T19:51:11.159Z",
+                "ResourceStatus": "CREATE_IN_PROGRESS",
+                "ResourceType": "AWS::S3::Bucket",
+                "Timestamp": {
+                    "hour": 19,
+                    "__class__": "datetime",
+                    "month": 10,
+                    "second": 11,
+                    "microsecond": 159000,
+                    "year": 2017,
+                    "day": 20,
+                    "minute": 51
+                },
+                "StackName": "ansible-test-client-request-token-yaml",
+                "ResourceProperties": "{}\n",
+                "PhysicalResourceId": "",
+                "ClientRequestToken": "3faf3fb5-b289-41fc-b940-44151828f6cf",
+                "LogicalResourceId": "MyBucket"
+            },
+            {
+                "StackId": "arn:aws:cloudformation:us-west-2:123456789012:stack/ansible-test-client-request-token-yaml/04023cd0-b5d0-11e7-86b8-503ac93168c5",
+                "EventId": "04032730-b5d0-11e7-86b8-503ac93168c5",
+                "ResourceStatus": "CREATE_IN_PROGRESS",
+                "ResourceType": "AWS::CloudFormation::Stack",
+                "Timestamp": {
+                    "hour": 19,
+                    "__class__": "datetime",
+                    "month": 10,
+                    "second": 8,
+                    "microsecond": 324000,
+                    "year": 2017,
+                    "day": 20,
+                    "minute": 51
+                },
+                "ResourceStatusReason": "User Initiated",
+                "StackName": "ansible-test-client-request-token-yaml",
+                "PhysicalResourceId": "arn:aws:cloudformation:us-west-2:123456789012:stack/ansible-test-client-request-token-yaml/04023cd0-b5d0-11e7-86b8-503ac93168c5",
+                "ClientRequestToken": "3faf3fb5-b289-41fc-b940-44151828f6cf",
+                "LogicalResourceId": "ansible-test-client-request-token-yaml"
+            }
+        ],
+        "ResponseMetadata": {
+            "RetryAttempts": 0,
+            "HTTPStatusCode": 200,
+            "RequestId": "10bd84ca-b5d0-11e7-ae09-550cfe4b2358",
+            "HTTPHeaders": {
+                "x-amzn-requestid": "10bd84ca-b5d0-11e7-ae09-550cfe4b2358",
+                "vary": "Accept-Encoding",
+                "content-length": "2730",
+                "content-type": "text/xml",
+                "date": "Fri, 20 Oct 2017 19:51:29 GMT"
+            }
+        }
+    }
+}
\ No newline at end of file
diff --git a/test/units/modules/cloud/amazon/placebo_recordings/cloudformation/client_request_token_s3_stack/cloudformation.DescribeStackEvents_6.json b/test/units/modules/cloud/amazon/placebo_recordings/cloudformation/client_request_token_s3_stack/cloudformation.DescribeStackEvents_6.json
new file mode 100644
--- /dev/null
+++ b/test/units/modules/cloud/amazon/placebo_recordings/cloudformation/client_request_token_s3_stack/cloudformation.DescribeStackEvents_6.json
@@ -0,0 +1,104 @@
+{
+    "status_code": 200,
+    "data": {
+        "StackEvents": [
+            {
+                "StackId": "arn:aws:cloudformation:us-west-2:123456789012:stack/ansible-test-client-request-token-yaml/04023cd0-b5d0-11e7-86b8-503ac93168c5",
+                "EventId": "MyBucket-CREATE_COMPLETE-2017-10-20T19:51:33.200Z",
+                "ResourceStatus": "CREATE_COMPLETE",
+                "ResourceType": "AWS::S3::Bucket",
+                "Timestamp": {
+                    "hour": 19,
+                    "__class__": "datetime",
+                    "month": 10,
+                    "second": 33,
+                    "microsecond": 200000,
+                    "year": 2017,
+                    "day": 20,
+                    "minute": 51
+                },
+                "StackName": "ansible-test-client-request-token-yaml",
+                "ResourceProperties": "{}\n",
+                "PhysicalResourceId": "ansible-test-client-request-token-yaml-mybucket-13m2y4v8bptj4",
+                "ClientRequestToken": "3faf3fb5-b289-41fc-b940-44151828f6cf",
+                "LogicalResourceId": "MyBucket"
+            },
+            {
+                "StackId": "arn:aws:cloudformation:us-west-2:123456789012:stack/ansible-test-client-request-token-yaml/04023cd0-b5d0-11e7-86b8-503ac93168c5",
+                "EventId": "MyBucket-CREATE_IN_PROGRESS-2017-10-20T19:51:12.754Z",
+                "ResourceStatus": "CREATE_IN_PROGRESS",
+                "ResourceType": "AWS::S3::Bucket",
+                "Timestamp": {
+                    "hour": 19,
+                    "__class__": "datetime",
+                    "month": 10,
+                    "second": 12,
+                    "microsecond": 754000,
+                    "year": 2017,
+                    "day": 20,
+                    "minute": 51
+                },
+                "ResourceStatusReason": "Resource creation Initiated",
+                "StackName": "ansible-test-client-request-token-yaml",
+                "ResourceProperties": "{}\n",
+                "PhysicalResourceId": "ansible-test-client-request-token-yaml-mybucket-13m2y4v8bptj4",
+                "ClientRequestToken": "3faf3fb5-b289-41fc-b940-44151828f6cf",
+                "LogicalResourceId": "MyBucket"
+            },
+            {
+                "StackId": "arn:aws:cloudformation:us-west-2:123456789012:stack/ansible-test-client-request-token-yaml/04023cd0-b5d0-11e7-86b8-503ac93168c5",
+                "EventId": "MyBucket-CREATE_IN_PROGRESS-2017-10-20T19:51:11.159Z",
+                "ResourceStatus": "CREATE_IN_PROGRESS",
+                "ResourceType": "AWS::S3::Bucket",
+                "Timestamp": {
+                    "hour": 19,
+                    "__class__": "datetime",
+                    "month": 10,
+                    "second": 11,
+                    "microsecond": 159000,
+                    "year": 2017,
+                    "day": 20,
+                    "minute": 51
+                },
+                "StackName": "ansible-test-client-request-token-yaml",
+                "ResourceProperties": "{}\n",
+                "PhysicalResourceId": "",
+                "ClientRequestToken": "3faf3fb5-b289-41fc-b940-44151828f6cf",
+                "LogicalResourceId": "MyBucket"
+            },
+            {
+                "StackId": "arn:aws:cloudformation:us-west-2:123456789012:stack/ansible-test-client-request-token-yaml/04023cd0-b5d0-11e7-86b8-503ac93168c5",
+                "EventId": "04032730-b5d0-11e7-86b8-503ac93168c5",
+                "ResourceStatus": "CREATE_IN_PROGRESS",
+                "ResourceType": "AWS::CloudFormation::Stack",
+                "Timestamp": {
+                    "hour": 19,
+                    "__class__": "datetime",
+                    "month": 10,
+                    "second": 8,
+                    "microsecond": 324000,
+                    "year": 2017,
+                    "day": 20,
+                    "minute": 51
+                },
+                "ResourceStatusReason": "User Initiated",
+                "StackName": "ansible-test-client-request-token-yaml",
+                "PhysicalResourceId": "arn:aws:cloudformation:us-west-2:123456789012:stack/ansible-test-client-request-token-yaml/04023cd0-b5d0-11e7-86b8-503ac93168c5",
+                "ClientRequestToken": "3faf3fb5-b289-41fc-b940-44151828f6cf",
+                "LogicalResourceId": "ansible-test-client-request-token-yaml"
+            }
+        ],
+        "ResponseMetadata": {
+            "RetryAttempts": 0,
+            "HTTPStatusCode": 200,
+            "RequestId": "13dbb3fd-b5d0-11e7-ae09-550cfe4b2358",
+            "HTTPHeaders": {
+                "x-amzn-requestid": "13dbb3fd-b5d0-11e7-ae09-550cfe4b2358",
+                "vary": "Accept-Encoding",
+                "content-length": "3490",
+                "content-type": "text/xml",
+                "date": "Fri, 20 Oct 2017 19:51:34 GMT"
+            }
+        }
+    }
+}
\ No newline at end of file
diff --git a/test/units/modules/cloud/amazon/placebo_recordings/cloudformation/client_request_token_s3_stack/cloudformation.DescribeStackEvents_7.json b/test/units/modules/cloud/amazon/placebo_recordings/cloudformation/client_request_token_s3_stack/cloudformation.DescribeStackEvents_7.json
new file mode 100644
--- /dev/null
+++ b/test/units/modules/cloud/amazon/placebo_recordings/cloudformation/client_request_token_s3_stack/cloudformation.DescribeStackEvents_7.json
@@ -0,0 +1,124 @@
+{
+    "status_code": 200,
+    "data": {
+        "StackEvents": [
+            {
+                "StackId": "arn:aws:cloudformation:us-west-2:123456789012:stack/ansible-test-client-request-token-yaml/04023cd0-b5d0-11e7-86b8-503ac93168c5",
+                "EventId": "140d7220-b5d0-11e7-933f-50a686be7356",
+                "ResourceStatus": "CREATE_COMPLETE",
+                "ResourceType": "AWS::CloudFormation::Stack",
+                "Timestamp": {
+                    "hour": 19,
+                    "__class__": "datetime",
+                    "month": 10,
+                    "second": 35,
+                    "microsecond": 121000,
+                    "year": 2017,
+                    "day": 20,
+                    "minute": 51
+                },
+                "StackName": "ansible-test-client-request-token-yaml",
+                "PhysicalResourceId": "arn:aws:cloudformation:us-west-2:123456789012:stack/ansible-test-client-request-token-yaml/04023cd0-b5d0-11e7-86b8-503ac93168c5",
+                "ClientRequestToken": "3faf3fb5-b289-41fc-b940-44151828f6cf",
+                "LogicalResourceId": "ansible-test-client-request-token-yaml"
+            },
+            {
+                "StackId": "arn:aws:cloudformation:us-west-2:123456789012:stack/ansible-test-client-request-token-yaml/04023cd0-b5d0-11e7-86b8-503ac93168c5",
+                "EventId": "MyBucket-CREATE_COMPLETE-2017-10-20T19:51:33.200Z",
+                "ResourceStatus": "CREATE_COMPLETE",
+                "ResourceType": "AWS::S3::Bucket",
+                "Timestamp": {
+                    "hour": 19,
+                    "__class__": "datetime",
+                    "month": 10,
+                    "second": 33,
+                    "microsecond": 200000,
+                    "year": 2017,
+                    "day": 20,
+                    "minute": 51
+                },
+                "StackName": "ansible-test-client-request-token-yaml",
+                "ResourceProperties": "{}\n",
+                "PhysicalResourceId": "ansible-test-client-request-token-yaml-mybucket-13m2y4v8bptj4",
+                "ClientRequestToken": "3faf3fb5-b289-41fc-b940-44151828f6cf",
+                "LogicalResourceId": "MyBucket"
+            },
+            {
+                "StackId": "arn:aws:cloudformation:us-west-2:123456789012:stack/ansible-test-client-request-token-yaml/04023cd0-b5d0-11e7-86b8-503ac93168c5",
+                "EventId": "MyBucket-CREATE_IN_PROGRESS-2017-10-20T19:51:12.754Z",
+                "ResourceStatus": "CREATE_IN_PROGRESS",
+                "ResourceType": "AWS::S3::Bucket",
+                "Timestamp": {
+                    "hour": 19,
+                    "__class__": "datetime",
+                    "month": 10,
+                    "second": 12,
+                    "microsecond": 754000,
+                    "year": 2017,
+                    "day": 20,
+                    "minute": 51
+                },
+                "ResourceStatusReason": "Resource creation Initiated",
+                "StackName": "ansible-test-client-request-token-yaml",
+                "ResourceProperties": "{}\n",
+                "PhysicalResourceId": "ansible-test-client-request-token-yaml-mybucket-13m2y4v8bptj4",
+                "ClientRequestToken": "3faf3fb5-b289-41fc-b940-44151828f6cf",
+                "LogicalResourceId": "MyBucket"
+            },
+            {
+                "StackId": "arn:aws:cloudformation:us-west-2:123456789012:stack/ansible-test-client-request-token-yaml/04023cd0-b5d0-11e7-86b8-503ac93168c5",
+                "EventId": "MyBucket-CREATE_IN_PROGRESS-2017-10-20T19:51:11.159Z",
+                "ResourceStatus": "CREATE_IN_PROGRESS",
+                "ResourceType": "AWS::S3::Bucket",
+                "Timestamp": {
+                    "hour": 19,
+                    "__class__": "datetime",
+                    "month": 10,
+                    "second": 11,
+                    "microsecond": 159000,
+                    "year": 2017,
+                    "day": 20,
+                    "minute": 51
+                },
+                "StackName": "ansible-test-client-request-token-yaml",
+                "ResourceProperties": "{}\n",
+                "PhysicalResourceId": "",
+                "ClientRequestToken": "3faf3fb5-b289-41fc-b940-44151828f6cf",
+                "LogicalResourceId": "MyBucket"
+            },
+            {
+                "StackId": "arn:aws:cloudformation:us-west-2:123456789012:stack/ansible-test-client-request-token-yaml/04023cd0-b5d0-11e7-86b8-503ac93168c5",
+                "EventId": "04032730-b5d0-11e7-86b8-503ac93168c5",
+                "ResourceStatus": "CREATE_IN_PROGRESS",
+                "ResourceType": "AWS::CloudFormation::Stack",
+                "Timestamp": {
+                    "hour": 19,
+                    "__class__": "datetime",
+                    "month": 10,
+                    "second": 8,
+                    "microsecond": 324000,
+                    "year": 2017,
+                    "day": 20,
+                    "minute": 51
+                },
+                "ResourceStatusReason": "User Initiated",
+                "StackName": "ansible-test-client-request-token-yaml",
+                "PhysicalResourceId": "arn:aws:cloudformation:us-west-2:123456789012:stack/ansible-test-client-request-token-yaml/04023cd0-b5d0-11e7-86b8-503ac93168c5",
+                "ClientRequestToken": "3faf3fb5-b289-41fc-b940-44151828f6cf",
+                "LogicalResourceId": "ansible-test-client-request-token-yaml"
+            }
+        ],
+        "ResponseMetadata": {
+            "RetryAttempts": 0,
+            "HTTPStatusCode": 200,
+            "RequestId": "16faf590-b5d0-11e7-ae09-550cfe4b2358",
+            "HTTPHeaders": {
+                "x-amzn-requestid": "16faf590-b5d0-11e7-ae09-550cfe4b2358",
+                "vary": "Accept-Encoding",
+                "content-length": "4276",
+                "content-type": "text/xml",
+                "date": "Fri, 20 Oct 2017 19:51:39 GMT"
+            }
+        }
+    }
+}
\ No newline at end of file
diff --git a/test/units/modules/cloud/amazon/placebo_recordings/cloudformation/client_request_token_s3_stack/cloudformation.DescribeStacks_1.json b/test/units/modules/cloud/amazon/placebo_recordings/cloudformation/client_request_token_s3_stack/cloudformation.DescribeStacks_1.json
new file mode 100644
--- /dev/null
+++ b/test/units/modules/cloud/amazon/placebo_recordings/cloudformation/client_request_token_s3_stack/cloudformation.DescribeStacks_1.json
@@ -0,0 +1,40 @@
+{
+    "status_code": 200,
+    "data": {
+        "Stacks": [
+            {
+                "StackId": "arn:aws:cloudformation:us-west-2:123456789012:stack/ansible-test-client-request-token-yaml/04023cd0-b5d0-11e7-86b8-503ac93168c5",
+                "EnableTerminationProtection": false,
+                "Description": "Basic template that creates an S3 bucket",
+                "Tags": [],
+                "StackStatusReason": "User Initiated",
+                "CreationTime": {
+                    "hour": 19,
+                    "__class__": "datetime",
+                    "month": 10,
+                    "second": 8,
+                    "microsecond": 324000,
+                    "year": 2017,
+                    "day": 20,
+                    "minute": 51
+                },
+                "StackName": "ansible-test-client-request-token-yaml",
+                "NotificationARNs": [],
+                "StackStatus": "CREATE_IN_PROGRESS",
+                "DisableRollback": false,
+                "RollbackConfiguration": {}
+            }
+        ],
+        "ResponseMetadata": {
+            "RetryAttempts": 0,
+            "HTTPStatusCode": 200,
+            "RequestId": "042974db-b5d0-11e7-ae09-550cfe4b2358",
+            "HTTPHeaders": {
+                "x-amzn-requestid": "042974db-b5d0-11e7-ae09-550cfe4b2358",
+                "date": "Fri, 20 Oct 2017 19:51:08 GMT",
+                "content-length": "975",
+                "content-type": "text/xml"
+            }
+        }
+    }
+}
\ No newline at end of file
diff --git a/test/units/modules/cloud/amazon/placebo_recordings/cloudformation/client_request_token_s3_stack/cloudformation.DescribeStacks_2.json b/test/units/modules/cloud/amazon/placebo_recordings/cloudformation/client_request_token_s3_stack/cloudformation.DescribeStacks_2.json
new file mode 100644
--- /dev/null
+++ b/test/units/modules/cloud/amazon/placebo_recordings/cloudformation/client_request_token_s3_stack/cloudformation.DescribeStacks_2.json
@@ -0,0 +1,39 @@
+{
+    "status_code": 200,
+    "data": {
+        "Stacks": [
+            {
+                "StackId": "arn:aws:cloudformation:us-west-2:123456789012:stack/ansible-test-client-request-token-yaml/04023cd0-b5d0-11e7-86b8-503ac93168c5",
+                "Description": "Basic template that creates an S3 bucket",
+                "Tags": [],
+                "EnableTerminationProtection": false,
+                "CreationTime": {
+                    "hour": 19,
+                    "__class__": "datetime",
+                    "month": 10,
+                    "second": 8,
+                    "microsecond": 324000,
+                    "year": 2017,
+                    "day": 20,
+                    "minute": 51
+                },
+                "StackName": "ansible-test-client-request-token-yaml",
+                "NotificationARNs": [],
+                "StackStatus": "CREATE_IN_PROGRESS",
+                "DisableRollback": false,
+                "RollbackConfiguration": {}
+            }
+        ],
+        "ResponseMetadata": {
+            "RetryAttempts": 0,
+            "HTTPStatusCode": 200,
+            "RequestId": "074b26dc-b5d0-11e7-ae09-550cfe4b2358",
+            "HTTPHeaders": {
+                "x-amzn-requestid": "074b26dc-b5d0-11e7-ae09-550cfe4b2358",
+                "date": "Fri, 20 Oct 2017 19:51:13 GMT",
+                "content-length": "913",
+                "content-type": "text/xml"
+            }
+        }
+    }
+}
\ No newline at end of file
diff --git a/test/units/modules/cloud/amazon/placebo_recordings/cloudformation/client_request_token_s3_stack/cloudformation.DescribeStacks_3.json b/test/units/modules/cloud/amazon/placebo_recordings/cloudformation/client_request_token_s3_stack/cloudformation.DescribeStacks_3.json
new file mode 100644
--- /dev/null
+++ b/test/units/modules/cloud/amazon/placebo_recordings/cloudformation/client_request_token_s3_stack/cloudformation.DescribeStacks_3.json
@@ -0,0 +1,39 @@
+{
+    "status_code": 200,
+    "data": {
+        "Stacks": [
+            {
+                "StackId": "arn:aws:cloudformation:us-west-2:123456789012:stack/ansible-test-client-request-token-yaml/04023cd0-b5d0-11e7-86b8-503ac93168c5",
+                "Description": "Basic template that creates an S3 bucket",
+                "Tags": [],
+                "EnableTerminationProtection": false,
+                "CreationTime": {
+                    "hour": 19,
+                    "__class__": "datetime",
+                    "month": 10,
+                    "second": 8,
+                    "microsecond": 324000,
+                    "year": 2017,
+                    "day": 20,
+                    "minute": 51
+                },
+                "StackName": "ansible-test-client-request-token-yaml",
+                "NotificationARNs": [],
+                "StackStatus": "CREATE_IN_PROGRESS",
+                "DisableRollback": false,
+                "RollbackConfiguration": {}
+            }
+        ],
+        "ResponseMetadata": {
+            "RetryAttempts": 0,
+            "HTTPStatusCode": 200,
+            "RequestId": "0a6cb1b3-b5d0-11e7-ae09-550cfe4b2358",
+            "HTTPHeaders": {
+                "x-amzn-requestid": "0a6cb1b3-b5d0-11e7-ae09-550cfe4b2358",
+                "date": "Fri, 20 Oct 2017 19:51:18 GMT",
+                "content-length": "913",
+                "content-type": "text/xml"
+            }
+        }
+    }
+}
\ No newline at end of file
diff --git a/test/units/modules/cloud/amazon/placebo_recordings/cloudformation/client_request_token_s3_stack/cloudformation.DescribeStacks_4.json b/test/units/modules/cloud/amazon/placebo_recordings/cloudformation/client_request_token_s3_stack/cloudformation.DescribeStacks_4.json
new file mode 100644
--- /dev/null
+++ b/test/units/modules/cloud/amazon/placebo_recordings/cloudformation/client_request_token_s3_stack/cloudformation.DescribeStacks_4.json
@@ -0,0 +1,39 @@
+{
+    "status_code": 200,
+    "data": {
+        "Stacks": [
+            {
+                "StackId": "arn:aws:cloudformation:us-west-2:123456789012:stack/ansible-test-client-request-token-yaml/04023cd0-b5d0-11e7-86b8-503ac93168c5",
+                "Description": "Basic template that creates an S3 bucket",
+                "Tags": [],
+                "EnableTerminationProtection": false,
+                "CreationTime": {
+                    "hour": 19,
+                    "__class__": "datetime",
+                    "month": 10,
+                    "second": 8,
+                    "microsecond": 324000,
+                    "year": 2017,
+                    "day": 20,
+                    "minute": 51
+                },
+                "StackName": "ansible-test-client-request-token-yaml",
+                "NotificationARNs": [],
+                "StackStatus": "CREATE_IN_PROGRESS",
+                "DisableRollback": false,
+                "RollbackConfiguration": {}
+            }
+        ],
+        "ResponseMetadata": {
+            "RetryAttempts": 0,
+            "HTTPStatusCode": 200,
+            "RequestId": "0d8cddf1-b5d0-11e7-ae09-550cfe4b2358",
+            "HTTPHeaders": {
+                "x-amzn-requestid": "0d8cddf1-b5d0-11e7-ae09-550cfe4b2358",
+                "date": "Fri, 20 Oct 2017 19:51:23 GMT",
+                "content-length": "913",
+                "content-type": "text/xml"
+            }
+        }
+    }
+}
\ No newline at end of file
diff --git a/test/units/modules/cloud/amazon/placebo_recordings/cloudformation/client_request_token_s3_stack/cloudformation.DescribeStacks_5.json b/test/units/modules/cloud/amazon/placebo_recordings/cloudformation/client_request_token_s3_stack/cloudformation.DescribeStacks_5.json
new file mode 100644
--- /dev/null
+++ b/test/units/modules/cloud/amazon/placebo_recordings/cloudformation/client_request_token_s3_stack/cloudformation.DescribeStacks_5.json
@@ -0,0 +1,39 @@
+{
+    "status_code": 200,
+    "data": {
+        "Stacks": [
+            {
+                "StackId": "arn:aws:cloudformation:us-west-2:123456789012:stack/ansible-test-client-request-token-yaml/04023cd0-b5d0-11e7-86b8-503ac93168c5",
+                "Description": "Basic template that creates an S3 bucket",
+                "Tags": [],
+                "EnableTerminationProtection": false,
+                "CreationTime": {
+                    "hour": 19,
+                    "__class__": "datetime",
+                    "month": 10,
+                    "second": 8,
+                    "microsecond": 324000,
+                    "year": 2017,
+                    "day": 20,
+                    "minute": 51
+                },
+                "StackName": "ansible-test-client-request-token-yaml",
+                "NotificationARNs": [],
+                "StackStatus": "CREATE_IN_PROGRESS",
+                "DisableRollback": false,
+                "RollbackConfiguration": {}
+            }
+        ],
+        "ResponseMetadata": {
+            "RetryAttempts": 0,
+            "HTTPStatusCode": 200,
+            "RequestId": "10ac94d5-b5d0-11e7-ae09-550cfe4b2358",
+            "HTTPHeaders": {
+                "x-amzn-requestid": "10ac94d5-b5d0-11e7-ae09-550cfe4b2358",
+                "date": "Fri, 20 Oct 2017 19:51:28 GMT",
+                "content-length": "913",
+                "content-type": "text/xml"
+            }
+        }
+    }
+}
\ No newline at end of file
diff --git a/test/units/modules/cloud/amazon/placebo_recordings/cloudformation/client_request_token_s3_stack/cloudformation.DescribeStacks_6.json b/test/units/modules/cloud/amazon/placebo_recordings/cloudformation/client_request_token_s3_stack/cloudformation.DescribeStacks_6.json
new file mode 100644
--- /dev/null
+++ b/test/units/modules/cloud/amazon/placebo_recordings/cloudformation/client_request_token_s3_stack/cloudformation.DescribeStacks_6.json
@@ -0,0 +1,39 @@
+{
+    "status_code": 200,
+    "data": {
+        "Stacks": [
+            {
+                "StackId": "arn:aws:cloudformation:us-west-2:123456789012:stack/ansible-test-client-request-token-yaml/04023cd0-b5d0-11e7-86b8-503ac93168c5",
+                "Description": "Basic template that creates an S3 bucket",
+                "Tags": [],
+                "EnableTerminationProtection": false,
+                "CreationTime": {
+                    "hour": 19,
+                    "__class__": "datetime",
+                    "month": 10,
+                    "second": 8,
+                    "microsecond": 324000,
+                    "year": 2017,
+                    "day": 20,
+                    "minute": 51
+                },
+                "StackName": "ansible-test-client-request-token-yaml",
+                "NotificationARNs": [],
+                "StackStatus": "CREATE_IN_PROGRESS",
+                "DisableRollback": false,
+                "RollbackConfiguration": {}
+            }
+        ],
+        "ResponseMetadata": {
+            "RetryAttempts": 0,
+            "HTTPStatusCode": 200,
+            "RequestId": "13caeb1b-b5d0-11e7-ae09-550cfe4b2358",
+            "HTTPHeaders": {
+                "x-amzn-requestid": "13caeb1b-b5d0-11e7-ae09-550cfe4b2358",
+                "date": "Fri, 20 Oct 2017 19:51:33 GMT",
+                "content-length": "913",
+                "content-type": "text/xml"
+            }
+        }
+    }
+}
\ No newline at end of file
diff --git a/test/units/modules/cloud/amazon/placebo_recordings/cloudformation/client_request_token_s3_stack/cloudformation.DescribeStacks_7.json b/test/units/modules/cloud/amazon/placebo_recordings/cloudformation/client_request_token_s3_stack/cloudformation.DescribeStacks_7.json
new file mode 100644
--- /dev/null
+++ b/test/units/modules/cloud/amazon/placebo_recordings/cloudformation/client_request_token_s3_stack/cloudformation.DescribeStacks_7.json
@@ -0,0 +1,45 @@
+{
+    "status_code": 200,
+    "data": {
+        "Stacks": [
+            {
+                "StackId": "arn:aws:cloudformation:us-west-2:123456789012:stack/ansible-test-client-request-token-yaml/04023cd0-b5d0-11e7-86b8-503ac93168c5",
+                "Description": "Basic template that creates an S3 bucket",
+                "Tags": [],
+                "Outputs": [
+                    {
+                        "OutputKey": "TheName",
+                        "OutputValue": "ansible-test-client-request-token-yaml-mybucket-13m2y4v8bptj4"
+                    }
+                ],
+                "EnableTerminationProtection": false,
+                "CreationTime": {
+                    "hour": 19,
+                    "__class__": "datetime",
+                    "month": 10,
+                    "second": 8,
+                    "microsecond": 324000,
+                    "year": 2017,
+                    "day": 20,
+                    "minute": 51
+                },
+                "StackName": "ansible-test-client-request-token-yaml",
+                "NotificationARNs": [],
+                "StackStatus": "CREATE_COMPLETE",
+                "DisableRollback": false,
+                "RollbackConfiguration": {}
+            }
+        ],
+        "ResponseMetadata": {
+            "RetryAttempts": 0,
+            "HTTPStatusCode": 200,
+            "RequestId": "16ea53bb-b5d0-11e7-ae09-550cfe4b2358",
+            "HTTPHeaders": {
+                "x-amzn-requestid": "16ea53bb-b5d0-11e7-ae09-550cfe4b2358",
+                "date": "Fri, 20 Oct 2017 19:51:39 GMT",
+                "content-length": "1115",
+                "content-type": "text/xml"
+            }
+        }
+    }
+}
\ No newline at end of file
diff --git a/test/units/modules/cloud/amazon/test_cloudformation.py b/test/units/modules/cloud/amazon/test_cloudformation.py
--- a/test/units/modules/cloud/amazon/test_cloudformation.py
+++ b/test/units/modules/cloud/amazon/test_cloudformation.py
@@ -18,7 +18,7 @@
 import pytest
 from mock import patch
 
-from . placebo_fixtures import placeboify, maybe_sleep
+from .placebo_fixtures import placeboify, maybe_sleep
 from ansible.modules.cloud.amazon import cloudformation as cfn_module
 
 basic_yaml_tpl = """
@@ -73,10 +73,10 @@ def test_invalid_template_json(placeboify):
     assert "ValidationError" in m.exit_kwargs['msg']
 
 
-def test_basic_s3_stack(maybe_sleep, placeboify):
+def test_client_request_token_s3_stack(maybe_sleep, placeboify):
     connection = placeboify.client('cloudformation')
     params = {
-        'StackName': 'ansible-test-basic-yaml',
+        'StackName': 'ansible-test-client-request-token-yaml',
         'TemplateBody': basic_yaml_tpl,
         'ClientRequestToken': '3faf3fb5-b289-41fc-b940-44151828f6cf',
     }
@@ -87,6 +87,22 @@ def test_basic_s3_stack(maybe_sleep, placeboify):
     # require that the final recorded stack state was CREATE_COMPLETE
     # events are retrieved newest-first, so 0 is the latest
     assert 'CREATE_COMPLETE' in result['events'][0]
+    connection.delete_stack(StackName='ansible-test-client-request-token-yaml')
+
+
+def test_basic_s3_stack(maybe_sleep, placeboify):
+    connection = placeboify.client('cloudformation')
+    params = {
+        'StackName': 'ansible-test-basic-yaml',
+        'TemplateBody': basic_yaml_tpl
+    }
+    m = FakeModule(disable_rollback=False)
+    result = cfn_module.create_stack(m, params, connection)
+    assert result['changed']
+    assert len(result['events']) > 1
+    # require that the final recorded stack state was CREATE_COMPLETE
+    # events are retrieved newest-first, so 0 is the latest
+    assert 'CREATE_COMPLETE' in result['events'][0]
     connection.delete_stack(StackName='ansible-test-basic-yaml')