{
  "properties": {
    "metadata": {
      "properties": {
        "name": {
          "maxLength": 40,
          "type": "string"
        }
      },
      "type": "object",
      "additionalProperties": false
    },
    "spec": {
      "properties": {
        "backupProfiles": {
          "description": "Backup profile specifications for the cluster, which can be referenced from backup schedules and one-off backup jobs",
          "items": {
            "properties": {
              "dumpInstance": {
                "properties": {
                  "dumpOptions": {
                    "description": "A dictionary of key-value pairs passed directly to MySQL Shell's DumpInstance()",
                    "type": "object",
                    "x-kubernetes-preserve-unknown-fields": true
                  },
                  "storage": {
                    "properties": {
                      "azure": {
                        "properties": {
                          "config": {
                            "description": "Name of a Secret with Azure BLOB Storage configuration and credentials",
                            "type": "string"
                          },
                          "containerName": {
                            "description": "Name of the Azure  BLOB Storage container where the dump is stored",
                            "type": "string"
                          },
                          "prefix": {
                            "description": "Path in the container where the dump files are stored",
                            "type": "string"
                          }
                        },
                        "required": [
                          "containerName",
                          "config"
                        ],
                        "type": "object",
                        "additionalProperties": false
                      },
                      "ociObjectStorage": {
                        "properties": {
                          "bucketName": {
                            "description": "Name of the OCI bucket where backup is stored",
                            "type": "string"
                          },
                          "credentials": {
                            "description": "Name of a Secret with data for accessing the bucket",
                            "type": "string"
                          },
                          "prefix": {
                            "description": "Path in bucket where backup is stored",
                            "type": "string"
                          }
                        },
                        "required": [
                          "bucketName",
                          "credentials"
                        ],
                        "type": "object",
                        "additionalProperties": false
                      },
                      "persistentVolumeClaim": {
                        "description": "Specification of the PVC to be used. Used 'as is' in pod executing the backup.",
                        "type": "object",
                        "x-kubernetes-preserve-unknown-fields": true
                      },
                      "s3": {
                        "properties": {
                          "bucketName": {
                            "description": "Name of the S3 bucket where the dump is stored",
                            "type": "string"
                          },
                          "config": {
                            "description": "Name of a Secret with S3 configuration and credentials",
                            "type": "string"
                          },
                          "endpoint": {
                            "description": "Override endpoint URL",
                            "type": "string"
                          },
                          "prefix": {
                            "description": "Path in the bucket where the dump files are stored",
                            "type": "string"
                          },
                          "profile": {
                            "default": "",
                            "description": "Profile being used in configuration files",
                            "type": "string"
                          }
                        },
                        "required": [
                          "bucketName",
                          "config"
                        ],
                        "type": "object",
                        "additionalProperties": false
                      }
                    },
                    "type": "object",
                    "x-kubernetes-preserve-unknown-fields": true,
                    "additionalProperties": false
                  }
                },
                "type": "object",
                "additionalProperties": false
              },
              "meb": {
                "description": "MySQL Enterprise Backup",
                "properties": {
                  "extraOptions": {
                    "description": "Additonal Command Line Options being passed to MySQL Enterprise Backup",
                    "items": {
                      "type": "string"
                    },
                    "type": "array"
                  },
                  "storage": {
                    "description": "Configuration of storage for MySQL Enterprise Backup",
                    "properties": {
                      "oci": {
                        "description": "Store MySQL Enterprise Backup on OCI Object Storage",
                        "properties": {
                          "bucketName": {
                            "description": "Name of the OCI bucket where backup is stored",
                            "type": "string"
                          },
                          "credentials": {
                            "description": "Name of a Secret with data for accessing the bucket",
                            "type": "string"
                          },
                          "namespace": {
                            "description": "OCI Namespace of Object Store",
                            "type": "string"
                          },
                          "prefix": {
                            "description": "Path in bucket where backup is stored",
                            "type": "string"
                          }
                        },
                        "required": [
                          "bucketName",
                          "prefix",
                          "namespace",
                          "credentials"
                        ],
                        "type": "object",
                        "additionalProperties": false
                      },
                      "s3": {
                        "description": "S3 style storage",
                        "properties": {
                          "bucket": {
                            "description": "S3 Bucket Name",
                            "type": "string"
                          },
                          "credentials": {
                            "description": "Name of a Secret holding iaccessKeyId and secretAccessKey properties",
                            "type": "string"
                          },
                          "host": {
                            "description": "Override hostname for S3-compatible backends",
                            "type": "string"
                          },
                          "objectKeyPrefix": {
                            "description": "S3 Object Key Prefix, this will be extended with the name of the actual backup",
                            "type": "string"
                          },
                          "region": {
                            "description": "S3 Region",
                            "type": "string"
                          }
                        },
                        "required": [
                          "region",
                          "bucket",
                          "objectKeyPrefix",
                          "credentials"
                        ],
                        "type": "object",
                        "additionalProperties": false
                      }
                    },
                    "type": "object",
                    "additionalProperties": false
                  }
                },
                "required": [
                  "storage"
                ],
                "type": "object",
                "additionalProperties": false
              },
              "name": {
                "description": "Embedded backup profile, referenced as backupProfileName elsewhere",
                "type": "string"
              },
              "podAnnotations": {
                "type": "object",
                "x-kubernetes-preserve-unknown-fields": true
              },
              "podLabels": {
                "type": "object",
                "x-kubernetes-preserve-unknown-fields": true
              },
              "snapshot": {
                "properties": {
                  "storage": {
                    "properties": {
                      "azure": {
                        "properties": {
                          "config": {
                            "description": "Name of a Secret with Azure BLOB Storage configuration and credentials",
                            "type": "string"
                          },
                          "containerName": {
                            "description": "Name of the Azure  BLOB Storage container where the dump is stored",
                            "type": "string"
                          },
                          "prefix": {
                            "description": "Path in the container where the dump files are stored",
                            "type": "string"
                          }
                        },
                        "required": [
                          "containerName",
                          "config"
                        ],
                        "type": "object",
                        "additionalProperties": false
                      },
                      "ociObjectStorage": {
                        "properties": {
                          "bucketName": {
                            "description": "Bucket name where backup is stored",
                            "type": "string"
                          },
                          "credentials": {
                            "description": "Name of a Secret with data for accessing the bucket",
                            "type": "string"
                          },
                          "prefix": {
                            "description": "Path in bucket where backup is stored",
                            "type": "string"
                          }
                        },
                        "required": [
                          "bucketName",
                          "credentials"
                        ],
                        "type": "object",
                        "additionalProperties": false
                      },
                      "persistentVolumeClaim": {
                        "description": "Specification of the PVC to be used. Used 'as is' in pod executing the backup.",
                        "type": "object",
                        "x-kubernetes-preserve-unknown-fields": true
                      },
                      "s3": {
                        "properties": {
                          "bucketName": {
                            "description": "Name of the S3 bucket where the dump is stored",
                            "type": "string"
                          },
                          "config": {
                            "description": "Name of a Secret with S3 configuration and credentials",
                            "type": "string"
                          },
                          "endpoint": {
                            "description": "Override endpoint URL",
                            "type": "string"
                          },
                          "prefix": {
                            "description": "Path in the bucket where the dump files are stored",
                            "type": "string"
                          },
                          "profile": {
                            "default": "",
                            "description": "Profile being used in configuration files",
                            "type": "string"
                          }
                        },
                        "required": [
                          "bucketName",
                          "config"
                        ],
                        "type": "object",
                        "additionalProperties": false
                      }
                    },
                    "type": "object",
                    "x-kubernetes-preserve-unknown-fields": true,
                    "additionalProperties": false
                  }
                },
                "type": "object",
                "additionalProperties": false
              }
            },
            "required": [
              "name"
            ],
            "type": "object",
            "x-kubernetes-preserve-unknown-fields": true,
            "additionalProperties": false
          },
          "type": "array"
        },
        "backupSchedules": {
          "description": "Schedules for periodically executed backups",
          "items": {
            "properties": {
              "backupProfile": {
                "description": "backupProfile specification if backupProfileName is not specified",
                "properties": {
                  "dumpInstance": {
                    "properties": {
                      "dumpOptions": {
                        "description": "A dictionary of key-value pairs passed directly to MySQL Shell's DumpInstance()",
                        "type": "object",
                        "x-kubernetes-preserve-unknown-fields": true
                      },
                      "storage": {
                        "properties": {
                          "azure": {
                            "properties": {
                              "config": {
                                "description": "Name of a Secret with Azure BLOB Storage configuration and credentials",
                                "type": "string"
                              },
                              "containerName": {
                                "description": "Name of the Azure  BLOB Storage container where the dump is stored",
                                "type": "string"
                              },
                              "prefix": {
                                "description": "Path in the container where the dump files are stored",
                                "type": "string"
                              }
                            },
                            "required": [
                              "containerName",
                              "config"
                            ],
                            "type": "object",
                            "additionalProperties": false
                          },
                          "ociObjectStorage": {
                            "properties": {
                              "bucketName": {
                                "description": "Name of the OCI Bucket where backup is stored",
                                "type": "string"
                              },
                              "credentials": {
                                "description": "Name of a Secret with data for accessing the bucket",
                                "type": "string"
                              },
                              "prefix": {
                                "description": "Path in bucket where backup is stored",
                                "type": "string"
                              }
                            },
                            "required": [
                              "bucketName",
                              "credentials"
                            ],
                            "type": "object",
                            "additionalProperties": false
                          },
                          "persistentVolumeClaim": {
                            "description": "Specification of the PVC to be used. Used 'as is' in pod executing the backup.",
                            "type": "object",
                            "x-kubernetes-preserve-unknown-fields": true
                          },
                          "s3": {
                            "properties": {
                              "bucketName": {
                                "description": "Name of the S3 bucket where the dump is stored",
                                "type": "string"
                              },
                              "config": {
                                "description": "Name of a Secret with S3 configuration and credentials",
                                "type": "string"
                              },
                              "endpoint": {
                                "description": "Override endpoint URL",
                                "type": "string"
                              },
                              "prefix": {
                                "description": "Path in the bucket where the dump files are stored",
                                "type": "string"
                              },
                              "profile": {
                                "default": "",
                                "description": "Profile being used in configuration files",
                                "type": "string"
                              }
                            },
                            "required": [
                              "bucketName",
                              "config"
                            ],
                            "type": "object",
                            "additionalProperties": false
                          }
                        },
                        "type": "object",
                        "x-kubernetes-preserve-unknown-fields": true,
                        "additionalProperties": false
                      }
                    },
                    "type": "object",
                    "additionalProperties": false
                  },
                  "meb": {
                    "description": "MySQL Enterprise Backup",
                    "properties": {
                      "extraOptions": {
                        "description": "Additonal Command Line Options being passed to MySQL Enterprise Backup",
                        "items": {
                          "type": "string"
                        },
                        "type": "array"
                      },
                      "storage": {
                        "description": "Configuration of storage for MySQL Enterprise Backup",
                        "properties": {
                          "oci": {
                            "description": "Store MySQL Enterprise Backup on OCI Object Storage",
                            "properties": {
                              "bucketName": {
                                "description": "Name of the OCI bucket where backup is stored",
                                "type": "string"
                              },
                              "credentials": {
                                "description": "Name of a Secret with data for accessing the bucket",
                                "type": "string"
                              },
                              "namespace": {
                                "description": "OCI Namespace of Object Store",
                                "type": "string"
                              },
                              "prefix": {
                                "description": "Path in bucket where backup is stored",
                                "type": "string"
                              }
                            },
                            "required": [
                              "bucketName",
                              "prefix",
                              "namespace",
                              "credentials"
                            ],
                            "type": "object",
                            "additionalProperties": false
                          },
                          "s3": {
                            "description": "S3 style storage",
                            "properties": {
                              "bucket": {
                                "description": "S3 Bucket Name",
                                "type": "string"
                              },
                              "credentials": {
                                "description": "Name of a Secret holding iaccessKeyId and secretAccessKey properties",
                                "type": "string"
                              },
                              "host": {
                                "description": "Override hostname for S3-compatible backends",
                                "type": "string"
                              },
                              "objectKeyPrefix": {
                                "description": "S3 Object Key Prefix, this will be extended with the name of the actual backup",
                                "type": "string"
                              },
                              "region": {
                                "description": "S3 Region",
                                "type": "string"
                              }
                            },
                            "required": [
                              "region",
                              "bucket",
                              "objectKeyPrefix",
                              "credentials"
                            ],
                            "type": "object",
                            "additionalProperties": false
                          }
                        },
                        "type": "object",
                        "additionalProperties": false
                      }
                    },
                    "required": [
                      "storage"
                    ],
                    "type": "object",
                    "additionalProperties": false
                  },
                  "podAnnotations": {
                    "type": "object",
                    "x-kubernetes-preserve-unknown-fields": true
                  },
                  "podLabels": {
                    "type": "object",
                    "x-kubernetes-preserve-unknown-fields": true
                  }
                },
                "type": "object",
                "x-kubernetes-preserve-unknown-fields": true,
                "additionalProperties": false
              },
              "backupProfileName": {
                "description": "Name of the backupProfile to be used",
                "type": "string"
              },
              "deleteBackupData": {
                "default": false,
                "description": "Whether to delete the backup data in case the MySQLBackup object created by the job is deleted",
                "type": "boolean"
              },
              "enabled": {
                "default": true,
                "description": "Whether the schedule is enabled or not",
                "type": "boolean"
              },
              "name": {
                "description": "Name of the backup schedule",
                "type": "string"
              },
              "schedule": {
                "description": "The schedule of the job, syntax as a cron expression",
                "type": "string"
              },
              "timeZone": {
                "description": "Timezone for the backup schedule, example: 'America/New_York'",
                "type": "string"
              }
            },
            "required": [
              "name",
              "schedule"
            ],
            "type": "object",
            "x-kubernetes-preserve-unknown-fields": true,
            "additionalProperties": false
          },
          "type": "array"
        },
        "baseServerId": {
          "default": 1000,
          "description": "Base value for MySQL server_id for instances in the cluster",
          "maximum": 4294967195,
          "minimum": 0,
          "type": "integer"
        },
        "datadirPermissions": {
          "properties": {
            "fsGroupChangePolicy": {
              "default": "",
              "description": "Optional fsGroupChangePolicy value to be set in the pod security context. Some possible values are OnRootMismatch and Always. For more information check the official Kubernetes documentation",
              "type": "string"
            },
            "setRightsUsingInitContainer": {
              "default": true,
              "description": "Whether to use an init container to set at start the DataDir permissions ",
              "type": "boolean"
            }
          },
          "type": "object",
          "additionalProperties": false
        },
        "datadirVolumeClaimTemplate": {
          "description": "Template for a PersistentVolumeClaim, to be used as datadir",
          "type": "object",
          "x-kubernetes-preserve-unknown-fields": true
        },
        "edition": {
          "description": "MySQL Server Edition (community or enterprise)",
          "pattern": "^(community|enterprise)$",
          "type": "string"
        },
        "imagePullPolicy": {
          "description": "Defaults to Always, but set to IfNotPresent in deploy-operator.yaml when deploying Operator",
          "type": "string"
        },
        "imagePullSecrets": {
          "items": {
            "properties": {
              "name": {
                "type": "string"
              }
            },
            "type": "object",
            "additionalProperties": false
          },
          "type": "array"
        },
        "imageRepository": {
          "description": "Repository where images are pulled from; defaults to container-registry.oracle.com/mysql",
          "type": "string"
        },
        "initDB": {
          "properties": {
            "clone": {
              "properties": {
                "donorUrl": {
                  "description": "URL of the cluster to clone from",
                  "type": "string"
                },
                "rootUser": {
                  "default": "root",
                  "description": "User name used for cloning",
                  "type": "string"
                },
                "secretKeyRef": {
                  "properties": {
                    "name": {
                      "description": "Secret name with key 'rootPassword' storing the password for the user specified in rootUser",
                      "type": "string"
                    }
                  },
                  "required": [
                    "name"
                  ],
                  "type": "object",
                  "additionalProperties": false
                }
              },
              "required": [
                "donorUrl",
                "secretKeyRef"
              ],
              "type": "object",
              "additionalProperties": false
            },
            "clusterSet": {
              "properties": {
                "rootUser": {
                  "default": "root",
                  "description": "User name used for setup",
                  "type": "string"
                },
                "secretKeyRef": {
                  "properties": {
                    "name": {
                      "description": "Secret name with key 'rootPassword' storing the password for the user specified in rootUser",
                      "type": "string"
                    }
                  },
                  "required": [
                    "name"
                  ],
                  "type": "object",
                  "additionalProperties": false
                },
                "targetUrl": {
                  "description": "URL of a cluster, which is a ClusterSet to join to",
                  "type": "string"
                }
              },
              "required": [
                "targetUrl",
                "secretKeyRef"
              ],
              "type": "object",
              "additionalProperties": false
            },
            "dump": {
              "properties": {
                "name": {
                  "description": "Name of the dump. Not used by the operator, but a descriptive hint for the cluster administrator",
                  "type": "string"
                },
                "options": {
                  "description": "A dictionary of key-value pairs passed directly to MySQL Shell's loadDump()",
                  "type": "object",
                  "x-kubernetes-preserve-unknown-fields": true
                },
                "path": {
                  "description": "Path to the dump in the PVC. Use when specifying persistentVolumeClaim. Omit for ociObjectStorage, S3, or azure.",
                  "type": "string"
                },
                "storage": {
                  "properties": {
                    "azure": {
                      "properties": {
                        "config": {
                          "description": "Name of a Secret with Azure BLOB Storage configuration and credentials",
                          "type": "string"
                        },
                        "containerName": {
                          "description": "Name of the Azure  BLOB Storage container where the dump is stored",
                          "type": "string"
                        },
                        "prefix": {
                          "description": "Path in the container where the dump files are stored",
                          "type": "string"
                        }
                      },
                      "required": [
                        "containerName",
                        "prefix",
                        "config"
                      ],
                      "type": "object",
                      "additionalProperties": false
                    },
                    "ociObjectStorage": {
                      "properties": {
                        "bucketName": {
                          "description": "Name of the OCI bucket where the dump is stored",
                          "type": "string"
                        },
                        "credentials": {
                          "description": "Name of a Secret with data for accessing the bucket",
                          "type": "string"
                        },
                        "prefix": {
                          "description": "Path in the bucket where the dump files are stored",
                          "type": "string"
                        }
                      },
                      "required": [
                        "bucketName",
                        "prefix",
                        "credentials"
                      ],
                      "type": "object",
                      "additionalProperties": false
                    },
                    "persistentVolumeClaim": {
                      "description": "Specification of the PVC to be used. Used 'as is' in the cloning pod.",
                      "type": "object",
                      "x-kubernetes-preserve-unknown-fields": true
                    },
                    "s3": {
                      "properties": {
                        "bucketName": {
                          "description": "Name of the S3 bucket where the dump is stored",
                          "type": "string"
                        },
                        "config": {
                          "description": "Name of a Secret with S3 configuration and credentials",
                          "type": "string"
                        },
                        "endpoint": {
                          "description": "Override endpoint URL",
                          "type": "string"
                        },
                        "prefix": {
                          "description": "Path in the bucket where the dump files are stored",
                          "type": "string"
                        },
                        "profile": {
                          "default": "",
                          "description": "Profile being used in configuration files",
                          "type": "string"
                        }
                      },
                      "required": [
                        "bucketName",
                        "prefix",
                        "config"
                      ],
                      "type": "object",
                      "additionalProperties": false
                    }
                  },
                  "type": "object",
                  "x-kubernetes-preserve-unknown-fields": true,
                  "additionalProperties": false
                }
              },
              "required": [
                "storage"
              ],
              "type": "object",
              "additionalProperties": false
            },
            "meb": {
              "properties": {
                "extraOptions": {
                  "description": "Additonal Command Line Options being passed to MySQL Enterprise Backup",
                  "items": {
                    "type": "string"
                  },
                  "type": "array"
                },
                "fullBackup": {
                  "description": "Name of the full backup to restore",
                  "type": "string"
                },
                "incrementalBackups": {
                  "description": "Incremental backups to apply on top of the fullBackup",
                  "items": {
                    "type": "string"
                  },
                  "type": "array"
                },
                "pitr": {
                  "description": "Point-in-time recovery using a backup file on top of fullBackup and optional incrementalBackups",
                  "properties": {
                    "backupFile": {
                      "description": "Backup containing binary log to apply",
                      "type": "string"
                    },
                    "binlogName": {
                      "description": "Basename of binlogs to use for PITR. Often this is the server_name of the backup source",
                      "type": "string"
                    },
                    "end": {
                      "description": "End condition for not applying the full log",
                      "properties": {
                        "afterGtids": {
                          "description": "GTID set describing last transactions to apply, see SQL_AFTER_GTIDS in CHANGE REPLICATION SOURCE statement documentation",
                          "type": "string"
                        },
                        "beforeGtids": {
                          "description": "GTID set describing last transactions to apply, see SQL_BEFORE_GTID in CHANGE REPLICATION SOURCE statement documentation",
                          "type": "string"
                        }
                      },
                      "type": "object",
                      "additionalProperties": false
                    }
                  },
                  "required": [
                    "backupFile"
                  ],
                  "type": "object",
                  "additionalProperties": false
                },
                "storage": {
                  "properties": {
                    "ociObjectStorage": {
                      "description": "Restore from OCI ObjectStorage using an PAR",
                      "properties": {
                        "credentials": {
                          "description": "Secret Containing PAR Base URL under key parBaseUrl",
                          "type": "string"
                        }
                      },
                      "required": [
                        "credentials"
                      ],
                      "type": "object",
                      "additionalProperties": false
                    },
                    "s3": {
                      "description": "S3 style storage",
                      "properties": {
                        "bucket": {
                          "description": "S3 Bucket Name",
                          "type": "string"
                        },
                        "credentials": {
                          "description": "Name of a Secret holding iaccessKeyId and secretAccessKey properties",
                          "type": "string"
                        },
                        "host": {
                          "description": "Override hostname for S3-compatible backends",
                          "type": "string"
                        },
                        "objectKeyPrefix": {
                          "description": "S3 Object Key Prefix, this will be extended with the name of the actual backup",
                          "type": "string"
                        },
                        "region": {
                          "description": "S3 Region",
                          "type": "string"
                        }
                      },
                      "required": [
                        "region",
                        "bucket",
                        "objectKeyPrefix",
                        "credentials"
                      ],
                      "type": "object",
                      "additionalProperties": false
                    }
                  },
                  "type": "object",
                  "additionalProperties": false
                }
              },
              "required": [
                "storage",
                "fullBackup"
              ],
              "type": "object",
              "additionalProperties": false
            }
          },
          "type": "object",
          "x-kubernetes-preserve-unknown-fields": true,
          "additionalProperties": false
        },
        "instanceService": {
          "description": "Configuration of the Service used by the InnoDB Cluster GR members internally",
          "properties": {
            "annotations": {
              "description": "Custom annotations for the Service",
              "type": "object",
              "x-kubernetes-preserve-unknown-fields": true
            },
            "labels": {
              "description": "Custom labels for the Service",
              "type": "object",
              "x-kubernetes-preserve-unknown-fields": true
            }
          },
          "type": "object",
          "additionalProperties": false
        },
        "instances": {
          "default": 1,
          "description": "Number of MySQL replica instances for the cluster",
          "maximum": 9,
          "minimum": 1,
          "type": "integer"
        },
        "keyring": {
          "description": "Keyring specification",
          "properties": {
            "encryptedFile": {
              "description": "Keyring 'Encrypted File' specification",
              "properties": {
                "fileName": {
                  "default": "mysql_keyring",
                  "description": "Path to the keyring file name inside the storage volume (will be prefixed by mount path)",
                  "type": "string"
                },
                "password": {
                  "description": "Name of a secret that contains password for the keyring in the key 'keyring_password'",
                  "type": "string"
                },
                "readOnly": {
                  "default": false,
                  "description": "Whether to open the keyring file in read-only mode",
                  "type": "boolean"
                },
                "storage": {
                  "description": "Specification of the volume to be mounted where the keyring file resides",
                  "type": "object",
                  "x-kubernetes-preserve-unknown-fields": true
                }
              },
              "required": [
                "storage",
                "password"
              ],
              "type": "object",
              "additionalProperties": false
            },
            "file": {
              "description": "Keyring 'File' specification",
              "properties": {
                "fileName": {
                  "default": "mysql_keyring",
                  "description": "Path to the keyring file name inside the storage volume (will be prefixed by mount path)",
                  "type": "string"
                },
                "readOnly": {
                  "default": false,
                  "description": "Whether to open the keyring file in read-only mode",
                  "type": "boolean"
                },
                "storage": {
                  "description": "Specification of the volume to be mounted where the keyring file resides",
                  "type": "object",
                  "x-kubernetes-preserve-unknown-fields": true
                }
              },
              "required": [
                "storage"
              ],
              "type": "object",
              "additionalProperties": false
            },
            "kmip": {
              "description": "Keyring 'KMIP' specification",
              "properties": {
                "cacheKeys": {
                  "default": true,
                  "description": "Whether the keys are cached by the MySQL Server in RAM in plaintext. If set to false the keys are decrypted on every access",
                  "type": "boolean"
                },
                "configuration": {
                  "default": "",
                  "description": "Name of a secret that contains TLS certificates",
                  "type": "string"
                },
                "server": {
                  "default": "",
                  "description": "Primary OKV Server host with port number in the format <host>:<port>",
                  "type": "string"
                },
                "standbyServer": {
                  "default": [],
                  "description": "A list of standby servers in the format <host>:<port>",
                  "items": {
                    "type": "string"
                  },
                  "type": "array"
                }
              },
              "required": [
                "configuration",
                "server"
              ],
              "type": "object",
              "additionalProperties": false
            },
            "oci": {
              "description": "Keyring 'OCI' specification",
              "properties": {
                "caCertificate": {
                  "description": "Secret that contains ca.crt field with CA certificate bundle file that the keyring_oci plugin uses for Oracle Cloud Infrastructure certificate verification",
                  "type": "string"
                },
                "compartment": {
                  "description": "Compartment identifier in the form ocid1.compartment.oc1...",
                  "pattern": "^ocid1\\.compartment\\.",
                  "type": "string"
                },
                "endpoints": {
                  "properties": {
                    "encryption": {
                      "description": "Encryption endpoint URI like {identifier}-crypto.kms.{region}.oraclecloud.com",
                      "type": "string"
                    },
                    "management": {
                      "description": "Management endpoint URI like {identifier}-management.kms.{region}.oraclecloud.com",
                      "type": "string"
                    },
                    "secrets": {
                      "description": "Secrets endpoint URI like secrets.vaults.{region}.oci.oraclecloud.com",
                      "type": "string"
                    },
                    "vaults": {
                      "description": "Vaults endpoint URI like vaults.{region}.oci.oraclecloud.com",
                      "type": "string"
                    }
                  },
                  "type": "object",
                  "additionalProperties": false
                },
                "keyFingerprint": {
                  "description": "Private key fingerprint",
                  "pattern": "([0-9a-f]{2}:){15}[0-9a-f]{2}$",
                  "type": "string"
                },
                "keySecret": {
                  "description": "A secret that contains the private key under the field 'privatekey'",
                  "type": "string"
                },
                "masterKey": {
                  "description": "Master key identified in the form ocid1.key.oc1...",
                  "pattern": "^ocid1\\.key\\.",
                  "type": "string"
                },
                "tenancy": {
                  "description": "Tenancy identifier in the form ocid1.tenancy.oc1...",
                  "pattern": "^ocid1\\.tenancy\\.",
                  "type": "string"
                },
                "user": {
                  "description": "User identifier in the form of ocid1.user.oc1...",
                  "pattern": "^ocid1\\.user\\.",
                  "type": "string"
                },
                "virtualVault": {
                  "description": "Vault identifier in the form ocid1.vault.oc1...",
                  "pattern": "^ocid1\\.vault\\.",
                  "type": "string"
                }
              },
              "required": [
                "user",
                "keySecret",
                "keyFingerprint",
                "tenancy"
              ],
              "type": "object",
              "additionalProperties": false
            }
          },
          "type": "object",
          "additionalProperties": false
        },
        "logs": {
          "properties": {
            "collector": {
              "oneOf": [
                {
                  "required": [
                    "image",
                    "fluentd"
                  ]
                }
              ],
              "properties": {
                "containerName": {
                  "default": "logcollector",
                  "description": "Name of the collector container sidecar",
                  "type": "string"
                },
                "env": {
                  "items": {
                    "description": "Environment variables to be passed to the image. Definition will be directly copied like podSpec fields are",
                    "type": "object",
                    "x-kubernetes-preserve-unknown-fields": true
                  },
                  "type": "array"
                },
                "fluentd": {
                  "description": "Properties of the fluentd log collector",
                  "oneOf": [
                    {
                      "required": [
                        "sinks"
                      ]
                    }
                  ],
                  "properties": {
                    "additionalFilterConfiguration": {
                      "description": "Raw configuration of additional Fluentd filters to be added to the configuration file",
                      "type": "string"
                    },
                    "errorLog": {
                      "properties": {
                        "options": {
                          "description": "fluentd specific options for the error log",
                          "type": "object",
                          "x-kubernetes-preserve-unknown-fields": true
                        },
                        "tag": {
                          "default": "",
                          "description": "Tag for the error log records",
                          "type": "string"
                        }
                      },
                      "type": "object",
                      "additionalProperties": false
                    },
                    "generalLog": {
                      "properties": {
                        "options": {
                          "description": "fluentd specific options for the general log",
                          "type": "object",
                          "x-kubernetes-preserve-unknown-fields": true
                        },
                        "tag": {
                          "default": "",
                          "description": "Tag for the general log records",
                          "type": "string"
                        }
                      },
                      "type": "object",
                      "additionalProperties": false
                    },
                    "recordAugmentation": {
                      "properties": {
                        "annotations": {
                          "items": {
                            "properties": {
                              "annotationName": {
                                "description": "Name of the pod label that holds the value to be stored under fieldName in the log record",
                                "type": "string"
                              },
                              "fieldName": {
                                "description": "Name of the field added to the log record with value from annotationName",
                                "type": "string"
                              }
                            },
                            "required": [
                              "fieldName",
                              "annotationName"
                            ],
                            "type": "object",
                            "additionalProperties": false
                          },
                          "type": "array"
                        },
                        "enabled": {
                          "default": false,
                          "description": "Whether to enable record augmentation with additional data",
                          "type": "boolean"
                        },
                        "labels": {
                          "items": {
                            "properties": {
                              "fieldName": {
                                "description": "Name of the field added to the log record with value from labelName",
                                "type": "string"
                              },
                              "labelName": {
                                "description": "Name of the pod label that holds the value to be stored under fieldName in the log record",
                                "type": "string"
                              }
                            },
                            "required": [
                              "fieldName",
                              "labelName"
                            ],
                            "type": "object",
                            "additionalProperties": false
                          },
                          "type": "array"
                        },
                        "podFields": {
                          "items": {
                            "properties": {
                              "fieldName": {
                                "description": "Name of the field added to the log record with value taken from a field with path stored in fieldPath",
                                "type": "string"
                              },
                              "fieldPath": {
                                "description": "Value for the field fieldName. The path should be of the same syntax as the one used for mounting environment variables from field reference - valueFrom.fieldRef.fieldPath . The field will be mounted in the pod as a environment variable, prefixed with a prefix and used then added to the log record. Examples for fieldRef are : spec.nodeName, metadata.namespace, status.podIP, etc.",
                                "type": "string"
                              }
                            },
                            "required": [
                              "fieldName",
                              "fieldPath"
                            ],
                            "type": "object",
                            "additionalProperties": false
                          },
                          "type": "array"
                        },
                        "resourceFields": {
                          "items": {
                            "properties": {
                              "containerName": {
                                "type": "string"
                              },
                              "fieldName": {
                                "description": "Name of the field added to the log record with value taken from a field with path stored in fieldPath",
                                "type": "string"
                              },
                              "resource": {
                                "description": "See https://kubernetes.io/docs/tasks/inject-data-application/environment-variable-expose-pod-information/#use-container-fields-as-values-for-environment-variables",
                                "type": "string"
                              }
                            },
                            "required": [
                              "fieldName",
                              "containerName",
                              "resource"
                            ],
                            "type": "object",
                            "additionalProperties": false
                          },
                          "type": "array"
                        },
                        "staticFields": {
                          "items": {
                            "properties": {
                              "fieldName": {
                                "description": "Name of the field added to the log record with value from fieldValue",
                                "type": "string"
                              },
                              "fieldValue": {
                                "description": "Value for the static field with name taken from fieldName",
                                "type": "string"
                              }
                            },
                            "required": [
                              "fieldName",
                              "fieldValue"
                            ],
                            "type": "object",
                            "additionalProperties": false
                          },
                          "type": "array"
                        }
                      },
                      "type": "object",
                      "additionalProperties": false
                    },
                    "sinks": {
                      "items": {
                        "properties": {
                          "name": {
                            "description": "Name of the sink. Used only for documentation purposes",
                            "type": "string"
                          },
                          "rawConfig": {
                            "description": "Raw configuration of the sink",
                            "type": "string"
                          }
                        },
                        "required": [
                          "name",
                          "rawConfig"
                        ],
                        "type": "object",
                        "x-kubernetes-preserve-unknown-fields": true,
                        "additionalProperties": false
                      },
                      "type": "array"
                    },
                    "slowQueryLog": {
                      "properties": {
                        "options": {
                          "description": "fluentd specific options for the slow log",
                          "type": "object",
                          "x-kubernetes-preserve-unknown-fields": true
                        },
                        "tag": {
                          "default": "",
                          "description": "Tag for the slow log records",
                          "type": "string"
                        }
                      },
                      "type": "object",
                      "additionalProperties": false
                    }
                  },
                  "type": "object",
                  "additionalProperties": false
                },
                "image": {
                  "description": "Name of an image, including registry and repository, to be used for the log collector sidecar. If provided it needs to be an image for the configured collector type.",
                  "type": "string"
                }
              },
              "type": "object",
              "additionalProperties": false
            },
            "error": {
              "properties": {
                "collect": {
                  "default": false,
                  "description": "Whether error logging data should be collected. Implies that the logging should be enabled. If enabled the error log will be switched to JSON format output",
                  "type": "boolean"
                },
                "verbosity": {
                  "default": 3,
                  "description": "Log error verbosity. For details, see the MySQL Server --log-error-verbosity documentation.",
                  "maximum": 3,
                  "minimum": 1,
                  "type": "integer"
                }
              },
              "type": "object",
              "additionalProperties": false
            },
            "general": {
              "properties": {
                "collect": {
                  "default": false,
                  "description": "Whether general logging data should be collected. Implies that the logging should be enabled.",
                  "type": "boolean"
                },
                "enabled": {
                  "default": false,
                  "description": "Whether general logging should be enabled",
                  "type": "boolean"
                }
              },
              "type": "object",
              "additionalProperties": false
            },
            "slowQuery": {
              "properties": {
                "collect": {
                  "default": false,
                  "description": "Whether slow query logging data should be collected. Implies that the logging should be enabled.",
                  "type": "boolean"
                },
                "enabled": {
                  "default": false,
                  "description": "Whether slow query logging should be enabled",
                  "type": "boolean"
                },
                "longQueryTime": {
                  "default": 10,
                  "description": "Long query time threshold",
                  "minimum": 0,
                  "type": "number"
                }
              },
              "type": "object",
              "additionalProperties": false
            }
          },
          "type": "object",
          "additionalProperties": false
        },
        "meb": {
          "properties": {
            "tlsSecretName": {
              "description": "Name of a Secret containing MySQL Enterprise Backup client certificate and private key",
              "type": "string"
            }
          },
          "type": "object",
          "additionalProperties": false
        },
        "metrics": {
          "description": "Configuration of a Prometheus-style metrics provider",
          "properties": {
            "enable": {
              "default": false,
              "description": "Toggle to enable or disable the metrics sidecar",
              "type": "boolean"
            },
            "image": {
              "description": "Name of an image to be used for the metrics sidecar, if provided metrics will be enabled",
              "type": "string"
            },
            "monitor": {
              "default": false,
              "description": "Create a ServiceMonitor for Prometheus Operator",
              "type": "boolean"
            },
            "monitorSpec": {
              "default": {},
              "description": "Custom configuration for the ServiceMonitor object",
              "type": "object",
              "x-kubernetes-preserve-unknown-fields": true
            },
            "options": {
              "description": "Options passed to the metrics provider as command line arguments",
              "items": {
                "type": "string"
              },
              "type": "array"
            },
            "tlsSecret": {
              "description": "Name of a Secret with TLS certificate, key and CA, which will be mounted at /tls into the container an can be used from webConfig",
              "type": "string"
            },
            "webConfig": {
              "description": "Name of a ConfigMap with a web.config file, if this option is provided a command line option --web.config.file is added",
              "type": "string"
            }
          },
          "required": [
            "enable",
            "image"
          ],
          "type": "object",
          "additionalProperties": false
        },
        "mycnf": {
          "description": "Custom configuration additions for my.cnf",
          "type": "string"
        },
        "podAnnotations": {
          "type": "object",
          "x-kubernetes-preserve-unknown-fields": true
        },
        "podLabels": {
          "type": "object",
          "x-kubernetes-preserve-unknown-fields": true
        },
        "podSpec": {
          "description": "Customization specification to be merged into the InnoDBCluster StatefulSet pod template. IMPORTANT: podSpec is regarded only during StatefulSet buildup and the operator neither checks the values in podSpec nor later watches for changes of this field. Thus if changes are made to this field the InnoDBCluster StatefulSet will not be updated",
          "type": "object",
          "x-kubernetes-preserve-unknown-fields": true
        },
        "readReplicas": {
          "items": {
            "properties": {
              "baseServerId": {
                "default": 0,
                "description": "Base value for MySQL server_id for instances of the readReplica, if 0 it will be assigned automatically",
                "maximum": 4294967195,
                "minimum": 0,
                "type": "integer"
              },
              "datadirVolumeClaimTemplate": {
                "description": "Template for a PersistentVolumeClaim, to be used as datadir",
                "type": "object",
                "x-kubernetes-preserve-unknown-fields": true
              },
              "instances": {
                "default": 1,
                "description": "Number of MySQL instances for the set of read replica",
                "maximum": 999,
                "minimum": 1,
                "type": "integer"
              },
              "mycnf": {
                "description": "Custom configuration additions for my.cnf",
                "type": "string"
              },
              "name": {
                "type": "string"
              },
              "podAnnotations": {
                "type": "object",
                "x-kubernetes-preserve-unknown-fields": true
              },
              "podLabels": {
                "type": "object",
                "x-kubernetes-preserve-unknown-fields": true
              },
              "podSpec": {
                "description": "Customization specification to be merged into the InnoDBCluster StatefulSet pod template. IMPORTANT: podSpec is regarded only during StatefulSet buildup and the operator neither checks the values in podSpec nor later watches for changes of this field. Thus if changes are made to this field the InnoDBCluster StatefulSet will not be updated",
                "type": "object",
                "x-kubernetes-preserve-unknown-fields": true
              },
              "version": {
                "description": "MySQL Server version",
                "pattern": "^\\d+\\.\\d+\\.\\d+(-.+)?",
                "type": "string"
              }
            },
            "required": [
              "name",
              "baseServerId"
            ],
            "type": "object",
            "additionalProperties": false
          },
          "type": "array"
        },
        "router": {
          "description": "MySQL Router specification",
          "properties": {
            "bootstrapOptions": {
              "description": "Command line options passed to MySQL Router while bootstrapping",
              "items": {
                "type": "string"
              },
              "type": "array"
            },
            "instances": {
              "default": 1,
              "description": "Number of MySQL Router instances to deploy",
              "minimum": 0,
              "type": "integer"
            },
            "options": {
              "description": "Command line options passed to MySQL Router while running",
              "items": {
                "type": "string"
              },
              "type": "array"
            },
            "podAnnotations": {
              "type": "object",
              "x-kubernetes-preserve-unknown-fields": true
            },
            "podLabels": {
              "type": "object",
              "x-kubernetes-preserve-unknown-fields": true
            },
            "podSpec": {
              "description": "Customization specification to be merged into the Router Deployment pod template. IMPORTANT: podSpec is regarded only during Deployment buildup and the operator neither checks the values in podSpec nor later watches for changes of this field. Thus if changes are made to this field the Router Deployment will not be updated",
              "type": "object",
              "x-kubernetes-preserve-unknown-fields": true
            },
            "routingOptions": {
              "description": "Set routing options for the cluster",
              "properties": {
                "invalidated_cluster_policy": {
                  "enum": [
                    "drop_all",
                    "accept_ro"
                  ],
                  "type": "string"
                },
                "read_only_targets": {
                  "enum": [
                    "all",
                    "read_replicas",
                    "secondaries"
                  ],
                  "type": "string"
                },
                "stats_updates_frequency": {
                  "default": 0,
                  "minimum": 0,
                  "type": "integer"
                }
              },
              "type": "object",
              "additionalProperties": false
            },
            "tlsSecretName": {
              "description": "Name of a TLS type Secret containing MySQL Router certificate and private key used for SSL",
              "type": "string"
            },
            "version": {
              "description": "Override MySQL Router version",
              "pattern": "^\\d+\\.\\d+\\.\\d+(-.+)?",
              "type": "string"
            }
          },
          "type": "object",
          "additionalProperties": false
        },
        "secretName": {
          "description": "Name of a generic type Secret containing root/default account password",
          "type": "string"
        },
        "service": {
          "description": "Configuration of the Service used by applications connecting to the InnoDB Cluster",
          "properties": {
            "annotations": {
              "description": "Custom annotations for the Service",
              "type": "object",
              "x-kubernetes-preserve-unknown-fields": true
            },
            "defaultPort": {
              "default": "mysql-rw",
              "description": "Target for the Service's default (3306) port. If mysql-rw traffic will go to the primary and allow read and write operations, with mysql-ro traffic goes to the replica and allows only read operations, with mysql-rw-split the router's read-write-splitting will be targeted",
              "enum": [
                "mysql-rw",
                "mysql-ro",
                "mysql-rw-split"
              ],
              "type": "string"
            },
            "labels": {
              "description": "Custom labels for the Service",
              "type": "object",
              "x-kubernetes-preserve-unknown-fields": true
            },
            "type": {
              "default": "ClusterIP",
              "enum": [
                "ClusterIP",
                "NodePort",
                "LoadBalancer"
              ],
              "type": "string"
            }
          },
          "type": "object",
          "additionalProperties": false
        },
        "serviceAccountName": {
          "type": "string"
        },
        "serviceFqdnTemplate": {
          "description": "Template for a FQDN resolving to the cluster's headless instance Service and individual Pods",
          "type": "string"
        },
        "tlsCASecretName": {
          "description": "Name of a generic type Secret containing CA (ca.pem) and optional CRL (crl.pem) for SSL",
          "type": "string"
        },
        "tlsSecretName": {
          "description": "Name of a TLS type Secret containing Server certificate and private key for SSL",
          "type": "string"
        },
        "tlsUseSelfSigned": {
          "default": false,
          "description": "Enables use of self-signed TLS certificates, reducing or disabling TLS based security verifications",
          "type": "boolean"
        },
        "version": {
          "description": "MySQL Server version",
          "pattern": "^\\d+\\.\\d+\\.\\d+(-.+)?",
          "type": "string"
        }
      },
      "required": [
        "secretName"
      ],
      "type": "object",
      "additionalProperties": false
    },
    "status": {
      "type": "object",
      "x-kubernetes-preserve-unknown-fields": true
    }
  },
  "required": [
    "spec"
  ],
  "type": "object"
}
