Description
Hi,
My resource has a property "SchemaHandlerPackage", which is both a required property and a writeOnlyProperty. I am running contract_create_delete on my resource. The create handler is invoked and returns success after creating the resource. I return all required properties and the primary ID in the resourceModel after creating the resource.
My create handler returns IN_PROGRESS two times because it takes sometime to create the resource. For these two calls, I see the "SchemaHandlerPackage" in the response(because I return it in the intermediate response as well), something like this(in rpdk.log):
[2020-10-19T19:46:46Z] DEBUG - Received response
{
'status': 'IN_PROGRESS',
'callbackContext': {removed the values here},
'callbackDelaySeconds': 5,
'resourceModel': {
'Arn': 'arn:aws:cloudformation:us-west-2:336098619110:type/resource/Organization-Service-Resource17/00000033',
'SchemaHandlerPackage': 's3: //cloudformationsampleresourcetype/organization-service-resource17.zip',
'TypeName': 'Organization::Service::Resource17'
}
}
But when the handler returns success, the "SchemaHandlerPackage" is disappeared from the response, even though I set it in the code:
[2020-10-19T19:47:32Z] DEBUG - Received response{
'status': 'SUCCESS',
'callbackDelaySeconds': 0,
'resourceModel': {
'Arn': 'arn:aws:cloudformation:us-west-2:336098619110:type/resource/Organization-Service-Resource17/00000033',
'Description': 'Anexampleresourceschemademonstratingsomebasicconstructsandvalidationrules.',
'IsDefaultVersion': False,
'LastUpdated': '2020-10-19T19: 46: 50.047Z',
'ProvisioningType': 'FULLY_MUTABLE',
'Schema': {},
'SourceUrl': 'https: //github.com/aws-cloudformation/aws-cloudformation-rpdk.git',
'TimeCreated': '2020-10-19T19: 46: 50.047Z',
'TypeName': 'Organization::Service::Resource17',
'VersionId': '00000033',
'Visibility': 'PRIVATE'
}
}
I later found out that the writeOnlyProperties are removed before framing the request to the delete handler. By doing this, the writeOnlyProperty, which is also a required property is getting removed, hence the delete handler fails due to a validation error, which results in that contract test failure.
[2020-10-19T19:48:07Z] DEBUG - Received response
{'status': 'FAILED', 'errorCode': 'InvalidRequest', 'message': 'Model validation failed (#: required key [SchemaHandlerPackage] not found)', 'callbackDelaySeconds': 0}
[2020-10-19T19:48:08Z] DEBUG - Caught exit recommendation
Solution: Is the "required property validation" necessary for a delete handler? Checking for a Primary Id should be enough for a delete handler as per https://docs.aws.amazon.com/cloudformation-cli/latest/userguide/resource-type-test-contract.html#resource-type-test-contract-delete Or you can remove a writeOnlyProperty only if it's not a required property.
Thanks,
Uma