From 7636ea8c044800acc38ea77e13e727f2cf03a94d Mon Sep 17 00:00:00 2001 From: zipkid Date: Fri, 15 Dec 2023 13:13:40 +0000 Subject: [PATCH] Updates from spec version 151.0.0 --- troposphere/accessanalyzer.py | 23 +- troposphere/apigateway.py | 8 +- troposphere/applicationautoscaling.py | 58 ++++- troposphere/apprunner.py | 1 + troposphere/appstream.py | 1 + troposphere/autoscaling.py | 16 +- troposphere/awslambda.py | 19 +- troposphere/backup.py | 72 ++++++ troposphere/billingconductor.py | 1 + troposphere/cleanrooms.py | 43 ++++ troposphere/cloud9.py | 2 +- troposphere/cloudfront.py | 25 ++ troposphere/cloudtrail.py | 25 +- troposphere/codebuild.py | 14 +- troposphere/codedeploy.py | 25 ++ troposphere/codepipeline.py | 58 +++++ troposphere/codestarconnections.py | 33 +++ troposphere/config.py | 24 ++ troposphere/connect.py | 3 +- troposphere/controltower.py | 28 ++- troposphere/dlm.py | 53 ++++ troposphere/dms.py | 335 +++++++++++++++++--------- troposphere/docdb.py | 19 ++ troposphere/ec2.py | 80 ++++-- troposphere/ecr.py | 2 + troposphere/ecs.py | 1 + troposphere/efs.py | 12 + troposphere/eks.py | 16 ++ troposphere/elasticache.py | 70 ++++++ troposphere/elasticloadbalancingv2.py | 70 +++++- troposphere/emr.py | 18 ++ troposphere/emrserverless.py | 50 ++++ troposphere/fis.py | 27 +++ troposphere/fsx.py | 18 +- troposphere/gamelift.py | 49 +++- troposphere/glue.py | 15 ++ troposphere/grafana.py | 3 +- troposphere/guardduty.py | 18 +- troposphere/iam.py | 4 +- troposphere/imagebuilder.py | 125 ++++++++++ troposphere/iot.py | 14 ++ troposphere/iottwinmaker.py | 28 +++ troposphere/logs.py | 63 +++++ troposphere/managedblockchain.py | 1 + troposphere/medialive.py | 184 +++++++++++++- troposphere/mediapackagev2.py | 15 ++ troposphere/mwaa.py | 1 + troposphere/opensearchserverless.py | 16 ++ troposphere/opensearchservice.py | 1 + troposphere/osis.py | 26 +- troposphere/pipes.py | 48 ++++ troposphere/quicksight.py | 54 +++++ troposphere/rds.py | 2 + troposphere/redshift.py | 1 + troposphere/resourceexplorer2.py | 15 +- troposphere/route53resolver.py | 2 + troposphere/s3.py | 248 ++++++++++++++++--- troposphere/sagemaker.py | 256 ++++++++++++++++++-- troposphere/sns.py | 15 ++ troposphere/transfer.py | 12 + 60 files changed, 2227 insertions(+), 239 deletions(-) diff --git a/troposphere/accessanalyzer.py b/troposphere/accessanalyzer.py index d52b86300..7f67cbafa 100644 --- a/troposphere/accessanalyzer.py +++ b/troposphere/accessanalyzer.py @@ -7,7 +7,27 @@ from . import AWSObject, AWSProperty, PropsDictType, Tags -from .validators import boolean +from .validators import boolean, integer + + +class UnusedAccessConfiguration(AWSProperty): + """ + `UnusedAccessConfiguration `__ + """ + + props: PropsDictType = { + "UnusedAccessAge": (integer, False), + } + + +class AnalyzerConfiguration(AWSProperty): + """ + `AnalyzerConfiguration `__ + """ + + props: PropsDictType = { + "UnusedAccessConfiguration": (UnusedAccessConfiguration, False), + } class Filter(AWSProperty): @@ -43,6 +63,7 @@ class Analyzer(AWSObject): resource_type = "AWS::AccessAnalyzer::Analyzer" props: PropsDictType = { + "AnalyzerConfiguration": (AnalyzerConfiguration, False), "AnalyzerName": (str, False), "ArchiveRules": ([ArchiveRule], False), "Tags": (Tags, False), diff --git a/troposphere/apigateway.py b/troposphere/apigateway.py index 763c39db4..f14a52642 100644 --- a/troposphere/apigateway.py +++ b/troposphere/apigateway.py @@ -297,7 +297,7 @@ class GatewayResponse(AWSObject): class IntegrationResponse(AWSProperty): """ - `IntegrationResponse `__ + `IntegrationResponse `__ """ props: PropsDictType = { @@ -311,7 +311,7 @@ class IntegrationResponse(AWSProperty): class Integration(AWSProperty): """ - `Integration `__ + `Integration `__ """ props: PropsDictType = { @@ -327,14 +327,14 @@ class Integration(AWSProperty): "RequestParameters": (dict, False), "RequestTemplates": (dict, False), "TimeoutInMillis": (validate_timeout_in_millis, False), - "Type": (str, False), + "Type": (str, True), "Uri": (str, False), } class MethodResponse(AWSProperty): """ - `MethodResponse `__ + `MethodResponse `__ """ props: PropsDictType = { diff --git a/troposphere/applicationautoscaling.py b/troposphere/applicationautoscaling.py index 983b4e9aa..b61b36f9a 100644 --- a/troposphere/applicationautoscaling.py +++ b/troposphere/applicationautoscaling.py @@ -69,7 +69,7 @@ class ScalableTarget(AWSObject): class StepAdjustment(AWSProperty): """ - `StepAdjustment `__ + `StepAdjustment `__ """ props: PropsDictType = { @@ -104,6 +104,55 @@ class MetricDimension(AWSProperty): } +class TargetTrackingMetricDimension(AWSProperty): + """ + `TargetTrackingMetricDimension `__ + """ + + props: PropsDictType = { + "Name": (str, False), + "Value": (str, False), + } + + +class TargetTrackingMetric(AWSProperty): + """ + `TargetTrackingMetric `__ + """ + + props: PropsDictType = { + "Dimensions": ([TargetTrackingMetricDimension], False), + "MetricName": (str, False), + "Namespace": (str, False), + } + + +class TargetTrackingMetricStat(AWSProperty): + """ + `TargetTrackingMetricStat `__ + """ + + props: PropsDictType = { + "Metric": (TargetTrackingMetric, False), + "Stat": (str, False), + "Unit": (str, False), + } + + +class TargetTrackingMetricDataQuery(AWSProperty): + """ + `TargetTrackingMetricDataQuery `__ + """ + + props: PropsDictType = { + "Expression": (str, False), + "Id": (str, False), + "Label": (str, False), + "MetricStat": (TargetTrackingMetricStat, False), + "ReturnData": (boolean, False), + } + + class CustomizedMetricSpecification(AWSProperty): """ `CustomizedMetricSpecification `__ @@ -111,9 +160,10 @@ class CustomizedMetricSpecification(AWSProperty): props: PropsDictType = { "Dimensions": ([MetricDimension], False), - "MetricName": (str, True), - "Namespace": (str, True), - "Statistic": (str, True), + "MetricName": (str, False), + "Metrics": ([TargetTrackingMetricDataQuery], False), + "Namespace": (str, False), + "Statistic": (str, False), "Unit": (str, False), } diff --git a/troposphere/apprunner.py b/troposphere/apprunner.py index 2cee71827..a9366ce04 100644 --- a/troposphere/apprunner.py +++ b/troposphere/apprunner.py @@ -116,6 +116,7 @@ class NetworkConfiguration(AWSProperty): props: PropsDictType = { "EgressConfiguration": (EgressConfiguration, False), "IngressConfiguration": (IngressConfiguration, False), + "IpAddressType": (str, False), } diff --git a/troposphere/appstream.py b/troposphere/appstream.py index d71d2f91e..6649c5557 100644 --- a/troposphere/appstream.py +++ b/troposphere/appstream.py @@ -331,6 +331,7 @@ class UserSetting(AWSProperty): props: PropsDictType = { "Action": (str, True), + "MaximumLength": (integer, False), "Permission": (str, True), } diff --git a/troposphere/autoscaling.py b/troposphere/autoscaling.py index af3951118..3fbca1386 100644 --- a/troposphere/autoscaling.py +++ b/troposphere/autoscaling.py @@ -31,6 +31,17 @@ ) +class InstanceMaintenancePolicy(AWSProperty): + """ + `InstanceMaintenancePolicy `__ + """ + + props: PropsDictType = { + "MaxHealthyPercentage": (integer, False), + "MinHealthyPercentage": (integer, False), + } + + class LaunchTemplateSpecification(AWSProperty): """ `LaunchTemplateSpecification `__ @@ -208,14 +219,14 @@ class InstanceRequirements(AWSProperty): "LocalStorage": (str, False), "LocalStorageTypes": ([str], False), "MemoryGiBPerVCpu": (MemoryGiBPerVCpuRequest, False), - "MemoryMiB": (MemoryMiBRequest, False), + "MemoryMiB": (MemoryMiBRequest, True), "NetworkBandwidthGbps": (NetworkBandwidthGbpsRequest, False), "NetworkInterfaceCount": (NetworkInterfaceCountRequest, False), "OnDemandMaxPricePercentageOverLowestPrice": (integer, False), "RequireHibernateSupport": (boolean, False), "SpotMaxPricePercentageOverLowestPrice": (integer, False), "TotalLocalStorageGB": (TotalLocalStorageGBRequest, False), - "VCpuCount": (VCpuCountRequest, False), + "VCpuCount": (VCpuCountRequest, True), } @@ -284,6 +295,7 @@ class AutoScalingGroup(AWSObject): "HealthCheckGracePeriod": (integer, False), "HealthCheckType": (str, False), "InstanceId": (str, False), + "InstanceMaintenancePolicy": (InstanceMaintenancePolicy, False), "LaunchConfigurationName": (str, False), "LaunchTemplate": (LaunchTemplateSpecification, False), "LifecycleHookSpecificationList": ([LifecycleHookSpecification], False), diff --git a/troposphere/awslambda.py b/troposphere/awslambda.py index 7ce054e88..f5791af34 100644 --- a/troposphere/awslambda.py +++ b/troposphere/awslambda.py @@ -103,7 +103,7 @@ class CodeSigningConfig(AWSObject): class OnFailure(AWSProperty): """ - `OnFailure `__ + `OnFailure `__ """ props: PropsDictType = { @@ -113,7 +113,7 @@ class OnFailure(AWSProperty): class OnSuccess(AWSProperty): """ - `OnSuccess `__ + `OnSuccess `__ """ props: PropsDictType = { @@ -351,6 +351,19 @@ def validate(self): validate_image_config(self) +class LoggingConfig(AWSProperty): + """ + `LoggingConfig `__ + """ + + props: PropsDictType = { + "ApplicationLogLevel": (str, False), + "LogFormat": (str, False), + "LogGroup": (str, False), + "SystemLogLevel": (str, False), + } + + class RuntimeManagementConfig(AWSProperty): """ `RuntimeManagementConfig `__ @@ -415,9 +428,9 @@ class Function(AWSObject): "ImageConfig": (ImageConfig, False), "KmsKeyArn": (str, False), "Layers": ([str], False), + "LoggingConfig": (LoggingConfig, False), "MemorySize": (validate_memory_size, False), "PackageType": (validate_package_type, False), - "Policy": (dict, False), "ReservedConcurrentExecutions": (integer, False), "Role": (str, True), "Runtime": (str, False), diff --git a/troposphere/backup.py b/troposphere/backup.py index b5a36a713..09dbf2f27 100644 --- a/troposphere/backup.py +++ b/troposphere/backup.py @@ -289,3 +289,75 @@ class ReportPlan(AWSObject): "ReportPlanTags": (Tags, False), "ReportSetting": (ReportSetting, True), } + + +class RestoreTestingRecoveryPointSelection(AWSProperty): + """ + `RestoreTestingRecoveryPointSelection `__ + """ + + props: PropsDictType = { + "Algorithm": (str, True), + "ExcludeVaults": ([str], False), + "IncludeVaults": ([str], True), + "RecoveryPointTypes": ([str], True), + "SelectionWindowDays": (integer, False), + } + + +class RestoreTestingPlan(AWSObject): + """ + `RestoreTestingPlan `__ + """ + + resource_type = "AWS::Backup::RestoreTestingPlan" + + props: PropsDictType = { + "RecoveryPointSelection": (RestoreTestingRecoveryPointSelection, True), + "RestoreTestingPlanName": (str, True), + "ScheduleExpression": (str, True), + "ScheduleExpressionTimezone": (str, False), + "StartWindowHours": (integer, False), + "Tags": (Tags, False), + } + + +class KeyValue(AWSProperty): + """ + `KeyValue `__ + """ + + props: PropsDictType = { + "Key": (str, True), + "Value": (str, True), + } + + +class ProtectedResourceConditions(AWSProperty): + """ + `ProtectedResourceConditions `__ + """ + + props: PropsDictType = { + "StringEquals": ([KeyValue], False), + "StringNotEquals": ([KeyValue], False), + } + + +class RestoreTestingSelection(AWSObject): + """ + `RestoreTestingSelection `__ + """ + + resource_type = "AWS::Backup::RestoreTestingSelection" + + props: PropsDictType = { + "IamRoleArn": (str, True), + "ProtectedResourceArns": ([str], False), + "ProtectedResourceConditions": (ProtectedResourceConditions, False), + "ProtectedResourceType": (str, True), + "RestoreMetadataOverrides": (dict, False), + "RestoreTestingPlanName": (str, True), + "RestoreTestingSelectionName": (str, True), + "ValidationWindowHours": (integer, False), + } diff --git a/troposphere/billingconductor.py b/troposphere/billingconductor.py index 75458480c..4a2faaa5e 100644 --- a/troposphere/billingconductor.py +++ b/troposphere/billingconductor.py @@ -113,6 +113,7 @@ class CustomLineItem(AWSObject): resource_type = "AWS::BillingConductor::CustomLineItem" props: PropsDictType = { + "AccountId": (str, False), "BillingGroupArn": (str, True), "BillingPeriodRange": (BillingPeriodRange, False), "CustomLineItemChargeDetails": (CustomLineItemChargeDetails, False), diff --git a/troposphere/cleanrooms.py b/troposphere/cleanrooms.py index 270e1ef0b..42fbbfce6 100644 --- a/troposphere/cleanrooms.py +++ b/troposphere/cleanrooms.py @@ -63,6 +63,26 @@ class DataEncryptionMetadata(AWSProperty): } +class QueryComputePaymentConfig(AWSProperty): + """ + `QueryComputePaymentConfig `__ + """ + + props: PropsDictType = { + "IsResponsible": (boolean, True), + } + + +class PaymentConfiguration(AWSProperty): + """ + `PaymentConfiguration `__ + """ + + props: PropsDictType = { + "QueryCompute": (QueryComputePaymentConfig, True), + } + + class MemberSpecification(AWSProperty): """ `MemberSpecification `__ @@ -72,6 +92,7 @@ class MemberSpecification(AWSProperty): "AccountId": (str, True), "DisplayName": (str, True), "MemberAbilities": ([str], True), + "PaymentConfiguration": (PaymentConfiguration, False), } @@ -85,6 +106,7 @@ class Collaboration(AWSObject): props: PropsDictType = { "CreatorDisplayName": (str, True), "CreatorMemberAbilities": ([str], True), + "CreatorPaymentConfiguration": (PaymentConfiguration, False), "DataEncryptionMetadata": (DataEncryptionMetadata, False), "Description": (str, True), "Members": ([MemberSpecification], True), @@ -245,6 +267,26 @@ class ConfiguredTableAssociation(AWSObject): } +class MembershipQueryComputePaymentConfig(AWSProperty): + """ + `MembershipQueryComputePaymentConfig `__ + """ + + props: PropsDictType = { + "IsResponsible": (boolean, True), + } + + +class MembershipPaymentConfiguration(AWSProperty): + """ + `MembershipPaymentConfiguration `__ + """ + + props: PropsDictType = { + "QueryCompute": (MembershipQueryComputePaymentConfig, True), + } + + class ProtectedQueryS3OutputConfiguration(AWSProperty): """ `ProtectedQueryS3OutputConfiguration `__ @@ -291,6 +333,7 @@ class Membership(AWSObject): MembershipProtectedQueryResultConfiguration, False, ), + "PaymentConfiguration": (MembershipPaymentConfiguration, False), "QueryLogStatus": (str, True), "Tags": (Tags, False), } diff --git a/troposphere/cloud9.py b/troposphere/cloud9.py index 1cb93e485..f59cc1ea0 100644 --- a/troposphere/cloud9.py +++ b/troposphere/cloud9.py @@ -32,7 +32,7 @@ class EnvironmentEC2(AWSObject): "AutomaticStopTimeMinutes": (integer, False), "ConnectionType": (str, False), "Description": (str, False), - "ImageId": (str, False), + "ImageId": (str, True), "InstanceType": (str, True), "Name": (str, False), "OwnerArn": (str, False), diff --git a/troposphere/cloudfront.py b/troposphere/cloudfront.py index c36399f45..c796e0ec7 100644 --- a/troposphere/cloudfront.py +++ b/troposphere/cloudfront.py @@ -648,6 +648,31 @@ class KeyGroup(AWSObject): } +class ImportSource(AWSProperty): + """ + `ImportSource `__ + """ + + props: PropsDictType = { + "SourceArn": (str, True), + "SourceType": (str, True), + } + + +class KeyValueStore(AWSObject): + """ + `KeyValueStore `__ + """ + + resource_type = "AWS::CloudFront::KeyValueStore" + + props: PropsDictType = { + "Comment": (str, False), + "ImportSource": (ImportSource, False), + "Name": (str, True), + } + + class RealtimeMetricsSubscriptionConfig(AWSProperty): """ `RealtimeMetricsSubscriptionConfig `__ diff --git a/troposphere/cloudtrail.py b/troposphere/cloudtrail.py index e9130df4e..a0756130b 100644 --- a/troposphere/cloudtrail.py +++ b/troposphere/cloudtrail.py @@ -63,6 +63,16 @@ class AdvancedEventSelector(AWSProperty): } +class InsightSelector(AWSProperty): + """ + `InsightSelector `__ + """ + + props: PropsDictType = { + "InsightType": (str, False), + } + + class EventDataStore(AWSObject): """ `EventDataStore `__ @@ -72,7 +82,12 @@ class EventDataStore(AWSObject): props: PropsDictType = { "AdvancedEventSelectors": ([AdvancedEventSelector], False), + "BillingMode": (str, False), + "FederationEnabled": (boolean, False), + "FederationRoleArn": (str, False), "IngestionEnabled": (boolean, False), + "InsightSelectors": ([InsightSelector], False), + "InsightsDestination": (str, False), "KmsKeyId": (str, False), "MultiRegionEnabled": (boolean, False), "Name": (str, False), @@ -120,16 +135,6 @@ class EventSelector(AWSProperty): } -class InsightSelector(AWSProperty): - """ - `InsightSelector `__ - """ - - props: PropsDictType = { - "InsightType": (str, False), - } - - class Trail(AWSObject): """ `Trail `__ diff --git a/troposphere/codebuild.py b/troposphere/codebuild.py index 86af8d90b..af52943cc 100644 --- a/troposphere/codebuild.py +++ b/troposphere/codebuild.py @@ -79,13 +79,13 @@ class Environment(AWSProperty): props: PropsDictType = { "Certificate": (str, False), - "ComputeType": (str, True), + "ComputeType": (str, False), "EnvironmentVariables": (validate_environmentvariable_or_list, False), "Image": (str, True), "ImagePullCredentialsType": (validate_image_pull_credentials, False), "PrivilegedMode": (boolean, False), "RegistryCredential": (RegistryCredential, False), - "Type": (str, True), + "Type": (str, False), } def validate(self): @@ -368,6 +368,16 @@ class SourceCredential(AWSObject): } +class ProjectFleet(AWSProperty): + """ + `ProjectFleet `__ + """ + + props: PropsDictType = { + "FleetArn": (str, False), + } + + class WebhookFilter(AWSProperty): """ `WebhookFilter `__ diff --git a/troposphere/codedeploy.py b/troposphere/codedeploy.py index 114bd4ea4..b77c2e1c3 100644 --- a/troposphere/codedeploy.py +++ b/troposphere/codedeploy.py @@ -78,6 +78,29 @@ class TrafficRoutingConfig(AWSProperty): } +class MinimumHealthyHostsPerZone(AWSProperty): + """ + `MinimumHealthyHostsPerZone `__ + """ + + props: PropsDictType = { + "Type": (str, True), + "Value": (integer, True), + } + + +class ZonalConfig(AWSProperty): + """ + `ZonalConfig `__ + """ + + props: PropsDictType = { + "FirstZoneMonitorDurationInSeconds": (integer, False), + "MinimumHealthyHostsPerZone": (MinimumHealthyHostsPerZone, False), + "MonitorDurationInSeconds": (integer, False), + } + + class DeploymentConfig(AWSObject): """ `DeploymentConfig `__ @@ -90,6 +113,7 @@ class DeploymentConfig(AWSObject): "DeploymentConfigName": (str, False), "MinimumHealthyHosts": (MinimumHealthyHosts, False), "TrafficRoutingConfig": (TrafficRoutingConfig, False), + "ZonalConfig": (ZonalConfig, False), } @@ -415,6 +439,7 @@ class DeploymentGroup(AWSObject): "OutdatedInstancesStrategy": (str, False), "ServiceRoleArn": (str, True), "Tags": (Tags, False), + "TerminationHookEnabled": (boolean, False), "TriggerConfigurations": ([TriggerConfig], False), } diff --git a/troposphere/codepipeline.py b/troposphere/codepipeline.py index ea35fe472..adc979ade 100644 --- a/troposphere/codepipeline.py +++ b/troposphere/codepipeline.py @@ -114,6 +114,49 @@ class DisableInboundStageTransitions(AWSProperty): } +class GitTagFilterCriteria(AWSProperty): + """ + `GitTagFilterCriteria `__ + """ + + props: PropsDictType = { + "Excludes": ([str], False), + "Includes": ([str], False), + } + + +class GitPushFilter(AWSProperty): + """ + `GitPushFilter `__ + """ + + props: PropsDictType = { + "Tags": (GitTagFilterCriteria, False), + } + + +class GitConfiguration(AWSProperty): + """ + `GitConfiguration `__ + """ + + props: PropsDictType = { + "Push": ([GitPushFilter], False), + "SourceActionName": (str, True), + } + + +class PipelineTriggerDeclaration(AWSProperty): + """ + `PipelineTriggerDeclaration `__ + """ + + props: PropsDictType = { + "GitConfiguration": (GitConfiguration, False), + "ProviderType": (str, True), + } + + class ActionTypeId(AWSProperty): """ `ActionTypeId `__ @@ -188,6 +231,18 @@ class Stages(AWSProperty): } +class VariableDeclaration(AWSProperty): + """ + `VariableDeclaration `__ + """ + + props: PropsDictType = { + "DefaultValue": (str, False), + "Description": (str, False), + "Name": (str, True), + } + + class Pipeline(AWSObject): """ `Pipeline `__ @@ -200,10 +255,13 @@ class Pipeline(AWSObject): "ArtifactStores": ([ArtifactStoreMap], False), "DisableInboundStageTransitions": ([DisableInboundStageTransitions], False), "Name": (str, False), + "PipelineType": (str, False), "RestartExecutionOnUpdate": (boolean, False), "RoleArn": (str, True), "Stages": ([Stages], True), "Tags": (Tags, False), + "Triggers": ([PipelineTriggerDeclaration], False), + "Variables": ([VariableDeclaration], False), } diff --git a/troposphere/codestarconnections.py b/troposphere/codestarconnections.py index 7cdbd7f78..4b422b124 100644 --- a/troposphere/codestarconnections.py +++ b/troposphere/codestarconnections.py @@ -23,3 +23,36 @@ class Connection(AWSObject): "ProviderType": (validate_connection_providertype, False), "Tags": (Tags, False), } + + +class RepositoryLink(AWSObject): + """ + `RepositoryLink `__ + """ + + resource_type = "AWS::CodeStarConnections::RepositoryLink" + + props: PropsDictType = { + "ConnectionArn": (str, True), + "EncryptionKeyArn": (str, False), + "OwnerId": (str, True), + "RepositoryName": (str, True), + "Tags": (Tags, False), + } + + +class SyncConfiguration(AWSObject): + """ + `SyncConfiguration `__ + """ + + resource_type = "AWS::CodeStarConnections::SyncConfiguration" + + props: PropsDictType = { + "Branch": (str, True), + "ConfigFile": (str, True), + "RepositoryLinkId": (str, True), + "ResourceName": (str, True), + "RoleArn": (str, True), + "SyncType": (str, True), + } diff --git a/troposphere/config.py b/troposphere/config.py index a1384f05a..9bf32c9e1 100644 --- a/troposphere/config.py +++ b/troposphere/config.py @@ -195,6 +195,29 @@ class RecordingGroup(AWSProperty): } +class RecordingModeOverride(AWSProperty): + """ + `RecordingModeOverride `__ + """ + + props: PropsDictType = { + "Description": (str, False), + "RecordingFrequency": (str, True), + "ResourceTypes": ([str], True), + } + + +class RecordingMode(AWSProperty): + """ + `RecordingMode `__ + """ + + props: PropsDictType = { + "RecordingFrequency": (str, True), + "RecordingModeOverrides": ([RecordingModeOverride], False), + } + + class ConfigurationRecorder(AWSObject): """ `ConfigurationRecorder `__ @@ -205,6 +228,7 @@ class ConfigurationRecorder(AWSObject): props: PropsDictType = { "Name": (str, False), "RecordingGroup": (RecordingGroup, False), + "RecordingMode": (RecordingMode, False), "RoleARN": (str, True), } diff --git a/troposphere/connect.py b/troposphere/connect.py index 324c67137..8e7fd3628 100644 --- a/troposphere/connect.py +++ b/troposphere/connect.py @@ -126,6 +126,7 @@ class Instance(AWSObject): "DirectoryId": (str, False), "IdentityManagementType": (str, True), "InstanceAlias": (str, False), + "Tags": (Tags, False), } @@ -166,7 +167,7 @@ class KinesisVideoStreamConfig(AWSProperty): """ props: PropsDictType = { - "EncryptionConfig": (EncryptionConfig, False), + "EncryptionConfig": (EncryptionConfig, True), "Prefix": (str, True), "RetentionPeriodHours": (double, True), } diff --git a/troposphere/controltower.py b/troposphere/controltower.py index 8346b0556..0628204ba 100644 --- a/troposphere/controltower.py +++ b/troposphere/controltower.py @@ -6,7 +6,18 @@ # *** Do not modify - this file is autogenerated *** -from . import AWSObject, PropsDictType +from . import AWSObject, AWSProperty, PropsDictType, Tags + + +class EnabledControlParameter(AWSProperty): + """ + `EnabledControlParameter `__ + """ + + props: PropsDictType = { + "Key": (str, True), + "Value": (dict, True), + } class EnabledControl(AWSObject): @@ -18,5 +29,20 @@ class EnabledControl(AWSObject): props: PropsDictType = { "ControlIdentifier": (str, True), + "Parameters": ([EnabledControlParameter], False), "TargetIdentifier": (str, True), } + + +class LandingZone(AWSObject): + """ + `LandingZone `__ + """ + + resource_type = "AWS::ControlTower::LandingZone" + + props: PropsDictType = { + "Manifest": (dict, True), + "Tags": (Tags, False), + "Version": (str, True), + } diff --git a/troposphere/dlm.py b/troposphere/dlm.py index bd1e4929d..396534577 100644 --- a/troposphere/dlm.py +++ b/troposphere/dlm.py @@ -16,6 +16,18 @@ ) +class Exclusions(AWSProperty): + """ + `Exclusions `__ + """ + + props: PropsDictType = { + "ExcludeBootVolumes": (boolean, False), + "ExcludeTags": ([], False), + "ExcludeVolumeTypes": ([], False), + } + + class CrossRegionCopyRetainRule(AWSProperty): """ `CrossRegionCopyRetainRule `__ @@ -128,6 +140,21 @@ class ArchiveRule(AWSProperty): } +class Script(AWSProperty): + """ + `Script `__ + """ + + props: PropsDictType = { + "ExecuteOperationOnScriptFailure": (boolean, False), + "ExecutionHandler": (str, False), + "ExecutionHandlerService": (str, False), + "ExecutionTimeout": (integer, False), + "MaximumRetryCount": (integer, False), + "Stages": ([str], False), + } + + class CreateRule(AWSProperty): """ `CreateRule `__ @@ -138,6 +165,7 @@ class CreateRule(AWSProperty): "Interval": (validate_interval, False), "IntervalUnit": (validate_interval_unit, False), "Location": (str, False), + "Scripts": ([Script], False), "Times": ([str], False), } @@ -245,11 +273,19 @@ class PolicyDetails(AWSProperty): props: PropsDictType = { "Actions": ([Action], False), + "CopyTags": (boolean, False), + "CreateInterval": (integer, False), + "CrossRegionCopyTargets": ([], False), "EventSource": (EventSource, False), + "Exclusions": (Exclusions, False), + "ExtendDeletion": (boolean, False), "Parameters": (Parameters, False), + "PolicyLanguage": (str, False), "PolicyType": (str, False), "ResourceLocations": ([str], False), + "ResourceType": (str, False), "ResourceTypes": ([str], False), + "RetainInterval": (integer, False), "Schedules": ([Schedule], False), "TargetTags": (validate_tags_or_list, False), } @@ -263,9 +299,26 @@ class LifecyclePolicy(AWSObject): resource_type = "AWS::DLM::LifecyclePolicy" props: PropsDictType = { + "CopyTags": (boolean, False), + "CreateInterval": (integer, False), + "CrossRegionCopyTargets": ([], False), + "DefaultPolicy": (str, False), "Description": (str, False), + "Exclusions": (Exclusions, False), "ExecutionRoleArn": (str, False), + "ExtendDeletion": (boolean, False), "PolicyDetails": (PolicyDetails, False), + "RetainInterval": (integer, False), "State": (validate_state, False), "Tags": (validate_tags_or_list, False), } + + +class CrossRegionCopyTarget(AWSProperty): + """ + `CrossRegionCopyTarget `__ + """ + + props: PropsDictType = { + "TargetRegion": (str, False), + } diff --git a/troposphere/dms.py b/troposphere/dms.py index 4b5ecac2f..9db769b13 100644 --- a/troposphere/dms.py +++ b/troposphere/dms.py @@ -28,6 +28,150 @@ class Certificate(AWSObject): } +class MicrosoftSqlServerSettings(AWSProperty): + """ + `MicrosoftSqlServerSettings `__ + """ + + props: PropsDictType = { + "BcpPacketSize": (integer, False), + "ControlTablesFileGroup": (str, False), + "DatabaseName": (str, False), + "ForceLobLookup": (boolean, False), + "Password": (str, False), + "Port": (integer, False), + "QuerySingleAlwaysOnNode": (boolean, False), + "ReadBackupOnly": (boolean, False), + "SafeguardPolicy": (str, False), + "SecretsManagerAccessRoleArn": (str, False), + "SecretsManagerSecretId": (str, False), + "ServerName": (str, False), + "TlogAccessMode": (str, False), + "TrimSpaceInChar": (boolean, False), + "UseBcpFullLoad": (boolean, False), + "UseThirdPartyBackupDevice": (boolean, False), + "Username": (str, False), + } + + +class MySqlSettings(AWSProperty): + """ + `MySqlSettings `__ + """ + + props: PropsDictType = { + "AfterConnectScript": (str, False), + "CleanSourceMetadataOnMismatch": (boolean, False), + "EventsPollInterval": (integer, False), + "MaxFileSize": (integer, False), + "ParallelLoadThreads": (integer, False), + "SecretsManagerAccessRoleArn": (str, False), + "SecretsManagerSecretId": (str, False), + "ServerTimezone": (str, False), + "TargetDbType": (str, False), + } + + +class OracleSettings(AWSProperty): + """ + `OracleSettings `__ + """ + + props: PropsDictType = { + "AccessAlternateDirectly": (boolean, False), + "AddSupplementalLogging": (boolean, False), + "AdditionalArchivedLogDestId": (integer, False), + "AllowSelectNestedTables": (boolean, False), + "ArchivedLogDestId": (integer, False), + "ArchivedLogsOnly": (boolean, False), + "AsmPassword": (str, False), + "AsmServer": (str, False), + "AsmUser": (str, False), + "CharLengthSemantics": (str, False), + "DirectPathNoLog": (boolean, False), + "DirectPathParallelLoad": (boolean, False), + "EnableHomogenousTablespace": (boolean, False), + "ExtraArchivedLogDestIds": ([integer], False), + "FailTasksOnLobTruncation": (boolean, False), + "NumberDatatypeScale": (integer, False), + "OraclePathPrefix": (str, False), + "ParallelAsmReadThreads": (integer, False), + "ReadAheadBlocks": (integer, False), + "ReadTableSpaceName": (boolean, False), + "ReplacePathPrefix": (boolean, False), + "RetryInterval": (integer, False), + "SecretsManagerAccessRoleArn": (str, False), + "SecretsManagerOracleAsmAccessRoleArn": (str, False), + "SecretsManagerOracleAsmSecretId": (str, False), + "SecretsManagerSecretId": (str, False), + "SecurityDbEncryption": (str, False), + "SecurityDbEncryptionName": (str, False), + "SpatialDataOptionToGeoJsonFunctionName": (str, False), + "StandbyDelayTime": (integer, False), + "UseAlternateFolderForOnline": (boolean, False), + "UseBFile": (boolean, False), + "UseDirectPathFullLoad": (boolean, False), + "UseLogminerReader": (boolean, False), + "UsePathPrefix": (str, False), + } + + +class PostgreSqlSettings(AWSProperty): + """ + `PostgreSqlSettings `__ + """ + + props: PropsDictType = { + "AfterConnectScript": (str, False), + "BabelfishDatabaseName": (str, False), + "CaptureDdls": (boolean, False), + "DatabaseMode": (str, False), + "DdlArtifactsSchema": (str, False), + "ExecuteTimeout": (integer, False), + "FailTasksOnLobTruncation": (boolean, False), + "HeartbeatEnable": (boolean, False), + "HeartbeatFrequency": (integer, False), + "HeartbeatSchema": (str, False), + "MapBooleanAsBoolean": (boolean, False), + "MaxFileSize": (integer, False), + "PluginName": (str, False), + "SecretsManagerAccessRoleArn": (str, False), + "SecretsManagerSecretId": (str, False), + "SlotName": (str, False), + } + + +class Settings(AWSProperty): + """ + `Settings `__ + """ + + props: PropsDictType = { + "MicrosoftSqlServerSettings": (MicrosoftSqlServerSettings, False), + "MySqlSettings": (MySqlSettings, False), + "OracleSettings": (OracleSettings, False), + "PostgreSqlSettings": (PostgreSqlSettings, False), + } + + +class DataProvider(AWSObject): + """ + `DataProvider `__ + """ + + resource_type = "AWS::DMS::DataProvider" + + props: PropsDictType = { + "DataProviderIdentifier": (str, False), + "DataProviderName": (str, False), + "Description": (str, False), + "Engine": (str, True), + "ExactSettings": (boolean, False), + "Settings": (Settings, False), + "Tags": (Tags, False), + } + + class DocDbSettings(AWSProperty): """ `DocDbSettings `__ @@ -94,10 +238,14 @@ class IbmDb2Settings(AWSProperty): props: PropsDictType = { "CurrentLsn": (str, False), + "KeepCsvFiles": (boolean, False), + "LoadTimeout": (integer, False), + "MaxFileSize": (integer, False), "MaxKBytesPerRead": (integer, False), "SecretsManagerAccessRoleArn": (str, False), "SecretsManagerSecretId": (str, False), "SetDataCaptureChanges": (boolean, False), + "WriteBufferSize": (integer, False), } @@ -147,32 +295,6 @@ class KinesisSettings(AWSProperty): } -class MicrosoftSqlServerSettings(AWSProperty): - """ - `MicrosoftSqlServerSettings `__ - """ - - props: PropsDictType = { - "BcpPacketSize": (integer, False), - "ControlTablesFileGroup": (str, False), - "DatabaseName": (str, False), - "ForceLobLookup": (boolean, False), - "Password": (str, False), - "Port": (integer, False), - "QuerySingleAlwaysOnNode": (boolean, False), - "ReadBackupOnly": (boolean, False), - "SafeguardPolicy": (str, False), - "SecretsManagerAccessRoleArn": (str, False), - "SecretsManagerSecretId": (str, False), - "ServerName": (str, False), - "TlogAccessMode": (str, False), - "TrimSpaceInChar": (boolean, False), - "UseBcpFullLoad": (boolean, False), - "UseThirdPartyBackupDevice": (boolean, False), - "Username": (str, False), - } - - class MongoDbSettings(AWSProperty): """ `MongoDbSettings `__ @@ -195,24 +317,6 @@ class MongoDbSettings(AWSProperty): } -class MySqlSettings(AWSProperty): - """ - `MySqlSettings `__ - """ - - props: PropsDictType = { - "AfterConnectScript": (str, False), - "CleanSourceMetadataOnMismatch": (boolean, False), - "EventsPollInterval": (integer, False), - "MaxFileSize": (integer, False), - "ParallelLoadThreads": (integer, False), - "SecretsManagerAccessRoleArn": (str, False), - "SecretsManagerSecretId": (str, False), - "ServerTimezone": (str, False), - "TargetDbType": (str, False), - } - - class NeptuneSettings(AWSProperty): """ `NeptuneSettings `__ @@ -229,75 +333,6 @@ class NeptuneSettings(AWSProperty): } -class OracleSettings(AWSProperty): - """ - `OracleSettings `__ - """ - - props: PropsDictType = { - "AccessAlternateDirectly": (boolean, False), - "AddSupplementalLogging": (boolean, False), - "AdditionalArchivedLogDestId": (integer, False), - "AllowSelectNestedTables": (boolean, False), - "ArchivedLogDestId": (integer, False), - "ArchivedLogsOnly": (boolean, False), - "AsmPassword": (str, False), - "AsmServer": (str, False), - "AsmUser": (str, False), - "CharLengthSemantics": (str, False), - "DirectPathNoLog": (boolean, False), - "DirectPathParallelLoad": (boolean, False), - "EnableHomogenousTablespace": (boolean, False), - "ExtraArchivedLogDestIds": ([integer], False), - "FailTasksOnLobTruncation": (boolean, False), - "NumberDatatypeScale": (integer, False), - "OraclePathPrefix": (str, False), - "ParallelAsmReadThreads": (integer, False), - "ReadAheadBlocks": (integer, False), - "ReadTableSpaceName": (boolean, False), - "ReplacePathPrefix": (boolean, False), - "RetryInterval": (integer, False), - "SecretsManagerAccessRoleArn": (str, False), - "SecretsManagerOracleAsmAccessRoleArn": (str, False), - "SecretsManagerOracleAsmSecretId": (str, False), - "SecretsManagerSecretId": (str, False), - "SecurityDbEncryption": (str, False), - "SecurityDbEncryptionName": (str, False), - "SpatialDataOptionToGeoJsonFunctionName": (str, False), - "StandbyDelayTime": (integer, False), - "UseAlternateFolderForOnline": (boolean, False), - "UseBFile": (boolean, False), - "UseDirectPathFullLoad": (boolean, False), - "UseLogminerReader": (boolean, False), - "UsePathPrefix": (str, False), - } - - -class PostgreSqlSettings(AWSProperty): - """ - `PostgreSqlSettings `__ - """ - - props: PropsDictType = { - "AfterConnectScript": (str, False), - "BabelfishDatabaseName": (str, False), - "CaptureDdls": (boolean, False), - "DatabaseMode": (str, False), - "DdlArtifactsSchema": (str, False), - "ExecuteTimeout": (integer, False), - "FailTasksOnLobTruncation": (boolean, False), - "HeartbeatEnable": (boolean, False), - "HeartbeatFrequency": (integer, False), - "HeartbeatSchema": (str, False), - "MapBooleanAsBoolean": (boolean, False), - "MaxFileSize": (integer, False), - "PluginName": (str, False), - "SecretsManagerAccessRoleArn": (str, False), - "SecretsManagerSecretId": (str, False), - "SlotName": (str, False), - } - - class RedisSettings(AWSProperty): """ `RedisSettings `__ @@ -356,6 +391,7 @@ class S3Settings(AWSProperty): props: PropsDictType = { "AddColumnName": (boolean, False), + "AddTrailingPaddingCharacter": (boolean, False), "BucketFolder": (str, False), "BucketName": (str, False), "CannedAclForObjects": (str, False), @@ -379,7 +415,9 @@ class S3Settings(AWSProperty): "EnableStatistics": (boolean, False), "EncodingType": (str, False), "EncryptionMode": (str, False), + "ExpectedBucketOwner": (str, False), "ExternalTableDefinition": (str, False), + "GlueCatalogGeneration": (boolean, False), "IgnoreHeaderRows": (integer, False), "IncludeOpForFullLoad": (boolean, False), "MaxFileSize": (integer, False), @@ -467,6 +505,77 @@ class EventSubscription(AWSObject): } +class InstanceProfile(AWSObject): + """ + `InstanceProfile `__ + """ + + resource_type = "AWS::DMS::InstanceProfile" + + props: PropsDictType = { + "AvailabilityZone": (str, False), + "Description": (str, False), + "InstanceProfileIdentifier": (str, False), + "InstanceProfileName": (str, False), + "KmsKeyArn": (str, False), + "NetworkType": (str, False), + "PubliclyAccessible": (boolean, False), + "SubnetGroupIdentifier": (str, False), + "Tags": (Tags, False), + "VpcSecurityGroups": ([str], False), + } + + +class DataProviderDescriptor(AWSProperty): + """ + `DataProviderDescriptor `__ + """ + + props: PropsDictType = { + "DataProviderArn": (str, False), + "DataProviderIdentifier": (str, False), + "DataProviderName": (str, False), + "SecretsManagerAccessRoleArn": (str, False), + "SecretsManagerSecretId": (str, False), + } + + +class SchemaConversionApplicationAttributes(AWSProperty): + """ + `SchemaConversionApplicationAttributes `__ + """ + + props: PropsDictType = { + "S3BucketPath": (str, False), + "S3BucketRoleArn": (str, False), + } + + +class MigrationProject(AWSObject): + """ + `MigrationProject `__ + """ + + resource_type = "AWS::DMS::MigrationProject" + + props: PropsDictType = { + "Description": (str, False), + "InstanceProfileArn": (str, False), + "InstanceProfileIdentifier": (str, False), + "InstanceProfileName": (str, False), + "MigrationProjectIdentifier": (str, False), + "MigrationProjectName": (str, False), + "SchemaConversionApplicationAttributes": ( + SchemaConversionApplicationAttributes, + False, + ), + "SourceDataProviderDescriptors": ([DataProviderDescriptor], False), + "Tags": (Tags, False), + "TargetDataProviderDescriptors": ([DataProviderDescriptor], False), + "TransformationRules": (str, False), + } + + class ComputeConfig(AWSProperty): """ `ComputeConfig `__ diff --git a/troposphere/docdb.py b/troposphere/docdb.py index 1fb2d7936..3df5136e3 100644 --- a/troposphere/docdb.py +++ b/troposphere/docdb.py @@ -70,6 +70,8 @@ class DBInstance(AWSObject): props: PropsDictType = { "AutoMinorVersionUpgrade": (boolean, False), "AvailabilityZone": (str, False), + "CACertificateIdentifier": (str, False), + "CertificateRotationRestart": (boolean, False), "DBClusterIdentifier": (str, True), "DBInstanceClass": (str, True), "DBInstanceIdentifier": (str, False), @@ -92,3 +94,20 @@ class DBSubnetGroup(AWSObject): "SubnetIds": ([str], True), "Tags": (Tags, False), } + + +class EventSubscription(AWSObject): + """ + `EventSubscription `__ + """ + + resource_type = "AWS::DocDB::EventSubscription" + + props: PropsDictType = { + "Enabled": (boolean, False), + "EventCategories": ([str], False), + "SnsTopicArn": (str, True), + "SourceIds": ([str], False), + "SourceType": (str, False), + "SubscriptionName": (str, False), + } diff --git a/troposphere/ec2.py b/troposphere/ec2.py index 14cc289a0..b19a64ed2 100644 --- a/troposphere/ec2.py +++ b/troposphere/ec2.py @@ -738,6 +738,7 @@ class IPAM(AWSObject): "Description": (str, False), "OperatingRegions": ([IpamOperatingRegion], False), "Tags": (Tags, False), + "Tier": (str, False), } @@ -867,7 +868,7 @@ class EBSBlockDevice(AWSProperty): class BlockDeviceMapping(AWSProperty): """ - `BlockDeviceMapping `__ + `BlockDeviceMapping `__ """ props: PropsDictType = { @@ -986,7 +987,7 @@ class PrivateIpAddressSpecification(AWSProperty): class NetworkInterfaceProperty(AWSProperty): """ - `NetworkInterfaceProperty `__ + `NetworkInterfaceProperty `__ """ props: PropsDictType = { @@ -1020,7 +1021,7 @@ class PrivateDnsNameOptions(AWSProperty): class AssociationParameters(AWSProperty): """ - `AssociationParameters `__ + `AssociationParameters `__ """ props: PropsDictType = { @@ -1031,7 +1032,7 @@ class AssociationParameters(AWSProperty): class SsmAssociations(AWSProperty): """ - `SsmAssociations `__ + `SsmAssociations `__ """ props: PropsDictType = { @@ -1042,7 +1043,7 @@ class SsmAssociations(AWSProperty): class Instance(AWSObject): """ - `Instance `__ + `Instance `__ """ resource_type = "AWS::EC2::Instance" @@ -1392,6 +1393,39 @@ class Monitoring(AWSProperty): } +class ConnectionTrackingSpecification(AWSProperty): + """ + `ConnectionTrackingSpecification `__ + """ + + props: PropsDictType = { + "TcpEstablishedTimeout": (integer, False), + "UdpStreamTimeout": (integer, False), + "UdpTimeout": (integer, False), + } + + +class EnaSrdUdpSpecification(AWSProperty): + """ + `EnaSrdUdpSpecification `__ + """ + + props: PropsDictType = { + "EnaSrdUdpEnabled": (boolean, False), + } + + +class EnaSrdSpecification(AWSProperty): + """ + `EnaSrdSpecification `__ + """ + + props: PropsDictType = { + "EnaSrdEnabled": (boolean, False), + "EnaSrdUdpSpecification": (EnaSrdUdpSpecification, False), + } + + class Ipv4PrefixSpecification(AWSProperty): """ `Ipv4PrefixSpecification `__ @@ -1430,9 +1464,11 @@ class NetworkInterfaces(AWSProperty): props: PropsDictType = { "AssociateCarrierIpAddress": (boolean, False), "AssociatePublicIpAddress": (boolean, False), + "ConnectionTrackingSpecification": (ConnectionTrackingSpecification, False), "DeleteOnTermination": (boolean, False), "Description": (str, False), "DeviceIndex": (integer, False), + "EnaSrdSpecification": (EnaSrdSpecification, False), "Groups": ([str], False), "InterfaceType": (str, False), "Ipv4PrefixCount": (integer, False), @@ -1911,6 +1947,7 @@ class Route(AWSObject): props: PropsDictType = { "CarrierGatewayId": (str, False), + "CoreNetworkArn": (str, False), "DestinationCidrBlock": (str, False), "DestinationIpv6CidrBlock": (str, False), "DestinationPrefixListId": (str, False), @@ -1962,7 +1999,7 @@ class SecurityGroup(AWSObject): class SecurityGroupEgress(AWSObject): """ - `SecurityGroupEgress `__ + `SecurityGroupEgress `__ """ resource_type = "AWS::EC2::SecurityGroupEgress" @@ -2009,6 +2046,18 @@ def validate(self): validate_security_group_ingress(self) +class SnapshotBlockPublicAccess(AWSObject): + """ + `SnapshotBlockPublicAccess `__ + """ + + resource_type = "AWS::EC2::SnapshotBlockPublicAccess" + + props: PropsDictType = { + "State": (str, True), + } + + class IamInstanceProfileSpecification(AWSProperty): """ `IamInstanceProfileSpecification `__ @@ -2282,8 +2331,10 @@ class Subnet(AWSObject): "AvailabilityZoneId": (str, False), "CidrBlock": (str, False), "EnableDns64": (boolean, False), + "Ipv4NetmaskLength": (integer, False), "Ipv6CidrBlock": (str, False), "Ipv6Native": (boolean, False), + "Ipv6NetmaskLength": (integer, False), "MapPublicIpOnLaunch": (boolean, False), "OutpostArn": (str, False), "PrivateDnsNameOptionsOnLaunch": (PrivateDnsNameOptionsOnLaunch, False), @@ -2310,7 +2361,7 @@ class SubnetCidrBlock(AWSObject): class SubnetNetworkAclAssociation(AWSObject): """ - `SubnetNetworkAclAssociation `__ + `SubnetNetworkAclAssociation `__ """ resource_type = "AWS::EC2::SubnetNetworkAclAssociation" @@ -2762,7 +2813,7 @@ class VPCEndpointServicePermissions(AWSObject): class VPCGatewayAttachment(AWSObject): """ - `VPCGatewayAttachment `__ + `VPCGatewayAttachment `__ """ resource_type = "AWS::EC2::VPCGatewayAttachment" @@ -3027,6 +3078,7 @@ class DeviceOptions(AWSProperty): """ props: PropsDictType = { + "PublicSigningKeyUrl": (str, False), "TenantId": (str, False), } @@ -3157,7 +3209,7 @@ class Ingress(AWSProperty): class MountPoint(AWSProperty): """ - `MountPoint `__ + `MountPoint `__ """ props: PropsDictType = { @@ -3166,14 +3218,6 @@ class MountPoint(AWSProperty): } -class NoDevice(AWSProperty): - """ - `NoDevice `__ - """ - - props: PropsDictType = {} - - class PeeringAttachmentStatus(AWSProperty): """ `PeeringAttachmentStatus `__ @@ -3224,7 +3268,7 @@ class TransitGatewayRouteTableRoute(AWSProperty): class VolumeProperty(AWSProperty): """ - `VolumeProperty `__ + `VolumeProperty `__ """ props: PropsDictType = { diff --git a/troposphere/ecr.py b/troposphere/ecr.py index 9b95c3638..5b48a3138 100644 --- a/troposphere/ecr.py +++ b/troposphere/ecr.py @@ -48,7 +48,9 @@ class PullThroughCacheRule(AWSObject): resource_type = "AWS::ECR::PullThroughCacheRule" props: PropsDictType = { + "CredentialArn": (str, False), "EcrRepositoryPrefix": (str, False), + "UpstreamRegistry": (str, False), "UpstreamRegistryUrl": (str, False), } diff --git a/troposphere/ecs.py b/troposphere/ecs.py index b6531ba20..b91d9cb2b 100644 --- a/troposphere/ecs.py +++ b/troposphere/ecs.py @@ -51,6 +51,7 @@ class AutoScalingGroupProvider(AWSProperty): props: PropsDictType = { "AutoScalingGroupArn": (str, True), + "ManagedDraining": (str, False), "ManagedScaling": (ManagedScaling, False), "ManagedTerminationProtection": (str, False), } diff --git a/troposphere/efs.py b/troposphere/efs.py index 94d3ac47c..85d36bfad 100644 --- a/troposphere/efs.py +++ b/troposphere/efs.py @@ -82,12 +82,23 @@ def validate(self): validate_backup_policy(self) +class FileSystemProtection(AWSProperty): + """ + `FileSystemProtection `__ + """ + + props: PropsDictType = { + "ReplicationOverwriteProtection": (str, False), + } + + class LifecyclePolicy(AWSProperty): """ `LifecyclePolicy `__ """ props: PropsDictType = { + "TransitionToArchive": (str, False), "TransitionToIA": (str, False), "TransitionToPrimaryStorageClass": (str, False), } @@ -129,6 +140,7 @@ class FileSystem(AWSObject): "BypassPolicyLockoutSafetyCheck": (boolean, False), "Encrypted": (boolean, False), "FileSystemPolicy": (dict, False), + "FileSystemProtection": (FileSystemProtection, False), "FileSystemTags": (Tags, False), "KmsKeyId": (str, False), "LifecyclePolicies": ([LifecyclePolicy], False), diff --git a/troposphere/eks.py b/troposphere/eks.py index eb3d264e3..61244c276 100644 --- a/troposphere/eks.py +++ b/troposphere/eks.py @@ -325,3 +325,19 @@ class Nodegroup(AWSObject): "UpdateConfig": (UpdateConfig, False), "Version": (str, False), } + + +class PodIdentityAssociation(AWSObject): + """ + `PodIdentityAssociation `__ + """ + + resource_type = "AWS::EKS::PodIdentityAssociation" + + props: PropsDictType = { + "ClusterName": (str, True), + "Namespace": (str, True), + "RoleArn": (str, True), + "ServiceAccount": (str, True), + "Tags": (Tags, False), + } diff --git a/troposphere/elasticache.py b/troposphere/elasticache.py index 1f2930d55..56d0638fb 100644 --- a/troposphere/elasticache.py +++ b/troposphere/elasticache.py @@ -263,6 +263,76 @@ class SecurityGroupIngress(AWSObject): } +class DataStorage(AWSProperty): + """ + `DataStorage `__ + """ + + props: PropsDictType = { + "Maximum": (integer, True), + "Unit": (str, True), + } + + +class ECPUPerSecond(AWSProperty): + """ + `ECPUPerSecond `__ + """ + + props: PropsDictType = { + "Maximum": (integer, True), + } + + +class CacheUsageLimits(AWSProperty): + """ + `CacheUsageLimits `__ + """ + + props: PropsDictType = { + "DataStorage": (DataStorage, False), + "ECPUPerSecond": (ECPUPerSecond, False), + } + + +class Endpoint(AWSProperty): + """ + `Endpoint `__ + """ + + props: PropsDictType = { + "Address": (str, False), + "Port": (integer, False), + } + + +class ServerlessCache(AWSObject): + """ + `ServerlessCache `__ + """ + + resource_type = "AWS::ElastiCache::ServerlessCache" + + props: PropsDictType = { + "CacheUsageLimits": (CacheUsageLimits, False), + "DailySnapshotTime": (str, False), + "Description": (str, False), + "Endpoint": (Endpoint, False), + "Engine": (str, True), + "FinalSnapshotName": (str, False), + "KmsKeyId": (str, False), + "MajorEngineVersion": (str, False), + "ReaderEndpoint": (Endpoint, False), + "SecurityGroupIds": ([str], False), + "ServerlessCacheName": (str, True), + "SnapshotArnsToRestore": ([str], False), + "SnapshotRetentionLimit": (integer, False), + "SubnetIds": ([str], False), + "Tags": (Tags, False), + "UserGroupId": (str, False), + } + + class SubnetGroup(AWSObject): """ `SubnetGroup `__ diff --git a/troposphere/elasticloadbalancingv2.py b/troposphere/elasticloadbalancingv2.py index ba5e22501..ab39bd66f 100644 --- a/troposphere/elasticloadbalancingv2.py +++ b/troposphere/elasticloadbalancingv2.py @@ -6,7 +6,7 @@ # *** Do not modify - this file is autogenerated *** -from . import AWSObject, AWSProperty, PropsDictType +from . import AWSObject, AWSProperty, PropsDictType, Tags from .validators import boolean, integer from .validators.elasticloadbalancingv2 import TARGET_TYPE_ALB # noqa: F401 from .validators.elasticloadbalancingv2 import TARGET_TYPE_INSTANCE # noqa: F401 @@ -160,6 +160,18 @@ class Certificate(AWSProperty): } +class MutualAuthentication(AWSProperty): + """ + `MutualAuthentication `__ + """ + + props: PropsDictType = { + "IgnoreClientCertificateExpiry": (boolean, False), + "Mode": (str, False), + "TrustStoreArn": (str, False), + } + + class Listener(AWSObject): """ `Listener `__ @@ -172,6 +184,7 @@ class Listener(AWSObject): "Certificates": ([Certificate], False), "DefaultActions": ([Action], True), "LoadBalancerArn": (str, True), + "MutualAuthentication": (MutualAuthentication, False), "Port": (validate_network_port, False), "Protocol": (str, False), "SslPolicy": (str, False), @@ -445,3 +458,58 @@ class TargetGroup(AWSObject): def validate(self): validate_target_group(self) + + +class TrustStore(AWSObject): + """ + `TrustStore `__ + """ + + resource_type = "AWS::ElasticLoadBalancingV2::TrustStore" + + props: PropsDictType = { + "CaCertificatesBundleS3Bucket": (str, False), + "CaCertificatesBundleS3Key": (str, False), + "CaCertificatesBundleS3ObjectVersion": (str, False), + "Name": (str, False), + "Tags": (Tags, False), + } + + +class RevocationContent(AWSProperty): + """ + `RevocationContent `__ + """ + + props: PropsDictType = { + "RevocationType": (str, False), + "S3Bucket": (str, False), + "S3Key": (str, False), + "S3ObjectVersion": (str, False), + } + + +class TrustStoreRevocation(AWSObject): + """ + `TrustStoreRevocation `__ + """ + + resource_type = "AWS::ElasticLoadBalancingV2::TrustStoreRevocation" + + props: PropsDictType = { + "RevocationContents": ([RevocationContent], False), + "TrustStoreArn": (str, False), + } + + +class TrustStoreRevocationProperty(AWSProperty): + """ + `TrustStoreRevocationProperty `__ + """ + + props: PropsDictType = { + "NumberOfRevokedEntries": (integer, False), + "RevocationId": (str, False), + "RevocationType": (str, False), + "TrustStoreArn": (str, False), + } diff --git a/troposphere/emr.py b/troposphere/emr.py index 1a6bf9a90..5fef69019 100644 --- a/troposphere/emr.py +++ b/troposphere/emr.py @@ -372,6 +372,17 @@ class ManagedScalingPolicy(AWSProperty): } +class PlacementGroupConfig(AWSProperty): + """ + `PlacementGroupConfig `__ + """ + + props: PropsDictType = { + "InstanceRole": (str, True), + "PlacementStrategy": (str, False), + } + + class HadoopJarStepConfig(AWSProperty): """ `HadoopJarStepConfig `__ @@ -412,7 +423,9 @@ class Cluster(AWSObject): "BootstrapActions": ([BootstrapActionConfig], False), "Configurations": ([Configuration], False), "CustomAmiId": (str, False), + "EbsRootVolumeIops": (integer, False), "EbsRootVolumeSize": (integer, False), + "EbsRootVolumeThroughput": (integer, False), "Instances": (JobFlowInstancesConfig, True), "JobFlowRole": (str, True), "KerberosAttributes": (KerberosAttributes, False), @@ -421,6 +434,7 @@ class Cluster(AWSObject): "ManagedScalingPolicy": (ManagedScalingPolicy, False), "Name": (str, True), "OSReleaseLabel": (str, False), + "PlacementGroupConfigs": ([PlacementGroupConfig], False), "ReleaseLabel": (str, False), "ScaleDownBehavior": (str, False), "SecurityConfiguration": (str, False), @@ -511,13 +525,17 @@ class Studio(AWSObject): "AuthMode": (str, True), "DefaultS3Location": (str, True), "Description": (str, False), + "EncryptionKeyArn": (str, False), "EngineSecurityGroupId": (str, True), + "IdcInstanceArn": (str, False), + "IdcUserAssignment": (str, False), "IdpAuthUrl": (str, False), "IdpRelayStateParameterName": (str, False), "Name": (str, True), "ServiceRole": (str, True), "SubnetIds": ([str], True), "Tags": (Tags, False), + "TrustedIdentityPropagationEnabled": (boolean, False), "UserRole": (str, False), "VpcId": (str, True), "WorkspaceSecurityGroupId": (str, True), diff --git a/troposphere/emrserverless.py b/troposphere/emrserverless.py index d73b1dfb3..8d9ea78e7 100644 --- a/troposphere/emrserverless.py +++ b/troposphere/emrserverless.py @@ -31,6 +31,18 @@ class AutoStopConfiguration(AWSProperty): } +class ConfigurationObject(AWSProperty): + """ + `ConfigurationObject `__ + """ + + props: PropsDictType = { + "Classification": (str, True), + "Configurations": ([ConfigurationObject], False), + "Properties": (dict, False), + } + + class ImageConfigurationInput(AWSProperty): """ `ImageConfigurationInput `__ @@ -87,6 +99,42 @@ class MaximumAllowedResources(AWSProperty): } +class ManagedPersistenceMonitoringConfiguration(AWSProperty): + """ + `ManagedPersistenceMonitoringConfiguration `__ + """ + + props: PropsDictType = { + "Enabled": (boolean, False), + "EncryptionKeyArn": (str, False), + } + + +class S3MonitoringConfiguration(AWSProperty): + """ + `S3MonitoringConfiguration `__ + """ + + props: PropsDictType = { + "EncryptionKeyArn": (str, False), + "LogUri": (str, False), + } + + +class MonitoringConfiguration(AWSProperty): + """ + `MonitoringConfiguration `__ + """ + + props: PropsDictType = { + "ManagedPersistenceMonitoringConfiguration": ( + ManagedPersistenceMonitoringConfiguration, + False, + ), + "S3MonitoringConfiguration": (S3MonitoringConfiguration, False), + } + + class NetworkConfiguration(AWSProperty): """ `NetworkConfiguration `__ @@ -122,9 +170,11 @@ class Application(AWSObject): "ImageConfiguration": (ImageConfigurationInput, False), "InitialCapacity": ([InitialCapacityConfigKeyValuePair], False), "MaximumCapacity": (MaximumAllowedResources, False), + "MonitoringConfiguration": (MonitoringConfiguration, False), "Name": (str, False), "NetworkConfiguration": (NetworkConfiguration, False), "ReleaseLabel": (str, True), + "RuntimeConfiguration": ([ConfigurationObject], False), "Tags": (Tags, False), "Type": (str, True), "WorkerTypeSpecifications": (dict, False), diff --git a/troposphere/fis.py b/troposphere/fis.py index 77eea93c5..6c38e7f87 100644 --- a/troposphere/fis.py +++ b/troposphere/fis.py @@ -24,6 +24,17 @@ class ExperimentTemplateAction(AWSProperty): } +class ExperimentTemplateExperimentOptions(AWSProperty): + """ + `ExperimentTemplateExperimentOptions `__ + """ + + props: PropsDictType = { + "AccountTargeting": (str, False), + "EmptyTargetResolutionMode": (str, False), + } + + class CloudWatchLogsConfiguration(AWSProperty): """ `CloudWatchLogsConfiguration `__ @@ -104,9 +115,25 @@ class ExperimentTemplate(AWSObject): props: PropsDictType = { "Actions": (dict, False), "Description": (str, True), + "ExperimentOptions": (ExperimentTemplateExperimentOptions, False), "LogConfiguration": (ExperimentTemplateLogConfiguration, False), "RoleArn": (str, True), "StopConditions": ([ExperimentTemplateStopCondition], True), "Tags": (dict, True), "Targets": (dict, True), } + + +class TargetAccountConfiguration(AWSObject): + """ + `TargetAccountConfiguration `__ + """ + + resource_type = "AWS::FIS::TargetAccountConfiguration" + + props: PropsDictType = { + "AccountId": (str, True), + "Description": (str, False), + "ExperimentTemplateId": (str, True), + "RoleArn": (str, True), + } diff --git a/troposphere/fsx.py b/troposphere/fsx.py index 2521f7495..3d02d62d9 100644 --- a/troposphere/fsx.py +++ b/troposphere/fsx.py @@ -115,9 +115,11 @@ class OntapConfiguration(AWSProperty): "DiskIopsConfiguration": (DiskIopsConfiguration, False), "EndpointIpAddressRange": (str, False), "FsxAdminPassword": (str, False), + "HAPairs": (integer, False), "PreferredSubnetId": (str, False), "RouteTableIds": ([str], False), "ThroughputCapacity": (integer, False), + "ThroughputCapacityPerHAPair": (integer, False), "WeeklyMaintenanceStartTime": (str, False), } @@ -312,6 +314,17 @@ class StorageVirtualMachine(AWSObject): } +class AggregateConfiguration(AWSProperty): + """ + `AggregateConfiguration `__ + """ + + props: PropsDictType = { + "Aggregates": ([str], False), + "ConstituentsPerAggregate": (integer, False), + } + + class AutocommitPeriod(AWSProperty): """ `AutocommitPeriod `__ @@ -378,16 +391,19 @@ class VolumeOntapConfiguration(AWSProperty): """ props: PropsDictType = { + "AggregateConfiguration": (AggregateConfiguration, False), "CopyTagsToBackups": (str, False), "JunctionPath": (str, False), "OntapVolumeType": (str, False), "SecurityStyle": (str, False), - "SizeInMegabytes": (str, True), + "SizeInBytes": (str, False), + "SizeInMegabytes": (str, False), "SnaplockConfiguration": (SnaplockConfiguration, False), "SnapshotPolicy": (str, False), "StorageEfficiencyEnabled": (str, False), "StorageVirtualMachineId": (str, True), "TieringPolicy": (TieringPolicy, False), + "VolumeStyle": (str, False), } diff --git a/troposphere/gamelift.py b/troposphere/gamelift.py index 9fc6ee71d..d4c654afb 100644 --- a/troposphere/gamelift.py +++ b/troposphere/gamelift.py @@ -156,6 +156,37 @@ class RuntimeConfiguration(AWSProperty): } +class TargetConfiguration(AWSProperty): + """ + `TargetConfiguration `__ + """ + + props: PropsDictType = { + "TargetValue": (double, True), + } + + +class ScalingPolicy(AWSProperty): + """ + `ScalingPolicy `__ + """ + + props: PropsDictType = { + "ComparisonOperator": (str, False), + "EvaluationPeriods": (integer, False), + "Location": (str, False), + "MetricName": (str, True), + "Name": (str, True), + "PolicyType": (str, False), + "ScalingAdjustment": (integer, False), + "ScalingAdjustmentType": (str, False), + "Status": (str, False), + "TargetConfiguration": (TargetConfiguration, False), + "Threshold": (double, False), + "UpdateStatus": (str, False), + } + + class Fleet(AWSObject): """ `Fleet `__ @@ -165,6 +196,7 @@ class Fleet(AWSObject): props: PropsDictType = { "AnywhereConfiguration": (AnywhereConfiguration, False), + "ApplyCapacity": (str, False), "BuildId": (str, False), "CertificateConfiguration": (CertificateConfiguration, False), "ComputeType": (str, False), @@ -185,6 +217,7 @@ class Fleet(AWSObject): "PeerVpcId": (str, False), "ResourceCreationLimitPolicy": (ResourceCreationLimitPolicy, False), "RuntimeConfiguration": (RuntimeConfiguration, False), + "ScalingPolicies": ([ScalingPolicy], False), "ScriptId": (str, False), } @@ -256,23 +289,23 @@ class GameServerGroup(AWSObject): } -class Destination(AWSProperty): +class FilterConfiguration(AWSProperty): """ - `Destination `__ + `FilterConfiguration `__ """ props: PropsDictType = { - "DestinationArn": (str, False), + "AllowedLocations": ([str], False), } -class FilterConfiguration(AWSProperty): +class GameSessionQueueDestination(AWSProperty): """ - `FilterConfiguration `__ + `GameSessionQueueDestination `__ """ props: PropsDictType = { - "AllowedLocations": ([str], False), + "DestinationArn": (str, False), } @@ -307,7 +340,7 @@ class GameSessionQueue(AWSObject): props: PropsDictType = { "CustomEventData": (str, False), - "Destinations": ([Destination], False), + "Destinations": ([GameSessionQueueDestination], False), "FilterConfiguration": (FilterConfiguration, False), "Name": (str, True), "NotificationTarget": (str, False), @@ -354,6 +387,7 @@ class MatchmakingConfiguration(AWSObject): "AcceptanceTimeoutSeconds": (integer, False), "AdditionalPlayerCount": (integer, False), "BackfillMode": (str, False), + "CreationTime": (str, False), "CustomEventData": (str, False), "Description": (str, False), "FlexMatchMode": (str, False), @@ -363,6 +397,7 @@ class MatchmakingConfiguration(AWSObject): "Name": (str, True), "NotificationTarget": (str, False), "RequestTimeoutSeconds": (integer, True), + "RuleSetArn": (str, False), "RuleSetName": (str, True), "Tags": (Tags, False), } diff --git a/troposphere/glue.py b/troposphere/glue.py index 528dcdf74..f42fda5e0 100644 --- a/troposphere/glue.py +++ b/troposphere/glue.py @@ -286,6 +286,21 @@ class Crawler(AWSObject): } +class CustomEntityType(AWSObject): + """ + `CustomEntityType `__ + """ + + resource_type = "AWS::Glue::CustomEntityType" + + props: PropsDictType = { + "ContextWords": ([str], False), + "Name": (str, False), + "RegexString": (str, False), + "Tags": (dict, False), + } + + class ConnectionPasswordEncryption(AWSProperty): """ `ConnectionPasswordEncryption `__ diff --git a/troposphere/grafana.py b/troposphere/grafana.py index 96ed76733..9626aa72e 100644 --- a/troposphere/grafana.py +++ b/troposphere/grafana.py @@ -7,7 +7,7 @@ from . import AWSObject, AWSProperty, PropsDictType -from .validators import double +from .validators import boolean, double class NetworkAccessControl(AWSProperty): @@ -103,6 +103,7 @@ class Workspace(AWSObject): "OrganizationRoleName": (str, False), "OrganizationalUnits": ([str], False), "PermissionType": (str, True), + "PluginAdminEnabled": (boolean, False), "RoleArn": (str, False), "SamlConfiguration": (SamlConfiguration, False), "StackSetName": (str, False), diff --git a/troposphere/guardduty.py b/troposphere/guardduty.py index 0fca7cb01..39d200c58 100644 --- a/troposphere/guardduty.py +++ b/troposphere/guardduty.py @@ -100,7 +100,7 @@ class CFNFeatureConfiguration(AWSProperty): class TagItem(AWSProperty): """ - `TagItem `__ + `TagItem `__ """ props: PropsDictType = { @@ -183,12 +183,12 @@ class IPSet(AWSObject): resource_type = "AWS::GuardDuty::IPSet" props: PropsDictType = { - "Activate": (boolean, True), - "DetectorId": (str, True), + "Activate": (boolean, False), + "DetectorId": (str, False), "Format": (str, True), "Location": (str, True), - "Name": (str, False), - "Tags": (Tags, False), + "Name": (str, True), + "Tags": ([TagItem], False), } @@ -231,10 +231,10 @@ class ThreatIntelSet(AWSObject): resource_type = "AWS::GuardDuty::ThreatIntelSet" props: PropsDictType = { - "Activate": (boolean, True), - "DetectorId": (str, True), + "Activate": (boolean, False), + "DetectorId": (str, False), "Format": (str, True), "Location": (str, True), - "Name": (str, False), - "Tags": (Tags, False), + "Name": (str, True), + "Tags": ([TagItem], False), } diff --git a/troposphere/iam.py b/troposphere/iam.py index 07bf9fa5e..dff64a782 100644 --- a/troposphere/iam.py +++ b/troposphere/iam.py @@ -37,7 +37,7 @@ class AccessKey(AWSObject): class Policy(AWSProperty): """ - `Policy `__ + `Policy `__ """ props: PropsDictType = { @@ -230,7 +230,7 @@ class LoginProfile(AWSProperty): class User(AWSObject): """ - `User `__ + `User `__ """ resource_type = "AWS::IAM::User" diff --git a/troposphere/imagebuilder.py b/troposphere/imagebuilder.py index d8769a985..1163c7c85 100644 --- a/troposphere/imagebuilder.py +++ b/troposphere/imagebuilder.py @@ -453,3 +453,128 @@ class InfrastructureConfiguration(AWSObject): "Tags": (dict, False), "TerminateInstanceOnFailure": (boolean, False), } + + +class IncludeResources(AWSProperty): + """ + `IncludeResources `__ + """ + + props: PropsDictType = { + "Amis": (boolean, False), + "Containers": (boolean, False), + "Snapshots": (boolean, False), + } + + +class Action(AWSProperty): + """ + `Action `__ + """ + + props: PropsDictType = { + "IncludeResources": (IncludeResources, False), + "Type": (str, True), + } + + +class LastLaunched(AWSProperty): + """ + `LastLaunched `__ + """ + + props: PropsDictType = { + "Unit": (str, True), + "Value": (integer, True), + } + + +class AmiExclusionRules(AWSProperty): + """ + `AmiExclusionRules `__ + """ + + props: PropsDictType = { + "IsPublic": (boolean, False), + "LastLaunched": (LastLaunched, False), + "Regions": ([str], False), + "SharedAccounts": ([str], False), + "TagMap": (dict, False), + } + + +class ExclusionRules(AWSProperty): + """ + `ExclusionRules `__ + """ + + props: PropsDictType = { + "Amis": (AmiExclusionRules, False), + "TagMap": (dict, False), + } + + +class Filter(AWSProperty): + """ + `Filter `__ + """ + + props: PropsDictType = { + "RetainAtLeast": (integer, False), + "Type": (str, True), + "Unit": (str, False), + "Value": (integer, True), + } + + +class PolicyDetail(AWSProperty): + """ + `PolicyDetail `__ + """ + + props: PropsDictType = { + "Action": (Action, True), + "ExclusionRules": (ExclusionRules, False), + "Filter": (Filter, True), + } + + +class RecipeSelection(AWSProperty): + """ + `RecipeSelection `__ + """ + + props: PropsDictType = { + "Name": (str, True), + "SemanticVersion": (str, False), + } + + +class ResourceSelection(AWSProperty): + """ + `ResourceSelection `__ + """ + + props: PropsDictType = { + "Recipes": ([RecipeSelection], False), + "TagMap": (dict, False), + } + + +class LifecyclePolicy(AWSObject): + """ + `LifecyclePolicy `__ + """ + + resource_type = "AWS::ImageBuilder::LifecyclePolicy" + + props: PropsDictType = { + "Description": (str, False), + "ExecutionRole": (str, True), + "Name": (str, True), + "PolicyDetails": ([PolicyDetail], True), + "ResourceSelection": (ResourceSelection, True), + "ResourceType": (str, True), + "Status": (str, False), + "Tags": (dict, False), + } diff --git a/troposphere/iot.py b/troposphere/iot.py index dd4aa35c9..7af87f9af 100644 --- a/troposphere/iot.py +++ b/troposphere/iot.py @@ -714,6 +714,7 @@ class Behavior(AWSProperty): props: PropsDictType = { "Criteria": (BehaviorCriteria, False), + "ExportMetric": (boolean, False), "Metric": (str, False), "MetricDimension": (MetricDimension, False), "Name": (str, True), @@ -727,11 +728,23 @@ class MetricToRetain(AWSProperty): """ props: PropsDictType = { + "ExportMetric": (boolean, False), "Metric": (str, True), "MetricDimension": (MetricDimension, False), } +class MetricsExportConfig(AWSProperty): + """ + `MetricsExportConfig `__ + """ + + props: PropsDictType = { + "MqttTopic": (str, True), + "RoleArn": (str, True), + } + + class SecurityProfile(AWSObject): """ `SecurityProfile `__ @@ -743,6 +756,7 @@ class SecurityProfile(AWSObject): "AdditionalMetricsToRetainV2": ([MetricToRetain], False), "AlertTargets": (dict, False), "Behaviors": ([Behavior], False), + "MetricsExportConfig": (MetricsExportConfig, False), "SecurityProfileDescription": (str, False), "SecurityProfileName": (str, False), "Tags": (Tags, False), diff --git a/troposphere/iottwinmaker.py b/troposphere/iottwinmaker.py index 69d2d7d83..76bdde7ec 100644 --- a/troposphere/iottwinmaker.py +++ b/troposphere/iottwinmaker.py @@ -11,6 +11,16 @@ from .validators.iottwinmaker import validate_listvalue, validate_nestedtypel +class CompositeComponentType(AWSProperty): + """ + `CompositeComponentType `__ + """ + + props: PropsDictType = { + "ComponentTypeId": (str, False), + } + + class LambdaFunction(AWSProperty): """ `LambdaFunction `__ @@ -134,6 +144,7 @@ class ComponentType(AWSObject): props: PropsDictType = { "ComponentTypeId": (str, True), + "CompositeComponentTypes": (dict, False), "Description": (str, False), "ExtendsFrom": ([str], False), "Functions": (dict, False), @@ -213,6 +224,22 @@ class Component(AWSProperty): } +class CompositeComponent(AWSProperty): + """ + `CompositeComponent `__ + """ + + props: PropsDictType = { + "ComponentName": (str, False), + "ComponentPath": (str, False), + "ComponentTypeId": (str, False), + "Description": (str, False), + "Properties": (dict, False), + "PropertyGroups": (dict, False), + "Status": (Status, False), + } + + class Entity(AWSObject): """ `Entity `__ @@ -222,6 +249,7 @@ class Entity(AWSObject): props: PropsDictType = { "Components": (dict, False), + "CompositeComponents": (dict, False), "Description": (str, False), "EntityId": (str, False), "EntityName": (str, True), diff --git a/troposphere/logs.py b/troposphere/logs.py index cd5e5f5c0..d4468c694 100644 --- a/troposphere/logs.py +++ b/troposphere/logs.py @@ -30,6 +30,50 @@ class AccountPolicy(AWSObject): } +class Delivery(AWSObject): + """ + `Delivery `__ + """ + + resource_type = "AWS::Logs::Delivery" + + props: PropsDictType = { + "DeliveryDestinationArn": (str, True), + "DeliverySourceName": (str, True), + "Tags": (Tags, False), + } + + +class DeliveryDestination(AWSObject): + """ + `DeliveryDestination `__ + """ + + resource_type = "AWS::Logs::DeliveryDestination" + + props: PropsDictType = { + "DeliveryDestinationPolicy": (dict, False), + "DestinationResourceArn": (str, False), + "Name": (str, True), + "Tags": (Tags, False), + } + + +class DeliverySource(AWSObject): + """ + `DeliverySource `__ + """ + + resource_type = "AWS::Logs::DeliverySource" + + props: PropsDictType = { + "LogType": (str, False), + "Name": (str, True), + "ResourceArn": (str, False), + "Tags": (Tags, False), + } + + class Destination(AWSObject): """ `Destination `__ @@ -45,6 +89,24 @@ class Destination(AWSObject): } +class LogAnomalyDetector(AWSObject): + """ + `LogAnomalyDetector `__ + """ + + resource_type = "AWS::Logs::LogAnomalyDetector" + + props: PropsDictType = { + "AccountId": (str, False), + "AnomalyVisibilityTime": (double, False), + "DetectorName": (str, False), + "EvaluationFrequency": (str, False), + "FilterPattern": (str, False), + "KmsKeyId": (str, False), + "LogGroupArnList": ([str], False), + } + + class LogGroup(AWSObject): """ `LogGroup `__ @@ -55,6 +117,7 @@ class LogGroup(AWSObject): props: PropsDictType = { "DataProtectionPolicy": (dict, False), "KmsKeyId": (str, False), + "LogGroupClass": (str, False), "LogGroupName": (str, False), "RetentionInDays": (validate_loggroup_retention_in_days, False), "Tags": (Tags, False), diff --git a/troposphere/managedblockchain.py b/troposphere/managedblockchain.py index b79876847..f37cdd1df 100644 --- a/troposphere/managedblockchain.py +++ b/troposphere/managedblockchain.py @@ -19,6 +19,7 @@ class Accessor(AWSObject): props: PropsDictType = { "AccessorType": (str, True), + "NetworkType": (str, False), "Tags": (Tags, False), } diff --git a/troposphere/medialive.py b/troposphere/medialive.py index 6aa025b45..129796c7c 100644 --- a/troposphere/medialive.py +++ b/troposphere/medialive.py @@ -6,7 +6,7 @@ # *** Do not modify - this file is autogenerated *** -from . import AWSObject, AWSProperty, PropsDictType +from . import AWSObject, AWSProperty, PropsDictType, Tags from .validators import double, integer @@ -560,6 +560,7 @@ class FeatureActivations(AWSProperty): props: PropsDictType = { "InputPrepareScheduleActions": (str, False), + "OutputStaticImageOverlayScheduleActions": (str, False), } @@ -577,6 +578,36 @@ class InputLossBehavior(AWSProperty): } +class EpochLockingSettings(AWSProperty): + """ + `EpochLockingSettings `__ + """ + + props: PropsDictType = { + "CustomEpoch": (str, False), + "JamSyncTime": (str, False), + } + + +class PipelineLockingSettings(AWSProperty): + """ + `PipelineLockingSettings `__ + """ + + props: PropsDictType = {} + + +class OutputLockingSettings(AWSProperty): + """ + `OutputLockingSettings `__ + """ + + props: PropsDictType = { + "EpochLockingSettings": (EpochLockingSettings, False), + "PipelineLockingSettings": (PipelineLockingSettings, False), + } + + class GlobalConfiguration(AWSProperty): """ `GlobalConfiguration `__ @@ -587,6 +618,7 @@ class GlobalConfiguration(AWSProperty): "InputEndAction": (str, False), "InputLossBehavior": (InputLossBehavior, False), "OutputLockingMode": (str, False), + "OutputLockingSettings": (OutputLockingSettings, False), "OutputTimingSource": (str, False), "SupportLowFramerateInputs": (str, False), } @@ -2220,6 +2252,156 @@ class InputSecurityGroup(AWSObject): } +class MultiplexMediaConnectOutputDestinationSettings(AWSProperty): + """ + `MultiplexMediaConnectOutputDestinationSettings `__ + """ + + props: PropsDictType = { + "EntitlementArn": (str, False), + } + + +class MultiplexOutputDestination(AWSProperty): + """ + `MultiplexOutputDestination `__ + """ + + props: PropsDictType = { + "MultiplexMediaConnectOutputDestinationSettings": ( + MultiplexMediaConnectOutputDestinationSettings, + False, + ), + } + + +class MultiplexSettings(AWSProperty): + """ + `MultiplexSettings `__ + """ + + props: PropsDictType = { + "MaximumVideoBufferDelayMilliseconds": (integer, False), + "TransportStreamBitrate": (integer, True), + "TransportStreamId": (integer, True), + "TransportStreamReservedBitrate": (integer, False), + } + + +class Multiplex(AWSObject): + """ + `Multiplex `__ + """ + + resource_type = "AWS::MediaLive::Multiplex" + + props: PropsDictType = { + "AvailabilityZones": ([str], True), + "Destinations": ([MultiplexOutputDestination], False), + "MultiplexSettings": (MultiplexSettings, True), + "Name": (str, True), + "Tags": (Tags, False), + } + + +class MultiplexProgramPacketIdentifiersMap(AWSProperty): + """ + `MultiplexProgramPacketIdentifiersMap `__ + """ + + props: PropsDictType = { + "AudioPids": ([integer], False), + "DvbSubPids": ([integer], False), + "DvbTeletextPid": (integer, False), + "EtvPlatformPid": (integer, False), + "EtvSignalPid": (integer, False), + "KlvDataPids": ([integer], False), + "PcrPid": (integer, False), + "PmtPid": (integer, False), + "PrivateMetadataPid": (integer, False), + "Scte27Pids": ([integer], False), + "Scte35Pid": (integer, False), + "TimedMetadataPid": (integer, False), + "VideoPid": (integer, False), + } + + +class MultiplexProgramPipelineDetail(AWSProperty): + """ + `MultiplexProgramPipelineDetail `__ + """ + + props: PropsDictType = { + "ActiveChannelPipeline": (str, False), + "PipelineId": (str, False), + } + + +class MultiplexProgramServiceDescriptor(AWSProperty): + """ + `MultiplexProgramServiceDescriptor `__ + """ + + props: PropsDictType = { + "ProviderName": (str, True), + "ServiceName": (str, True), + } + + +class MultiplexStatmuxVideoSettings(AWSProperty): + """ + `MultiplexStatmuxVideoSettings `__ + """ + + props: PropsDictType = { + "MaximumBitrate": (integer, False), + "MinimumBitrate": (integer, False), + "Priority": (integer, False), + } + + +class MultiplexVideoSettings(AWSProperty): + """ + `MultiplexVideoSettings `__ + """ + + props: PropsDictType = { + "ConstantBitrate": (integer, False), + "StatmuxSettings": (MultiplexStatmuxVideoSettings, False), + } + + +class MultiplexProgramSettings(AWSProperty): + """ + `MultiplexProgramSettings `__ + """ + + props: PropsDictType = { + "PreferredChannelPipeline": (str, False), + "ProgramNumber": (integer, True), + "ServiceDescriptor": (MultiplexProgramServiceDescriptor, False), + "VideoSettings": (MultiplexVideoSettings, False), + } + + +class Multiplexprogram(AWSObject): + """ + `Multiplexprogram `__ + """ + + resource_type = "AWS::MediaLive::Multiplexprogram" + + props: PropsDictType = { + "ChannelId": (str, False), + "MultiplexId": (str, False), + "MultiplexProgramSettings": (MultiplexProgramSettings, False), + "PacketIdentifiersMap": (MultiplexProgramPacketIdentifiersMap, False), + "PipelineDetails": ([MultiplexProgramPipelineDetail], False), + "PreferredChannelPipeline": (str, False), + "ProgramName": (str, False), + } + + class InputDeviceRequest(AWSProperty): """ `InputDeviceRequest `__ diff --git a/troposphere/mediapackagev2.py b/troposphere/mediapackagev2.py index 05404b560..7bdf172c6 100644 --- a/troposphere/mediapackagev2.py +++ b/troposphere/mediapackagev2.py @@ -53,6 +53,19 @@ class ChannelPolicy(AWSObject): } +class FilterConfiguration(AWSProperty): + """ + `FilterConfiguration `__ + """ + + props: PropsDictType = { + "End": (str, False), + "ManifestFilter": (str, False), + "Start": (str, False), + "TimeDelaySeconds": (integer, False), + } + + class ScteHls(AWSProperty): """ `ScteHls `__ @@ -70,6 +83,7 @@ class HlsManifestConfiguration(AWSProperty): props: PropsDictType = { "ChildManifestName": (str, False), + "FilterConfiguration": (FilterConfiguration, False), "ManifestName": (str, True), "ManifestWindowSeconds": (integer, False), "ProgramDateTimeIntervalSeconds": (integer, False), @@ -85,6 +99,7 @@ class LowLatencyHlsManifestConfiguration(AWSProperty): props: PropsDictType = { "ChildManifestName": (str, False), + "FilterConfiguration": (FilterConfiguration, False), "ManifestName": (str, True), "ManifestWindowSeconds": (integer, False), "ProgramDateTimeIntervalSeconds": (integer, False), diff --git a/troposphere/mwaa.py b/troposphere/mwaa.py index ce795fe5e..248acd752 100644 --- a/troposphere/mwaa.py +++ b/troposphere/mwaa.py @@ -58,6 +58,7 @@ class Environment(AWSObject): "AirflowConfigurationOptions": (dict, False), "AirflowVersion": (str, False), "DagS3Path": (str, False), + "EndpointManagement": (str, False), "EnvironmentClass": (str, False), "ExecutionRoleArn": (str, False), "KmsKey": (str, False), diff --git a/troposphere/opensearchserverless.py b/troposphere/opensearchserverless.py index 2d1801da4..5f7d21cc1 100644 --- a/troposphere/opensearchserverless.py +++ b/troposphere/opensearchserverless.py @@ -35,11 +35,27 @@ class Collection(AWSObject): props: PropsDictType = { "Description": (str, False), "Name": (str, True), + "StandbyReplicas": (str, False), "Tags": (Tags, False), "Type": (str, False), } +class LifecyclePolicy(AWSObject): + """ + `LifecyclePolicy `__ + """ + + resource_type = "AWS::OpenSearchServerless::LifecyclePolicy" + + props: PropsDictType = { + "Description": (str, False), + "Name": (str, True), + "Policy": (str, True), + "Type": (str, True), + } + + class SamlConfigOptions(AWSProperty): """ `SamlConfigOptions `__ diff --git a/troposphere/opensearchservice.py b/troposphere/opensearchservice.py index e34f459d1..dbbd72f70 100644 --- a/troposphere/opensearchservice.py +++ b/troposphere/opensearchservice.py @@ -249,6 +249,7 @@ class Domain(AWSObject): "EBSOptions": (EBSOptions, False), "EncryptionAtRestOptions": (EncryptionAtRestOptions, False), "EngineVersion": (validate_search_service_engine_version, False), + "IPAddressType": (str, False), "LogPublishingOptions": (dict, False), "NodeToNodeEncryptionOptions": (NodeToNodeEncryptionOptions, False), "OffPeakWindowOptions": (OffPeakWindowOptions, False), diff --git a/troposphere/osis.py b/troposphere/osis.py index e75062cbd..562d10bf4 100644 --- a/troposphere/osis.py +++ b/troposphere/osis.py @@ -10,13 +10,33 @@ from .validators import boolean, integer +class BufferOptions(AWSProperty): + """ + `BufferOptions `__ + """ + + props: PropsDictType = { + "PersistentBufferEnabled": (boolean, True), + } + + +class EncryptionAtRestOptions(AWSProperty): + """ + `EncryptionAtRestOptions `__ + """ + + props: PropsDictType = { + "KmsKeyArn": (str, True), + } + + class CloudWatchLogDestination(AWSProperty): """ `CloudWatchLogDestination `__ """ props: PropsDictType = { - "LogGroup": (str, False), + "LogGroup": (str, True), } @@ -38,7 +58,7 @@ class VpcOptions(AWSProperty): props: PropsDictType = { "SecurityGroupIds": ([str], False), - "SubnetIds": ([str], False), + "SubnetIds": ([str], True), } @@ -50,6 +70,8 @@ class Pipeline(AWSObject): resource_type = "AWS::OSIS::Pipeline" props: PropsDictType = { + "BufferOptions": (BufferOptions, False), + "EncryptionAtRestOptions": (EncryptionAtRestOptions, False), "LogPublishingOptions": (LogPublishingOptions, False), "MaxUnits": (integer, True), "MinUnits": (integer, True), diff --git a/troposphere/pipes.py b/troposphere/pipes.py index 5233d76be..f90c98fc9 100644 --- a/troposphere/pipes.py +++ b/troposphere/pipes.py @@ -33,6 +33,53 @@ class PipeEnrichmentParameters(AWSProperty): } +class CloudwatchLogsLogDestination(AWSProperty): + """ + `CloudwatchLogsLogDestination `__ + """ + + props: PropsDictType = { + "LogGroupArn": (str, False), + } + + +class FirehoseLogDestination(AWSProperty): + """ + `FirehoseLogDestination `__ + """ + + props: PropsDictType = { + "DeliveryStreamArn": (str, False), + } + + +class S3LogDestination(AWSProperty): + """ + `S3LogDestination `__ + """ + + props: PropsDictType = { + "BucketName": (str, False), + "BucketOwner": (str, False), + "OutputFormat": (str, False), + "Prefix": (str, False), + } + + +class PipeLogConfiguration(AWSProperty): + """ + `PipeLogConfiguration `__ + """ + + props: PropsDictType = { + "CloudwatchLogsLogDestination": (CloudwatchLogsLogDestination, False), + "FirehoseLogDestination": (FirehoseLogDestination, False), + "IncludeExecutionData": ([str], False), + "Level": (str, False), + "S3LogDestination": (S3LogDestination, False), + } + + class Filter(AWSProperty): """ `Filter `__ @@ -633,6 +680,7 @@ class Pipe(AWSObject): "DesiredState": (str, False), "Enrichment": (str, False), "EnrichmentParameters": (PipeEnrichmentParameters, False), + "LogConfiguration": (PipeLogConfiguration, False), "Name": (str, False), "RoleArn": (str, True), "Source": (str, True), diff --git a/troposphere/quicksight.py b/troposphere/quicksight.py index abd7022fb..72ed77b9e 100644 --- a/troposphere/quicksight.py +++ b/troposphere/quicksight.py @@ -162,6 +162,17 @@ class AnalysisDefaults(AWSProperty): } +class AssetOptions(AWSProperty): + """ + `AssetOptions `__ + """ + + props: PropsDictType = { + "Timezone": (str, False), + "WeekStart": (str, False), + } + + class CalculatedField(AWSProperty): """ `CalculatedField `__ @@ -5670,6 +5681,7 @@ class AnalysisDefinition(AWSProperty): "ColumnConfigurations": ([ColumnConfiguration], False), "DataSetIdentifierDeclarations": ([DataSetIdentifierDeclaration], True), "FilterGroups": ([FilterGroup], False), + "Options": (AssetOptions, False), "ParameterDeclarations": ([ParameterDeclaration], False), "Sheets": ([SheetDefinition], False), } @@ -5983,11 +5995,22 @@ class DashboardVersionDefinition(AWSProperty): "ColumnConfigurations": ([ColumnConfiguration], False), "DataSetIdentifierDeclarations": ([DataSetIdentifierDeclaration], True), "FilterGroups": ([FilterGroup], False), + "Options": (AssetOptions, False), "ParameterDeclarations": ([ParameterDeclaration], False), "Sheets": ([SheetDefinition], False), } +class LinkSharingConfiguration(AWSProperty): + """ + `LinkSharingConfiguration `__ + """ + + props: PropsDictType = { + "Permissions": ([ResourcePermission], False), + } + + class Dashboard(AWSObject): """ `Dashboard `__ @@ -6000,6 +6023,7 @@ class Dashboard(AWSObject): "DashboardId": (str, True), "DashboardPublishOptions": (DashboardPublishOptions, False), "Definition": (DashboardVersionDefinition, False), + "LinkSharingConfiguration": (LinkSharingConfiguration, False), "Name": (str, True), "Parameters": (Parameters, False), "Permissions": ([ResourcePermission], False), @@ -6271,6 +6295,7 @@ class CastColumnTypeOperation(AWSProperty): "ColumnName": (str, True), "Format": (str, False), "NewColumnType": (str, True), + "SubType": (str, False), } @@ -6419,6 +6444,7 @@ class InputColumn(AWSProperty): props: PropsDictType = { "Name": (str, True), + "SubType": (str, False), "Type": (str, True), } @@ -6766,6 +6792,19 @@ class SqlServerParameters(AWSProperty): } +class StarburstParameters(AWSProperty): + """ + `StarburstParameters `__ + """ + + props: PropsDictType = { + "Catalog": (str, True), + "Host": (str, True), + "Port": (double, True), + "ProductType": (str, False), + } + + class TeradataParameters(AWSProperty): """ `TeradataParameters `__ @@ -6778,6 +6817,18 @@ class TeradataParameters(AWSProperty): } +class TrinoParameters(AWSProperty): + """ + `TrinoParameters `__ + """ + + props: PropsDictType = { + "Catalog": (str, True), + "Host": (str, True), + "Port": (double, True), + } + + class DataSourceParameters(AWSProperty): """ `DataSourceParameters `__ @@ -6801,7 +6852,9 @@ class DataSourceParameters(AWSProperty): "SnowflakeParameters": (SnowflakeParameters, False), "SparkParameters": (SparkParameters, False), "SqlServerParameters": (SqlServerParameters, False), + "StarburstParameters": (StarburstParameters, False), "TeradataParameters": (TeradataParameters, False), + "TrinoParameters": (TrinoParameters, False), } @@ -7032,6 +7085,7 @@ class TemplateVersionDefinition(AWSProperty): "ColumnConfigurations": ([ColumnConfiguration], False), "DataSetConfigurations": ([DataSetConfiguration], True), "FilterGroups": ([FilterGroup], False), + "Options": (AssetOptions, False), "ParameterDeclarations": ([ParameterDeclaration], False), "Sheets": ([SheetDefinition], False), } diff --git a/troposphere/rds.py b/troposphere/rds.py index e85442d5a..25a79282f 100644 --- a/troposphere/rds.py +++ b/troposphere/rds.py @@ -120,6 +120,7 @@ class DBCluster(AWSObject): "Domain": (str, False), "DomainIAMRoleName": (str, False), "EnableCloudwatchLogsExports": ([str], False), + "EnableGlobalWriteForwarding": (boolean, False), "EnableHttpEndpoint": (boolean, False), "EnableIAMDatabaseAuthentication": (boolean, False), "Engine": (validate_engine, False), @@ -249,6 +250,7 @@ class DBInstance(AWSObject): "DBSecurityGroups": (list, False), "DBSnapshotIdentifier": (str, False), "DBSubnetGroupName": (str, False), + "DedicatedLogVolume": (boolean, False), "DeleteAutomatedBackups": (boolean, False), "DeletionProtection": (boolean, False), "Domain": (str, False), diff --git a/troposphere/redshift.py b/troposphere/redshift.py index 93e47432d..b758027a2 100644 --- a/troposphere/redshift.py +++ b/troposphere/redshift.py @@ -72,6 +72,7 @@ class Cluster(AWSObject): "ManualSnapshotRetentionPeriod": (integer, False), "MasterUserPassword": (str, True), "MasterUsername": (str, True), + "MultiAZ": (boolean, False), "NodeType": (str, True), "NumberOfNodes": (integer, False), "OwnerAccount": (str, False), diff --git a/troposphere/resourceexplorer2.py b/troposphere/resourceexplorer2.py index 2e076571c..1a71bb373 100644 --- a/troposphere/resourceexplorer2.py +++ b/troposphere/resourceexplorer2.py @@ -34,23 +34,23 @@ class Index(AWSObject): } -class Filters(AWSProperty): +class IncludedProperty(AWSProperty): """ - `Filters `__ + `IncludedProperty `__ """ props: PropsDictType = { - "FilterString": (str, True), + "Name": (str, True), } -class IncludedProperty(AWSProperty): +class SearchFilter(AWSProperty): """ - `IncludedProperty `__ + `SearchFilter `__ """ props: PropsDictType = { - "Name": (str, True), + "FilterString": (str, True), } @@ -62,8 +62,9 @@ class View(AWSObject): resource_type = "AWS::ResourceExplorer2::View" props: PropsDictType = { - "Filters": (Filters, False), + "Filters": (SearchFilter, False), "IncludedProperties": ([IncludedProperty], False), + "Scope": (str, False), "Tags": (dict, False), "ViewName": (str, True), } diff --git a/troposphere/route53resolver.py b/troposphere/route53resolver.py index 4dbef3eb6..c01aa14fd 100644 --- a/troposphere/route53resolver.py +++ b/troposphere/route53resolver.py @@ -139,6 +139,7 @@ class ResolverEndpoint(AWSObject): "Name": (str, False), "OutpostArn": (str, False), "PreferredInstanceType": (str, False), + "Protocols": ([str], False), "ResolverEndpointType": (str, False), "SecurityGroupIds": ([str], True), "Tags": (Tags, False), @@ -180,6 +181,7 @@ class TargetAddress(AWSProperty): "Ip": (str, False), "Ipv6": (str, False), "Port": (str, False), + "Protocol": (str, False), } diff --git a/troposphere/s3.py b/troposphere/s3.py index d4c4fa42d..4a42b86bc 100644 --- a/troposphere/s3.py +++ b/troposphere/s3.py @@ -24,6 +24,72 @@ ) +class AccessGrantsLocationConfiguration(AWSProperty): + """ + `AccessGrantsLocationConfiguration `__ + """ + + props: PropsDictType = { + "S3SubPrefix": (str, True), + } + + +class Grantee(AWSProperty): + """ + `Grantee `__ + """ + + props: PropsDictType = { + "GranteeIdentifier": (str, True), + "GranteeType": (str, True), + } + + +class AccessGrant(AWSObject): + """ + `AccessGrant `__ + """ + + resource_type = "AWS::S3::AccessGrant" + + props: PropsDictType = { + "AccessGrantsLocationConfiguration": (AccessGrantsLocationConfiguration, False), + "AccessGrantsLocationId": (str, True), + "ApplicationArn": (str, False), + "Grantee": (Grantee, True), + "Permission": (str, True), + "S3PrefixType": (str, False), + "Tags": (Tags, False), + } + + +class AccessGrantsInstance(AWSObject): + """ + `AccessGrantsInstance `__ + """ + + resource_type = "AWS::S3::AccessGrantsInstance" + + props: PropsDictType = { + "IdentityCenterArn": (str, False), + "Tags": (Tags, False), + } + + +class AccessGrantsLocation(AWSObject): + """ + `AccessGrantsLocation `__ + """ + + resource_type = "AWS::S3::AccessGrantsLocation" + + props: PropsDictType = { + "IamRoleArn": (str, False), + "LocationScope": (str, False), + "Tags": (Tags, False), + } + + class PublicAccessBlockConfiguration(AWSProperty): """ `PublicAccessBlockConfiguration `__ @@ -166,7 +232,7 @@ class BucketEncryption(AWSProperty): class CorsRules(AWSProperty): """ - `CorsRules `__ + `CorsRules `__ """ props: PropsDictType = { @@ -181,7 +247,7 @@ class CorsRules(AWSProperty): class CorsConfiguration(AWSProperty): """ - `CorsConfiguration `__ + `CorsConfiguration `__ """ props: PropsDictType = { @@ -242,7 +308,7 @@ class AbortIncompleteMultipartUpload(AWSProperty): class LifecycleRuleTransition(AWSProperty): """ - `LifecycleRuleTransition `__ + `LifecycleRuleTransition `__ """ props: PropsDictType = { @@ -254,7 +320,7 @@ class LifecycleRuleTransition(AWSProperty): class NoncurrentVersionExpiration(AWSProperty): """ - `NoncurrentVersionExpiration `__ + `NoncurrentVersionExpiration `__ """ props: PropsDictType = { @@ -265,7 +331,7 @@ class NoncurrentVersionExpiration(AWSProperty): class NoncurrentVersionTransition(AWSProperty): """ - `NoncurrentVersionTransition `__ + `NoncurrentVersionTransition `__ """ props: PropsDictType = { @@ -277,7 +343,7 @@ class NoncurrentVersionTransition(AWSProperty): class LifecycleRule(AWSProperty): """ - `LifecycleRule `__ + `LifecycleRule `__ """ props: PropsDictType = { @@ -290,8 +356,8 @@ class LifecycleRule(AWSProperty): "NoncurrentVersionExpirationInDays": (integer, False), "NoncurrentVersionTransition": (NoncurrentVersionTransition, False), "NoncurrentVersionTransitions": ([NoncurrentVersionTransition], False), - "ObjectSizeGreaterThan": (integer, False), - "ObjectSizeLessThan": (integer, False), + "ObjectSizeGreaterThan": (str, False), + "ObjectSizeLessThan": (str, False), "Prefix": (str, False), "Status": (str, True), "TagFilters": ([TagFilter], False), @@ -305,7 +371,7 @@ def validate(self): class LifecycleConfiguration(AWSProperty): """ - `LifecycleConfiguration `__ + `LifecycleConfiguration `__ """ props: PropsDictType = { @@ -313,14 +379,36 @@ class LifecycleConfiguration(AWSProperty): } +class PartitionedPrefix(AWSProperty): + """ + `PartitionedPrefix `__ + """ + + props: PropsDictType = { + "PartitionDateSource": (str, False), + } + + +class TargetObjectKeyFormat(AWSProperty): + """ + `TargetObjectKeyFormat `__ + """ + + props: PropsDictType = { + "PartitionedPrefix": (PartitionedPrefix, False), + "SimplePrefix": (dict, False), + } + + class LoggingConfiguration(AWSProperty): """ - `LoggingConfiguration `__ + `LoggingConfiguration `__ """ props: PropsDictType = { "DestinationBucketName": (validate_s3_bucket_name, False), "LogFilePrefix": (str, False), + "TargetObjectKeyFormat": (TargetObjectKeyFormat, False), } @@ -339,48 +427,83 @@ class MetricsConfiguration(AWSProperty): class EventBridgeConfiguration(AWSProperty): """ - `EventBridgeConfiguration `__ + `EventBridgeConfiguration `__ """ props: PropsDictType = { - "EventBridgeEnabled": (boolean, False), + "EventBridgeEnabled": (boolean, True), } -class Rules(AWSProperty): +class MatchObjectAge(AWSProperty): """ - `Rules `__ + `MatchObjectAge `__ """ props: PropsDictType = { - "Name": (str, True), - "Value": (str, True), + "DaysGreaterThan": (integer, False), + "DaysLessThan": (integer, False), } -class S3Key(AWSProperty): +class MatchObjectSize(AWSProperty): """ - `S3Key `__ + `MatchObjectSize `__ """ props: PropsDictType = { - "Rules": ([Rules], True), + "BytesGreaterThan": (integer, False), + "BytesLessThan": (integer, False), + } + + +class And(AWSProperty): + """ + `And `__ + """ + + props: PropsDictType = { + "MatchAnyPrefix": ([str], False), + "MatchAnySuffix": ([str], False), + "MatchAnyTag": (Tags, False), + "MatchObjectAge": (MatchObjectAge, False), + "MatchObjectSize": (MatchObjectSize, False), + } + + +class Or(AWSProperty): + """ + `Or `__ + """ + + props: PropsDictType = { + "MatchAnyPrefix": ([str], False), + "MatchAnySuffix": ([str], False), + "MatchAnyTag": (Tags, False), + "MatchObjectAge": (MatchObjectAge, False), + "MatchObjectSize": (MatchObjectSize, False), } class Filter(AWSProperty): """ - `Filter `__ + `Filter `__ """ props: PropsDictType = { - "S3Key": (S3Key, True), + "And": (And, False), + "MatchAnyPrefix": ([str], False), + "MatchAnySuffix": ([str], False), + "MatchAnyTag": (Tags, False), + "MatchObjectAge": (MatchObjectAge, False), + "MatchObjectSize": (MatchObjectSize, False), + "Or": (Or, False), } class LambdaConfigurations(AWSProperty): """ - `LambdaConfigurations `__ + `LambdaConfigurations `__ """ props: PropsDictType = { @@ -392,7 +515,7 @@ class LambdaConfigurations(AWSProperty): class QueueConfigurations(AWSProperty): """ - `QueueConfigurations `__ + `QueueConfigurations `__ """ props: PropsDictType = { @@ -404,7 +527,7 @@ class QueueConfigurations(AWSProperty): class TopicConfigurations(AWSProperty): """ - `TopicConfigurations `__ + `TopicConfigurations `__ """ props: PropsDictType = { @@ -416,7 +539,7 @@ class TopicConfigurations(AWSProperty): class NotificationConfiguration(AWSProperty): """ - `NotificationConfiguration `__ + `NotificationConfiguration `__ """ props: PropsDictType = { @@ -544,7 +667,7 @@ class ReplicationTime(AWSProperty): class ReplicationConfigurationRulesDestination(AWSProperty): """ - `ReplicationConfigurationRulesDestination `__ + `ReplicationConfigurationRulesDestination `__ """ props: PropsDictType = { @@ -614,7 +737,7 @@ class SourceSelectionCriteria(AWSProperty): class ReplicationConfigurationRules(AWSProperty): """ - `ReplicationConfigurationRules `__ + `ReplicationConfigurationRules `__ """ props: PropsDictType = { @@ -642,7 +765,7 @@ class ReplicationConfiguration(AWSProperty): class VersioningConfiguration(AWSProperty): """ - `VersioningConfiguration `__ + `VersioningConfiguration `__ """ props: PropsDictType = { @@ -652,7 +775,7 @@ class VersioningConfiguration(AWSProperty): class RedirectAllRequestsTo(AWSProperty): """ - `RedirectAllRequestsTo `__ + `RedirectAllRequestsTo `__ """ props: PropsDictType = { @@ -663,7 +786,7 @@ class RedirectAllRequestsTo(AWSProperty): class RedirectRule(AWSProperty): """ - `RedirectRule `__ + `RedirectRule `__ """ props: PropsDictType = { @@ -677,7 +800,7 @@ class RedirectRule(AWSProperty): class RoutingRuleCondition(AWSProperty): """ - `RoutingRuleCondition `__ + `RoutingRuleCondition `__ """ props: PropsDictType = { @@ -688,7 +811,7 @@ class RoutingRuleCondition(AWSProperty): class RoutingRule(AWSProperty): """ - `RoutingRule `__ + `RoutingRule `__ """ props: PropsDictType = { @@ -699,7 +822,7 @@ class RoutingRule(AWSProperty): class WebsiteConfiguration(AWSProperty): """ - `WebsiteConfiguration `__ + `WebsiteConfiguration `__ """ props: PropsDictType = { @@ -712,7 +835,7 @@ class WebsiteConfiguration(AWSProperty): class Bucket(AWSObject): """ - `Bucket `__ + `Bucket `__ """ resource_type = "AWS::S3::Bucket" @@ -882,6 +1005,27 @@ class BucketLevel(AWSProperty): } +class StorageLensGroupSelectionCriteria(AWSProperty): + """ + `StorageLensGroupSelectionCriteria `__ + """ + + props: PropsDictType = { + "Exclude": ([str], False), + "Include": ([str], False), + } + + +class StorageLensGroupLevel(AWSProperty): + """ + `StorageLensGroupLevel `__ + """ + + props: PropsDictType = { + "StorageLensGroupSelectionCriteria": (StorageLensGroupSelectionCriteria, False), + } + + class AccountLevel(AWSProperty): """ `AccountLevel `__ @@ -893,6 +1037,7 @@ class AccountLevel(AWSProperty): "AdvancedDataProtectionMetrics": (AdvancedDataProtectionMetrics, False), "BucketLevel": (BucketLevel, True), "DetailedStatusCodesMetrics": (DetailedStatusCodesMetrics, False), + "StorageLensGroupLevel": (StorageLensGroupLevel, False), } @@ -1004,6 +1149,20 @@ class StorageLens(AWSObject): } +class StorageLensGroup(AWSObject): + """ + `StorageLensGroup `__ + """ + + resource_type = "AWS::S3::StorageLensGroup" + + props: PropsDictType = { + "Filter": (Filter, True), + "Name": (str, True), + "Tags": (Tags, False), + } + + class PolicyStatus(AWSProperty): """ `PolicyStatus `__ @@ -1012,3 +1171,24 @@ class PolicyStatus(AWSProperty): props: PropsDictType = { "IsPublic": (str, True), } + + +class Rules(AWSProperty): + """ + `Rules `__ + """ + + props: PropsDictType = { + "Name": (str, True), + "Value": (str, True), + } + + +class S3Key(AWSProperty): + """ + `S3Key `__ + """ + + props: PropsDictType = { + "Rules": ([Rules], True), + } diff --git a/troposphere/sagemaker.py b/troposphere/sagemaker.py index 7d49cf9f0..8bc7aa0c4 100644 --- a/troposphere/sagemaker.py +++ b/troposphere/sagemaker.py @@ -466,6 +466,93 @@ class DomainSettings(AWSProperty): } +class CodeEditorAppSettings(AWSProperty): + """ + `CodeEditorAppSettings `__ + """ + + props: PropsDictType = { + "DefaultResourceSpec": (ResourceSpec, False), + "LifecycleConfigArns": ([str], False), + } + + +class EFSFileSystemConfig(AWSProperty): + """ + `EFSFileSystemConfig `__ + """ + + props: PropsDictType = { + "FileSystemId": (str, True), + "FileSystemPath": (str, False), + } + + +class CustomFileSystemConfig(AWSProperty): + """ + `CustomFileSystemConfig `__ + """ + + props: PropsDictType = { + "EFSFileSystemConfig": (EFSFileSystemConfig, False), + } + + +class CustomPosixUserConfig(AWSProperty): + """ + `CustomPosixUserConfig `__ + """ + + props: PropsDictType = { + "Gid": (integer, True), + "Uid": (integer, True), + } + + +class DefaultEbsStorageSettings(AWSProperty): + """ + `DefaultEbsStorageSettings `__ + """ + + props: PropsDictType = { + "DefaultEbsVolumeSizeInGb": (integer, True), + "MaximumEbsVolumeSizeInGb": (integer, True), + } + + +class DefaultSpaceStorageSettings(AWSProperty): + """ + `DefaultSpaceStorageSettings `__ + """ + + props: PropsDictType = { + "DefaultEbsStorageSettings": (DefaultEbsStorageSettings, False), + } + + +class CodeRepositoryProperty(AWSProperty): + """ + `CodeRepositoryProperty `__ + """ + + props: PropsDictType = { + "RepositoryUrl": (str, True), + } + + +class JupyterLabAppSettings(AWSProperty): + """ + `JupyterLabAppSettings `__ + """ + + props: PropsDictType = { + "CodeRepositories": ([CodeRepositoryProperty], False), + "CustomImages": ([CustomImage], False), + "DefaultResourceSpec": (ResourceSpec, False), + "LifecycleConfigArns": ([str], False), + } + + class RStudioServerProAppSettings(AWSProperty): """ `RStudioServerProAppSettings `__ @@ -495,12 +582,19 @@ class UserSettings(AWSProperty): """ props: PropsDictType = { + "CodeEditorAppSettings": (CodeEditorAppSettings, False), + "CustomFileSystemConfigs": ([CustomFileSystemConfig], False), + "CustomPosixUserConfig": (CustomPosixUserConfig, False), + "DefaultLandingUri": (str, False), "ExecutionRole": (str, False), + "JupyterLabAppSettings": (JupyterLabAppSettings, False), "JupyterServerAppSettings": (JupyterServerAppSettings, False), "KernelGatewayAppSettings": (KernelGatewayAppSettings, False), "RStudioServerProAppSettings": (RStudioServerProAppSettings, False), "SecurityGroups": ([str], False), "SharingSettings": (SharingSettings, False), + "SpaceStorageSettings": (DefaultSpaceStorageSettings, False), + "StudioWebPortal": (str, False), } @@ -796,6 +890,28 @@ class ExplainerConfig(AWSProperty): } +class ManagedInstanceScaling(AWSProperty): + """ + `ManagedInstanceScaling `__ + """ + + props: PropsDictType = { + "MaxInstanceCount": (integer, False), + "MinInstanceCount": (integer, False), + "Status": (str, False), + } + + +class RoutingConfig(AWSProperty): + """ + `RoutingConfig `__ + """ + + props: PropsDictType = { + "RoutingStrategy": (str, False), + } + + class ServerlessConfig(AWSProperty): """ `ServerlessConfig `__ @@ -818,10 +934,12 @@ class ProductionVariant(AWSProperty): "ContainerStartupHealthCheckTimeoutInSeconds": (integer, False), "EnableSSMAccess": (boolean, False), "InitialInstanceCount": (integer, False), - "InitialVariantWeight": (double, True), + "InitialVariantWeight": (double, False), "InstanceType": (str, False), + "ManagedInstanceScaling": (ManagedInstanceScaling, False), "ModelDataDownloadTimeoutInSeconds": (integer, False), - "ModelName": (str, True), + "ModelName": (str, False), + "RoutingConfig": (RoutingConfig, False), "ServerlessConfig": (ServerlessConfig, False), "VariantName": (str, True), "VolumeSizeInGB": (integer, False), @@ -838,12 +956,15 @@ class EndpointConfig(AWSObject): props: PropsDictType = { "AsyncInferenceConfig": (AsyncInferenceConfig, False), "DataCaptureConfig": (DataCaptureConfig, False), + "EnableNetworkIsolation": (boolean, False), "EndpointConfigName": (str, False), + "ExecutionRoleArn": (str, False), "ExplainerConfig": (ExplainerConfig, False), "KmsKeyId": (str, False), "ProductionVariants": ([ProductionVariant], True), "ShadowProductionVariants": ([ProductionVariant], False), "Tags": (Tags, False), + "VpcConfig": (VpcConfig, False), } @@ -912,6 +1033,7 @@ class OnlineStoreConfig(AWSProperty): props: PropsDictType = { "EnableOnlineStore": (boolean, False), "SecurityConfig": (OnlineStoreSecurityConfig, False), + "StorageType": (str, False), } @@ -973,6 +1095,101 @@ class ImageVersion(AWSObject): } +class InferenceComponentRuntimeConfig(AWSProperty): + """ + `InferenceComponentRuntimeConfig `__ + """ + + props: PropsDictType = { + "CopyCount": (integer, False), + "CurrentCopyCount": (integer, False), + "DesiredCopyCount": (integer, False), + } + + +class InferenceComponentComputeResourceRequirements(AWSProperty): + """ + `InferenceComponentComputeResourceRequirements `__ + """ + + props: PropsDictType = { + "MaxMemoryRequiredInMb": (integer, False), + "MinMemoryRequiredInMb": (integer, False), + "NumberOfAcceleratorDevicesRequired": (double, False), + "NumberOfCpuCoresRequired": (double, False), + } + + +class DeployedImage(AWSProperty): + """ + `DeployedImage `__ + """ + + props: PropsDictType = { + "ResolutionTime": (str, False), + "ResolvedImage": (str, False), + "SpecifiedImage": (str, False), + } + + +class InferenceComponentContainerSpecification(AWSProperty): + """ + `InferenceComponentContainerSpecification `__ + """ + + props: PropsDictType = { + "ArtifactUrl": (str, False), + "DeployedImage": (DeployedImage, False), + "Environment": (dict, False), + "Image": (str, False), + } + + +class InferenceComponentStartupParameters(AWSProperty): + """ + `InferenceComponentStartupParameters `__ + """ + + props: PropsDictType = { + "ContainerStartupHealthCheckTimeoutInSeconds": (integer, False), + "ModelDataDownloadTimeoutInSeconds": (integer, False), + } + + +class InferenceComponentSpecification(AWSProperty): + """ + `InferenceComponentSpecification `__ + """ + + props: PropsDictType = { + "ComputeResourceRequirements": ( + InferenceComponentComputeResourceRequirements, + True, + ), + "Container": (InferenceComponentContainerSpecification, False), + "ModelName": (str, False), + "StartupParameters": (InferenceComponentStartupParameters, False), + } + + +class InferenceComponent(AWSObject): + """ + `InferenceComponent `__ + """ + + resource_type = "AWS::SageMaker::InferenceComponent" + + props: PropsDictType = { + "EndpointArn": (str, False), + "EndpointName": (str, True), + "InferenceComponentName": (str, False), + "RuntimeConfig": (InferenceComponentRuntimeConfig, True), + "Specification": (InferenceComponentSpecification, True), + "Tags": (Tags, False), + "VariantName": (str, True), + } + + class DataStorageConfig(AWSProperty): """ `DataStorageConfig `__ @@ -1097,6 +1314,27 @@ class ImageConfig(AWSProperty): } +class S3DataSource(AWSProperty): + """ + `S3DataSource `__ + """ + + props: PropsDictType = { + "S3DataType": (str, True), + "S3Uri": (str, True), + } + + +class ModelDataSource(AWSProperty): + """ + `ModelDataSource `__ + """ + + props: PropsDictType = { + "S3DataSource": (S3DataSource, True), + } + + class MultiModelConfig(AWSProperty): """ `MultiModelConfig `__ @@ -1119,6 +1357,7 @@ class ContainerDefinition(AWSProperty): "ImageConfig": (ImageConfig, False), "InferenceSpecificationName": (str, False), "Mode": (str, False), + "ModelDataSource": (ModelDataSource, False), "ModelDataUrl": (str, False), "ModelPackageName": (str, False), "MultiModelConfig": (MultiModelConfig, False), @@ -1145,7 +1384,7 @@ class Model(AWSObject): props: PropsDictType = { "Containers": ([ContainerDefinition], False), "EnableNetworkIsolation": (boolean, False), - "ExecutionRoleArn": (str, True), + "ExecutionRoleArn": (str, False), "InferenceExecutionConfig": (InferenceExecutionConfig, False), "ModelName": (str, False), "PrimaryContainer": (ContainerDefinition, False), @@ -1848,17 +2087,6 @@ class SourceAlgorithmSpecification(AWSProperty): } -class S3DataSource(AWSProperty): - """ - `S3DataSource `__ - """ - - props: PropsDictType = { - "S3DataType": (str, True), - "S3Uri": (str, True), - } - - class DataSource(AWSProperty): """ `DataSource `__ diff --git a/troposphere/sns.py b/troposphere/sns.py index b2e63c49a..4a847ab5a 100644 --- a/troposphere/sns.py +++ b/troposphere/sns.py @@ -27,11 +27,25 @@ class SubscriptionResource(AWSObject): "RawMessageDelivery": (boolean, False), "RedrivePolicy": (dict, False), "Region": (str, False), + "ReplayPolicy": (dict, False), "SubscriptionRoleArn": (str, False), "TopicArn": (str, True), } +class LoggingConfig(AWSProperty): + """ + `LoggingConfig `__ + """ + + props: PropsDictType = { + "FailureFeedbackRoleArn": (str, False), + "Protocol": (str, True), + "SuccessFeedbackRoleArn": (str, False), + "SuccessFeedbackSampleRate": (str, False), + } + + class Subscription(AWSProperty): """ `Subscription `__ @@ -54,6 +68,7 @@ class Topic(AWSObject): "ArchivePolicy": (dict, False), "ContentBasedDeduplication": (boolean, False), "DataProtectionPolicy": (dict, False), + "DeliveryStatusLogging": ([LoggingConfig], False), "DisplayName": (str, False), "FifoTopic": (boolean, False), "KmsMasterKeyId": (str, False), diff --git a/troposphere/transfer.py b/troposphere/transfer.py index 0ddccef50..04a06d5bd 100644 --- a/troposphere/transfer.py +++ b/troposphere/transfer.py @@ -151,6 +151,16 @@ class ProtocolDetails(AWSProperty): } +class S3StorageOptions(AWSProperty): + """ + `S3StorageOptions `__ + """ + + props: PropsDictType = { + "DirectoryListingOptimization": (str, False), + } + + class WorkflowDetail(AWSProperty): """ `WorkflowDetail `__ @@ -192,6 +202,7 @@ class Server(AWSObject): "PreAuthenticationLoginBanner": (str, False), "ProtocolDetails": (ProtocolDetails, False), "Protocols": ([str], False), + "S3StorageOptions": (S3StorageOptions, False), "SecurityPolicyName": (str, False), "StructuredLogDestinations": ([str], False), "Tags": (Tags, False), @@ -207,6 +218,7 @@ class HomeDirectoryMapEntry(AWSProperty): props: PropsDictType = { "Entry": (str, True), "Target": (str, True), + "Type": (str, False), }