{
  "description": "AtlasMigration is the Schema for the atlasmigrations API",
  "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": "AtlasMigrationSpec defines the desired state of AtlasMigration",
      "properties": {
        "baseline": {
          "description": "BaselineVersion defines the baseline version of the database on the first migration.",
          "type": "string"
        },
        "cloud": {
          "description": "Cloud defines the Atlas Cloud configuration.",
          "properties": {
            "project": {
              "type": "string"
            },
            "tokenFrom": {
              "description": "TokenFrom defines a reference to a secret key that contains the Atlas Cloud Token",
              "properties": {
                "secretKeyRef": {
                  "description": "SecretKeyRef references to the key of a secret in the same namespace.",
                  "properties": {
                    "key": {
                      "description": "The key of the secret to select from.  Must be a valid secret key.",
                      "type": "string"
                    },
                    "name": {
                      "default": "",
                      "description": "Name of the referent.\nThis field is effectively required, but due to backwards compatibility is\nallowed to be empty. Instances of this type with an empty value here are\nalmost certainly wrong.\nMore info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names",
                      "type": "string"
                    },
                    "optional": {
                      "description": "Specify whether the Secret or its key must be defined",
                      "type": "boolean"
                    }
                  },
                  "required": [
                    "key"
                  ],
                  "type": "object",
                  "x-kubernetes-map-type": "atomic",
                  "additionalProperties": false
                }
              },
              "type": "object",
              "additionalProperties": false
            },
            "url": {
              "type": "string"
            }
          },
          "type": "object",
          "additionalProperties": false
        },
        "credentials": {
          "description": "Credentials defines the credentials to use when connecting to the database.\nUsed instead of URL or URLFrom.",
          "properties": {
            "database": {
              "type": "string"
            },
            "host": {
              "type": "string"
            },
            "hostFrom": {
              "description": "Secret defines a secret key reference.",
              "properties": {
                "secretKeyRef": {
                  "description": "SecretKeyRef defines the secret key reference to use for the user.",
                  "properties": {
                    "key": {
                      "description": "The key of the secret to select from.  Must be a valid secret key.",
                      "type": "string"
                    },
                    "name": {
                      "default": "",
                      "description": "Name of the referent.\nThis field is effectively required, but due to backwards compatibility is\nallowed to be empty. Instances of this type with an empty value here are\nalmost certainly wrong.\nMore info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names",
                      "type": "string"
                    },
                    "optional": {
                      "description": "Specify whether the Secret or its key must be defined",
                      "type": "boolean"
                    }
                  },
                  "required": [
                    "key"
                  ],
                  "type": "object",
                  "x-kubernetes-map-type": "atomic",
                  "additionalProperties": false
                }
              },
              "type": "object",
              "additionalProperties": false
            },
            "parameters": {
              "additionalProperties": {
                "type": "string"
              },
              "type": "object"
            },
            "password": {
              "type": "string"
            },
            "passwordFrom": {
              "description": "Secret defines a secret key reference.",
              "properties": {
                "secretKeyRef": {
                  "description": "SecretKeyRef defines the secret key reference to use for the user.",
                  "properties": {
                    "key": {
                      "description": "The key of the secret to select from.  Must be a valid secret key.",
                      "type": "string"
                    },
                    "name": {
                      "default": "",
                      "description": "Name of the referent.\nThis field is effectively required, but due to backwards compatibility is\nallowed to be empty. Instances of this type with an empty value here are\nalmost certainly wrong.\nMore info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names",
                      "type": "string"
                    },
                    "optional": {
                      "description": "Specify whether the Secret or its key must be defined",
                      "type": "boolean"
                    }
                  },
                  "required": [
                    "key"
                  ],
                  "type": "object",
                  "x-kubernetes-map-type": "atomic",
                  "additionalProperties": false
                }
              },
              "type": "object",
              "additionalProperties": false
            },
            "port": {
              "type": "integer"
            },
            "scheme": {
              "type": "string"
            },
            "user": {
              "type": "string"
            },
            "userFrom": {
              "description": "Secret defines a secret key reference.",
              "properties": {
                "secretKeyRef": {
                  "description": "SecretKeyRef defines the secret key reference to use for the user.",
                  "properties": {
                    "key": {
                      "description": "The key of the secret to select from.  Must be a valid secret key.",
                      "type": "string"
                    },
                    "name": {
                      "default": "",
                      "description": "Name of the referent.\nThis field is effectively required, but due to backwards compatibility is\nallowed to be empty. Instances of this type with an empty value here are\nalmost certainly wrong.\nMore info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names",
                      "type": "string"
                    },
                    "optional": {
                      "description": "Specify whether the Secret or its key must be defined",
                      "type": "boolean"
                    }
                  },
                  "required": [
                    "key"
                  ],
                  "type": "object",
                  "x-kubernetes-map-type": "atomic",
                  "additionalProperties": false
                }
              },
              "type": "object",
              "additionalProperties": false
            }
          },
          "type": "object",
          "additionalProperties": false
        },
        "devURL": {
          "description": "DevURL is the URL of the database to use for normalization and calculations.\nIf not specified, the operator will spin up a temporary database container to use for these operations.",
          "type": "string"
        },
        "devURLFrom": {
          "description": "DevURLFrom is a reference to a secret containing the URL of the database to use for normalization and calculations.",
          "properties": {
            "secretKeyRef": {
              "description": "SecretKeyRef defines the secret key reference to use for the user.",
              "properties": {
                "key": {
                  "description": "The key of the secret to select from.  Must be a valid secret key.",
                  "type": "string"
                },
                "name": {
                  "default": "",
                  "description": "Name of the referent.\nThis field is effectively required, but due to backwards compatibility is\nallowed to be empty. Instances of this type with an empty value here are\nalmost certainly wrong.\nMore info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names",
                  "type": "string"
                },
                "optional": {
                  "description": "Specify whether the Secret or its key must be defined",
                  "type": "boolean"
                }
              },
              "required": [
                "key"
              ],
              "type": "object",
              "x-kubernetes-map-type": "atomic",
              "additionalProperties": false
            }
          },
          "type": "object",
          "additionalProperties": false
        },
        "dir": {
          "description": "Dir defines the directory to use for migrations as a configmap key reference.",
          "properties": {
            "configMapRef": {
              "description": "ConfigMapRef defines the configmap to use for migrations",
              "properties": {
                "name": {
                  "default": "",
                  "description": "Name of the referent.\nThis field is effectively required, but due to backwards compatibility is\nallowed to be empty. Instances of this type with an empty value here are\nalmost certainly wrong.\nMore info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names",
                  "type": "string"
                }
              },
              "type": "object",
              "x-kubernetes-map-type": "atomic",
              "additionalProperties": false
            },
            "local": {
              "additionalProperties": {
                "type": "string"
              },
              "description": "Local defines the local migration directory.",
              "type": "object"
            },
            "remote": {
              "description": "Remote defines the Atlas Cloud migration directory.",
              "properties": {
                "name": {
                  "type": "string"
                },
                "tag": {
                  "type": "string"
                }
              },
              "type": "object",
              "additionalProperties": false
            }
          },
          "type": "object",
          "additionalProperties": false
        },
        "envName": {
          "description": "EnvName sets the environment name used for reporting runs to Atlas Cloud.",
          "type": "string"
        },
        "execOrder": {
          "default": "linear",
          "description": "ExecOrder controls how Atlas computes and executes pending migration files to the database.",
          "enum": [
            "linear",
            "linear-skip",
            "non-linear"
          ],
          "type": "string"
        },
        "protectedFlows": {
          "description": "ProtectedFlows defines the protected flows of a deployment.",
          "properties": {
            "migrateDown": {
              "description": "DeploymentFlow defines the flow of a deployment.",
              "properties": {
                "allow": {
                  "default": false,
                  "description": "Allow allows the flow to be executed.",
                  "type": "boolean"
                },
                "autoApprove": {
                  "default": false,
                  "description": "AutoApprove allows the flow to be automatically approved.",
                  "type": "boolean"
                }
              },
              "type": "object",
              "additionalProperties": false
            }
          },
          "type": "object",
          "additionalProperties": false
        },
        "revisionsSchema": {
          "description": "RevisionsSchema defines the schema that revisions table resides in",
          "type": "string"
        },
        "url": {
          "description": "URL of the target database schema.",
          "type": "string"
        },
        "urlFrom": {
          "description": "URLs may be defined as a secret key reference.",
          "properties": {
            "secretKeyRef": {
              "description": "SecretKeyRef defines the secret key reference to use for the user.",
              "properties": {
                "key": {
                  "description": "The key of the secret to select from.  Must be a valid secret key.",
                  "type": "string"
                },
                "name": {
                  "default": "",
                  "description": "Name of the referent.\nThis field is effectively required, but due to backwards compatibility is\nallowed to be empty. Instances of this type with an empty value here are\nalmost certainly wrong.\nMore info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names",
                  "type": "string"
                },
                "optional": {
                  "description": "Specify whether the Secret or its key must be defined",
                  "type": "boolean"
                }
              },
              "required": [
                "key"
              ],
              "type": "object",
              "x-kubernetes-map-type": "atomic",
              "additionalProperties": false
            }
          },
          "type": "object",
          "additionalProperties": false
        }
      },
      "required": [
        "dir"
      ],
      "type": "object",
      "additionalProperties": false
    },
    "status": {
      "description": "AtlasMigrationStatus defines the observed state of AtlasMigration",
      "properties": {
        "approvalUrl": {
          "description": "ApprovalURL is the URL to approve the migration.",
          "type": "string"
        },
        "conditions": {
          "description": "Conditions represent the latest available observations of an object's state.",
          "items": {
            "description": "Condition contains details for one aspect of the current state of this API Resource.",
            "properties": {
              "lastTransitionTime": {
                "description": "lastTransitionTime is the last time the condition transitioned from one status to another.\nThis should be when the underlying condition changed.  If that is not known, then using the time when the API field changed is acceptable.",
                "format": "date-time",
                "type": "string"
              },
              "message": {
                "description": "message is a human readable message indicating details about the transition.\nThis may be an empty string.",
                "maxLength": 32768,
                "type": "string"
              },
              "observedGeneration": {
                "description": "observedGeneration represents the .metadata.generation that the condition was set based upon.\nFor instance, if .metadata.generation is currently 12, but the .status.conditions[x].observedGeneration is 9, the condition is out of date\nwith respect to the current state of the instance.",
                "format": "int64",
                "minimum": 0,
                "type": "integer"
              },
              "reason": {
                "description": "reason contains a programmatic identifier indicating the reason for the condition's last transition.\nProducers of specific condition types may define expected values and meanings for this field,\nand whether the values are considered a guaranteed API.\nThe value should be a CamelCase string.\nThis field may not be empty.",
                "maxLength": 1024,
                "minLength": 1,
                "pattern": "^[A-Za-z]([A-Za-z0-9_,:]*[A-Za-z0-9_])?$",
                "type": "string"
              },
              "status": {
                "description": "status of the condition, one of True, False, Unknown.",
                "enum": [
                  "True",
                  "False",
                  "Unknown"
                ],
                "type": "string"
              },
              "type": {
                "description": "type of condition in CamelCase or in foo.example.com/CamelCase.",
                "maxLength": 316,
                "pattern": "^([a-z0-9]([-a-z0-9]*[a-z0-9])?(\\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*/)?(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])$",
                "type": "string"
              }
            },
            "required": [
              "lastTransitionTime",
              "message",
              "reason",
              "status",
              "type"
            ],
            "type": "object",
            "additionalProperties": false
          },
          "type": "array"
        },
        "lastApplied": {
          "description": "LastApplied is the unix timestamp of the most recent successful versioned migration.",
          "format": "int64",
          "type": "integer"
        },
        "lastAppliedVersion": {
          "description": "LastAppliedVersion is the version of the most recent successful versioned migration.",
          "type": "string"
        },
        "lastDeploymentUrl": {
          "description": "LastDeploymentURL is the Deployment URL of the most recent successful versioned migration.",
          "type": "string"
        },
        "observed_hash": {
          "description": "ObservedHash is the hash of the most recent successful versioned migration.",
          "type": "string"
        }
      },
      "required": [
        "lastApplied",
        "observed_hash"
      ],
      "type": "object",
      "additionalProperties": false
    }
  },
  "type": "object"
}
