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 '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 'ElastiCacheUserAuthentication'"

class ElastiCacheUserAuthentication : VSResourceProperty {
    hidden [string] $_vsFunctionName = 'Add-VSElastiCacheUserAuthentication'
    hidden [string] $_awsDocumentation = 'http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticache-user-authentication.html'

    hidden [object] $_type
    hidden [object] $_passwordCount

    [string] $Type
    [int] $PasswordCount

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

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

Write-Verbose "Importing class 'ElastiCacheUserGroupUserGroupPendingChanges'"

class ElastiCacheUserGroupUserGroupPendingChanges : VSResourceProperty {
    hidden [string] $_vsFunctionName = 'Add-VSElastiCacheUserGroupUserGroupPendingChanges'
    hidden [string] $_awsDocumentation = 'http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticache-usergroup-usergrouppendingchanges.html'

    hidden [object] $_userIdsToAdd
    hidden [object] $_userIdsToRemove

    [string[]] $UserIdsToAdd
    [string[]] $UserIdsToRemove

    hidden [void] _addAccessors() {
        $this | Add-Member -Force -MemberType ScriptProperty -Name UserIdsToAdd -Value {
            $this._userIdsToAdd
        } -SecondValue {
            param([ValidateType(([string], [int], [IntrinsicFunction], [ConditionFunction]))] [object[]] $value)
            $this._userIdsToAdd = @($value)
        }
        $this | Add-Member -Force -MemberType ScriptProperty -Name UserIdsToRemove -Value {
            $this._userIdsToRemove
        } -SecondValue {
            param([ValidateType(([string], [int], [IntrinsicFunction], [ConditionFunction]))] [object[]] $value)
            $this._userIdsToRemove = @($value)
        }
    }

    ElastiCacheUserGroupUserGroupPendingChanges() : base() {}
    ElastiCacheUserGroupUserGroupPendingChanges([IDictionary] $props) : base($props) {}
    ElastiCacheUserGroupUserGroupPendingChanges([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
    [string[]] $UserGroupIds
    [ElastiCacheUserAuthentication] $Authentication
    [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 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 Authentication -Value {
            $this.Properties['Authentication']
        } -SecondValue {
            param([ValidateType(([ElastiCacheUserAuthentication], [string], [IntrinsicFunction], [ConditionFunction]))] [object] $value)
            $this.Properties['Authentication'] = $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 '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
    [string[]] $ReplicationGroupIds
    [ElastiCacheUserGroupUserGroupPendingChanges] $PendingChanges
    [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 ReplicationGroupIds -Value {
            $this.Properties['ReplicationGroupIds']
        } -SecondValue {
            param([ValidateType(([string], [int], [IntrinsicFunction], [ConditionFunction]))] [object[]] $value)
            $this.Properties['ReplicationGroupIds'] = @($value)
        }
        $this | Add-Member -Force -MemberType ScriptProperty -Name PendingChanges -Value {
            $this.Properties['PendingChanges']
        } -SecondValue {
            param([ValidateType(([ElastiCacheUserGroupUserGroupPendingChanges], [string], [IntrinsicFunction], [ConditionFunction]))] [object] $value)
            $this.Properties['PendingChanges'] = $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 '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
    [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 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 '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
    [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 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 '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) {}
}

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
    [string] $Engine
    [string] $EngineVersion
    [string] $GlobalReplicationGroupId
    [string] $KmsKeyId
    [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 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 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
    [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 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 '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
    [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 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) {}
}