/*
 * Licensed to the Apache Software Foundation (ASF) under one
 * or more contributor license agreements.  See the NOTICE file
 * distributed with this work for additional information
 * regarding copyright ownership.  The ASF licenses this file
 * to you under the Apache License, Version 2.0 (the
 * "License"); you may not use this file except in compliance
 * with the License.  You may obtain a copy of the License at
 *
 *   http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing,
 * software distributed under the License is distributed on an
 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
 * KIND, either express or implied.  See the License for the
 * specific language governing permissions and limitations
 * under the License.
 */
[
  {
      "namespace": "org.apache.reef.reef.bridge.client.avro",
      "type": "record",
      "name": "AvroJobSubmissionParameters",
      "doc": "General cross-language job submission parameters shared by all runtimes",
      "fields": [
        { "name": "jobId", "type": "string" },
        { "name": "jobSubmissionFolder", "type": "string" }
      ]
  },
  {
      "namespace": "org.apache.reef.reef.bridge.client.avro",
      "type": "record",
      "name": "AvroLocalJobSubmissionParameters",
      "doc": "Job submission parameters used by the local runtime",
      "fields": [
        { "name": "sharedJobSubmissionParameters", "type": "AvroJobSubmissionParameters" },
        { "name": "driverStdoutFilePath", "type": "string" },
        { "name": "driverStderrFilePath", "type": "string" }
      ]
  },
  {
      "namespace": "org.apache.reef.reef.bridge.client.avro",
      "type": "record",
      "name": "AvroYarnJobSubmissionParameters",
      "doc": "General cross-language submission parameters to the YARN runtime",
      "fields": [
        { "name": "sharedJobSubmissionParameters", "type": "AvroJobSubmissionParameters" },
        { "name": "dfsJobSubmissionFolder", "type": "string", "default": "NULL" },
        { "name": "fileSystemUrl", "type": "string", "default": "NULL" },
        { "name": "jobSubmissionDirectoryPrefix", "type": "string" }
      ]
  },
  {
      "namespace": "org.apache.reef.reef.bridge.client.avro",
      "type": "record",
      "name": "AvroYarnClusterJobSubmissionParameters",
      "doc": "Cross-language submission parameters to the YARN runtime using Hadoop's submission client",
      "fields": [
        { "name": "yarnJobSubmissionParameters", "type": "AvroYarnJobSubmissionParameters" },
        { "name": "securityTokenKind", "type": "string", "default": "NULL" },
        { "name": "securityTokenService", "type": "string", "default": "NULL" },
        { "name": "driverMemory", "type": "int" },
        {"name": "environmentVariablesMap", "type": {"type": "map", "values": "string"}},
        { "name": "maxApplicationSubmissions", "type": "int" },
        { "name": "driverStdoutFilePath", "type": "string" },
        { "name": "driverStderrFilePath", "type": "string" }
      ]
  },
  {
      "namespace": "org.apache.reef.reef.bridge.client.avro",
      "type": "record",
      "name": "AvroAzureBatchJobSubmissionParameters",
      "doc": "Cross-language submission parameters to the Azure Batch runtime",
      "fields": [
        { "name": "sharedJobSubmissionParameters", "type": "AvroJobSubmissionParameters" },
        { "name": "AzureBatchAccountName", "type": "string" },
        { "name": "AzureBatchAccountUri", "type": "string" },
        { "name": "AzureBatchPoolId", "type": "string" },
        { "name": "AzureStorageAccountName", "type": "string" },
        { "name": "AzureStorageContainerName", "type": "string" },
        { "name": "AzureBatchPoolDriverPortsList", "type": {"type": "array", "items": "string"}},
        { "name": "ContainerRegistryServer", "type": "string" },
        { "name": "ContainerRegistryUsername", "type": "string" },
        { "name": "ContainerRegistryPassword", "type": "string" },
        { "name": "ContainerImageName", "type": "string" }
      ]
  }
]
