{
  "description": "Cluster is the Schema for the Clusters API",
  "properties": {
    "apiVersion": {
      "description": "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More 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. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More 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 Returns information about a cluster of either the provisioned or the serverless type.",
      "properties": {
        "brokerNodeGroupInfo": {
          "description": "Information about the brokers.",
          "properties": {
            "brokerAZDistribution": {
              "description": "The distribution of broker nodes across Availability Zones. By default, broker nodes are distributed among the Availability Zones of your Region. Currently, the only supported value is DEFAULT. You can either specify this value explicitly or leave it out.",
              "type": "string"
            },
            "clientSubnets": {
              "items": {
                "type": "string"
              },
              "type": "array"
            },
            "connectivityInfo": {
              "description": "Information about the broker access configuration.",
              "properties": {
                "publicAccess": {
                  "description": "Broker public access control.",
                  "properties": {
                    "type_": {
                      "type": "string"
                    }
                  },
                  "type": "object",
                  "additionalProperties": false
                }
              },
              "type": "object",
              "additionalProperties": false
            },
            "instanceType": {
              "type": "string"
            },
            "securityGroups": {
              "items": {
                "type": "string"
              },
              "type": "array"
            },
            "storageInfo": {
              "description": "Contains information about storage volumes attached to MSK broker nodes.",
              "properties": {
                "ebsStorageInfo": {
                  "description": "Contains information about the EBS storage volumes attached to Apache Kafka broker nodes.",
                  "properties": {
                    "provisionedThroughput": {
                      "description": "Contains information about provisioned throughput for EBS storage volumes attached to kafka broker nodes.",
                      "properties": {
                        "enabled": {
                          "type": "boolean"
                        },
                        "volumeThroughput": {
                          "format": "int64",
                          "type": "integer"
                        }
                      },
                      "type": "object",
                      "additionalProperties": false
                    },
                    "volumeSize": {
                      "format": "int64",
                      "type": "integer"
                    }
                  },
                  "type": "object",
                  "additionalProperties": false
                }
              },
              "type": "object",
              "additionalProperties": false
            }
          },
          "type": "object",
          "additionalProperties": false
        },
        "clientAuthentication": {
          "description": "Includes all client authentication related information.",
          "properties": {
            "sasl": {
              "properties": {
                "iam": {
                  "properties": {
                    "enabled": {
                      "type": "boolean"
                    }
                  },
                  "type": "object",
                  "additionalProperties": false
                },
                "scram": {
                  "properties": {
                    "enabled": {
                      "type": "boolean"
                    }
                  },
                  "type": "object",
                  "additionalProperties": false
                }
              },
              "type": "object",
              "additionalProperties": false
            },
            "tls": {
              "description": "Details for client authentication using TLS.",
              "properties": {
                "certificateAuthorityARNList": {
                  "items": {
                    "type": "string"
                  },
                  "type": "array"
                },
                "enabled": {
                  "type": "boolean"
                }
              },
              "type": "object",
              "additionalProperties": false
            },
            "unauthenticated": {
              "description": "Contains information about unauthenticated traffic to the cluster.",
              "properties": {
                "enabled": {
                  "type": "boolean"
                }
              },
              "type": "object",
              "additionalProperties": false
            }
          },
          "type": "object",
          "additionalProperties": false
        },
        "configurationInfo": {
          "description": "Represents the configuration that you want MSK to use for the cluster.",
          "properties": {
            "arn": {
              "type": "string"
            },
            "revision": {
              "format": "int64",
              "type": "integer"
            }
          },
          "type": "object",
          "additionalProperties": false
        },
        "encryptionInfo": {
          "description": "Includes all encryption-related information.",
          "properties": {
            "encryptionAtRest": {
              "description": "The data-volume encryption details.",
              "properties": {
                "dataVolumeKMSKeyID": {
                  "type": "string"
                }
              },
              "type": "object",
              "additionalProperties": false
            },
            "encryptionInTransit": {
              "description": "The settings for encrypting data in transit.",
              "properties": {
                "clientBroker": {
                  "description": "Client-broker encryption in transit setting.",
                  "type": "string"
                },
                "inCluster": {
                  "type": "boolean"
                }
              },
              "type": "object",
              "additionalProperties": false
            }
          },
          "type": "object",
          "additionalProperties": false
        },
        "enhancedMonitoring": {
          "description": "Specifies the level of monitoring for the MSK cluster. The possible values are DEFAULT, PER_BROKER, PER_TOPIC_PER_BROKER, and PER_TOPIC_PER_PARTITION.",
          "type": "string"
        },
        "kafkaVersion": {
          "description": "The version of Apache Kafka.",
          "type": "string"
        },
        "loggingInfo": {
          "description": "LoggingInfo details.",
          "properties": {
            "brokerLogs": {
              "description": "The broker logs configuration for this MSK cluster.",
              "properties": {
                "cloudWatchLogs": {
                  "description": "Details of the CloudWatch Logs destination for broker logs.",
                  "properties": {
                    "enabled": {
                      "type": "boolean"
                    },
                    "logGroup": {
                      "type": "string"
                    }
                  },
                  "type": "object",
                  "additionalProperties": false
                },
                "firehose": {
                  "description": "Firehose details for BrokerLogs.",
                  "properties": {
                    "deliveryStream": {
                      "type": "string"
                    },
                    "enabled": {
                      "type": "boolean"
                    }
                  },
                  "type": "object",
                  "additionalProperties": false
                },
                "s3": {
                  "description": "The details of the Amazon S3 destination for broker logs.",
                  "properties": {
                    "bucket": {
                      "type": "string"
                    },
                    "enabled": {
                      "type": "boolean"
                    },
                    "prefix": {
                      "type": "string"
                    }
                  },
                  "type": "object",
                  "additionalProperties": false
                }
              },
              "type": "object",
              "additionalProperties": false
            }
          },
          "type": "object",
          "additionalProperties": false
        },
        "name": {
          "description": "The name of the cluster.",
          "type": "string"
        },
        "numberOfBrokerNodes": {
          "description": "The number of Apache Kafka broker nodes in the Amazon MSK cluster.",
          "format": "int64",
          "type": "integer"
        },
        "openMonitoring": {
          "description": "The settings for open monitoring.",
          "properties": {
            "prometheus": {
              "description": "Prometheus settings.",
              "properties": {
                "jmxExporter": {
                  "description": "Indicates whether you want to enable or disable the JMX Exporter.",
                  "properties": {
                    "enabledInBroker": {
                      "type": "boolean"
                    }
                  },
                  "type": "object",
                  "additionalProperties": false
                },
                "nodeExporter": {
                  "description": "Indicates whether you want to enable or disable the Node Exporter.",
                  "properties": {
                    "enabledInBroker": {
                      "type": "boolean"
                    }
                  },
                  "type": "object",
                  "additionalProperties": false
                }
              },
              "type": "object",
              "additionalProperties": false
            }
          },
          "type": "object",
          "additionalProperties": false
        },
        "storageMode": {
          "description": "This controls storage mode for supported storage tiers.",
          "type": "string"
        },
        "tags": {
          "additionalProperties": {
            "type": "string"
          },
          "description": "Create tags when creating the cluster.",
          "type": "object"
        }
      },
      "required": [
        "brokerNodeGroupInfo",
        "kafkaVersion",
        "name",
        "numberOfBrokerNodes"
      ],
      "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 that is used to contain resource sync state, account ownership, constructed ARN for the resource",
          "properties": {
            "arn": {
              "description": "ARN is the Amazon Resource Name for the resource. This is a globally-unique identifier and is set only by the ACK service controller once the controller has orchestrated the creation of the resource OR when it has verified that an \"adopted\" resource (a resource where the ARN annotation was set by the Kubernetes user on the CR) exists and matches the supplied CR's Spec field values. TODO(vijat@): Find a better strategy for resources that do not have ARN in CreateOutputResponse https://github.com/aws/aws-controllers-k8s/issues/270",
              "type": "string"
            },
            "ownerAccountID": {
              "description": "OwnerAccountID is the AWS Account ID of the account that owns the backend 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
        },
        "conditions": {
          "description": "All CRS managed by ACK have a common `Status.Conditions` member that contains a collection of `ackv1alpha1.Condition` objects that describe the various terminal states of the CR and its backend AWS service API resource",
          "items": {
            "description": "Condition is the common struct used by all CRDs managed by ACK service controllers to indicate terminal states  of the CR and its backend AWS service 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"
        },
        "state": {
          "description": "The state of the cluster. The possible states are ACTIVE, CREATING, DELETING, FAILED, HEALING, MAINTENANCE, REBOOTING_BROKER, and UPDATING.",
          "type": "string"
        }
      },
      "type": "object",
      "additionalProperties": false
    }
  },
  "type": "object"
}
