diff --git a/troposphere/kinesis.py b/troposphere/kinesis.py index 21373c96d..56e7239e3 100644 --- a/troposphere/kinesis.py +++ b/troposphere/kinesis.py @@ -4,7 +4,10 @@ # See LICENSE file for full license. from . import AWSObject, AWSProperty, Tags -from .validators import integer +from .validators import ( + integer, + kinesis_stream_mode +) class StreamEncryption(AWSProperty): @@ -14,6 +17,12 @@ class StreamEncryption(AWSProperty): } +class StreamModeDetails(AWSProperty): + props = { + "StreamMode": (kinesis_stream_mode, True) + } + + class Stream(AWSObject): resource_type = "AWS::Kinesis::Stream" @@ -22,6 +31,7 @@ class Stream(AWSObject): "RetentionPeriodHours": (integer, False), "ShardCount": (integer, True), "StreamEncryption": (StreamEncryption, False), + "StreamModeDetails": (StreamModeDetails, False), "Tags": ((Tags, list), False), } diff --git a/troposphere/validators.py b/troposphere/validators.py index 88ebde9e6..79fb5f1a8 100644 --- a/troposphere/validators.py +++ b/troposphere/validators.py @@ -708,3 +708,10 @@ def wafv2_custom_body_response_content_type(content_type): if content_type not in valid_types: raise ValueError('ContentType must be one of: "%s"' % (", ".join(valid_types))) return content_type + + +def kinesis_stream_mode(mode): + valid_modes = ["ON_DEMAND", "PROVISIONED"] + if mode not in valid_modes: + raise ValueError('ContentType must be one of: "%s"' % (", ".join(valid_modes))) + return mode