{
  "description": "UpdateRequest is a request to process mutate and generate rules in background.",
  "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": "ResourceSpec is the information to identify the trigger resource.",
      "properties": {
        "context": {
          "description": "Context ...",
          "properties": {
            "admissionRequestInfo": {
              "description": "AdmissionRequestInfoObject stores the admission request and operation details",
              "properties": {
                "admissionRequest": {
                  "description": "AdmissionRequest describes the admission.Attributes for the admission request.",
                  "properties": {
                    "dryRun": {
                      "description": "dryRun indicates that modifications will definitely not be persisted for this request.\nDefaults to false.",
                      "type": "boolean"
                    },
                    "kind": {
                      "description": "kind is the fully-qualified type of object being submitted (for example, v1.Pod or autoscaling.v1.Scale)",
                      "properties": {
                        "group": {
                          "type": "string"
                        },
                        "kind": {
                          "type": "string"
                        },
                        "version": {
                          "type": "string"
                        }
                      },
                      "required": [
                        "group",
                        "kind",
                        "version"
                      ],
                      "type": "object",
                      "additionalProperties": false
                    },
                    "name": {
                      "description": "name is the name of the object as presented in the request.  On a CREATE operation, the client may omit name and\nrely on the server to generate the name.  If that is the case, this field will contain an empty string.",
                      "type": "string"
                    },
                    "namespace": {
                      "description": "namespace is the namespace associated with the request (if any).",
                      "type": "string"
                    },
                    "object": {
                      "description": "object is the object from the incoming request.",
                      "type": "object",
                      "x-kubernetes-preserve-unknown-fields": true
                    },
                    "oldObject": {
                      "description": "oldObject is the existing object. Only populated for DELETE and UPDATE requests.",
                      "type": "object",
                      "x-kubernetes-preserve-unknown-fields": true
                    },
                    "operation": {
                      "description": "operation is the operation being performed. This may be different than the operation\nrequested. e.g. a patch can result in either a CREATE or UPDATE Operation.",
                      "type": "string"
                    },
                    "options": {
                      "description": "options is the operation option structure of the operation being performed.\ne.g. `meta.k8s.io/v1.DeleteOptions` or `meta.k8s.io/v1.CreateOptions`. This may be\ndifferent than the options the caller provided. e.g. for a patch request the performed\nOperation might be a CREATE, in which case the Options will a\n`meta.k8s.io/v1.CreateOptions` even though the caller provided `meta.k8s.io/v1.PatchOptions`.",
                      "type": "object",
                      "x-kubernetes-preserve-unknown-fields": true
                    },
                    "requestKind": {
                      "description": "requestKind is the fully-qualified type of the original API request (for example, v1.Pod or autoscaling.v1.Scale).\nIf this is specified and differs from the value in \"kind\", an equivalent match and conversion was performed.\n\nFor example, if deployments can be modified via apps/v1 and apps/v1beta1, and a webhook registered a rule of\n`apiGroups:[\"apps\"], apiVersions:[\"v1\"], resources: [\"deployments\"]` and `matchPolicy: Equivalent`,\nan API request to apps/v1beta1 deployments would be converted and sent to the webhook\nwith `kind: {group:\"apps\", version:\"v1\", kind:\"Deployment\"}` (matching the rule the webhook registered for),\nand `requestKind: {group:\"apps\", version:\"v1beta1\", kind:\"Deployment\"}` (indicating the kind of the original API request).\n\nSee documentation for the \"matchPolicy\" field in the webhook configuration type for more details.",
                      "properties": {
                        "group": {
                          "type": "string"
                        },
                        "kind": {
                          "type": "string"
                        },
                        "version": {
                          "type": "string"
                        }
                      },
                      "required": [
                        "group",
                        "kind",
                        "version"
                      ],
                      "type": "object",
                      "additionalProperties": false
                    },
                    "requestResource": {
                      "description": "requestResource is the fully-qualified resource of the original API request (for example, v1.pods).\nIf this is specified and differs from the value in \"resource\", an equivalent match and conversion was performed.\n\nFor example, if deployments can be modified via apps/v1 and apps/v1beta1, and a webhook registered a rule of\n`apiGroups:[\"apps\"], apiVersions:[\"v1\"], resources: [\"deployments\"]` and `matchPolicy: Equivalent`,\nan API request to apps/v1beta1 deployments would be converted and sent to the webhook\nwith `resource: {group:\"apps\", version:\"v1\", resource:\"deployments\"}` (matching the resource the webhook registered for),\nand `requestResource: {group:\"apps\", version:\"v1beta1\", resource:\"deployments\"}` (indicating the resource of the original API request).\n\nSee documentation for the \"matchPolicy\" field in the webhook configuration type.",
                      "properties": {
                        "group": {
                          "type": "string"
                        },
                        "resource": {
                          "type": "string"
                        },
                        "version": {
                          "type": "string"
                        }
                      },
                      "required": [
                        "group",
                        "resource",
                        "version"
                      ],
                      "type": "object",
                      "additionalProperties": false
                    },
                    "requestSubResource": {
                      "description": "requestSubResource is the name of the subresource of the original API request, if any (for example, \"status\" or \"scale\")\nIf this is specified and differs from the value in \"subResource\", an equivalent match and conversion was performed.\nSee documentation for the \"matchPolicy\" field in the webhook configuration type.",
                      "type": "string"
                    },
                    "resource": {
                      "description": "resource is the fully-qualified resource being requested (for example, v1.pods)",
                      "properties": {
                        "group": {
                          "type": "string"
                        },
                        "resource": {
                          "type": "string"
                        },
                        "version": {
                          "type": "string"
                        }
                      },
                      "required": [
                        "group",
                        "resource",
                        "version"
                      ],
                      "type": "object",
                      "additionalProperties": false
                    },
                    "subResource": {
                      "description": "subResource is the subresource being requested, if any (for example, \"status\" or \"scale\")",
                      "type": "string"
                    },
                    "uid": {
                      "description": "uid is an identifier for the individual request/response. It allows us to distinguish instances of requests which are\notherwise identical (parallel requests, requests when earlier requests did not modify etc)\nThe UID is meant to track the round trip (request/response) between the KAS and the WebHook, not the user request.\nIt is suitable for correlating log entries between the webhook and apiserver, for either auditing or debugging.",
                      "type": "string"
                    },
                    "userInfo": {
                      "description": "userInfo is information about the requesting user",
                      "properties": {
                        "extra": {
                          "additionalProperties": {
                            "description": "ExtraValue masks the value so protobuf can generate",
                            "items": {
                              "type": "string"
                            },
                            "type": "array"
                          },
                          "description": "Any additional information provided by the authenticator.",
                          "type": "object"
                        },
                        "groups": {
                          "description": "The names of groups this user is a part of.",
                          "items": {
                            "type": "string"
                          },
                          "type": "array",
                          "x-kubernetes-list-type": "atomic"
                        },
                        "uid": {
                          "description": "A unique value that identifies this user across time. If this user is\ndeleted and another user by the same name is added, they will have\ndifferent UIDs.",
                          "type": "string"
                        },
                        "username": {
                          "description": "The name that uniquely identifies this user among all active users.",
                          "type": "string"
                        }
                      },
                      "type": "object",
                      "additionalProperties": false
                    }
                  },
                  "required": [
                    "kind",
                    "operation",
                    "resource",
                    "uid",
                    "userInfo"
                  ],
                  "type": "object",
                  "additionalProperties": false
                },
                "operation": {
                  "description": "Operation is the type of resource operation being checked for admission control",
                  "type": "string"
                }
              },
              "type": "object",
              "additionalProperties": false
            },
            "userInfo": {
              "description": "RequestInfo contains permission info carried in an admission request.",
              "properties": {
                "clusterRoles": {
                  "description": "ClusterRoles is a list of possible clusterRoles send the request.",
                  "items": {
                    "type": "string"
                  },
                  "nullable": true,
                  "type": "array"
                },
                "roles": {
                  "description": "Roles is a list of possible role send the request.",
                  "items": {
                    "type": "string"
                  },
                  "nullable": true,
                  "type": "array"
                },
                "userInfo": {
                  "description": "UserInfo is the userInfo carried in the admission request.",
                  "properties": {
                    "extra": {
                      "additionalProperties": {
                        "description": "ExtraValue masks the value so protobuf can generate",
                        "items": {
                          "type": "string"
                        },
                        "type": "array"
                      },
                      "description": "Any additional information provided by the authenticator.",
                      "type": "object"
                    },
                    "groups": {
                      "description": "The names of groups this user is a part of.",
                      "items": {
                        "type": "string"
                      },
                      "type": "array",
                      "x-kubernetes-list-type": "atomic"
                    },
                    "uid": {
                      "description": "A unique value that identifies this user across time. If this user is\ndeleted and another user by the same name is added, they will have\ndifferent UIDs.",
                      "type": "string"
                    },
                    "username": {
                      "description": "The name that uniquely identifies this user among all active users.",
                      "type": "string"
                    }
                  },
                  "type": "object",
                  "additionalProperties": false
                }
              },
              "type": "object",
              "additionalProperties": false
            }
          },
          "type": "object",
          "additionalProperties": false
        },
        "deleteDownstream": {
          "description": "DeleteDownstream represents whether the downstream needs to be deleted.",
          "type": "boolean"
        },
        "policy": {
          "description": "Specifies the name of the policy.",
          "type": "string"
        },
        "requestType": {
          "description": "Type represents request type for background processing",
          "enum": [
            "mutate",
            "generate"
          ],
          "type": "string"
        },
        "resource": {
          "description": "ResourceSpec is the information to identify the trigger resource.",
          "properties": {
            "apiVersion": {
              "description": "APIVersion specifies resource apiVersion.",
              "type": "string"
            },
            "kind": {
              "description": "Kind specifies resource kind.",
              "type": "string"
            },
            "name": {
              "description": "Name specifies the resource name.",
              "type": "string"
            },
            "namespace": {
              "description": "Namespace specifies resource namespace.",
              "type": "string"
            },
            "uid": {
              "description": "UID specifies the resource uid.",
              "type": "string"
            }
          },
          "type": "object",
          "additionalProperties": false
        },
        "rule": {
          "description": "Rule is the associate rule name of the current UR.",
          "type": "string"
        },
        "synchronize": {
          "description": "Synchronize represents the sync behavior of the corresponding rule\nOptional. Defaults to \"false\" if not specified.",
          "type": "boolean"
        }
      },
      "required": [
        "context",
        "deleteDownstream",
        "policy",
        "resource",
        "rule"
      ],
      "type": "object",
      "additionalProperties": false
    },
    "status": {
      "description": "Status contains statistics related to update request.",
      "properties": {
        "generatedResources": {
          "description": "This will track the resources that are updated by the generate Policy.\nWill be used during clean up resources.",
          "items": {
            "properties": {
              "apiVersion": {
                "description": "APIVersion specifies resource apiVersion.",
                "type": "string"
              },
              "kind": {
                "description": "Kind specifies resource kind.",
                "type": "string"
              },
              "name": {
                "description": "Name specifies the resource name.",
                "type": "string"
              },
              "namespace": {
                "description": "Namespace specifies resource namespace.",
                "type": "string"
              },
              "uid": {
                "description": "UID specifies the resource uid.",
                "type": "string"
              }
            },
            "type": "object",
            "additionalProperties": false
          },
          "type": "array"
        },
        "handler": {
          "description": "Deprecated",
          "type": "string"
        },
        "message": {
          "description": "Specifies request status message.",
          "type": "string"
        },
        "retryCount": {
          "type": "integer"
        },
        "state": {
          "description": "State represents state of the update request.",
          "type": "string"
        }
      },
      "required": [
        "state"
      ],
      "type": "object",
      "additionalProperties": false
    }
  },
  "type": "object"
}
