VaporShell.ElastiCache.Classes.ps1

using namespace System
using namespace System.Collections
using namespace System.Collections.Generic
using namespace System.IO
using namespace System.Management.Automation
[CmdletBinding()]
Param()

Write-Verbose "Importing class 'ElastiCacheReplicationGroupLogDeliveryConfigurationRequest'"

class ElastiCacheReplicationGroupLogDeliveryConfigurationRequest : VSResourceProperty {
    hidden [string] $_vsFunctionName = 'Add-VSElastiCacheReplicationGroupLogDeliveryConfigurationRequest'
    hidden [string] $_awsDocumentation = 'http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticache-replicationgroup-logdeliveryconfigurationrequest.html'

    hidden [object] $_destinationDetails
    hidden [object] $_destinationType
    hidden [object] $_logFormat
    hidden [object] $_logType

    [ElastiCacheReplicationGroupDestinationDetails] $DestinationDetails
    [string] $DestinationType
    [string] $LogFormat
    [string] $LogType

    hidden [void] _addAccessors() {
        $this | Add-Member -Force -MemberType ScriptProperty -Name DestinationDetails -Value {
            $this._destinationDetails
        } -SecondValue {
            param([ValidateType(([ElastiCacheReplicationGroupDestinationDetails], [string], [IntrinsicFunction], [ConditionFunction]))] [object] $value)
            $this._destinationDetails = $value
        }
        $this | Add-Member -Force -MemberType ScriptProperty -Name DestinationType -Value {
            $this._destinationType
        } -SecondValue {
            param([ValidateType(([string], [int], [IntrinsicFunction], [ConditionFunction]))] [object] $value)
            $this._destinationType = if ($value -is [int]) {
                $value.ToString()
            }
            else {
                $value
            }
        }
        $this | Add-Member -Force -MemberType ScriptProperty -Name LogFormat -Value {
            $this._logFormat
        } -SecondValue {
            param([ValidateType(([string], [int], [IntrinsicFunction], [ConditionFunction]))] [object] $value)
            $this._logFormat = if ($value -is [int]) {
                $value.ToString()
            }
            else {
                $value
            }
        }
        $this | Add-Member -Force -MemberType ScriptProperty -Name LogType -Value {
            $this._logType
        } -SecondValue {
            param([ValidateType(([string], [int], [IntrinsicFunction], [ConditionFunction]))] [object] $value)
            $this._logType = if ($value -is [int]) {
                $value.ToString()
            }
            else {
                $value
            }
        }
    }

    ElastiCacheReplicationGroupLogDeliveryConfigurationRequest() : base() {}
    ElastiCacheReplicationGroupLogDeliveryConfigurationRequest([IDictionary] $props) : base($props) {}
    ElastiCacheReplicationGroupLogDeliveryConfigurationRequest([psobject] $props) : base($props) {}
}

Write-Verbose "Importing class 'ElastiCacheReplicationGroupCloudWatchLogsDestinationDetails'"

class ElastiCacheReplicationGroupCloudWatchLogsDestinationDetails : VSResourceProperty {
    hidden [string] $_vsFunctionName = 'Add-VSElastiCacheReplicationGroupCloudWatchLogsDestinationDetails'
    hidden [string] $_awsDocumentation = 'http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticache-replicationgroup-cloudwatchlogsdestinationdetails.html'

    hidden [object] $_logGroup

    [string] $LogGroup

    hidden [void] _addAccessors() {
        $this | Add-Member -Force -MemberType ScriptProperty -Name LogGroup -Value {
            $this._logGroup
        } -SecondValue {
            param([ValidateType(([string], [int], [IntrinsicFunction], [ConditionFunction]))] [object] $value)
            $this._logGroup = if ($value -is [int]) {
                $value.ToString()
            }
            else {
                $value
            }
        }
    }

    ElastiCacheReplicationGroupCloudWatchLogsDestinationDetails() : base() {}
    ElastiCacheReplicationGroupCloudWatchLogsDestinationDetails([IDictionary] $props) : base($props) {}
    ElastiCacheReplicationGroupCloudWatchLogsDestinationDetails([psobject] $props) : base($props) {}
}

Write-Verbose "Importing class 'ElastiCacheReplicationGroupDestinationDetails'"

class ElastiCacheReplicationGroupDestinationDetails : VSResourceProperty {
    hidden [string] $_vsFunctionName = 'Add-VSElastiCacheReplicationGroupDestinationDetails'
    hidden [string] $_awsDocumentation = 'http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticache-replicationgroup-destinationdetails.html'

    hidden [object] $_cloudWatchLogsDetails
    hidden [object] $_kinesisFirehoseDetails

    [ElastiCacheReplicationGroupCloudWatchLogsDestinationDetails] $CloudWatchLogsDetails
    [ElastiCacheReplicationGroupKinesisFirehoseDestinationDetails] $KinesisFirehoseDetails

    hidden [void] _addAccessors() {
        $this | Add-Member -Force -MemberType ScriptProperty -Name CloudWatchLogsDetails -Value {
            $this._cloudWatchLogsDetails
        } -SecondValue {
            param([ValidateType(([ElastiCacheReplicationGroupCloudWatchLogsDestinationDetails], [string], [IntrinsicFunction], [ConditionFunction]))] [object] $value)
            $this._cloudWatchLogsDetails = $value
        }
        $this | Add-Member -Force -MemberType ScriptProperty -Name KinesisFirehoseDetails -Value {
            $this._kinesisFirehoseDetails
        } -SecondValue {
            param([ValidateType(([ElastiCacheReplicationGroupKinesisFirehoseDestinationDetails], [string], [IntrinsicFunction], [ConditionFunction]))] [object] $value)
            $this._kinesisFirehoseDetails = $value
        }
    }

    ElastiCacheReplicationGroupDestinationDetails() : base() {}
    ElastiCacheReplicationGroupDestinationDetails([IDictionary] $props) : base($props) {}
    ElastiCacheReplicationGroupDestinationDetails([psobject] $props) : base($props) {}
}

Write-Verbose "Importing class 'ElastiCacheCacheClusterLogDeliveryConfigurationRequest'"

class ElastiCacheCacheClusterLogDeliveryConfigurationRequest : VSResourceProperty {
    hidden [string] $_vsFunctionName = 'Add-VSElastiCacheCacheClusterLogDeliveryConfigurationRequest'
    hidden [string] $_awsDocumentation = 'http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticache-cachecluster-logdeliveryconfigurationrequest.html'

    hidden [object] $_destinationDetails
    hidden [object] $_destinationType
    hidden [object] $_logFormat
    hidden [object] $_logType

    [ElastiCacheCacheClusterDestinationDetails] $DestinationDetails
    [string] $DestinationType
    [string] $LogFormat
    [string] $LogType

    hidden [void] _addAccessors() {
        $this | Add-Member -Force -MemberType ScriptProperty -Name DestinationDetails -Value {
            $this._destinationDetails
        } -SecondValue {
            param([ValidateType(([ElastiCacheCacheClusterDestinationDetails], [string], [IntrinsicFunction], [ConditionFunction]))] [object] $value)
            $this._destinationDetails = $value
        }
        $this | Add-Member -Force -MemberType ScriptProperty -Name DestinationType -Value {
            $this._destinationType
        } -SecondValue {
            param([ValidateType(([string], [int], [IntrinsicFunction], [ConditionFunction]))] [object] $value)
            $this._destinationType = if ($value -is [int]) {
                $value.ToString()
            }
            else {
                $value
            }
        }
        $this | Add-Member -Force -MemberType ScriptProperty -Name LogFormat -Value {
            $this._logFormat
        } -SecondValue {
            param([ValidateType(([string], [int], [IntrinsicFunction], [ConditionFunction]))] [object] $value)
            $this._logFormat = if ($value -is [int]) {
                $value.ToString()
            }
            else {
                $value
            }
        }
        $this | Add-Member -Force -MemberType ScriptProperty -Name LogType -Value {
            $this._logType
        } -SecondValue {
            param([ValidateType(([string], [int], [IntrinsicFunction], [ConditionFunction]))] [object] $value)
            $this._logType = if ($value -is [int]) {
                $value.ToString()
            }
            else {
                $value
            }
        }
    }

    ElastiCacheCacheClusterLogDeliveryConfigurationRequest() : base() {}
    ElastiCacheCacheClusterLogDeliveryConfigurationRequest([IDictionary] $props) : base($props) {}
    ElastiCacheCacheClusterLogDeliveryConfigurationRequest([psobject] $props) : base($props) {}
}

Write-Verbose "Importing class 'ElastiCacheGlobalReplicationGroupGlobalReplicationGroupMember'"

class ElastiCacheGlobalReplicationGroupGlobalReplicationGroupMember : VSResourceProperty {
    hidden [string] $_vsFunctionName = 'Add-VSElastiCacheGlobalReplicationGroupGlobalReplicationGroupMember'
    hidden [string] $_awsDocumentation = 'http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticache-globalreplicationgroup-globalreplicationgroupmember.html'

    hidden [object] $_replicationGroupId
    hidden [object] $_replicationGroupRegion
    hidden [object] $_role

