{

"$schema": "http://json-schema.org/draft-07/schema#",
"$ref": "#/definitions/AppConfig",
"$id": "https://cloud.redhat.com/schemas/clowder-appconfig",
"title": "AppConfig",
"definitions": {
    "AppConfig": {
        "type": "object",
        "description": "ClowdApp deployment configuration for Clowder enabled apps.",
        "properties": {
            "privatePort": {
                "description": "Defines the private port that the app should be configured to listen on for API traffic.",
                "type": "integer"
            },
            "publicPort": {
                "description": "Defines the public port that the app should be configured to listen on for API traffic.",
                "type": "integer"
            },
            "webPort": {
                "description": "Deprecated: Use 'publicPort' instead.",
                "type": "integer"
            },
            "metricsPort": {
                "description": "Defines the metrics port that the app should be configured to listen on for metric traffic.",
                "type": "integer"
            },
            "metricsPath": {
                "description": "Defines the path to the metrics server that the app should be configured to listen on for metric traffic.",
                "type": "string"
            },
            "logging": {
                "$ref": "#/definitions/LoggingConfig"
            },
            "kafka": {
                "$ref": "#/definitions/KafkaConfig"
            },
            "database": {
                "$ref": "#/definitions/DatabaseConfig"
            },
            "objectStore": {
                "$ref": "#/definitions/ObjectStoreConfig"
            },
            "inMemoryDb": {
                "$ref": "#/definitions/InMemoryDBConfig"
            },
            "featureFlags": {
                "$ref": "#/definitions/FeatureFlagsConfig"
            },
            "endpoints": {
                "id": "endpoints",
                "type": "array",
                "items": {
                    "$ref": "#/definitions/DependencyEndpoint"
                }
            },
            "privateEndpoints": {
                "id": "privateEndpoints",
                "type": "array",
                "items": {
                    "$ref": "#/definitions/PrivateDependencyEndpoint"
                }
            }

        },
        "required": [
            "metricsPort",
            "metricsPath",
            "logging"
        ]
    },
    "LoggingConfig": {
        "title": "LoggingConfig",
        "type": "object",
        "description": "Logging Configuration",
        "properties": {
            "type": {
                "description": "Defines the type of logging configuration",
                "type": "string"
            },
            "cloudwatch": {
                "$ref": "#/definitions/CloudWatchConfig"
            }
        },
        "required": [
            "type"
        ]
    },
    "CloudWatchConfig": {
        "title": "CloudWatchConfig",
        "type": "object",
        "description": "Cloud Watch configuration",
        "properties": {
            "accessKeyId": {
                "description": "Defines the access key that the app should use for configuring CloudWatch.",
                "type": "string"
            },
            "secretAccessKey": {
                "description": "Defines the secret key that the app should use for configuring CloudWatch.",
                "type": "string"
            },
            "region": {
                "description": "Defines the region that the app should use for configuring CloudWatch.",
                "type": "string"
            },
            "logGroup": {
                "description": "Defines the logGroup that the app should use for configuring CloudWatch.",
                "type": "string"
            }
        },
        "required": [
            "accessKeyId",
            "secretAccessKey",
            "region",
            "logGroup"
        ]
    },
    "KafkaConfig": {
        "id": "kafkaConfig",
        "type": "object",
        "description": "Kafka Configuration",
        "properties": {
            "brokers": {
                "description": "Defines the brokers the app should connect to for Kafka services.",
                "type": "array",
                "items": {
                    "$ref": "#/definitions/BrokerConfig"
                }
            },
            "topics": {
                "type": "array",
                "description": "Defines a list of the topic configurations available to the application.",
                "items": {
                    "$ref": "#/definitions/TopicConfig"
                }
            }
        },
        "required": [
            "brokers",
            "topics"
        ]
    },
    "BrokerConfig": {
        "id": "brokerConfig",
        "type": "object",
        "description": "Broker Configuration",
        "properties": {
            "hostname": {
                "type": "string"
            },
            "port": {
                "type": "integer"
            }
        },
        "required": [
            "hostname"
        ]
    },
    "TopicConfig": {
        "id": "topicConfig",
        "type": "object",
        "description": "Topic Configuration",
        "properties": {
            "requestedName": {
                "description": "The name that the app requested in the ClowdApp definition.",
                "type": "string"
            },
            "name": {
                "description": "The name of the actual topic on the Kafka server.",
                "type": "string"
            },
            "consumerGroup": {
                "description": "Defines the consumer group that should be used for the topic.",
                "type": "string"
            }
        },
        "required": [
            "name",
            "requestedName"
        ]
    },
    "DatabaseConfig": {
        "id": "database",
        "title": "DatabaseConfig",
        "type": "object",
        "description": "Database Configuration",
        "properties": {
            "name": {
                "description": "Defines the database name.",
                "type": "string"
            },
            "username": {
                "description": "Defines a username with standard access to the database.",
                "type": "string"
            },
            "password": {
                "description": "Defines the password for the standard user.",
                "type": "string"
            },
            "hostname": {
                "description": "Defines the hostname of the database configured for the ClowdApp.",
                "type": "string"
            },
            "port": {
                "description": "Defines the port of the database configured for the ClowdApp.",
                "type": "integer"
            },
            "adminUsername": {
                "description": "Defines the pgAdmin username.",
                "type": "string"
            },
            "adminPassword": {
                "description": "Defines the pgAdmin password.",
                "type": "string"
            },
            "rdsCa": {
                "description": "Defines the CA used to access the database.",
                "type": "string"
            }
        },
        "required": [
            "name",
            "username",
            "password",
            "hostname",
            "port",
            "adminUsername",
            "adminPassword"
        ]
    },
    "ObjectStoreBucket": {
        "id": "objectStoreBucket",
        "type": "object",
        "description": "Object Storage Bucket",
        "properties": {
            "accessKey": {
                "description": "Defines the access key for specificed bucket.",
                "type": "string"
            },
            "secretKey": {
                "description": "Defines the secret key for the specified bucket.",
                "type": "string"
            },
            "requestedName": {
                "description": "The name that was requested for the bucket in the ClowdApp.",
                "type": "string"
            },
            "name": {
                "description": "The actual name of the bucket being accessed.",
                "type": "string"
            }
        },
        "required": [
            "name",
            "requestedName"
        ]
    },
    "ObjectStoreConfig": {
        "id": "objectStoreConfig",
        "type": "object",
        "description": "Object Storage Configuration",
        "properties": {
            "buckets": {
                "type": "array",
                "items": {
                    "$ref": "#/definitions/ObjectStoreBucket"
                }
            },
            "accessKey": {
                "description": "Defines the access key for the Object Storage server configuration.",
                "type": "string"
            },
            "secretKey": {
                "description": "Defines the secret key for the Object Storage server configuration.",
                "type": "string"
            },
            "hostname": {
                "description": "Defines the hostname for the Object Storage server configuration.",
                "type": "string"
            },
            "port": {
                "description": "Defines the port for the Object Storage server configuration.",
                "type": "integer"
            },
            "tls": {
                "description": "Details if the Object Server uses TLS.",
                "type": "boolean"
            }
        },
        "required": [
            "hostname",
            "port",
            "tls"
        ]
    },
    "FeatureFlagsConfig": {
        "id": "featureFlagsConfig",
        "type": "object",
        "description": "Feature Flags Configuration",
        "properties": {
            "hostname": {
                "description": "Defines the hostname for the FeatureFlags server",
                "type": "string"
            },
            "port": {
                "description": "Defines the port for the FeatureFlags server",
                "type": "integer"
            }
        },
        "required":[
            "hostname",
            "port"
        ]
    },
    "InMemoryDBConfig": {
        "id": "inMemoryDbConfig",
        "type": "object",
        "description": "In Memory DB Configuration",
        "properties": {
            "hostname": {
                "description": "Defines the hostname for the In Memory DB server configuration.",
                "type": "string"
            },
            "port": {
                "description": "Defines the port for the In Memory DB server configuration.",
                "type": "integer"
            },
            "username": {
                "description": "Defines the username for the In Memory DB server configuration.",
                "type": "string"
            },
            "password": {
                "description": "Defines the password for the In Memory DB server configuration.",
                "type": "string"
            }
        },
        "required": [
            "hostname",
            "port"

        ]
    },
    "DependencyEndpoint": {
        "id": "dependency",
        "type": "object",
        "description": "Dependent service connection info",
        "properties": {
            "name": {
                "description": "The PodSpec name of the dependent service inside the ClowdApp.",
                "type": "string"
            },
            "hostname": {
                "description": "The hostname of the dependent service.",
                "type": "string"
            },
            "port": {
                "description": "The port of the dependent service.",
                "type": "integer"
            },
            "app": {
                "description": "The app name of the ClowdApp hosting the service.",
                "type": "string"
            }
        },
        "required": [
            "name",
            "hostname",
            "port",
            "app"
        ]
    },
    "PrivateDependencyEndpoint": {
        "id": "privateDependency",
        "type": "object",
        "description": "Dependent service connection info",
        "properties": {
            "name": {
                "description": "The PodSpec name of the dependent service inside the ClowdApp.",
                "type": "string"
            },
            "hostname": {
                "description": "The hostname of the dependent service.",
                "type": "string"
            },
            "port": {
                "description": "The port of the dependent service.",
                "type": "integer"
            },
            "app": {
                "description": "The app name of the ClowdApp hosting the service.",
                "type": "string"
            }
        },
        "required": [
            "name",
            "hostname",
            "port",
            "app"
        ]
    }
}

}