{
  "description": "ReplicationGroup is the Schema for the ReplicationGroups API. Provides an ElastiCache Replication Group resource.",
  "properties": {
    "apiVersion": {
      "description": "APIVersion defines the versioned schema of this representation of an object.\nServers should convert recognized schemas to the latest internal value, and\nmay reject unrecognized values.\nMore info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources",
      "type": "string"
    },
    "kind": {
      "description": "Kind is a string value representing the REST resource this object represents.\nServers may infer this from the endpoint the client submits requests to.\nCannot be updated.\nIn CamelCase.\nMore info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds",
      "type": "string"
    },
    "metadata": {
      "type": "object"
    },
    "spec": {
      "description": "ReplicationGroupSpec defines the desired state of ReplicationGroup",
      "properties": {
        "deletionPolicy": {
          "default": "Delete",
          "description": "DeletionPolicy specifies what will happen to the underlying external\nwhen this managed resource is deleted - either \"Delete\" or \"Orphan\" the\nexternal resource.\nThis field is planned to be deprecated in favor of the ManagementPolicies\nfield in a future release. Currently, both could be set independently and\nnon-default values would be honored if the feature flag is enabled.\nSee the design doc for more information: https://github.com/crossplane/crossplane/blob/499895a25d1a1a0ba1604944ef98ac7a1a71f197/design/design-doc-observe-only-resources.md?plain=1#L223",
          "enum": [
            "Orphan",
            "Delete"
          ],
          "type": "string"
        },
        "forProvider": {
          "properties": {
            "applyImmediately": {
              "description": "Specifies whether any modifications are applied immediately, or during the next maintenance window. Default is false.",
              "type": "boolean"
            },
            "atRestEncryptionEnabled": {
              "description": "Whether to enable encryption at rest.\nWhen engine is redis, default is false.\nWhen engine is valkey, default is true.",
              "type": "string"
            },
            "authTokenSecretRef": {
              "description": "Password used to access a password protected server. Can be specified only if transit_encryption_enabled = true.",
              "properties": {
                "key": {
                  "description": "The key to select.",
                  "type": "string"
                },
                "name": {
                  "description": "Name of the secret.",
                  "type": "string"
                },
                "namespace": {
                  "description": "Namespace of the secret.",
                  "type": "string"
                }
              },
              "required": [
                "key",
                "name",
                "namespace"
              ],
              "type": "object",
              "additionalProperties": false
            },
            "authTokenUpdateStrategy": {
              "description": "Strategy to use when updating the auth_token. Valid values are SET, ROTATE, and DELETE. Defaults to ROTATE.",
              "type": "string"
            },
            "autoGenerateAuthToken": {
              "description": "Password used to access a password protected server. Can be specified only if transit_encryption_enabled = true.\nIf true, the auth token will be auto-generated and stored in the Secret referenced by the authTokenSecretRef field.",
              "type": "boolean"
            },
            "autoMinorVersionUpgrade": {
              "description": "Specifies whether minor version engine upgrades will be applied automatically to the underlying Cache Cluster instances during the maintenance window.\nOnly supported for engine type \"redis\" and if the engine version is 6 or higher.\nDefaults to true.",
              "type": "string"
            },
            "automaticFailoverEnabled": {
              "description": "Specifies whether a read-only replica will be automatically promoted to read/write primary if the existing primary fails. If enabled, num_cache_clusters must be greater than 1. Must be enabled for Redis (cluster mode enabled) replication groups. Defaults to false.",
              "type": "boolean"
            },
            "availabilityZones": {
              "description": "List of EC2 availability zones in which the replication group's cache clusters will be created. The order of the availability zones in the list is not considered.",
              "items": {
                "type": "string"
              },
              "type": "array",
              "x-kubernetes-list-type": "set"
            },
            "clusterMode": {
              "description": "Create a native Redis cluster. automatic_failover_enabled must be set to true. Cluster Mode documented below. Only 1 cluster_mode block is allowed. Note that configuring this block does not enable cluster mode, i.e., data sharding, this requires using a parameter group that has the parameter cluster-enabled set to true.",
              "items": {
                "properties": {
                  "numNodeGroups": {
                    "description": "Number of node groups (shards) for this Redis replication group.\nChanging this number will trigger a resizing operation before other settings modifications.",
                    "type": "number"
                  },
                  "replicasPerNodeGroup": {
                    "description": "Number of replica nodes in each node group.\nChanging this number will trigger a resizing operation before other settings modifications.\nValid values are 0 to 5.",
                    "type": "number"
                  }
                },
                "type": "object",
                "additionalProperties": false
              },
              "type": "array"
            },
            "dataTieringEnabled": {
              "description": "Enables data tiering. Data tiering is only supported for replication groups using the r6gd node type. This parameter must be set to true when using r6gd nodes.",
              "type": "boolean"
            },
            "description": {
              "description": "created description for the replication group. Must not be empty.",
              "type": "string"
            },
            "engine": {
              "description": "Name of the cache engine to be used for the clusters in this replication group. The only valid value is redis.",
              "type": "string"
            },
            "engineVersion": {
              "description": "Version number of the cache engine to be used for the cache clusters in this replication group.\nIf the version is 6 or higher, the major and minor version can be set, e.g., 6.2,\nor the minor version can be unspecified which will use the latest version at creation time, e.g., 6.x.\nOtherwise, specify the full version desired, e.g., 5.0.6.\nThe actual engine version used is returned in the attribute engine_version_actual, see Attributes Reference below.",
              "type": "string"
            },
            "finalSnapshotIdentifier": {
              "description": "The name of your final node group (shard) snapshot. ElastiCache creates the snapshot from the primary node in the cluster. If omitted, no final snapshot will be made.",
              "type": "string"
            },
            "globalReplicationGroupId": {
              "description": "The ID of the global replication group to which this replication group should belong. If this parameter is specified, the replication group is added to the specified global replication group as a secondary replication group; otherwise, the replication group is not part of any global replication group. If global_replication_group_id is set, the num_node_groups parameter (or the num_node_groups parameter of the deprecated cluster_mode block) cannot be set.",
              "type": "string"
            },
            "globalReplicationGroupIdRef": {
              "description": "Reference to a GlobalReplicationGroup in elasticache to populate globalReplicationGroupId.",
              "properties": {
                "name": {
                  "description": "Name of the referenced object.",
                  "type": "string"
                },
                "policy": {
                  "description": "Policies for referencing.",
                  "properties": {
                    "resolution": {
                      "default": "Required",
                      "description": "Resolution specifies whether resolution of this reference is required.\nThe default is 'Required', which means the reconcile will fail if the\nreference cannot be resolved. 'Optional' means this reference will be\na no-op if it cannot be resolved.",
                      "enum": [
                        "Required",
                        "Optional"
                      ],
                      "type": "string"
                    },
                    "resolve": {
                      "description": "Resolve specifies when this reference should be resolved. The default\nis 'IfNotPresent', which will attempt to resolve the reference only when\nthe corresponding field is not present. Use 'Always' to resolve the\nreference on every reconcile.",
                      "enum": [
                        "Always",
                        "IfNotPresent"
                      ],
                      "type": "string"
                    }
                  },
                  "type": "object",
                  "additionalProperties": false
                }
              },
              "required": [
                "name"
              ],
              "type": "object",
              "additionalProperties": false
            },
            "globalReplicationGroupIdSelector": {
              "description": "Selector for a GlobalReplicationGroup in elasticache to populate globalReplicationGroupId.",
              "properties": {
                "matchControllerRef": {
                  "description": "MatchControllerRef ensures an object with the same controller reference\nas the selecting object is selected.",
                  "type": "boolean"
                },
                "matchLabels": {
                  "additionalProperties": {
                    "type": "string"
                  },
                  "description": "MatchLabels ensures an object with matching labels is selected.",
                  "type": "object"
                },
                "policy": {
                  "description": "Policies for selection.",
                  "properties": {
                    "resolution": {
                      "default": "Required",
                      "description": "Resolution specifies whether resolution of this reference is required.\nThe default is 'Required', which means the reconcile will fail if the\nreference cannot be resolved. 'Optional' means this reference will be\na no-op if it cannot be resolved.",
                      "enum": [
                        "Required",
                        "Optional"
                      ],
                      "type": "string"
                    },
                    "resolve": {
                      "description": "Resolve specifies when this reference should be resolved. The default\nis 'IfNotPresent', which will attempt to resolve the reference only when\nthe corresponding field is not present. Use 'Always' to resolve the\nreference on every reconcile.",
                      "enum": [
                        "Always",
                        "IfNotPresent"
                      ],
                      "type": "string"
                    }
                  },
                  "type": "object",
                  "additionalProperties": false
                }
              },
              "type": "object",
              "additionalProperties": false
            },
            "ipDiscovery": {
              "description": "The IP version to advertise in the discovery protocol. Valid values are ipv4 or ipv6.",
              "type": "string"
            },
            "kmsKeyId": {
              "description": "The ARN of the key that you wish to use if encrypting at rest. If not supplied, uses service managed encryption. Can be specified only if at_rest_encryption_enabled = true.",
              "type": "string"
            },
            "kmsKeyIdRef": {
              "description": "Reference to a Key in kms to populate kmsKeyId.",
              "properties": {
                "name": {
                  "description": "Name of the referenced object.",
                  "type": "string"
                },
                "policy": {
                  "description": "Policies for referencing.",
                  "properties": {
                    "resolution": {
                      "default": "Required",
                      "description": "Resolution specifies whether resolution of this reference is required.\nThe default is 'Required', which means the reconcile will fail if the\nreference cannot be resolved. 'Optional' means this reference will be\na no-op if it cannot be resolved.",
                      "enum": [
                        "Required",
                        "Optional"
                      ],
                      "type": "string"
                    },
                    "resolve": {
                      "description": "Resolve specifies when this reference should be resolved. The default\nis 'IfNotPresent', which will attempt to resolve the reference only when\nthe corresponding field is not present. Use 'Always' to resolve the\nreference on every reconcile.",
                      "enum": [
                        "Always",
                        "IfNotPresent"
                      ],
                      "type": "string"
                    }
                  },
                  "type": "object",
                  "additionalProperties": false
                }
              },
              "required": [
                "name"
              ],
              "type": "object",
              "additionalProperties": false
            },
            "kmsKeyIdSelector": {
              "description": "Selector for a Key in kms to populate kmsKeyId.",
              "properties": {
                "matchControllerRef": {
                  "description": "MatchControllerRef ensures an object with the same controller reference\nas the selecting object is selected.",
                  "type": "boolean"
                },
                "matchLabels": {
                  "additionalProperties": {
                    "type": "string"
                  },
                  "description": "MatchLabels ensures an object with matching labels is selected.",
                  "type": "object"
                },
                "policy": {
                  "description": "Policies for selection.",
                  "properties": {
                    "resolution": {
                      "default": "Required",
                      "description": "Resolution specifies whether resolution of this reference is required.\nThe default is 'Required', which means the reconcile will fail if the\nreference cannot be resolved. 'Optional' means this reference will be\na no-op if it cannot be resolved.",
                      "enum": [
                        "Required",
                        "Optional"
                      ],
                      "type": "string"
                    },
                    "resolve": {
                      "description": "Resolve specifies when this reference should be resolved. The default\nis 'IfNotPresent', which will attempt to resolve the reference only when\nthe corresponding field is not present. Use 'Always' to resolve the\nreference on every reconcile.",
                      "enum": [
                        "Always",
                        "IfNotPresent"
                      ],
                      "type": "string"
                    }
                  },
                  "type": "object",
                  "additionalProperties": false
                }
              },
              "type": "object",
              "additionalProperties": false
            },
            "logDeliveryConfiguration": {
              "description": "Specifies the destination and format of Redis SLOWLOG or Redis Engine Log. See the documentation on Amazon ElastiCache. See Log Delivery Configuration below for more details.",
              "items": {
                "properties": {
                  "destination": {
                    "description": "Name of either the CloudWatch Logs LogGroup or Kinesis Data Firehose resource.",
                    "type": "string"
                  },
                  "destinationType": {
                    "description": "For CloudWatch Logs use cloudwatch-logs or for Kinesis Data Firehose use kinesis-firehose.",
                    "type": "string"
                  },
                  "logFormat": {
                    "description": "Valid values are json or text",
                    "type": "string"
                  },
                  "logType": {
                    "description": "Valid values are  slow-log or engine-log. Max 1 of each.",
                    "type": "string"
                  }
                },
                "type": "object",
                "additionalProperties": false
              },
              "type": "array"
            },
            "maintenanceWindow": {
              "description": "ddd:hh24:mi (24H Clock UTC). The minimum maintenance window is a 60 minute period. Example: sun:05:00-sun:09:00",
              "type": "string"
            },
            "multiAzEnabled": {
              "description": "Specifies whether to enable Multi-AZ Support for the replication group. If true, automatic_failover_enabled must also be enabled. Defaults to false.",
              "type": "boolean"
            },
            "networkType": {
              "description": "The IP versions for cache cluster connections. Valid values are ipv4, ipv6 or dual_stack.",
              "type": "string"
            },
            "nodeType": {
              "description": "Instance class to be used. See AWS documentation for information on supported node types and guidance on selecting node types. Required unless global_replication_group_id is set. Cannot be set if global_replication_group_id is set.",
              "type": "string"
            },
            "notificationTopicArn": {
              "description": "east-1:012345678999:my_sns_topic",
              "type": "string"
            },
            "numCacheClusters": {
              "description": "00#.",
              "type": "number"
            },
            "numNodeGroups": {
              "description": "Number of node groups (shards) for this Redis replication group.\nChanging this number will trigger a resizing operation before other settings modifications.",
              "type": "number"
            },
            "numberCacheClusters": {
              "description": "Number of cache clusters (primary and replicas) this replication group will have. If Multi-AZ is enabled, the value of this parameter must be at least 2. Updates will occur before other modifications. Conflicts with num_cache_clusters, num_node_groups, or the deprecated cluster_mode. Defaults to 1.",
              "type": "number"
            },
            "parameterGroupName": {
              "description": "Name of the parameter group to associate with this replication group. If this argument is omitted, the default cache parameter group for the specified engine is used. To enable \"cluster mode\", i.e., data sharding, use a parameter group that has the parameter cluster-enabled set to true.",
              "type": "string"
            },
            "port": {
              "description": "\u2013  Port number on which each of the cache nodes will accept connections. For Memcache the default is 11211, and for Redis the default port is 6379.",
              "type": "number"
            },
            "preferredCacheClusterAzs": {
              "description": "List of EC2 availability zones in which the replication group's cache clusters will be created. The order of the availability zones in the list is considered. The first item in the list will be the primary node. Ignored when updating.",
              "items": {
                "type": "string"
              },
              "type": "array"
            },
            "region": {
              "description": "Region where this resource will be managed. Defaults to the Region set in the provider configuration.\nRegion is the region you'd like your resource to be created in.",
              "type": "string"
            },
            "replicasPerNodeGroup": {
              "description": "Number of replica nodes in each node group.\nChanging this number will trigger a resizing operation before other settings modifications.\nValid values are 0 to 5.",
              "type": "number"
            },
            "replicationGroupDescription": {
              "description": "created description for the replication group. Must not be empty.",
              "type": "string"
            },
            "securityGroupIdRefs": {
              "description": "References to SecurityGroup in ec2 to populate securityGroupIds.",
              "items": {
                "description": "A Reference to a named object.",
                "properties": {
                  "name": {
                    "description": "Name of the referenced object.",
                    "type": "string"
                  },
                  "policy": {
                    "description": "Policies for referencing.",
                    "properties": {
                      "resolution": {
                        "default": "Required",
                        "description": "Resolution specifies whether resolution of this reference is required.\nThe default is 'Required', which means the reconcile will fail if the\nreference cannot be resolved. 'Optional' means this reference will be\na no-op if it cannot be resolved.",
                        "enum": [
                          "Required",
                          "Optional"
                        ],
                        "type": "string"
                      },
                      "resolve": {
                        "description": "Resolve specifies when this reference should be resolved. The default\nis 'IfNotPresent', which will attempt to resolve the reference only when\nthe corresponding field is not present. Use 'Always' to resolve the\nreference on every reconcile.",
                        "enum": [
                          "Always",
                          "IfNotPresent"
                        ],
                        "type": "string"
                      }
                    },
                    "type": "object",
                    "additionalProperties": false
                  }
                },
                "required": [
                  "name"
                ],
                "type": "object",
                "additionalProperties": false
              },
              "type": "array"
            },
            "securityGroupIdSelector": {
              "description": "Selector for a list of SecurityGroup in ec2 to populate securityGroupIds.",
              "properties": {
                "matchControllerRef": {
                  "description": "MatchControllerRef ensures an object with the same controller reference\nas the selecting object is selected.",
                  "type": "boolean"
                },
                "matchLabels": {
                  "additionalProperties": {
                    "type": "string"
                  },
                  "description": "MatchLabels ensures an object with matching labels is selected.",
                  "type": "object"
                },
                "policy": {
                  "description": "Policies for selection.",
                  "properties": {
                    "resolution": {
                      "default": "Required",
                      "description": "Resolution specifies whether resolution of this reference is required.\nThe default is 'Required', which means the reconcile will fail if the\nreference cannot be resolved. 'Optional' means this reference will be\na no-op if it cannot be resolved.",
                      "enum": [
                        "Required",
                        "Optional"
                      ],
                      "type": "string"
                    },
                    "resolve": {
                      "description": "Resolve specifies when this reference should be resolved. The default\nis 'IfNotPresent', which will attempt to resolve the reference only when\nthe corresponding field is not present. Use 'Always' to resolve the\nreference on every reconcile.",
                      "enum": [
                        "Always",
                        "IfNotPresent"
                      ],
                      "type": "string"
                    }
                  },
                  "type": "object",
                  "additionalProperties": false
                }
              },
              "type": "object",
              "additionalProperties": false
            },
            "securityGroupIds": {
              "description": "One or more Amazon VPC security groups associated with this replication group. Use this parameter only when you are creating a replication group in an Amazon Virtual Private Cloud",
              "items": {
                "type": "string"
              },
              "type": "array",
              "x-kubernetes-list-type": "set"
            },
            "securityGroupNames": {
              "description": "List of cache security group names to associate with this replication group.",
              "items": {
                "type": "string"
              },
              "type": "array",
              "x-kubernetes-list-type": "set"
            },
            "snapshotArns": {
              "description": "\u2013  List of ARNs that identify Redis RDB snapshot files stored in Amazon S3. The names object names cannot contain any commas.",
              "items": {
                "type": "string"
              },
              "type": "array",
              "x-kubernetes-list-type": "set"
            },
            "snapshotName": {
              "description": "Name of a snapshot from which to restore data into the new node group. Changing the snapshot_name forces a new resource.",
              "type": "string"
            },
            "snapshotRetentionLimit": {
              "description": "Number of days for which ElastiCache will retain automatic cache cluster snapshots before deleting them. For example, if you set SnapshotRetentionLimit to 5, then a snapshot that was taken today will be retained for 5 days before being deleted. If the value of snapshot_retention_limit is set to zero (0), backups are turned off. Please note that setting a snapshot_retention_limit is not supported on cache.t1.micro cache nodes",
              "type": "number"
            },
            "snapshotWindow": {
              "description": "Daily time range (in UTC) during which ElastiCache will begin taking a daily snapshot of your cache cluster. The minimum snapshot window is a 60 minute period. Example: 05:00-09:00",
              "type": "string"
            },
            "subnetGroupName": {
              "description": "Name of the cache subnet group to be used for the replication group.",
              "type": "string"
            },
            "subnetGroupNameRef": {
              "description": "Reference to a SubnetGroup to populate subnetGroupName.",
              "properties": {
                "name": {
                  "description": "Name of the referenced object.",
                  "type": "string"
                },
                "policy": {
                  "description": "Policies for referencing.",
                  "properties": {
                    "resolution": {
                      "default": "Required",
                      "description": "Resolution specifies whether resolution of this reference is required.\nThe default is 'Required', which means the reconcile will fail if the\nreference cannot be resolved. 'Optional' means this reference will be\na no-op if it cannot be resolved.",
                      "enum": [
                        "Required",
                        "Optional"
                      ],
                      "type": "string"
                    },
                    "resolve": {
                      "description": "Resolve specifies when this reference should be resolved. The default\nis 'IfNotPresent', which will attempt to resolve the reference only when\nthe corresponding field is not present. Use 'Always' to resolve the\nreference on every reconcile.",
                      "enum": [
                        "Always",
                        "IfNotPresent"
                      ],
                      "type": "string"
                    }
                  },
                  "type": "object",
                  "additionalProperties": false
                }
              },
              "required": [
                "name"
              ],
              "type": "object",
              "additionalProperties": false
            },
            "subnetGroupNameSelector": {
              "description": "Selector for a SubnetGroup to populate subnetGroupName.",
              "properties": {
                "matchControllerRef": {
                  "description": "MatchControllerRef ensures an object with the same controller reference\nas the selecting object is selected.",
                  "type": "boolean"
                },
                "matchLabels": {
                  "additionalProperties": {
                    "type": "string"
                  },
                  "description": "MatchLabels ensures an object with matching labels is selected.",
                  "type": "object"
                },
                "policy": {
                  "description": "Policies for selection.",
                  "properties": {
                    "resolution": {
                      "default": "Required",
                      "description": "Resolution specifies whether resolution of this reference is required.\nThe default is 'Required', which means the reconcile will fail if the\nreference cannot be resolved. 'Optional' means this reference will be\na no-op if it cannot be resolved.",
                      "enum": [
                        "Required",
                        "Optional"
                      ],
                      "type": "string"
                    },
                    "resolve": {
                      "description": "Resolve specifies when this reference should be resolved. The default\nis 'IfNotPresent', which will attempt to resolve the reference only when\nthe corresponding field is not present. Use 'Always' to resolve the\nreference on every reconcile.",
                      "enum": [
                        "Always",
                        "IfNotPresent"
                      ],
                      "type": "string"
                    }
                  },
                  "type": "object",
                  "additionalProperties": false
                }
              },
              "type": "object",
              "additionalProperties": false
            },
            "tags": {
              "additionalProperties": {
                "type": "string"
              },
              "description": "Key-value map of resource tags.",
              "type": "object",
              "x-kubernetes-map-type": "granular"
            },
            "transitEncryptionEnabled": {
              "description": "Whether to enable encryption in transit.",
              "type": "boolean"
            },
            "transitEncryptionMode": {
              "description": "A setting that enables clients to migrate to in-transit encryption with no downtime.\nValid values are preferred and required.\nWhen enabling encryption on an existing replication group, this must first be set to preferred before setting it to required in a subsequent apply.\nSee the TransitEncryptionMode field in the CreateReplicationGroup API documentation for additional details.",
              "type": "string"
            },
            "userGroupIds": {
              "description": "User Group ID to associate with the replication group. Only a maximum of one (1) user group ID is valid. NOTE: This argument is a set because the AWS specification allows for multiple IDs. However, in practice, AWS only allows a maximum size of one.",
              "items": {
                "type": "string"
              },
              "type": "array",
              "x-kubernetes-list-type": "set"
            }
          },
          "required": [
            "region"
          ],
          "type": "object",
          "additionalProperties": false
        },
        "initProvider": {
          "description": "THIS IS A BETA FIELD. It will be honored\nunless the Management Policies feature flag is disabled.\nInitProvider holds the same fields as ForProvider, with the exception\nof Identifier and other resource reference fields. The fields that are\nin InitProvider are merged into ForProvider when the resource is created.\nThe same fields are also added to the terraform ignore_changes hook, to\navoid updating them after creation. This is useful for fields that are\nrequired on creation, but we do not desire to update them after creation,\nfor example because of an external controller is managing them, like an\nautoscaler.",
          "properties": {
            "applyImmediately": {
              "description": "Specifies whether any modifications are applied immediately, or during the next maintenance window. Default is false.",
              "type": "boolean"
            },
            "atRestEncryptionEnabled": {
              "description": "Whether to enable encryption at rest.\nWhen engine is redis, default is false.\nWhen engine is valkey, default is true.",
              "type": "string"
            },
            "authTokenSecretRef": {
              "description": "Password used to access a password protected server. Can be specified only if transit_encryption_enabled = true.\nIf you set autoGenerateAuthToken to true, the Secret referenced here will be created or updated with generated auth token if it does not already contain one.",
              "properties": {
                "key": {
                  "description": "The key to select.",
                  "type": "string"
                },
                "name": {
                  "description": "Name of the secret.",
                  "type": "string"
                },
                "namespace": {
                  "description": "Namespace of the secret.",
                  "type": "string"
                }
              },
              "required": [
                "key",
                "name",
                "namespace"
              ],
              "type": "object",
              "additionalProperties": false
            },
            "authTokenUpdateStrategy": {
              "description": "Strategy to use when updating the auth_token. Valid values are SET, ROTATE, and DELETE. Defaults to ROTATE.",
              "type": "string"
            },
            "autoMinorVersionUpgrade": {
              "description": "Specifies whether minor version engine upgrades will be applied automatically to the underlying Cache Cluster instances during the maintenance window.\nOnly supported for engine type \"redis\" and if the engine version is 6 or higher.\nDefaults to true.",
              "type": "string"
            },
            "automaticFailoverEnabled": {
              "description": "Specifies whether a read-only replica will be automatically promoted to read/write primary if the existing primary fails. If enabled, num_cache_clusters must be greater than 1. Must be enabled for Redis (cluster mode enabled) replication groups. Defaults to false.",
              "type": "boolean"
            },
            "availabilityZones": {
              "description": "List of EC2 availability zones in which the replication group's cache clusters will be created. The order of the availability zones in the list is not considered.",
              "items": {
                "type": "string"
              },
              "type": "array",
              "x-kubernetes-list-type": "set"
            },
            "clusterMode": {
              "description": "Create a native Redis cluster. automatic_failover_enabled must be set to true. Cluster Mode documented below. Only 1 cluster_mode block is allowed. Note that configuring this block does not enable cluster mode, i.e., data sharding, this requires using a parameter group that has the parameter cluster-enabled set to true.",
              "items": {
                "properties": {
                  "numNodeGroups": {
                    "description": "Number of node groups (shards) for this Redis replication group.\nChanging this number will trigger a resizing operation before other settings modifications.",
                    "type": "number"
                  },
                  "replicasPerNodeGroup": {
                    "description": "Number of replica nodes in each node group.\nChanging this number will trigger a resizing operation before other settings modifications.\nValid values are 0 to 5.",
                    "type": "number"
                  }
                },
                "type": "object",
                "additionalProperties": false
              },
              "type": "array"
            },
            "dataTieringEnabled": {
              "description": "Enables data tiering. Data tiering is only supported for replication groups using the r6gd node type. This parameter must be set to true when using r6gd nodes.",
              "type": "boolean"
            },
            "description": {
              "description": "created description for the replication group. Must not be empty.",
              "type": "string"
            },
            "engine": {
              "description": "Name of the cache engine to be used for the clusters in this replication group. The only valid value is redis.",
              "type": "string"
            },
            "engineVersion": {
              "description": "Version number of the cache engine to be used for the cache clusters in this replication group.\nIf the version is 6 or higher, the major and minor version can be set, e.g., 6.2,\nor the minor version can be unspecified which will use the latest version at creation time, e.g., 6.x.\nOtherwise, specify the full version desired, e.g., 5.0.6.\nThe actual engine version used is returned in the attribute engine_version_actual, see Attributes Reference below.",
              "type": "string"
            },
            "finalSnapshotIdentifier": {
              "description": "The name of your final node group (shard) snapshot. ElastiCache creates the snapshot from the primary node in the cluster. If omitted, no final snapshot will be made.",
              "type": "string"
            },
            "globalReplicationGroupId": {
              "description": "The ID of the global replication group to which this replication group should belong. If this parameter is specified, the replication group is added to the specified global replication group as a secondary replication group; otherwise, the replication group is not part of any global replication group. If global_replication_group_id is set, the num_node_groups parameter (or the num_node_groups parameter of the deprecated cluster_mode block) cannot be set.",
              "type": "string"
            },
            "globalReplicationGroupIdRef": {
              "description": "Reference to a GlobalReplicationGroup in elasticache to populate globalReplicationGroupId.",
              "properties": {
                "name": {
                  "description": "Name of the referenced object.",
                  "type": "string"
                },
                "policy": {
                  "description": "Policies for referencing.",
                  "properties": {
                    "resolution": {
                      "default": "Required",
                      "description": "Resolution specifies whether resolution of this reference is required.\nThe default is 'Required', which means the reconcile will fail if the\nreference cannot be resolved. 'Optional' means this reference will be\na no-op if it cannot be resolved.",
                      "enum": [
                        "Required",
                        "Optional"
                      ],
                      "type": "string"
                    },
                    "resolve": {
                      "description": "Resolve specifies when this reference should be resolved. The default\nis 'IfNotPresent', which will attempt to resolve the reference only when\nthe corresponding field is not present. Use 'Always' to resolve the\nreference on every reconcile.",
                      "enum": [
                        "Always",
                        "IfNotPresent"
                      ],
                      "type": "string"
                    }
                  },
                  "type": "object",
                  "additionalProperties": false
                }
              },
              "required": [
                "name"
              ],
              "type": "object",
              "additionalProperties": false
            },
            "globalReplicationGroupIdSelector": {
              "description": "Selector for a GlobalReplicationGroup in elasticache to populate globalReplicationGroupId.",
              "properties": {
                "matchControllerRef": {
                  "description": "MatchControllerRef ensures an object with the same controller reference\nas the selecting object is selected.",
                  "type": "boolean"
                },
                "matchLabels": {
                  "additionalProperties": {
                    "type": "string"
                  },
                  "description": "MatchLabels ensures an object with matching labels is selected.",
                  "type": "object"
                },
                "policy": {
                  "description": "Policies for selection.",
                  "properties": {
                    "resolution": {
                      "default": "Required",
                      "description": "Resolution specifies whether resolution of this reference is required.\nThe default is 'Required', which means the reconcile will fail if the\nreference cannot be resolved. 'Optional' means this reference will be\na no-op if it cannot be resolved.",
                      "enum": [
                        "Required",
                        "Optional"
                      ],
                      "type": "string"
                    },
                    "resolve": {
                      "description": "Resolve specifies when this reference should be resolved. The default\nis 'IfNotPresent', which will attempt to resolve the reference only when\nthe corresponding field is not present. Use 'Always' to resolve the\nreference on every reconcile.",
                      "enum": [
                        "Always",
                        "IfNotPresent"
                      ],
                      "type": "string"
                    }
                  },
                  "type": "object",
                  "additionalProperties": false
                }
              },
              "type": "object",
              "additionalProperties": false
            },
            "ipDiscovery": {
              "description": "The IP version to advertise in the discovery protocol. Valid values are ipv4 or ipv6.",
              "type": "string"
            },
            "kmsKeyId": {
              "description": "The ARN of the key that you wish to use if encrypting at rest. If not supplied, uses service managed encryption. Can be specified only if at_rest_encryption_enabled = true.",
              "type": "string"
            },
            "kmsKeyIdRef": {
              "description": "Reference to a Key in kms to populate kmsKeyId.",
              "properties": {
                "name": {
                  "description": "Name of the referenced object.",
                  "type": "string"
                },
                "policy": {
                  "description": "Policies for referencing.",
                  "properties": {
                    "resolution": {
                      "default": "Required",
                      "description": "Resolution specifies whether resolution of this reference is required.\nThe default is 'Required', which means the reconcile will fail if the\nreference cannot be resolved. 'Optional' means this reference will be\na no-op if it cannot be resolved.",
                      "enum": [
                        "Required",
                        "Optional"
                      ],
                      "type": "string"
                    },
                    "resolve": {
                      "description": "Resolve specifies when this reference should be resolved. The default\nis 'IfNotPresent', which will attempt to resolve the reference only when\nthe corresponding field is not present. Use 'Always' to resolve the\nreference on every reconcile.",
                      "enum": [
                        "Always",
                        "IfNotPresent"
                      ],
                      "type": "string"
                    }
                  },
                  "type": "object",
                  "additionalProperties": false
                }
              },
              "required": [
                "name"
              ],
              "type": "object",
              "additionalProperties": false
            },
            "kmsKeyIdSelector": {
              "description": "Selector for a Key in kms to populate kmsKeyId.",
              "properties": {
                "matchControllerRef": {
                  "description": "MatchControllerRef ensures an object with the same controller reference\nas the selecting object is selected.",
                  "type": "boolean"
                },
                "matchLabels": {
                  "additionalProperties": {
                    "type": "string"
                  },
                  "description": "MatchLabels ensures an object with matching labels is selected.",
                  "type": "object"
                },
                "policy": {
                  "description": "Policies for selection.",
                  "properties": {
                    "resolution": {
                      "default": "Required",
                      "description": "Resolution specifies whether resolution of this reference is required.\nThe default is 'Required', which means the reconcile will fail if the\nreference cannot be resolved. 'Optional' means this reference will be\na no-op if it cannot be resolved.",
                      "enum": [
                        "Required",
                        "Optional"
                      ],
                      "type": "string"
                    },
                    "resolve": {
                      "description": "Resolve specifies when this reference should be resolved. The default\nis 'IfNotPresent', which will attempt to resolve the reference only when\nthe corresponding field is not present. Use 'Always' to resolve the\nreference on every reconcile.",
                      "enum": [
                        "Always",
                        "IfNotPresent"
                      ],
                      "type": "string"
                    }
                  },
                  "type": "object",
                  "additionalProperties": false
                }
              },
              "type": "object",
              "additionalProperties": false
            },
            "logDeliveryConfiguration": {
              "description": "Specifies the destination and format of Redis SLOWLOG or Redis Engine Log. See the documentation on Amazon ElastiCache. See Log Delivery Configuration below for more details.",
              "items": {
                "properties": {
                  "destination": {
                    "description": "Name of either the CloudWatch Logs LogGroup or Kinesis Data Firehose resource.",
                    "type": "string"
                  },
                  "destinationType": {
                    "description": "For CloudWatch Logs use cloudwatch-logs or for Kinesis Data Firehose use kinesis-firehose.",
                    "type": "string"
                  },
                  "logFormat": {
                    "description": "Valid values are json or text",
                    "type": "string"
                  },
                  "logType": {
                    "description": "Valid values are  slow-log or engine-log. Max 1 of each.",
                    "type": "string"
                  }
                },
                "type": "object",
                "additionalProperties": false
              },
              "type": "array"
            },
            "maintenanceWindow": {
              "description": "ddd:hh24:mi (24H Clock UTC). The minimum maintenance window is a 60 minute period. Example: sun:05:00-sun:09:00",
              "type": "string"
            },
            "multiAzEnabled": {
              "description": "Specifies whether to enable Multi-AZ Support for the replication group. If true, automatic_failover_enabled must also be enabled. Defaults to false.",
              "type": "boolean"
            },
            "networkType": {
              "description": "The IP versions for cache cluster connections. Valid values are ipv4, ipv6 or dual_stack.",
              "type": "string"
            },
            "nodeType": {
              "description": "Instance class to be used. See AWS documentation for information on supported node types and guidance on selecting node types. Required unless global_replication_group_id is set. Cannot be set if global_replication_group_id is set.",
              "type": "string"
            },
            "notificationTopicArn": {
              "description": "east-1:012345678999:my_sns_topic",
              "type": "string"
            },
            "numCacheClusters": {
              "description": "00#.",
              "type": "number"
            },
            "numNodeGroups": {
              "description": "Number of node groups (shards) for this Redis replication group.\nChanging this number will trigger a resizing operation before other settings modifications.",
              "type": "number"
            },
            "numberCacheClusters": {
              "description": "Number of cache clusters (primary and replicas) this replication group will have. If Multi-AZ is enabled, the value of this parameter must be at least 2. Updates will occur before other modifications. Conflicts with num_cache_clusters, num_node_groups, or the deprecated cluster_mode. Defaults to 1.",
              "type": "number"
            },
            "parameterGroupName": {
              "description": "Name of the parameter group to associate with this replication group. If this argument is omitted, the default cache parameter group for the specified engine is used. To enable \"cluster mode\", i.e., data sharding, use a parameter group that has the parameter cluster-enabled set to true.",
              "type": "string"
            },
            "port": {
              "description": "\u2013  Port number on which each of the cache nodes will accept connections. For Memcache the default is 11211, and for Redis the default port is 6379.",
              "type": "number"
            },
            "preferredCacheClusterAzs": {
              "description": "List of EC2 availability zones in which the replication group's cache clusters will be created. The order of the availability zones in the list is considered. The first item in the list will be the primary node. Ignored when updating.",
              "items": {
                "type": "string"
              },
              "type": "array"
            },
            "replicasPerNodeGroup": {
              "description": "Number of replica nodes in each node group.\nChanging this number will trigger a resizing operation before other settings modifications.\nValid values are 0 to 5.",
              "type": "number"
            },
            "replicationGroupDescription": {
              "description": "created description for the replication group. Must not be empty.",
              "type": "string"
            },
            "securityGroupIdRefs": {
              "description": "References to SecurityGroup in ec2 to populate securityGroupIds.",
              "items": {
                "description": "A Reference to a named object.",
                "properties": {
                  "name": {
                    "description": "Name of the referenced object.",
                    "type": "string"
                  },
                  "policy": {
                    "description": "Policies for referencing.",
                    "properties": {
                      "resolution": {
                        "default": "Required",
                        "description": "Resolution specifies whether resolution of this reference is required.\nThe default is 'Required', which means the reconcile will fail if the\nreference cannot be resolved. 'Optional' means this reference will be\na no-op if it cannot be resolved.",
                        "enum": [
                          "Required",
                          "Optional"
                        ],
                        "type": "string"
                      },
                      "resolve": {
                        "description": "Resolve specifies when this reference should be resolved. The default\nis 'IfNotPresent', which will attempt to resolve the reference only when\nthe corresponding field is not present. Use 'Always' to resolve the\nreference on every reconcile.",
                        "enum": [
                          "Always",
                          "IfNotPresent"
                        ],
                        "type": "string"
                      }
                    },
                    "type": "object",
                    "additionalProperties": false
                  }
                },
                "required": [
                  "name"
                ],
                "type": "object",
                "additionalProperties": false
              },
              "type": "array"
            },
            "securityGroupIdSelector": {
              "description": "Selector for a list of SecurityGroup in ec2 to populate securityGroupIds.",
              "properties": {
                "matchControllerRef": {
                  "description": "MatchControllerRef ensures an object with the same controller reference\nas the selecting object is selected.",
                  "type": "boolean"
                },
                "matchLabels": {
                  "additionalProperties": {
                    "type": "string"
                  },
                  "description": "MatchLabels ensures an object with matching labels is selected.",
                  "type": "object"
                },
                "policy": {
                  "description": "Policies for selection.",
                  "properties": {
                    "resolution": {
                      "default": "Required",
                      "description": "Resolution specifies whether resolution of this reference is required.\nThe default is 'Required', which means the reconcile will fail if the\nreference cannot be resolved. 'Optional' means this reference will be\na no-op if it cannot be resolved.",
                      "enum": [
                        "Required",
                        "Optional"
                      ],
                      "type": "string"
                    },
                    "resolve": {
                      "description": "Resolve specifies when this reference should be resolved. The default\nis 'IfNotPresent', which will attempt to resolve the reference only when\nthe corresponding field is not present. Use 'Always' to resolve the\nreference on every reconcile.",
                      "enum": [
                        "Always",
                        "IfNotPresent"
                      ],
                      "type": "string"
                    }
                  },
                  "type": "object",
                  "additionalProperties": false
                }
              },
              "type": "object",
              "additionalProperties": false
            },
            "securityGroupIds": {
              "description": "One or more Amazon VPC security groups associated with this replication group. Use this parameter only when you are creating a replication group in an Amazon Virtual Private Cloud",
              "items": {
                "type": "string"
              },
              "type": "array",
              "x-kubernetes-list-type": "set"
            },
            "securityGroupNames": {
              "description": "List of cache security group names to associate with this replication group.",
              "items": {
                "type": "string"
              },
              "type": "array",
              "x-kubernetes-list-type": "set"
            },
            "snapshotArns": {
              "description": "\u2013  List of ARNs that identify Redis RDB snapshot files stored in Amazon S3. The names object names cannot contain any commas.",
              "items": {
                "type": "string"
              },
              "type": "array",
              "x-kubernetes-list-type": "set"
            },
            "snapshotName": {
              "description": "Name of a snapshot from which to restore data into the new node group. Changing the snapshot_name forces a new resource.",
              "type": "string"
            },
            "snapshotRetentionLimit": {
              "description": "Number of days for which ElastiCache will retain automatic cache cluster snapshots before deleting them. For example, if you set SnapshotRetentionLimit to 5, then a snapshot that was taken today will be retained for 5 days before being deleted. If the value of snapshot_retention_limit is set to zero (0), backups are turned off. Please note that setting a snapshot_retention_limit is not supported on cache.t1.micro cache nodes",
              "type": "number"
            },
            "snapshotWindow": {
              "description": "Daily time range (in UTC) during which ElastiCache will begin taking a daily snapshot of your cache cluster. The minimum snapshot window is a 60 minute period. Example: 05:00-09:00",
              "type": "string"
            },
            "subnetGroupName": {
              "description": "Name of the cache subnet group to be used for the replication group.",
              "type": "string"
            },
            "subnetGroupNameRef": {
              "description": "Reference to a SubnetGroup to populate subnetGroupName.",
              "properties": {
                "name": {
                  "description": "Name of the referenced object.",
                  "type": "string"
                },
                "policy": {
                  "description": "Policies for referencing.",
                  "properties": {
                    "resolution": {
                      "default": "Required",
                      "description": "Resolution specifies whether resolution of this reference is required.\nThe default is 'Required', which means the reconcile will fail if the\nreference cannot be resolved. 'Optional' means this reference will be\na no-op if it cannot be resolved.",
                      "enum": [
                        "Required",
                        "Optional"
                      ],
                      "type": "string"
                    },
                    "resolve": {
                      "description": "Resolve specifies when this reference should be resolved. The default\nis 'IfNotPresent', which will attempt to resolve the reference only when\nthe corresponding field is not present. Use 'Always' to resolve the\nreference on every reconcile.",
                      "enum": [
                        "Always",
                        "IfNotPresent"
                      ],
                      "type": "string"
                    }
                  },
                  "type": "object",
                  "additionalProperties": false
                }
              },
              "required": [
                "name"
              ],
              "type": "object",
              "additionalProperties": false
            },
            "subnetGroupNameSelector": {
              "description": "Selector for a SubnetGroup to populate subnetGroupName.",
              "properties": {
                "matchControllerRef": {
                  "description": "MatchControllerRef ensures an object with the same controller reference\nas the selecting object is selected.",
                  "type": "boolean"
                },
                "matchLabels": {
                  "additionalProperties": {
                    "type": "string"
                  },
                  "description": "MatchLabels ensures an object with matching labels is selected.",
                  "type": "object"
                },
                "policy": {
                  "description": "Policies for selection.",
                  "properties": {
                    "resolution": {
                      "default": "Required",
                      "description": "Resolution specifies whether resolution of this reference is required.\nThe default is 'Required', which means the reconcile will fail if the\nreference cannot be resolved. 'Optional' means this reference will be\na no-op if it cannot be resolved.",
                      "enum": [
                        "Required",
                        "Optional"
                      ],
                      "type": "string"
                    },
                    "resolve": {
                      "description": "Resolve specifies when this reference should be resolved. The default\nis 'IfNotPresent', which will attempt to resolve the reference only when\nthe corresponding field is not present. Use 'Always' to resolve the\nreference on every reconcile.",
                      "enum": [
                        "Always",
                        "IfNotPresent"
                      ],
                      "type": "string"
                    }
                  },
                  "type": "object",
                  "additionalProperties": false
                }
              },
              "type": "object",
              "additionalProperties": false
            },
            "tags": {
              "additionalProperties": {
                "type": "string"
              },
              "description": "Key-value map of resource tags.",
              "type": "object",
              "x-kubernetes-map-type": "granular"
            },
            "transitEncryptionEnabled": {
              "description": "Whether to enable encryption in transit.",
              "type": "boolean"
            },
            "transitEncryptionMode": {
              "description": "A setting that enables clients to migrate to in-transit encryption with no downtime.\nValid values are preferred and required.\nWhen enabling encryption on an existing replication group, this must first be set to preferred before setting it to required in a subsequent apply.\nSee the TransitEncryptionMode field in the CreateReplicationGroup API documentation for additional details.",
              "type": "string"
            },
            "userGroupIds": {
              "description": "User Group ID to associate with the replication group. Only a maximum of one (1) user group ID is valid. NOTE: This argument is a set because the AWS specification allows for multiple IDs. However, in practice, AWS only allows a maximum size of one.",
              "items": {
                "type": "string"
              },
              "type": "array",
              "x-kubernetes-list-type": "set"
            }
          },
          "type": "object",
          "additionalProperties": false
        },
        "managementPolicies": {
          "default": [
            "*"
          ],
          "description": "THIS IS A BETA FIELD. It is on by default but can be opted out\nthrough a Crossplane feature flag.\nManagementPolicies specify the array of actions Crossplane is allowed to\ntake on the managed and external resources.\nThis field is planned to replace the DeletionPolicy field in a future\nrelease. Currently, both could be set independently and non-default\nvalues would be honored if the feature flag is enabled. If both are\ncustom, the DeletionPolicy field will be ignored.\nSee the design doc for more information: https://github.com/crossplane/crossplane/blob/499895a25d1a1a0ba1604944ef98ac7a1a71f197/design/design-doc-observe-only-resources.md?plain=1#L223\nand this one: https://github.com/crossplane/crossplane/blob/444267e84783136daa93568b364a5f01228cacbe/design/one-pager-ignore-changes.md",
          "items": {
            "description": "A ManagementAction represents an action that the Crossplane controllers\ncan take on an external resource.",
            "enum": [
              "Observe",
              "Create",
              "Update",
              "Delete",
              "LateInitialize",
              "*"
            ],
            "type": "string"
          },
          "type": "array"
        },
        "providerConfigRef": {
          "default": {
            "name": "default"
          },
          "description": "ProviderConfigReference specifies how the provider that will be used to\ncreate, observe, update, and delete this managed resource should be\nconfigured.",
          "properties": {
            "name": {
              "description": "Name of the referenced object.",
              "type": "string"
            },
            "policy": {
              "description": "Policies for referencing.",
              "properties": {
                "resolution": {
                  "default": "Required",
                  "description": "Resolution specifies whether resolution of this reference is required.\nThe default is 'Required', which means the reconcile will fail if the\nreference cannot be resolved. 'Optional' means this reference will be\na no-op if it cannot be resolved.",
                  "enum": [
                    "Required",
                    "Optional"
                  ],
                  "type": "string"
                },
                "resolve": {
                  "description": "Resolve specifies when this reference should be resolved. The default\nis 'IfNotPresent', which will attempt to resolve the reference only when\nthe corresponding field is not present. Use 'Always' to resolve the\nreference on every reconcile.",
                  "enum": [
                    "Always",
                    "IfNotPresent"
                  ],
                  "type": "string"
                }
              },
              "type": "object",
              "additionalProperties": false
            }
          },
          "required": [
            "name"
          ],
          "type": "object",
          "additionalProperties": false
        },
        "writeConnectionSecretToRef": {
          "description": "WriteConnectionSecretToReference specifies the namespace and name of a\nSecret to which any connection details for this managed resource should\nbe written. Connection details frequently include the endpoint, username,\nand password required to connect to the managed resource.",
          "properties": {
            "name": {
              "description": "Name of the secret.",
              "type": "string"
            },
            "namespace": {
              "description": "Namespace of the secret.",
              "type": "string"
            }
          },
          "required": [
            "name",
            "namespace"
          ],
          "type": "object",
          "additionalProperties": false
        }
      },
      "required": [
        "forProvider"
      ],
      "type": "object",
      "additionalProperties": false
    },
    "status": {
      "description": "ReplicationGroupStatus defines the observed state of ReplicationGroup.",
      "properties": {
        "atProvider": {
          "properties": {
            "applyImmediately": {
              "description": "Specifies whether any modifications are applied immediately, or during the next maintenance window. Default is false.",
              "type": "boolean"
            },
            "arn": {
              "description": "ARN of the created ElastiCache Replication Group.",
              "type": "string"
            },
            "atRestEncryptionEnabled": {
              "description": "Whether to enable encryption at rest.\nWhen engine is redis, default is false.\nWhen engine is valkey, default is true.",
              "type": "string"
            },
            "authTokenUpdateStrategy": {
              "description": "Strategy to use when updating the auth_token. Valid values are SET, ROTATE, and DELETE. Defaults to ROTATE.",
              "type": "string"
            },
            "autoMinorVersionUpgrade": {
              "description": "Specifies whether minor version engine upgrades will be applied automatically to the underlying Cache Cluster instances during the maintenance window.\nOnly supported for engine type \"redis\" and if the engine version is 6 or higher.\nDefaults to true.",
              "type": "string"
            },
            "automaticFailoverEnabled": {
              "description": "Specifies whether a read-only replica will be automatically promoted to read/write primary if the existing primary fails. If enabled, num_cache_clusters must be greater than 1. Must be enabled for Redis (cluster mode enabled) replication groups. Defaults to false.",
              "type": "boolean"
            },
            "availabilityZones": {
              "description": "List of EC2 availability zones in which the replication group's cache clusters will be created. The order of the availability zones in the list is not considered.",
              "items": {
                "type": "string"
              },
              "type": "array",
              "x-kubernetes-list-type": "set"
            },
            "clusterEnabled": {
              "description": "Indicates if cluster mode is enabled.",
              "type": "boolean"
            },
            "clusterMode": {
              "description": "Create a native Redis cluster. automatic_failover_enabled must be set to true. Cluster Mode documented below. Only 1 cluster_mode block is allowed. Note that configuring this block does not enable cluster mode, i.e., data sharding, this requires using a parameter group that has the parameter cluster-enabled set to true.",
              "items": {
                "properties": {
                  "numNodeGroups": {
                    "description": "Number of node groups (shards) for this Redis replication group.\nChanging this number will trigger a resizing operation before other settings modifications.",
                    "type": "number"
                  },
                  "replicasPerNodeGroup": {
                    "description": "Number of replica nodes in each node group.\nChanging this number will trigger a resizing operation before other settings modifications.\nValid values are 0 to 5.",
                    "type": "number"
                  }
                },
                "type": "object",
                "additionalProperties": false
              },
              "type": "array"
            },
            "configurationEndpointAddress": {
              "description": "Address of the replication group configuration endpoint when cluster mode is enabled.",
              "type": "string"
            },
            "dataTieringEnabled": {
              "description": "Enables data tiering. Data tiering is only supported for replication groups using the r6gd node type. This parameter must be set to true when using r6gd nodes.",
              "type": "boolean"
            },
            "description": {
              "description": "created description for the replication group. Must not be empty.",
              "type": "string"
            },
            "engine": {
              "description": "Name of the cache engine to be used for the clusters in this replication group. The only valid value is redis.",
              "type": "string"
            },
            "engineVersion": {
              "description": "Version number of the cache engine to be used for the cache clusters in this replication group.\nIf the version is 6 or higher, the major and minor version can be set, e.g., 6.2,\nor the minor version can be unspecified which will use the latest version at creation time, e.g., 6.x.\nOtherwise, specify the full version desired, e.g., 5.0.6.\nThe actual engine version used is returned in the attribute engine_version_actual, see Attributes Reference below.",
              "type": "string"
            },
            "engineVersionActual": {
              "description": "Because ElastiCache pulls the latest minor or patch for a version, this attribute returns the running version of the cache engine.",
              "type": "string"
            },
            "finalSnapshotIdentifier": {
              "description": "The name of your final node group (shard) snapshot. ElastiCache creates the snapshot from the primary node in the cluster. If omitted, no final snapshot will be made.",
              "type": "string"
            },
            "globalReplicationGroupId": {
              "description": "The ID of the global replication group to which this replication group should belong. If this parameter is specified, the replication group is added to the specified global replication group as a secondary replication group; otherwise, the replication group is not part of any global replication group. If global_replication_group_id is set, the num_node_groups parameter (or the num_node_groups parameter of the deprecated cluster_mode block) cannot be set.",
              "type": "string"
            },
            "id": {
              "description": "ID of the ElastiCache Replication Group.",
              "type": "string"
            },
            "ipDiscovery": {
              "description": "The IP version to advertise in the discovery protocol. Valid values are ipv4 or ipv6.",
              "type": "string"
            },
            "kmsKeyId": {
              "description": "The ARN of the key that you wish to use if encrypting at rest. If not supplied, uses service managed encryption. Can be specified only if at_rest_encryption_enabled = true.",
              "type": "string"
            },
            "logDeliveryConfiguration": {
              "description": "Specifies the destination and format of Redis SLOWLOG or Redis Engine Log. See the documentation on Amazon ElastiCache. See Log Delivery Configuration below for more details.",
              "items": {
                "properties": {
                  "destination": {
                    "description": "Name of either the CloudWatch Logs LogGroup or Kinesis Data Firehose resource.",
                    "type": "string"
                  },
                  "destinationType": {
                    "description": "For CloudWatch Logs use cloudwatch-logs or for Kinesis Data Firehose use kinesis-firehose.",
                    "type": "string"
                  },
                  "logFormat": {
                    "description": "Valid values are json or text",
                    "type": "string"
                  },
                  "logType": {
                    "description": "Valid values are  slow-log or engine-log. Max 1 of each.",
                    "type": "string"
                  }
                },
                "type": "object",
                "additionalProperties": false
              },
              "type": "array"
            },
            "maintenanceWindow": {
              "description": "ddd:hh24:mi (24H Clock UTC). The minimum maintenance window is a 60 minute period. Example: sun:05:00-sun:09:00",
              "type": "string"
            },
            "memberClusters": {
              "description": "Identifiers of all the nodes that are part of this replication group.",
              "items": {
                "type": "string"
              },
              "type": "array",
              "x-kubernetes-list-type": "set"
            },
            "multiAzEnabled": {
              "description": "Specifies whether to enable Multi-AZ Support for the replication group. If true, automatic_failover_enabled must also be enabled. Defaults to false.",
              "type": "boolean"
            },
            "networkType": {
              "description": "The IP versions for cache cluster connections. Valid values are ipv4, ipv6 or dual_stack.",
              "type": "string"
            },
            "nodeType": {
              "description": "Instance class to be used. See AWS documentation for information on supported node types and guidance on selecting node types. Required unless global_replication_group_id is set. Cannot be set if global_replication_group_id is set.",
              "type": "string"
            },
            "notificationTopicArn": {
              "description": "east-1:012345678999:my_sns_topic",
              "type": "string"
            },
            "numCacheClusters": {
              "description": "00#.",
              "type": "number"
            },
            "numNodeGroups": {
              "description": "Number of node groups (shards) for this Redis replication group.\nChanging this number will trigger a resizing operation before other settings modifications.",
              "type": "number"
            },
            "numberCacheClusters": {
              "description": "Number of cache clusters (primary and replicas) this replication group will have. If Multi-AZ is enabled, the value of this parameter must be at least 2. Updates will occur before other modifications. Conflicts with num_cache_clusters, num_node_groups, or the deprecated cluster_mode. Defaults to 1.",
              "type": "number"
            },
            "parameterGroupName": {
              "description": "Name of the parameter group to associate with this replication group. If this argument is omitted, the default cache parameter group for the specified engine is used. To enable \"cluster mode\", i.e., data sharding, use a parameter group that has the parameter cluster-enabled set to true.",
              "type": "string"
            },
            "port": {
              "description": "\u2013  Port number on which each of the cache nodes will accept connections. For Memcache the default is 11211, and for Redis the default port is 6379.",
              "type": "number"
            },
            "preferredCacheClusterAzs": {
              "description": "List of EC2 availability zones in which the replication group's cache clusters will be created. The order of the availability zones in the list is considered. The first item in the list will be the primary node. Ignored when updating.",
              "items": {
                "type": "string"
              },
              "type": "array"
            },
            "primaryEndpointAddress": {
              "description": "(Redis only) Address of the endpoint for the primary node in the replication group, if the cluster mode is disabled.",
              "type": "string"
            },
            "readerEndpointAddress": {
              "description": "(Redis only) Address of the endpoint for the reader node in the replication group, if the cluster mode is disabled.",
              "type": "string"
            },
            "region": {
              "description": "Region where this resource will be managed. Defaults to the Region set in the provider configuration.\nRegion is the region you'd like your resource to be created in.",
              "type": "string"
            },
            "replicasPerNodeGroup": {
              "description": "Number of replica nodes in each node group.\nChanging this number will trigger a resizing operation before other settings modifications.\nValid values are 0 to 5.",
              "type": "number"
            },
            "replicationGroupDescription": {
              "description": "created description for the replication group. Must not be empty.",
              "type": "string"
            },
            "securityGroupIds": {
              "description": "One or more Amazon VPC security groups associated with this replication group. Use this parameter only when you are creating a replication group in an Amazon Virtual Private Cloud",
              "items": {
                "type": "string"
              },
              "type": "array",
              "x-kubernetes-list-type": "set"
            },
            "securityGroupNames": {
              "description": "List of cache security group names to associate with this replication group.",
              "items": {
                "type": "string"
              },
              "type": "array",
              "x-kubernetes-list-type": "set"
            },
            "snapshotArns": {
              "description": "\u2013  List of ARNs that identify Redis RDB snapshot files stored in Amazon S3. The names object names cannot contain any commas.",
              "items": {
                "type": "string"
              },
              "type": "array",
              "x-kubernetes-list-type": "set"
            },
            "snapshotName": {
              "description": "Name of a snapshot from which to restore data into the new node group. Changing the snapshot_name forces a new resource.",
              "type": "string"
            },
            "snapshotRetentionLimit": {
              "description": "Number of days for which ElastiCache will retain automatic cache cluster snapshots before deleting them. For example, if you set SnapshotRetentionLimit to 5, then a snapshot that was taken today will be retained for 5 days before being deleted. If the value of snapshot_retention_limit is set to zero (0), backups are turned off. Please note that setting a snapshot_retention_limit is not supported on cache.t1.micro cache nodes",
              "type": "number"
            },
            "snapshotWindow": {
              "description": "Daily time range (in UTC) during which ElastiCache will begin taking a daily snapshot of your cache cluster. The minimum snapshot window is a 60 minute period. Example: 05:00-09:00",
              "type": "string"
            },
            "subnetGroupName": {
              "description": "Name of the cache subnet group to be used for the replication group.",
              "type": "string"
            },
            "tags": {
              "additionalProperties": {
                "type": "string"
              },
              "description": "Key-value map of resource tags.",
              "type": "object",
              "x-kubernetes-map-type": "granular"
            },
            "tagsAll": {
              "additionalProperties": {
                "type": "string"
              },
              "description": "Map of tags assigned to the resource, including those inherited from the provider default_tags configuration block.",
              "type": "object",
              "x-kubernetes-map-type": "granular"
            },
            "transitEncryptionEnabled": {
              "description": "Whether to enable encryption in transit.",
              "type": "boolean"
            },
            "transitEncryptionMode": {
              "description": "A setting that enables clients to migrate to in-transit encryption with no downtime.\nValid values are preferred and required.\nWhen enabling encryption on an existing replication group, this must first be set to preferred before setting it to required in a subsequent apply.\nSee the TransitEncryptionMode field in the CreateReplicationGroup API documentation for additional details.",
              "type": "string"
            },
            "userGroupIds": {
              "description": "User Group ID to associate with the replication group. Only a maximum of one (1) user group ID is valid. NOTE: This argument is a set because the AWS specification allows for multiple IDs. However, in practice, AWS only allows a maximum size of one.",
              "items": {
                "type": "string"
              },
              "type": "array",
              "x-kubernetes-list-type": "set"
            }
          },
          "type": "object",
          "additionalProperties": false
        },
        "conditions": {
          "description": "Conditions of the resource.",
          "items": {
            "description": "A Condition that may apply to a resource.",
            "properties": {
              "lastTransitionTime": {
                "description": "LastTransitionTime is the last time this condition transitioned from one\nstatus to another.",
                "format": "date-time",
                "type": "string"
              },
              "message": {
                "description": "A Message containing details about this condition's last transition from\none status to another, if any.",
                "type": "string"
              },
              "observedGeneration": {
                "description": "ObservedGeneration represents the .metadata.generation that the condition was set based upon.\nFor instance, if .metadata.generation is currently 12, but the .status.conditions[x].observedGeneration is 9, the condition is out of date\nwith respect to the current state of the instance.",
                "format": "int64",
                "type": "integer"
              },
              "reason": {
                "description": "A Reason for this condition's last transition from one status to another.",
                "type": "string"
              },
              "status": {
                "description": "Status of this condition; is it currently True, False, or Unknown?",
                "type": "string"
              },
              "type": {
                "description": "Type of this condition. At most one of each condition type may apply to\na resource at any point in time.",
                "type": "string"
              }
            },
            "required": [
              "lastTransitionTime",
              "reason",
              "status",
              "type"
            ],
            "type": "object",
            "additionalProperties": false
          },
          "type": "array",
          "x-kubernetes-list-map-keys": [
            "type"
          ],
          "x-kubernetes-list-type": "map"
        },
        "observedGeneration": {
          "description": "ObservedGeneration is the latest metadata.generation\nwhich resulted in either a ready state, or stalled due to error\nit can not recover from without human intervention.",
          "format": "int64",
          "type": "integer"
        }
      },
      "type": "object",
      "additionalProperties": false
    }
  },
  "required": [
    "spec"
  ],
  "type": "object"
}