    [string] $ReplicationGroupId
    [string] $ReplicationGroupRegion
    [string] $Role

    hidden [void] _addAccessors() {
        $this | Add-Member -Force -MemberType ScriptProperty -Name ReplicationGroupId -Value {
            $this._replicationGroupId
        } -SecondValue {
            param([ValidateType(([string], [int], [IntrinsicFunction], [ConditionFunction]))] [object] $value)
            $this._replicationGroupId = if ($value -is [int]) {
                $value.ToString()
            }
            else {
                $value
            }
        }
        $this | Add-Member -Force -MemberType ScriptProperty -Name ReplicationGroupRegion -Value {
            $this._replicationGroupRegion
        } -SecondValue {
            param([ValidateType(([string], [int], [IntrinsicFunction], [ConditionFunction]))] [object] $value)
            $this._replicationGroupRegion = if ($value -is [int]) {
                $value.ToString()
            }
            else {
                $value
            }
        }
        $this | Add-Member -Force -MemberType ScriptProperty -Name Role -Value {
            $this._role
        } -SecondValue {
            param([ValidateType(([string], [int], [IntrinsicFunction], [ConditionFunction]))] [object] $value)
            $this._role = if ($value -is [int]) {
                $value.ToString()
            }
            else {
                $value
            }
        }
    }

    ElastiCacheGlobalReplicationGroupGlobalReplicationGroupMember() : base() {}
    ElastiCacheGlobalReplicationGroupGlobalReplicationGroupMember([IDictionary] $props) : base($props) {}
    ElastiCacheGlobalReplicationGroupGlobalReplicationGroupMember([psobject] $props) : base($props) {}
}

Write-Verbose "Importing class 'ElastiCacheReplicationGroupNodeGroupConfiguration'"

class ElastiCacheReplicationGroupNodeGroupConfiguration : VSResourceProperty {
    hidden [string] $_vsFunctionName = 'Add-VSElastiCacheReplicationGroupNodeGroupConfiguration'
    hidden [string] $_awsDocumentation = 'http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticache-replicationgroup-nodegroupconfiguration.html'

    hidden [object] $_nodeGroupId
    hidden [object] $_primaryAvailabilityZone
    hidden [object] $_replicaAvailabilityZones
    hidden [object] $_replicaCount
    hidden [object] $_slots

    [string] $NodeGroupId
    [string] $PrimaryAvailabilityZone
    [string[]] $ReplicaAvailabilityZones
    [int] $ReplicaCount
    [string] $Slots

    hidden [void] _addAccessors() {
        $this | Add-Member -Force -MemberType ScriptProperty -Name NodeGroupId -Value {
            $this._nodeGroupId
        } -SecondValue {
            param([ValidateType(([string], [int], [IntrinsicFunction], [ConditionFunction]))] [object] $value)
            $this._nodeGroupId = if ($value -is [int]) {
                $value.ToString()
            }
            else {
                $value
            }
        }
        $this | Add-Member -Force -MemberType ScriptProperty -Name PrimaryAvailabilityZone -Value {
            $this._primaryAvailabilityZone
        } -SecondValue {
            param([ValidateType(([string], [int], [IntrinsicFunction], [ConditionFunction]))] [object] $value)
            $this._primaryAvailabilityZone = if ($value -is [int]) {
                $value.ToString()
            }
            else {
                $value
            }
        }
        $this | Add-Member -Force -MemberType ScriptProperty -Name ReplicaAvailabilityZones -Value {
            $this._replicaAvailabilityZones
        } -SecondValue {
            param([ValidateType(([string], [int], [IntrinsicFunction], [ConditionFunction]))] [object[]] $value)
            $this._replicaAvailabilityZones = @($value)
        }
        $this | Add-Member -Force -MemberType ScriptProperty -Name ReplicaCount -Value {
            $this._replicaCount
        } -SecondValue {
            param([ValidateType(([string], [int], [IntrinsicFunction], [ConditionFunction]))] [object] $value)
            $this._replicaCount = if ($cast = $value -as [int]) {
                $cast
            }
            else {
                $value
            }
        }
        $this | Add-Member -Force -MemberType ScriptProperty -Name Slots -Value {
            $this._slots
        } -SecondValue {
            param([ValidateType(([string], [int], [IntrinsicFunction], [ConditionFunction]))] [object] $value)
            $this._slots = if ($value -is [int]) {
                $value.ToString()
            }
            else {
                $value
            }
        }
    }

    ElastiCacheReplicationGroupNodeGroupConfiguration() : base() {}
    ElastiCacheReplicationGroupNodeGroupConfiguration([IDictionary] $props) : base($props) {}
    ElastiCacheReplicationGroupNodeGroupConfiguration([psobject] $props) : base($props) {}
}

Write-Verbose "Importing class 'ElastiCacheCacheClusterKinesisFirehoseDestinationDetails'"

class ElastiCacheCacheClusterKinesisFirehoseDestinationDetails : VSResourceProperty {
    hidden [string] $_vsFunctionName = 'Add-VSElastiCacheCacheClusterKinesisFirehoseDestinationDetails'
    hidden [string] $_awsDocumentation = 'http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticache-cachecluster-kinesisfirehosedestinationdetails.html'

    hidden [object] $_deliveryStream

    [string] $DeliveryStream

    hidden [void] _addAccessors() {
        $this | Add-Member -Force -MemberType ScriptProperty -Name DeliveryStream -Value {
            $this._deliveryStream
        } -SecondValue {
            param([ValidateType(([string], [int], [IntrinsicFunction], [ConditionFunction]))] [object] $value)
            $this._deliveryStream = if ($value -is [int]) {
                $value.ToString()
            }
            else {
                $value
            }
        }
    }

    ElastiCacheCacheClusterKinesisFirehoseDestinationDetails() : base() {}
    ElastiCacheCacheClusterKinesisFirehoseDestinationDetails([IDictionary] $props) : base($props) {}
    ElastiCacheCacheClusterKinesisFirehoseDestinationDetails([psobject] $props) : base($props) {}
}

Write-Verbose "Importing class 'ElastiCacheGlobalReplicationGroupRegionalConfiguration'"

class ElastiCacheGlobalReplicationGroupRegionalConfiguration : VSResourceProperty {
    hidden [string] $_vsFunctionName = 'Add-VSElastiCacheGlobalReplicationGroupRegionalConfiguration'
    hidden [string] $_awsDocumentation = 'http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticache-globalreplicationgroup-regionalconfiguration.html'

    hidden [object] $_replicationGroupId
    hidden [object] $_replicationGroupRegion
    hidden [object] $_reshardingConfigurations

    [string] $ReplicationGroupId
    [string] $ReplicationGroupRegion
    [ElastiCacheGlobalReplicationGroupReshardingConfiguration[]] $ReshardingConfigurations

    hidden [void] _addAccessors() {
        $this | Add-Member -Force -MemberType ScriptProperty -Name ReplicationGroupId -Value {
            $this._replicationGroupId
        } -SecondValue {
            param([ValidateType(([string], [int], [IntrinsicFunction], [ConditionFunction]))] [object] $value)
            $this._replicationGroupId = if ($value -is [int]) {
                $value.ToString()
            }
            else {
                $value
            }
        }
        $this | Add-Member -Force -MemberType ScriptProperty -Name ReplicationGroupRegion -Value {
            $this._replicationGroupRegion
        } -SecondValue {
            param([ValidateType(([string], [int], [IntrinsicFunction], [ConditionFunction]))] [object] $value)
            $this._replicationGroupRegion = if ($value -is [int]) {
                $value.ToString()
            }
            else {
                $value
            }
        }
        $this | Add-Member -Force -MemberType ScriptProperty -Name ReshardingConfigurations -Value {
            $this._reshardingConfigurations
        } -SecondValue {
            param([ValidateType(([ElastiCacheGlobalReplicationGroupReshardingConfiguration], [IntrinsicFunction], [ConditionFunction]))] [object[]] $value)
            $this._reshardingConfigurations = $value
        }
    }

    ElastiCacheGlobalReplicationGroupRegionalConfiguration() : base() {}
    ElastiCacheGlobalReplicationGroupRegionalConfiguration([IDictionary] $props) : base($props) {}
    ElastiCacheGlobalReplicationGroupRegionalConfiguration([psobject] $props) : base($props) {}
}

Write-Verbose "Importing class 'ElastiCacheGlobalReplicationGroupReshardingConfiguration'"

class ElastiCacheGlobalReplicationGroupReshardingConfiguration : VSResourceProperty {
    hidden [string] $_vsFunctionName = 'Add-VSElastiCacheGlobalReplicationGroupReshardingConfiguration'
    hidden [string] $_awsDocumentation = 'http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticache-globalreplicationgroup-reshardingconfiguration.html'

    hidden [object] $_nodeGroupId
    hidden [object] $_preferredAvailabilityZones

    [string] $NodeGroupId
    [string[]] $PreferredAvailabilityZones

