{
  "description": "Broker is the Schema for the Brokers 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": "BrokerSpec defines the desired state of Broker.",
      "properties": {
        "authenticationStrategy": {
          "description": "Optional. The authentication strategy used to secure the broker. The default\nis SIMPLE.",
          "type": "string"
        },
        "autoMinorVersionUpgrade": {
          "description": "Enables automatic upgrades to new patch versions for brokers as new versions\nare released and supported by Amazon MQ. Automatic upgrades occur during\nthe scheduled maintenance window or after a manual broker reboot. Set to\ntrue by default, if no value is specified.\n\nMust be set to true for ActiveMQ brokers version 5.18 and above and for RabbitMQ\nbrokers version 3.13 and above.",
          "type": "boolean"
        },
        "configuration": {
          "description": "A list of information about the configuration.",
          "properties": {
            "id": {
              "type": "string"
            },
            "revision": {
              "format": "int64",
              "type": "integer"
            }
          },
          "type": "object",
          "additionalProperties": false
        },
        "creatorRequestID": {
          "description": "The unique ID that the requester receives for the created broker. Amazon\nMQ passes your ID with the API action.\n\nWe recommend using a Universally Unique Identifier (UUID) for the creatorRequestId.\nYou may omit the creatorRequestId if your application doesn't require idempotency.",
          "type": "string"
        },
        "deploymentMode": {
          "description": "Required. The broker's deployment mode.",
          "type": "string"
        },
        "encryptionOptions": {
          "description": "Encryption options for the broker.",
          "properties": {
            "kmsKeyID": {
              "type": "string"
            },
            "useAWSOwnedKey": {
              "type": "boolean"
            }
          },
          "type": "object",
          "additionalProperties": false
        },
        "engineType": {
          "description": "Required. The type of broker engine. Currently, Amazon MQ supports ACTIVEMQ\nand RABBITMQ.",
          "type": "string"
        },
        "engineVersion": {
          "description": "The broker engine version. Defaults to the latest available version for the\nspecified broker engine type. For more information, see the ActiveMQ version\nmanagement (https://docs.aws.amazon.com//amazon-mq/latest/developer-guide/activemq-version-management.html)\nand the RabbitMQ version management (https://docs.aws.amazon.com//amazon-mq/latest/developer-guide/rabbitmq-version-management.html)\nsections in the Amazon MQ Developer Guide.",
          "type": "string"
        },
        "hostInstanceType": {
          "description": "Required. The broker's instance type.",
          "type": "string"
        },
        "ldapServerMetadata": {
          "description": "Optional. The metadata of the LDAP server used to authenticate and authorize\nconnections to the broker. Does not apply to RabbitMQ brokers.",
          "properties": {
            "hosts": {
              "items": {
                "type": "string"
              },
              "type": "array"
            },
            "roleBase": {
              "type": "string"
            },
            "roleName": {
              "type": "string"
            },
            "roleSearchMatching": {
              "type": "string"
            },
            "roleSearchSubtree": {
              "type": "boolean"
            },
            "serviceAccountPassword": {
              "type": "string"
            },
            "serviceAccountUsername": {
              "type": "string"
            },
            "userBase": {
              "type": "string"
            },
            "userRoleName": {
              "type": "string"
            },
            "userSearchMatching": {
              "type": "string"
            },
            "userSearchSubtree": {
              "type": "boolean"
            }
          },
          "type": "object",
          "additionalProperties": false
        },
        "logs": {
          "description": "Enables Amazon CloudWatch logging for brokers.",
          "properties": {
            "audit": {
              "type": "boolean"
            },
            "general": {
              "type": "boolean"
            }
          },
          "type": "object",
          "additionalProperties": false
        },
        "maintenanceWindowStartTime": {
          "description": "The parameters that determine the WeeklyStartTime.",
          "properties": {
            "dayOfWeek": {
              "type": "string"
            },
            "timeOfDay": {
              "type": "string"
            },
            "timeZone": {
              "type": "string"
            }
          },
          "type": "object",
          "additionalProperties": false
        },
        "name": {
          "description": "Required. The broker's name. This value must be unique in your Amazon Web\nServices account, 1-50 characters long, must contain only letters, numbers,\ndashes, and underscores, and must not contain white spaces, brackets, wildcard\ncharacters, or special characters.\n\nDo not add personally identifiable information (PII) or other confidential\nor sensitive information in broker names. Broker names are accessible to\nother Amazon Web Services services, including CloudWatch Logs. Broker names\nare not intended to be used for private or sensitive data.",
          "type": "string"
        },
        "publiclyAccessible": {
          "description": "Enables connections from applications outside of the VPC that hosts the broker's\nsubnets. Set to false by default, if no value is provided.",
          "type": "boolean"
        },
        "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"
        },
        "securityGroups": {
          "description": "The list of rules (1 minimum, 125 maximum) that authorize connections to\nbrokers.",
          "items": {
            "type": "string"
          },
          "type": "array"
        },
        "storageType": {
          "description": "The broker's storage type.",
          "type": "string"
        },
        "subnetIDs": {
          "description": "The list of groups that define which subnets and IP ranges the broker can\nuse from different Availability Zones. If you specify more than one subnet,\nthe subnets must be in different Availability Zones. Amazon MQ will not be\nable to create VPC endpoints for your broker with multiple subnets in the\nsame Availability Zone. A SINGLE_INSTANCE deployment requires one subnet\n(for example, the default subnet). An ACTIVE_STANDBY_MULTI_AZ Amazon MQ for\nActiveMQ deployment requires two subnets. A CLUSTER_MULTI_AZ Amazon MQ for\nRabbitMQ deployment has no subnet requirements when deployed with public\naccessibility. Deployment without public accessibility requires at least\none subnet.\n\nIf you specify subnets in a shared VPC (https://docs.aws.amazon.com/vpc/latest/userguide/vpc-sharing.html)\nfor a RabbitMQ broker, the associated VPC to which the specified subnets\nbelong must be owned by your Amazon Web Services account. Amazon MQ will\nnot be able to create VPC endpoints in VPCs that are not owned by your Amazon\nWeb Services account.",
          "items": {
            "type": "string"
          },
          "type": "array"
        },
        "subnetRefs": {
          "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"
        },
        "tags": {
          "additionalProperties": {
            "type": "string"
          },
          "description": "Create tags when creating the broker.",
          "type": "object"
        },
        "users": {
          "description": "The list of broker users (persons or applications) who can access queues\nand topics. For Amazon MQ for RabbitMQ brokers, one and only one administrative\nuser is accepted and created when a broker is first provisioned. All subsequent\nbroker users are created by making RabbitMQ API calls directly to brokers\nor via the RabbitMQ web console.",
          "items": {
            "description": "A user associated with the broker. For Amazon MQ for RabbitMQ brokers, one\nand only one administrative user is accepted and created when a broker is\nfirst provisioned. All subsequent broker users are created by making RabbitMQ\nAPI calls directly to brokers or via the RabbitMQ web console.",
            "properties": {
              "consoleAccess": {
                "type": "boolean"
              },
              "groups": {
                "items": {
                  "type": "string"
                },
                "type": "array"
              },
              "password": {
                "description": "SecretKeyReference combines a k8s corev1.SecretReference with a\nspecific key within the referred-to Secret",
                "properties": {
                  "key": {
                    "description": "Key is the key within the secret",
                    "type": "string"
                  },
                  "name": {
                    "description": "name is unique within a namespace to reference a secret resource.",
                    "type": "string"
                  },
                  "namespace": {
                    "description": "namespace defines the space within which the secret name must be unique.",
                    "type": "string"
                  }
                },
                "required": [
                  "key"
                ],
                "type": "object",
                "x-kubernetes-map-type": "atomic",
                "additionalProperties": false
              },
              "username": {
                "type": "string"
              }
            },
            "type": "object",
            "additionalProperties": false
          },
          "type": "array"
        }
      },
      "required": [
        "deploymentMode",
        "engineType",
        "hostInstanceType",
        "name",
        "publiclyAccessible",
        "users"
      ],
      "type": "object",
      "additionalProperties": false
    },
    "status": {
      "description": "BrokerStatus defines the observed state of Broker",
      "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
        },
        "brokerID": {
          "description": "The unique ID that Amazon MQ generates for the broker.",
          "type": "string"
        },
        "brokerInstances": {
          "description": "A list of information about allocated brokers.",
          "items": {
            "description": "Returns information about all brokers.",
            "properties": {
              "consoleURL": {
                "type": "string"
              },
              "endpoints": {
                "items": {
                  "type": "string"
                },
                "type": "array"
              },
              "ipAddress": {
                "type": "string"
              }
            },
            "type": "object",
            "additionalProperties": false
          },
          "type": "array"
        },
        "brokerState": {
          "description": "The broker's status.",
          "type": "string"
        },
        "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"
        }
      },
      "type": "object",
      "additionalProperties": false
    }
  },
  "type": "object"
}
