{
  "description": "CephBlockPoolRadosNamespace represents a Ceph BlockPool Rados Namespace",
  "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": "Spec represents the specification of a Ceph BlockPool Rados Namespace",
      "properties": {
        "blockPoolName": {
          "description": "BlockPoolName is the name of Ceph BlockPool. Typically it's the name of\nthe CephBlockPool CR.",
          "type": "string",
          "x-kubernetes-validations": [
            {
              "message": "blockPoolName is immutable",
              "rule": "self == oldSelf"
            }
          ]
        },
        "clusterID": {
          "description": "ClusterID to be used for this RadosNamespace in the CSI configuration.\nIt must be unique among all Ceph clusters managed by Rook.\nIf not specified, the clusterID will be generated and can be found in the CR status.",
          "maxLength": 36,
          "minLength": 1,
          "pattern": "^[a-zA-Z0-9_-]+$",
          "type": "string",
          "x-kubernetes-validations": [
            {
              "message": "ClusterID is immutable",
              "rule": "self == oldSelf"
            }
          ]
        },
        "mirroring": {
          "description": "Mirroring configuration of CephBlockPoolRadosNamespace",
          "properties": {
            "mode": {
              "description": "Mode is the mirroring mode; either pool or image.",
              "enum": [
                "",
                "pool",
                "image"
              ],
              "type": "string"
            },
            "remoteNamespace": {
              "description": "RemoteNamespace is the name of the CephBlockPoolRadosNamespace on the secondary cluster CephBlockPool",
              "type": "string"
            },
            "snapshotSchedules": {
              "description": "SnapshotSchedules is the scheduling of snapshot for mirrored images",
              "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"
            }
          },
          "required": [
            "mode"
          ],
          "type": "object",
          "additionalProperties": false
        },
        "name": {
          "description": "The name of the CephBlockPoolRadosNamespaceSpec namespace. If not set, the default is the name of the CR.",
          "type": "string",
          "x-kubernetes-validations": [
            {
              "message": "name is immutable",
              "rule": "self == oldSelf"
            }
          ]
        }
      },
      "required": [
        "blockPoolName"
      ],
      "type": "object",
      "additionalProperties": false
    },
    "status": {
      "description": "Status represents the status of a CephBlockPool Rados Namespace",
      "properties": {
        "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"
          },
          "nullable": true,
          "type": "object"
        },
        "mirroringInfo": {
          "description": "MirroringInfoSpec is the status of the pool/radosnamespace mirroring",
          "properties": {
            "details": {
              "type": "string"
            },
            "lastChanged": {
              "type": "string"
            },
            "lastChecked": {
              "type": "string"
            },
            "mode": {
              "description": "Mode is the mirroring mode",
              "type": "string"
            },
            "peers": {
              "description": "Peers are the list of peer sites connected to that cluster",
              "items": {
                "description": "PeersSpec contains peer details",
                "properties": {
                  "client_name": {
                    "description": "ClientName is the CephX user used to connect to the peer",
                    "type": "string"
                  },
                  "direction": {
                    "description": "Direction is the peer mirroring direction",
                    "type": "string"
                  },
                  "mirror_uuid": {
                    "description": "MirrorUUID is the mirror UUID",
                    "type": "string"
                  },
                  "site_name": {
                    "description": "SiteName is the current site name",
                    "type": "string"
                  },
                  "uuid": {
                    "description": "UUID is the peer UUID",
                    "type": "string"
                  }
                },
                "type": "object",
                "additionalProperties": false
              },
              "type": "array"
            },
            "site_name": {
              "description": "SiteName is the current site name",
              "type": "string"
            }
          },
          "type": "object",
          "additionalProperties": false
        },
        "mirroringStatus": {
          "description": "MirroringStatusSpec is the status of the pool/radosNamespace mirroring",
          "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"
            },
            "summary": {
              "description": "Summary is the mirroring status summary",
              "properties": {
                "daemon_health": {
                  "description": "DaemonHealth is the health of the mirroring daemon",
                  "type": "string"
                },
                "group_health": {
                  "description": "GroupHealth is the health of the mirrored image group",
                  "nullable": true,
                  "type": "string"
                },
                "group_states": {
                  "description": "GroupStates is the various state for all mirrored image groups",
                  "nullable": true,
                  "properties": {
                    "error": {
                      "description": "Error is when the mirroring state is errored",
                      "type": "integer"
                    },
                    "replaying": {
                      "description": "Replaying is when the replay of the mirroring journal is on-going",
                      "type": "integer"
                    },
                    "starting_replay": {
                      "description": "StartingReplay is when the replay of the mirroring journal starts",
                      "type": "integer"
                    },
                    "stopped": {
                      "description": "Stopped is when the mirroring state is stopped",
                      "type": "integer"
                    },
                    "stopping_replay": {
                      "description": "StopReplaying is when the replay of the mirroring journal stops",
                      "type": "integer"
                    },
                    "syncing": {
                      "description": "Syncing is when the image is syncing",
                      "type": "integer"
                    },
                    "unknown": {
                      "description": "Unknown is when the mirroring state is unknown",
                      "type": "integer"
                    }
                  },
                  "type": "object",
                  "additionalProperties": false
                },
                "health": {
                  "description": "Health is the mirroring health",
                  "type": "string"
                },
                "image_health": {
                  "description": "ImageHealth is the health of the mirrored image",
                  "type": "string"
                },
                "image_states": {
                  "description": "ImageStates is the various state for all mirrored images",
                  "nullable": true,
                  "properties": {
                    "error": {
                      "description": "Error is when the mirroring state is errored",
                      "type": "integer"
                    },
                    "replaying": {
                      "description": "Replaying is when the replay of the mirroring journal is on-going",
                      "type": "integer"
                    },
                    "starting_replay": {
                      "description": "StartingReplay is when the replay of the mirroring journal starts",
                      "type": "integer"
                    },
                    "stopped": {
                      "description": "Stopped is when the mirroring state is stopped",
                      "type": "integer"
                    },
                    "stopping_replay": {
                      "description": "StopReplaying is when the replay of the mirroring journal stops",
                      "type": "integer"
                    },
                    "syncing": {
                      "description": "Syncing is when the image is syncing",
                      "type": "integer"
                    },
                    "unknown": {
                      "description": "Unknown is when the mirroring state is unknown",
                      "type": "integer"
                    }
                  },
                  "type": "object",
                  "additionalProperties": false
                },
                "states": {
                  "description": "States is the various state for all mirrored images",
                  "nullable": true,
                  "properties": {
                    "error": {
                      "description": "Error is when the mirroring state is errored",
                      "type": "integer"
                    },
                    "replaying": {
                      "description": "Replaying is when the replay of the mirroring journal is on-going",
                      "type": "integer"
                    },
                    "starting_replay": {
                      "description": "StartingReplay is when the replay of the mirroring journal starts",
                      "type": "integer"
                    },
                    "stopped": {
                      "description": "Stopped is when the mirroring state is stopped",
                      "type": "integer"
                    },
                    "stopping_replay": {
                      "description": "StopReplaying is when the replay of the mirroring journal stops",
                      "type": "integer"
                    },
                    "syncing": {
                      "description": "Syncing is when the image is syncing",
                      "type": "integer"
                    },
                    "unknown": {
                      "description": "Unknown is when the mirroring state is unknown",
                      "type": "integer"
                    }
                  },
                  "type": "object",
                  "additionalProperties": false
                }
              },
              "type": "object",
              "additionalProperties": false
            }
          },
          "type": "object",
          "additionalProperties": false
        },
        "phase": {
          "description": "ConditionType represent a resource's status",
          "type": "string"
        },
        "snapshotScheduleStatus": {
          "description": "SnapshotScheduleStatusSpec 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": "SnapshotSchedulesSpec is the list of snapshot scheduled for images in a pool",
                "properties": {
                  "image": {
                    "description": "Image is the mirrored image",
                    "type": "string"
                  },
                  "items": {
                    "description": "Items is the list schedules times for a given snapshot",
                    "items": {
                      "description": "SnapshotSchedule is a schedule",
                      "properties": {
                        "interval": {
                          "description": "Interval is the interval in which snapshots will be taken",
                          "type": "string"
                        },
                        "start_time": {
                          "description": "StartTime is the snapshot starting time",
                          "type": "string"
                        }
                      },
                      "type": "object",
                      "additionalProperties": false
                    },
                    "type": "array"
                  },
                  "namespace": {
                    "description": "Namespace is the RADOS namespace the image is part of",
                    "type": "string"
                  },
                  "pool": {
                    "description": "Pool is the pool name",
                    "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"
}