    hidden [void] _addAccessors() {
        $this | Add-Member -Force -MemberType ScriptProperty -Name NodeGroupId -Value {
            $this._nodeGroupId
        } -SecondValue {
            param([ValidateType(([string], [int], [IntrinsicFunction], [ConditionFunction]))] [object] $value)
            $this._nodeGroupId = if ($value -is [int]) {
                $value.ToString()
            }
            else {
                $value
            }
        }
        $this | Add-Member -Force -MemberType ScriptProperty -Name PreferredAvailabilityZones -Value {
            $this._preferredAvailabilityZones
        } -SecondValue {
            param([ValidateType(([string], [int], [IntrinsicFunction], [ConditionFunction]))] [object[]] $value)
            $this._preferredAvailabilityZones = @($value)
        }
    }

    ElastiCacheGlobalReplicationGroupReshardingConfiguration() : base() {}
    ElastiCacheGlobalReplicationGroupReshardingConfiguration([IDictionary] $props) : base($props) {}
    ElastiCacheGlobalReplicationGroupReshardingConfiguration([psobject] $props) : base($props) {}
}

Write-Verbose "Importing class 'ElastiCacheCacheClusterDestinationDetails'"

class ElastiCacheCacheClusterDestinationDetails : VSResourceProperty {
    hidden [string] $_vsFunctionName = 'Add-VSElastiCacheCacheClusterDestinationDetails'
    hidden [string] $_awsDocumentation = 'http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticache-cachecluster-destinationdetails.html'

    hidden [object] $_cloudWatchLogsDetails
    hidden [object] $_kinesisFirehoseDetails

    [ElastiCacheCacheClusterCloudWatchLogsDestinationDetails] $CloudWatchLogsDetails
    [ElastiCacheCacheClusterKinesisFirehoseDestinationDetails] $KinesisFirehoseDetails

    hidden [void] _addAccessors() {
        $this | Add-Member -Force -MemberType ScriptProperty -Name CloudWatchLogsDetails -Value {
            $this._cloudWatchLogsDetails
        } -SecondValue {
            param([ValidateType(([ElastiCacheCacheClusterCloudWatchLogsDestinationDetails], [string], [IntrinsicFunction], [ConditionFunction]))] [object] $value)
            $this._cloudWatchLogsDetails = $value
        }
        $this | Add-Member -Force -MemberType ScriptProperty -Name KinesisFirehoseDetails -Value {
            $this._kinesisFirehoseDetails
        } -SecondValue {
            param([ValidateType(([ElastiCacheCacheClusterKinesisFirehoseDestinationDetails], [string], [IntrinsicFunction], [ConditionFunction]))] [object] $value)
            $this._kinesisFirehoseDetails = $value
        }
    }

    ElastiCacheCacheClusterDestinationDetails() : base() {}
    ElastiCacheCacheClusterDestinationDetails([IDictionary] $props) : base($props) {}
    ElastiCacheCacheClusterDestinationDetails([psobject] $props) : base($props) {}
}

Write-Verbose "Importing class 'ElastiCacheCacheClusterCloudWatchLogsDestinationDetails'"

class ElastiCacheCacheClusterCloudWatchLogsDestinationDetails : VSResourceProperty {
    hidden [string] $_vsFunctionName = 'Add-VSElastiCacheCacheClusterCloudWatchLogsDestinationDetails'
    hidden [string] $_awsDocumentation = 'http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticache-cachecluster-cloudwatchlogsdestinationdetails.html'

    hidden [object] $_logGroup

    [string] $LogGroup

    hidden [void] _addAccessors() {
        $this | Add-Member -Force -MemberType ScriptProperty -Name LogGroup -Value {
            $this._logGroup
        } -SecondValue {
            param([ValidateType(([string], [int], [IntrinsicFunction], [ConditionFunction]))] [object] $value)
            $this._logGroup = if ($value -is [int]) {
                $value.ToString()
            }
            else {
                $value
            }
        }
    }

    ElastiCacheCacheClusterCloudWatchLogsDestinationDetails() : base() {}
    ElastiCacheCacheClusterCloudWatchLogsDestinationDetails([IDictionary] $props) : base($props) {}
    ElastiCacheCacheClusterCloudWatchLogsDestinationDetails([psobject] $props) : base($props) {}
}

Write-Verbose "Importing class 'ElastiCacheReplicationGroupKinesisFirehoseDestinationDetails'"

class ElastiCacheReplicationGroupKinesisFirehoseDestinationDetails : VSResourceProperty {
    hidden [string] $_vsFunctionName = 'Add-VSElastiCacheReplicationGroupKinesisFirehoseDestinationDetails'
    hidden [string] $_awsDocumentation = 'http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticache-replicationgroup-kinesisfirehosedestinationdetails.html'

    hidden [object] $_deliveryStream

    [string] $DeliveryStream

    hidden [void] _addAccessors() {
        $this | Add-Member -Force -MemberType ScriptProperty -Name DeliveryStream -Value {
            $this._deliveryStream
        } -SecondValue {
            param([ValidateType(([string], [int], [IntrinsicFunction], [ConditionFunction]))] [object] $value)
            $this._deliveryStream = if ($value -is [int]) {
                $value.ToString()
            }
            else {
                $value
            }
        }
    }

    ElastiCacheReplicationGroupKinesisFirehoseDestinationDetails() : base() {}
    ElastiCacheReplicationGroupKinesisFirehoseDestinationDetails([IDictionary] $props) : base($props) {}
    ElastiCacheReplicationGroupKinesisFirehoseDestinationDetails([psobject] $props) : base($props) {}
}

Write-Verbose "Importing class 'ElastiCacheUserGroup'"

class ElastiCacheUserGroup : VSResource {
    hidden [string] $_vsFunctionName = 'New-VSElastiCacheUserGroup'
    hidden [string] $_awsDocumentation = 'http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-elasticache-usergroup.html'

    hidden [string[]] $_attributes = @('Status','Arn')
    hidden [object] $_condition

    [string] $Type = 'AWS::ElastiCache::UserGroup'
    [string] $UserGroupId
    [string] $Engine
    [string[]] $UserIds
    [VSJson] $Metadata
    [UpdatePolicy] $UpdatePolicy
    [string] $Condition

    hidden [void] _addAccessors() {
        $this._addBaseAccessors()
        $this | Add-Member -Force -MemberType ScriptProperty -Name UserGroupId -Value {
            $this.Properties['UserGroupId']
        } -SecondValue {
            param([ValidateType(([string], [int], [IntrinsicFunction], [ConditionFunction]))] [object] $value)
            $this.Properties['UserGroupId'] = if ($value -is [int]) {
                $value.ToString()
            }
            else {
                $value
            }
        }
        $this | Add-Member -Force -MemberType ScriptProperty -Name Engine -Value {
            $this.Properties['Engine']
        } -SecondValue {
            param([ValidateType(([string], [int], [IntrinsicFunction], [ConditionFunction]))] [object] $value)
            $this.Properties['Engine'] = if ($value -is [int]) {
                $value.ToString()
            }
            else {
                $value
            }
        }
        $this | Add-Member -Force -MemberType ScriptProperty -Name UserIds -Value {
            $this.Properties['UserIds']
        } -SecondValue {
            param([ValidateType(([string], [int], [IntrinsicFunction], [ConditionFunction]))] [object[]] $value)
            $this.Properties['UserIds'] = @($value)
        }
        $this | Add-Member -Force -MemberType ScriptProperty -Name Condition -Value {
            $this._condition
        } -SecondValue {
            param(
                [ValidateType(([string], [IntrinsicFunction], [ConditionFunction]))] [object]
                $value
            )
            $this._condition = $value
        }
    }

    ElastiCacheUserGroup() : base() {}
    ElastiCacheUserGroup([IDictionary] $props) : base($props) {}
    ElastiCacheUserGroup([psobject] $props) : base($props) {}
}

Write-Verbose "Importing class 'ElastiCacheSubnetGroup'"

class ElastiCacheSubnetGroup : VSResource {
    hidden [string] $_vsFunctionName = 'New-VSElastiCacheSubnetGroup'
    hidden [string] $_awsDocumentation = 'http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticache-subnetgroup.html'

    hidden [object] $_condition

    [string] $Type = 'AWS::ElastiCache::SubnetGroup'
    [string] $CacheSubnetGroupName
    [string] $Description
    [string[]] $SubnetIds
    [VSTag[]] $Tags
    [VSJson] $Metadata
    [UpdatePolicy] $UpdatePolicy
    [string] $Condition

