{
  "$schema": "http://json-schema.org/draft-04/schema#",
  "type": "object",
  "properties": {
    "nameOverride": {
      "type": "string"
    },
    "fullnameOverride": {
      "type": "string"
    },
    "config": {
      "type": "object",
      "properties": {
        "database": {
          "type": "object",
          "properties": {
            "existingSecret": {
              "type": "object",
              "properties": {
                "enabled": {
                  "type": "boolean"
                },
                "secretName": {
                  "type": "string"
                }
              },
              "required": [
                "enabled",
                "secretName"
              ]
            },
            "secret": {
              "type": "object",
              "properties": {
                "annotations": {
                  "type": "object"
                },
                "labels": {
                  "type": "object"
                },
                "databaseUsername": {
                  "type": "string"
                },
                "databasePassword": {
                  "type": "string"
                },
                "databaseConnectionUrl": {
                  "type": "string"
                }
              },
              "required": [
                "annotations",
                "labels",
                "databaseUsername",
                "databasePassword",
                "databaseConnectionUrl"
              ]
            }
          },
          "required": [
            "existingSecret",
            "secret"
          ]
        },
        "exporterConfig": {
          "type": "object",
          "properties": {
            "existingSecret": {
              "type": "object",
              "properties": {
                "enabled": {
                  "type": "boolean"
                },
                "secretName": {
                  "type": "string"
                }
              },
              "required": [
                "enabled",
                "secretName"
              ]
            },
            "secret": {
              "type": "object",
              "properties": {
                "annotations": {
                  "type": "object"
                },
                "labels": {
                  "type": "object"
                },
                "exporterConfig": {
                  "type": "object"
                }
              },
              "required": [
                "annotations",
                "labels",
                "exporterConfig"
              ]
            }
          },
          "required": [
            "existingSecret",
            "secret"
          ]
        },
        "webConfig": {
          "type": "object",
          "properties": {
            "existingSecret": {
              "type": "object",
              "properties": {
                "enabled": {
                  "type": "boolean"
                },
                "secretName": {
                  "type": "string"
                }
              },
              "required": [
                "enabled",
                "secretName"
              ]
            },
            "secret": {
              "type": "object",
              "properties": {
                "annotations": {
                  "type": "object"
                },
                "labels": {
                  "type": "object"
                },
                "webConfig": {
                  "type": "object"
                }
              },
              "required": [
                "annotations",
                "labels",
                "webConfig"
              ]
            }
          },
          "required": [
            "existingSecret",
            "secret"
          ]
        }
      },
      "required": [
        "database",
        "exporterConfig",
        "webConfig"
      ]
    },
    "deployment": {
      "type": "object",
      "properties": {
        "annotations": {
          "type": "object"
        },
        "labels": {
          "type": "object"
        },
        "additionalContainers": {
          "type": "array",
          "items": {}
        },
        "affinity": {
          "type": "object"
        },
        "initContainers": {
          "type": "array",
          "items": {}
        },
        "dnsConfig": {
          "type": "object"
        },
        "dnsPolicy": {
          "type": "string"
        },
        "hostname": {
          "type": "string"
        },
        "subdomain": {
          "type": "string"
        },
        "hostNetwork": {
          "type": "boolean"
        },
        "imagePullSecrets": {
          "type": "array",
          "items": {}
        },
        "postgresExporter": {
          "type": "object",
          "properties": {
            "args": {
              "type": "array",
              "items": {}
            },
            "env": {
              "type": "array",
              "items": {}
            },
            "envFrom": {
              "type": "array",
              "items": {}
            },
            "image": {
              "type": "object",
              "properties": {
                "registry": {
                  "type": "string"
                },
                "repository": {
                  "type": "string"
                },
                "tag": {
                  "type": "string"
                },
                "pullPolicy": {
                  "type": "string"
                }
              },
              "required": [
                "registry",
                "repository",
                "tag",
                "pullPolicy"
              ]
            },
            "resources": {
              "type": "object"
            },
            "securityContext": {
              "type": "object"
            },
            "volumeMounts": {
              "type": "array",
              "items": {}
            }
          },
          "required": [
            "args",
            "env",
            "envFrom",
            "image",
            "resources",
            "securityContext",
            "volumeMounts"
          ]
        },
        "nodeSelector": {
          "type": "object"
        },
        "priorityClassName": {
          "type": "string"
        },
        "replicas": {
          "type": "integer"
        },
        "restartPolicy": {
          "type": "string"
        },
        "securityContext": {
          "type": "object"
        },
        "strategy": {
          "type": "object",
          "properties": {
            "type": {
              "type": "string"
            },
            "rollingUpdate": {
              "type": "object",
              "properties": {
                "maxSurge": {
                  "type": "integer"
                },
                "maxUnavailable": {
                  "type": "integer"
                }
              },
              "required": [
                "maxSurge",
                "maxUnavailable"
              ]
            }
          },
          "required": [
            "type",
            "rollingUpdate"
          ]
        },
        "terminationGracePeriodSeconds": {
          "type": "integer"
        },
        "tolerations": {
          "type": "array",
          "items": {}
        },
        "topologySpreadConstraints": {
          "type": "array",
          "items": {}
        },
        "volumes": {
          "type": "array",
          "items": {}
        }
      },
      "required": [
        "annotations",
        "labels",
        "additionalContainers",
        "affinity",
        "initContainers",
        "dnsConfig",
        "dnsPolicy",
        "hostname",
        "subdomain",
        "hostNetwork",
        "imagePullSecrets",
        "postgresExporter",
        "nodeSelector",
        "priorityClassName",
        "replicas",
        "restartPolicy",
        "securityContext",
        "strategy",
        "terminationGracePeriodSeconds",
        "tolerations",
        "topologySpreadConstraints",
        "volumes"
      ]
    },
    "grafana": {
      "type": "object",
      "properties": {
        "enabled": {
          "type": "boolean"
        },
        "dashboardDiscoveryLabels": {
          "type": "object"
        },
        "dashboards": {
          "type": "object",
          "properties": {
            "postgresExporter": {
              "type": "object",
              "properties": {
                "enabled": {
                  "type": "boolean"
                },
                "annotations": {
                  "type": "object"
                },
                "labels": {
                  "type": "object"
                }
              },
              "required": [
                "enabled",
                "annotations",
                "labels"
              ]
            }
          },
          "required": [
            "postgresExporter"
          ]
        }
      },
      "required": [
        "enabled",
        "dashboardDiscoveryLabels",
        "dashboards"
      ]
    },
    "ingress": {
      "type": "object",
      "properties": {
        "enabled": {
          "type": "boolean"
        },
        "className": {
          "type": "string"
        },
        "annotations": {
          "type": "object"
        },
        "labels": {
          "type": "object"
        },
        "hosts": {
          "type": "array",
          "items": {}
        },
        "tls": {
          "type": "array",
          "items": {}
        }
      },
      "required": [
        "enabled",
        "className",
        "annotations",
        "labels",
        "hosts",
        "tls"
      ]
    },
    "podDisruptionBudget": {
      "type": "object"
    },
    "networkPolicies": {
      "type": "object"
    },
    "prometheus": {
      "type": "object",
      "properties": {
        "metrics": {
          "type": "object",
          "properties": {
            "enabled": {
              "type": "boolean"
            },
            "podMonitor": {
              "type": "object",
              "properties": {
                "enabled": {
                  "type": "boolean"
                },
                "annotations": {
                  "type": "object"
                },
                "enableHttp2": {
                  "type": "boolean"
                },
                "followRedirects": {
                  "type": "boolean"
                },
                "honorLabels": {
                  "type": "boolean"
                },
                "labels": {
                  "type": "object"
                },
                "interval": {
                  "type": "string"
                },
                "path": {
                  "type": "string"
                },
                "relabelings": {
                  "type": "array",
                  "items": {}
                },
                "scrapeTimeout": {
                  "type": "string"
                },
                "scheme": {
                  "type": "string"
                },
                "tlsConfig": {
                  "type": "object"
                }
              },
              "required": [
                "enabled",
                "annotations",
                "enableHttp2",
                "followRedirects",
                "honorLabels",
                "labels",
                "interval",
                "path",
                "relabelings",
                "scrapeTimeout",
                "scheme",
                "tlsConfig"
              ]
            },
            "serviceMonitor": {
              "type": "object",
              "properties": {
                "enabled": {
                  "type": "boolean"
                },
                "annotations": {
                  "type": "object"
                },
                "labels": {
                  "type": "object"
                },
                "enableHttp2": {
                  "type": "boolean"
                },
                "followRedirects": {
                  "type": "boolean"
                },
                "honorLabels": {
                  "type": "boolean"
                },
                "interval": {
                  "type": "string"
                },
                "path": {
                  "type": "string"
                },
                "relabelings": {
                  "type": "array",
                  "items": {}
                },
                "scrapeTimeout": {
                  "type": "string"
                },
                "scheme": {
                  "type": "string"
                },
                "tlsConfig": {
                  "type": "object"
                }
              },
              "required": [
                "enabled",
                "annotations",
                "labels",
                "enableHttp2",
                "followRedirects",
                "honorLabels",
                "interval",
                "path",
                "relabelings",
                "scrapeTimeout",
                "scheme",
                "tlsConfig"
              ]
            }
          },
          "required": [
            "enabled",
            "podMonitor",
            "serviceMonitor"
          ]
        },
        "rules": {
          "type": "array",
          "items": {}
        }
      },
      "required": [
        "metrics",
        "rules"
      ]
    },
    "services": {
      "type": "object",
      "properties": {
        "http": {
          "type": "object",
          "properties": {
            "enabled": {
              "type": "boolean"
            },
            "annotations": {
              "type": "object"
            },
            "externalIPs": {
              "type": "array",
              "items": {}
            },
            "externalTrafficPolicy": {
              "type": "string"
            },
            "internalTrafficPolicy": {
              "type": "string"
            },
            "ipFamilies": {
              "type": "array",
              "items": {}
            },
            "labels": {
              "type": "object"
            },
            "loadBalancerClass": {
              "type": "string"
            },
            "loadBalancerIP": {
              "type": "string"
            },
            "loadBalancerSourceRanges": {
              "type": "array",
              "items": {}
            },
            "port": {
              "type": "integer"
            },
            "sessionAffinity": {
              "type": "string"
            },
            "sessionAffinityConfig": {
              "type": "object"
            },
            "type": {
              "type": "string"
            }
          },
          "required": [
            "enabled",
            "annotations",
            "externalIPs",
            "externalTrafficPolicy",
            "internalTrafficPolicy",
            "ipFamilies",
            "labels",
            "loadBalancerClass",
            "loadBalancerIP",
            "loadBalancerSourceRanges",
            "port",
            "sessionAffinity",
            "sessionAffinityConfig",
            "type"
          ]
        }
      },
      "required": [
        "http"
      ]
    },
    "serviceAccount": {
      "type": "object",
      "properties": {
        "existing": {
          "type": "object",
          "properties": {
            "enabled": {
              "type": "boolean"
            },
            "serviceAccountName": {
              "type": "string"
            }
          },
          "required": [
            "enabled",
            "serviceAccountName"
          ]
        },
        "new": {
          "type": "object",
          "properties": {
            "annotations": {
              "type": "object"
            },
            "labels": {
              "type": "object"
            },
            "automountServiceAccountToken": {
              "type": "boolean"
            },
            "imagePullSecrets": {
              "type": "array",
              "items": {}
            },
            "secrets": {
              "type": "array",
              "items": {}
            }
          },
          "required": [
            "annotations",
            "labels",
            "automountServiceAccountToken",
            "imagePullSecrets",
            "secrets"
          ]
        }
      },
      "required": [
        "existing",
        "new"
      ]
    }
  },
  "required": [
    "nameOverride",
    "fullnameOverride",
    "config",
    "deployment",
    "grafana",
    "ingress",
    "podDisruptionBudget",
    "networkPolicies",
    "prometheus",
    "services",
    "serviceAccount"
  ]
}