diff --git a/apis/v1alpha1/ack-generate-metadata.yaml b/apis/v1alpha1/ack-generate-metadata.yaml index ee63afdc..0b98d120 100755 --- a/apis/v1alpha1/ack-generate-metadata.yaml +++ b/apis/v1alpha1/ack-generate-metadata.yaml @@ -1,13 +1,13 @@ ack_generate_info: - build_date: "2024-06-28T14:33:25Z" - build_hash: 14cef51778d471698018b6c38b604181a6948248 - go_version: go1.22.2 - version: v0.34.0 -api_directory_checksum: 73afd1cf92f1261c45bbb52544adf4da5c6a7cd0 + build_date: "2024-08-05T20:19:04Z" + build_hash: e8ec3d013609c4f72464df94830e00dcf2a09a81 + go_version: go1.22.5 + version: v0.35.0-1-ge8ec3d0-dirty +api_directory_checksum: c92b699e48896ca26bae434dcca111365ecaba4b api_version: v1alpha1 aws_sdk_go_version: v1.49.0 generator_config_info: - file_checksum: 3c359b3f45716af86c99ab2ea0f2ab50eeae5dc9 + file_checksum: a87842d9103cad1a69d43f202415138c717a9120 original_file_name: generator.yaml last_modification: reason: API generation diff --git a/apis/v1alpha1/cache_parameter_group.go b/apis/v1alpha1/cache_parameter_group.go index a74dd72c..71335998 100644 --- a/apis/v1alpha1/cache_parameter_group.go +++ b/apis/v1alpha1/cache_parameter_group.go @@ -29,7 +29,7 @@ type CacheParameterGroupSpec struct { // can be used with. // // Valid values are: memcached1.4 | memcached1.5 | memcached1.6 | redis2.6 | - // redis2.8 | redis3.2 | redis4.0 | redis5.0 | redis6.x + // redis2.8 | redis3.2 | redis4.0 | redis5.0 | redis6.x | redis7 // +kubebuilder:validation:Required CacheParameterGroupFamily *string `json:"cacheParameterGroupFamily"` // A user-specified name for the cache parameter group. diff --git a/apis/v1alpha1/generator.yaml b/apis/v1alpha1/generator.yaml index 4183d7a4..e720f941 100644 --- a/apis/v1alpha1/generator.yaml +++ b/apis/v1alpha1/generator.yaml @@ -25,6 +25,8 @@ resources: service_name: sns resource: Topic path: Status.ACKResourceMetadata.ARN + LogDeliveryConfigurations: + is_immutable: true AuthToken: is_secret: true PreferredAvailabilityZone: @@ -70,6 +72,8 @@ resources: - InvalidParameterValue - InvalidParameterCombination hooks: + sdk_create_pre_build_request: + template_path: hooks/cache_cluster/sdk_create_pre_build_request.go.tpl sdk_create_post_set_output: template_path: hooks/cache_cluster/sdk_create_post_set_output.go.tpl sdk_delete_pre_build_request: @@ -347,5 +351,24 @@ ignore: - CreateReplicationGroupInput.GlobalReplicationGroupId - CreateReplicationGroupInput.AutoMinorVersionUpgrade - CreateReplicationGroupInput.NumCacheClusters - - CacheCluster.LogDeliveryConfigurations - - PendingModifiedValues.LogDeliveryConfigurations \ No newline at end of file + - CreateReplicationGroupInput.IpDiscovery + - CreateReplicationGroupInput.ClusterMode + - CreateReplicationGroupInput.NetworkType + - CreateReplicationGroupInput.ServerlessCacheSnapshotName + - CreateReplicationGroupInput.TransitEncryptionMode + - CreateCacheClusterInput.AuthenticationMode + - CreateCacheClusterInput.ModifyCacheClusterInput + - PendingModifiedValues.LogDeliveryConfigurations + - PendingModifiedValues.ClusterMode + - CacheSubnetGroup.SupportedNetworkTypes + - Subnet.SupportedNetworkTypes + - CreateUserInput.AuthenticationMode + - ReplicationGroup.ClusterMode + - ReplicationGroup.IpDiscovery + - ReplicationGroup.NetworkType + - ReplicationGroup.TransitEncryptionMode + - ReplicationGroupPendingModifiedValues.ClusterMode + - ReplicationGroupPendingModifiedValues.TransitEncryptionEnabled + - ReplicationGroupPendingModifiedValues.TransitEncryptionMode + - CreateUserGroupInput.ServerlessCaches + - CreateUserGroupOutput.ServerlessCaches \ No newline at end of file diff --git a/apis/v1alpha1/replication_group.go b/apis/v1alpha1/replication_group.go index 48f9bfbd..dde873a4 100644 --- a/apis/v1alpha1/replication_group.go +++ b/apis/v1alpha1/replication_group.go @@ -72,44 +72,45 @@ type ReplicationGroupSpec struct { // the current generation types provide more memory and computational power // at lower cost when compared to their equivalent previous generation counterparts. // - // - General purpose: Current generation: M6g node types (available only - // for Redis engine version 5.0.6 onward and for Memcached engine version - // 1.5.16 onward): cache.m6g.large, cache.m6g.xlarge, cache.m6g.2xlarge, - // cache.m6g.4xlarge, cache.m6g.8xlarge, cache.m6g.12xlarge, cache.m6g.16xlarge - // For region availability, see Supported Node Types (https://docs.aws.amazon.com/AmazonElastiCache/latest/red-ug/CacheNodes.SupportedTypes.html#CacheNodes.SupportedTypesByRegion) - // M5 node types: cache.m5.large, cache.m5.xlarge, cache.m5.2xlarge, cache.m5.4xlarge, - // cache.m5.12xlarge, cache.m5.24xlarge M4 node types: cache.m4.large, cache.m4.xlarge, - // cache.m4.2xlarge, cache.m4.4xlarge, cache.m4.10xlarge T4g node types (available - // only for Redis engine version 5.0.6 onward and Memcached engine version - // 1.5.16 onward): cache.t4g.micro, cache.t4g.small, cache.t4g.medium T3 - // node types: cache.t3.micro, cache.t3.small, cache.t3.medium T2 node types: - // cache.t2.micro, cache.t2.small, cache.t2.medium Previous generation: (not - // recommended. Existing clusters are still supported but creation of new - // clusters is not supported for these types.) T1 node types: cache.t1.micro - // M1 node types: cache.m1.small, cache.m1.medium, cache.m1.large, cache.m1.xlarge - // M3 node types: cache.m3.medium, cache.m3.large, cache.m3.xlarge, cache.m3.2xlarge + // - General purpose: Current generation: M7g node types: cache.m7g.large, + // cache.m7g.xlarge, cache.m7g.2xlarge, cache.m7g.4xlarge, cache.m7g.8xlarge, + // cache.m7g.12xlarge, cache.m7g.16xlarge For region availability, see Supported + // Node Types (https://docs.aws.amazon.com/AmazonElastiCache/latest/red-ug/CacheNodes.SupportedTypes.html#CacheNodes.SupportedTypesByRegion) + // M6g node types (available only for Redis engine version 5.0.6 onward and + // for Memcached engine version 1.5.16 onward): cache.m6g.large, cache.m6g.xlarge, + // cache.m6g.2xlarge, cache.m6g.4xlarge, cache.m6g.8xlarge, cache.m6g.12xlarge, + // cache.m6g.16xlarge M5 node types: cache.m5.large, cache.m5.xlarge, cache.m5.2xlarge, + // cache.m5.4xlarge, cache.m5.12xlarge, cache.m5.24xlarge M4 node types: + // cache.m4.large, cache.m4.xlarge, cache.m4.2xlarge, cache.m4.4xlarge, cache.m4.10xlarge + // T4g node types (available only for Redis engine version 5.0.6 onward and + // Memcached engine version 1.5.16 onward): cache.t4g.micro, cache.t4g.small, + // cache.t4g.medium T3 node types: cache.t3.micro, cache.t3.small, cache.t3.medium + // T2 node types: cache.t2.micro, cache.t2.small, cache.t2.medium Previous + // generation: (not recommended. Existing clusters are still supported but + // creation of new clusters is not supported for these types.) T1 node types: + // cache.t1.micro M1 node types: cache.m1.small, cache.m1.medium, cache.m1.large, + // cache.m1.xlarge M3 node types: cache.m3.medium, cache.m3.large, cache.m3.xlarge, + // cache.m3.2xlarge // // - Compute optimized: Previous generation: (not recommended. Existing clusters // are still supported but creation of new clusters is not supported for // these types.) C1 node types: cache.c1.xlarge // - // - Memory optimized with data tiering: Current generation: R6gd node types - // (available only for Redis engine version 6.2 onward). cache.r6gd.xlarge, - // cache.r6gd.2xlarge, cache.r6gd.4xlarge, cache.r6gd.8xlarge, cache.r6gd.12xlarge, - // cache.r6gd.16xlarge - // - // - Memory optimized: Current generation: R6g node types (available only - // for Redis engine version 5.0.6 onward and for Memcached engine version - // 1.5.16 onward). cache.r6g.large, cache.r6g.xlarge, cache.r6g.2xlarge, - // cache.r6g.4xlarge, cache.r6g.8xlarge, cache.r6g.12xlarge, cache.r6g.16xlarge - // For region availability, see Supported Node Types (https://docs.aws.amazon.com/AmazonElastiCache/latest/red-ug/CacheNodes.SupportedTypes.html#CacheNodes.SupportedTypesByRegion) - // R5 node types: cache.r5.large, cache.r5.xlarge, cache.r5.2xlarge, cache.r5.4xlarge, - // cache.r5.12xlarge, cache.r5.24xlarge R4 node types: cache.r4.large, cache.r4.xlarge, - // cache.r4.2xlarge, cache.r4.4xlarge, cache.r4.8xlarge, cache.r4.16xlarge - // Previous generation: (not recommended. Existing clusters are still supported - // but creation of new clusters is not supported for these types.) M2 node - // types: cache.m2.xlarge, cache.m2.2xlarge, cache.m2.4xlarge R3 node types: - // cache.r3.large, cache.r3.xlarge, cache.r3.2xlarge, cache.r3.4xlarge, cache.r3.8xlarge + // - Memory optimized: Current generation: R7g node types: cache.r7g.large, + // cache.r7g.xlarge, cache.r7g.2xlarge, cache.r7g.4xlarge, cache.r7g.8xlarge, + // cache.r7g.12xlarge, cache.r7g.16xlarge For region availability, see Supported + // Node Types (https://docs.aws.amazon.com/AmazonElastiCache/latest/red-ug/CacheNodes.SupportedTypes.html#CacheNodes.SupportedTypesByRegion) + // R6g node types (available only for Redis engine version 5.0.6 onward and + // for Memcached engine version 1.5.16 onward): cache.r6g.large, cache.r6g.xlarge, + // cache.r6g.2xlarge, cache.r6g.4xlarge, cache.r6g.8xlarge, cache.r6g.12xlarge, + // cache.r6g.16xlarge R5 node types: cache.r5.large, cache.r5.xlarge, cache.r5.2xlarge, + // cache.r5.4xlarge, cache.r5.12xlarge, cache.r5.24xlarge R4 node types: + // cache.r4.large, cache.r4.xlarge, cache.r4.2xlarge, cache.r4.4xlarge, cache.r4.8xlarge, + // cache.r4.16xlarge Previous generation: (not recommended. Existing clusters + // are still supported but creation of new clusters is not supported for + // these types.) M2 node types: cache.m2.xlarge, cache.m2.2xlarge, cache.m2.4xlarge + // R3 node types: cache.r3.large, cache.r3.xlarge, cache.r3.2xlarge, cache.r3.4xlarge, + // cache.r3.8xlarge // // Additional node type info // @@ -152,7 +153,7 @@ type ReplicationGroupSpec struct { // +kubebuilder:validation:Required Description *string `json:"description"` // The name of the cache engine to be used for the clusters in this replication - // group. Must be Redis. + // group. The value must be set to Redis. Engine *string `json:"engine,omitempty"` // The version number of the cache engine to be used for the clusters in this // replication group. To view the supported cache engine versions, use the DescribeCacheEngineVersions @@ -302,10 +303,6 @@ type ReplicationGroupSpec struct { Tags []*Tag `json:"tags,omitempty"` // A flag that enables in-transit encryption when set to true. // - // You cannot modify the value of TransitEncryptionEnabled after the cluster - // is created. To enable in-transit encryption on a cluster you must set TransitEncryptionEnabled - // to true when you create a cluster. - // // This parameter is valid only if the Engine parameter is redis, the EngineVersion // parameter is 3.2.6, 4.x or later, and the cluster is being created in an // Amazon VPC. diff --git a/apis/v1alpha1/snapshot.go b/apis/v1alpha1/snapshot.go index 8b29231e..9f499206 100644 --- a/apis/v1alpha1/snapshot.go +++ b/apis/v1alpha1/snapshot.go @@ -75,45 +75,45 @@ type SnapshotStatus struct { // the current generation types provide more memory and computational power // at lower cost when compared to their equivalent previous generation counterparts. // - // * General purpose: Current generation: M6g node types (available only - // for Redis engine version 5.0.6 onward and for Memcached engine version - // 1.5.16 onward). cache.m6g.large, cache.m6g.xlarge, cache.m6g.2xlarge, - // cache.m6g.4xlarge, cache.m6g.8xlarge, cache.m6g.12xlarge, cache.m6g.16xlarge - // For region availability, see Supported Node Types (https://docs.aws.amazon.com/AmazonElastiCache/latest/red-ug/CacheNodes.SupportedTypes.html#CacheNodes.SupportedTypesByRegion) - // M5 node types: cache.m5.large, cache.m5.xlarge, cache.m5.2xlarge, cache.m5.4xlarge, - // cache.m5.12xlarge, cache.m5.24xlarge M4 node types: cache.m4.large, cache.m4.xlarge, - // cache.m4.2xlarge, cache.m4.4xlarge, cache.m4.10xlarge T4g node types (available - // only for Redis engine version 5.0.6 onward and Memcached engine version - // 1.5.16 onward): cache.t4g.micro, cache.t4g.small, cache.t4g.medium T3 - // node types: cache.t3.micro, cache.t3.small, cache.t3.medium T2 node types: - // cache.t2.micro, cache.t2.small, cache.t2.medium Previous generation: (not - // recommended. Existing clusters are still supported but creation of new - // clusters is not supported for these types.) T1 node types: cache.t1.micro - // M1 node types: cache.m1.small, cache.m1.medium, cache.m1.large, cache.m1.xlarge - // M3 node types: cache.m3.medium, cache.m3.large, cache.m3.xlarge, cache.m3.2xlarge + // * General purpose: Current generation: M7g node types: cache.m7g.large, + // cache.m7g.xlarge, cache.m7g.2xlarge, cache.m7g.4xlarge, cache.m7g.8xlarge, + // cache.m7g.12xlarge, cache.m7g.16xlarge For region availability, see Supported + // Node Types (https://docs.aws.amazon.com/AmazonElastiCache/latest/red-ug/CacheNodes.SupportedTypes.html#CacheNodes.SupportedTypesByRegion) + // M6g node types (available only for Redis engine version 5.0.6 onward and + // for Memcached engine version 1.5.16 onward): cache.m6g.large, cache.m6g.xlarge, + // cache.m6g.2xlarge, cache.m6g.4xlarge, cache.m6g.8xlarge, cache.m6g.12xlarge, + // cache.m6g.16xlarge M5 node types: cache.m5.large, cache.m5.xlarge, cache.m5.2xlarge, + // cache.m5.4xlarge, cache.m5.12xlarge, cache.m5.24xlarge M4 node types: + // cache.m4.large, cache.m4.xlarge, cache.m4.2xlarge, cache.m4.4xlarge, cache.m4.10xlarge + // T4g node types (available only for Redis engine version 5.0.6 onward and + // Memcached engine version 1.5.16 onward): cache.t4g.micro, cache.t4g.small, + // cache.t4g.medium T3 node types: cache.t3.micro, cache.t3.small, cache.t3.medium + // T2 node types: cache.t2.micro, cache.t2.small, cache.t2.medium Previous + // generation: (not recommended. Existing clusters are still supported but + // creation of new clusters is not supported for these types.) T1 node types: + // cache.t1.micro M1 node types: cache.m1.small, cache.m1.medium, cache.m1.large, + // cache.m1.xlarge M3 node types: cache.m3.medium, cache.m3.large, cache.m3.xlarge, + // cache.m3.2xlarge // // * Compute optimized: Previous generation: (not recommended. Existing clusters // are still supported but creation of new clusters is not supported for // these types.) C1 node types: cache.c1.xlarge // - // * Memory optimized with data tiering: Current generation: R6gd node types - // (available only for Redis engine version 6.2 onward). cache.r6gd.xlarge, - // cache.r6gd.2xlarge, cache.r6gd.4xlarge, cache.r6gd.8xlarge, cache.r6gd.12xlarge, - // cache.r6gd.16xlarge - // - // * Memory optimized: Current generation: R6g node types (available only - // for Redis engine version 5.0.6 onward and for Memcached engine version - // 1.5.16 onward). cache.r6g.large, cache.r6g.xlarge, cache.r6g.2xlarge, - // cache.r6g.4xlarge, cache.r6g.8xlarge, cache.r6g.12xlarge, cache.r6g.16xlarge - // For region availability, see Supported Node Types (https://docs.aws.amazon.com/AmazonElastiCache/latest/red-ug/CacheNodes.SupportedTypes.html#CacheNodes.SupportedTypesByRegion) - // For region availability, see Supported Node Types (https://docs.aws.amazon.com/AmazonElastiCache/latest/red-ug/CacheNodes.SupportedTypes.html#CacheNodes.SupportedTypesByRegion) - // R5 node types: cache.r5.large, cache.r5.xlarge, cache.r5.2xlarge, cache.r5.4xlarge, - // cache.r5.12xlarge, cache.r5.24xlarge R4 node types: cache.r4.large, cache.r4.xlarge, - // cache.r4.2xlarge, cache.r4.4xlarge, cache.r4.8xlarge, cache.r4.16xlarge - // Previous generation: (not recommended. Existing clusters are still supported - // but creation of new clusters is not supported for these types.) M2 node - // types: cache.m2.xlarge, cache.m2.2xlarge, cache.m2.4xlarge R3 node types: - // cache.r3.large, cache.r3.xlarge, cache.r3.2xlarge, cache.r3.4xlarge, cache.r3.8xlarge + // * Memory optimized: Current generation: R7g node types: cache.r7g.large, + // cache.r7g.xlarge, cache.r7g.2xlarge, cache.r7g.4xlarge, cache.r7g.8xlarge, + // cache.r7g.12xlarge, cache.r7g.16xlarge For region availability, see Supported + // Node Types (https://docs.aws.amazon.com/AmazonElastiCache/latest/red-ug/CacheNodes.SupportedTypes.html#CacheNodes.SupportedTypesByRegion) + // R6g node types (available only for Redis engine version 5.0.6 onward and + // for Memcached engine version 1.5.16 onward): cache.r6g.large, cache.r6g.xlarge, + // cache.r6g.2xlarge, cache.r6g.4xlarge, cache.r6g.8xlarge, cache.r6g.12xlarge, + // cache.r6g.16xlarge R5 node types: cache.r5.large, cache.r5.xlarge, cache.r5.2xlarge, + // cache.r5.4xlarge, cache.r5.12xlarge, cache.r5.24xlarge R4 node types: + // cache.r4.large, cache.r4.xlarge, cache.r4.2xlarge, cache.r4.4xlarge, cache.r4.8xlarge, + // cache.r4.16xlarge Previous generation: (not recommended. Existing clusters + // are still supported but creation of new clusters is not supported for + // these types.) M2 node types: cache.m2.xlarge, cache.m2.2xlarge, cache.m2.4xlarge + // R3 node types: cache.r3.large, cache.r3.xlarge, cache.r3.2xlarge, cache.r3.4xlarge, + // cache.r3.8xlarge // // Additional node type info // diff --git a/apis/v1alpha1/types.go b/apis/v1alpha1/types.go index a3ef42e4..08e99a34 100644 --- a/apis/v1alpha1/types.go +++ b/apis/v1alpha1/types.go @@ -34,6 +34,12 @@ type Authentication struct { Type *string `json:"type_,omitempty"` } +// Specifies the authentication mode to use. +type AuthenticationMode struct { + Passwords []*string `json:"passwords,omitempty"` + Type *string `json:"type_,omitempty"` +} + // Describes an Availability Zone in which the cluster is launched. type AvailabilityZone struct { Name *string `json:"name,omitempty"` @@ -58,11 +64,12 @@ type CacheCluster_SDK struct { ClientDownloadLandingPage *string `json:"clientDownloadLandingPage,omitempty"` // Represents the information required for client programs to connect to a cache // node. - ConfigurationEndpoint *Endpoint `json:"configurationEndpoint,omitempty"` - Engine *string `json:"engine,omitempty"` - EngineVersion *string `json:"engineVersion,omitempty"` - IPDiscovery *string `json:"ipDiscovery,omitempty"` - NetworkType *string `json:"networkType,omitempty"` + ConfigurationEndpoint *Endpoint `json:"configurationEndpoint,omitempty"` + Engine *string `json:"engine,omitempty"` + EngineVersion *string `json:"engineVersion,omitempty"` + IPDiscovery *string `json:"ipDiscovery,omitempty"` + LogDeliveryConfigurations []*LogDeliveryConfiguration `json:"logDeliveryConfigurations,omitempty"` + NetworkType *string `json:"networkType,omitempty"` // Describes a notification topic and its status. Notification topics are used // for publishing ElastiCache events to subscribers using Amazon Simple Notification // Service (SNS). @@ -251,8 +258,10 @@ type CloudWatchLogsDestinationDetails struct { // Each node group (shard) configuration has the following members: NodeGroupId, // NewReplicaCount, and PreferredAvailabilityZones. type ConfigureShard struct { - NewReplicaCount *int64 `json:"newReplicaCount,omitempty"` - NodeGroupID *string `json:"nodeGroupID,omitempty"` + NewReplicaCount *int64 `json:"newReplicaCount,omitempty"` + NodeGroupID *string `json:"nodeGroupID,omitempty"` + PreferredAvailabilityZones []*string `json:"preferredAvailabilityZones,omitempty"` + PreferredOutpostARNs []*string `json:"preferredOutpostARNs,omitempty"` } // The endpoint from which data should be migrated. @@ -261,6 +270,11 @@ type CustomerNodeEndpoint struct { Port *int64 `json:"port,omitempty"` } +// The data storage limit. +type DataStorage struct { + Maximum *int64 `json:"maximum,omitempty"` +} + // Configuration details of either a CloudWatch Logs destination or Kinesis // Data Firehose destination. type DestinationDetails struct { @@ -277,6 +291,12 @@ type EC2SecurityGroup struct { Status *string `json:"status,omitempty"` } +// The configuration for the number of ElastiCache Processing Units (ECPU) the +// cache can consume per second. +type ECPUPerSecond struct { + Maximum *int64 `json:"maximum,omitempty"` +} + // Represents the information required for client programs to connect to a cache // node. type Endpoint struct { @@ -616,6 +636,49 @@ type SecurityGroupMembership struct { Status *string `json:"status,omitempty"` } +// The resource representing a serverless cache. +type ServerlessCache struct { + ARN *string `json:"arn,omitempty"` + CreateTime *metav1.Time `json:"createTime,omitempty"` + DailySnapshotTime *string `json:"dailySnapshotTime,omitempty"` + Description *string `json:"description,omitempty"` + // Represents the information required for client programs to connect to a cache + // node. + Endpoint *Endpoint `json:"endpoint,omitempty"` + Engine *string `json:"engine,omitempty"` + FullEngineVersion *string `json:"fullEngineVersion,omitempty"` + KMSKeyID *string `json:"kmsKeyID,omitempty"` + MajorEngineVersion *string `json:"majorEngineVersion,omitempty"` + // Represents the information required for client programs to connect to a cache + // node. + ReaderEndpoint *Endpoint `json:"readerEndpoint,omitempty"` + SecurityGroupIDs []*string `json:"securityGroupIDs,omitempty"` + ServerlessCacheName *string `json:"serverlessCacheName,omitempty"` + SnapshotRetentionLimit *int64 `json:"snapshotRetentionLimit,omitempty"` + Status *string `json:"status,omitempty"` + UserGroupID *string `json:"userGroupID,omitempty"` +} + +// The configuration settings for a specific serverless cache. +type ServerlessCacheConfiguration struct { + Engine *string `json:"engine,omitempty"` + MajorEngineVersion *string `json:"majorEngineVersion,omitempty"` + ServerlessCacheName *string `json:"serverlessCacheName,omitempty"` +} + +// The resource representing a serverless cache snapshot. Available for Redis +// only. +type ServerlessCacheSnapshot struct { + ARN *string `json:"arn,omitempty"` + BytesUsedForCache *string `json:"bytesUsedForCache,omitempty"` + CreateTime *metav1.Time `json:"createTime,omitempty"` + ExpiryTime *metav1.Time `json:"expiryTime,omitempty"` + KMSKeyID *string `json:"kmsKeyID,omitempty"` + ServerlessCacheSnapshotName *string `json:"serverlessCacheSnapshotName,omitempty"` + SnapshotType *string `json:"snapshotType,omitempty"` + Status *string `json:"status,omitempty"` +} + // An update that you can apply to your Redis clusters. type ServiceUpdate struct { AutoUpdateAfterRecommendedApplyByDate *bool `json:"autoUpdateAfterRecommendedApplyByDate,omitempty"` @@ -738,6 +801,7 @@ type UserGroup_SDK struct { // Returns the updates being applied to the user group. PendingChanges *UserGroupPendingChanges `json:"pendingChanges,omitempty"` ReplicationGroups []*string `json:"replicationGroups,omitempty"` + ServerlessCaches []*string `json:"serverlessCaches,omitempty"` Status *string `json:"status,omitempty"` UserGroupID *string `json:"userGroupID,omitempty"` UserIDs []*string `json:"userIDs,omitempty"` diff --git a/apis/v1alpha1/user_group.go b/apis/v1alpha1/user_group.go index 1cd3b17f..b35379ae 100644 --- a/apis/v1alpha1/user_group.go +++ b/apis/v1alpha1/user_group.go @@ -29,7 +29,8 @@ type UserGroupSpec struct { // +kubebuilder:validation:Required Engine *string `json:"engine"` // A list of tags to be added to this resource. A tag is a key-value pair. A - // tag key must be accompanied by a tag value, although null is accepted. + // tag key must be accompanied by a tag value, although null is accepted. Available + // for Redis only. Tags []*Tag `json:"tags,omitempty"` // The ID of the user group. // +kubebuilder:validation:Required diff --git a/apis/v1alpha1/zz_generated.deepcopy.go b/apis/v1alpha1/zz_generated.deepcopy.go index 013abe4c..ac372178 100644 --- a/apis/v1alpha1/zz_generated.deepcopy.go +++ b/apis/v1alpha1/zz_generated.deepcopy.go @@ -49,6 +49,37 @@ func (in *Authentication) DeepCopy() *Authentication { return out } +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *AuthenticationMode) DeepCopyInto(out *AuthenticationMode) { + *out = *in + if in.Passwords != nil { + in, out := &in.Passwords, &out.Passwords + *out = make([]*string, len(*in)) + for i := range *in { + if (*in)[i] != nil { + in, out := &(*in)[i], &(*out)[i] + *out = new(string) + **out = **in + } + } + } + if in.Type != nil { + in, out := &in.Type, &out.Type + *out = new(string) + **out = **in + } +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new AuthenticationMode. +func (in *AuthenticationMode) DeepCopy() *AuthenticationMode { + if in == nil { + return nil + } + out := new(AuthenticationMode) + in.DeepCopyInto(out) + return out +} + // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. func (in *AvailabilityZone) DeepCopyInto(out *AvailabilityZone) { *out = *in @@ -585,6 +616,17 @@ func (in *CacheCluster_SDK) DeepCopyInto(out *CacheCluster_SDK) { *out = new(string) **out = **in } + if in.LogDeliveryConfigurations != nil { + in, out := &in.LogDeliveryConfigurations, &out.LogDeliveryConfigurations + *out = make([]*LogDeliveryConfiguration, len(*in)) + for i := range *in { + if (*in)[i] != nil { + in, out := &(*in)[i], &(*out)[i] + *out = new(LogDeliveryConfiguration) + (*in).DeepCopyInto(*out) + } + } + } if in.NetworkType != nil { in, out := &in.NetworkType, &out.NetworkType *out = new(string) @@ -1059,6 +1101,17 @@ func (in *CacheParameterGroupStatus) DeepCopy() *CacheParameterGroupStatus { // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. func (in *CacheParameterGroupStatus_SDK) DeepCopyInto(out *CacheParameterGroupStatus_SDK) { *out = *in + if in.CacheNodeIDsToReboot != nil { + in, out := &in.CacheNodeIDsToReboot, &out.CacheNodeIDsToReboot + *out = make([]*string, len(*in)) + for i := range *in { + if (*in)[i] != nil { + in, out := &(*in)[i], &(*out)[i] + *out = new(string) + **out = **in + } + } + } if in.CacheParameterGroupName != nil { in, out := &in.CacheParameterGroupName, &out.CacheParameterGroupName *out = new(string) @@ -1435,6 +1488,28 @@ func (in *ConfigureShard) DeepCopyInto(out *ConfigureShard) { *out = new(string) **out = **in } + if in.PreferredAvailabilityZones != nil { + in, out := &in.PreferredAvailabilityZones, &out.PreferredAvailabilityZones + *out = make([]*string, len(*in)) + for i := range *in { + if (*in)[i] != nil { + in, out := &(*in)[i], &(*out)[i] + *out = new(string) + **out = **in + } + } + } + if in.PreferredOutpostARNs != nil { + in, out := &in.PreferredOutpostARNs, &out.PreferredOutpostARNs + *out = make([]*string, len(*in)) + for i := range *in { + if (*in)[i] != nil { + in, out := &(*in)[i], &(*out)[i] + *out = new(string) + **out = **in + } + } + } } // DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ConfigureShard. @@ -1472,6 +1547,26 @@ func (in *CustomerNodeEndpoint) DeepCopy() *CustomerNodeEndpoint { return out } +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *DataStorage) DeepCopyInto(out *DataStorage) { + *out = *in + if in.Maximum != nil { + in, out := &in.Maximum, &out.Maximum + *out = new(int64) + **out = **in + } +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new DataStorage. +func (in *DataStorage) DeepCopy() *DataStorage { + if in == nil { + return nil + } + out := new(DataStorage) + in.DeepCopyInto(out) + return out +} + // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. func (in *DestinationDetails) DeepCopyInto(out *DestinationDetails) { *out = *in @@ -1527,6 +1622,26 @@ func (in *EC2SecurityGroup) DeepCopy() *EC2SecurityGroup { return out } +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *ECPUPerSecond) DeepCopyInto(out *ECPUPerSecond) { + *out = *in + if in.Maximum != nil { + in, out := &in.Maximum, &out.Maximum + *out = new(int64) + **out = **in + } +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ECPUPerSecond. +func (in *ECPUPerSecond) DeepCopy() *ECPUPerSecond { + if in == nil { + return nil + } + out := new(ECPUPerSecond) + in.DeepCopyInto(out) + return out +} + // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. func (in *Endpoint) DeepCopyInto(out *Endpoint) { *out = *in @@ -3368,6 +3483,184 @@ func (in *SecurityGroupMembership) DeepCopy() *SecurityGroupMembership { return out } +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *ServerlessCache) DeepCopyInto(out *ServerlessCache) { + *out = *in + if in.ARN != nil { + in, out := &in.ARN, &out.ARN + *out = new(string) + **out = **in + } + if in.CreateTime != nil { + in, out := &in.CreateTime, &out.CreateTime + *out = (*in).DeepCopy() + } + if in.DailySnapshotTime != nil { + in, out := &in.DailySnapshotTime, &out.DailySnapshotTime + *out = new(string) + **out = **in + } + if in.Description != nil { + in, out := &in.Description, &out.Description + *out = new(string) + **out = **in + } + if in.Endpoint != nil { + in, out := &in.Endpoint, &out.Endpoint + *out = new(Endpoint) + (*in).DeepCopyInto(*out) + } + if in.Engine != nil { + in, out := &in.Engine, &out.Engine + *out = new(string) + **out = **in + } + if in.FullEngineVersion != nil { + in, out := &in.FullEngineVersion, &out.FullEngineVersion + *out = new(string) + **out = **in + } + if in.KMSKeyID != nil { + in, out := &in.KMSKeyID, &out.KMSKeyID + *out = new(string) + **out = **in + } + if in.MajorEngineVersion != nil { + in, out := &in.MajorEngineVersion, &out.MajorEngineVersion + *out = new(string) + **out = **in + } + if in.ReaderEndpoint != nil { + in, out := &in.ReaderEndpoint, &out.ReaderEndpoint + *out = new(Endpoint) + (*in).DeepCopyInto(*out) + } + if in.SecurityGroupIDs != nil { + in, out := &in.SecurityGroupIDs, &out.SecurityGroupIDs + *out = make([]*string, len(*in)) + for i := range *in { + if (*in)[i] != nil { + in, out := &(*in)[i], &(*out)[i] + *out = new(string) + **out = **in + } + } + } + if in.ServerlessCacheName != nil { + in, out := &in.ServerlessCacheName, &out.ServerlessCacheName + *out = new(string) + **out = **in + } + if in.SnapshotRetentionLimit != nil { + in, out := &in.SnapshotRetentionLimit, &out.SnapshotRetentionLimit + *out = new(int64) + **out = **in + } + if in.Status != nil { + in, out := &in.Status, &out.Status + *out = new(string) + **out = **in + } + if in.UserGroupID != nil { + in, out := &in.UserGroupID, &out.UserGroupID + *out = new(string) + **out = **in + } +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ServerlessCache. +func (in *ServerlessCache) DeepCopy() *ServerlessCache { + if in == nil { + return nil + } + out := new(ServerlessCache) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *ServerlessCacheConfiguration) DeepCopyInto(out *ServerlessCacheConfiguration) { + *out = *in + if in.Engine != nil { + in, out := &in.Engine, &out.Engine + *out = new(string) + **out = **in + } + if in.MajorEngineVersion != nil { + in, out := &in.MajorEngineVersion, &out.MajorEngineVersion + *out = new(string) + **out = **in + } + if in.ServerlessCacheName != nil { + in, out := &in.ServerlessCacheName, &out.ServerlessCacheName + *out = new(string) + **out = **in + } +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ServerlessCacheConfiguration. +func (in *ServerlessCacheConfiguration) DeepCopy() *ServerlessCacheConfiguration { + if in == nil { + return nil + } + out := new(ServerlessCacheConfiguration) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *ServerlessCacheSnapshot) DeepCopyInto(out *ServerlessCacheSnapshot) { + *out = *in + if in.ARN != nil { + in, out := &in.ARN, &out.ARN + *out = new(string) + **out = **in + } + if in.BytesUsedForCache != nil { + in, out := &in.BytesUsedForCache, &out.BytesUsedForCache + *out = new(string) + **out = **in + } + if in.CreateTime != nil { + in, out := &in.CreateTime, &out.CreateTime + *out = (*in).DeepCopy() + } + if in.ExpiryTime != nil { + in, out := &in.ExpiryTime, &out.ExpiryTime + *out = (*in).DeepCopy() + } + if in.KMSKeyID != nil { + in, out := &in.KMSKeyID, &out.KMSKeyID + *out = new(string) + **out = **in + } + if in.ServerlessCacheSnapshotName != nil { + in, out := &in.ServerlessCacheSnapshotName, &out.ServerlessCacheSnapshotName + *out = new(string) + **out = **in + } + if in.SnapshotType != nil { + in, out := &in.SnapshotType, &out.SnapshotType + *out = new(string) + **out = **in + } + if in.Status != nil { + in, out := &in.Status, &out.Status + *out = new(string) + **out = **in + } +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ServerlessCacheSnapshot. +func (in *ServerlessCacheSnapshot) DeepCopy() *ServerlessCacheSnapshot { + if in == nil { + return nil + } + out := new(ServerlessCacheSnapshot) + in.DeepCopyInto(out) + return out +} + // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. func (in *ServiceUpdate) DeepCopyInto(out *ServiceUpdate) { *out = *in @@ -4326,6 +4619,17 @@ func (in *UserGroup_SDK) DeepCopyInto(out *UserGroup_SDK) { } } } + if in.ServerlessCaches != nil { + in, out := &in.ServerlessCaches, &out.ServerlessCaches + *out = make([]*string, len(*in)) + for i := range *in { + if (*in)[i] != nil { + in, out := &(*in)[i], &(*out)[i] + *out = new(string) + **out = **in + } + } + } if in.Status != nil { in, out := &in.Status, &out.Status *out = new(string) diff --git a/config/crd/bases/elasticache.services.k8s.aws_cacheparametergroups.yaml b/config/crd/bases/elasticache.services.k8s.aws_cacheparametergroups.yaml index a873d1bf..400010a7 100644 --- a/config/crd/bases/elasticache.services.k8s.aws_cacheparametergroups.yaml +++ b/config/crd/bases/elasticache.services.k8s.aws_cacheparametergroups.yaml @@ -51,7 +51,7 @@ spec: Valid values are: memcached1.4 | memcached1.5 | memcached1.6 | redis2.6 | - redis2.8 | redis3.2 | redis4.0 | redis5.0 | redis6.x + redis2.8 | redis3.2 | redis4.0 | redis5.0 | redis6.x | redis7 type: string cacheParameterGroupName: description: A user-specified name for the cache parameter group. diff --git a/config/crd/bases/elasticache.services.k8s.aws_replicationgroups.yaml b/config/crd/bases/elasticache.services.k8s.aws_replicationgroups.yaml index 69cbe8fa..fdae503f 100644 --- a/config/crd/bases/elasticache.services.k8s.aws_replicationgroups.yaml +++ b/config/crd/bases/elasticache.services.k8s.aws_replicationgroups.yaml @@ -127,22 +127,25 @@ spec: at lower cost when compared to their equivalent previous generation counterparts. - * General purpose: Current generation: M6g node types (available only - for Redis engine version 5.0.6 onward and for Memcached engine version - 1.5.16 onward): cache.m6g.large, cache.m6g.xlarge, cache.m6g.2xlarge, - cache.m6g.4xlarge, cache.m6g.8xlarge, cache.m6g.12xlarge, cache.m6g.16xlarge - For region availability, see Supported Node Types (https://docs.aws.amazon.com/AmazonElastiCache/latest/red-ug/CacheNodes.SupportedTypes.html#CacheNodes.SupportedTypesByRegion) - M5 node types: cache.m5.large, cache.m5.xlarge, cache.m5.2xlarge, cache.m5.4xlarge, - cache.m5.12xlarge, cache.m5.24xlarge M4 node types: cache.m4.large, cache.m4.xlarge, - cache.m4.2xlarge, cache.m4.4xlarge, cache.m4.10xlarge T4g node types (available - only for Redis engine version 5.0.6 onward and Memcached engine version - 1.5.16 onward): cache.t4g.micro, cache.t4g.small, cache.t4g.medium T3 - node types: cache.t3.micro, cache.t3.small, cache.t3.medium T2 node types: - cache.t2.micro, cache.t2.small, cache.t2.medium Previous generation: (not - recommended. Existing clusters are still supported but creation of new - clusters is not supported for these types.) T1 node types: cache.t1.micro - M1 node types: cache.m1.small, cache.m1.medium, cache.m1.large, cache.m1.xlarge - M3 node types: cache.m3.medium, cache.m3.large, cache.m3.xlarge, cache.m3.2xlarge + * General purpose: Current generation: M7g node types: cache.m7g.large, + cache.m7g.xlarge, cache.m7g.2xlarge, cache.m7g.4xlarge, cache.m7g.8xlarge, + cache.m7g.12xlarge, cache.m7g.16xlarge For region availability, see Supported + Node Types (https://docs.aws.amazon.com/AmazonElastiCache/latest/red-ug/CacheNodes.SupportedTypes.html#CacheNodes.SupportedTypesByRegion) + M6g node types (available only for Redis engine version 5.0.6 onward and + for Memcached engine version 1.5.16 onward): cache.m6g.large, cache.m6g.xlarge, + cache.m6g.2xlarge, cache.m6g.4xlarge, cache.m6g.8xlarge, cache.m6g.12xlarge, + cache.m6g.16xlarge M5 node types: cache.m5.large, cache.m5.xlarge, cache.m5.2xlarge, + cache.m5.4xlarge, cache.m5.12xlarge, cache.m5.24xlarge M4 node types: + cache.m4.large, cache.m4.xlarge, cache.m4.2xlarge, cache.m4.4xlarge, cache.m4.10xlarge + T4g node types (available only for Redis engine version 5.0.6 onward and + Memcached engine version 1.5.16 onward): cache.t4g.micro, cache.t4g.small, + cache.t4g.medium T3 node types: cache.t3.micro, cache.t3.small, cache.t3.medium + T2 node types: cache.t2.micro, cache.t2.small, cache.t2.medium Previous + generation: (not recommended. Existing clusters are still supported but + creation of new clusters is not supported for these types.) T1 node types: + cache.t1.micro M1 node types: cache.m1.small, cache.m1.medium, cache.m1.large, + cache.m1.xlarge M3 node types: cache.m3.medium, cache.m3.large, cache.m3.xlarge, + cache.m3.2xlarge * Compute optimized: Previous generation: (not recommended. Existing clusters @@ -150,24 +153,21 @@ spec: these types.) C1 node types: cache.c1.xlarge - * Memory optimized with data tiering: Current generation: R6gd node types - (available only for Redis engine version 6.2 onward). cache.r6gd.xlarge, - cache.r6gd.2xlarge, cache.r6gd.4xlarge, cache.r6gd.8xlarge, cache.r6gd.12xlarge, - cache.r6gd.16xlarge - - - * Memory optimized: Current generation: R6g node types (available only - for Redis engine version 5.0.6 onward and for Memcached engine version - 1.5.16 onward). cache.r6g.large, cache.r6g.xlarge, cache.r6g.2xlarge, - cache.r6g.4xlarge, cache.r6g.8xlarge, cache.r6g.12xlarge, cache.r6g.16xlarge - For region availability, see Supported Node Types (https://docs.aws.amazon.com/AmazonElastiCache/latest/red-ug/CacheNodes.SupportedTypes.html#CacheNodes.SupportedTypesByRegion) - R5 node types: cache.r5.large, cache.r5.xlarge, cache.r5.2xlarge, cache.r5.4xlarge, - cache.r5.12xlarge, cache.r5.24xlarge R4 node types: cache.r4.large, cache.r4.xlarge, - cache.r4.2xlarge, cache.r4.4xlarge, cache.r4.8xlarge, cache.r4.16xlarge - Previous generation: (not recommended. Existing clusters are still supported - but creation of new clusters is not supported for these types.) M2 node - types: cache.m2.xlarge, cache.m2.2xlarge, cache.m2.4xlarge R3 node types: - cache.r3.large, cache.r3.xlarge, cache.r3.2xlarge, cache.r3.4xlarge, cache.r3.8xlarge + * Memory optimized: Current generation: R7g node types: cache.r7g.large, + cache.r7g.xlarge, cache.r7g.2xlarge, cache.r7g.4xlarge, cache.r7g.8xlarge, + cache.r7g.12xlarge, cache.r7g.16xlarge For region availability, see Supported + Node Types (https://docs.aws.amazon.com/AmazonElastiCache/latest/red-ug/CacheNodes.SupportedTypes.html#CacheNodes.SupportedTypesByRegion) + R6g node types (available only for Redis engine version 5.0.6 onward and + for Memcached engine version 1.5.16 onward): cache.r6g.large, cache.r6g.xlarge, + cache.r6g.2xlarge, cache.r6g.4xlarge, cache.r6g.8xlarge, cache.r6g.12xlarge, + cache.r6g.16xlarge R5 node types: cache.r5.large, cache.r5.xlarge, cache.r5.2xlarge, + cache.r5.4xlarge, cache.r5.12xlarge, cache.r5.24xlarge R4 node types: + cache.r4.large, cache.r4.xlarge, cache.r4.2xlarge, cache.r4.4xlarge, cache.r4.8xlarge, + cache.r4.16xlarge Previous generation: (not recommended. Existing clusters + are still supported but creation of new clusters is not supported for + these types.) M2 node types: cache.m2.xlarge, cache.m2.2xlarge, cache.m2.4xlarge + R3 node types: cache.r3.large, cache.r3.xlarge, cache.r3.2xlarge, cache.r3.4xlarge, + cache.r3.8xlarge Additional node type info @@ -259,7 +259,7 @@ spec: engine: description: |- The name of the cache engine to be used for the clusters in this replication - group. Must be Redis. + group. The value must be set to Redis. type: string engineVersion: description: |- @@ -573,11 +573,6 @@ spec: A flag that enables in-transit encryption when set to true. - You cannot modify the value of TransitEncryptionEnabled after the cluster - is created. To enable in-transit encryption on a cluster you must set TransitEncryptionEnabled - to true when you create a cluster. - - This parameter is valid only if the Engine parameter is redis, the EngineVersion parameter is 3.2.6, 4.x or later, and the cluster is being created in an Amazon VPC. diff --git a/config/crd/bases/elasticache.services.k8s.aws_snapshots.yaml b/config/crd/bases/elasticache.services.k8s.aws_snapshots.yaml index 09c6ca24..5c439639 100644 --- a/config/crd/bases/elasticache.services.k8s.aws_snapshots.yaml +++ b/config/crd/bases/elasticache.services.k8s.aws_snapshots.yaml @@ -144,22 +144,25 @@ spec: at lower cost when compared to their equivalent previous generation counterparts. - * General purpose: Current generation: M6g node types (available only - for Redis engine version 5.0.6 onward and for Memcached engine version - 1.5.16 onward). cache.m6g.large, cache.m6g.xlarge, cache.m6g.2xlarge, - cache.m6g.4xlarge, cache.m6g.8xlarge, cache.m6g.12xlarge, cache.m6g.16xlarge - For region availability, see Supported Node Types (https://docs.aws.amazon.com/AmazonElastiCache/latest/red-ug/CacheNodes.SupportedTypes.html#CacheNodes.SupportedTypesByRegion) - M5 node types: cache.m5.large, cache.m5.xlarge, cache.m5.2xlarge, cache.m5.4xlarge, - cache.m5.12xlarge, cache.m5.24xlarge M4 node types: cache.m4.large, cache.m4.xlarge, - cache.m4.2xlarge, cache.m4.4xlarge, cache.m4.10xlarge T4g node types (available - only for Redis engine version 5.0.6 onward and Memcached engine version - 1.5.16 onward): cache.t4g.micro, cache.t4g.small, cache.t4g.medium T3 - node types: cache.t3.micro, cache.t3.small, cache.t3.medium T2 node types: - cache.t2.micro, cache.t2.small, cache.t2.medium Previous generation: (not - recommended. Existing clusters are still supported but creation of new - clusters is not supported for these types.) T1 node types: cache.t1.micro - M1 node types: cache.m1.small, cache.m1.medium, cache.m1.large, cache.m1.xlarge - M3 node types: cache.m3.medium, cache.m3.large, cache.m3.xlarge, cache.m3.2xlarge + * General purpose: Current generation: M7g node types: cache.m7g.large, + cache.m7g.xlarge, cache.m7g.2xlarge, cache.m7g.4xlarge, cache.m7g.8xlarge, + cache.m7g.12xlarge, cache.m7g.16xlarge For region availability, see Supported + Node Types (https://docs.aws.amazon.com/AmazonElastiCache/latest/red-ug/CacheNodes.SupportedTypes.html#CacheNodes.SupportedTypesByRegion) + M6g node types (available only for Redis engine version 5.0.6 onward and + for Memcached engine version 1.5.16 onward): cache.m6g.large, cache.m6g.xlarge, + cache.m6g.2xlarge, cache.m6g.4xlarge, cache.m6g.8xlarge, cache.m6g.12xlarge, + cache.m6g.16xlarge M5 node types: cache.m5.large, cache.m5.xlarge, cache.m5.2xlarge, + cache.m5.4xlarge, cache.m5.12xlarge, cache.m5.24xlarge M4 node types: + cache.m4.large, cache.m4.xlarge, cache.m4.2xlarge, cache.m4.4xlarge, cache.m4.10xlarge + T4g node types (available only for Redis engine version 5.0.6 onward and + Memcached engine version 1.5.16 onward): cache.t4g.micro, cache.t4g.small, + cache.t4g.medium T3 node types: cache.t3.micro, cache.t3.small, cache.t3.medium + T2 node types: cache.t2.micro, cache.t2.small, cache.t2.medium Previous + generation: (not recommended. Existing clusters are still supported but + creation of new clusters is not supported for these types.) T1 node types: + cache.t1.micro M1 node types: cache.m1.small, cache.m1.medium, cache.m1.large, + cache.m1.xlarge M3 node types: cache.m3.medium, cache.m3.large, cache.m3.xlarge, + cache.m3.2xlarge * Compute optimized: Previous generation: (not recommended. Existing clusters @@ -167,25 +170,21 @@ spec: these types.) C1 node types: cache.c1.xlarge - * Memory optimized with data tiering: Current generation: R6gd node types - (available only for Redis engine version 6.2 onward). cache.r6gd.xlarge, - cache.r6gd.2xlarge, cache.r6gd.4xlarge, cache.r6gd.8xlarge, cache.r6gd.12xlarge, - cache.r6gd.16xlarge - - - * Memory optimized: Current generation: R6g node types (available only - for Redis engine version 5.0.6 onward and for Memcached engine version - 1.5.16 onward). cache.r6g.large, cache.r6g.xlarge, cache.r6g.2xlarge, - cache.r6g.4xlarge, cache.r6g.8xlarge, cache.r6g.12xlarge, cache.r6g.16xlarge - For region availability, see Supported Node Types (https://docs.aws.amazon.com/AmazonElastiCache/latest/red-ug/CacheNodes.SupportedTypes.html#CacheNodes.SupportedTypesByRegion) - For region availability, see Supported Node Types (https://docs.aws.amazon.com/AmazonElastiCache/latest/red-ug/CacheNodes.SupportedTypes.html#CacheNodes.SupportedTypesByRegion) - R5 node types: cache.r5.large, cache.r5.xlarge, cache.r5.2xlarge, cache.r5.4xlarge, - cache.r5.12xlarge, cache.r5.24xlarge R4 node types: cache.r4.large, cache.r4.xlarge, - cache.r4.2xlarge, cache.r4.4xlarge, cache.r4.8xlarge, cache.r4.16xlarge - Previous generation: (not recommended. Existing clusters are still supported - but creation of new clusters is not supported for these types.) M2 node - types: cache.m2.xlarge, cache.m2.2xlarge, cache.m2.4xlarge R3 node types: - cache.r3.large, cache.r3.xlarge, cache.r3.2xlarge, cache.r3.4xlarge, cache.r3.8xlarge + * Memory optimized: Current generation: R7g node types: cache.r7g.large, + cache.r7g.xlarge, cache.r7g.2xlarge, cache.r7g.4xlarge, cache.r7g.8xlarge, + cache.r7g.12xlarge, cache.r7g.16xlarge For region availability, see Supported + Node Types (https://docs.aws.amazon.com/AmazonElastiCache/latest/red-ug/CacheNodes.SupportedTypes.html#CacheNodes.SupportedTypesByRegion) + R6g node types (available only for Redis engine version 5.0.6 onward and + for Memcached engine version 1.5.16 onward): cache.r6g.large, cache.r6g.xlarge, + cache.r6g.2xlarge, cache.r6g.4xlarge, cache.r6g.8xlarge, cache.r6g.12xlarge, + cache.r6g.16xlarge R5 node types: cache.r5.large, cache.r5.xlarge, cache.r5.2xlarge, + cache.r5.4xlarge, cache.r5.12xlarge, cache.r5.24xlarge R4 node types: + cache.r4.large, cache.r4.xlarge, cache.r4.2xlarge, cache.r4.4xlarge, cache.r4.8xlarge, + cache.r4.16xlarge Previous generation: (not recommended. Existing clusters + are still supported but creation of new clusters is not supported for + these types.) M2 node types: cache.m2.xlarge, cache.m2.2xlarge, cache.m2.4xlarge + R3 node types: cache.r3.large, cache.r3.xlarge, cache.r3.2xlarge, cache.r3.4xlarge, + cache.r3.8xlarge Additional node type info diff --git a/config/crd/bases/elasticache.services.k8s.aws_usergroups.yaml b/config/crd/bases/elasticache.services.k8s.aws_usergroups.yaml index fb0c481a..74cf785d 100644 --- a/config/crd/bases/elasticache.services.k8s.aws_usergroups.yaml +++ b/config/crd/bases/elasticache.services.k8s.aws_usergroups.yaml @@ -44,7 +44,8 @@ spec: tags: description: |- A list of tags to be added to this resource. A tag is a key-value pair. A - tag key must be accompanied by a tag value, although null is accepted. + tag key must be accompanied by a tag value, although null is accepted. Available + for Redis only. items: description: |- A tag that can be added to an ElastiCache cluster or replication group. Tags diff --git a/generator.yaml b/generator.yaml index 4183d7a4..474feba1 100644 --- a/generator.yaml +++ b/generator.yaml @@ -25,6 +25,8 @@ resources: service_name: sns resource: Topic path: Status.ACKResourceMetadata.ARN + LogDeliveryConfigurations: + is_immutable: true AuthToken: is_secret: true PreferredAvailabilityZone: @@ -70,6 +72,8 @@ resources: - InvalidParameterValue - InvalidParameterCombination hooks: + sdk_create_pre_build_request: + template_path: hooks/cache_cluster/sdk_create_pre_build_request.go.tpl sdk_create_post_set_output: template_path: hooks/cache_cluster/sdk_create_post_set_output.go.tpl sdk_delete_pre_build_request: @@ -347,5 +351,24 @@ ignore: - CreateReplicationGroupInput.GlobalReplicationGroupId - CreateReplicationGroupInput.AutoMinorVersionUpgrade - CreateReplicationGroupInput.NumCacheClusters - - CacheCluster.LogDeliveryConfigurations - - PendingModifiedValues.LogDeliveryConfigurations \ No newline at end of file + - CreateReplicationGroupInput.IpDiscovery + - CreateReplicationGroupInput.ClusterMode + - CreateReplicationGroupInput.NetworkType + - CreateReplicationGroupInput.ServerlessCacheSnapshotName + - CreateReplicationGroupInput.TransitEncryptionMode + - CreateCacheClusterInput.AuthenticationMode + - CreateCacheClusterInput.ModifyCacheClusterInput + - PendingModifiedValues.LogDeliveryConfigurations + - PendingModifiedValues.ClusterMode + - CacheSubnetGroup.SupportedNetworkTypes + - Subnet.SupportedNetworkTypes + - CreateUserInput.AuthenticationMode + - ReplicationGroup.ClusterMode + - ReplicationGroup.IpDiscovery + - ReplicationGroup.NetworkType + - ReplicationGroup.TransitEncryptionMode + - ReplicationGroupPendingModifiedValues.ClusterMode + - ReplicationGroupPendingModifiedValues.TransitEncryptionEnabled + - ReplicationGroupPendingModifiedValues.TransitEncryptionMode + - CreateUserGroupInput.ServerlessCaches + - CreateUserGroupOutput.ServerlessCaches diff --git a/helm/crds/elasticache.services.k8s.aws_cacheparametergroups.yaml b/helm/crds/elasticache.services.k8s.aws_cacheparametergroups.yaml index a873d1bf..400010a7 100644 --- a/helm/crds/elasticache.services.k8s.aws_cacheparametergroups.yaml +++ b/helm/crds/elasticache.services.k8s.aws_cacheparametergroups.yaml @@ -51,7 +51,7 @@ spec: Valid values are: memcached1.4 | memcached1.5 | memcached1.6 | redis2.6 | - redis2.8 | redis3.2 | redis4.0 | redis5.0 | redis6.x + redis2.8 | redis3.2 | redis4.0 | redis5.0 | redis6.x | redis7 type: string cacheParameterGroupName: description: A user-specified name for the cache parameter group. diff --git a/helm/crds/elasticache.services.k8s.aws_replicationgroups.yaml b/helm/crds/elasticache.services.k8s.aws_replicationgroups.yaml index 340168a3..db1f4586 100644 --- a/helm/crds/elasticache.services.k8s.aws_replicationgroups.yaml +++ b/helm/crds/elasticache.services.k8s.aws_replicationgroups.yaml @@ -127,22 +127,25 @@ spec: at lower cost when compared to their equivalent previous generation counterparts. - - General purpose: Current generation: M6g node types (available only - for Redis engine version 5.0.6 onward and for Memcached engine version - 1.5.16 onward): cache.m6g.large, cache.m6g.xlarge, cache.m6g.2xlarge, - cache.m6g.4xlarge, cache.m6g.8xlarge, cache.m6g.12xlarge, cache.m6g.16xlarge - For region availability, see Supported Node Types (https://docs.aws.amazon.com/AmazonElastiCache/latest/red-ug/CacheNodes.SupportedTypes.html#CacheNodes.SupportedTypesByRegion) - M5 node types: cache.m5.large, cache.m5.xlarge, cache.m5.2xlarge, cache.m5.4xlarge, - cache.m5.12xlarge, cache.m5.24xlarge M4 node types: cache.m4.large, cache.m4.xlarge, - cache.m4.2xlarge, cache.m4.4xlarge, cache.m4.10xlarge T4g node types (available - only for Redis engine version 5.0.6 onward and Memcached engine version - 1.5.16 onward): cache.t4g.micro, cache.t4g.small, cache.t4g.medium T3 - node types: cache.t3.micro, cache.t3.small, cache.t3.medium T2 node types: - cache.t2.micro, cache.t2.small, cache.t2.medium Previous generation: (not - recommended. Existing clusters are still supported but creation of new - clusters is not supported for these types.) T1 node types: cache.t1.micro - M1 node types: cache.m1.small, cache.m1.medium, cache.m1.large, cache.m1.xlarge - M3 node types: cache.m3.medium, cache.m3.large, cache.m3.xlarge, cache.m3.2xlarge + - General purpose: Current generation: M7g node types: cache.m7g.large, + cache.m7g.xlarge, cache.m7g.2xlarge, cache.m7g.4xlarge, cache.m7g.8xlarge, + cache.m7g.12xlarge, cache.m7g.16xlarge For region availability, see Supported + Node Types (https://docs.aws.amazon.com/AmazonElastiCache/latest/red-ug/CacheNodes.SupportedTypes.html#CacheNodes.SupportedTypesByRegion) + M6g node types (available only for Redis engine version 5.0.6 onward and + for Memcached engine version 1.5.16 onward): cache.m6g.large, cache.m6g.xlarge, + cache.m6g.2xlarge, cache.m6g.4xlarge, cache.m6g.8xlarge, cache.m6g.12xlarge, + cache.m6g.16xlarge M5 node types: cache.m5.large, cache.m5.xlarge, cache.m5.2xlarge, + cache.m5.4xlarge, cache.m5.12xlarge, cache.m5.24xlarge M4 node types: + cache.m4.large, cache.m4.xlarge, cache.m4.2xlarge, cache.m4.4xlarge, cache.m4.10xlarge + T4g node types (available only for Redis engine version 5.0.6 onward and + Memcached engine version 1.5.16 onward): cache.t4g.micro, cache.t4g.small, + cache.t4g.medium T3 node types: cache.t3.micro, cache.t3.small, cache.t3.medium + T2 node types: cache.t2.micro, cache.t2.small, cache.t2.medium Previous + generation: (not recommended. Existing clusters are still supported but + creation of new clusters is not supported for these types.) T1 node types: + cache.t1.micro M1 node types: cache.m1.small, cache.m1.medium, cache.m1.large, + cache.m1.xlarge M3 node types: cache.m3.medium, cache.m3.large, cache.m3.xlarge, + cache.m3.2xlarge - Compute optimized: Previous generation: (not recommended. Existing clusters @@ -150,24 +153,21 @@ spec: these types.) C1 node types: cache.c1.xlarge - - Memory optimized with data tiering: Current generation: R6gd node types - (available only for Redis engine version 6.2 onward). cache.r6gd.xlarge, - cache.r6gd.2xlarge, cache.r6gd.4xlarge, cache.r6gd.8xlarge, cache.r6gd.12xlarge, - cache.r6gd.16xlarge - - - - Memory optimized: Current generation: R6g node types (available only - for Redis engine version 5.0.6 onward and for Memcached engine version - 1.5.16 onward). cache.r6g.large, cache.r6g.xlarge, cache.r6g.2xlarge, - cache.r6g.4xlarge, cache.r6g.8xlarge, cache.r6g.12xlarge, cache.r6g.16xlarge - For region availability, see Supported Node Types (https://docs.aws.amazon.com/AmazonElastiCache/latest/red-ug/CacheNodes.SupportedTypes.html#CacheNodes.SupportedTypesByRegion) - R5 node types: cache.r5.large, cache.r5.xlarge, cache.r5.2xlarge, cache.r5.4xlarge, - cache.r5.12xlarge, cache.r5.24xlarge R4 node types: cache.r4.large, cache.r4.xlarge, - cache.r4.2xlarge, cache.r4.4xlarge, cache.r4.8xlarge, cache.r4.16xlarge - Previous generation: (not recommended. Existing clusters are still supported - but creation of new clusters is not supported for these types.) M2 node - types: cache.m2.xlarge, cache.m2.2xlarge, cache.m2.4xlarge R3 node types: - cache.r3.large, cache.r3.xlarge, cache.r3.2xlarge, cache.r3.4xlarge, cache.r3.8xlarge + - Memory optimized: Current generation: R7g node types: cache.r7g.large, + cache.r7g.xlarge, cache.r7g.2xlarge, cache.r7g.4xlarge, cache.r7g.8xlarge, + cache.r7g.12xlarge, cache.r7g.16xlarge For region availability, see Supported + Node Types (https://docs.aws.amazon.com/AmazonElastiCache/latest/red-ug/CacheNodes.SupportedTypes.html#CacheNodes.SupportedTypesByRegion) + R6g node types (available only for Redis engine version 5.0.6 onward and + for Memcached engine version 1.5.16 onward): cache.r6g.large, cache.r6g.xlarge, + cache.r6g.2xlarge, cache.r6g.4xlarge, cache.r6g.8xlarge, cache.r6g.12xlarge, + cache.r6g.16xlarge R5 node types: cache.r5.large, cache.r5.xlarge, cache.r5.2xlarge, + cache.r5.4xlarge, cache.r5.12xlarge, cache.r5.24xlarge R4 node types: + cache.r4.large, cache.r4.xlarge, cache.r4.2xlarge, cache.r4.4xlarge, cache.r4.8xlarge, + cache.r4.16xlarge Previous generation: (not recommended. Existing clusters + are still supported but creation of new clusters is not supported for + these types.) M2 node types: cache.m2.xlarge, cache.m2.2xlarge, cache.m2.4xlarge + R3 node types: cache.r3.large, cache.r3.xlarge, cache.r3.2xlarge, cache.r3.4xlarge, + cache.r3.8xlarge Additional node type info @@ -259,7 +259,7 @@ spec: engine: description: |- The name of the cache engine to be used for the clusters in this replication - group. Must be Redis. + group. The value must be set to Redis. type: string engineVersion: description: |- @@ -573,11 +573,6 @@ spec: A flag that enables in-transit encryption when set to true. - You cannot modify the value of TransitEncryptionEnabled after the cluster - is created. To enable in-transit encryption on a cluster you must set TransitEncryptionEnabled - to true when you create a cluster. - - This parameter is valid only if the Engine parameter is redis, the EngineVersion parameter is 3.2.6, 4.x or later, and the cluster is being created in an Amazon VPC. diff --git a/helm/crds/elasticache.services.k8s.aws_snapshots.yaml b/helm/crds/elasticache.services.k8s.aws_snapshots.yaml index 09c6ca24..5c439639 100644 --- a/helm/crds/elasticache.services.k8s.aws_snapshots.yaml +++ b/helm/crds/elasticache.services.k8s.aws_snapshots.yaml @@ -144,22 +144,25 @@ spec: at lower cost when compared to their equivalent previous generation counterparts. - * General purpose: Current generation: M6g node types (available only - for Redis engine version 5.0.6 onward and for Memcached engine version - 1.5.16 onward). cache.m6g.large, cache.m6g.xlarge, cache.m6g.2xlarge, - cache.m6g.4xlarge, cache.m6g.8xlarge, cache.m6g.12xlarge, cache.m6g.16xlarge - For region availability, see Supported Node Types (https://docs.aws.amazon.com/AmazonElastiCache/latest/red-ug/CacheNodes.SupportedTypes.html#CacheNodes.SupportedTypesByRegion) - M5 node types: cache.m5.large, cache.m5.xlarge, cache.m5.2xlarge, cache.m5.4xlarge, - cache.m5.12xlarge, cache.m5.24xlarge M4 node types: cache.m4.large, cache.m4.xlarge, - cache.m4.2xlarge, cache.m4.4xlarge, cache.m4.10xlarge T4g node types (available - only for Redis engine version 5.0.6 onward and Memcached engine version - 1.5.16 onward): cache.t4g.micro, cache.t4g.small, cache.t4g.medium T3 - node types: cache.t3.micro, cache.t3.small, cache.t3.medium T2 node types: - cache.t2.micro, cache.t2.small, cache.t2.medium Previous generation: (not - recommended. Existing clusters are still supported but creation of new - clusters is not supported for these types.) T1 node types: cache.t1.micro - M1 node types: cache.m1.small, cache.m1.medium, cache.m1.large, cache.m1.xlarge - M3 node types: cache.m3.medium, cache.m3.large, cache.m3.xlarge, cache.m3.2xlarge + * General purpose: Current generation: M7g node types: cache.m7g.large, + cache.m7g.xlarge, cache.m7g.2xlarge, cache.m7g.4xlarge, cache.m7g.8xlarge, + cache.m7g.12xlarge, cache.m7g.16xlarge For region availability, see Supported + Node Types (https://docs.aws.amazon.com/AmazonElastiCache/latest/red-ug/CacheNodes.SupportedTypes.html#CacheNodes.SupportedTypesByRegion) + M6g node types (available only for Redis engine version 5.0.6 onward and + for Memcached engine version 1.5.16 onward): cache.m6g.large, cache.m6g.xlarge, + cache.m6g.2xlarge, cache.m6g.4xlarge, cache.m6g.8xlarge, cache.m6g.12xlarge, + cache.m6g.16xlarge M5 node types: cache.m5.large, cache.m5.xlarge, cache.m5.2xlarge, + cache.m5.4xlarge, cache.m5.12xlarge, cache.m5.24xlarge M4 node types: + cache.m4.large, cache.m4.xlarge, cache.m4.2xlarge, cache.m4.4xlarge, cache.m4.10xlarge + T4g node types (available only for Redis engine version 5.0.6 onward and + Memcached engine version 1.5.16 onward): cache.t4g.micro, cache.t4g.small, + cache.t4g.medium T3 node types: cache.t3.micro, cache.t3.small, cache.t3.medium + T2 node types: cache.t2.micro, cache.t2.small, cache.t2.medium Previous + generation: (not recommended. Existing clusters are still supported but + creation of new clusters is not supported for these types.) T1 node types: + cache.t1.micro M1 node types: cache.m1.small, cache.m1.medium, cache.m1.large, + cache.m1.xlarge M3 node types: cache.m3.medium, cache.m3.large, cache.m3.xlarge, + cache.m3.2xlarge * Compute optimized: Previous generation: (not recommended. Existing clusters @@ -167,25 +170,21 @@ spec: these types.) C1 node types: cache.c1.xlarge - * Memory optimized with data tiering: Current generation: R6gd node types - (available only for Redis engine version 6.2 onward). cache.r6gd.xlarge, - cache.r6gd.2xlarge, cache.r6gd.4xlarge, cache.r6gd.8xlarge, cache.r6gd.12xlarge, - cache.r6gd.16xlarge - - - * Memory optimized: Current generation: R6g node types (available only - for Redis engine version 5.0.6 onward and for Memcached engine version - 1.5.16 onward). cache.r6g.large, cache.r6g.xlarge, cache.r6g.2xlarge, - cache.r6g.4xlarge, cache.r6g.8xlarge, cache.r6g.12xlarge, cache.r6g.16xlarge - For region availability, see Supported Node Types (https://docs.aws.amazon.com/AmazonElastiCache/latest/red-ug/CacheNodes.SupportedTypes.html#CacheNodes.SupportedTypesByRegion) - For region availability, see Supported Node Types (https://docs.aws.amazon.com/AmazonElastiCache/latest/red-ug/CacheNodes.SupportedTypes.html#CacheNodes.SupportedTypesByRegion) - R5 node types: cache.r5.large, cache.r5.xlarge, cache.r5.2xlarge, cache.r5.4xlarge, - cache.r5.12xlarge, cache.r5.24xlarge R4 node types: cache.r4.large, cache.r4.xlarge, - cache.r4.2xlarge, cache.r4.4xlarge, cache.r4.8xlarge, cache.r4.16xlarge - Previous generation: (not recommended. Existing clusters are still supported - but creation of new clusters is not supported for these types.) M2 node - types: cache.m2.xlarge, cache.m2.2xlarge, cache.m2.4xlarge R3 node types: - cache.r3.large, cache.r3.xlarge, cache.r3.2xlarge, cache.r3.4xlarge, cache.r3.8xlarge + * Memory optimized: Current generation: R7g node types: cache.r7g.large, + cache.r7g.xlarge, cache.r7g.2xlarge, cache.r7g.4xlarge, cache.r7g.8xlarge, + cache.r7g.12xlarge, cache.r7g.16xlarge For region availability, see Supported + Node Types (https://docs.aws.amazon.com/AmazonElastiCache/latest/red-ug/CacheNodes.SupportedTypes.html#CacheNodes.SupportedTypesByRegion) + R6g node types (available only for Redis engine version 5.0.6 onward and + for Memcached engine version 1.5.16 onward): cache.r6g.large, cache.r6g.xlarge, + cache.r6g.2xlarge, cache.r6g.4xlarge, cache.r6g.8xlarge, cache.r6g.12xlarge, + cache.r6g.16xlarge R5 node types: cache.r5.large, cache.r5.xlarge, cache.r5.2xlarge, + cache.r5.4xlarge, cache.r5.12xlarge, cache.r5.24xlarge R4 node types: + cache.r4.large, cache.r4.xlarge, cache.r4.2xlarge, cache.r4.4xlarge, cache.r4.8xlarge, + cache.r4.16xlarge Previous generation: (not recommended. Existing clusters + are still supported but creation of new clusters is not supported for + these types.) M2 node types: cache.m2.xlarge, cache.m2.2xlarge, cache.m2.4xlarge + R3 node types: cache.r3.large, cache.r3.xlarge, cache.r3.2xlarge, cache.r3.4xlarge, + cache.r3.8xlarge Additional node type info diff --git a/helm/crds/elasticache.services.k8s.aws_usergroups.yaml b/helm/crds/elasticache.services.k8s.aws_usergroups.yaml index fb0c481a..74cf785d 100644 --- a/helm/crds/elasticache.services.k8s.aws_usergroups.yaml +++ b/helm/crds/elasticache.services.k8s.aws_usergroups.yaml @@ -44,7 +44,8 @@ spec: tags: description: |- A list of tags to be added to this resource. A tag is a key-value pair. A - tag key must be accompanied by a tag value, although null is accepted. + tag key must be accompanied by a tag value, although null is accepted. Available + for Redis only. items: description: |- A tag that can be added to an ElastiCache cluster or replication group. Tags diff --git a/helm/templates/_helpers.tpl b/helm/templates/_helpers.tpl index cb8aba9a..4e478d5a 100644 --- a/helm/templates/_helpers.tpl +++ b/helm/templates/_helpers.tpl @@ -299,4 +299,13 @@ rules: verbs: - get - list -{{- end }} \ No newline at end of file +{{- end }} + +{{/* Convert k/v map to string like: "key1=value1,key2=value2,..." */}} +{{- define "ack-elasticache-controller.feature-gates" -}} +{{- $list := list -}} +{{- range $k, $v := .Values.featureGates -}} +{{- $list = append $list (printf "%s=%s" $k ( $v | toString)) -}} +{{- end -}} +{{ join "," $list }} +{{- end -}} diff --git a/helm/templates/deployment.yaml b/helm/templates/deployment.yaml index 95f84407..93895aaa 100644 --- a/helm/templates/deployment.yaml +++ b/helm/templates/deployment.yaml @@ -79,6 +79,10 @@ spec: {{- range $key, $value := .Values.reconcile.resourceMaxConcurrentSyncs }} - --reconcile-resource-max-concurrent-syncs - "$(RECONCILE_RESOURCE_MAX_CONCURRENT_SYNCS_{{ $key | upper }})" +{{- end }} +{{- if .Values.featureGates}} + - --feature-gates + - "$(FEATURE_GATES)" {{- end }} image: {{ .Values.image.repository }}:{{ .Values.image.tag }} imagePullPolicy: {{ .Values.image.pullPolicy }} @@ -122,6 +126,10 @@ spec: {{- range $key, $value := .Values.reconcile.resourceMaxConcurrentSyncs }} - name: RECONCILE_RESOURCE_MAX_CONCURRENT_SYNCS_{{ $key | upper }} value: {{ $key }}={{ $value }} +{{- end }} +{{- if .Values.featureGates}} + - name: FEATURE_GATES + value: {{ include "ack-elasticache-controller.feature-gates" . }} {{- end }} {{- if .Values.aws.credentials.secretName }} - name: AWS_SHARED_CREDENTIALS_FILE diff --git a/helm/values.schema.json b/helm/values.schema.json index 742163eb..7ccb485d 100644 --- a/helm/values.schema.json +++ b/helm/values.schema.json @@ -268,6 +268,13 @@ "type": "object" } }, + "featureGates": { + "description": "Feature gates settings", + "type": "object", + "additionalProperties": { + "type": "boolean" + } + }, "required": [ "image", "deployment", diff --git a/helm/values.yaml b/helm/values.yaml index 8522d9ad..79d3b3e6 100644 --- a/helm/values.yaml +++ b/helm/values.yaml @@ -153,3 +153,10 @@ leaderElection: # will attempt to use the namespace of the service account mounted to the Controller # pod. namespace: "" + +# Configuration for feature gates. These are optional controller features that +# can be individually enabled ("true") or disabled ("false") by adding key/value +# pairs below. +featureGates: {} + # featureGate1: true + # featureGate2: false diff --git a/pkg/resource/cache_cluster/delta.go b/pkg/resource/cache_cluster/delta.go index f2198593..cbf4dd7d 100644 --- a/pkg/resource/cache_cluster/delta.go +++ b/pkg/resource/cache_cluster/delta.go @@ -126,6 +126,13 @@ func newResourceDelta( delta.Add("Spec.IPDiscovery", a.ko.Spec.IPDiscovery, b.ko.Spec.IPDiscovery) } } + if len(a.ko.Spec.LogDeliveryConfigurations) != len(b.ko.Spec.LogDeliveryConfigurations) { + delta.Add("Spec.LogDeliveryConfigurations", a.ko.Spec.LogDeliveryConfigurations, b.ko.Spec.LogDeliveryConfigurations) + } else if len(a.ko.Spec.LogDeliveryConfigurations) > 0 { + if !reflect.DeepEqual(a.ko.Spec.LogDeliveryConfigurations, b.ko.Spec.LogDeliveryConfigurations) { + delta.Add("Spec.LogDeliveryConfigurations", a.ko.Spec.LogDeliveryConfigurations, b.ko.Spec.LogDeliveryConfigurations) + } + } if ackcompare.HasNilDifference(a.ko.Spec.NetworkType, b.ko.Spec.NetworkType) { delta.Add("Spec.NetworkType", a.ko.Spec.NetworkType, b.ko.Spec.NetworkType) } else if a.ko.Spec.NetworkType != nil && b.ko.Spec.NetworkType != nil { diff --git a/pkg/resource/cache_cluster/hooks.go b/pkg/resource/cache_cluster/hooks.go index b0afced3..a5559fd9 100644 --- a/pkg/resource/cache_cluster/hooks.go +++ b/pkg/resource/cache_cluster/hooks.go @@ -20,6 +20,7 @@ import ( "slices" ackcompare "github.com/aws-controllers-k8s/runtime/pkg/compare" + ackerr "github.com/aws-controllers-k8s/runtime/pkg/errors" ackrequeue "github.com/aws-controllers-k8s/runtime/pkg/requeue" svcsdk "github.com/aws/aws-sdk-go/service/elasticache" @@ -131,3 +132,10 @@ func (rm *resourceManager) updateCacheClusterPayload(input *svcsdk.ModifyCacheCl } return nil } + +func validateUnsupportedFields(desired *resource) error { + if len(desired.ko.Spec.LogDeliveryConfigurations) > 0 { + return ackerr.NewTerminalError(errors.New("spec.logDeliveryConfigurations is not currently supported")) + } + return nil +} diff --git a/pkg/resource/cache_cluster/sdk.go b/pkg/resource/cache_cluster/sdk.go index edb94fbe..68ed012d 100644 --- a/pkg/resource/cache_cluster/sdk.go +++ b/pkg/resource/cache_cluster/sdk.go @@ -250,20 +250,57 @@ func (rm *resourceManager) sdkFind( } else { ko.Spec.IPDiscovery = nil } + if elem.LogDeliveryConfigurations != nil { + f18 := []*svcapitypes.LogDeliveryConfigurationRequest{} + for _, f18iter := range elem.LogDeliveryConfigurations { + f18elem := &svcapitypes.LogDeliveryConfigurationRequest{} + if f18iter.DestinationDetails != nil { + f18elemf0 := &svcapitypes.DestinationDetails{} + if f18iter.DestinationDetails.CloudWatchLogsDetails != nil { + f18elemf0f0 := &svcapitypes.CloudWatchLogsDestinationDetails{} + if f18iter.DestinationDetails.CloudWatchLogsDetails.LogGroup != nil { + f18elemf0f0.LogGroup = f18iter.DestinationDetails.CloudWatchLogsDetails.LogGroup + } + f18elemf0.CloudWatchLogsDetails = f18elemf0f0 + } + if f18iter.DestinationDetails.KinesisFirehoseDetails != nil { + f18elemf0f1 := &svcapitypes.KinesisFirehoseDestinationDetails{} + if f18iter.DestinationDetails.KinesisFirehoseDetails.DeliveryStream != nil { + f18elemf0f1.DeliveryStream = f18iter.DestinationDetails.KinesisFirehoseDetails.DeliveryStream + } + f18elemf0.KinesisFirehoseDetails = f18elemf0f1 + } + f18elem.DestinationDetails = f18elemf0 + } + if f18iter.DestinationType != nil { + f18elem.DestinationType = f18iter.DestinationType + } + if f18iter.LogFormat != nil { + f18elem.LogFormat = f18iter.LogFormat + } + if f18iter.LogType != nil { + f18elem.LogType = f18iter.LogType + } + f18 = append(f18, f18elem) + } + ko.Spec.LogDeliveryConfigurations = f18 + } else { + ko.Spec.LogDeliveryConfigurations = nil + } if elem.NetworkType != nil { ko.Spec.NetworkType = elem.NetworkType } else { ko.Spec.NetworkType = nil } if elem.NotificationConfiguration != nil { - f19 := &svcapitypes.NotificationConfiguration{} + f20 := &svcapitypes.NotificationConfiguration{} if elem.NotificationConfiguration.TopicArn != nil { - f19.TopicARN = elem.NotificationConfiguration.TopicArn + f20.TopicARN = elem.NotificationConfiguration.TopicArn } if elem.NotificationConfiguration.TopicStatus != nil { - f19.TopicStatus = elem.NotificationConfiguration.TopicStatus + f20.TopicStatus = elem.NotificationConfiguration.TopicStatus } - ko.Status.NotificationConfiguration = f19 + ko.Status.NotificationConfiguration = f20 } else { ko.Status.NotificationConfiguration = nil } @@ -273,35 +310,35 @@ func (rm *resourceManager) sdkFind( ko.Spec.NumCacheNodes = nil } if elem.PendingModifiedValues != nil { - f21 := &svcapitypes.PendingModifiedValues{} + f22 := &svcapitypes.PendingModifiedValues{} if elem.PendingModifiedValues.AuthTokenStatus != nil { - f21.AuthTokenStatus = elem.PendingModifiedValues.AuthTokenStatus + f22.AuthTokenStatus = elem.PendingModifiedValues.AuthTokenStatus } if elem.PendingModifiedValues.CacheNodeIdsToRemove != nil { - f21f1 := []*string{} - for _, f21f1iter := range elem.PendingModifiedValues.CacheNodeIdsToRemove { - var f21f1elem string - f21f1elem = *f21f1iter - f21f1 = append(f21f1, &f21f1elem) + f22f1 := []*string{} + for _, f22f1iter := range elem.PendingModifiedValues.CacheNodeIdsToRemove { + var f22f1elem string + f22f1elem = *f22f1iter + f22f1 = append(f22f1, &f22f1elem) } - f21.CacheNodeIDsToRemove = f21f1 + f22.CacheNodeIDsToRemove = f22f1 } if elem.PendingModifiedValues.CacheNodeType != nil { - f21.CacheNodeType = elem.PendingModifiedValues.CacheNodeType + f22.CacheNodeType = elem.PendingModifiedValues.CacheNodeType } if elem.PendingModifiedValues.EngineVersion != nil { - f21.EngineVersion = elem.PendingModifiedValues.EngineVersion + f22.EngineVersion = elem.PendingModifiedValues.EngineVersion } if elem.PendingModifiedValues.NumCacheNodes != nil { - f21.NumCacheNodes = elem.PendingModifiedValues.NumCacheNodes + f22.NumCacheNodes = elem.PendingModifiedValues.NumCacheNodes } if elem.PendingModifiedValues.TransitEncryptionEnabled != nil { - f21.TransitEncryptionEnabled = elem.PendingModifiedValues.TransitEncryptionEnabled + f22.TransitEncryptionEnabled = elem.PendingModifiedValues.TransitEncryptionEnabled } if elem.PendingModifiedValues.TransitEncryptionMode != nil { - f21.TransitEncryptionMode = elem.PendingModifiedValues.TransitEncryptionMode + f22.TransitEncryptionMode = elem.PendingModifiedValues.TransitEncryptionMode } - ko.Status.PendingModifiedValues = f21 + ko.Status.PendingModifiedValues = f22 } else { ko.Status.PendingModifiedValues = nil } @@ -331,18 +368,18 @@ func (rm *resourceManager) sdkFind( ko.Status.ReplicationGroupLogDeliveryEnabled = nil } if elem.SecurityGroups != nil { - f27 := []*svcapitypes.SecurityGroupMembership{} - for _, f27iter := range elem.SecurityGroups { - f27elem := &svcapitypes.SecurityGroupMembership{} - if f27iter.SecurityGroupId != nil { - f27elem.SecurityGroupID = f27iter.SecurityGroupId + f28 := []*svcapitypes.SecurityGroupMembership{} + for _, f28iter := range elem.SecurityGroups { + f28elem := &svcapitypes.SecurityGroupMembership{} + if f28iter.SecurityGroupId != nil { + f28elem.SecurityGroupID = f28iter.SecurityGroupId } - if f27iter.Status != nil { - f27elem.Status = f27iter.Status + if f28iter.Status != nil { + f28elem.Status = f28iter.Status } - f27 = append(f27, f27elem) + f28 = append(f28, f28elem) } - ko.Status.SecurityGroups = f27 + ko.Status.SecurityGroups = f28 } else { ko.Status.SecurityGroups = nil } @@ -441,6 +478,10 @@ func (rm *resourceManager) sdkCreate( defer func() { exit(err) }() + if err := validateUnsupportedFields(desired); err != nil { + return nil, err + } + input, err := rm.newCreateRequestPayload(ctx, desired) if err != nil { return nil, err @@ -619,20 +660,57 @@ func (rm *resourceManager) sdkCreate( } else { ko.Spec.IPDiscovery = nil } + if resp.CacheCluster.LogDeliveryConfigurations != nil { + f18 := []*svcapitypes.LogDeliveryConfigurationRequest{} + for _, f18iter := range resp.CacheCluster.LogDeliveryConfigurations { + f18elem := &svcapitypes.LogDeliveryConfigurationRequest{} + if f18iter.DestinationDetails != nil { + f18elemf0 := &svcapitypes.DestinationDetails{} + if f18iter.DestinationDetails.CloudWatchLogsDetails != nil { + f18elemf0f0 := &svcapitypes.CloudWatchLogsDestinationDetails{} + if f18iter.DestinationDetails.CloudWatchLogsDetails.LogGroup != nil { + f18elemf0f0.LogGroup = f18iter.DestinationDetails.CloudWatchLogsDetails.LogGroup + } + f18elemf0.CloudWatchLogsDetails = f18elemf0f0 + } + if f18iter.DestinationDetails.KinesisFirehoseDetails != nil { + f18elemf0f1 := &svcapitypes.KinesisFirehoseDestinationDetails{} + if f18iter.DestinationDetails.KinesisFirehoseDetails.DeliveryStream != nil { + f18elemf0f1.DeliveryStream = f18iter.DestinationDetails.KinesisFirehoseDetails.DeliveryStream + } + f18elemf0.KinesisFirehoseDetails = f18elemf0f1 + } + f18elem.DestinationDetails = f18elemf0 + } + if f18iter.DestinationType != nil { + f18elem.DestinationType = f18iter.DestinationType + } + if f18iter.LogFormat != nil { + f18elem.LogFormat = f18iter.LogFormat + } + if f18iter.LogType != nil { + f18elem.LogType = f18iter.LogType + } + f18 = append(f18, f18elem) + } + ko.Spec.LogDeliveryConfigurations = f18 + } else { + ko.Spec.LogDeliveryConfigurations = nil + } if resp.CacheCluster.NetworkType != nil { ko.Spec.NetworkType = resp.CacheCluster.NetworkType } else { ko.Spec.NetworkType = nil } if resp.CacheCluster.NotificationConfiguration != nil { - f19 := &svcapitypes.NotificationConfiguration{} + f20 := &svcapitypes.NotificationConfiguration{} if resp.CacheCluster.NotificationConfiguration.TopicArn != nil { - f19.TopicARN = resp.CacheCluster.NotificationConfiguration.TopicArn + f20.TopicARN = resp.CacheCluster.NotificationConfiguration.TopicArn } if resp.CacheCluster.NotificationConfiguration.TopicStatus != nil { - f19.TopicStatus = resp.CacheCluster.NotificationConfiguration.TopicStatus + f20.TopicStatus = resp.CacheCluster.NotificationConfiguration.TopicStatus } - ko.Status.NotificationConfiguration = f19 + ko.Status.NotificationConfiguration = f20 } else { ko.Status.NotificationConfiguration = nil } @@ -642,35 +720,35 @@ func (rm *resourceManager) sdkCreate( ko.Spec.NumCacheNodes = nil } if resp.CacheCluster.PendingModifiedValues != nil { - f21 := &svcapitypes.PendingModifiedValues{} + f22 := &svcapitypes.PendingModifiedValues{} if resp.CacheCluster.PendingModifiedValues.AuthTokenStatus != nil { - f21.AuthTokenStatus = resp.CacheCluster.PendingModifiedValues.AuthTokenStatus + f22.AuthTokenStatus = resp.CacheCluster.PendingModifiedValues.AuthTokenStatus } if resp.CacheCluster.PendingModifiedValues.CacheNodeIdsToRemove != nil { - f21f1 := []*string{} - for _, f21f1iter := range resp.CacheCluster.PendingModifiedValues.CacheNodeIdsToRemove { - var f21f1elem string - f21f1elem = *f21f1iter - f21f1 = append(f21f1, &f21f1elem) + f22f1 := []*string{} + for _, f22f1iter := range resp.CacheCluster.PendingModifiedValues.CacheNodeIdsToRemove { + var f22f1elem string + f22f1elem = *f22f1iter + f22f1 = append(f22f1, &f22f1elem) } - f21.CacheNodeIDsToRemove = f21f1 + f22.CacheNodeIDsToRemove = f22f1 } if resp.CacheCluster.PendingModifiedValues.CacheNodeType != nil { - f21.CacheNodeType = resp.CacheCluster.PendingModifiedValues.CacheNodeType + f22.CacheNodeType = resp.CacheCluster.PendingModifiedValues.CacheNodeType } if resp.CacheCluster.PendingModifiedValues.EngineVersion != nil { - f21.EngineVersion = resp.CacheCluster.PendingModifiedValues.EngineVersion + f22.EngineVersion = resp.CacheCluster.PendingModifiedValues.EngineVersion } if resp.CacheCluster.PendingModifiedValues.NumCacheNodes != nil { - f21.NumCacheNodes = resp.CacheCluster.PendingModifiedValues.NumCacheNodes + f22.NumCacheNodes = resp.CacheCluster.PendingModifiedValues.NumCacheNodes } if resp.CacheCluster.PendingModifiedValues.TransitEncryptionEnabled != nil { - f21.TransitEncryptionEnabled = resp.CacheCluster.PendingModifiedValues.TransitEncryptionEnabled + f22.TransitEncryptionEnabled = resp.CacheCluster.PendingModifiedValues.TransitEncryptionEnabled } if resp.CacheCluster.PendingModifiedValues.TransitEncryptionMode != nil { - f21.TransitEncryptionMode = resp.CacheCluster.PendingModifiedValues.TransitEncryptionMode + f22.TransitEncryptionMode = resp.CacheCluster.PendingModifiedValues.TransitEncryptionMode } - ko.Status.PendingModifiedValues = f21 + ko.Status.PendingModifiedValues = f22 } else { ko.Status.PendingModifiedValues = nil } @@ -700,18 +778,18 @@ func (rm *resourceManager) sdkCreate( ko.Status.ReplicationGroupLogDeliveryEnabled = nil } if resp.CacheCluster.SecurityGroups != nil { - f27 := []*svcapitypes.SecurityGroupMembership{} - for _, f27iter := range resp.CacheCluster.SecurityGroups { - f27elem := &svcapitypes.SecurityGroupMembership{} - if f27iter.SecurityGroupId != nil { - f27elem.SecurityGroupID = f27iter.SecurityGroupId + f28 := []*svcapitypes.SecurityGroupMembership{} + for _, f28iter := range resp.CacheCluster.SecurityGroups { + f28elem := &svcapitypes.SecurityGroupMembership{} + if f28iter.SecurityGroupId != nil { + f28elem.SecurityGroupID = f28iter.SecurityGroupId } - if f27iter.Status != nil { - f27elem.Status = f27iter.Status + if f28iter.Status != nil { + f28elem.Status = f28iter.Status } - f27 = append(f27, f27elem) + f28 = append(f28, f28elem) } - ko.Status.SecurityGroups = f27 + ko.Status.SecurityGroups = f28 } else { ko.Status.SecurityGroups = nil } @@ -1144,20 +1222,57 @@ func (rm *resourceManager) sdkUpdate( } else { ko.Spec.IPDiscovery = nil } + if resp.CacheCluster.LogDeliveryConfigurations != nil { + f18 := []*svcapitypes.LogDeliveryConfigurationRequest{} + for _, f18iter := range resp.CacheCluster.LogDeliveryConfigurations { + f18elem := &svcapitypes.LogDeliveryConfigurationRequest{} + if f18iter.DestinationDetails != nil { + f18elemf0 := &svcapitypes.DestinationDetails{} + if f18iter.DestinationDetails.CloudWatchLogsDetails != nil { + f18elemf0f0 := &svcapitypes.CloudWatchLogsDestinationDetails{} + if f18iter.DestinationDetails.CloudWatchLogsDetails.LogGroup != nil { + f18elemf0f0.LogGroup = f18iter.DestinationDetails.CloudWatchLogsDetails.LogGroup + } + f18elemf0.CloudWatchLogsDetails = f18elemf0f0 + } + if f18iter.DestinationDetails.KinesisFirehoseDetails != nil { + f18elemf0f1 := &svcapitypes.KinesisFirehoseDestinationDetails{} + if f18iter.DestinationDetails.KinesisFirehoseDetails.DeliveryStream != nil { + f18elemf0f1.DeliveryStream = f18iter.DestinationDetails.KinesisFirehoseDetails.DeliveryStream + } + f18elemf0.KinesisFirehoseDetails = f18elemf0f1 + } + f18elem.DestinationDetails = f18elemf0 + } + if f18iter.DestinationType != nil { + f18elem.DestinationType = f18iter.DestinationType + } + if f18iter.LogFormat != nil { + f18elem.LogFormat = f18iter.LogFormat + } + if f18iter.LogType != nil { + f18elem.LogType = f18iter.LogType + } + f18 = append(f18, f18elem) + } + ko.Spec.LogDeliveryConfigurations = f18 + } else { + ko.Spec.LogDeliveryConfigurations = nil + } if resp.CacheCluster.NetworkType != nil { ko.Spec.NetworkType = resp.CacheCluster.NetworkType } else { ko.Spec.NetworkType = nil } if resp.CacheCluster.NotificationConfiguration != nil { - f19 := &svcapitypes.NotificationConfiguration{} + f20 := &svcapitypes.NotificationConfiguration{} if resp.CacheCluster.NotificationConfiguration.TopicArn != nil { - f19.TopicARN = resp.CacheCluster.NotificationConfiguration.TopicArn + f20.TopicARN = resp.CacheCluster.NotificationConfiguration.TopicArn } if resp.CacheCluster.NotificationConfiguration.TopicStatus != nil { - f19.TopicStatus = resp.CacheCluster.NotificationConfiguration.TopicStatus + f20.TopicStatus = resp.CacheCluster.NotificationConfiguration.TopicStatus } - ko.Status.NotificationConfiguration = f19 + ko.Status.NotificationConfiguration = f20 } else { ko.Status.NotificationConfiguration = nil } @@ -1167,35 +1282,35 @@ func (rm *resourceManager) sdkUpdate( ko.Spec.NumCacheNodes = nil } if resp.CacheCluster.PendingModifiedValues != nil { - f21 := &svcapitypes.PendingModifiedValues{} + f22 := &svcapitypes.PendingModifiedValues{} if resp.CacheCluster.PendingModifiedValues.AuthTokenStatus != nil { - f21.AuthTokenStatus = resp.CacheCluster.PendingModifiedValues.AuthTokenStatus + f22.AuthTokenStatus = resp.CacheCluster.PendingModifiedValues.AuthTokenStatus } if resp.CacheCluster.PendingModifiedValues.CacheNodeIdsToRemove != nil { - f21f1 := []*string{} - for _, f21f1iter := range resp.CacheCluster.PendingModifiedValues.CacheNodeIdsToRemove { - var f21f1elem string - f21f1elem = *f21f1iter - f21f1 = append(f21f1, &f21f1elem) + f22f1 := []*string{} + for _, f22f1iter := range resp.CacheCluster.PendingModifiedValues.CacheNodeIdsToRemove { + var f22f1elem string + f22f1elem = *f22f1iter + f22f1 = append(f22f1, &f22f1elem) } - f21.CacheNodeIDsToRemove = f21f1 + f22.CacheNodeIDsToRemove = f22f1 } if resp.CacheCluster.PendingModifiedValues.CacheNodeType != nil { - f21.CacheNodeType = resp.CacheCluster.PendingModifiedValues.CacheNodeType + f22.CacheNodeType = resp.CacheCluster.PendingModifiedValues.CacheNodeType } if resp.CacheCluster.PendingModifiedValues.EngineVersion != nil { - f21.EngineVersion = resp.CacheCluster.PendingModifiedValues.EngineVersion + f22.EngineVersion = resp.CacheCluster.PendingModifiedValues.EngineVersion } if resp.CacheCluster.PendingModifiedValues.NumCacheNodes != nil { - f21.NumCacheNodes = resp.CacheCluster.PendingModifiedValues.NumCacheNodes + f22.NumCacheNodes = resp.CacheCluster.PendingModifiedValues.NumCacheNodes } if resp.CacheCluster.PendingModifiedValues.TransitEncryptionEnabled != nil { - f21.TransitEncryptionEnabled = resp.CacheCluster.PendingModifiedValues.TransitEncryptionEnabled + f22.TransitEncryptionEnabled = resp.CacheCluster.PendingModifiedValues.TransitEncryptionEnabled } if resp.CacheCluster.PendingModifiedValues.TransitEncryptionMode != nil { - f21.TransitEncryptionMode = resp.CacheCluster.PendingModifiedValues.TransitEncryptionMode + f22.TransitEncryptionMode = resp.CacheCluster.PendingModifiedValues.TransitEncryptionMode } - ko.Status.PendingModifiedValues = f21 + ko.Status.PendingModifiedValues = f22 } else { ko.Status.PendingModifiedValues = nil } @@ -1225,18 +1340,18 @@ func (rm *resourceManager) sdkUpdate( ko.Status.ReplicationGroupLogDeliveryEnabled = nil } if resp.CacheCluster.SecurityGroups != nil { - f27 := []*svcapitypes.SecurityGroupMembership{} - for _, f27iter := range resp.CacheCluster.SecurityGroups { - f27elem := &svcapitypes.SecurityGroupMembership{} - if f27iter.SecurityGroupId != nil { - f27elem.SecurityGroupID = f27iter.SecurityGroupId + f28 := []*svcapitypes.SecurityGroupMembership{} + for _, f28iter := range resp.CacheCluster.SecurityGroups { + f28elem := &svcapitypes.SecurityGroupMembership{} + if f28iter.SecurityGroupId != nil { + f28elem.SecurityGroupID = f28iter.SecurityGroupId } - if f27iter.Status != nil { - f27elem.Status = f27iter.Status + if f28iter.Status != nil { + f28elem.Status = f28iter.Status } - f27 = append(f27, f27elem) + f28 = append(f28, f28elem) } - ko.Status.SecurityGroups = f27 + ko.Status.SecurityGroups = f28 } else { ko.Status.SecurityGroups = nil } @@ -1600,6 +1715,9 @@ func (rm *resourceManager) getImmutableFieldChanges( if delta.DifferentAt("Spec.CacheParameterGroupName") { fields = append(fields, "CacheParameterGroupName") } + if delta.DifferentAt("Spec.LogDeliveryConfigurations") { + fields = append(fields, "LogDeliveryConfigurations") + } if delta.DifferentAt("Spec.ReplicationGroupID") { fields = append(fields, "ReplicationGroupID") } diff --git a/pkg/resource/replication_group/sdk.go b/pkg/resource/replication_group/sdk.go index f55663f8..f10ac7f1 100644 --- a/pkg/resource/replication_group/sdk.go +++ b/pkg/resource/replication_group/sdk.go @@ -1630,42 +1630,42 @@ func (rm *resourceManager) newUpdateRequestPayload( res.SetCacheSecurityGroupNames(f7) } if r.ko.Spec.LogDeliveryConfigurations != nil { - f8 := []*svcsdk.LogDeliveryConfigurationRequest{} - for _, f8iter := range r.ko.Spec.LogDeliveryConfigurations { - f8elem := &svcsdk.LogDeliveryConfigurationRequest{} - if f8iter.DestinationDetails != nil { - f8elemf0 := &svcsdk.DestinationDetails{} - if f8iter.DestinationDetails.CloudWatchLogsDetails != nil { - f8elemf0f0 := &svcsdk.CloudWatchLogsDestinationDetails{} - if f8iter.DestinationDetails.CloudWatchLogsDetails.LogGroup != nil { - f8elemf0f0.SetLogGroup(*f8iter.DestinationDetails.CloudWatchLogsDetails.LogGroup) + f10 := []*svcsdk.LogDeliveryConfigurationRequest{} + for _, f10iter := range r.ko.Spec.LogDeliveryConfigurations { + f10elem := &svcsdk.LogDeliveryConfigurationRequest{} + if f10iter.DestinationDetails != nil { + f10elemf0 := &svcsdk.DestinationDetails{} + if f10iter.DestinationDetails.CloudWatchLogsDetails != nil { + f10elemf0f0 := &svcsdk.CloudWatchLogsDestinationDetails{} + if f10iter.DestinationDetails.CloudWatchLogsDetails.LogGroup != nil { + f10elemf0f0.SetLogGroup(*f10iter.DestinationDetails.CloudWatchLogsDetails.LogGroup) } - f8elemf0.SetCloudWatchLogsDetails(f8elemf0f0) + f10elemf0.SetCloudWatchLogsDetails(f10elemf0f0) } - if f8iter.DestinationDetails.KinesisFirehoseDetails != nil { - f8elemf0f1 := &svcsdk.KinesisFirehoseDestinationDetails{} - if f8iter.DestinationDetails.KinesisFirehoseDetails.DeliveryStream != nil { - f8elemf0f1.SetDeliveryStream(*f8iter.DestinationDetails.KinesisFirehoseDetails.DeliveryStream) + if f10iter.DestinationDetails.KinesisFirehoseDetails != nil { + f10elemf0f1 := &svcsdk.KinesisFirehoseDestinationDetails{} + if f10iter.DestinationDetails.KinesisFirehoseDetails.DeliveryStream != nil { + f10elemf0f1.SetDeliveryStream(*f10iter.DestinationDetails.KinesisFirehoseDetails.DeliveryStream) } - f8elemf0.SetKinesisFirehoseDetails(f8elemf0f1) + f10elemf0.SetKinesisFirehoseDetails(f10elemf0f1) } - f8elem.SetDestinationDetails(f8elemf0) + f10elem.SetDestinationDetails(f10elemf0) } - if f8iter.DestinationType != nil { - f8elem.SetDestinationType(*f8iter.DestinationType) + if f10iter.DestinationType != nil { + f10elem.SetDestinationType(*f10iter.DestinationType) } - if f8iter.Enabled != nil { - f8elem.SetEnabled(*f8iter.Enabled) + if f10iter.Enabled != nil { + f10elem.SetEnabled(*f10iter.Enabled) } - if f8iter.LogFormat != nil { - f8elem.SetLogFormat(*f8iter.LogFormat) + if f10iter.LogFormat != nil { + f10elem.SetLogFormat(*f10iter.LogFormat) } - if f8iter.LogType != nil { - f8elem.SetLogType(*f8iter.LogType) + if f10iter.LogType != nil { + f10elem.SetLogType(*f10iter.LogType) } - f8 = append(f8, f8elem) + f10 = append(f10, f10elem) } - res.SetLogDeliveryConfigurations(f8) + res.SetLogDeliveryConfigurations(f10) } if r.ko.Spec.MultiAZEnabled != nil { res.SetMultiAZEnabled(*r.ko.Spec.MultiAZEnabled) @@ -1694,6 +1694,9 @@ func (rm *resourceManager) newUpdateRequestPayload( if r.ko.Status.SnapshottingClusterID != nil { res.SetSnapshottingClusterId(*r.ko.Status.SnapshottingClusterID) } + if r.ko.Spec.TransitEncryptionEnabled != nil { + res.SetTransitEncryptionEnabled(*r.ko.Spec.TransitEncryptionEnabled) + } return res, nil } diff --git a/pkg/resource/user_group/sdk.go b/pkg/resource/user_group/sdk.go index a9c736d8..54165ed1 100644 --- a/pkg/resource/user_group/sdk.go +++ b/pkg/resource/user_group/sdk.go @@ -151,13 +151,13 @@ func (rm *resourceManager) sdkFind( ko.Spec.UserGroupID = nil } if elem.UserIds != nil { - f7 := []*string{} - for _, f7iter := range elem.UserIds { - var f7elem string - f7elem = *f7iter - f7 = append(f7, &f7elem) + f8 := []*string{} + for _, f8iter := range elem.UserIds { + var f8elem string + f8elem = *f8iter + f8 = append(f8, &f8elem) } - ko.Spec.UserIDs = f7 + ko.Spec.UserIDs = f8 } else { ko.Spec.UserIDs = nil } diff --git a/templates/hooks/cache_cluster/sdk_create_pre_build_request.go.tpl b/templates/hooks/cache_cluster/sdk_create_pre_build_request.go.tpl new file mode 100644 index 00000000..4497d3cd --- /dev/null +++ b/templates/hooks/cache_cluster/sdk_create_pre_build_request.go.tpl @@ -0,0 +1,3 @@ + if err := validateUnsupportedFields(desired); err != nil { + return nil, err + } diff --git a/test/e2e/tests/test_replicationgroup.py b/test/e2e/tests/test_replicationgroup.py index 252f4796..6d374514 100644 --- a/test/e2e/tests/test_replicationgroup.py +++ b/test/e2e/tests/test_replicationgroup.py @@ -680,6 +680,8 @@ def test_rg_associate_resources(self, rg_associate_resources_input, rg_associate # assert new state assert_associated_resources(rg_associate_resources_input['RG_ID'], sg_list, sns_topic, ug_list) + # hard flakes on this test, needs to be fixed + @pytest.mark.skip(reason="Flaky test") def test_rg_update_cpg(self, rg_update_cpg_input, rg_update_cpg, bootstrap_resources): # wait for resource to sync and retrieve initial state (reference, _) = rg_update_cpg