    hidden [void] _addAccessors() {
        $this._addBaseAccessors()
        $this | Add-Member -Force -MemberType ScriptProperty -Name CacheSubnetGroupName -Value {
            $this.Properties['CacheSubnetGroupName']
        } -SecondValue {
            param([ValidateType(([string], [int], [IntrinsicFunction], [ConditionFunction]))] [object] $value)
            $this.Properties['CacheSubnetGroupName'] = if ($value -is [int]) {
                $value.ToString()
            }
            else {
                $value
            }
        }
        $this | Add-Member -Force -MemberType ScriptProperty -Name Description -Value {
            $this.Properties['Description']
        } -SecondValue {
            param([ValidateType(([string], [int], [IntrinsicFunction], [ConditionFunction]))] [object] $value)
            $this.Properties['Description'] = if ($value -is [int]) {
                $value.ToString()
            }
            else {
                $value
            }
        }
        $this | Add-Member -Force -MemberType ScriptProperty -Name SubnetIds -Value {
            $this.Properties['SubnetIds']
        } -SecondValue {
            param([ValidateType(([string], [int], [IntrinsicFunction], [ConditionFunction]))] [object[]] $value)
            $this.Properties['SubnetIds'] = @($value)
        }
        $this | Add-Member -Force -MemberType ScriptProperty -Name Tags -Value {
            $this.Properties['Tags']
        } -SecondValue {
            param([TransformTag()] [ValidateType(([IDictionary], [psobject], [VSTag]))] [object] $value)
            $this.Properties['Tags'] = [VSTag]::TransformTag($value)
        }
        $this | Add-Member -Force -MemberType ScriptProperty -Name Condition -Value {
            $this._condition
        } -SecondValue {
            param(
                [ValidateType(([string], [IntrinsicFunction], [ConditionFunction]))] [object]
                $value
            )
            $this._condition = $value
        }
    }

    ElastiCacheSubnetGroup() : base() {}
    ElastiCacheSubnetGroup([IDictionary] $props) : base($props) {}
    ElastiCacheSubnetGroup([psobject] $props) : base($props) {}
}

Write-Verbose "Importing class 'ElastiCacheReplicationGroup'"

class ElastiCacheReplicationGroup : VSResource {
    hidden [string] $_vsFunctionName = 'New-VSElastiCacheReplicationGroup'
    hidden [string] $_awsDocumentation = 'http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-elasticache-replicationgroup.html'

    hidden [string[]] $_attributes = @('ConfigurationEndPoint.Address','ConfigurationEndPoint.Port','PrimaryEndPoint.Address','PrimaryEndPoint.Port','ReadEndPoint.Addresses','ReadEndPoint.Addresses.List','ReadEndPoint.Ports','ReadEndPoint.Ports.List','ReaderEndPoint.Address','ReaderEndPoint.Port')
    hidden [object] $_condition

    [string] $Type = 'AWS::ElastiCache::ReplicationGroup'
    [bool] $AtRestEncryptionEnabled
    [string] $AuthToken
    [bool] $AutoMinorVersionUpgrade
    [bool] $AutomaticFailoverEnabled
    [string] $CacheNodeType
    [string] $CacheParameterGroupName
    [string[]] $CacheSecurityGroupNames
    [string] $CacheSubnetGroupName
    [bool] $DataTieringEnabled
    [string] $Engine
    [string] $EngineVersion
    [string] $GlobalReplicationGroupId
    [string] $KmsKeyId
    [ElastiCacheReplicationGroupLogDeliveryConfigurationRequest[]] $LogDeliveryConfigurations
    [bool] $MultiAZEnabled
    [ElastiCacheReplicationGroupNodeGroupConfiguration[]] $NodeGroupConfiguration
    [string] $NotificationTopicArn
    [int] $NumCacheClusters
    [int] $NumNodeGroups
    [int] $Port
    [string[]] $PreferredCacheClusterAZs
    [string] $PreferredMaintenanceWindow
    [string] $PrimaryClusterId
    [int] $ReplicasPerNodeGroup
    [string] $ReplicationGroupDescription
    [string] $ReplicationGroupId
    [string[]] $SecurityGroupIds
    [string[]] $SnapshotArns
    [string] $SnapshotName
    [int] $SnapshotRetentionLimit
    [string] $SnapshotWindow
    [string] $SnapshottingClusterId
    [VSTag[]] $Tags
    [bool] $TransitEncryptionEnabled
    [string[]] $UserGroupIds
    [VSJson] $Metadata
    [UpdatePolicy] $UpdatePolicy
    [string] $Condition

