{
  "$schema": "http://json-schema.org/draft-04/schema#",
  "$ref": "#/definitions/Requirements",
  "definitions": {
    "AutoUpdateConfig": {
      "properties": {
        "autoMerge": {
          "type": "boolean"
        },
        "enabled": {
          "type": "boolean"
        },
        "schedule": {
          "type": "string"
        }
      },
      "additionalProperties": false,
      "type": "object"
    },
    "AzureClusterNodesConfig": {
      "properties": {
        "clientID": {
          "type": "string"
        }
      },
      "additionalProperties": false,
      "type": "object"
    },
    "AzureConfig": {
      "properties": {
        "clusterNodes": {
          "$schema": "http://json-schema.org/draft-04/schema#",
          "$ref": "#/definitions/AzureClusterNodesConfig"
        },
        "dns": {
          "$schema": "http://json-schema.org/draft-04/schema#",
          "$ref": "#/definitions/AzureDNSConfig"
        },
        "registrySubscription": {
          "type": "string"
        },
        "secretStorage": {
          "$schema": "http://json-schema.org/draft-04/schema#",
          "$ref": "#/definitions/AzureSecretConfig"
        },
        "storage": {
          "$schema": "http://json-schema.org/draft-04/schema#",
          "$ref": "#/definitions/AzureStorageConfig"
        }
      },
      "additionalProperties": false,
      "type": "object"
    },
    "AzureDNSConfig": {
      "properties": {
        "resourceGroup": {
          "type": "string"
        },
        "subscriptionId": {
          "type": "string"
        },
        "tenantId": {
          "type": "string"
        }
      },
      "additionalProperties": false,
      "type": "object"
    },
    "AzureSecretConfig": {
      "properties": {
        "keyVaultName": {
          "type": "string"
        }
      },
      "additionalProperties": false,
      "type": "object"
    },
    "AzureStorageConfig": {
      "properties": {
        "storageAccountName": {
          "type": "string"
        }
      },
      "additionalProperties": false,
      "type": "object"
    },
    "ClusterConfig": {
      "properties": {
        "azure": {
          "$schema": "http://json-schema.org/draft-04/schema#",
          "$ref": "#/definitions/AzureConfig"
        },
        "chartKind": {
          "type": "string"
        },
        "chartRepository": {
          "type": "string"
        },
        "chartSecret": {
          "type": "string"
        },
        "clusterName": {
          "type": "string"
        },
        "devEnvApprovers": {
          "items": {
            "type": "string"
          },
          "type": "array"
        },
        "dockerRegistryOrg": {
          "type": "string"
        },
        "environmentGitOwner": {
          "type": "string"
        },
        "environmentGitPublic": {
          "type": "boolean"
        },
        "externalDNSSAName": {
          "type": "string"
        },
        "gitKind": {
          "type": "string"
        },
        "gitName": {
          "type": "string"
        },
        "gitPublic": {
          "type": "boolean"
        },
        "gitServer": {
          "type": "string"
        },
        "gke": {
          "$schema": "http://json-schema.org/draft-04/schema#",
          "$ref": "#/definitions/GKEConfig"
        },
        "issueProvider": {
          "$schema": "http://json-schema.org/draft-04/schema#",
          "$ref": "#/definitions/IssueTracker"
        },
        "kanikoFlags": {
          "type": "string"
        },
        "kanikoSAName": {
          "type": "string"
        },
        "project": {
          "type": "string"
        },
        "provider": {
          "type": "string"
        },
        "region": {
          "type": "string"
        },
        "registry": {
          "type": "string"
        },
        "zone": {
          "type": "string"
        }
      },
      "additionalProperties": false,
      "type": "object"
    },
    "EnvironmentConfig": {
      "properties": {
        "gitKind": {
          "type": "string"
        },
        "gitServer": {
          "type": "string"
        },
        "gitUrl": {
          "type": "string"
        },
        "ingress": {
          "$schema": "http://json-schema.org/draft-04/schema#",
          "$ref": "#/definitions/IngressConfig"
        },
        "key": {
          "type": "string"
        },
        "namespace": {
          "type": "string"
        },
        "owner": {
          "type": "string"
        },
        "promotionStrategy": {
          "type": "string"
        },
        "remoteCluster": {
          "type": "boolean"
        },
        "repository": {
          "type": "string"
        },
        "reusePullRequest": {
          "type": "boolean"
        }
      },
      "additionalProperties": false,
      "type": "object"
    },
    "GKEConfig": {
      "properties": {
        "projectNumber": {
          "type": "string"
        }
      },
      "additionalProperties": false,
      "type": "object"
    },
    "IngressConfig": {
      "properties": {
        "annotations": {
          "patternProperties": {
            ".*": {
              "type": "string"
            }
          },
          "type": "object"
        },
        "apiVersion": {
          "type": "string"
        },
        "cloud_dns_secret_name": {
          "type": "string"
        },
        "domain": {
          "type": "string"
        },
        "externalDNS": {
          "type": "boolean"
        },
        "ignoreLoadBalancer": {
          "type": "boolean"
        },
        "kind": {
          "type": "string"
        },
        "namespaceSubDomain": {
          "type": "string"
        },
        "tls": {
          "$schema": "http://json-schema.org/draft-04/schema#",
          "$ref": "#/definitions/TLSConfig"
        }
      },
      "additionalProperties": false,
      "type": "object"
    },
    "IssueTracker": {
      "properties": {
        "jira": {
          "$schema": "http://json-schema.org/draft-04/schema#",
          "$ref": "#/definitions/JiraTracker"
        }
      },
      "additionalProperties": false,
      "type": "object"
    },
    "JiraTracker": {
      "properties": {
        "project": {
          "type": "string"
        },
        "serverUrl": {
          "type": "string"
        },
        "userName": {
          "type": "string"
        }
      },
      "additionalProperties": false,
      "type": "object"
    },
    "MavenRepositoryConfig": {
      "properties": {
        "releaseUrl": {
          "type": "string"
        },
        "snapshotUrl": {
          "type": "string"
        }
      },
      "additionalProperties": false,
      "type": "object"
    },
    "RepositoryConfig": {
      "properties": {
        "maven": {
          "$schema": "http://json-schema.org/draft-04/schema#",
          "$ref": "#/definitions/MavenRepositoryConfig"
        }
      },
      "additionalProperties": false,
      "type": "object"
    },
    "Requirements": {
      "properties": {
        "apiVersion": {
          "type": "string"
        },
        "kind": {
          "type": "string"
        },
        "spec": {
          "$schema": "http://json-schema.org/draft-04/schema#",
          "$ref": "#/definitions/RequirementsConfig"
        }
      },
      "additionalProperties": false,
      "type": "object"
    },
    "RequirementsConfig": {
      "properties": {
        "autoUpdate": {
          "$schema": "http://json-schema.org/draft-04/schema#",
          "$ref": "#/definitions/AutoUpdateConfig"
        },
        "cluster": {
          "$schema": "http://json-schema.org/draft-04/schema#",
          "$ref": "#/definitions/ClusterConfig"
        },
        "environments": {
          "items": {
            "$schema": "http://json-schema.org/draft-04/schema#",
            "$ref": "#/definitions/EnvironmentConfig"
          },
          "type": "array"
        },
        "extraDomains": {
          "items": {
            "$ref": "#/definitions/IngressConfig"
          },
          "type": "array"
        },
        "ingress": {
          "$ref": "#/definitions/IngressConfig"
        },
        "kuberhealthy": {
          "type": "boolean"
        },
        "pipelineUser": {
          "$schema": "http://json-schema.org/draft-04/schema#",
          "$ref": "#/definitions/UserNameEmailConfig"
        },
        "repositories": {
          "$schema": "http://json-schema.org/draft-04/schema#",
          "$ref": "#/definitions/RepositoryConfig"
        },
        "repository": {
          "type": "string"
        },
        "secretStorage": {
          "type": "string"
        },
        "storage": {
          "items": {
            "$schema": "http://json-schema.org/draft-04/schema#",
            "$ref": "#/definitions/StorageConfig"
          },
          "type": "array"
        },
        "terraform": {
          "type": "boolean"
        },
        "terraformVault": {
          "type": "boolean"
        },
        "vault": {
          "$schema": "http://json-schema.org/draft-04/schema#",
          "$ref": "#/definitions/VaultConfig"
        },
        "webhook": {
          "type": "string"
        }
      },
      "additionalProperties": false,
      "type": "object"
    },
    "StorageConfig": {
      "properties": {
        "name": {
          "type": "string"
        },
        "url": {
          "type": "string"
        }
      },
      "additionalProperties": false,
      "type": "object"
    },
    "TLSConfig": {
      "properties": {
        "email": {
          "type": "string"
        },
        "enabled": {
          "type": "boolean"
        },
        "production": {
          "type": "boolean"
        },
        "secretName": {
          "type": "string"
        }
      },
      "additionalProperties": false,
      "type": "object"
    },
    "UserNameEmailConfig": {
      "properties": {
        "email": {
          "type": "string"
        },
        "username": {
          "type": "string"
        }
      },
      "additionalProperties": false,
      "type": "object"
    },
    "VaultAWSConfig": {
      "properties": {
        "autoCreate": {
          "type": "boolean"
        },
        "dynamoDBRegion": {
          "type": "string"
        },
        "dynamoDBTable": {
          "type": "string"
        },
        "iamUserName": {
          "type": "string"
        },
        "kmsKeyId": {
          "type": "string"
        },
        "kmsRegion": {
          "type": "string"
        },
        "s3Bucket": {
          "type": "string"
        },
        "s3Prefix": {
          "type": "string"
        },
        "s3Region": {
          "type": "string"
        }
      },
      "additionalProperties": false,
      "type": "object"
    },
    "VaultAzureConfig": {
      "properties": {
        "containerName": {
          "type": "string"
        },
        "keyName": {
          "type": "string"
        },
        "storageAccountName": {
          "type": "string"
        },
        "tenantId": {
          "type": "string"
        },
        "vaultName": {
          "type": "string"
        }
      },
      "additionalProperties": false,
      "type": "object"
    },
    "VaultConfig": {
      "properties": {
        "aws": {
          "$schema": "http://json-schema.org/draft-04/schema#",
          "$ref": "#/definitions/VaultAWSConfig"
        },
        "azure": {
          "$schema": "http://json-schema.org/draft-04/schema#",
          "$ref": "#/definitions/VaultAzureConfig"
        },
        "bucket": {
          "type": "string"
        },
        "disableURLDiscovery": {
          "type": "boolean"
        },
        "key": {
          "type": "string"
        },
        "keyring": {
          "type": "string"
        },
        "kubernetesAuthPath": {
          "type": "string"
        },
        "name": {
          "type": "string"
        },
        "namespace": {
          "type": "string"
        },
        "recreateBucket": {
          "type": "boolean"
        },
        "secretEngineMountPoint": {
          "type": "string"
        },
        "serviceAccount": {
          "type": "string"
        },
        "url": {
          "type": "string"
        }
      },
      "additionalProperties": false,
      "type": "object"
    }
  }
}