apiVersion: apiextensions.k8s.io/v1
kind: CustomResourceDefinition
metadata:
  annotations:
    controller-gen.kubebuilder.io/version: v0.6.1
    helm.sh/hook: crd-install
  name: mysqlusers.mysql.presslabs.org
  labels:
    app: mysql-operator
spec:
  group: mysql.presslabs.org
  names:
    kind: MysqlUser
    listKind: MysqlUserList
    plural: mysqlusers
    singular: mysqluser
  scope: Namespaced
  versions:
    - additionalPrinterColumns:
        - description: The user status
          jsonPath: .status.conditions[?(@.type == 'Ready')].status
          name: Ready
          type: string
        - jsonPath: .spec.clusterRef.name
          name: Cluster
          type: string
        - jsonPath: .spec.user
          name: UserName
          type: string
        - jsonPath: .metadata.creationTimestamp
          name: Age
          type: date
      name: v1alpha1
      schema:
        openAPIV3Schema:
          description: MysqlUser is the Schema for the MySQL User 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: MysqlUserSpec defines the desired state of MysqlUserSpec
              properties:
                allowedHosts:
                  description: AllowedHosts is the allowed host to connect from.
                  items:
                    type: string
                  type: array
                clusterRef:
                  description: ClusterRef represents a reference to the MySQL cluster. This field should be immutable.
                  properties:
                    name:
                      description: 'Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names TODO: Add other useful fields. apiVersion, kind, uid?'
                      type: string
                    namespace:
                      description: Namespace the MySQL cluster namespace
                      type: string
                  type: object
                password:
                  description: Password is the password for the user.
                  properties:
                    key:
                      description: The key of the secret to select from.  Must be a valid secret key.
                      type: string
                    name:
                      description: 'Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names TODO: Add other useful fields. apiVersion, kind, uid?'
                      type: string
                    optional:
                      description: Specify whether the Secret or its key must be defined
                      type: boolean
                  required:
                    - key
                  type: object
                permissions:
                  description: Permissions is the list of roles that user has in the specified database.
                  items:
                    description: MysqlPermission defines a MySQL schema permission
                    properties:
                      permissions:
                        description: Permissions represents the permissions granted on the schema/tables
                        items:
                          type: string
                        type: array
                      schema:
                        description: Schema represents the schema to which the permission applies
                        type: string
                      tables:
                        description: Tables represents the tables inside the schema to which the permission applies
                        items:
                          type: string
                        type: array
                    required:
                      - permissions
                      - schema
                      - tables
                    type: object
                  type: array
                resourceLimits:
                  additionalProperties:
                    anyOf:
                      - type: integer
                      - type: string
                    pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$
                    x-kubernetes-int-or-string: true
                  description: 'ResourceLimits allow settings limit per mysql user as defined here: https://dev.mysql.com/doc/refman/5.7/en/user-resources.html'
                  type: object
                user:
                  description: User is the name of the user that will be created with will access the specified database. This field should be immutable.
                  type: string
              required:
                - allowedHosts
                - clusterRef
                - password
                - user
              type: object
            status:
              description: MysqlUserStatus defines the observed state of MysqlUser
              properties:
                allowedHosts:
                  description: AllowedHosts contains the list of hosts that the user is allowed to connect from.
                  items:
                    type: string
                  type: array
                conditions:
                  description: Conditions represents the MysqlUser resource conditions list.
                  items:
                    description: MySQLUserCondition defines the condition struct for a MysqlUser resource
                    properties:
                      lastTransitionTime:
                        description: Last time the condition transitioned from one status to another.
                        format: date-time
                        type: string
                      lastUpdateTime:
                        description: The last time this condition was updated.
                        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 of MysqlUser condition.
                        type: string
                    required:
                      - lastTransitionTime
                      - message
                      - reason
                      - status
                      - type
                    type: object
                  type: array
              type: object
          type: object
      served: true
      storage: true
      subresources:
        status: {}
