{
  "description": "Auto-generated derived type for OnionKeySpec via `CustomResource`",
  "properties": {
    "spec": {
      "additionalProperties": false,
      "description": "An `OnionKey` is an abstraction of a Tor Onion Key.\n\nA Tor Onion Key consists of the following files:\n\n- `hostname`\n- `hs_ed25519_public_key`\n- `hs_ed25519_public_key`\n\nA user can import their existing Tor Onion Key by creating a secret.\n\n```ignore\nkubectl create secret generic tor-ingress-example \\\n  --from-file=hostname=./hostname \\\n  --from-file=hs_ed25519_public_key=./hs_ed25519_public_key \\\n  --from-file=hs_ed25519_secret_key=./hs_ed25519_secret_key\n```\n\nA user can have the Tor Operator create a new random Tor Onion Key by using the\nauto generate feature controlled by `.autoGenerate`.",
      "properties": {
        "autoGenerate": {
          "default": false,
          "description": "Auto generate a random Onion Key. default: false.\n\n## Auto Generate: False\n\nTor Operator will use an existing Onion Key from the Secret specified\nin `.secret.name`.\n\n## Auto Generate: True\n\nThe Tor Operator will generate a random Onion Key and save it in the\nsecret specified in `.secret.name`.\n\nIf the `OnionKey`'s secret key is missing or malformed, the Tor Operator\nwill recreate the secret key.\n\nIf the `OnionKey`'s public key is missing, malformed, or does not match\nthe secret key, the Tor Operator will deterministically recreate the\npublic key from the secret key.\n\nIf the `OnionKey`'s hostname is missing, malformed, or does not match\nthe public key, the Tor Operator will deterministically recreate the\nhostname from the public key.",
          "title": "Auto Generate",
          "type": [
            "boolean",
            "null"
          ]
        },
        "secret": {
          "additionalProperties": false,
          "description": "Secret settings.",
          "properties": {
            "annotations": {
              "additionalProperties": {
                "type": "string"
              },
              "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: \u003chttp://kubernetes.io/docs/user-guide/annotations\u003e",
              "nullable": true,
              "type": [
                "object",
                "null"
              ]
            },
            "labels": {
              "additionalProperties": {
                "type": "string"
              },
              "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: \u003chttp://kubernetes.io/docs/user-guide/labels\u003e",
              "nullable": true,
              "type": [
                "object",
                "null"
              ]
            },
            "name": {
              "description": "Name of the secret.\n\nSecret data must have keys `hostname`, `hs_ed25519_public_key` and\n`hs_ed25519_secret_key`.",
              "type": "string"
            }
          },
          "required": [
            "name"
          ],
          "type": "object"
        }
      },
      "required": [
        "secret"
      ],
      "title": "`OnionKey`",
      "type": "object"
    },
    "status": {
      "additionalProperties": false,
      "nullable": true,
      "properties": {
        "autoGenerated": {
          "description": "Auto generated `OnionKey`.",
          "type": "boolean"
        },
        "conditions": {
          "description": "Represents the latest available observations of a deployment's current state.\n\n### Ready\n\n`SecretNotFound`,\n`SecretKeyNotFound`, `SecretKeyMalformed`,\n`PublicKeyNotFound`, `PublicKeyMalformed`, `PublicKeyMismatch`,\n`HostnameNotFound`, `HostnameMalformed`, `HostnameMismatch`,\n`Ready`",
          "items": {
            "additionalProperties": false,
            "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. This 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. This may be an empty string.",
                "type": "string"
              },
              "observedGeneration": {
                "description": "observedGeneration represents the .metadata.generation that the condition was set based upon. For instance, if .metadata.generation is currently 12, but the .status.conditions[x].observedGeneration is 9, the condition is out of date with respect to the current state of the instance.",
                "format": "int64",
                "type": [
                  "integer",
                  "null"
                ]
              },
              "reason": {
                "description": "reason contains a programmatic identifier indicating the reason for the condition's last transition. Producers of specific condition types may define expected values and meanings for this field, and whether the values are considered a guaranteed API. The value should be a CamelCase string. This field may not be empty.",
                "type": "string"
              },
              "status": {
                "description": "status of the condition, one of True, False, Unknown.",
                "type": "string"
              },
              "type": {
                "description": "type of condition in CamelCase or in foo.example.com/CamelCase.",
                "type": "string"
              }
            },
            "required": [
              "lastTransitionTime",
              "message",
              "reason",
              "status",
              "type"
            ],
            "type": "object"
          },
          "type": [
            "array",
            "null"
          ]
        },
        "hostname": {
          "description": "`OnionKey` hostname.\n\nThe hostname is only populated once `state` is ready.",
          "nullable": true,
          "type": [
            "string",
            "null"
          ]
        },
        "summary": {
          "additionalProperties": {
            "type": "string"
          },
          "default": {},
          "description": "Represents the latest available observations of a deployment's current state.",
          "type": [
            "object",
            "null"
          ]
        }
      },
      "required": [
        "autoGenerated"
      ],
      "type": [
        "object",
        "null"
      ]
    }
  },
  "required": [
    "spec"
  ],
  "title": "OnionKey",
  "type": "object"
}