{
  "description": "CephFilesystem represents a Ceph Filesystem",
  "properties": {
    "apiVersion": {
      "description": "APIVersion defines the versioned schema of this representation of an object.\nServers should convert recognized schemas to the latest internal value, and\nmay reject unrecognized values.\nMore info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources",
      "type": "string"
    },
    "kind": {
      "description": "Kind is a string value representing the REST resource this object represents.\nServers may infer this from the endpoint the client submits requests to.\nCannot be updated.\nIn CamelCase.\nMore info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds",
      "type": "string"
    },
    "metadata": {
      "type": "object"
    },
    "spec": {
      "description": "FilesystemSpec represents the spec of a file system",
      "properties": {
        "dataPools": {
          "description": "The data pool settings, with optional predefined pool name.",
          "items": {
            "description": "NamedPoolSpec represents the named ceph pool spec",
            "properties": {
              "application": {
                "description": "The application name to set on the pool. Only expected to be set for rgw pools.",
                "type": "string"
              },
              "compressionMode": {
                "description": "DEPRECATED: use Parameters instead, e.g., Parameters[\"compression_mode\"] = \"force\"\nThe inline compression mode in Bluestore OSD to set to (options are: none, passive, aggressive, force)\nDo NOT set a default value for kubebuilder as this will override the Parameters",
                "enum": [
                  "none",
                  "passive",
                  "aggressive",
                  "force",
                  ""
                ],
                "nullable": true,
                "type": "string"
              },
              "crushRoot": {
                "description": "The root of the crush hierarchy utilized by the pool",
                "nullable": true,
                "type": "string"
              },
              "deviceClass": {
                "description": "The device class the OSD should set to for use in the pool",
                "nullable": true,
                "type": "string"
              },
              "enableCrushUpdates": {
                "description": "Allow rook operator to change the pool CRUSH tunables once the pool is created",
                "nullable": true,
                "type": "boolean"
              },
              "enableRBDStats": {
                "description": "EnableRBDStats is used to enable gathering of statistics for all RBD images in the pool",
                "type": "boolean"
              },
              "erasureCoded": {
                "description": "The erasure code settings",
                "properties": {
                  "algorithm": {
                    "description": "The algorithm for erasure coding.\nIf absent, defaults to the plugin specified in osd_pool_default_erasure_code_profile.",
                    "enum": [
                      "isa",
                      "jerasure"
                    ],
                    "type": "string"
                  },
                  "codingChunks": {
                    "description": "Number of coding chunks per object in an erasure coded storage pool (required for erasure-coded pool type).\nThis is the number of OSDs that can be lost simultaneously before data cannot be recovered.",
                    "minimum": 0,
                    "type": "integer"
                  },
                  "dataChunks": {
                    "description": "Number of data chunks per object in an erasure coded storage pool (required for erasure-coded pool type).\nThe number of chunks required to recover an object when any single OSD is lost is the same\nas dataChunks so be aware that the larger the number of data chunks, the higher the cost of recovery.",
                    "minimum": 0,
                    "type": "integer"
                  }
                },
                "required": [
                  "codingChunks",
                  "dataChunks"
                ],
                "type": "object",
                "additionalProperties": false
              },
              "failureDomain": {
                "description": "The failure domain: osd/host/(region or zone if available) - technically also any type in the crush map",
                "type": "string"
              },
              "mirroring": {
                "description": "The mirroring settings",
                "properties": {
                  "enabled": {
                    "description": "Enabled whether this pool is mirrored or not",
                    "type": "boolean"
                  },
                  "mode": {
                    "description": "Mode is the mirroring mode: pool, image or init-only.",
                    "enum": [
                      "pool",
                      "image",
                      "init-only"
                    ],
                    "type": "string"
                  },
                  "peers": {
                    "description": "Peers represents the peers spec",
                    "nullable": true,
                    "properties": {
                      "secretNames": {
                        "description": "SecretNames represents the Kubernetes Secret names to add rbd-mirror or cephfs-mirror peers",
                        "items": {
                          "type": "string"
                        },
                        "type": "array"
                      }
                    },
                    "type": "object",
                    "additionalProperties": false
                  },
                  "snapshotSchedules": {
                    "description": "SnapshotSchedules is the scheduling of snapshot for mirrored images/pools",
                    "items": {
                      "description": "SnapshotScheduleSpec represents the snapshot scheduling settings of a mirrored pool",
                      "properties": {
                        "interval": {
                          "description": "Interval represent the periodicity of the snapshot.",
                          "type": "string"
                        },
                        "path": {
                          "description": "Path is the path to snapshot, only valid for CephFS",
                          "type": "string"
                        },
                        "startTime": {
                          "description": "StartTime indicates when to start the snapshot",
                          "type": "string"
                        }
                      },
                      "type": "object",
                      "additionalProperties": false
                    },
                    "type": "array"
                  }
                },
                "type": "object",
                "additionalProperties": false
              },
              "name": {
                "description": "Name of the pool",
                "type": "string"
              },
              "parameters": {
                "additionalProperties": {
                  "type": "string"
                },
                "description": "Parameters is a list of properties to enable on a given pool",
                "nullable": true,
                "type": "object",
                "x-kubernetes-preserve-unknown-fields": true
              },
              "quotas": {
                "description": "The quota settings",
                "nullable": true,
                "properties": {
                  "maxBytes": {
                    "description": "MaxBytes represents the quota in bytes\nDeprecated in favor of MaxSize",
                    "format": "int64",
                    "type": "integer"
                  },
                  "maxObjects": {
                    "description": "MaxObjects represents the quota in objects",
                    "format": "int64",
                    "type": "integer"
                  },
                  "maxSize": {
                    "description": "MaxSize represents the quota in bytes as a string",
                    "pattern": "^[0-9]+[\\.]?[0-9]*([KMGTPE]i|[kMGTPE])?$",
                    "type": "string"
                  }
                },
                "type": "object",
                "additionalProperties": false
              },
              "replicated": {
                "description": "The replication settings",
                "properties": {
                  "hybridStorage": {
                    "description": "HybridStorage represents hybrid storage tier settings",
                    "nullable": true,
                    "properties": {
                      "primaryDeviceClass": {
                        "description": "PrimaryDeviceClass represents high performance tier (for example SSD or NVME) for Primary OSD",
                        "minLength": 1,
                        "type": "string"
                      },
                      "secondaryDeviceClass": {
                        "description": "SecondaryDeviceClass represents low performance tier (for example HDDs) for remaining OSDs",
                        "minLength": 1,
                        "type": "string"
                      }
                    },
                    "required": [
                      "primaryDeviceClass",
                      "secondaryDeviceClass"
                    ],
                    "type": "object",
                    "additionalProperties": false
                  },
                  "replicasPerFailureDomain": {
                    "description": "ReplicasPerFailureDomain the number of replica in the specified failure domain",
                    "minimum": 1,
                    "type": "integer"
                  },
                  "requireSafeReplicaSize": {
                    "description": "RequireSafeReplicaSize if false allows you to set replica 1",
                    "type": "boolean"
                  },
                  "size": {
                    "description": "Size - Number of copies per object in a replicated storage pool, including the object itself (required for replicated pool type)",
                    "minimum": 0,
                    "type": "integer"
                  },
                  "subFailureDomain": {
                    "description": "SubFailureDomain the name of the sub-failure domain",
                    "type": "string"
                  },
                  "targetSizeRatio": {
                    "description": "TargetSizeRatio gives a hint (%) to Ceph in terms of expected consumption of the total cluster capacity",
                    "minimum": 0,
                    "type": "number"
                  }
                },
                "required": [
                  "size"
                ],
                "type": "object",
                "additionalProperties": false
              },
              "statusCheck": {
                "description": "The mirroring statusCheck",
                "properties": {
                  "mirror": {
                    "description": "HealthCheckSpec represents the health check of an object store bucket",
                    "nullable": true,
                    "properties": {
                      "disabled": {
                        "type": "boolean"
                      },
                      "interval": {
                        "description": "Interval is the internal in second or minute for the health check to run like 60s for 60 seconds",
                        "type": "string"
                      },
                      "timeout": {
                        "type": "string"
                      }
                    },
                    "type": "object",
                    "additionalProperties": false
                  }
                },
                "type": "object",
                "x-kubernetes-preserve-unknown-fields": true,
                "additionalProperties": false
              }
            },
            "type": "object",
            "additionalProperties": false
          },
          "nullable": true,
          "type": "array"
        },
        "metadataPool": {
          "description": "The metadata pool settings",
          "nullable": true,
          "properties": {
            "application": {
              "description": "The application name to set on the pool. Only expected to be set for rgw pools.",
              "type": "string"
            },
            "compressionMode": {
              "description": "DEPRECATED: use Parameters instead, e.g., Parameters[\"compression_mode\"] = \"force\"\nThe inline compression mode in Bluestore OSD to set to (options are: none, passive, aggressive, force)\nDo NOT set a default value for kubebuilder as this will override the Parameters",
              "enum": [
                "none",
                "passive",
                "aggressive",
                "force",
                ""
              ],
              "nullable": true,
              "type": "string"
            },
            "crushRoot": {
              "description": "The root of the crush hierarchy utilized by the pool",
              "nullable": true,
              "type": "string"
            },
            "deviceClass": {
              "description": "The device class the OSD should set to for use in the pool",
              "nullable": true,
              "type": "string"
            },
            "enableCrushUpdates": {
              "description": "Allow rook operator to change the pool CRUSH tunables once the pool is created",
              "nullable": true,
              "type": "boolean"
            },
            "enableRBDStats": {
              "description": "EnableRBDStats is used to enable gathering of statistics for all RBD images in the pool",
              "type": "boolean"
            },
            "erasureCoded": {
              "description": "The erasure code settings",
              "properties": {
                "algorithm": {
                  "description": "The algorithm for erasure coding.\nIf absent, defaults to the plugin specified in osd_pool_default_erasure_code_profile.",
                  "enum": [
                    "isa",
                    "jerasure"
                  ],
                  "type": "string"
                },
                "codingChunks": {
                  "description": "Number of coding chunks per object in an erasure coded storage pool (required for erasure-coded pool type).\nThis is the number of OSDs that can be lost simultaneously before data cannot be recovered.",
                  "minimum": 0,
                  "type": "integer"
                },
                "dataChunks": {
                  "description": "Number of data chunks per object in an erasure coded storage pool (required for erasure-coded pool type).\nThe number of chunks required to recover an object when any single OSD is lost is the same\nas dataChunks so be aware that the larger the number of data chunks, the higher the cost of recovery.",
                  "minimum": 0,
                  "type": "integer"
                }
              },
              "required": [
                "codingChunks",
                "dataChunks"
              ],
              "type": "object",
              "additionalProperties": false
            },
            "failureDomain": {
              "description": "The failure domain: osd/host/(region or zone if available) - technically also any type in the crush map",
              "type": "string"
            },
            "mirroring": {
              "description": "The mirroring settings",
              "properties": {
                "enabled": {
                  "description": "Enabled whether this pool is mirrored or not",
                  "type": "boolean"
                },
                "mode": {
                  "description": "Mode is the mirroring mode: pool, image or init-only.",
                  "enum": [
                    "pool",
                    "image",
                    "init-only"
                  ],
                  "type": "string"
                },
                "peers": {
                  "description": "Peers represents the peers spec",
                  "nullable": true,
                  "properties": {
                    "secretNames": {
                      "description": "SecretNames represents the Kubernetes Secret names to add rbd-mirror or cephfs-mirror peers",
                      "items": {
                        "type": "string"
                      },
                      "type": "array"
                    }
                  },
                  "type": "object",
                  "additionalProperties": false
                },
                "snapshotSchedules": {
                  "description": "SnapshotSchedules is the scheduling of snapshot for mirrored images/pools",
                  "items": {
                    "description": "SnapshotScheduleSpec represents the snapshot scheduling settings of a mirrored pool",
                    "properties": {
                      "interval": {
                        "description": "Interval represent the periodicity of the snapshot.",
                        "type": "string"
                      },
                      "path": {
                        "description": "Path is the path to snapshot, only valid for CephFS",
                        "type": "string"
                      },
                      "startTime": {
                        "description": "StartTime indicates when to start the snapshot",
                        "type": "string"
                      }
                    },
                    "type": "object",
                    "additionalProperties": false
                  },
                  "type": "array"
                }
              },
              "type": "object",
              "additionalProperties": false
            },
            "name": {
              "description": "Name of the pool",
              "type": "string"
            },
            "parameters": {
              "additionalProperties": {
                "type": "string"
              },
              "description": "Parameters is a list of properties to enable on a given pool",
              "nullable": true,
              "type": "object",
              "x-kubernetes-preserve-unknown-fields": true
            },
            "quotas": {
              "description": "The quota settings",
              "nullable": true,
              "properties": {
                "maxBytes": {
                  "description": "MaxBytes represents the quota in bytes\nDeprecated in favor of MaxSize",
                  "format": "int64",
                  "type": "integer"
                },
                "maxObjects": {
                  "description": "MaxObjects represents the quota in objects",
                  "format": "int64",
                  "type": "integer"
                },
                "maxSize": {
                  "description": "MaxSize represents the quota in bytes as a string",
                  "pattern": "^[0-9]+[\\.]?[0-9]*([KMGTPE]i|[kMGTPE])?$",
                  "type": "string"
                }
              },
              "type": "object",
              "additionalProperties": false
            },
            "replicated": {
              "description": "The replication settings",
              "properties": {
                "hybridStorage": {
                  "description": "HybridStorage represents hybrid storage tier settings",
                  "nullable": true,
                  "properties": {
                    "primaryDeviceClass": {
                      "description": "PrimaryDeviceClass represents high performance tier (for example SSD or NVME) for Primary OSD",
                      "minLength": 1,
                      "type": "string"
                    },
                    "secondaryDeviceClass": {
                      "description": "SecondaryDeviceClass represents low performance tier (for example HDDs) for remaining OSDs",
                      "minLength": 1,
                      "type": "string"
                    }
                  },
                  "required": [
                    "primaryDeviceClass",
                    "secondaryDeviceClass"
                  ],
                  "type": "object",
                  "additionalProperties": false
                },
                "replicasPerFailureDomain": {
                  "description": "ReplicasPerFailureDomain the number of replica in the specified failure domain",
                  "minimum": 1,
                  "type": "integer"
                },
                "requireSafeReplicaSize": {
                  "description": "RequireSafeReplicaSize if false allows you to set replica 1",
                  "type": "boolean"
                },
                "size": {
                  "description": "Size - Number of copies per object in a replicated storage pool, including the object itself (required for replicated pool type)",
                  "minimum": 0,
                  "type": "integer"
                },
                "subFailureDomain": {
                  "description": "SubFailureDomain the name of the sub-failure domain",
                  "type": "string"
                },
                "targetSizeRatio": {
                  "description": "TargetSizeRatio gives a hint (%) to Ceph in terms of expected consumption of the total cluster capacity",
                  "minimum": 0,
                  "type": "number"
                }
              },
              "required": [
                "size"
              ],
              "type": "object",
              "additionalProperties": false
            },
            "statusCheck": {
              "description": "The mirroring statusCheck",
              "properties": {
                "mirror": {
                  "description": "HealthCheckSpec represents the health check of an object store bucket",
                  "nullable": true,
                  "properties": {
                    "disabled": {
                      "type": "boolean"
                    },
                    "interval": {
                      "description": "Interval is the internal in second or minute for the health check to run like 60s for 60 seconds",
                      "type": "string"
                    },
                    "timeout": {
                      "type": "string"
                    }
                  },
                  "type": "object",
                  "additionalProperties": false
                }
              },
              "type": "object",
              "x-kubernetes-preserve-unknown-fields": true,
              "additionalProperties": false
            }
          },
          "type": "object",
          "additionalProperties": false
        },
        "metadataServer": {
          "description": "The mds pod info",
          "properties": {
            "activeCount": {
              "description": "The number of metadata servers that are active. The remaining servers in the cluster will be in standby mode.",
              "format": "int32",
              "maximum": 50,
              "minimum": 1,
              "type": "integer"
            },
            "activeStandby": {
              "description": "Whether each active MDS instance will have an active standby with a warm metadata cache for faster failover.\nIf false, standbys will still be available, but will not have a warm metadata cache.",
              "type": "boolean"
            },
            "annotations": {
              "additionalProperties": {
                "type": "string"
              },
              "description": "The annotations-related configuration to add/set on each Pod related object.",
              "nullable": true,
              "type": "object",
              "x-kubernetes-preserve-unknown-fields": true
            },
            "cacheMemoryLimitFactor": {
              "description": "CacheMemoryLimitFactor is the factor applied to the memory limit to determine the MDS cache memory limit.\nMDS cache memory limit should be set to 50-60% of RAM reserved for the MDS container.\nMDS uses approximately 125% of the value of mds_cache_memory_limit in RAM.\nThis factor is applied when resources.limits.memory is set.",
              "maximum": 1,
              "minimum": 0,
              "type": "number"
            },
            "cacheMemoryRequestFactor": {
              "description": "CacheMemoryRequestFactor is the factor applied to the memory request to determine the MDS cache memory limit.\nThis factor is applied when resources.requests.memory is set and resources.limits.memory is not set.",
              "maximum": 1,
              "minimum": 0,
              "type": "number"
            },
            "labels": {
              "additionalProperties": {
                "type": "string"
              },
              "description": "The labels-related configuration to add/set on each Pod related object.",
              "nullable": true,
              "type": "object",
              "x-kubernetes-preserve-unknown-fields": true
            },
            "livenessProbe": {
              "description": "ProbeSpec is a wrapper around Probe so it can be enabled or disabled for a Ceph daemon",
              "properties": {
                "disabled": {
                  "description": "Disabled determines whether probe is disable or not",
                  "type": "boolean"
                },
                "probe": {
                  "description": "Probe describes a health check to be performed against a container to determine whether it is\nalive or ready to receive traffic.",
                  "properties": {
                    "exec": {
                      "description": "Exec specifies a command to execute in the container.",
                      "properties": {
                        "command": {
                          "description": "Command is the command line to execute inside the container, the working directory for the\ncommand  is root ('/') in the container's filesystem. The command is simply exec'd, it is\nnot run inside a shell, so traditional shell instructions ('|', etc) won't work. To use\na shell, you need to explicitly call out to that shell.\nExit status of 0 is treated as live/healthy and non-zero is unhealthy.",
                          "items": {
                            "type": "string"
                          },
                          "type": "array",
                          "x-kubernetes-list-type": "atomic"
                        }
                      },
                      "type": "object",
                      "additionalProperties": false
                    },
                    "failureThreshold": {
                      "description": "Minimum consecutive failures for the probe to be considered failed after having succeeded.\nDefaults to 3. Minimum value is 1.",
                      "format": "int32",
                      "type": "integer"
                    },
                    "grpc": {
                      "description": "GRPC specifies a GRPC HealthCheckRequest.",
                      "properties": {
                        "port": {
                          "description": "Port number of the gRPC service. Number must be in the range 1 to 65535.",
                          "format": "int32",
                          "type": "integer"
                        },
                        "service": {
                          "default": "",
                          "description": "Service is the name of the service to place in the gRPC HealthCheckRequest\n(see https://github.com/grpc/grpc/blob/master/doc/health-checking.md).\n\nIf this is not specified, the default behavior is defined by gRPC.",
                          "type": "string"
                        }
                      },
                      "required": [
                        "port"
                      ],
                      "type": "object",
                      "additionalProperties": false
                    },
                    "httpGet": {
                      "description": "HTTPGet specifies an HTTP GET request to perform.",
                      "properties": {
                        "host": {
                          "description": "Host name to connect to, defaults to the pod IP. You probably want to set\n\"Host\" in httpHeaders instead.",
                          "type": "string"
                        },
                        "httpHeaders": {
                          "description": "Custom headers to set in the request. HTTP allows repeated headers.",
                          "items": {
                            "description": "HTTPHeader describes a custom header to be used in HTTP probes",
                            "properties": {
                              "name": {
                                "description": "The header field name.\nThis will be canonicalized upon output, so case-variant names will be understood as the same header.",
                                "type": "string"
                              },
                              "value": {
                                "description": "The header field value",
                                "type": "string"
                              }
                            },
                            "required": [
                              "name",
                              "value"
                            ],
                            "type": "object",
                            "additionalProperties": false
                          },
                          "type": "array",
                          "x-kubernetes-list-type": "atomic"
                        },
                        "path": {
                          "description": "Path to access on the HTTP server.",
                          "type": "string"
                        },
                        "port": {
                          "anyOf": [
                            {
                              "type": "integer"
                            },
                            {
                              "type": "string"
                            }
                          ],
                          "description": "Name or number of the port to access on the container.\nNumber must be in the range 1 to 65535.\nName must be an IANA_SVC_NAME.",
                          "x-kubernetes-int-or-string": true
                        },
                        "scheme": {
                          "description": "Scheme to use for connecting to the host.\nDefaults to HTTP.",
                          "type": "string"
                        }
                      },
                      "required": [
                        "port"
                      ],
                      "type": "object",
                      "additionalProperties": false
                    },
                    "initialDelaySeconds": {
                      "description": "Number of seconds after the container has started before liveness probes are initiated.\nMore info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#container-probes",
                      "format": "int32",
                      "type": "integer"
                    },
                    "periodSeconds": {
                      "description": "How often (in seconds) to perform the probe.\nDefault to 10 seconds. Minimum value is 1.",
                      "format": "int32",
                      "type": "integer"
                    },
                    "successThreshold": {
                      "description": "Minimum consecutive successes for the probe to be considered successful after having failed.\nDefaults to 1. Must be 1 for liveness and startup. Minimum value is 1.",
                      "format": "int32",
                      "type": "integer"
                    },
                    "tcpSocket": {
                      "description": "TCPSocket specifies a connection to a TCP port.",
                      "properties": {
                        "host": {
                          "description": "Optional: Host name to connect to, defaults to the pod IP.",
                          "type": "string"
                        },
                        "port": {
                          "anyOf": [
                            {
                              "type": "integer"
                            },
                            {
                              "type": "string"
                            }
                          ],
                          "description": "Number or name of the port to access on the container.\nNumber must be in the range 1 to 65535.\nName must be an IANA_SVC_NAME.",
                          "x-kubernetes-int-or-string": true
                        }
                      },
                      "required": [
                        "port"
                      ],
                      "type": "object",
                      "additionalProperties": false
                    },
                    "terminationGracePeriodSeconds": {
                      "format": "int64",
                      "type": "integer"
                    },
                    "timeoutSeconds": {
                      "description": "Number of seconds after which the probe times out.\nDefaults to 1 second. Minimum value is 1.\nMore info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#container-probes",
                      "format": "int32",
                      "type": "integer"
                    }
                  },
                  "type": "object",
                  "additionalProperties": false
                }
              },
              "type": "object",
              "additionalProperties": false
            },
            "placement": {
              "nullable": true,
              "properties": {
                "nodeAffinity": {
                  "properties": {
                    "preferredDuringSchedulingIgnoredDuringExecution": {
                      "items": {
                        "properties": {
                          "preference": {
                            "properties": {
                              "matchExpressions": {
                                "items": {
                                  "properties": {
                                    "key": {
                                      "type": "string"
                                    },
                                    "operator": {
                                      "type": "string"
                                    },
                                    "values": {
                                      "items": {
                                        "type": "string"
                                      },
                                      "type": "array",
                                      "x-kubernetes-list-type": "atomic"
                                    }
                                  },
                                  "required": [
                                    "key",
                                    "operator"
                                  ],
                                  "type": "object",
                                  "additionalProperties": false
                                },
                                "type": "array",
                                "x-kubernetes-list-type": "atomic"
                              },
                              "matchFields": {
                                "items": {
                                  "properties": {
                                    "key": {
                                      "type": "string"
                                    },
                                    "operator": {
                                      "type": "string"
                                    },
                                    "values": {
                                      "items": {
                                        "type": "string"
                                      },
                                      "type": "array",
                                      "x-kubernetes-list-type": "atomic"
                                    }
                                  },
                                  "required": [
                                    "key",
                                    "operator"
                                  ],
                                  "type": "object",
                                  "additionalProperties": false
                                },
                                "type": "array",
                                "x-kubernetes-list-type": "atomic"
                              }
                            },
                            "type": "object",
                            "x-kubernetes-map-type": "atomic",
                            "additionalProperties": false
                          },
                          "weight": {
                            "format": "int32",
                            "type": "integer"
                          }
                        },
                        "required": [
                          "preference",
                          "weight"
                        ],
                        "type": "object",
                        "additionalProperties": false
                      },
                      "type": "array",
                      "x-kubernetes-list-type": "atomic"
                    },
                    "requiredDuringSchedulingIgnoredDuringExecution": {
                      "properties": {
                        "nodeSelectorTerms": {
                          "items": {
                            "properties": {
                              "matchExpressions": {
                                "items": {
                                  "properties": {
                                    "key": {
                                      "type": "string"
                                    },
                                    "operator": {
                                      "type": "string"
                                    },
                                    "values": {
                                      "items": {
                                        "type": "string"
                                      },
                                      "type": "array",
                                      "x-kubernetes-list-type": "atomic"
                                    }
                                  },
                                  "required": [
                                    "key",
                                    "operator"
                                  ],
                                  "type": "object",
                                  "additionalProperties": false
                                },
                                "type": "array",
                                "x-kubernetes-list-type": "atomic"
                              },
                              "matchFields": {
                                "items": {
                                  "properties": {
                                    "key": {
                                      "type": "string"
                                    },
                                    "operator": {
                                      "type": "string"
                                    },
                                    "values": {
                                      "items": {
                                        "type": "string"
                                      },
                                      "type": "array",
                                      "x-kubernetes-list-type": "atomic"
                                    }
                                  },
                                  "required": [
                                    "key",
                                    "operator"
                                  ],
                                  "type": "object",
                                  "additionalProperties": false
                                },
                                "type": "array",
                                "x-kubernetes-list-type": "atomic"
                              }
                            },
                            "type": "object",
                            "x-kubernetes-map-type": "atomic",
                            "additionalProperties": false
                          },
                          "type": "array",
                          "x-kubernetes-list-type": "atomic"
                        }
                      },
                      "required": [
                        "nodeSelectorTerms"
                      ],
                      "type": "object",
                      "x-kubernetes-map-type": "atomic",
                      "additionalProperties": false
                    }
                  },
                  "type": "object",
                  "additionalProperties": false
                },
                "podAffinity": {
                  "properties": {
                    "preferredDuringSchedulingIgnoredDuringExecution": {
                      "items": {
                        "properties": {
                          "podAffinityTerm": {
                            "properties": {
                              "labelSelector": {
                                "properties": {
                                  "matchExpressions": {
                                    "items": {
                                      "properties": {
                                        "key": {
                                          "type": "string"
                                        },
                                        "operator": {
                                          "type": "string"
                                        },
                                        "values": {
                                          "items": {
                                            "type": "string"
                                          },
                                          "type": "array",
                                          "x-kubernetes-list-type": "atomic"
                                        }
                                      },
                                      "required": [
                                        "key",
                                        "operator"
                                      ],
                                      "type": "object",
                                      "additionalProperties": false
                                    },
                                    "type": "array",
                                    "x-kubernetes-list-type": "atomic"
                                  },
                                  "matchLabels": {
                                    "additionalProperties": {
                                      "type": "string"
                                    },
                                    "type": "object"
                                  }
                                },
                                "type": "object",
                                "x-kubernetes-map-type": "atomic",
                                "additionalProperties": false
                              },
                              "matchLabelKeys": {
                                "items": {
                                  "type": "string"
                                },
                                "type": "array",
                                "x-kubernetes-list-type": "atomic"
                              },
                              "mismatchLabelKeys": {
                                "items": {
                                  "type": "string"
                                },
                                "type": "array",
                                "x-kubernetes-list-type": "atomic"
                              },
                              "namespaceSelector": {
                                "properties": {
                                  "matchExpressions": {
                                    "items": {
                                      "properties": {
                                        "key": {
                                          "type": "string"
                                        },
                                        "operator": {
                                          "type": "string"
                                        },
                                        "values": {
                                          "items": {
                                            "type": "string"
                                          },
                                          "type": "array",
                                          "x-kubernetes-list-type": "atomic"
                                        }
                                      },
                                      "required": [
                                        "key",
                                        "operator"
                                      ],
                                      "type": "object",
                                      "additionalProperties": false
                                    },
                                    "type": "array",
                                    "x-kubernetes-list-type": "atomic"
                                  },
                                  "matchLabels": {
                                    "additionalProperties": {
                                      "type": "string"
                                    },
                                    "type": "object"
                                  }
                                },
                                "type": "object",
                                "x-kubernetes-map-type": "atomic",
                                "additionalProperties": false
                              },
                              "namespaces": {
                                "items": {
                                  "type": "string"
                                },
                                "type": "array",
                                "x-kubernetes-list-type": "atomic"
                              },
                              "topologyKey": {
                                "type": "string"
                              }
                            },
                            "required": [
                              "topologyKey"
                            ],
                            "type": "object",
                            "additionalProperties": false
                          },
                          "weight": {
                            "format": "int32",
                            "type": "integer"
                          }
                        },
                        "required": [
                          "podAffinityTerm",
                          "weight"
                        ],
                        "type": "object",
                        "additionalProperties": false
                      },
                      "type": "array",
                      "x-kubernetes-list-type": "atomic"
                    },
                    "requiredDuringSchedulingIgnoredDuringExecution": {
                      "items": {
                        "properties": {
                          "labelSelector": {
                            "properties": {
                              "matchExpressions": {
                                "items": {
                                  "properties": {
                                    "key": {
                                      "type": "string"
                                    },
                                    "operator": {
                                      "type": "string"
                                    },
                                    "values": {
                                      "items": {
                                        "type": "string"
                                      },
                                      "type": "array",
                                      "x-kubernetes-list-type": "atomic"
                                    }
                                  },
                                  "required": [
                                    "key",
                                    "operator"
                                  ],
                                  "type": "object",
                                  "additionalProperties": false
                                },
                                "type": "array",
                                "x-kubernetes-list-type": "atomic"
                              },
                              "matchLabels": {
                                "additionalProperties": {
                                  "type": "string"
                                },
                                "type": "object"
                              }
                            },
                            "type": "object",
                            "x-kubernetes-map-type": "atomic",
                            "additionalProperties": false
                          },
                          "matchLabelKeys": {
                            "items": {
                              "type": "string"
                            },
                            "type": "array",
                            "x-kubernetes-list-type": "atomic"
                          },
                          "mismatchLabelKeys": {
                            "items": {
                              "type": "string"
                            },
                            "type": "array",
                            "x-kubernetes-list-type": "atomic"
                          },
                          "namespaceSelector": {
                            "properties": {
                              "matchExpressions": {
                                "items": {
                                  "properties": {
                                    "key": {
                                      "type": "string"
                                    },
                                    "operator": {
                                      "type": "string"
                                    },
                                    "values": {
                                      "items": {
                                        "type": "string"
                                      },
                                      "type": "array",
                                      "x-kubernetes-list-type": "atomic"
                                    }
                                  },
                                  "required": [
                                    "key",
                                    "operator"
                                  ],
                                  "type": "object",
                                  "additionalProperties": false
                                },
                                "type": "array",
                                "x-kubernetes-list-type": "atomic"
                              },
                              "matchLabels": {
                                "additionalProperties": {
                                  "type": "string"
                                },
                                "type": "object"
                              }
                            },
                            "type": "object",
                            "x-kubernetes-map-type": "atomic",
                            "additionalProperties": false
                          },
                          "namespaces": {
                            "items": {
                              "type": "string"
                            },
                            "type": "array",
                            "x-kubernetes-list-type": "atomic"
                          },
                          "topologyKey": {
                            "type": "string"
                          }
                        },
                        "required": [
                          "topologyKey"
                        ],
                        "type": "object",
                        "additionalProperties": false
                      },
                      "type": "array",
                      "x-kubernetes-list-type": "atomic"
                    }
                  },
                  "type": "object",
                  "additionalProperties": false
                },
                "podAntiAffinity": {
                  "properties": {
                    "preferredDuringSchedulingIgnoredDuringExecution": {
                      "items": {
                        "properties": {
                          "podAffinityTerm": {
                            "properties": {
                              "labelSelector": {
                                "properties": {
                                  "matchExpressions": {
                                    "items": {
                                      "properties": {
                                        "key": {
                                          "type": "string"
                                        },
                                        "operator": {
                                          "type": "string"
                                        },
                                        "values": {
                                          "items": {
                                            "type": "string"
                                          },
                                          "type": "array",
                                          "x-kubernetes-list-type": "atomic"
                                        }
                                      },
                                      "required": [
                                        "key",
                                        "operator"
                                      ],
                                      "type": "object",
                                      "additionalProperties": false
                                    },
                                    "type": "array",
                                    "x-kubernetes-list-type": "atomic"
                                  },
                                  "matchLabels": {
                                    "additionalProperties": {
                                      "type": "string"
                                    },
                                    "type": "object"
                                  }
                                },
                                "type": "object",
                                "x-kubernetes-map-type": "atomic",
                                "additionalProperties": false
                              },
                              "matchLabelKeys": {
                                "items": {
                                  "type": "string"
                                },
                                "type": "array",
                                "x-kubernetes-list-type": "atomic"
                              },
                              "mismatchLabelKeys": {
                                "items": {
                                  "type": "string"
                                },
                                "type": "array",
                                "x-kubernetes-list-type": "atomic"
                              },
                              "namespaceSelector": {
                                "properties": {
                                  "matchExpressions": {
                                    "items": {
                                      "properties": {
                                        "key": {
                                          "type": "string"
                                        },
                                        "operator": {
                                          "type": "string"
                                        },
                                        "values": {
                                          "items": {
                                            "type": "string"
                                          },
                                          "type": "array",
                                          "x-kubernetes-list-type": "atomic"
                                        }
                                      },
                                      "required": [
                                        "key",
                                        "operator"
                                      ],
                                      "type": "object",
                                      "additionalProperties": false
                                    },
                                    "type": "array",
                                    "x-kubernetes-list-type": "atomic"
                                  },
                                  "matchLabels": {
                                    "additionalProperties": {
                                      "type": "string"
                                    },
                                    "type": "object"
                                  }
                                },
                                "type": "object",
                                "x-kubernetes-map-type": "atomic",
                                "additionalProperties": false
                              },
                              "namespaces": {
                                "items": {
                                  "type": "string"
                                },
                                "type": "array",
                                "x-kubernetes-list-type": "atomic"
                              },
                              "topologyKey": {
                                "type": "string"
                              }
                            },
                            "required": [
                              "topologyKey"
                            ],
                            "type": "object",
                            "additionalProperties": false
                          },
                          "weight": {
                            "format": "int32",
                            "type": "integer"
                          }
                        },
                        "required": [
                          "podAffinityTerm",
                          "weight"
                        ],
                        "type": "object",
                        "additionalProperties": false
                      },
                      "type": "array",
                      "x-kubernetes-list-type": "atomic"
                    },
                    "requiredDuringSchedulingIgnoredDuringExecution": {
                      "items": {
                        "properties": {
                          "labelSelector": {
                            "properties": {
                              "matchExpressions": {
                                "items": {
                                  "properties": {
                                    "key": {
                                      "type": "string"
                                    },
                                    "operator": {
                                      "type": "string"
                                    },
                                    "values": {
                                      "items": {
                                        "type": "string"
                                      },
                                      "type": "array",
                                      "x-kubernetes-list-type": "atomic"
                                    }
                                  },
                                  "required": [
                                    "key",
                                    "operator"
                                  ],
                                  "type": "object",
                                  "additionalProperties": false
                                },
                                "type": "array",
                                "x-kubernetes-list-type": "atomic"
                              },
                              "matchLabels": {
                                "additionalProperties": {
                                  "type": "string"
                                },
                                "type": "object"
                              }
                            },
                            "type": "object",
                            "x-kubernetes-map-type": "atomic",
                            "additionalProperties": false
                          },
                          "matchLabelKeys": {
                            "items": {
                              "type": "string"
                            },
                            "type": "array",
                            "x-kubernetes-list-type": "atomic"
                          },
                          "mismatchLabelKeys": {
                            "items": {
                              "type": "string"
                            },
                            "type": "array",
                            "x-kubernetes-list-type": "atomic"
                          },
                          "namespaceSelector": {
                            "properties": {
                              "matchExpressions": {
                                "items": {
                                  "properties": {
                                    "key": {
                                      "type": "string"
                                    },
                                    "operator": {
                                      "type": "string"
                                    },
                                    "values": {
                                      "items": {
                                        "type": "string"
                                      },
                                      "type": "array",
                                      "x-kubernetes-list-type": "atomic"
                                    }
                                  },
                                  "required": [
                                    "key",
                                    "operator"
                                  ],
                                  "type": "object",
                                  "additionalProperties": false
                                },
                                "type": "array",
                                "x-kubernetes-list-type": "atomic"
                              },
                              "matchLabels": {
                                "additionalProperties": {
                                  "type": "string"
                                },
                                "type": "object"
                              }
                            },
                            "type": "object",
                            "x-kubernetes-map-type": "atomic",
                            "additionalProperties": false
                          },
                          "namespaces": {
                            "items": {
                              "type": "string"
                            },
                            "type": "array",
                            "x-kubernetes-list-type": "atomic"
                          },
                          "topologyKey": {
                            "type": "string"
                          }
                        },
                        "required": [
                          "topologyKey"
                        ],
                        "type": "object",
                        "additionalProperties": false
                      },
                      "type": "array",
                      "x-kubernetes-list-type": "atomic"
                    }
                  },
                  "type": "object",
                  "additionalProperties": false
                },
                "tolerations": {
                  "items": {
                    "properties": {
                      "effect": {
                        "type": "string"
                      },
                      "key": {
                        "type": "string"
                      },
                      "operator": {
                        "type": "string"
                      },
                      "tolerationSeconds": {
                        "format": "int64",
                        "type": "integer"
                      },
                      "value": {
                        "type": "string"
                      }
                    },
                    "type": "object",
                    "additionalProperties": false
                  },
                  "type": "array"
                },
                "topologySpreadConstraints": {
                  "items": {
                    "properties": {
                      "labelSelector": {
                        "properties": {
                          "matchExpressions": {
                            "items": {
                              "properties": {
                                "key": {
                                  "type": "string"
                                },
                                "operator": {
                                  "type": "string"
                                },
                                "values": {
                                  "items": {
                                    "type": "string"
                                  },
                                  "type": "array",
                                  "x-kubernetes-list-type": "atomic"
                                }
                              },
                              "required": [
                                "key",
                                "operator"
                              ],
                              "type": "object",
                              "additionalProperties": false
                            },
                            "type": "array",
                            "x-kubernetes-list-type": "atomic"
                          },
                          "matchLabels": {
                            "additionalProperties": {
                              "type": "string"
                            },
                            "type": "object"
                          }
                        },
                        "type": "object",
                        "x-kubernetes-map-type": "atomic",
                        "additionalProperties": false
                      },
                      "matchLabelKeys": {
                        "items": {
                          "type": "string"
                        },
                        "type": "array",
                        "x-kubernetes-list-type": "atomic"
                      },
                      "maxSkew": {
                        "format": "int32",
                        "type": "integer"
                      },
                      "minDomains": {
                        "format": "int32",
                        "type": "integer"
                      },
                      "nodeAffinityPolicy": {
                        "type": "string"
                      },
                      "nodeTaintsPolicy": {
                        "type": "string"
                      },
                      "topologyKey": {
                        "type": "string"
                      },
                      "whenUnsatisfiable": {
                        "type": "string"
                      }
                    },
                    "required": [
                      "maxSkew",
                      "topologyKey",
                      "whenUnsatisfiable"
                    ],
                    "type": "object",
                    "additionalProperties": false
                  },
                  "type": "array"
                }
              },
              "type": "object",
              "x-kubernetes-preserve-unknown-fields": true,
              "additionalProperties": false
            },
            "priorityClassName": {
              "description": "PriorityClassName sets priority classes on components",
              "type": "string"
            },
            "resources": {
              "description": "The resource requirements for the mds pods",
              "nullable": true,
              "properties": {
                "claims": {
                  "description": "Claims lists the names of resources, defined in spec.resourceClaims,\nthat are used by this container.\n\nThis field depends on the\nDynamicResourceAllocation feature gate.\n\nThis field is immutable. It can only be set for containers.",
                  "items": {
                    "description": "ResourceClaim references one entry in PodSpec.ResourceClaims.",
                    "properties": {
                      "name": {
                        "description": "Name must match the name of one entry in pod.spec.resourceClaims of\nthe Pod where this field is used. It makes that resource available\ninside a container.",
                        "type": "string"
                      },
                      "request": {
                        "description": "Request is the name chosen for a request in the referenced claim.\nIf empty, everything from the claim is made available, otherwise\nonly the result of this request.",
                        "type": "string"
                      }
                    },
                    "required": [
                      "name"
                    ],
                    "type": "object",
                    "additionalProperties": false
                  },
                  "type": "array",
                  "x-kubernetes-list-map-keys": [
                    "name"
                  ],
                  "x-kubernetes-list-type": "map"
                },
                "limits": {
                  "additionalProperties": {
                    "anyOf": [
                      {
                        "type": "integer"
                      },
                      {
                        "type": "string"
                      }
                    ],
                    "pattern": "^(\\+|-)?(([0-9]+(\\.[0-9]*)?)|(\\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\\+|-)?(([0-9]+(\\.[0-9]*)?)|(\\.[0-9]+))))?$",
                    "x-kubernetes-int-or-string": true
                  },
                  "description": "Limits describes the maximum amount of compute resources allowed.\nMore info: https://kubernetes.io/docs/concepts/configuration/manage-resources-containers/",
                  "type": "object"
                },
                "requests": {
                  "additionalProperties": {
                    "anyOf": [
                      {
                        "type": "integer"
                      },
                      {
                        "type": "string"
                      }
                    ],
                    "pattern": "^(\\+|-)?(([0-9]+(\\.[0-9]*)?)|(\\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\\+|-)?(([0-9]+(\\.[0-9]*)?)|(\\.[0-9]+))))?$",
                    "x-kubernetes-int-or-string": true
                  },
                  "description": "Requests describes the minimum amount of compute resources required.\nIf Requests is omitted for a container, it defaults to Limits if that is explicitly specified,\notherwise to an implementation-defined value. Requests cannot exceed Limits.\nMore info: https://kubernetes.io/docs/concepts/configuration/manage-resources-containers/",
                  "type": "object"
                }
              },
              "type": "object",
              "x-kubernetes-preserve-unknown-fields": true,
              "additionalProperties": false
            },
            "startupProbe": {
              "description": "ProbeSpec is a wrapper around Probe so it can be enabled or disabled for a Ceph daemon",
              "properties": {
                "disabled": {
                  "description": "Disabled determines whether probe is disable or not",
                  "type": "boolean"
                },
                "probe": {
                  "description": "Probe describes a health check to be performed against a container to determine whether it is\nalive or ready to receive traffic.",
                  "properties": {
                    "exec": {
                      "description": "Exec specifies a command to execute in the container.",
                      "properties": {
                        "command": {
                          "description": "Command is the command line to execute inside the container, the working directory for the\ncommand  is root ('/') in the container's filesystem. The command is simply exec'd, it is\nnot run inside a shell, so traditional shell instructions ('|', etc) won't work. To use\na shell, you need to explicitly call out to that shell.\nExit status of 0 is treated as live/healthy and non-zero is unhealthy.",
                          "items": {
                            "type": "string"
                          },
                          "type": "array",
                          "x-kubernetes-list-type": "atomic"
                        }
                      },
                      "type": "object",
                      "additionalProperties": false
                    },
                    "failureThreshold": {
                      "description": "Minimum consecutive failures for the probe to be considered failed after having succeeded.\nDefaults to 3. Minimum value is 1.",
                      "format": "int32",
                      "type": "integer"
                    },
                    "grpc": {
                      "description": "GRPC specifies a GRPC HealthCheckRequest.",
                      "properties": {
                        "port": {
                          "description": "Port number of the gRPC service. Number must be in the range 1 to 65535.",
                          "format": "int32",
                          "type": "integer"
                        },
                        "service": {
                          "default": "",
                          "description": "Service is the name of the service to place in the gRPC HealthCheckRequest\n(see https://github.com/grpc/grpc/blob/master/doc/health-checking.md).\n\nIf this is not specified, the default behavior is defined by gRPC.",
                          "type": "string"
                        }
                      },
                      "required": [
                        "port"
                      ],
                      "type": "object",
                      "additionalProperties": false
                    },
                    "httpGet": {
                      "description": "HTTPGet specifies an HTTP GET request to perform.",
                      "properties": {
                        "host": {
                          "description": "Host name to connect to, defaults to the pod IP. You probably want to set\n\"Host\" in httpHeaders instead.",
                          "type": "string"
                        },
                        "httpHeaders": {
                          "description": "Custom headers to set in the request. HTTP allows repeated headers.",
                          "items": {
                            "description": "HTTPHeader describes a custom header to be used in HTTP probes",
                            "properties": {
                              "name": {
                                "description": "The header field name.\nThis will be canonicalized upon output, so case-variant names will be understood as the same header.",
                                "type": "string"
                              },
                              "value": {
                                "description": "The header field value",
                                "type": "string"
                              }
                            },
                            "required": [
                              "name",
                              "value"
                            ],
                            "type": "object",
                            "additionalProperties": false
                          },
                          "type": "array",
                          "x-kubernetes-list-type": "atomic"
                        },
                        "path": {
                          "description": "Path to access on the HTTP server.",
                          "type": "string"
                        },
                        "port": {
                          "anyOf": [
                            {
                              "type": "integer"
                            },
                            {
                              "type": "string"
                            }
                          ],
                          "description": "Name or number of the port to access on the container.\nNumber must be in the range 1 to 65535.\nName must be an IANA_SVC_NAME.",
                          "x-kubernetes-int-or-string": true
                        },
                        "scheme": {
                          "description": "Scheme to use for connecting to the host.\nDefaults to HTTP.",
                          "type": "string"
                        }
                      },
                      "required": [
                        "port"
                      ],
                      "type": "object",
                      "additionalProperties": false
                    },
                    "initialDelaySeconds": {
                      "description": "Number of seconds after the container has started before liveness probes are initiated.\nMore info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#container-probes",
                      "format": "int32",
                      "type": "integer"
                    },
                    "periodSeconds": {
                      "description": "How often (in seconds) to perform the probe.\nDefault to 10 seconds. Minimum value is 1.",
                      "format": "int32",
                      "type": "integer"
                    },
                    "successThreshold": {
                      "description": "Minimum consecutive successes for the probe to be considered successful after having failed.\nDefaults to 1. Must be 1 for liveness and startup. Minimum value is 1.",
                      "format": "int32",
                      "type": "integer"
                    },
                    "tcpSocket": {
                      "description": "TCPSocket specifies a connection to a TCP port.",
                      "properties": {
                        "host": {
                          "description": "Optional: Host name to connect to, defaults to the pod IP.",
                          "type": "string"
                        },
                        "port": {
                          "anyOf": [
                            {
                              "type": "integer"
                            },
                            {
                              "type": "string"
                            }
                          ],
                          "description": "Number or name of the port to access on the container.\nNumber must be in the range 1 to 65535.\nName must be an IANA_SVC_NAME.",
                          "x-kubernetes-int-or-string": true
                        }
                      },
                      "required": [
                        "port"
                      ],
                      "type": "object",
                      "additionalProperties": false
                    },
                    "terminationGracePeriodSeconds": {
                      "format": "int64",
                      "type": "integer"
                    },
                    "timeoutSeconds": {
                      "description": "Number of seconds after which the probe times out.\nDefaults to 1 second. Minimum value is 1.\nMore info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#container-probes",
                      "format": "int32",
                      "type": "integer"
                    }
                  },
                  "type": "object",
                  "additionalProperties": false
                }
              },
              "type": "object",
              "additionalProperties": false
            }
          },
          "required": [
            "activeCount"
          ],
          "type": "object",
          "additionalProperties": false
        },
        "mirroring": {
          "description": "The mirroring settings",
          "nullable": true,
          "properties": {
            "enabled": {
              "description": "Enabled whether this filesystem is mirrored or not",
              "type": "boolean"
            },
            "peers": {
              "description": "Peers represents the peers spec",
              "nullable": true,
              "properties": {
                "secretNames": {
                  "description": "SecretNames represents the Kubernetes Secret names to add rbd-mirror or cephfs-mirror peers",
                  "items": {
                    "type": "string"
                  },
                  "type": "array"
                }
              },
              "type": "object",
              "additionalProperties": false
            },
            "snapshotRetention": {
              "description": "Retention is the retention policy for a snapshot schedule\nOne path has exactly one retention policy.\nA policy can however contain multiple count-time period pairs in order to specify complex retention policies",
              "items": {
                "description": "SnapshotScheduleRetentionSpec is a retention policy",
                "properties": {
                  "duration": {
                    "description": "Duration represents the retention duration for a snapshot",
                    "type": "string"
                  },
                  "path": {
                    "description": "Path is the path to snapshot",
                    "type": "string"
                  }
                },
                "type": "object",
                "additionalProperties": false
              },
              "type": "array"
            },
            "snapshotSchedules": {
              "description": "SnapshotSchedules is the scheduling of snapshot for mirrored filesystems",
              "items": {
                "description": "SnapshotScheduleSpec represents the snapshot scheduling settings of a mirrored pool",
                "properties": {
                  "interval": {
                    "description": "Interval represent the periodicity of the snapshot.",
                    "type": "string"
                  },
                  "path": {
                    "description": "Path is the path to snapshot, only valid for CephFS",
                    "type": "string"
                  },
                  "startTime": {
                    "description": "StartTime indicates when to start the snapshot",
                    "type": "string"
                  }
                },
                "type": "object",
                "additionalProperties": false
              },
              "type": "array"
            }
          },
          "type": "object",
          "additionalProperties": false
        },
        "preserveFilesystemOnDelete": {
          "description": "Preserve the fs in the cluster on CephFilesystem CR deletion. Setting this to true automatically implies PreservePoolsOnDelete is true.",
          "type": "boolean"
        },
        "preservePoolNames": {
          "description": "Preserve pool names as specified",
          "type": "boolean"
        },
        "preservePoolsOnDelete": {
          "description": "Preserve pools on filesystem deletion",
          "type": "boolean"
        },
        "statusCheck": {
          "description": "The mirroring statusCheck",
          "properties": {
            "mirror": {
              "description": "HealthCheckSpec represents the health check of an object store bucket",
              "nullable": true,
              "properties": {
                "disabled": {
                  "type": "boolean"
                },
                "interval": {
                  "description": "Interval is the internal in second or minute for the health check to run like 60s for 60 seconds",
                  "type": "string"
                },
                "timeout": {
                  "type": "string"
                }
              },
              "type": "object",
              "additionalProperties": false
            }
          },
          "type": "object",
          "x-kubernetes-preserve-unknown-fields": true,
          "additionalProperties": false
        }
      },
      "required": [
        "dataPools",
        "metadataPool",
        "metadataServer"
      ],
      "type": "object",
      "additionalProperties": false
    },
    "status": {
      "description": "CephFilesystemStatus represents the status of a Ceph Filesystem",
      "properties": {
        "cephx": {
          "properties": {
            "daemon": {
              "description": "Daemon shows the CephX key status for local Ceph daemons associated with this resources.",
              "properties": {
                "keyCephVersion": {
                  "description": "KeyCephVersion reports the Ceph version that created the current generation's keys. This is\nsame string format as reported by `CephCluster.status.version.version` to allow them to be\ncompared. E.g., `20.2.0-0`.\nFor all newly-created resources, this field set to the version of Ceph that created the key.\nThe special value \"Uninitialized\" indicates that keys are being created for the first time.\nAn empty string indicates that the version is unknown, as expected in brownfield deployments.",
                  "type": "string"
                },
                "keyGeneration": {
                  "description": "KeyGeneration represents the CephX key generation for the last successful reconcile.\nFor all newly-created resources, this field is set to `1`.\nWhen keys are rotated due to any rotation policy, the generation is incremented or updated to\nthe configured policy generation.\nGeneration `0` indicates that keys existed prior to the implementation of key tracking.",
                  "format": "int32",
                  "type": "integer"
                }
              },
              "type": "object",
              "additionalProperties": false
            }
          },
          "type": "object",
          "additionalProperties": false
        },
        "conditions": {
          "items": {
            "description": "Condition represents a status condition on any Rook-Ceph Custom Resource.",
            "properties": {
              "lastHeartbeatTime": {
                "format": "date-time",
                "type": "string"
              },
              "lastTransitionTime": {
                "format": "date-time",
                "type": "string"
              },
              "message": {
                "type": "string"
              },
              "reason": {
                "description": "ConditionReason is a reason for a condition",
                "type": "string"
              },
              "status": {
                "type": "string"
              },
              "type": {
                "description": "ConditionType represent a resource's status",
                "type": "string"
              }
            },
            "type": "object",
            "additionalProperties": false
          },
          "type": "array"
        },
        "info": {
          "additionalProperties": {
            "type": "string"
          },
          "description": "Use only info and put mirroringStatus in it?",
          "nullable": true,
          "type": "object"
        },
        "mirroringStatus": {
          "description": "MirroringStatus is the filesystem mirroring status",
          "properties": {
            "daemonsStatus": {
              "description": "PoolMirroringStatus is the mirroring status of a filesystem",
              "items": {
                "description": "FilesystemMirrorInfoSpec is the filesystem mirror status of a given filesystem",
                "properties": {
                  "daemon_id": {
                    "description": "DaemonID is the cephfs-mirror name",
                    "type": "integer"
                  },
                  "filesystems": {
                    "description": "Filesystems is the list of filesystems managed by a given cephfs-mirror daemon",
                    "items": {
                      "description": "FilesystemsSpec is spec for the mirrored filesystem",
                      "properties": {
                        "directory_count": {
                          "description": "DirectoryCount is the number of directories in the filesystem",
                          "type": "integer"
                        },
                        "filesystem_id": {
                          "description": "FilesystemID is the filesystem identifier",
                          "type": "integer"
                        },
                        "name": {
                          "description": "Name is name of the filesystem",
                          "type": "string"
                        },
                        "peers": {
                          "description": "Peers represents the mirroring peers",
                          "items": {
                            "description": "FilesystemMirrorInfoPeerSpec is the specification of a filesystem peer mirror",
                            "properties": {
                              "remote": {
                                "description": "Remote are the remote cluster information",
                                "properties": {
                                  "client_name": {
                                    "description": "ClientName is cephx name",
                                    "type": "string"
                                  },
                                  "cluster_name": {
                                    "description": "ClusterName is the name of the cluster",
                                    "type": "string"
                                  },
                                  "fs_name": {
                                    "description": "FsName is the filesystem name",
                                    "type": "string"
                                  }
                                },
                                "type": "object",
                                "additionalProperties": false
                              },
                              "stats": {
                                "description": "Stats are the stat a peer mirror",
                                "properties": {
                                  "failure_count": {
                                    "description": "FailureCount is the number of mirroring failure",
                                    "type": "integer"
                                  },
                                  "recovery_count": {
                                    "description": "RecoveryCount is the number of recovery attempted after failures",
                                    "type": "integer"
                                  }
                                },
                                "type": "object",
                                "additionalProperties": false
                              },
                              "uuid": {
                                "description": "UUID is the peer unique identifier",
                                "type": "string"
                              }
                            },
                            "type": "object",
                            "additionalProperties": false
                          },
                          "type": "array"
                        }
                      },
                      "type": "object",
                      "additionalProperties": false
                    },
                    "type": "array"
                  }
                },
                "type": "object",
                "additionalProperties": false
              },
              "nullable": true,
              "type": "array"
            },
            "details": {
              "description": "Details contains potential status errors",
              "type": "string"
            },
            "lastChanged": {
              "description": "LastChanged is the last time time the status last changed",
              "type": "string"
            },
            "lastChecked": {
              "description": "LastChecked is the last time time the status was checked",
              "type": "string"
            }
          },
          "type": "object",
          "additionalProperties": false
        },
        "observedGeneration": {
          "description": "ObservedGeneration is the latest generation observed by the controller.",
          "format": "int64",
          "type": "integer"
        },
        "phase": {
          "description": "ConditionType represent a resource's status",
          "type": "string"
        },
        "snapshotScheduleStatus": {
          "description": "FilesystemSnapshotScheduleStatusSpec is the status of the snapshot schedule",
          "properties": {
            "details": {
              "description": "Details contains potential status errors",
              "type": "string"
            },
            "lastChanged": {
              "description": "LastChanged is the last time time the status last changed",
              "type": "string"
            },
            "lastChecked": {
              "description": "LastChecked is the last time time the status was checked",
              "type": "string"
            },
            "snapshotSchedules": {
              "description": "SnapshotSchedules is the list of snapshots scheduled",
              "items": {
                "description": "FilesystemSnapshotSchedulesSpec is the list of snapshot scheduled for images in a pool",
                "properties": {
                  "fs": {
                    "description": "Fs is the name of the Ceph Filesystem",
                    "type": "string"
                  },
                  "path": {
                    "description": "Path is the path on the filesystem",
                    "type": "string"
                  },
                  "rel_path": {
                    "type": "string"
                  },
                  "retention": {
                    "description": "FilesystemSnapshotScheduleStatusRetention is the retention specification for a filesystem snapshot schedule",
                    "properties": {
                      "active": {
                        "description": "Active is whether the scheduled is active or not",
                        "type": "boolean"
                      },
                      "created": {
                        "description": "Created is when the snapshot schedule was created",
                        "type": "string"
                      },
                      "created_count": {
                        "description": "CreatedCount is total amount of snapshots",
                        "type": "integer"
                      },
                      "first": {
                        "description": "First is when the first snapshot schedule was taken",
                        "type": "string"
                      },
                      "last": {
                        "description": "Last is when the last snapshot schedule was taken",
                        "type": "string"
                      },
                      "last_pruned": {
                        "description": "LastPruned is when the last snapshot schedule was pruned",
                        "type": "string"
                      },
                      "pruned_count": {
                        "description": "PrunedCount is total amount of pruned snapshots",
                        "type": "integer"
                      },
                      "start": {
                        "description": "Start is when the snapshot schedule starts",
                        "type": "string"
                      }
                    },
                    "type": "object",
                    "additionalProperties": false
                  },
                  "schedule": {
                    "type": "string"
                  },
                  "subvol": {
                    "description": "Subvol is the name of the sub volume",
                    "type": "string"
                  }
                },
                "type": "object",
                "additionalProperties": false
              },
              "nullable": true,
              "type": "array"
            }
          },
          "type": "object",
          "additionalProperties": false
        }
      },
      "type": "object",
      "x-kubernetes-preserve-unknown-fields": true,
      "additionalProperties": false
    }
  },
  "required": [
    "metadata",
    "spec"
  ],
  "type": "object"
}
