{
  "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",
        "null"
      ]
    },
    "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",
        "null"
      ]
    },
    "metadata": {
      "type": [
        "object",
        "null"
      ]
    },
    "spec": {
      "additionalProperties": false,
      "properties": {
        "additionalMongodConfig": {
          "description": "AdditionalMongodConfig is additional configuration that can be passed to\neach data-bearing mongod at runtime. Uses the same structure as the mongod\nconfiguration file:\nhttps://docs.mongodb.com/manual/reference/configuration-options/",
          "type": [
            "object",
            "null"
          ],
          "x-kubernetes-preserve-unknown-fields": true
        },
        "agent": {
          "additionalProperties": false,
          "properties": {
            "backupAgent": {
              "additionalProperties": false,
              "properties": {
                "logRotate": {
                  "additionalProperties": false,
                  "description": "LogRotate configures log rotation for the BackupAgent processes",
                  "properties": {
                    "sizeThresholdMB": {
                      "description": "Maximum size for an individual log file before rotation.\nOM only supports ints",
                      "type": [
                        "integer",
                        "null"
                      ]
                    },
                    "timeThresholdHrs": {
                      "description": "Number of hours after which this MongoDB Agent rotates the log file.",
                      "type": [
                        "integer",
                        "null"
                      ]
                    }
                  },
                  "type": [
                    "object",
                    "null"
                  ]
                }
              },
              "type": [
                "object",
                "null"
              ]
            },
            "logLevel": {
              "type": [
                "string",
                "null"
              ]
            },
            "logRotate": {
              "additionalProperties": false,
              "description": "DEPRECATED please use mongod.logRotate",
              "properties": {
                "includeAuditLogsWithMongoDBLogs": {
                  "description": "set to 'true' to have the Automation Agent rotate the audit files along\nwith mongodb log files",
                  "type": [
                    "boolean",
                    "null"
                  ]
                },
                "numTotal": {
                  "description": "maximum number of log files to have total",
                  "type": [
                    "integer",
                    "null"
                  ]
                },
                "numUncompressed": {
                  "description": "maximum number of log files to leave uncompressed",
                  "type": [
                    "integer",
                    "null"
                  ]
                },
                "percentOfDiskspace": {
                  "description": "Maximum percentage of the total disk space these log files should take up.\nThe string needs to be able to be converted to float64",
                  "type": [
                    "string",
                    "null"
                  ]
                },
                "sizeThresholdMB": {
                  "description": "Maximum size for an individual log file before rotation.\nThe string needs to be able to be converted to float64.\nFractional values of MB are supported.",
                  "type": "string"
                },
                "timeThresholdHrs": {
                  "description": "maximum hours for an individual log file before rotation",
                  "type": "integer"
                }
              },
              "required": [
                "sizeThresholdMB",
                "timeThresholdHrs"
              ],
              "type": [
                "object",
                "null"
              ]
            },
            "maxLogFileDurationHours": {
              "type": [
                "integer",
                "null"
              ]
            },
            "mongod": {
              "additionalProperties": false,
              "description": "AgentLoggingMongodConfig contain settings for the mongodb processes configured by the agent",
              "properties": {
                "auditlogRotate": {
                  "additionalProperties": false,
                  "description": "LogRotate configures audit log rotation for the mongodb processes",
                  "properties": {
                    "includeAuditLogsWithMongoDBLogs": {
                      "description": "set to 'true' to have the Automation Agent rotate the audit files along\nwith mongodb log files",
                      "type": [
                        "boolean",
                        "null"
                      ]
                    },
                    "numTotal": {
                      "description": "maximum number of log files to have total",
                      "type": [
                        "integer",
                        "null"
                      ]
                    },
                    "numUncompressed": {
                      "description": "maximum number of log files to leave uncompressed",
                      "type": [
                        "integer",
                        "null"
                      ]
                    },
                    "percentOfDiskspace": {
                      "description": "Maximum percentage of the total disk space these log files should take up.\nThe string needs to be able to be converted to float64",
                      "type": [
                        "string",
                        "null"
                      ]
                    },
                    "sizeThresholdMB": {
                      "description": "Maximum size for an individual log file before rotation.\nThe string needs to be able to be converted to float64.\nFractional values of MB are supported.",
                      "type": "string"
                    },
                    "timeThresholdHrs": {
                      "description": "maximum hours for an individual log file before rotation",
                      "type": "integer"
                    }
                  },
                  "required": [
                    "sizeThresholdMB",
                    "timeThresholdHrs"
                  ],
                  "type": [
                    "object",
                    "null"
                  ]
                },
                "logRotate": {
                  "additionalProperties": false,
                  "description": "LogRotate configures log rotation for the mongodb processes",
                  "properties": {
                    "includeAuditLogsWithMongoDBLogs": {
                      "description": "set to 'true' to have the Automation Agent rotate the audit files along\nwith mongodb log files",
                      "type": [
                        "boolean",
                        "null"
                      ]
                    },
                    "numTotal": {
                      "description": "maximum number of log files to have total",
                      "type": [
                        "integer",
                        "null"
                      ]
                    },
                    "numUncompressed": {
                      "description": "maximum number of log files to leave uncompressed",
                      "type": [
                        "integer",
                        "null"
                      ]
                    },
                    "percentOfDiskspace": {
                      "description": "Maximum percentage of the total disk space these log files should take up.\nThe string needs to be able to be converted to float64",
                      "type": [
                        "string",
                        "null"
                      ]
                    },
                    "sizeThresholdMB": {
                      "description": "Maximum size for an individual log file before rotation.\nThe string needs to be able to be converted to float64.\nFractional values of MB are supported.",
                      "type": "string"
                    },
                    "timeThresholdHrs": {
                      "description": "maximum hours for an individual log file before rotation",
                      "type": "integer"
                    }
                  },
                  "required": [
                    "sizeThresholdMB",
                    "timeThresholdHrs"
                  ],
                  "type": [
                    "object",
                    "null"
                  ]
                },
                "systemLog": {
                  "additionalProperties": false,
                  "description": "SystemLog configures system log of mongod",
                  "properties": {
                    "destination": {
                      "type": "string"
                    },
                    "logAppend": {
                      "type": "boolean"
                    },
                    "path": {
                      "type": "string"
                    }
                  },
                  "required": [
                    "destination",
                    "logAppend",
                    "path"
                  ],
                  "type": [
                    "object",
                    "null"
                  ]
                }
              },
              "type": [
                "object",
                "null"
              ]
            },
            "monitoringAgent": {
              "additionalProperties": false,
              "properties": {
                "logRotate": {
                  "additionalProperties": false,
                  "description": "LogRotate configures log rotation for the BackupAgent processes",
                  "properties": {
                    "sizeThresholdMB": {
                      "description": "Maximum size for an individual log file before rotation.\nOM only supports ints",
                      "type": [
                        "integer",
                        "null"
                      ]
                    },
                    "timeThresholdHrs": {
                      "description": "Number of hours after which this MongoDB Agent rotates the log file.",
                      "type": [
                        "integer",
                        "null"
                      ]
                    }
                  },
                  "type": [
                    "object",
                    "null"
                  ]
                }
              },
              "type": [
                "object",
                "null"
              ]
            },
            "readinessProbe": {
              "additionalProperties": false,
              "properties": {
                "environmentVariables": {
                  "additionalProperties": {
                    "type": "string"
                  },
                  "type": [
                    "object",
                    "null"
                  ]
                }
              },
              "type": [
                "object",
                "null"
              ]
            },
            "startupOptions": {
              "additionalProperties": {
                "type": "string"
              },
              "description": "StartupParameters can be used to configure the startup parameters with which the agent starts. That also contains\nlog rotation settings as defined here:",
              "type": [
                "object",
                "null"
              ]
            },
            "systemLog": {
              "additionalProperties": false,
              "description": "DEPRECATED please use mongod.systemLog",
              "properties": {
                "destination": {
                  "type": "string"
                },
                "logAppend": {
                  "type": "boolean"
                },
                "path": {
                  "type": "string"
                }
              },
              "required": [
                "destination",
                "logAppend",
                "path"
              ],
              "type": [
                "object",
                "null"
              ]
            }
          },
          "type": [
            "object",
            "null"
          ]
        },
        "backup": {
          "additionalProperties": false,
          "description": "Backup contains configuration options for configuring\nbackup for this MongoDB resource",
          "properties": {
            "assignmentLabels": {
              "description": "Assignment Labels set in the Ops Manager",
              "items": {
                "type": "string"
              },
              "type": [
                "array",
                "null"
              ]
            },
            "autoTerminateOnDeletion": {
              "description": "AutoTerminateOnDeletion indicates if the Operator should stop and terminate the Backup before the cleanup,\nwhen the MongoDB CR is deleted",
              "type": [
                "boolean",
                "null"
              ]
            },
            "encryption": {
              "additionalProperties": false,
              "description": "Encryption settings",
              "properties": {
                "kmip": {
                  "additionalProperties": false,
                  "description": "Kmip corresponds to the KMIP configuration assigned to the Ops Manager Project's configuration.",
                  "properties": {
                    "client": {
                      "additionalProperties": false,
                      "description": "KMIP Client configuration",
                      "properties": {
                        "clientCertificatePrefix": {
                          "description": "A prefix used to construct KMIP client certificate (and corresponding password) Secret names.\nThe names are generated using the following pattern:\nKMIP Client Certificate (TLS Secret):\n  \u003cclientCertificatePrefix\u003e-\u003cCR Name\u003e-kmip-client\nKMIP Client Certificate Password:\n  \u003cclientCertificatePrefix\u003e-\u003cCR Name\u003e-kmip-client-password\n  The expected key inside is called \"password\".",
                          "type": [
                            "string",
                            "null"
                          ]
                        }
                      },
                      "type": "object"
                    }
                  },
                  "required": [
                    "client"
                  ],
                  "type": [
                    "object",
                    "null"
                  ]
                }
              },
              "type": [
                "object",
                "null"
              ]
            },
            "mode": {
              "enum": [
                "enabled",
                "disabled",
                "terminated"
              ],
              "type": [
                "string",
                "null"
              ]
            },
            "snapshotSchedule": {
              "additionalProperties": false,
              "properties": {
                "clusterCheckpointIntervalMin": {
                  "enum": [
                    15,
                    30,
                    60
                  ],
                  "type": [
                    "integer",
                    "null"
                  ]
                },
                "dailySnapshotRetentionDays": {
                  "description": "Number of days to retain daily snapshots. Setting 0 will disable this rule.",
                  "maximum": 365,
                  "minimum": 0,
                  "type": [
                    "integer",
                    "null"
                  ]
                },
                "fullIncrementalDayOfWeek": {
                  "description": "Day of the week when Ops Manager takes a full snapshot. This ensures a recent complete backup. Ops Manager sets the default value to SUNDAY.",
                  "enum": [
                    "SUNDAY",
                    "MONDAY",
                    "TUESDAY",
                    "WEDNESDAY",
                    "THURSDAY",
                    "FRIDAY",
                    "SATURDAY"
                  ],
                  "type": [
                    "string",
                    "null"
                  ]
                },
                "monthlySnapshotRetentionMonths": {
                  "description": "Number of months to retain weekly snapshots. Setting 0 will disable this rule.",
                  "maximum": 36,
                  "minimum": 0,
                  "type": [
                    "integer",
                    "null"
                  ]
                },
                "pointInTimeWindowHours": {
                  "description": "Number of hours in the past for which a point-in-time snapshot can be created.",
                  "enum": [
                    1,
                    2,
                    3,
                    4,
                    5,
                    6,
                    7,
                    15,
                    30,
                    60,
                    90,
                    120,
                    180,
                    360
                  ],
                  "type": [
                    "integer",
                    "null"
                  ]
                },
                "referenceHourOfDay": {
                  "description": "Hour of the day to schedule snapshots using a 24-hour clock, in UTC.",
                  "maximum": 23,
                  "minimum": 0,
                  "type": [
                    "integer",
                    "null"
                  ]
                },
                "referenceMinuteOfHour": {
                  "description": "Minute of the hour to schedule snapshots, in UTC.",
                  "maximum": 59,
                  "minimum": 0,
                  "type": [
                    "integer",
                    "null"
                  ]
                },
                "snapshotIntervalHours": {
                  "description": "Number of hours between snapshots.",
                  "enum": [
                    6,
                    8,
                    12,
                    24
                  ],
                  "type": [
                    "integer",
                    "null"
                  ]
                },
                "snapshotRetentionDays": {
                  "description": "Number of days to keep recent snapshots.",
                  "maximum": 365,
                  "minimum": 1,
                  "type": [
                    "integer",
                    "null"
                  ]
                },
                "weeklySnapshotRetentionWeeks": {
                  "description": "Number of weeks to retain weekly snapshots. Setting 0 will disable this rule",
                  "maximum": 365,
                  "minimum": 0,
                  "type": [
                    "integer",
                    "null"
                  ]
                }
              },
              "type": [
                "object",
                "null"
              ]
            }
          },
          "type": [
            "object",
            "null"
          ]
        },
        "cloudManager": {
          "additionalProperties": false,
          "properties": {
            "configMapRef": {
              "additionalProperties": false,
              "properties": {
                "name": {
                  "type": [
                    "string",
                    "null"
                  ]
                }
              },
              "type": [
                "object",
                "null"
              ]
            }
          },
          "type": [
            "object",
            "null"
          ]
        },
        "clusterDomain": {
          "format": "hostname",
          "type": [
            "string",
            "null"
          ]
        },
        "clusterSpecList": {
          "items": {
            "additionalProperties": false,
            "description": "ClusterSpecItem is the mongodb multi-cluster spec that is specific to a\nparticular Kubernetes cluster, this maps to the statefulset created in each cluster",
            "properties": {
              "clusterName": {
                "description": "ClusterName is name of the cluster where the MongoDB Statefulset will be scheduled, the\nname should have a one on one mapping with the service-account created in the central cluster\nto talk to the workload clusters.",
                "type": [
                  "string",
                  "null"
                ]
              },
              "externalAccess": {
                "additionalProperties": false,
                "description": "ExternalAccessConfiguration provides external access configuration for Multi-Cluster.",
                "properties": {
                  "externalDomain": {
                    "description": "An external domain that is used for exposing MongoDB to the outside world.",
                    "type": [
                      "string",
                      "null"
                    ]
                  },
                  "externalService": {
                    "additionalProperties": false,
                    "description": "Provides a way to override the default (NodePort) Service",
                    "properties": {
                      "annotations": {
                        "additionalProperties": {
                          "type": "string"
                        },
                        "description": "A map of annotations that shall be added to the externally available Service.",
                        "type": [
                          "object",
                          "null"
                        ]
                      },
                      "spec": {
                        "description": "A wrapper for the Service spec object.",
                        "type": [
                          "object",
                          "null"
                        ],
                        "x-kubernetes-preserve-unknown-fields": true
                      }
                    },
                    "type": [
                      "object",
                      "null"
                    ]
                  }
                },
                "type": [
                  "object",
                  "null"
                ]
              },
              "memberConfig": {
                "description": "MemberConfig allows to specify votes, priorities and tags for each of the mongodb process.",
                "items": {
                  "additionalProperties": false,
                  "properties": {
                    "priority": {
                      "type": [
                        "string",
                        "null"
                      ]
                    },
                    "tags": {
                      "additionalProperties": {
                        "type": "string"
                      },
                      "type": [
                        "object",
                        "null"
                      ]
                    },
                    "votes": {
                      "type": [
                        "integer",
                        "null"
                      ]
                    }
                  },
                  "type": "object"
                },
                "type": [
                  "array",
                  "null"
                ]
              },
              "members": {
                "description": "Amount of members for this MongoDB Replica Set",
                "type": "integer"
              },
              "podSpec": {
                "additionalProperties": false,
                "properties": {
                  "persistence": {
                    "additionalProperties": false,
                    "description": "Note, that this field is used by MongoDB resources only, let's keep it here for simplicity",
                    "properties": {
                      "multiple": {
                        "additionalProperties": false,
                        "properties": {
                          "data": {
                            "additionalProperties": false,
                            "properties": {
                              "labelSelector": {
                                "type": [
                                  "object",
                                  "null"
                                ],
                                "x-kubernetes-preserve-unknown-fields": true
                              },
                              "storage": {
                                "type": [
                                  "string",
                                  "null"
                                ]
                              },
                              "storageClass": {
                                "type": [
                                  "string",
                                  "null"
                                ]
                              }
                            },
                            "type": [
                              "object",
                              "null"
                            ]
                          },
                          "journal": {
                            "additionalProperties": false,
                            "properties": {
                              "labelSelector": {
                                "type": [
                                  "object",
                                  "null"
                                ],
                                "x-kubernetes-preserve-unknown-fields": true
                              },
                              "storage": {
                                "type": [
                                  "string",
                                  "null"
                                ]
                              },
                              "storageClass": {
                                "type": [
                                  "string",
                                  "null"
                                ]
                              }
                            },
                            "type": [
                              "object",
                              "null"
                            ]
                          },
                          "logs": {
                            "additionalProperties": false,
                            "properties": {
                              "labelSelector": {
                                "type": [
                                  "object",
                                  "null"
                                ],
                                "x-kubernetes-preserve-unknown-fields": true
                              },
                              "storage": {
                                "type": [
                                  "string",
                                  "null"
                                ]
                              },
                              "storageClass": {
                                "type": [
                                  "string",
                                  "null"
                                ]
                              }
                            },
                            "type": [
                              "object",
                              "null"
                            ]
                          }
                        },
                        "type": [
                          "object",
                          "null"
                        ]
                      },
                      "single": {
                        "additionalProperties": false,
                        "properties": {
                          "labelSelector": {
                            "type": [
                              "object",
                              "null"
                            ],
                            "x-kubernetes-preserve-unknown-fields": true
                          },
                          "storage": {
                            "type": [
                              "string",
                              "null"
                            ]
                          },
                          "storageClass": {
                            "type": [
                              "string",
                              "null"
                            ]
                          }
                        },
                        "type": [
                          "object",
                          "null"
                        ]
                      }
                    },
                    "type": [
                      "object",
                      "null"
                    ]
                  },
                  "podTemplate": {
                    "type": [
                      "object",
                      "null"
                    ],
                    "x-kubernetes-preserve-unknown-fields": true
                  }
                },
                "type": [
                  "object",
                  "null"
                ]
              },
              "service": {
                "description": "this is an optional service, it will get the name \"\u003crsName\u003e-service\" in case not provided",
                "type": [
                  "string",
                  "null"
                ]
              },
              "statefulSet": {
                "additionalProperties": false,
                "description": "StatefulSetConfiguration holds the optional custom StatefulSet\nthat should be merged into the operator created one.",
                "properties": {
                  "metadata": {
                    "additionalProperties": false,
                    "description": "StatefulSetMetadataWrapper is a wrapper around Labels and Annotations",
                    "properties": {
                      "annotations": {
                        "additionalProperties": {
                          "type": "string"
                        },
                        "type": [
                          "object",
                          "null"
                        ]
                      },
                      "labels": {
                        "additionalProperties": {
                          "type": "string"
                        },
                        "type": [
                          "object",
                          "null"
                        ]
                      }
                    },
                    "type": [
                      "object",
                      "null"
                    ]
                  },
                  "spec": {
                    "type": "object",
                    "x-kubernetes-preserve-unknown-fields": true
                  }
                },
                "required": [
                  "spec"
                ],
                "type": [
                  "object",
                  "null"
                ]
              }
            },
            "required": [
              "members"
            ],
            "type": "object"
          },
          "type": [
            "array",
            "null"
          ]
        },
        "connectivity": {
          "additionalProperties": false,
          "properties": {
            "replicaSetHorizons": {
              "description": "ReplicaSetHorizons holds list of maps of horizons to be configured in each of MongoDB processes.\nHorizons map horizon names to the node addresses for each process in the replicaset, e.g.:\n [\n   {\n     \"internal\": \"my-rs-0.my-internal-domain.com:31843\",\n     \"external\": \"my-rs-0.my-external-domain.com:21467\"\n   },\n   {\n     \"internal\": \"my-rs-1.my-internal-domain.com:31843\",\n     \"external\": \"my-rs-1.my-external-domain.com:21467\"\n   },\n   ...\n ]\nThe key of each item in the map is an arbitrary, user-chosen string that\nrepresents the name of the horizon. The value of the item is the host and,\noptionally, the port that this mongod node will be connected to from.",
              "items": {
                "additionalProperties": {
                  "type": "string"
                },
                "type": "object"
              },
              "type": [
                "array",
                "null"
              ]
            }
          },
          "type": [
            "object",
            "null"
          ]
        },
        "credentials": {
          "description": "Name of the Secret holding credentials information",
          "type": "string"
        },
        "duplicateServiceObjects": {
          "description": "In few service mesh options for ex: Istio, by default we would need to duplicate the\nservice objects created per pod in all the clusters to enable DNS resolution. Users can\nhowever configure their ServiceMesh with DNS proxy(https://istio.io/latest/docs/ops/configuration/traffic-management/dns-proxy/)\nenabled in which case the operator doesn't need to create the service objects per cluster. This options tells the operator\nwhether it should create the service objects in all the clusters or not. By default, if not specified the operator would create the duplicate svc objects.",
          "type": [
            "boolean",
            "null"
          ]
        },
        "externalAccess": {
          "additionalProperties": false,
          "description": "ExternalAccessConfiguration provides external access configuration.",
          "properties": {
            "externalDomain": {
              "description": "An external domain that is used for exposing MongoDB to the outside world.",
              "type": [
                "string",
                "null"
              ]
            },
            "externalService": {
              "additionalProperties": false,
              "description": "Provides a way to override the default (NodePort) Service",
              "properties": {
                "annotations": {
                  "additionalProperties": {
                    "type": "string"
                  },
                  "description": "A map of annotations that shall be added to the externally available Service.",
                  "type": [
                    "object",
                    "null"
                  ]
                },
                "spec": {
                  "description": "A wrapper for the Service spec object.",
                  "type": [
                    "object",
                    "null"
                  ],
                  "x-kubernetes-preserve-unknown-fields": true
                }
              },
              "type": [
                "object",
                "null"
              ]
            }
          },
          "type": [
            "object",
            "null"
          ]
        },
        "featureCompatibilityVersion": {
          "type": [
            "string",
            "null"
          ]
        },
        "logLevel": {
          "enum": [
            "DEBUG",
            "INFO",
            "WARN",
            "ERROR",
            "FATAL"
          ],
          "type": [
            "string",
            "null"
          ]
        },
        "opsManager": {
          "additionalProperties": false,
          "properties": {
            "configMapRef": {
              "additionalProperties": false,
              "properties": {
                "name": {
                  "type": [
                    "string",
                    "null"
                  ]
                }
              },
              "type": [
                "object",
                "null"
              ]
            }
          },
          "type": [
            "object",
            "null"
          ]
        },
        "persistent": {
          "type": [
            "boolean",
            "null"
          ]
        },
        "prometheus": {
          "additionalProperties": false,
          "description": "Prometheus configurations.",
          "properties": {
            "metricsPath": {
              "description": "Indicates path to the metrics endpoint.",
              "pattern": "^\\/[a-z0-9]+$",
              "type": [
                "string",
                "null"
              ]
            },
            "passwordSecretRef": {
              "additionalProperties": false,
              "description": "Name of a Secret containing a HTTP Basic Auth Password.",
              "properties": {
                "key": {
                  "description": "Key is the key in the secret storing this password. Defaults to \"password\"",
                  "type": [
                    "string",
                    "null"
                  ]
                },
                "name": {
                  "description": "Name is the name of the secret storing this user's password",
                  "type": "string"
                }
              },
              "required": [
                "name"
              ],
              "type": "object"
            },
            "port": {
              "description": "Port where metrics endpoint will bind to. Defaults to 9216.",
              "type": [
                "integer",
                "null"
              ]
            },
            "tlsSecretKeyRef": {
              "additionalProperties": false,
              "description": "Name of a Secret (type kubernetes.io/tls) holding the certificates to use in the\nPrometheus endpoint.",
              "properties": {
                "key": {
                  "description": "Key is the key in the secret storing this password. Defaults to \"password\"",
                  "type": [
                    "string",
                    "null"
                  ]
                },
                "name": {
                  "description": "Name is the name of the secret storing this user's password",
                  "type": "string"
                }
              },
              "required": [
                "name"
              ],
              "type": [
                "object",
                "null"
              ]
            },
            "username": {
              "description": "HTTP Basic Auth Username for metrics endpoint.",
              "type": "string"
            }
          },
          "required": [
            "passwordSecretRef",
            "username"
          ],
          "type": [
            "object",
            "null"
          ]
        },
        "security": {
          "additionalProperties": false,
          "properties": {
            "authentication": {
              "additionalProperties": false,
              "description": "Authentication holds various authentication related settings that affect\nthis MongoDB resource.",
              "properties": {
                "agents": {
                  "additionalProperties": false,
                  "description": "Agents contains authentication configuration properties for the agents",
                  "properties": {
                    "automationLdapGroupDN": {
                      "type": [
                        "string",
                        "null"
                      ]
                    },
                    "automationPasswordSecretRef": {
                      "additionalProperties": false,
                      "description": "SecretKeySelector selects a key of a Secret.",
                      "properties": {
                        "key": {
                          "description": "The key of the secret to select from.  Must be a valid secret key.",
                          "type": "string"
                        },
                        "name": {
                          "default": "",
                          "description": "Name of the referent.\nThis field is effectively required, but due to backwards compatibility is\nallowed to be empty. Instances of this type with an empty value here are\nalmost certainly wrong.\nMore info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names",
                          "type": [
                            "string",
                            "null"
                          ]
                        },
                        "optional": {
                          "description": "Specify whether the Secret or its key must be defined",
                          "type": [
                            "boolean",
                            "null"
                          ]
                        }
                      },
                      "required": [
                        "key"
                      ],
                      "type": [
                        "object",
                        "null"
                      ],
                      "x-kubernetes-map-type": "atomic"
                    },
                    "automationUserName": {
                      "type": [
                        "string",
                        "null"
                      ]
                    },
                    "clientCertificateSecretRef": {
                      "type": [
                        "object",
                        "null"
                      ],
                      "x-kubernetes-preserve-unknown-fields": true
                    },
                    "mode": {
                      "description": "Mode is the desired Authentication mode that the agents will use",
                      "type": "string"
                    }
                  },
                  "required": [
                    "mode"
                  ],
                  "type": [
                    "object",
                    "null"
                  ]
                },
                "enabled": {
                  "type": "boolean"
                },
                "ignoreUnknownUsers": {
                  "description": "IgnoreUnknownUsers maps to the inverse of auth.authoritativeSet",
                  "type": [
                    "boolean",
                    "null"
                  ]
                },
                "internalCluster": {
                  "type": [
                    "string",
                    "null"
                  ]
                },
                "ldap": {
                  "additionalProperties": false,
                  "description": "LDAP Configuration",
                  "properties": {
                    "authzQueryTemplate": {
                      "type": [
                        "string",
                        "null"
                      ]
                    },
                    "bindQueryPasswordSecretRef": {
                      "additionalProperties": false,
                      "properties": {
                        "name": {
                          "type": "string"
                        }
                      },
                      "required": [
                        "name"
                      ],
                      "type": [
                        "object",
                        "null"
                      ]
                    },
                    "bindQueryUser": {
                      "type": [
                        "string",
                        "null"
                      ]
                    },
                    "caConfigMapRef": {
                      "additionalProperties": false,
                      "description": "Allows to point at a ConfigMap/key with a CA file to mount on the Pod",
                      "properties": {
                        "key": {
                          "description": "The key to select.",
                          "type": "string"
                        },
                        "name": {
                          "default": "",
                          "description": "Name of the referent.\nThis field is effectively required, but due to backwards compatibility is\nallowed to be empty. Instances of this type with an empty value here are\nalmost certainly wrong.\nMore info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names",
                          "type": [
                            "string",
                            "null"
                          ]
                        },
                        "optional": {
                          "description": "Specify whether the ConfigMap or its key must be defined",
                          "type": [
                            "boolean",
                            "null"
                          ]
                        }
                      },
                      "required": [
                        "key"
                      ],
                      "type": [
                        "object",
                        "null"
                      ],
                      "x-kubernetes-map-type": "atomic"
                    },
                    "servers": {
                      "items": {
                        "type": "string"
                      },
                      "type": [
                        "array",
                        "null"
                      ]
                    },
                    "timeoutMS": {
                      "type": [
                        "integer",
                        "null"
                      ]
                    },
                    "transportSecurity": {
                      "enum": [
                        "tls",
                        "none"
                      ],
                      "type": [
                        "string",
                        "null"
                      ]
                    },
                    "userCacheInvalidationInterval": {
                      "type": [
                        "integer",
                        "null"
                      ]
                    },
                    "userToDNMapping": {
                      "type": [
                        "string",
                        "null"
                      ]
                    },
                    "validateLDAPServerConfig": {
                      "type": [
                        "boolean",
                        "null"
                      ]
                    }
                  },
                  "type": [
                    "object",
                    "null"
                  ]
                },
                "modes": {
                  "items": {
                    "enum": [
                      "X509",
                      "SCRAM",
                      "SCRAM-SHA-1",
                      "MONGODB-CR",
                      "SCRAM-SHA-256",
                      "LDAP",
                      "OIDC"
                    ],
                    "type": "string"
                  },
                  "type": [
                    "array",
                    "null"
                  ]
                },
                "oidcProviderConfigs": {
                  "description": "Configuration for OIDC providers",
                  "items": {
                    "additionalProperties": false,
                    "properties": {
                      "audience": {
                        "description": "Entity that your external identity provider intends the token for.\nEnter the audience value from the app you registered with external Identity Provider.",
                        "type": "string"
                      },
                      "authorizationMethod": {
                        "description": "Configure single-sign-on for human user access to deployments with Workforce Identity Federation.\nFor programmatic, application access to deployments use Workload Identity Federation.\nOnly one Workforce Identity Federation IdP can be configured per MongoDB resource",
                        "enum": [
                          "WorkforceIdentityFederation",
                          "WorkloadIdentityFederation"
                        ],
                        "type": "string"
                      },
                      "authorizationType": {
                        "description": "Select GroupMembership to grant authorization based on IdP user group membership, or select UserID to grant\nan individual user authorization.",
                        "enum": [
                          "GroupMembership",
                          "UserID"
                        ],
                        "type": "string"
                      },
                      "clientId": {
                        "description": "Unique identifier for your registered application. Enter the clientId value from the app you\nregistered with an external Identity Provider.\nRequired when selected Workforce Identity Federation authorization method",
                        "type": [
                          "string",
                          "null"
                        ]
                      },
                      "configurationName": {
                        "description": "Unique label that identifies this configuration. It is case-sensitive and can only contain the following characters:\n - alphanumeric characters (combination of a to z and 0 to 9)\n - hyphens (-)\n - underscores (_)",
                        "pattern": "^[a-zA-Z0-9-_]+$",
                        "type": "string"
                      },
                      "groupsClaim": {
                        "description": "The identifier of the claim that includes the principal's IdP user group membership information.\nRequired when selected GroupMembership as the authorization type, ignored otherwise",
                        "type": [
                          "string",
                          "null"
                        ]
                      },
                      "issuerURI": {
                        "description": "Issuer value provided by your registered IdP application. Using this URI, MongoDB finds an OpenID Connect Provider\nConfiguration Document, which should be available in the /.wellknown/open-id-configuration endpoint.\nFor MongoDB 8.0+, the combination of issuerURI and audience must be unique across OIDC provider configurations.\nFor other MongoDB versions, the issuerURI itself must be unique.",
                        "type": "string"
                      },
                      "requestedScopes": {
                        "description": "Tokens that give users permission to request data from the authorization endpoint.\nOnly used for Workforce Identity Federation authorization method",
                        "items": {
                          "type": "string"
                        },
                        "type": [
                          "array",
                          "null"
                        ]
                      },
                      "userClaim": {
                        "default": "sub",
                        "description": "The identifier of the claim that includes the user principal identity.\nAccept the default value unless your IdP uses a different claim.",
                        "type": "string"
                      }
                    },
                    "required": [
                      "audience",
                      "authorizationMethod",
                      "authorizationType",
                      "configurationName",
                      "issuerURI",
                      "userClaim"
                    ],
                    "type": "object"
                  },
                  "type": [
                    "array",
                    "null"
                  ]
                },
                "requireClientTLSAuthentication": {
                  "description": "Clients should present valid TLS certificates",
                  "type": [
                    "boolean",
                    "null"
                  ]
                }
              },
              "required": [
                "enabled"
              ],
              "type": [
                "object",
                "null"
              ]
            },
            "certsSecretPrefix": {
              "type": [
                "string",
                "null"
              ]
            },
            "roleRefs": {
              "items": {
                "additionalProperties": false,
                "properties": {
                  "kind": {
                    "enum": [
                      "ClusterMongoDBRole"
                    ],
                    "type": "string"
                  },
                  "name": {
                    "type": "string"
                  }
                },
                "required": [
                  "kind",
                  "name"
                ],
                "type": "object"
              },
              "type": [
                "array",
                "null"
              ]
            },
            "roles": {
              "items": {
                "additionalProperties": false,
                "properties": {
                  "authenticationRestrictions": {
                    "items": {
                      "additionalProperties": false,
                      "properties": {
                        "clientSource": {
                          "items": {
                            "type": "string"
                          },
                          "type": [
                            "array",
                            "null"
                          ]
                        },
                        "serverAddress": {
                          "items": {
                            "type": "string"
                          },
                          "type": [
                            "array",
                            "null"
                          ]
                        }
                      },
                      "type": "object"
                    },
                    "type": [
                      "array",
                      "null"
                    ]
                  },
                  "db": {
                    "type": "string"
                  },
                  "privileges": {
                    "items": {
                      "additionalProperties": false,
                      "properties": {
                        "actions": {
                          "items": {
                            "type": "string"
                          },
                          "type": "array"
                        },
                        "resource": {
                          "additionalProperties": false,
                          "properties": {
                            "cluster": {
                              "type": [
                                "boolean",
                                "null"
                              ]
                            },
                            "collection": {
                              "type": [
                                "string",
                                "null"
                              ]
                            },
                            "db": {
                              "type": [
                                "string",
                                "null"
                              ]
                            }
                          },
                          "type": "object"
                        }
                      },
                      "required": [
                        "actions",
                        "resource"
                      ],
                      "type": "object"
                    },
                    "type": [
                      "array",
                      "null"
                    ]
                  },
                  "role": {
                    "type": "string"
                  },
                  "roles": {
                    "items": {
                      "additionalProperties": false,
                      "properties": {
                        "db": {
                          "type": "string"
                        },
                        "role": {
                          "type": "string"
                        }
                      },
                      "required": [
                        "db",
                        "role"
                      ],
                      "type": "object"
                    },
                    "type": [
                      "array",
                      "null"
                    ]
                  }
                },
                "required": [
                  "db",
                  "role"
                ],
                "type": "object"
              },
              "type": [
                "array",
                "null"
              ]
            },
            "tls": {
              "additionalProperties": false,
              "properties": {
                "additionalCertificateDomains": {
                  "items": {
                    "type": "string"
                  },
                  "type": [
                    "array",
                    "null"
                  ]
                },
                "ca": {
                  "description": "CA corresponds to a ConfigMap containing an entry for the CA certificate (ca.pem)\nused to validate the certificates created already.",
                  "type": [
                    "string",
                    "null"
                  ]
                },
                "enabled": {
                  "description": "DEPRECATED please enable TLS by setting `security.certsSecretPrefix` or `security.tls.secretRef.prefix`.\nEnables TLS for this resource. This will make the operator try to mount a\nSecret with a defined name (\u003cresource-name\u003e-cert).\nThis is only used when enabling TLS on a MongoDB resource, and not on the\nAppDB, where TLS is configured by setting `secretRef.Name`.",
                  "type": [
                    "boolean",
                    "null"
                  ]
                }
              },
              "type": [
                "object",
                "null"
              ]
            }
          },
          "type": [
            "object",
            "null"
          ],
          "x-kubernetes-validations": [
            {
              "message": "At most one of roles or roleRefs can be non-empty",
              "rule": "!(has(self.roles) \u0026\u0026 has(self.roleRefs)) || !(self.roles.size() \u003e 0 \u0026\u0026 self.roleRefs.size() \u003e 0)"
            }
          ]
        },
        "statefulSet": {
          "additionalProperties": false,
          "description": "StatefulSetConfiguration provides the statefulset override for each of the cluster's statefulset\nif \"StatefulSetConfiguration\" is specified at cluster level under \"clusterSpecList\" that takes precedence over\nthe global one",
          "properties": {
            "metadata": {
              "additionalProperties": false,
              "description": "StatefulSetMetadataWrapper is a wrapper around Labels and Annotations",
              "properties": {
                "annotations": {
                  "additionalProperties": {
                    "type": "string"
                  },
                  "type": [
                    "object",
                    "null"
                  ]
                },
                "labels": {
                  "additionalProperties": {
                    "type": "string"
                  },
                  "type": [
                    "object",
                    "null"
                  ]
                }
              },
              "type": [
                "object",
                "null"
              ]
            },
            "spec": {
              "type": "object",
              "x-kubernetes-preserve-unknown-fields": true
            }
          },
          "required": [
            "spec"
          ],
          "type": [
            "object",
            "null"
          ]
        },
        "topology": {
          "description": "Topology sets the desired cluster topology of MongoDB resources\nIt defaults (if empty or not set) to SingleCluster. If MultiCluster specified,\nthen clusterSpecList field is mandatory and at least one member cluster has to be specified.",
          "enum": [
            "SingleCluster",
            "MultiCluster"
          ],
          "type": [
            "string",
            "null"
          ]
        },
        "type": {
          "enum": [
            "Standalone",
            "ReplicaSet",
            "ShardedCluster"
          ],
          "type": "string"
        },
        "version": {
          "pattern": "^[0-9]+.[0-9]+.[0-9]+(-.+)?$|^$",
          "type": "string"
        }
      },
      "required": [
        "credentials",
        "type",
        "version"
      ],
      "type": "object",
      "x-kubernetes-preserve-unknown-fields": true
    },
    "status": {
      "additionalProperties": false,
      "properties": {
        "backup": {
          "additionalProperties": false,
          "properties": {
            "statusName": {
              "type": "string"
            }
          },
          "required": [
            "statusName"
          ],
          "type": [
            "object",
            "null"
          ]
        },
        "clusterStatusList": {
          "additionalProperties": false,
          "description": "ClusterStatusList holds a list of clusterStatuses corresponding to each cluster",
          "properties": {
            "clusterStatuses": {
              "items": {
                "additionalProperties": false,
                "description": "ClusterStatusItem is the mongodb multi-cluster spec that is specific to a\nparticular Kubernetes cluster, this maps to the statefulset created in each cluster",
                "properties": {
                  "clusterName": {
                    "description": "ClusterName is name of the cluster where the MongoDB Statefulset will be scheduled, the\nname should have a one on one mapping with the service-account created in the central cluster\nto talk to the workload clusters.",
                    "type": [
                      "string",
                      "null"
                    ]
                  },
                  "lastTransition": {
                    "type": [
                      "string",
                      "null"
                    ]
                  },
                  "members": {
                    "type": [
                      "integer",
                      "null"
                    ]
                  },
                  "message": {
                    "type": [
                      "string",
                      "null"
                    ]
                  },
                  "observedGeneration": {
                    "format": "int64",
                    "type": [
                      "integer",
                      "null"
                    ]
                  },
                  "phase": {
                    "type": "string"
                  },
                  "pvc": {
                    "items": {
                      "additionalProperties": false,
                      "properties": {
                        "phase": {
                          "type": "string"
                        },
                        "statefulsetName": {
                          "type": "string"
                        }
                      },
                      "required": [
                        "phase",
                        "statefulsetName"
                      ],
                      "type": "object"
                    },
                    "type": [
                      "array",
                      "null"
                    ]
                  },
                  "resourcesNotReady": {
                    "items": {
                      "additionalProperties": false,
                      "description": "ResourceNotReady describes the dependent resource which is not ready yet",
                      "properties": {
                        "errors": {
                          "items": {
                            "additionalProperties": false,
                            "properties": {
                              "message": {
                                "type": [
                                  "string",
                                  "null"
                                ]
                              },
                              "reason": {
                                "type": [
                                  "string",
                                  "null"
                                ]
                              }
                            },
                            "type": "object"
                          },
                          "type": [
                            "array",
                            "null"
                          ]
                        },
                        "kind": {
                          "description": "ResourceKind specifies a kind of a Kubernetes resource. Used in status of a Custom Resource",
                          "type": "string"
                        },
                        "message": {
                          "type": [
                            "string",
                            "null"
                          ]
                        },
                        "name": {
                          "type": "string"
                        }
                      },
                      "required": [
                        "kind",
                        "name"
                      ],
                      "type": "object"
                    },
                    "type": [
                      "array",
                      "null"
                    ]
                  },
                  "warnings": {
                    "items": {
                      "type": "string"
                    },
                    "type": [
                      "array",
                      "null"
                    ]
                  }
                },
                "required": [
                  "phase"
                ],
                "type": "object"
              },
              "type": [
                "array",
                "null"
              ]
            }
          },
          "type": [
            "object",
            "null"
          ]
        },
        "featureCompatibilityVersion": {
          "type": [
            "string",
            "null"
          ]
        },
        "lastTransition": {
          "type": [
            "string",
            "null"
          ]
        },
        "link": {
          "type": [
            "string",
            "null"
          ]
        },
        "message": {
          "type": [
            "string",
            "null"
          ]
        },
        "observedGeneration": {
          "format": "int64",
          "type": [
            "integer",
            "null"
          ]
        },
        "phase": {
          "type": "string"
        },
        "pvc": {
          "items": {
            "additionalProperties": false,
            "properties": {
              "phase": {
                "type": "string"
              },
              "statefulsetName": {
                "type": "string"
              }
            },
            "required": [
              "phase",
              "statefulsetName"
            ],
            "type": "object"
          },
          "type": [
            "array",
            "null"
          ]
        },
        "resourcesNotReady": {
          "items": {
            "additionalProperties": false,
            "description": "ResourceNotReady describes the dependent resource which is not ready yet",
            "properties": {
              "errors": {
                "items": {
                  "additionalProperties": false,
                  "properties": {
                    "message": {
                      "type": [
                        "string",
                        "null"
                      ]
                    },
                    "reason": {
                      "type": [
                        "string",
                        "null"
                      ]
                    }
                  },
                  "type": "object"
                },
                "type": [
                  "array",
                  "null"
                ]
              },
              "kind": {
                "description": "ResourceKind specifies a kind of a Kubernetes resource. Used in status of a Custom Resource",
                "type": "string"
              },
              "message": {
                "type": [
                  "string",
                  "null"
                ]
              },
              "name": {
                "type": "string"
              }
            },
            "required": [
              "kind",
              "name"
            ],
            "type": "object"
          },
          "type": [
            "array",
            "null"
          ]
        },
        "version": {
          "type": "string"
        },
        "warnings": {
          "items": {
            "type": "string"
          },
          "type": [
            "array",
            "null"
          ]
        }
      },
      "required": [
        "phase",
        "version"
      ],
      "type": [
        "object",
        "null"
      ]
    }
  },
  "required": [
    "spec"
  ],
  "type": "object"
}