{
  "description": "Cluster is the Schema for the Clusters API",
  "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": "ClusterSpec defines the desired state of Cluster.\n\nContains all of the attributes of a specific cluster.",
      "properties": {
        "aclName": {
          "description": "The name of the Access Control List to associate with the cluster.",
          "type": "string"
        },
        "aclRef": {
          "description": "AWSResourceReferenceWrapper provides a wrapper around *AWSResourceReference\ntype to provide more user friendly syntax for references using 'from' field\nEx:\nAPIIDRef:\n\n\tfrom:\n\t  name: my-api",
          "properties": {
            "from": {
              "description": "AWSResourceReference provides all the values necessary to reference another\nk8s resource for finding the identifier(Id/ARN/Name)",
              "properties": {
                "name": {
                  "type": "string"
                },
                "namespace": {
                  "type": "string"
                }
              },
              "type": "object",
              "additionalProperties": false
            }
          },
          "type": "object",
          "additionalProperties": false
        },
        "autoMinorVersionUpgrade": {
          "description": "When set to true, the cluster will automatically receive minor engine version\nupgrades after launch.",
          "type": "boolean"
        },
        "description": {
          "description": "An optional description of the cluster.",
          "type": "string"
        },
        "engineVersion": {
          "description": "The version number of the Redis engine to be used for the cluster.",
          "type": "string"
        },
        "kmsKeyID": {
          "description": "The ID of the KMS key used to encrypt the cluster.",
          "type": "string"
        },
        "maintenanceWindow": {
          "description": "Specifies the weekly time range during which maintenance on the cluster is\nperformed. It is specified as a range in the format ddd:hh24:mi-ddd:hh24:mi\n(24H Clock UTC). The minimum maintenance window is a 60 minute period.",
          "type": "string"
        },
        "name": {
          "description": "The name of the cluster. This value must be unique as it also serves as the\ncluster identifier.",
          "type": "string"
        },
        "nodeType": {
          "description": "The compute and memory capacity of the nodes in the cluster.",
          "type": "string"
        },
        "numReplicasPerShard": {
          "description": "The number of replicas to apply to each shard. The default value is 1. The\nmaximum is 5.",
          "format": "int64",
          "type": "integer"
        },
        "numShards": {
          "description": "The number of shards the cluster will contain. The default value is 1.",
          "format": "int64",
          "type": "integer"
        },
        "parameterGroupName": {
          "description": "The name of the parameter group associated with the cluster.",
          "type": "string"
        },
        "parameterGroupRef": {
          "description": "AWSResourceReferenceWrapper provides a wrapper around *AWSResourceReference\ntype to provide more user friendly syntax for references using 'from' field\nEx:\nAPIIDRef:\n\n\tfrom:\n\t  name: my-api",
          "properties": {
            "from": {
              "description": "AWSResourceReference provides all the values necessary to reference another\nk8s resource for finding the identifier(Id/ARN/Name)",
              "properties": {
                "name": {
                  "type": "string"
                },
                "namespace": {
                  "type": "string"
                }
              },
              "type": "object",
              "additionalProperties": false
            }
          },
          "type": "object",
          "additionalProperties": false
        },
        "port": {
          "description": "The port number on which each of the nodes accepts connections.",
          "format": "int64",
          "type": "integer"
        },
        "securityGroupIDs": {
          "description": "A list of security group names to associate with this cluster.",
          "items": {
            "type": "string"
          },
          "type": "array"
        },
        "securityGroupRefs": {
          "items": {
            "description": "AWSResourceReferenceWrapper provides a wrapper around *AWSResourceReference\ntype to provide more user friendly syntax for references using 'from' field\nEx:\nAPIIDRef:\n\n\tfrom:\n\t  name: my-api",
            "properties": {
              "from": {
                "description": "AWSResourceReference provides all the values necessary to reference another\nk8s resource for finding the identifier(Id/ARN/Name)",
                "properties": {
                  "name": {
                    "type": "string"
                  },
                  "namespace": {
                    "type": "string"
                  }
                },
                "type": "object",
                "additionalProperties": false
              }
            },
            "type": "object",
            "additionalProperties": false
          },
          "type": "array"
        },
        "snapshotARNs": {
          "description": "A list of Amazon Resource Names (ARN) that uniquely identify the RDB snapshot\nfiles stored in Amazon S3. The snapshot files are used to populate the new\ncluster. The Amazon S3 object name in the ARN cannot contain any commas.",
          "items": {
            "type": "string"
          },
          "type": "array"
        },
        "snapshotName": {
          "description": "The name of a snapshot from which to restore data into the new cluster. The\nsnapshot status changes to restoring while the new cluster is being created.",
          "type": "string"
        },
        "snapshotRef": {
          "description": "AWSResourceReferenceWrapper provides a wrapper around *AWSResourceReference\ntype to provide more user friendly syntax for references using 'from' field\nEx:\nAPIIDRef:\n\n\tfrom:\n\t  name: my-api",
          "properties": {
            "from": {
              "description": "AWSResourceReference provides all the values necessary to reference another\nk8s resource for finding the identifier(Id/ARN/Name)",
              "properties": {
                "name": {
                  "type": "string"
                },
                "namespace": {
                  "type": "string"
                }
              },
              "type": "object",
              "additionalProperties": false
            }
          },
          "type": "object",
          "additionalProperties": false
        },
        "snapshotRetentionLimit": {
          "description": "The number of days for which MemoryDB retains automatic snapshots before\ndeleting them. For example, if you set SnapshotRetentionLimit to 5, a snapshot\nthat was taken today is retained for 5 days before being deleted.",
          "format": "int64",
          "type": "integer"
        },
        "snapshotWindow": {
          "description": "The daily time range (in UTC) during which MemoryDB begins taking a daily\nsnapshot of your shard.\n\nExample: 05:00-09:00\n\nIf you do not specify this parameter, MemoryDB automatically chooses an appropriate\ntime range.",
          "type": "string"
        },
        "snsTopicARN": {
          "description": "The Amazon Resource Name (ARN) of the Amazon Simple Notification Service\n(SNS) topic to which notifications are sent.",
          "type": "string"
        },
        "snsTopicRef": {
          "description": "AWSResourceReferenceWrapper provides a wrapper around *AWSResourceReference\ntype to provide more user friendly syntax for references using 'from' field\nEx:\nAPIIDRef:\n\n\tfrom:\n\t  name: my-api",
          "properties": {
            "from": {
              "description": "AWSResourceReference provides all the values necessary to reference another\nk8s resource for finding the identifier(Id/ARN/Name)",
              "properties": {
                "name": {
                  "type": "string"
                },
                "namespace": {
                  "type": "string"
                }
              },
              "type": "object",
              "additionalProperties": false
            }
          },
          "type": "object",
          "additionalProperties": false
        },
        "subnetGroupName": {
          "description": "The name of the subnet group to be used for the cluster.",
          "type": "string"
        },
        "subnetGroupRef": {
          "description": "AWSResourceReferenceWrapper provides a wrapper around *AWSResourceReference\ntype to provide more user friendly syntax for references using 'from' field\nEx:\nAPIIDRef:\n\n\tfrom:\n\t  name: my-api",
          "properties": {
            "from": {
              "description": "AWSResourceReference provides all the values necessary to reference another\nk8s resource for finding the identifier(Id/ARN/Name)",
              "properties": {
                "name": {
                  "type": "string"
                },
                "namespace": {
                  "type": "string"
                }
              },
              "type": "object",
              "additionalProperties": false
            }
          },
          "type": "object",
          "additionalProperties": false
        },
        "tags": {
          "description": "A list of tags to be added to this resource. Tags are comma-separated key,value\npairs (e.g. Key=myKey, Value=myKeyValue. You can include multiple tags as\nshown following: Key=myKey, Value=myKeyValue Key=mySecondKey, Value=mySecondKeyValue.",
          "items": {
            "description": "A tag that can be added to an MemoryDB resource. Tags are composed of a Key/Value\npair. You can use tags to categorize and track all your MemoryDB resources.\nWhen you add or remove tags on clusters, those actions will be replicated\nto all nodes in the cluster. A tag with a null Value is permitted. For more\ninformation, see Tagging your MemoryDB resources (https://docs.aws.amazon.com/MemoryDB/latest/devguide/tagging-resources.html)",
            "properties": {
              "key": {
                "type": "string"
              },
              "value": {
                "type": "string"
              }
            },
            "type": "object",
            "additionalProperties": false
          },
          "type": "array"
        },
        "tlsEnabled": {
          "description": "A flag to enable in-transit encryption on the cluster.",
          "type": "boolean"
        }
      },
      "required": [
        "name",
        "nodeType"
      ],
      "type": "object",
      "additionalProperties": false
    },
    "status": {
      "description": "ClusterStatus defines the observed state of Cluster",
      "properties": {
        "ackResourceMetadata": {
          "description": "All CRs managed by ACK have a common `Status.ACKResourceMetadata` member\nthat is used to contain resource sync state, account ownership,\nconstructed ARN for the resource",
          "properties": {
            "arn": {
              "description": "ARN is the Amazon Resource Name for the resource. This is a\nglobally-unique identifier and is set only by the ACK service controller\nonce the controller has orchestrated the creation of the resource OR\nwhen it has verified that an \"adopted\" resource (a resource where the\nARN annotation was set by the Kubernetes user on the CR) exists and\nmatches the supplied CR's Spec field values.\nhttps://github.com/aws/aws-controllers-k8s/issues/270",
              "type": "string"
            },
            "ownerAccountID": {
              "description": "OwnerAccountID is the AWS Account ID of the account that owns the\nbackend AWS service API resource.",
              "type": "string"
            },
            "region": {
              "description": "Region is the AWS region in which the resource exists or will exist.",
              "type": "string"
            }
          },
          "required": [
            "ownerAccountID",
            "region"
          ],
          "type": "object",
          "additionalProperties": false
        },
        "allowedScaleDownNodeTypes": {
          "description": "A list node types which you can use to scale down your cluster.",
          "items": {
            "type": "string"
          },
          "type": "array"
        },
        "allowedScaleUpNodeTypes": {
          "description": "A list node types which you can use to scale up your cluster.",
          "items": {
            "type": "string"
          },
          "type": "array"
        },
        "availabilityMode": {
          "description": "Indicates if the cluster has a Multi-AZ configuration (multiaz) or not (singleaz).",
          "type": "string"
        },
        "clusterEndpoint": {
          "description": "The cluster's configuration endpoint",
          "properties": {
            "address": {
              "type": "string"
            },
            "port": {
              "format": "int64",
              "type": "integer"
            }
          },
          "type": "object",
          "additionalProperties": false
        },
        "conditions": {
          "description": "All CRS managed by ACK have a common `Status.Conditions` member that\ncontains a collection of `ackv1alpha1.Condition` objects that describe\nthe various terminal states of the CR and its backend AWS service API\nresource",
          "items": {
            "description": "Condition is the common struct used by all CRDs managed by ACK service\ncontrollers to indicate terminal states  of the CR and its backend AWS\nservice API resource",
            "properties": {
              "lastTransitionTime": {
                "description": "Last time the condition transitioned from one status to another.",
                "format": "date-time",
                "type": "string"
              },
              "message": {
                "description": "A human readable message indicating details about the transition.",
                "type": "string"
              },
              "reason": {
                "description": "The reason for the condition's last transition.",
                "type": "string"
              },
              "status": {
                "description": "Status of the condition, one of True, False, Unknown.",
                "type": "string"
              },
              "type": {
                "description": "Type is the type of the Condition",
                "type": "string"
              }
            },
            "required": [
              "status",
              "type"
            ],
            "type": "object",
            "additionalProperties": false
          },
          "type": "array"
        },
        "enginePatchVersion": {
          "description": "The Redis engine patch version used by the cluster",
          "type": "string"
        },
        "events": {
          "description": "A list of events. Each element in the list contains detailed information\nabout one event.",
          "items": {
            "description": "Represents a single occurrence of something interesting within the system.\nSome examples of events are creating a cluster or adding or removing a node.",
            "properties": {
              "date": {
                "format": "date-time",
                "type": "string"
              },
              "message": {
                "type": "string"
              },
              "sourceName": {
                "type": "string"
              },
              "sourceType": {
                "type": "string"
              }
            },
            "type": "object",
            "additionalProperties": false
          },
          "type": "array"
        },
        "numberOfShards": {
          "description": "The number of shards in the cluster",
          "format": "int64",
          "type": "integer"
        },
        "parameterGroupStatus": {
          "description": "The status of the parameter group used by the cluster, for example 'active'\nor 'applying'.",
          "type": "string"
        },
        "pendingUpdates": {
          "description": "A group of settings that are currently being applied.",
          "properties": {
            "acls": {
              "description": "The status of the ACL update",
              "properties": {
                "aclToApply": {
                  "type": "string"
                }
              },
              "type": "object",
              "additionalProperties": false
            },
            "resharding": {
              "description": "The status of the online resharding",
              "properties": {
                "slotMigration": {
                  "description": "Represents the progress of an online resharding operation.",
                  "properties": {
                    "progressPercentage": {
                      "type": "number"
                    }
                  },
                  "type": "object",
                  "additionalProperties": false
                }
              },
              "type": "object",
              "additionalProperties": false
            },
            "serviceUpdates": {
              "items": {
                "description": "Update action that has yet to be processed for the corresponding apply/stop\nrequest",
                "properties": {
                  "serviceUpdateName": {
                    "type": "string"
                  },
                  "status": {
                    "type": "string"
                  }
                },
                "type": "object",
                "additionalProperties": false
              },
              "type": "array"
            }
          },
          "type": "object",
          "additionalProperties": false
        },
        "securityGroups": {
          "description": "A list of security groups used by the cluster",
          "items": {
            "description": "Represents a single security group and its status.",
            "properties": {
              "securityGroupID": {
                "type": "string"
              },
              "status": {
                "type": "string"
              }
            },
            "type": "object",
            "additionalProperties": false
          },
          "type": "array"
        },
        "shards": {
          "description": "A list of shards that are members of the cluster.",
          "items": {
            "description": "Represents a collection of nodes in a cluster. One node in the node group\nis the read/write primary node. All the other nodes are read-only Replica\nnodes.",
            "properties": {
              "name": {
                "type": "string"
              },
              "nodes": {
                "items": {
                  "description": "Represents an individual node within a cluster. Each node runs its own instance\nof the cluster's protocol-compliant caching software.",
                  "properties": {
                    "availabilityZone": {
                      "type": "string"
                    },
                    "createTime": {
                      "format": "date-time",
                      "type": "string"
                    },
                    "endpoint": {
                      "description": "Represents the information required for client programs to connect to the\ncluster and its nodes.",
                      "properties": {
                        "address": {
                          "type": "string"
                        },
                        "port": {
                          "format": "int64",
                          "type": "integer"
                        }
                      },
                      "type": "object",
                      "additionalProperties": false
                    },
                    "name": {
                      "type": "string"
                    },
                    "status": {
                      "type": "string"
                    }
                  },
                  "type": "object",
                  "additionalProperties": false
                },
                "type": "array"
              },
              "numberOfNodes": {
                "format": "int64",
                "type": "integer"
              },
              "slots": {
                "type": "string"
              },
              "status": {
                "type": "string"
              }
            },
            "type": "object",
            "additionalProperties": false
          },
          "type": "array"
        },
        "snsTopicStatus": {
          "description": "The SNS topic must be in Active status to receive notifications",
          "type": "string"
        },
        "status": {
          "description": "The status of the cluster. For example, Available, Updating, Creating.",
          "type": "string"
        }
      },
      "type": "object",
      "additionalProperties": false
    }
  },
  "type": "object"
}