    hidden [void] _addAccessors() {
        $this._addBaseAccessors()
        $this | Add-Member -Force -MemberType ScriptProperty -Name AtRestEncryptionEnabled -Value {
            $this.Properties['AtRestEncryptionEnabled']
        } -SecondValue {
            param([ValidateType(([bool], [IntrinsicFunction], [ConditionFunction]))] [object] $value)
            $this.Properties['AtRestEncryptionEnabled'] = $value
        }
        $this | Add-Member -Force -MemberType ScriptProperty -Name AuthToken -Value {
            $this.Properties['AuthToken']
        } -SecondValue {
            param([ValidateType(([string], [int], [IntrinsicFunction], [ConditionFunction]))] [object] $value)
            $this.Properties['AuthToken'] = if ($value -is [int]) {
                $value.ToString()
            }
            else {
                $value
            }
        }
        $this | Add-Member -Force -MemberType ScriptProperty -Name AutoMinorVersionUpgrade -Value {
            $this.Properties['AutoMinorVersionUpgrade']
        } -SecondValue {
            param([ValidateType(([bool], [IntrinsicFunction], [ConditionFunction]))] [object] $value)
            $this.Properties['AutoMinorVersionUpgrade'] = $value
        }
        $this | Add-Member -Force -MemberType ScriptProperty -Name AutomaticFailoverEnabled -Value {
            $this.Properties['AutomaticFailoverEnabled']
        } -SecondValue {
            param([ValidateType(([bool], [IntrinsicFunction], [ConditionFunction]))] [object] $value)
            $this.Properties['AutomaticFailoverEnabled'] = $value
        }
        $this | Add-Member -Force -MemberType ScriptProperty -Name CacheNodeType -Value {
            $this.Properties['CacheNodeType']
        } -SecondValue {
            param([ValidateType(([string], [int], [IntrinsicFunction], [ConditionFunction]))] [object] $value)
            $this.Properties['CacheNodeType'] = if ($value -is [int]) {
                $value.ToString()
            }
            else {
                $value
            }
        }
        $this | Add-Member -Force -MemberType ScriptProperty -Name CacheParameterGroupName -Value {
            $this.Properties['CacheParameterGroupName']
        } -SecondValue {
            param([ValidateType(([string], [int], [IntrinsicFunction], [ConditionFunction]))] [object] $value)
            $this.Properties['CacheParameterGroupName'] = if ($value -is [int]) {
                $value.ToString()
            }
            else {
                $value
            }
        }
        $this | Add-Member -Force -MemberType ScriptProperty -Name CacheSecurityGroupNames -Value {
            $this.Properties['CacheSecurityGroupNames']
        } -SecondValue {
            param([ValidateType(([string], [int], [IntrinsicFunction], [ConditionFunction]))] [object[]] $value)
            $this.Properties['CacheSecurityGroupNames'] = @($value)
        }
        $this | Add-Member -Force -MemberType ScriptProperty -Name CacheSubnetGroupName -Value {
            $this.Properties['CacheSubnetGroupName']
        } -SecondValue {
            param([ValidateType(([string], [int], [IntrinsicFunction], [ConditionFunction]))] [object] $value)
            $this.Properties['CacheSubnetGroupName'] = if ($value -is [int]) {
                $value.ToString()
            }
            else {
                $value
            }
        }
        $this | Add-Member -Force -MemberType ScriptProperty -Name DataTieringEnabled -Value {
            $this.Properties['DataTieringEnabled']
        } -SecondValue {
            param([ValidateType(([bool], [IntrinsicFunction], [ConditionFunction]))] [object] $value)
            $this.Properties['DataTieringEnabled'] = $value
        }
        $this | Add-Member -Force -MemberType ScriptProperty -Name Engine -Value {
            $this.Properties['Engine']
        } -SecondValue {
            param([ValidateType(([string], [int], [IntrinsicFunction], [ConditionFunction]))] [object] $value)
            $this.Properties['Engine'] = if ($value -is [int]) {
                $value.ToString()
            }
            else {
                $value
            }
        }
        $this | Add-Member -Force -MemberType ScriptProperty -Name EngineVersion -Value {
            $this.Properties['EngineVersion']
        } -SecondValue {
            param([ValidateType(([string], [int], [IntrinsicFunction], [ConditionFunction]))] [object] $value)
            $this.Properties['EngineVersion'] = if ($value -is [int]) {
                $value.ToString()
            }
            else {
                $value
            }
        }
        $this | Add-Member -Force -MemberType ScriptProperty -Name GlobalReplicationGroupId -Value {
            $this.Properties['GlobalReplicationGroupId']
        } -SecondValue {
            param([ValidateType(([string], [int], [IntrinsicFunction], [ConditionFunction]))] [object] $value)
            $this.Properties['GlobalReplicationGroupId'] = if ($value -is [int]) {
                $value.ToString()
            }
            else {
                $value
            }
        }
        $this | Add-Member -Force -MemberType ScriptProperty -Name KmsKeyId -Value {
            $this.Properties['KmsKeyId']
        } -SecondValue {
            param([ValidateType(([string], [int], [IntrinsicFunction], [ConditionFunction]))] [object] $value)
            $this.Properties['KmsKeyId'] = if ($value -is [int]) {
                $value.ToString()
            }
            else {
                $value
            }
        }
        $this | Add-Member -Force -MemberType ScriptProperty -Name LogDeliveryConfigurations -Value {
            $this.Properties['LogDeliveryConfigurations']
        } -SecondValue {
            param([ValidateType(([ElastiCacheReplicationGroupLogDeliveryConfigurationRequest], [IntrinsicFunction], [ConditionFunction]))] [object[]] $value)
            $this.Properties['LogDeliveryConfigurations'] = $value
        }
        $this | Add-Member -Force -MemberType ScriptProperty -Name MultiAZEnabled -Value {
            $this.Properties['MultiAZEnabled']
        } -SecondValue {
            param([ValidateType(([bool], [IntrinsicFunction], [ConditionFunction]))] [object] $value)
            $this.Properties['MultiAZEnabled'] = $value
        }
        $this | Add-Member -Force -MemberType ScriptProperty -Name NodeGroupConfiguration -Value {
            $this.Properties['NodeGroupConfiguration']
        } -SecondValue {
            param([ValidateType(([ElastiCacheReplicationGroupNodeGroupConfiguration], [IntrinsicFunction], [ConditionFunction]))] [object[]] $value)
            $this.Properties['NodeGroupConfiguration'] = $value
        }
        $this | Add-Member -Force -MemberType ScriptProperty -Name NotificationTopicArn -Value {
            $this.Properties['NotificationTopicArn']
        } -SecondValue {
            param([ValidateType(([string], [int], [IntrinsicFunction], [ConditionFunction]))] [object] $value)
            $this.Properties['NotificationTopicArn'] = if ($value -is [int]) {
                $value.ToString()
            }
            else {
                $value
            }
        }
        $this | Add-Member -Force -MemberType ScriptProperty -Name NumCacheClusters -Value {
            $this.Properties['NumCacheClusters']
        } -SecondValue {
            param([ValidateType(([string], [int], [IntrinsicFunction], [ConditionFunction]))] [object] $value)
            $this.Properties['NumCacheClusters'] = if ($cast = $value -as [int]) {
                $cast
            }
            else {
                $value
            }
        }
        $this | Add-Member -Force -MemberType ScriptProperty -Name NumNodeGroups -Value {
            $this.Properties['NumNodeGroups']
        } -SecondValue {
            param([ValidateType(([string], [int], [IntrinsicFunction], [ConditionFunction]))] [object] $value)
            $this.Properties['NumNodeGroups'] = if ($cast = $value -as [int]) {
                $cast
            }
            else {
                $value
            }
        }
        $this | Add-Member -Force -MemberType ScriptProperty -Name Port -Value {
            $this.Properties['Port']
        } -SecondValue {
            param([ValidateType(([string], [int], [IntrinsicFunction], [ConditionFunction]))] [object] $value)
            $this.Properties['Port'] = if ($cast = $value -as [int]) {
                $cast
            }
            else {
                $value
            }
        }
        $this | Add-Member -Force -MemberType ScriptProperty -Name PreferredCacheClusterAZs -Value {
            $this.Properties['PreferredCacheClusterAZs']
        } -SecondValue {
            param([ValidateType(([string], [int], [IntrinsicFunction], [ConditionFunction]))] [object[]] $value)
            $this.Properties['PreferredCacheClusterAZs'] = @($value)
        }
        $this | Add-Member -Force -MemberType ScriptProperty -Name PreferredMaintenanceWindow -Value {
            $this.Properties['PreferredMaintenanceWindow']
        } -SecondValue {
            param([ValidateType(([string], [int], [IntrinsicFunction], [ConditionFunction]))] [object] $value)
            $this.Properties['PreferredMaintenanceWindow'] = if ($value -is [int]) {
                $value.ToString()
            }
            else {
                $value
            }
        }
        $this | Add-Member -Force -MemberType ScriptProperty -Name PrimaryClusterId -Value {
            $this.Properties['PrimaryClusterId']
        } -SecondValue {
            param([ValidateType(([string], [int], [IntrinsicFunction], [ConditionFunction]))] [object] $value)
            $this.Properties['PrimaryClusterId'] = if ($value -is [int]) {
                $value.ToString()
            }
            else {
                $value
            }
        }
        $this | Add-Member -Force -MemberType ScriptProperty -Name ReplicasPerNodeGroup -Value {
            $this.Properties['ReplicasPerNodeGroup']
        } -SecondValue {
            param([ValidateType(([string], [int], [IntrinsicFunction], [ConditionFunction]))] [object] $value)
            $this.Properties['ReplicasPerNodeGroup'] = if ($cast = $value -as [int]) {
                $cast
            }
            else {
                $value
            }
        }
        $this | Add-Member -Force -MemberType ScriptProperty -Name ReplicationGroupDescription -Value {
            $this.Properties['ReplicationGroupDescription']
        } -SecondValue {
            param([ValidateType(([string], [int], [IntrinsicFunction], [ConditionFunction]))] [object] $value)
            $this.Properties['ReplicationGroupDescription'] = if ($value -is [int]) {
                $value.ToString()
            }
            else {
                $value
            }
        }
        $this | Add-Member -Force -MemberType ScriptProperty -Name ReplicationGroupId -Value {
            $this.Properties['ReplicationGroupId']
        } -SecondValue {
            param([ValidateType(([string], [int], [IntrinsicFunction], [ConditionFunction]))] [object] $value)
            $this.Properties['ReplicationGroupId'] = if ($value -is [int]) {
                $value.ToString()
            }
            else {
                $value
            }
        }
        $this | Add-Member -Force -MemberType ScriptProperty -Name SecurityGroupIds -Value {
            $this.Properties['SecurityGroupIds']
        } -SecondValue {
            param([ValidateType(([string], [int], [IntrinsicFunction], [ConditionFunction]))] [object[]] $value)
            $this.Properties['SecurityGroupIds'] = @($value)
        }
        $this | Add-Member -Force -MemberType ScriptProperty -Name SnapshotArns -Value {
            $this.Properties['SnapshotArns']
        } -SecondValue {
            param([ValidateType(([string], [int], [IntrinsicFunction], [ConditionFunction]))] [object[]] $value)
            $this.Properties['SnapshotArns'] = @($value)
        }
        $this | Add-Member -Force -MemberType ScriptProperty -Name SnapshotName -Value {
            $this.Properties['SnapshotName']
        } -SecondValue {
            param([ValidateType(([string], [int], [IntrinsicFunction], [ConditionFunction]))] [object] $value)
            $this.Properties['SnapshotName'] = if ($value -is [int]) {
                $value.ToString()
            }
            else {
                $value
            }
        }
        $this | Add-Member -Force -MemberType ScriptProperty -Name SnapshotRetentionLimit -Value {
            $this.Properties['SnapshotRetentionLimit']
        } -SecondValue {
            param([ValidateType(([string], [int], [IntrinsicFunction], [ConditionFunction]))] [object] $value)
            $this.Properties['SnapshotRetentionLimit'] = if ($cast = $value -as [int]) {
                $cast
            }
            else {
                $value
            }
        }
        $this | Add-Member -Force -MemberType ScriptProperty -Name SnapshotWindow -Value {
            $this.Properties['SnapshotWindow']
        } -SecondValue {
            param([ValidateType(([string], [int], [IntrinsicFunction], [ConditionFunction]))] [object] $value)
            $this.Properties['SnapshotWindow'] = if ($value -is [int]) {
                $value.ToString()
            }
            else {
                $value
            }
        }
        $this | Add-Member -Force -MemberType ScriptProperty -Name SnapshottingClusterId -Value {
            $this.Properties['SnapshottingClusterId']
        } -SecondValue {
            param([ValidateType(([string], [int], [IntrinsicFunction], [ConditionFunction]))] [object] $value)
            $this.Properties['SnapshottingClusterId'] = if ($value -is [int]) {
                $value.ToString()
            }
            else {
                $value
            }
        }
        $this | Add-Member -Force -MemberType ScriptProperty -Name Tags -Value {
            $this.Properties['Tags']
        } -SecondValue {
            param([TransformTag()] [ValidateType(([IDictionary], [psobject], [VSTag]))] [object] $value)
            $this.Properties['Tags'] = [VSTag]::TransformTag($value)
        }
        $this | Add-Member -Force -MemberType ScriptProperty -Name TransitEncryptionEnabled -Value {
            $this.Properties['TransitEncryptionEnabled']
        } -SecondValue {
            param([ValidateType(([bool], [IntrinsicFunction], [ConditionFunction]))] [object] $value)
            $this.Properties['TransitEncryptionEnabled'] = $value
        }
        $this | Add-Member -Force -MemberType ScriptProperty -Name UserGroupIds -Value {
            $this.Properties['UserGroupIds']
        } -SecondValue {
            param([ValidateType(([string], [int], [IntrinsicFunction], [ConditionFunction]))] [object[]] $value)
            $this.Properties['UserGroupIds'] = @($value)
        }
        $this | Add-Member -Force -MemberType ScriptProperty -Name Condition -Value {
            $this._condition
        } -SecondValue {
            param(
                [ValidateType(([string], [IntrinsicFunction], [ConditionFunction]))] [object]
                $value
            )
            $this._condition = $value
        }
    }

