{
  "name": "kubernetes-ingress-nginx",
  "displayName": "NGINX Ingress Controller",
  "version": "0.1.3",
  "description": "Strongly-typed NGINX Ingress Controller installation",
  "keywords": [
    "pulumi",
    "kubernetes",
    "nginx",
    "kind/component",
    "category/infrastructure"
  ],
  "homepage": "https://pulumi.io",
  "license": "Apache-2.0",
  "repository": "https://github.com/pulumi/pulumi-kubernetes-ingress-nginx",
  "publisher": "Pulumi",
  "meta": {
    "moduleFormat": "(.*)"
  },
  "language": {
    "csharp": {
      "namespaces": {
        "kubernetes-ingress-nginx": "KubernetesIngressNginx"
      },
      "packageReferences": {
        "Pulumi": "3.*",
        "Pulumi.Kubernetes": "4.*"
      },
      "respectSchemaVersion": true
    },
    "go": {
      "generateResourceContainerTypes": true,
      "importBasePath": "github.com/pulumi/pulumi-kubernetes-ingress-nginx/sdk/go/kubernetes-ingress-nginx",
      "generateExtraInputTypes": true,
      "respectSchemaVersion": true
    },
    "java": {
      "basePackage": "",
      "buildFiles": "gradle",
      "dependencies": {
        "com.google.code.findbugs:jsr305": "3.0.2",
        "com.google.code.gson:gson": "2.8.9",
        "com.pulumi:pulumi": "1.0.0",
        "com.pulumi:kubernetes": "4.21.0"
      },
      "gradleNexusPublishPluginVersion": "2.0.0",
      "gradleTest": ""
    },
    "nodejs": {
      "dependencies": {
        "@pulumi/pulumi": "^3.0.0",
        "@pulumi/kubernetes": "^4.0.0"
      },
      "devDependencies": {
        "typescript": "^4.3.5"
      },
      "respectSchemaVersion": true
    },
    "python": {
      "requires": {
        "pulumi": ">=3.0.0,<4.0.0",
        "pulumi-kubernetes": ">=4.0.0,<5.0.0"
      },
      "pyproject": {
        "enabled": true
      },
      "respectSchemaVersion": true
    }
  },
  "config": {},
  "types": {
    "kubernetes-ingress-nginx:index:Autoscaling": {
      "properties": {
        "annotations": {
          "type": "object",
          "additionalProperties": {
            "type": "string"
          }
        },
        "controllerAutoscalingBehavior": {
          "$ref": "#/types/kubernetes-ingress-nginx:index:AutoscalingBehavior"
        },
        "enabled": {
          "type": "boolean"
        },
        "maxReplicas": {
          "type": "integer"
        },
        "minReplicas": {
          "type": "integer"
        },
        "targetCPUUtilizationPercentage": {
          "type": "integer"
        },
        "targetMemoryUtilizationPercentage": {
          "type": "integer"
        }
      },
      "type": "object"
    },
    "kubernetes-ingress-nginx:index:AutoscalingBehavior": {
      "properties": {
        "scaleDown": {
          "$ref": "#/types/kubernetes-ingress-nginx:index:AutoscalingBehaviorScaling"
        },
        "scaleUp": {
          "$ref": "#/types/kubernetes-ingress-nginx:index:AutoscalingBehaviorScaling"
        }
      },
      "type": "object"
    },
    "kubernetes-ingress-nginx:index:AutoscalingBehaviorScaling": {
      "properties": {
        "policies": {
          "type": "array",
          "items": {
            "$ref": "#/types/kubernetes-ingress-nginx:index:AutoscalingBehaviorScalingPolicy"
          }
        },
        "stabilizationWindowSeconds": {
          "type": "integer"
        }
      },
      "type": "object"
    },
    "kubernetes-ingress-nginx:index:AutoscalingBehaviorScalingPolicy": {
      "properties": {
        "periodSeconds": {
          "type": "integer"
        },
        "type": {
          "type": "string"
        },
        "value": {
          "type": "integer"
        }
      },
      "type": "object"
    },
    "kubernetes-ingress-nginx:index:AutoscalingTemplate": {
      "properties": {
        "pods": {
          "$ref": "#/types/kubernetes-ingress-nginx:index:AutoscalingTemplatePods"
        },
        "type": {
          "type": "string"
        }
      },
      "type": "object"
    },
    "kubernetes-ingress-nginx:index:AutoscalingTemplatePods": {
      "properties": {
        "metric": {
          "$ref": "#/types/kubernetes-ingress-nginx:index:AutoscalingTemplatePodsMetric"
        },
        "target": {
          "$ref": "#/types/kubernetes-ingress-nginx:index:AutoscalingTemplatePodsTarget"
        }
      },
      "type": "object"
    },
    "kubernetes-ingress-nginx:index:AutoscalingTemplatePodsMetric": {
      "properties": {
        "name": {
          "type": "string"
        }
      },
      "type": "object"
    },
    "kubernetes-ingress-nginx:index:AutoscalingTemplatePodsTarget": {
      "properties": {
        "averageValue": {
          "type": "string"
        },
        "type": {
          "type": "string"
        }
      },
      "type": "object"
    },
    "kubernetes-ingress-nginx:index:ContollerAdmissionWebhooks": {
      "properties": {
        "annotations": {
          "type": "object",
          "additionalProperties": {
            "type": "string"
          }
        },
        "certificate": {
          "type": "string"
        },
        "createSecretJob": {
          "$ref": "#/types/kubernetes-ingress-nginx:index:ControllerAdmissionWebhooksCreateSecretJob"
        },
        "enabled": {
          "type": "boolean"
        },
        "existingPsp": {
          "type": "string",
          "description": "Use an existing PSP instead of creating one."
        },
        "failurePolicy": {
          "type": "string"
        },
        "key": {
          "type": "string"
        },
        "namespaceSelector": {
          "type": "object",
          "additionalProperties": {
            "type": "object",
            "additionalProperties": {
              "type": "string"
            }
          }
        },
        "objectSelector": {
          "type": "object",
          "additionalProperties": {
            "type": "object",
            "additionalProperties": {
              "type": "string"
            }
          }
        },
        "patch": {
          "$ref": "#/types/kubernetes-ingress-nginx:index:ControllerAdmissionWebhooksPatch"
        },
        "patchWebhookJob": {
          "$ref": "#/types/kubernetes-ingress-nginx:index:ControllerAdmissionWebhooksPatchWebhbookJob"
        },
        "port": {
          "type": "integer"
        },
        "service": {
          "$ref": "#/types/kubernetes-ingress-nginx:index:ControllerAdmissionWebhooksService"
        },
        "timeoutSeconds": {
          "type": "integer"
        }
      },
      "type": "object"
    },
    "kubernetes-ingress-nginx:index:Controller": {
      "properties": {
        "addHeaders": {
          "type": "object",
          "additionalProperties": {
            "type": "object",
            "additionalProperties": {
              "type": "string"
            }
          },
          "description": "Will add custom headers before sending response traffic to the client according to: https://kubernetes.github.io/ingress-nginx/user-guide/nginx-configuration/configmap/#add-headers."
        },
        "admissionWebhooks": {
          "$ref": "#/types/kubernetes-ingress-nginx:index:ContollerAdmissionWebhooks"
        },
        "affinity": {
          "$ref": "/kubernetes/v4.21.0/schema.json#/types/kubernetes:core%2Fv1:Affinity",
          "description": "Affinity and anti-affinity Ref: https://kubernetes.io/docs/concepts/configuration/assign-pod-node/#affinity-and-anti-affinity."
        },
        "allowSnippetAnnotations": {
          "type": "boolean",
          "description": "This configuration defines if Ingress Controller should allow users to set their own *-snippet annotations, otherwise this is forbidden / dropped when users add those annotations. Global snippets in ConfigMap are still respected."
        },
        "annotations": {
          "type": "object",
          "additionalProperties": {
            "type": "string"
          },
          "description": "Annotations to be added to the controller Deployment or DaemonSet."
        },
        "autoscaling": {
          "$ref": "#/types/kubernetes-ingress-nginx:index:Autoscaling",
          "description": "Mutually exclusive with keda autoscaling."
        },
        "autoscalingTemplate": {
          "type": "array",
          "items": {
            "$ref": "#/types/kubernetes-ingress-nginx:index:AutoscalingTemplate"
          },
          "description": "Custom or additional autoscaling metrics ref: https://kubernetes.io/docs/tasks/run-application/horizontal-pod-autoscale/#support-for-custom-metrics"
        },
        "config": {
          "type": "object",
          "additionalProperties": {
            "type": "string"
          },
          "description": "Will add custom configuration options to Nginx https://kubernetes.github.io/ingress-nginx/user-guide/nginx-configuration/configmap/."
        },
        "configAnnotations": {
          "type": "object",
          "additionalProperties": {
            "type": "string"
          },
          "description": "Annotations to be added to the controller config configuration configmap."
        },
        "configMapNamespace": {
          "type": "string",
          "description": "Allows customization of the configmap / nginx-configmap namespace."
        },
        "containerName": {
          "type": "string",
          "description": "Configures the controller container name."
        },
        "containerPort": {
          "$ref": "#/types/kubernetes-ingress-nginx:index:ControllerPort",
          "description": "Configures the ports the nginx-controller listens on."
        },
        "customTemplate": {
          "$ref": "#/types/kubernetes-ingress-nginx:index:ControllerCustomTemplate",
          "description": "Override NGINX template."
        },
        "dnsConfig": {
          "type": "object",
          "additionalProperties": {
            "type": "string"
          },
          "description": "Optionally customize the pod dnsConfig."
        },
        "dnsPolicy": {
          "type": "string",
          "description": "Optionally change this to ClusterFirstWithHostNet in case you have 'hostNetwork: true'. By default, while using host network, name resolution uses the host's DNS. If you wish nginx-controller to keep resolving names inside the k8s network, use ClusterFirstWithHostNet."
        },
        "electionID": {
          "type": "string",
          "description": "Election ID to use for status update."
        },
        "enableMimalloc": {
          "type": "boolean",
          "description": "Enable mimalloc as a drop-in replacement for malloc. ref: https://github.com/microsoft/mimalloc."
        },
        "existingPsp": {
          "type": "string",
          "description": "Use an existing PSP instead of creating one."
        },
        "extraArgs": {
          "type": "object",
          "additionalProperties": {
            "type": "string"
          },
          "description": "Additional command line arguments to pass to nginx-ingress-controller E.g. to specify the default SSL certificate you can use `default-ssl-certificate: \"<namespace>/<secret_name>\"`."
        },
        "extraContainers": {
          "type": "array",
          "items": {
            "$ref": "/kubernetes/v4.21.0/schema.json#/types/kubernetes:core%2Fv1:Container"
          },
          "description": "Additional containers to be added to the controller pod. See https://github.com/lemonldap-ng-controller/lemonldap-ng-controller as example."
        },
        "extraEnvs": {
          "type": "array",
          "items": {
            "$ref": "/kubernetes/v4.21.0/schema.json#/types/kubernetes:core%2Fv1:EnvVar"
          },
          "description": "Additional environment variables to set."
        },
        "extraInitContainers": {
          "type": "array",
          "items": {
            "$ref": "/kubernetes/v4.21.0/schema.json#/types/kubernetes:core%2Fv1:Container"
          },
          "description": "Containers, which are run before the app containers are started. - name: init-myservice   image: busybox   command: ['sh', '-c', 'until nslookup myservice; do echo waiting for myservice; sleep 2; done;']"
        },
        "extraVolumeMounts": {
          "type": "array",
          "items": {
            "$ref": "/kubernetes/v4.21.0/schema.json#/types/kubernetes:core%2Fv1:VolumeMount"
          },
          "description": "Additional volumeMounts to the controller main container.  - name: copy-portal-skins    mountPath: /var/lib/lemonldap-ng/portal/skins"
        },
        "extraVolumes": {
          "type": "array",
          "items": {
            "$ref": "/kubernetes/v4.21.0/schema.json#/types/kubernetes:core%2Fv1:Volume"
          },
          "description": "Additional volumes to the controller pod.  - name: copy-portal-skins    emptyDir: {}"
        },
        "healthCheckPath": {
          "type": "string",
          "description": "Path of the health check endpoint. All requests received on the port defined by the healthz-port parameter are forwarded internally to this path."
        },
        "heathCheckHost": {
          "type": "string",
          "description": "Address to bind the health check endpoint. It is better to set this option to the internal node address if the ingress nginx controller is running in the hostNetwork: true mode."
        },
        "hostNetwork": {
          "type": "boolean",
          "description": "Required for use with CNI based kubernetes installations (such as ones set up by kubeadm), since CNI and hostport don't mix yet. Can be deprecated once https://github.com/kubernetes/kubernetes/issues/23920 is merged."
        },
        "hostPort": {
          "$ref": "#/types/kubernetes-ingress-nginx:index:ControllerHostPort",
          "description": "Use host ports 80 and 443. Disabled by default."
        },
        "hostname": {
          "type": "object",
          "additionalProperties": {
            "type": "object",
            "additionalProperties": {
              "type": "string"
            }
          },
          "description": "Optionally customize the pod hostname."
        },
        "image": {
          "$ref": "#/types/kubernetes-ingress-nginx:index:ControllerImage"
        },
        "ingressClassByName": {
          "type": "boolean",
          "description": "Process IngressClass per name (additionally as per spec.controller)."
        },
        "ingressClassResource": {
          "$ref": "#/types/kubernetes-ingress-nginx:index:ControllerIngressClassResource",
          "description": "This section refers to the creation of the IngressClass resource. IngressClass resources are supported since k8s >= 1.18 and required since k8s >= 1.19"
        },
        "keda": {
          "$ref": "#/types/kubernetes-ingress-nginx:index:Keda",
          "description": "Mutually exclusive with hpa autoscaling."
        },
        "kind": {
          "type": "string",
          "description": "DaemonSet or Deployment."
        },
        "lifecycle": {
          "$ref": "/kubernetes/v4.21.0/schema.json#/types/kubernetes:core%2Fv1:Lifecycle",
          "description": "Improve connection draining when ingress controller pod is deleted using a lifecycle hook: With this new hook, we increased the default terminationGracePeriodSeconds from 30 seconds to 300, allowing the draining of connections up to five minutes. If the active connections end before that, the pod will terminate gracefully at that time. To effectively take advantage of this feature, the Configmap feature worker-shutdown-timeout new value is 240s instead of 10s."
        },
        "livenessProbe": {
          "$ref": "/kubernetes/v4.21.0/schema.json#/types/kubernetes:core%2Fv1:Probe",
          "description": "Liveness probe values Ref: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle/#container-probes."
        },
        "maxmindLicenseKey": {
          "type": "string",
          "description": "Maxmind license key to download GeoLite2 Databases https://blog.maxmind.com/2019/12/18/significant-changes-to-accessing-and-using-geolite2-databases."
        },
        "metrics": {
          "$ref": "#/types/kubernetes-ingress-nginx:index:ControllerMetrics"
        },
        "minAvailable": {
          "type": "integer"
        },
        "minReadySeconds": {
          "type": "integer",
          "description": "minReadySeconds to avoid killing pods before we are ready."
        },
        "name": {
          "type": "string"
        },
        "nodeSelector": {
          "type": "object",
          "additionalProperties": {
            "type": "string"
          },
          "description": "Node labels for controller pod assignment Ref: https://kubernetes.io/docs/user-guide/node-selection/."
        },
        "podAnnotations": {
          "type": "object",
          "additionalProperties": {
            "type": "string"
          },
          "description": "Annotations to be added to controller pods."
        },
        "podLabels": {
          "type": "object",
          "additionalProperties": {
            "type": "string"
          },
          "description": "labels to add to the pod container metadata."
        },
        "podSecurityContext": {
          "$ref": "/kubernetes/v4.21.0/schema.json#/types/kubernetes:core%2Fv1:PodSecurityContext",
          "description": "Security Context policies for controller pods."
        },
        "priorityClassName": {
          "type": "string"
        },
        "proxySetHeaders": {
          "type": "object",
          "additionalProperties": {
            "type": "object",
            "additionalProperties": {
              "type": "string"
            }
          },
          "description": "Will add custom headers before sending traffic to backends according to https://github.com/kubernetes/ingress-nginx/tree/main/docs/examples/customization/custom-headers."
        },
        "publishService": {
          "$ref": "#/types/kubernetes-ingress-nginx:index:ControllerPublishService",
          "description": "Allows customization of the source of the IP address or FQDN to report in the ingress status field. By default, it reads the information provided by the service. If disable, the status field reports the IP address of the node or nodes where an ingress controller pod is running."
        },
        "readinessProbe": {
          "$ref": "/kubernetes/v4.21.0/schema.json#/types/kubernetes:core%2Fv1:Probe",
          "description": "Readiness probe values Ref: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle/#container-probes."
        },
        "replicaCount": {
          "type": "integer"
        },
        "reportNodeInternalIp": {
          "type": "boolean",
          "description": "Bare-metal considerations via the host network https://kubernetes.github.io/ingress-nginx/deploy/baremetal/#via-the-host-network Ingress status was blank because there is no Service exposing the NGINX Ingress controller in a configuration using the host network, the default --publish-service flag used in standard cloud setups does not apply."
        },
        "resources": {
          "$ref": "/kubernetes/v4.21.0/schema.json#/types/kubernetes:core%2Fv1:ResourceRequirements",
          "description": "Define requests resources to avoid probe issues due to CPU utilization in busy nodes ref: https://github.com/kubernetes/ingress-nginx/issues/4735#issuecomment-551204903 Ideally, there should be no limits. https://engineering.indeedblog.com/blog/2019/12/cpu-throttling-regression-fix/"
        },
        "scope": {
          "$ref": "#/types/kubernetes-ingress-nginx:index:ControllerScope",
          "description": "Limit the scope of the controller."
        },
        "service": {
          "$ref": "#/types/kubernetes-ingress-nginx:index:ControllerService"
        },
        "startupProbe": {
          "$ref": "/kubernetes/v4.21.0/schema.json#/types/kubernetes:core%2Fv1:Probe",
          "description": "Startup probe values Ref: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle/#container-probes."
        },
        "sysctls": {
          "type": "object",
          "additionalProperties": {
            "type": "object",
            "additionalProperties": {
              "type": "string"
            }
          },
          "description": "See https://kubernetes.io/docs/tasks/administer-cluster/sysctl-cluster/ for notes on enabling and using sysctls."
        },
        "tcp": {
          "$ref": "#/types/kubernetes-ingress-nginx:index:ControllerTcp",
          "description": "Allows customization of the tcp-services-configmap."
        },
        "terminateGracePeriodSeconds": {
          "type": "integer",
          "description": "How long to wait for the drain of connections."
        },
        "tolerations": {
          "$ref": "/kubernetes/v4.21.0/schema.json#/types/kubernetes:core%2Fv1:Toleration",
          "description": "Node tolerations for server scheduling to nodes with taints Ref: https://kubernetes.io/docs/concepts/configuration/assign-pod-node/."
        },
        "topologySpreadConstraints": {
          "type": "array",
          "items": {
            "$ref": "/kubernetes/v4.21.0/schema.json#/types/kubernetes:core%2Fv1:TopologySpreadConstraint"
          },
          "description": "Topology spread constraints rely on node labels to identify the topology domain(s) that each Node is in. Ref: https://kubernetes.io/docs/concepts/workloads/pods/pod-topology-spread-constraints/."
        },
        "udp": {
          "$ref": "#/types/kubernetes-ingress-nginx:index:ControllerUdp"
        },
        "updateStrategy": {
          "$ref": "#/types/kubernetes-ingress-nginx:index:ControllerUpdateStrategy",
          "description": "The update strategy to apply to the Deployment or DaemonSet."
        },
        "watchIngressWithoutClass": {
          "type": "boolean",
          "description": "Process Ingress objects without ingressClass annotation/ingressClassName field. Overrides value for --watch-ingress-without-class flag of the controller binary. Defaults to false."
        }
      },
      "type": "object"
    },
    "kubernetes-ingress-nginx:index:ControllerAdmissionWebhooksCreateSecretJob": {
      "properties": {
        "resources": {
          "$ref": "/kubernetes/v4.21.0/schema.json#/types/kubernetes:core%2Fv1:ResourceRequirements"
        }
      },
      "type": "object"
    },
    "kubernetes-ingress-nginx:index:ControllerAdmissionWebhooksPatch": {
      "properties": {
        "enabled": {
          "type": "boolean"
        },
        "image": {
          "$ref": "#/types/kubernetes-ingress-nginx:index:ControllerImage"
        },
        "nodeSelector": {
          "type": "object",
          "additionalProperties": {
            "type": "string"
          }
        },
        "podAnnotations": {
          "type": "object",
          "additionalProperties": {
            "type": "string"
          }
        },
        "priorityClassName": {
          "type": "string",
          "description": "Provide a priority class name to the webhook patching job."
        },
        "runAsUser": {
          "type": "integer"
        },
        "tolerations": {
          "type": "array",
          "items": {
            "$ref": "/kubernetes/v4.21.0/schema.json#/types/kubernetes:core%2Fv1:Toleration"
          }
        }
      },
      "type": "object"
    },
    "kubernetes-ingress-nginx:index:ControllerAdmissionWebhooksPatchWebhbookJob": {
      "properties": {
        "resources": {
          "$ref": "/kubernetes/v4.21.0/schema.json#/types/kubernetes:core%2Fv1:ResourceRequirements"
        }
      },
      "type": "object"
    },
    "kubernetes-ingress-nginx:index:ControllerAdmissionWebhooksService": {
      "properties": {
        "annotations": {
          "type": "object",
          "additionalProperties": {
            "type": "string"
          }
        },
        "clusterIP": {
          "type": "string"
        },
        "externalIPs": {
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "loadBalancerIPs": {
          "type": "string"
        },
        "loadBalancerSourceRanges": {
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "servicePort": {
          "type": "integer"
        },
        "type": {
          "type": "string"
        }
      },
      "type": "object"
    },
    "kubernetes-ingress-nginx:index:ControllerCustomTemplate": {
      "properties": {
        "configMapKey": {
          "type": "string"
        },
        "configMapName": {
          "type": "string"
        }
      },
      "type": "object"
    },
    "kubernetes-ingress-nginx:index:ControllerDefaultBackend": {
      "properties": {
        "affinity": {
          "$ref": "/kubernetes/v4.21.0/schema.json#/types/kubernetes:core%2Fv1:Affinity"
        },
        "autoscaling": {
          "$ref": "#/types/kubernetes-ingress-nginx:index:Autoscaling"
        },
        "enabled": {
          "type": "boolean"
        },
        "existingPsp": {
          "type": "string",
          "description": "Use an existing PSP instead of creating one."
        },
        "extraArgs": {
          "type": "object",
          "additionalProperties": {
            "type": "object",
            "additionalProperties": {
              "type": "string"
            }
          }
        },
        "extraEnvs": {
          "type": "array",
          "items": {
            "$ref": "/kubernetes/v4.21.0/schema.json#/types/kubernetes:core%2Fv1:EnvVar"
          }
        },
        "extraVolumeMounts": {
          "type": "array",
          "items": {
            "$ref": "/kubernetes/v4.21.0/schema.json#/types/kubernetes:core%2Fv1:VolumeMount"
          },
          "description": "Additional volumeMounts to the default backend container.  - name: copy-portal-skins    mountPath: /var/lib/lemonldap-ng/portal/skins"
        },
        "extraVolumes": {
          "type": "array",
          "items": {
            "$ref": "/kubernetes/v4.21.0/schema.json#/types/kubernetes:core%2Fv1:Volume"
          },
          "description": "Additional volumes to the default backend pod.  - name: copy-portal-skins    emptyDir: {}"
        },
        "image": {
          "$ref": "#/types/kubernetes-ingress-nginx:index:ControllerImage"
        },
        "livenessProbe": {
          "$ref": "/kubernetes/v4.21.0/schema.json#/types/kubernetes:core%2Fv1:Probe",
          "description": "Liveness probe values for default backend. Ref: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle/#container-probes."
        },
        "minAvailable": {
          "type": "integer"
        },
        "name": {
          "type": "string"
        },
        "nodeSelector": {
          "type": "object",
          "additionalProperties": {
            "type": "string"
          },
          "description": "Node labels for default backend pod assignment Ref: https://kubernetes.io/docs/user-guide/node-selection/."
        },
        "podAnnotations": {
          "type": "object",
          "additionalProperties": {
            "type": "string"
          },
          "description": "Annotations to be added to default backend pods."
        },
        "podLabels": {
          "type": "object",
          "additionalProperties": {
            "type": "string"
          },
          "description": "labels to add to the pod container metadata"
        },
        "podSecurityContext": {
          "$ref": "/kubernetes/v4.21.0/schema.json#/types/kubernetes:core%2Fv1:PodSecurityContext",
          "description": "Security Context policies for controller pods. See https://kubernetes.io/docs/tasks/administer-cluster/sysctl-cluster/ for notes on enabling and using sysctls."
        },
        "port": {
          "type": "integer"
        },
        "priorityClassName": {
          "type": "string"
        },
        "readinessProbe": {
          "$ref": "/kubernetes/v4.21.0/schema.json#/types/kubernetes:core%2Fv1:Probe",
          "description": "Readiness probe values for default backend. Ref: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle/#container-probes."
        },
        "replicaCount": {
          "type": "integer"
        },
        "resources": {
          "$ref": "/kubernetes/v4.21.0/schema.json#/types/kubernetes:core%2Fv1:ResourceRequirements"
        },
        "service": {
          "$ref": "#/types/kubernetes-ingress-nginx:index:ControllerDefaultBackendService"
        },
        "serviceAccount": {
          "$ref": "#/types/kubernetes-ingress-nginx:index:ControllerServiceAccount"
        },
        "tolerations": {
          "type": "array",
          "items": {
            "$ref": "/kubernetes/v4.21.0/schema.json#/types/kubernetes:core%2Fv1:Toleration"
          },
          "description": "Node tolerations for server scheduling to nodes with taints. Ref: https://kubernetes.io/docs/concepts/configuration/assign-pod-node/"
        }
      },
      "type": "object"
    },
    "kubernetes-ingress-nginx:index:ControllerDefaultBackendService": {
      "properties": {
        "annotations": {
          "type": "object",
          "additionalProperties": {
            "type": "string"
          }
        },
        "clusterIP": {
          "type": "string"
        },
        "externalIPs": {
          "type": "array",
          "items": {
            "type": "string"
          },
          "description": "List of IP addresses at which the default backend service is available. Ref: https://kubernetes.io/docs/user-guide/services/#external-ips"
        },
        "loadBalancerIP": {
          "type": "string"
        },
        "loadBalancerSourceRanges": {
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "servicePort": {
          "type": "integer"
        },
        "type": {
          "type": "string"
        }
      },
      "type": "object"
    },
    "kubernetes-ingress-nginx:index:ControllerHostPort": {
      "properties": {
        "enabled": {
          "type": "boolean"
        },
        "ports": {
          "$ref": "#/types/kubernetes-ingress-nginx:index:ControllerHostPortPorts"
        }
      },
      "type": "object"
    },
    "kubernetes-ingress-nginx:index:ControllerHostPortPorts": {
      "properties": {
        "http": {
          "type": "integer"
        },
        "https": {
          "type": "integer"
        }
      },
      "type": "object"
    },
    "kubernetes-ingress-nginx:index:ControllerImage": {
      "properties": {
        "allowPrivilegeEscalation": {
          "type": "boolean"
        },
        "digest": {
          "type": "string"
        },
        "image": {
          "type": "string"
        },
        "pullPolicy": {
          "type": "string"
        },
        "readOnlyRootFilesystem": {
          "type": "boolean"
        },
        "registry": {
          "type": "string"
        },
        "repository": {
          "type": "string",
          "description": "for backwards compatibility consider setting the full image url via the repository value below use *either* current default registry/image or repository format or installing will fail."
        },
        "runAsNonRoot": {
          "type": "boolean"
        },
        "runAsUser": {
          "type": "string"
        },
        "tag": {
          "type": "string"
        }
      },
      "type": "object"
    },
    "kubernetes-ingress-nginx:index:ControllerIngressClassResource": {
      "properties": {
        "controllerValue": {
          "type": "string"
        },
        "default": {
          "type": "boolean"
        },
        "enabled": {
          "type": "boolean"
        },
        "name": {
          "type": "string"
        },
        "parameters": {
          "type": "object",
          "additionalProperties": {
            "type": "object",
            "additionalProperties": {
              "type": "string"
            }
          },
          "description": "Parameters is a link to a custom resource containing additional configuration for the controller. This is optional if the controller does not require extra parameters."
        }
      },
      "type": "object"
    },
    "kubernetes-ingress-nginx:index:ControllerMetrics": {
      "properties": {
        "enabled": {
          "type": "boolean"
        },
        "port": {
          "type": "integer",
          "description": "if this port is changed, change healthz-port: in extraArgs: accordingly."
        },
        "prometheusRule": {
          "$ref": "#/types/kubernetes-ingress-nginx:index:ControllerMetricsPrometheusRules"
        },
        "service": {
          "$ref": "#/types/kubernetes-ingress-nginx:index:ControllerMetricsService"
        },
        "serviceMonitor": {
          "$ref": "#/types/kubernetes-ingress-nginx:index:ControllerMetricsServiceMonitor"
        }
      },
      "type": "object"
    },
    "kubernetes-ingress-nginx:index:ControllerMetricsPrometheusRules": {
      "properties": {
        "additionalLabels": {
          "type": "object",
          "additionalProperties": {
            "type": "string"
          }
        },
        "enabled": {
          "type": "boolean"
        },
        "namespace": {
          "type": "string"
        },
        "rules": {
          "type": "array",
          "items": {
            "type": "object",
            "additionalProperties": {
              "type": "string"
            }
          }
        }
      },
      "type": "object"
    },
    "kubernetes-ingress-nginx:index:ControllerMetricsService": {
      "properties": {
        "annotations": {
          "type": "object",
          "additionalProperties": {
            "type": "string"
          }
        },
        "clusterIP": {
          "type": "string"
        },
        "externalIPs": {
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "externalTrafficPolicy": {
          "type": "string"
        },
        "loadBalancerIPs": {
          "type": "string"
        },
        "loadBalancerSourceRanges": {
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "nodePort": {
          "type": "string"
        },
        "servicePort": {
          "type": "integer"
        },
        "type": {
          "type": "string"
        }
      },
      "type": "object"
    },
    "kubernetes-ingress-nginx:index:ControllerMetricsServiceMonitor": {
      "properties": {
        "additionalLabels": {
          "type": "object",
          "additionalProperties": {
            "type": "string"
          }
        },
        "enabled": {
          "type": "boolean"
        },
        "honorLabels": {
          "type": "boolean"
        },
        "jobLabel": {
          "type": "string",
          "description": "The label to use to retrieve the job name from."
        },
        "metricRelabelings": {
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "namespace": {
          "type": "string"
        },
        "namespaceSelector": {
          "type": "object",
          "additionalProperties": {
            "type": "object",
            "additionalProperties": {
              "type": "string"
            }
          }
        },
        "scrapeInterval": {
          "type": "string"
        },
        "targetLabels": {
          "type": "array",
          "items": {
            "type": "string"
          }
        }
      },
      "type": "object"
    },
    "kubernetes-ingress-nginx:index:ControllerPodSecurityPolicy": {
      "properties": {
        "enabled": {
          "type": "boolean"
        }
      },
      "type": "object"
    },
    "kubernetes-ingress-nginx:index:ControllerPort": {
      "properties": {
        "http": {
          "type": "integer"
        },
        "https": {
          "type": "integer"
        }
      },
      "type": "object"
    },
    "kubernetes-ingress-nginx:index:ControllerPublishService": {
      "properties": {
        "enabled": {
          "type": "boolean"
        },
        "pathOverride": {
          "type": "string",
          "description": "Allows overriding of the publish service to bind to. Must be <namespace>/<service_name>."
        }
      },
      "type": "object"
    },
    "kubernetes-ingress-nginx:index:ControllerRBAC": {
      "properties": {
        "create": {
          "type": "boolean"
        },
        "scope": {
          "type": "boolean"
        }
      },
      "type": "object"
    },
    "kubernetes-ingress-nginx:index:ControllerRollingUpdate": {
      "properties": {
        "maxUnavailable": {
          "type": "integer"
        }
      },
      "type": "object"
    },
    "kubernetes-ingress-nginx:index:ControllerScope": {
      "properties": {
        "enabled": {
          "type": "boolean"
        },
        "namespace": {
          "type": "string"
        }
      },
      "type": "object"
    },
    "kubernetes-ingress-nginx:index:ControllerService": {
      "properties": {
        "annotations": {
          "type": "object",
          "additionalProperties": {
            "type": "string"
          }
        },
        "clusterIP": {
          "type": "string"
        },
        "enableHttp": {
          "type": "boolean"
        },
        "enableHttps": {
          "type": "boolean"
        },
        "enabled": {
          "type": "boolean"
        },
        "externalIPs": {
          "type": "array",
          "items": {
            "type": "string"
          },
          "description": "List of IP addresses at which the controller services are available Ref: https://kubernetes.io/docs/user-guide/services/#external-ips"
        },
        "externalTrafficPolicy": {
          "type": "string",
          "description": "Set external traffic policy to: \"Local\" to preserve source IP on providers supporting it. Ref: https://kubernetes.io/docs/tutorials/services/source-ip/#source-ip-for-services-with-typeloadbalancer"
        },
        "healthCheckNodePort": {
          "type": "integer",
          "description": "specifies the health check node port (numeric port number) for the service. If healthCheckNodePort isn’t specified, the service controller allocates a port from your cluster’s NodePort range. Ref: https://kubernetes.io/docs/tasks/access-application-cluster/create-external-load-balancer/#preserving-the-client-source-ip"
        },
        "internal": {
          "$ref": "#/types/kubernetes-ingress-nginx:index:ControllerServiceInternal",
          "description": "Enables an additional internal load balancer (besides the external one). Annotations are mandatory for the load balancer to come up. Varies with the cloud service."
        },
        "labels": {
          "type": "object",
          "additionalProperties": {
            "type": "string"
          }
        },
        "loadBalancerIP": {
          "type": "string"
        },
        "loadBalancerIPs": {
          "type": "string"
        },
        "loadBalancerSourceRanges": {
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "nodePorts": {
          "$ref": "#/types/kubernetes-ingress-nginx:index:ControllerServiceNodePorts"
        },
        "ports": {
          "$ref": "#/types/kubernetes-ingress-nginx:index:ControllerPort"
        },
        "sessionAffinity": {
          "type": "string",
          "description": "Must be either \"None\" or \"ClientIP\" if set. Kubernetes will default to \"None\". Ref: https://kubernetes.io/docs/concepts/services-networking/service/#virtual-ips-and-service-proxies"
        },
        "targetPorts": {
          "$ref": "#/types/kubernetes-ingress-nginx:index:ControllerPort"
        },
        "type": {
          "type": "string"
        }
      },
      "type": "object"
    },
    "kubernetes-ingress-nginx:index:ControllerServiceAccount": {
      "properties": {
        "automountServiceAccountToken": {
          "type": "boolean"
        },
        "create": {
          "type": "boolean"
        },
        "name": {
          "type": "string"
        }
      },
      "type": "object"
    },
    "kubernetes-ingress-nginx:index:ControllerServiceInternal": {
      "properties": {
        "annotations": {
          "type": "object",
          "additionalProperties": {
            "type": "string"
          }
        },
        "enabled": {
          "type": "boolean"
        },
        "externalTrafficPolicy": {
          "type": "string",
          "description": "Set external traffic policy to: \"Local\" to preserve source IP on providers supporting it. Ref: https://kubernetes.io/docs/tutorials/services/source-ip/#source-ip-for-services-with-typeloadbalancer"
        },
        "labels": {
          "type": "object",
          "additionalProperties": {
            "type": "string"
          }
        },
        "loadBalancerIPs": {
          "type": "string"
        },
        "loadBalancerSourceRanges": {
          "type": "array",
          "items": {
            "type": "string"
          },
          "description": "Restrict access For LoadBalancer service. Defaults to 0.0.0.0/0."
        }
      },
      "type": "object"
    },
    "kubernetes-ingress-nginx:index:ControllerServiceNodePorts": {
      "properties": {
        "http": {
          "type": "string"
        },
        "https": {
          "type": "string"
        },
        "tcp": {
          "type": "object",
          "additionalProperties": {
            "type": "object",
            "additionalProperties": {
              "type": "string"
            }
          }
        },
        "udp": {
          "type": "object",
          "additionalProperties": {
            "type": "object",
            "additionalProperties": {
              "type": "string"
            }
          }
        }
      },
      "type": "object"
    },
    "kubernetes-ingress-nginx:index:ControllerTcp": {
      "properties": {
        "annotations": {
          "type": "object",
          "additionalProperties": {
            "type": "string"
          },
          "description": "Annotations to be added to the tcp config configmap."
        },
        "configMapNamespace": {
          "type": "string"
        }
      },
      "type": "object"
    },
    "kubernetes-ingress-nginx:index:ControllerUdp": {
      "properties": {
        "annotations": {
          "type": "object",
          "additionalProperties": {
            "type": "string"
          },
          "description": "Annotations to be added to the udp config configmap."
        },
        "configMapNamespace": {
          "type": "string"
        }
      },
      "type": "object"
    },
    "kubernetes-ingress-nginx:index:ControllerUpdateStrategy": {
      "properties": {
        "rollingUpdate": {
          "$ref": "#/types/kubernetes-ingress-nginx:index:ControllerRollingUpdate"
        },
        "type": {
          "type": "string"
        }
      },
      "type": "object"
    },
    "kubernetes-ingress-nginx:index:Keda": {
      "properties": {
        "apiVersion": {
          "type": "string",
          "description": "apiVersion changes with keda 1.x vs 2.x: 2.x = keda.sh/v1alpha1, 1.x = keda.k8s.io/v1alpha1."
        },
        "behavior": {
          "$ref": "#/types/kubernetes-ingress-nginx:index:AutoscalingBehavior"
        },
        "cooldownPeriod": {
          "type": "integer"
        },
        "enabled": {
          "type": "boolean"
        },
        "maxReplicas": {
          "type": "integer"
        },
        "minReplicas": {
          "type": "integer"
        },
        "pollingInterval": {
          "type": "integer"
        },
        "restoreToOriginalReplicaCount": {
          "type": "boolean"
        },
        "scaledObject": {
          "$ref": "#/types/kubernetes-ingress-nginx:index:KedaScaledObject"
        },
        "triggers": {
          "type": "array",
          "items": {
            "$ref": "#/types/kubernetes-ingress-nginx:index:KedaTrigger"
          }
        }
      },
      "type": "object"
    },
    "kubernetes-ingress-nginx:index:KedaScaledObject": {
      "properties": {
        "annotations": {
          "type": "object",
          "additionalProperties": {
            "type": "string"
          },
          "description": "Custom annotations for ScaledObject resource."
        }
      },
      "type": "object"
    },
    "kubernetes-ingress-nginx:index:KedaTrigger": {
      "properties": {
        "metadata": {
          "type": "object",
          "additionalProperties": {
            "type": "object",
            "additionalProperties": {
              "type": "string"
            }
          }
        },
        "type": {
          "type": "string"
        }
      },
      "type": "object"
    },
    "kubernetes-ingress-nginx:index:Release": {
      "description": "A Release is an instance of a chart running in a Kubernetes cluster.\nA Chart is a Helm package. It contains all of the resource definitions necessary to run an application, tool, or service inside of a Kubernetes cluster.\nNote - Helm Release is currently in BETA and may change. Use in production environment is discouraged.",
      "properties": {
        "atomic": {
          "type": "boolean",
          "description": "If set, installation process purges chart on fail. `skipAwait` will be disabled automatically if atomic is used."
        },
        "chart": {
          "type": "string",
          "description": "Chart name to be installed. A path may be used."
        },
        "cleanupOnFail": {
          "type": "boolean",
          "description": "Allow deletion of new resources created in this upgrade when upgrade fails."
        },
        "createNamespace": {
          "type": "boolean",
          "description": "Create the namespace if it does not exist."
        },
        "dependencyUpdate": {
          "type": "boolean",
          "description": "Run helm dependency update before installing the chart."
        },
        "description": {
          "type": "string",
          "description": "Add a custom description"
        },
        "devel": {
          "type": "boolean",
          "description": "Use chart development versions, too. Equivalent to version '>0.0.0-0'. If `version` is set, this is ignored."
        },
        "disableCRDHooks": {
          "type": "boolean",
          "description": "Prevent CRD hooks from, running, but run other hooks.  See helm install --no-crd-hook"
        },
        "disableOpenapiValidation": {
          "type": "boolean",
          "description": "If set, the installation process will not validate rendered templates against the Kubernetes OpenAPI Schema"
        },
        "disableWebhooks": {
          "type": "boolean",
          "description": "Prevent hooks from running."
        },
        "forceUpdate": {
          "type": "boolean",
          "description": "Force resource update through delete/recreate if needed."
        },
        "keyring": {
          "type": "string",
          "description": "Location of public keys used for verification. Used only if `verify` is true"
        },
        "lint": {
          "type": "boolean",
          "description": "Run helm lint when planning."
        },
        "manifest": {
          "type": "object",
          "additionalProperties": {
            "$ref": "pulumi.json#/Any"
          },
          "description": "The rendered manifests as JSON. Not yet supported."
        },
        "maxHistory": {
          "type": "integer",
          "description": "Limit the maximum number of revisions saved per release. Use 0 for no limit."
        },
        "name": {
          "type": "string",
          "description": "Release name."
        },
        "namespace": {
          "type": "string",
          "description": "Namespace to install the release into."
        },
        "postrender": {
          "type": "string",
          "description": "Postrender command to run."
        },
        "recreatePods": {
          "type": "boolean",
          "description": "Perform pods restart during upgrade/rollback."
        },
        "renderSubchartNotes": {
          "type": "boolean",
          "description": "If set, render subchart notes along with the parent."
        },
        "replace": {
          "type": "boolean",
          "description": "Re-use the given name, even if that name is already used. This is unsafe in production"
        },
        "repositoryOpts": {
          "$ref": "#/types/kubernetes-ingress-nginx:index:RepositoryOpts",
          "description": "Specification defining the Helm chart repository to use."
        },
        "resetValues": {
          "type": "boolean",
          "description": "When upgrading, reset the values to the ones built into the chart."
        },
        "resourceNames": {
          "type": "object",
          "additionalProperties": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "description": "Names of resources created by the release grouped by \"kind/version\"."
        },
        "reuseValues": {
          "type": "boolean",
          "description": "When upgrading, reuse the last release's values and merge in any overrides. If 'resetValues' is specified, this is ignored"
        },
        "skipAwait": {
          "type": "boolean",
          "description": "By default, the provider waits until all resources are in a ready state before marking the release as successful. Setting this to true will skip such await logic."
        },
        "skipCrds": {
          "type": "boolean",
          "description": "If set, no CRDs will be installed. By default, CRDs are installed if not already present."
        },
        "timeout": {
          "type": "integer",
          "description": "Time in seconds to wait for any individual kubernetes operation."
        },
        "valueYamlFiles": {
          "type": "array",
          "items": {
            "$ref": "pulumi.json#/Asset"
          },
          "description": "List of assets (raw yaml files). Content is read and merged with values. Not yet supported."
        },
        "values": {
          "type": "object",
          "additionalProperties": {
            "$ref": "pulumi.json#/Any"
          },
          "description": "Custom values set for the release."
        },
        "verify": {
          "type": "boolean",
          "description": "Verify the package before installing it."
        },
        "version": {
          "type": "string",
          "description": "Specify the exact chart version to install. If this is not specified, the latest version is installed."
        },
        "waitForJobs": {
          "type": "boolean",
          "description": "Will wait until all Jobs have been completed before marking the release as successful. This is ignored if `skipAwait` is enabled."
        }
      },
      "type": "object"
    },
    "kubernetes-ingress-nginx:index:ReleaseStatus": {
      "properties": {
        "appVersion": {
          "type": "string",
          "description": "The version number of the application being deployed."
        },
        "chart": {
          "type": "string",
          "description": "The name of the chart."
        },
        "name": {
          "type": "string",
          "description": "Name is the name of the release."
        },
        "namespace": {
          "type": "string",
          "description": "Namespace is the kubernetes namespace of the release."
        },
        "revision": {
          "type": "integer",
          "description": "Version is an int32 which represents the version of the release."
        },
        "status": {
          "type": "string",
          "description": "Status of the release."
        },
        "version": {
          "type": "string",
          "description": "A SemVer 2 conformant version string of the chart."
        }
      },
      "type": "object",
      "required": [
        "appVersion",
        "chart",
        "name",
        "namespace",
        "revision",
        "status",
        "version"
      ]
    },
    "kubernetes-ingress-nginx:index:RepositoryOpts": {
      "description": "Specification defining the Helm chart repository to use.",
      "properties": {
        "caFile": {
          "type": "string",
          "description": "The Repository's CA File"
        },
        "certFile": {
          "type": "string",
          "description": "The repository's cert file"
        },
        "keyFile": {
          "type": "string",
          "description": "The repository's cert key file"
        },
        "password": {
          "type": "string",
          "description": "Password for HTTP basic authentication",
          "secret": true
        },
        "repo": {
          "type": "string",
          "description": "Repository where to locate the requested chart. If is a URL the chart is installed without installing the repository."
        },
        "username": {
          "type": "string",
          "description": "Username for HTTP basic authentication"
        }
      },
      "type": "object",
      "language": {
        "nodejs": {
          "requiredOutputs": [
            "repo",
            "keyFile",
            "certFile",
            "caFile",
            "username",
            "password"
          ]
        }
      }
    }
  },
  "provider": {
    "type": "object"
  },
  "resources": {
    "kubernetes-ingress-nginx:index:IngressController": {
      "description": "Ingress controller for Kubernetes using NGINX as a reverse proxy and load balancer",
      "properties": {
        "status": {
          "$ref": "#/types/kubernetes-ingress-nginx:index:ReleaseStatus",
          "description": "Detailed information about the status of the underlying Helm deployment."
        }
      },
      "type": "object",
      "required": [
        "status"
      ],
      "inputProperties": {
        "controller": {
          "$ref": "#/types/kubernetes-ingress-nginx:index:Controller"
        },
        "defaultBackend": {
          "$ref": "#/types/kubernetes-ingress-nginx:index:ControllerDefaultBackend",
          "description": "Default 404 backend."
        },
        "dhParam": {
          "type": "string",
          "description": "A base64ed Diffie-Hellman parameter. This can be generated with: openssl dhparam 4096 2> /dev/null | base64 Ref: https://github.com/kubernetes/ingress-nginx/tree/main/docs/examples/customization/ssl-dh-param."
        },
        "fullnameOverride": {
          "type": "string",
          "description": "Overrides for generated resource names."
        },
        "helmOptions": {
          "$ref": "#/types/kubernetes-ingress-nginx:index:Release",
          "description": "HelmOptions is an escape hatch that lets the end user control any aspect of the Helm deployment. This exposes the entirety of the underlying Helm Release component args."
        },
        "imagePullSecrets": {
          "type": "array",
          "items": {
            "$ref": "/kubernetes/v4.21.0/schema.json#/types/kubernetes:core%2Fv1:LocalObjectReference"
          },
          "description": "Optional array of imagePullSecrets containing private registry credentials Ref: https://kubernetes.io/docs/tasks/configure-pod-container/pull-image-private-registry/."
        },
        "nameOverride": {
          "type": "string",
          "description": "Overrides for generated resource names."
        },
        "podSecurityPolicy": {
          "$ref": "#/types/kubernetes-ingress-nginx:index:ControllerPodSecurityPolicy",
          "description": "If true, create & use Pod Security Policy resources https://kubernetes.io/docs/concepts/policy/pod-security-policy/"
        },
        "rbac": {
          "$ref": "#/types/kubernetes-ingress-nginx:index:ControllerRBAC",
          "description": "Enable RBAC as per https://github.com/kubernetes/ingress-nginx/blob/main/docs/deploy/rbac.md and https://github.com/kubernetes/ingress-nginx/issues/266"
        },
        "revisionHistoryLimit": {
          "type": "integer",
          "description": "Rollback limit."
        },
        "serviceAccount": {
          "$ref": "#/types/kubernetes-ingress-nginx:index:ControllerServiceAccount"
        },
        "tcp": {
          "type": "object",
          "additionalProperties": {
            "type": "object",
            "additionalProperties": {
              "type": "string"
            }
          },
          "description": "TCP service key:value pairs Ref: https://github.com/kubernetes/ingress-nginx/blob/main/docs/user-guide/exposing-tcp-udp-services.md."
        },
        "udp": {
          "type": "object",
          "additionalProperties": {
            "type": "object",
            "additionalProperties": {
              "type": "string"
            }
          },
          "description": "UDP service key:value pairs Ref: https://github.com/kubernetes/ingress-nginx/blob/main/docs/user-guide/exposing-tcp-udp-services.md."
        }
      },
      "isComponent": true
    }
  }
}
