{
    "description": "Backup provides configuration for performing backups of the openshift cluster. \n Compatibility level 4: No compatibility is provided, the API can change at any point for any reason. These capabilities should not be used by applications needing long term support.",
    "properties": {
        "apiVersion": {
            "description": "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources",
            "type": "string"
        },
        "kind": {
            "description": "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds",
            "type": "string"
        },
        "metadata": {
            "type": "object"
        },
        "spec": {
            "description": "spec holds user settable values for configuration",
            "properties": {
                "etcd": {
                    "description": "etcd specifies the configuration for periodic backups of the etcd cluster",
                    "properties": {
                        "pvcName": {
                            "description": "PVCName specifies the name of the PersistentVolumeClaim (PVC) which binds a PersistentVolume where the etcd backup files would be saved The PVC itself must always be created in the \"openshift-etcd\" namespace If the PVC is left unspecified \"\" then the platform will choose a reasonable default location to save the backup. In the future this would be backups saved across the control-plane master nodes.",
                            "type": "string"
                        },
                        "retentionPolicy": {
                            "description": "RetentionPolicy defines the retention policy for retaining and deleting existing backups.",
                            "properties": {
                                "retentionNumber": {
                                    "description": "RetentionNumber configures the retention policy based on the number of backups",
                                    "properties": {
                                        "maxNumberOfBackups": {
                                            "description": "MaxNumberOfBackups defines the maximum number of backups to retain. If the existing number of backups saved is equal to MaxNumberOfBackups then the oldest backup will be removed before a new backup is initiated.",
                                            "minimum": 1,
                                            "type": "integer"
                                        }
                                    },
                                    "required": [
                                        "maxNumberOfBackups"
                                    ],
                                    "type": "object",
                                    "additionalProperties": false
                                },
                                "retentionSize": {
                                    "description": "RetentionSize configures the retention policy based on the size of backups",
                                    "properties": {
                                        "maxSizeOfBackupsGb": {
                                            "description": "MaxSizeOfBackupsGb defines the total size in GB of backups to retain. If the current total size backups exceeds MaxSizeOfBackupsGb then the oldest backup will be removed before a new backup is initiated.",
                                            "minimum": 1,
                                            "type": "integer"
                                        }
                                    },
                                    "required": [
                                        "maxSizeOfBackupsGb"
                                    ],
                                    "type": "object",
                                    "additionalProperties": false
                                },
                                "retentionType": {
                                    "allOf": [
                                        {
                                            "enum": [
                                                "RetentionNumber",
                                                "RetentionSize"
                                            ]
                                        },
                                        {
                                            "enum": [
                                                "",
                                                "RetentionNumber",
                                                "RetentionSize"
                                            ]
                                        }
                                    ],
                                    "description": "RetentionType sets the type of retention policy. Currently, the only valid policies are retention by number of backups (RetentionNumber), by the size of backups (RetentionSize). More policies or types may be added in the future. Empty string means no opinion and the platform is left to choose a reasonable default which is subject to change without notice. The current default is RetentionNumber with 15 backups kept.",
                                    "type": "string"
                                }
                            },
                            "required": [
                                "retentionType"
                            ],
                            "type": "object",
                            "additionalProperties": false
                        },
                        "schedule": {
                            "description": "Schedule defines the recurring backup schedule in Cron format every 2 hours: 0 */2 * * * every day at 3am: 0 3 * * * Empty string means no opinion and the platform is left to choose a reasonable default which is subject to change without notice. The current default is \"no backups\", but will change in the future.",
                            "pattern": "^(@(annually|yearly|monthly|weekly|daily|hourly))|(\\*|(?:\\*|(?:[0-9]|(?:[1-5][0-9])))\\/(?:[0-9]|(?:[1-5][0-9]))|(?:[0-9]|(?:[1-5][0-9]))(?:(?:\\-[0-9]|\\-(?:[1-5][0-9]))?|(?:\\,(?:[0-9]|(?:[1-5][0-9])))*)) (\\*|(?:\\*|(?:\\*|(?:[0-9]|1[0-9]|2[0-3])))\\/(?:[0-9]|1[0-9]|2[0-3])|(?:[0-9]|1[0-9]|2[0-3])(?:(?:\\-(?:[0-9]|1[0-9]|2[0-3]))?|(?:\\,(?:[0-9]|1[0-9]|2[0-3]))*)) (\\*|(?:[1-9]|(?:[12][0-9])|3[01])(?:(?:\\-(?:[1-9]|(?:[12][0-9])|3[01]))?|(?:\\,(?:[1-9]|(?:[12][0-9])|3[01]))*)) (\\*|(?:[1-9]|1[012]|JAN|FEB|MAR|APR|MAY|JUN|JUL|AUG|SEP|OCT|NOV|DEC)(?:(?:\\-(?:[1-9]|1[012]|JAN|FEB|MAR|APR|MAY|JUN|JUL|AUG|SEP|OCT|NOV|DEC))?|(?:\\,(?:[1-9]|1[012]|JAN|FEB|MAR|APR|MAY|JUN|JUL|AUG|SEP|OCT|NOV|DEC))*)) (\\*|(?:[0-6]|SUN|MON|TUE|WED|THU|FRI|SAT)(?:(?:\\-(?:[0-6]|SUN|MON|TUE|WED|THU|FRI|SAT))?|(?:\\,(?:[0-6]|SUN|MON|TUE|WED|THU|FRI|SAT))*))$",
                            "type": "string"
                        },
                        "timeZone": {
                            "description": "The time zone name for the given schedule, see https://en.wikipedia.org/wiki/List_of_tz_database_time_zones. If not specified, this will default to the time zone of the kube-controller-manager process. See https://kubernetes.io/docs/concepts/workloads/controllers/cron-jobs/#time-zones",
                            "pattern": "^([A-Za-z_]+([+-]*0)*|[A-Za-z_]+(\\/[A-Za-z_]+){1,2})(\\/GMT[+-]\\d{1,2})?$",
                            "type": "string"
                        }
                    },
                    "type": "object",
                    "additionalProperties": false
                }
            },
            "required": [
                "etcd"
            ],
            "type": "object",
            "additionalProperties": false
        },
        "status": {
            "description": "status holds observed values from the cluster. They may not be overridden.",
            "type": "object"
        }
    },
    "required": [
        "spec"
    ],
    "type": "object",
    "additionalProperties": false,
    "$schema": "http://json-schema.org/draft-04/schema#"
}