    ElastiCacheReplicationGroup() : base() {}
    ElastiCacheReplicationGroup([IDictionary] $props) : base($props) {}
    ElastiCacheReplicationGroup([psobject] $props) : base($props) {}
}

Write-Verbose "Importing class 'ElastiCacheParameterGroup'"

class ElastiCacheParameterGroup : VSResource {
    hidden [string] $_vsFunctionName = 'New-VSElastiCacheParameterGroup'
    hidden [string] $_awsDocumentation = 'http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticache-parameter-group.html'

    hidden [object] $_condition

    [string] $Type = 'AWS::ElastiCache::ParameterGroup'
    [string] $CacheParameterGroupFamily
    [string] $Description
    [string] $Properties
    [VSTag[]] $Tags
    [VSJson] $Metadata
    [UpdatePolicy] $UpdatePolicy
    [string] $Condition

    hidden [void] _addAccessors() {
        $this._addBaseAccessors()
        $this | Add-Member -Force -MemberType ScriptProperty -Name CacheParameterGroupFamily -Value {
            $this.Properties['CacheParameterGroupFamily']
        } -SecondValue {
            param([ValidateType(([string], [int], [IntrinsicFunction], [ConditionFunction]))] [object] $value)
            $this.Properties['CacheParameterGroupFamily'] = if ($value -is [int]) {
                $value.ToString()
            }
            else {
                $value
            }
        }
        $this | Add-Member -Force -MemberType ScriptProperty -Name Description -Value {
            $this.Properties['Description']
        } -SecondValue {
            param([ValidateType(([string], [int], [IntrinsicFunction], [ConditionFunction]))] [object] $value)
            $this.Properties['Description'] = if ($value -is [int]) {
                $value.ToString()
            }
            else {
                $value
            }
        }
        $this | Add-Member -Force -MemberType ScriptProperty -Name Properties -Value {
            $this.Properties['Properties']
        } -SecondValue {
            param([ValidateType(([string], [int], [IntrinsicFunction], [ConditionFunction]))] [object] $value)
            $this.Properties['Properties'] = $value
        }
        $this | Add-Member -Force -MemberType ScriptProperty -Name Tags -Value {
            $this.Properties['Tags']
        } -SecondValue {
            param([TransformTag()] [ValidateType(([IDictionary], [psobject], [VSTag]))] [object] $value)
            $this.Properties['Tags'] = [VSTag]::TransformTag($value)
        }
        $this | Add-Member -Force -MemberType ScriptProperty -Name Condition -Value {
            $this._condition
        } -SecondValue {
            param(
                [ValidateType(([string], [IntrinsicFunction], [ConditionFunction]))] [object]
                $value
            )
            $this._condition = $value
        }
    }

    ElastiCacheParameterGroup() : base() {}
    ElastiCacheParameterGroup([IDictionary] $props) : base($props) {}
    ElastiCacheParameterGroup([psobject] $props) : base($props) {}
}

Write-Verbose "Importing class 'ElastiCacheGlobalReplicationGroup'"

class ElastiCacheGlobalReplicationGroup : VSResource {
    hidden [string] $_vsFunctionName = 'New-VSElastiCacheGlobalReplicationGroup'
    hidden [string] $_awsDocumentation = 'http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-elasticache-globalreplicationgroup.html'

    hidden [string[]] $_attributes = @('GlobalReplicationGroupId','Status')
    hidden [object] $_condition

    [string] $Type = 'AWS::ElastiCache::GlobalReplicationGroup'
    [string] $GlobalReplicationGroupIdSuffix
    [bool] $AutomaticFailoverEnabled
    [string] $CacheNodeType
    [string] $EngineVersion
    [string] $CacheParameterGroupName
    [int] $GlobalNodeGroupCount
    [string] $GlobalReplicationGroupDescription
    [ElastiCacheGlobalReplicationGroupGlobalReplicationGroupMember[]] $Members
    [ElastiCacheGlobalReplicationGroupRegionalConfiguration[]] $RegionalConfigurations
    [VSJson] $Metadata
    [UpdatePolicy] $UpdatePolicy
    [string] $Condition

    hidden [void] _addAccessors() {
        $this._addBaseAccessors()
        $this | Add-Member -Force -MemberType ScriptProperty -Name GlobalReplicationGroupIdSuffix -Value {
            $this.Properties['GlobalReplicationGroupIdSuffix']
        } -SecondValue {
            param([ValidateType(([string], [int], [IntrinsicFunction], [ConditionFunction]))] [object] $value)
            $this.Properties['GlobalReplicationGroupIdSuffix'] = if ($value -is [int]) {
                $value.ToString()
            }
            else {
                $value
            }
        }
        $this | Add-Member -Force -MemberType ScriptProperty -Name AutomaticFailoverEnabled -Value {
            $this.Properties['AutomaticFailoverEnabled']
        } -SecondValue {
            param([ValidateType(([bool], [IntrinsicFunction], [ConditionFunction]))] [object] $value)
            $this.Properties['AutomaticFailoverEnabled'] = $value
        }
        $this | Add-Member -Force -MemberType ScriptProperty -Name CacheNodeType -Value {
            $this.Properties['CacheNodeType']
        } -SecondValue {
            param([ValidateType(([string], [int], [IntrinsicFunction], [ConditionFunction]))] [object] $value)
            $this.Properties['CacheNodeType'] = if ($value -is [int]) {
                $value.ToString()
            }
            else {
                $value
            }
        }
        $this | Add-Member -Force -MemberType ScriptProperty -Name EngineVersion -Value {
            $this.Properties['EngineVersion']
        } -SecondValue {
            param([ValidateType(([string], [int], [IntrinsicFunction], [ConditionFunction]))] [object] $value)
            $this.Properties['EngineVersion'] = if ($value -is [int]) {
                $value.ToString()
            }
            else {
                $value
            }
        }
        $this | Add-Member -Force -MemberType ScriptProperty -Name CacheParameterGroupName -Value {
            $this.Properties['CacheParameterGroupName']
        } -SecondValue {
            param([ValidateType(([string], [int], [IntrinsicFunction], [ConditionFunction]))] [object] $value)
            $this.Properties['CacheParameterGroupName'] = if ($value -is [int]) {
                $value.ToString()
            }
            else {
                $value
            }
        }
        $this | Add-Member -Force -MemberType ScriptProperty -Name GlobalNodeGroupCount -Value {
            $this.Properties['GlobalNodeGroupCount']
        } -SecondValue {
            param([ValidateType(([string], [int], [IntrinsicFunction], [ConditionFunction]))] [object] $value)
            $this.Properties['GlobalNodeGroupCount'] = if ($cast = $value -as [int]) {
                $cast
            }
            else {
                $value
            }
        }
        $this | Add-Member -Force -MemberType ScriptProperty -Name GlobalReplicationGroupDescription -Value {
            $this.Properties['GlobalReplicationGroupDescription']
        } -SecondValue {
            param([ValidateType(([string], [int], [IntrinsicFunction], [ConditionFunction]))] [object] $value)
            $this.Properties['GlobalReplicationGroupDescription'] = if ($value -is [int]) {
                $value.ToString()
            }
            else {
                $value
            }
        }
        $this | Add-Member -Force -MemberType ScriptProperty -Name Members -Value {
            $this.Properties['Members']
        } -SecondValue {
            param([ValidateType(([ElastiCacheGlobalReplicationGroupGlobalReplicationGroupMember], [IntrinsicFunction], [ConditionFunction]))] [object[]] $value)
            $this.Properties['Members'] = $value
        }
        $this | Add-Member -Force -MemberType ScriptProperty -Name RegionalConfigurations -Value {
            $this.Properties['RegionalConfigurations']
        } -SecondValue {
            param([ValidateType(([ElastiCacheGlobalReplicationGroupRegionalConfiguration], [IntrinsicFunction], [ConditionFunction]))] [object[]] $value)
            $this.Properties['RegionalConfigurations'] = $value
        }
        $this | Add-Member -Force -MemberType ScriptProperty -Name Condition -Value {
            $this._condition
        } -SecondValue {
            param(
                [ValidateType(([string], [IntrinsicFunction], [ConditionFunction]))] [object]
                $value
            )
            $this._condition = $value
        }
    }

    ElastiCacheGlobalReplicationGroup() : base() {}
    ElastiCacheGlobalReplicationGroup([IDictionary] $props) : base($props) {}
    ElastiCacheGlobalReplicationGroup([psobject] $props) : base($props) {}
}

Write-Verbose "Importing class 'ElastiCacheCacheCluster'"

class ElastiCacheCacheCluster : VSResource {
    hidden [string] $_vsFunctionName = 'New-VSElastiCacheCacheCluster'
    hidden [string] $_awsDocumentation = 'http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticache-cache-cluster.html'

    hidden [string[]] $_attributes = @('ConfigurationEndpoint.Address','ConfigurationEndpoint.Port','RedisEndpoint.Address','RedisEndpoint.Port')
    hidden [object] $_condition

    [string] $Type = 'AWS::ElastiCache::CacheCluster'
    [string] $AZMode
    [bool] $AutoMinorVersionUpgrade
    [string] $CacheNodeType
    [string] $CacheParameterGroupName
    [string[]] $CacheSecurityGroupNames
    [string] $CacheSubnetGroupName
    [string] $ClusterName
    [string] $Engine
    [string] $EngineVersion
    [ElastiCacheCacheClusterLogDeliveryConfigurationRequest[]] $LogDeliveryConfigurations
    [string] $NotificationTopicArn
    [int] $NumCacheNodes
    [int] $Port
    [string] $PreferredAvailabilityZone
    [string[]] $PreferredAvailabilityZones
    [string] $PreferredMaintenanceWindow
    [string[]] $SnapshotArns
    [string] $SnapshotName
    [int] $SnapshotRetentionLimit
    [string] $SnapshotWindow
    [VSTag[]] $Tags
    [string[]] $VpcSecurityGroupIds
    [VSJson] $Metadata
    [UpdatePolicy] $UpdatePolicy
    [string] $Condition

    hidden [void] _addAccessors() {
        $this._addBaseAccessors()
        $this | Add-Member -Force -MemberType ScriptProperty -Name AZMode -Value {
            $this.Properties['AZMode']
        } -SecondValue {
            param([ValidateType(([string], [int], [IntrinsicFunction], [ConditionFunction]))] [object] $value)
            $this.Properties['AZMode'] = if ($value -is [int]) {
                $value.ToString()
            }
            else {
                $value
            }
        }
        $this | Add-Member -Force -MemberType ScriptProperty -Name AutoMinorVersionUpgrade -Value {
            $this.Properties['AutoMinorVersionUpgrade']
        } -SecondValue {
            param([ValidateType(([bool], [IntrinsicFunction], [ConditionFunction]))] [object] $value)
            $this.Properties['AutoMinorVersionUpgrade'] = $value
        }
        $this | Add-Member -Force -MemberType ScriptProperty -Name CacheNodeType -Value {
            $this.Properties['CacheNodeType']
        } -SecondValue {
            param([ValidateType(([string], [int], [IntrinsicFunction], [ConditionFunction]))] [object] $value)
            $this.Properties['CacheNodeType'] = if ($value -is [int]) {
                $value.ToString()
            }
            else {
                $value
            }
        }
        $this | Add-Member -Force -MemberType ScriptProperty -Name CacheParameterGroupName -Value {
            $this.Properties['CacheParameterGroupName']
        } -SecondValue {
            param([ValidateType(([string], [int], [IntrinsicFunction], [ConditionFunction]))] [object] $value)
            $this.Properties['CacheParameterGroupName'] = if ($value -is [int]) {
                $value.ToString()
            }
            else {
                $value
            }
        }
        $this | Add-Member -Force -MemberType ScriptProperty -Name CacheSecurityGroupNames -Value {
            $this.Properties['CacheSecurityGroupNames']
        } -SecondValue {
            param([ValidateType(([string], [int], [IntrinsicFunction], [ConditionFunction]))] [object[]] $value)
            $this.Properties['CacheSecurityGroupNames'] = @($value)
        }
        $this | Add-Member -Force -MemberType ScriptProperty -Name CacheSubnetGroupName -Value {
            $this.Properties['CacheSubnetGroupName']
        } -SecondValue {
            param([ValidateType(([string], [int], [IntrinsicFunction], [ConditionFunction]))] [object] $value)
            $this.Properties['CacheSubnetGroupName'] = if ($value -is [int]) {
                $value.ToString()
            }
            else {
                $value
            }
        }
        $this | Add-Member -Force -MemberType ScriptProperty -Name ClusterName -Value {
            $this.Properties['ClusterName']
        } -SecondValue {
            param([ValidateType(([string], [int], [IntrinsicFunction], [ConditionFunction]))] [object] $value)
            $this.Properties['ClusterName'] = if ($value -is [int]) {
                $value.ToString()
            }
            else {
                $value
            }
        }
        $this | Add-Member -Force -MemberType ScriptProperty -Name Engine -Value {
            $this.Properties['Engine']
        } -SecondValue {
            param([ValidateType(([string], [int], [IntrinsicFunction], [ConditionFunction]))] [object] $value)
            $this.Properties['Engine'] = if ($value -is [int]) {
                $value.ToString()
            }
            else {
                $value
            }
        }
        $this | Add-Member -Force -MemberType ScriptProperty -Name EngineVersion -Value {
            $this.Properties['EngineVersion']
        } -SecondValue {
            param([ValidateType(([string], [int], [IntrinsicFunction], [ConditionFunction]))] [object] $value)
            $this.Properties['EngineVersion'] = if ($value -is [int]) {
                $value.ToString()
            }
            else {
                $value
            }
        }
        $this | Add-Member -Force -MemberType ScriptProperty -Name LogDeliveryConfigurations -Value {
            $this.Properties['LogDeliveryConfigurations']
        } -SecondValue {
            param([ValidateType(([ElastiCacheCacheClusterLogDeliveryConfigurationRequest], [IntrinsicFunction], [ConditionFunction]))] [object[]] $value)
            $this.Properties['LogDeliveryConfigurations'] = $value
        }
        $this | Add-Member -Force -MemberType ScriptProperty -Name NotificationTopicArn -Value {
            $this.Properties['NotificationTopicArn']
        } -SecondValue {
            param([ValidateType(([string], [int], [IntrinsicFunction], [ConditionFunction]))] [object] $value)
            $this.Properties['NotificationTopicArn'] = if ($value -is [int]) {
                $value.ToString()
            }
            else {
                $value
            }
        }
        $this | Add-Member -Force -MemberType ScriptProperty -Name NumCacheNodes -Value {
            $this.Properties['NumCacheNodes']
        } -SecondValue {
            param([ValidateType(([string], [int], [IntrinsicFunction], [ConditionFunction]))] [object] $value)
            $this.Properties['NumCacheNodes'] = if ($cast = $value -as [int]) {
                $cast
            }
            else {
                $value
            }
        }
        $this | Add-Member -Force -MemberType ScriptProperty -Name Port -Value {
            $this.Properties['Port']
        } -SecondValue {
            param([ValidateType(([string], [int], [IntrinsicFunction], [ConditionFunction]))] [object] $value)
            $this.Properties['Port'] = if ($cast = $value -as [int]) {
                $cast
            }
            else {
                $value
            }
        }
        $this | Add-Member -Force -MemberType ScriptProperty -Name PreferredAvailabilityZone -Value {
            $this.Properties['PreferredAvailabilityZone']
        } -SecondValue {
            param([ValidateType(([string], [int], [IntrinsicFunction], [ConditionFunction]))] [object] $value)
            $this.Properties['PreferredAvailabilityZone'] = if ($value -is [int]) {
                $value.ToString()
            }
            else {
                $value
            }
        }
        $this | Add-Member -Force -MemberType ScriptProperty -Name PreferredAvailabilityZones -Value {
            $this.Properties['PreferredAvailabilityZones']
        } -SecondValue {
            param([ValidateType(([string], [int], [IntrinsicFunction], [ConditionFunction]))] [object[]] $value)
            $this.Properties['PreferredAvailabilityZones'] = @($value)
        }
        $this | Add-Member -Force -MemberType ScriptProperty -Name PreferredMaintenanceWindow -Value {
            $this.Properties['PreferredMaintenanceWindow']
        } -SecondValue {
            param([ValidateType(([string], [int], [IntrinsicFunction], [ConditionFunction]))] [object] $value)
            $this.Properties['PreferredMaintenanceWindow'] = if ($value -is [int]) {
                $value.ToString()
            }
            else {
                $value
            }
        }
        $this | Add-Member -Force -MemberType ScriptProperty -Name SnapshotArns -Value {
            $this.Properties['SnapshotArns']
        } -SecondValue {
            param([ValidateType(([string], [int], [IntrinsicFunction], [ConditionFunction]))] [object[]] $value)
            $this.Properties['SnapshotArns'] = @($value)
        }
        $this | Add-Member -Force -MemberType ScriptProperty -Name SnapshotName -Value {
            $this.Properties['SnapshotName']
        } -SecondValue {
            param([ValidateType(([string], [int], [IntrinsicFunction], [ConditionFunction]))] [object] $value)
            $this.Properties['SnapshotName'] = if ($value -is [int]) {
                $value.ToString()
            }
            else {
                $value
            }
        }
        $this | Add-Member -Force -MemberType ScriptProperty -Name SnapshotRetentionLimit -Value {
            $this.Properties['SnapshotRetentionLimit']
        } -SecondValue {
            param([ValidateType(([string], [int], [IntrinsicFunction], [ConditionFunction]))] [object] $value)
            $this.Properties['SnapshotRetentionLimit'] = if ($cast = $value -as [int]) {
                $cast
            }
            else {
                $value
            }
        }
        $this | Add-Member -Force -MemberType ScriptProperty -Name SnapshotWindow -Value {
            $this.Properties['SnapshotWindow']
        } -SecondValue {
            param([ValidateType(([string], [int], [IntrinsicFunction], [ConditionFunction]))] [object] $value)
            $this.Properties['SnapshotWindow'] = if ($value -is [int]) {
                $value.ToString()
            }
            else {
                $value
            }
        }
        $this | Add-Member -Force -MemberType ScriptProperty -Name Tags -Value {
            $this.Properties['Tags']
        } -SecondValue {
            param([TransformTag()] [ValidateType(([IDictionary], [psobject], [VSTag]))] [object] $value)
            $this.Properties['Tags'] = [VSTag]::TransformTag($value)
        }
        $this | Add-Member -Force -MemberType ScriptProperty -Name VpcSecurityGroupIds -Value {
            $this.Properties['VpcSecurityGroupIds']
        } -SecondValue {
            param([ValidateType(([string], [int], [IntrinsicFunction], [ConditionFunction]))] [object[]] $value)
            $this.Properties['VpcSecurityGroupIds'] = @($value)
        }
        $this | Add-Member -Force -MemberType ScriptProperty -Name Condition -Value {
            $this._condition
        } -SecondValue {
            param(
                [ValidateType(([string], [IntrinsicFunction], [ConditionFunction]))] [object]
                $value
            )
            $this._condition = $value
        }
    }

    ElastiCacheCacheCluster() : base() {}
    ElastiCacheCacheCluster([IDictionary] $props) : base($props) {}
    ElastiCacheCacheCluster([psobject] $props) : base($props) {}
}

Write-Verbose "Importing class 'ElastiCacheUser'"

class ElastiCacheUser : VSResource {
    hidden [string] $_vsFunctionName = 'New-VSElastiCacheUser'
    hidden [string] $_awsDocumentation = 'http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-elasticache-user.html'

    hidden [string[]] $_attributes = @('Status','Arn')
    hidden [object] $_condition

    [string] $Type = 'AWS::ElastiCache::User'
    [string] $UserId
    [string] $UserName
    [string] $Engine
    [string] $AccessString
    [bool] $NoPasswordRequired
    [string[]] $Passwords
    [VSJson] $Metadata
    [UpdatePolicy] $UpdatePolicy
    [string] $Condition

    hidden [void] _addAccessors() {
        $this._addBaseAccessors()
        $this | Add-Member -Force -MemberType ScriptProperty -Name UserId -Value {
            $this.Properties['UserId']
        } -SecondValue {
            param([ValidateType(([string], [int], [IntrinsicFunction], [ConditionFunction]))] [object] $value)
            $this.Properties['UserId'] = if ($value -is [int]) {
                $value.ToString()
            }
            else {
                $value
            }
        }
        $this | Add-Member -Force -MemberType ScriptProperty -Name UserName -Value {
            $this.Properties['UserName']
        } -SecondValue {
            param([ValidateType(([string], [int], [IntrinsicFunction], [ConditionFunction]))] [object] $value)
            $this.Properties['UserName'] = if ($value -is [int]) {
                $value.ToString()
            }
            else {
                $value
            }
        }
        $this | Add-Member -Force -MemberType ScriptProperty -Name Engine -Value {
            $this.Properties['Engine']
        } -SecondValue {
            param([ValidateType(([string], [int], [IntrinsicFunction], [ConditionFunction]))] [object] $value)
            $this.Properties['Engine'] = if ($value -is [int]) {
                $value.ToString()
            }
            else {
                $value
            }
        }
        $this | Add-Member -Force -MemberType ScriptProperty -Name AccessString -Value {
            $this.Properties['AccessString']
        } -SecondValue {
            param([ValidateType(([string], [int], [IntrinsicFunction], [ConditionFunction]))] [object] $value)
            $this.Properties['AccessString'] = if ($value -is [int]) {
                $value.ToString()
            }
            else {
                $value
            }
        }
        $this | Add-Member -Force -MemberType ScriptProperty -Name NoPasswordRequired -Value {
            $this.Properties['NoPasswordRequired']
        } -SecondValue {
            param([ValidateType(([bool], [IntrinsicFunction], [ConditionFunction]))] [object] $value)
            $this.Properties['NoPasswordRequired'] = $value
        }
        $this | Add-Member -Force -MemberType ScriptProperty -Name Passwords -Value {
            $this.Properties['Passwords']
        } -SecondValue {
            param([ValidateType(([string], [int], [IntrinsicFunction], [ConditionFunction]))] [object[]] $value)
            $this.Properties['Passwords'] = @($value)
        }
        $this | Add-Member -Force -MemberType ScriptProperty -Name Condition -Value {
            $this._condition
        } -SecondValue {
            param(
                [ValidateType(([string], [IntrinsicFunction], [ConditionFunction]))] [object]
                $value
            )
            $this._condition = $value
        }
    }

    ElastiCacheUser() : base() {}
    ElastiCacheUser([IDictionary] $props) : base($props) {}
    ElastiCacheUser([psobject] $props) : base($props) {}
}

Write-Verbose "Importing class 'ElastiCacheSecurityGroup'"

class ElastiCacheSecurityGroup : VSResource {
    hidden [string] $_vsFunctionName = 'New-VSElastiCacheSecurityGroup'
    hidden [string] $_awsDocumentation = 'http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticache-security-group.html'

    hidden [object] $_condition

    [string] $Type = 'AWS::ElastiCache::SecurityGroup'
    [string] $Description
    [VSTag[]] $Tags
    [VSJson] $Metadata
    [UpdatePolicy] $UpdatePolicy
    [string] $Condition

    hidden [void] _addAccessors() {
        $this._addBaseAccessors()
        $this | Add-Member -Force -MemberType ScriptProperty -Name Description -Value {
            $this.Properties['Description']
        } -SecondValue {
            param([ValidateType(([string], [int], [IntrinsicFunction], [ConditionFunction]))] [object] $value)
            $this.Properties['Description'] = if ($value -is [int]) {
                $value.ToString()
            }
            else {
                $value
            }
        }
        $this | Add-Member -Force -MemberType ScriptProperty -Name Tags -Value {
            $this.Properties['Tags']
        } -SecondValue {
            param([TransformTag()] [ValidateType(([IDictionary], [psobject], [VSTag]))] [object] $value)
            $this.Properties['Tags'] = [VSTag]::TransformTag($value)
        }
        $this | Add-Member -Force -MemberType ScriptProperty -Name Condition -Value {
            $this._condition
        } -SecondValue {
            param(
                [ValidateType(([string], [IntrinsicFunction], [ConditionFunction]))] [object]
                $value
            )
            $this._condition = $value
        }
    }

    ElastiCacheSecurityGroup() : base() {}
    ElastiCacheSecurityGroup([IDictionary] $props) : base($props) {}
    ElastiCacheSecurityGroup([psobject] $props) : base($props) {}
}

Write-Verbose "Importing class 'ElastiCacheSecurityGroupIngress'"

class ElastiCacheSecurityGroupIngress : VSResource {
    hidden [string] $_vsFunctionName = 'New-VSElastiCacheSecurityGroupIngress'
    hidden [string] $_awsDocumentation = 'http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticache-security-group-ingress.html'

    hidden [object] $_condition

    [string] $Type = 'AWS::ElastiCache::SecurityGroupIngress'
    [string] $CacheSecurityGroupName
    [string] $EC2SecurityGroupName
    [string] $EC2SecurityGroupOwnerId
    [VSJson] $Metadata
    [UpdatePolicy] $UpdatePolicy
    [string] $Condition

    hidden [void] _addAccessors() {
        $this._addBaseAccessors()
        $this | Add-Member -Force -MemberType ScriptProperty -Name CacheSecurityGroupName -Value {
            $this.Properties['CacheSecurityGroupName']
        } -SecondValue {
            param([ValidateType(([string], [int], [IntrinsicFunction], [ConditionFunction]))] [object] $value)
            $this.Properties['CacheSecurityGroupName'] = if ($value -is [int]) {
                $value.ToString()
            }
            else {
                $value
            }
        }
        $this | Add-Member -Force -MemberType ScriptProperty -Name EC2SecurityGroupName -Value {
            $this.Properties['EC2SecurityGroupName']
        } -SecondValue {
            param([ValidateType(([string], [int], [IntrinsicFunction], [ConditionFunction]))] [object] $value)
            $this.Properties['EC2SecurityGroupName'] = if ($value -is [int]) {
                $value.ToString()
            }
            else {
                $value
            }
        }
        $this | Add-Member -Force -MemberType ScriptProperty -Name EC2SecurityGroupOwnerId -Value {
            $this.Properties['EC2SecurityGroupOwnerId']
        } -SecondValue {
            param([ValidateType(([string], [int], [IntrinsicFunction], [ConditionFunction]))] [object] $value)
            $this.Properties['EC2SecurityGroupOwnerId'] = if ($value -is [int]) {
                $value.ToString()
            }
            else {
                $value
            }
        }
        $this | Add-Member -Force -MemberType ScriptProperty -Name Condition -Value {
            $this._condition
        } -SecondValue {
            param(
                [ValidateType(([string], [IntrinsicFunction], [ConditionFunction]))] [object]
                $value
            )
            $this._condition = $value
        }
    }

    ElastiCacheSecurityGroupIngress() : base() {}
    ElastiCacheSecurityGroupIngress([IDictionary] $props) : base($props) {}
    ElastiCacheSecurityGroupIngress([psobject] $props) : base($props) {}
}