{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "$id": "https://raw.githubusercontent.com/api-evangelist/cloudera/main/json-schema/cloudera-create-ml-serving-app-request-schema.json",
  "title": "CreateMlServingAppRequest",
  "description": "Request object for the CreateMlServingApp method.",
  "x-generated": "2026-10-04",
  "x-method": "derived",
  "x-generator": "derive-json-schema.py",
  "x-source": "openapi/cloudera-ml-api-openapi.yml#/components/schemas/CreateMlServingAppRequest",
  "type": "object",
  "required": [
    "appName",
    "environmentCrn"
  ],
  "properties": {
    "appName": {
      "type": "string",
      "description": "The name of the Cloudera AI Inference Service to be created."
    },
    "environmentCrn": {
      "type": "string",
      "description": "The environment CRN."
    },
    "clusterCrn": {
      "type": "string",
      "description": "The cluster CRN of an existing cluster where Cloudera AI Inference Service instance will be deployed."
    },
    "provisionK8sRequest": {
      "description": "The request for Kubernetes cluster provisioning. Required in public cloud.",
      "$ref": "#/$defs/MlServingProvisionK8sRequest"
    },
    "usePublicLoadBalancer": {
      "type": "boolean",
      "description": "The boolean flag to request a public load balancer. By default, a private load balancer is used."
    },
    "skipValidation": {
      "type": "boolean",
      "description": "Skip pre-flight validations if requested."
    },
    "loadBalancerIPWhitelists": {
      "type": "array",
      "items": {
        "type": "string"
      },
      "description": "The whitelist of IPs for load balancer."
    },
    "subnetsForLoadBalancers": {
      "type": "array",
      "items": {
        "type": "string"
      },
      "description": "The list of subnets to be used for the load balancer."
    },
    "staticSubdomain": {
      "type": "string",
      "description": "The static subdomain to be used for the Cloudera AI Inference Service instance."
    },
    "ozoneS3Creds": {
      "description": "Ozone credentials for the Cloudera On-Premise cluster.",
      "$ref": "#/$defs/MlServingOzoneCreds"
    },
    "enableFineGrainedAccessControl": {
      "type": "boolean",
      "description": "The boolean flag to enable fine-grained access control. By default, this flag is disabled."
    }
  },
  "$defs": {
    "Accelerator": {
      "type": "object",
      "description": "Accelerator, i.e. GPU configurations.",
      "properties": {
        "type": {
          "type": "string",
          "description": "The GPU type."
        },
        "count": {
          "type": "integer",
          "format": "int64",
          "description": "The GPU count."
        }
      }
    },
    "Autoscaling": {
      "type": "object",
      "description": "Configuration for instance auto scaling.",
      "required": [
        "minInstances",
        "maxInstances"
      ],
      "properties": {
        "minInstances": {
          "type": "integer",
          "format": "int32",
          "description": "The minimum number of instance for auto scaling."
        },
        "maxInstances": {
          "type": "integer",
          "format": "int32",
          "description": "The maximum number of instance for auto scaling."
        },
        "enabled": {
          "type": "boolean",
          "description": "The boolean flag to enable the auto scaling."
        }
      }
    },
    "AwsCrConfig": {
      "type": "object",
      "description": "The capacity reservation config for EKS",
      "properties": {
        "capacityReservationId": {
          "type": "string",
          "description": "The capacity reservation Id"
        },
        "network": {
          "description": "The network config having subnets for AZ",
          "$ref": "#/$defs/Network"
        }
      }
    },
    "Gcp": {
      "type": "object",
      "description": "Contains the information about gcp.",
      "properties": {
        "secondaryPodRangeName": {
          "type": "string",
          "description": "The secondary pod range name for GCP."
        }
      }
    },
    "InstanceGroup": {
      "type": "object",
      "description": "Contains the necessary info for an instance group.",
      "required": [
        "instanceType"
      ],
      "properties": {
        "instanceType": {
          "type": "string",
          "description": "The cloud provider instance type for the node instance."
        },
        "instanceTier": {
          "type": "string",
          "description": "The tier of the instance i.e. on-demand/spot."
        },
        "instanceCount": {
          "type": "integer",
          "format": "int32",
          "description": "The initial number of instance node."
        },
        "name": {
          "type": "string",
          "description": "The unique name for the instance or resource group of the workbench."
        },
        "ingressRules": {
          "type": "array",
          "items": {
            "type": "string"
          },
          "description": "The networking rules for the ingress."
        },
        "rootVolume": {
          "description": "The root volume of the instance.",
          "$ref": "#/$defs/RootVolume"
        },
        "autoscaling": {
          "description": "The auto scaling configuration.",
          "$ref": "#/$defs/Autoscaling"
        },
        "accelerator": {
          "description": "The accelerator, which refers to the GPU type configuration.",
          "$ref": "#/$defs/Accelerator"
        },
        "singleZone": {
          "type": "boolean",
          "description": "The boolean flag to provision single zone or multi zone cluster."
        },
        "aws": {
          "description": "The capacity reservation config for EKS.",
          "$ref": "#/$defs/AwsCrConfig"
        }
      }
    },
    "MlServingOzoneCreds": {
      "type": "object",
      "description": "Request object for the MlServingOzoneCreds method.",
      "properties": {
        "s3AccessID": {
          "type": "string",
          "description": "The Ozone S3 access key ID name."
        },
        "s3SecretAccessKey": {
          "type": "string",
          "description": "The Ozone S3 secret access key name.",
          "x-sensitive": true
        },
        "s3EndPointUrl": {
          "type": "string",
          "description": "The Ozone S3 end point.",
          "x-no-paramfile": true
        },
        "s3CaCertBundle": {
          "type": "string",
          "description": "The Ozone S3 CA bundle."
        }
      }
    },
    "MlServingProvisionK8sRequest": {
      "type": "object",
      "description": "Request object for provisioning Cloudera AI Inference Service instance groups.",
      "required": [
        "environmentCrn"
      ],
      "properties": {
        "environmentCrn": {
          "type": "string",
          "description": "The CRN of the environment for the cluster to create."
        },
        "instanceGroups": {
          "type": "array",
          "items": {
            "$ref": "#/$defs/InstanceGroup"
          },
          "description": "The instance groups."
        },
        "tags": {
          "type": "array",
          "items": {
            "$ref": "#/$defs/ProvisionTag"
          },
          "description": "Tags to add to the cloud provider resources created. This is in addition to any tags added by Cloudera."
        },
        "network": {
          "description": "The overlay network for an AWS Kubernetes cluster's CNI.",
          "$ref": "#/$defs/OverlayNetwork"
        }
      }
    },
    "Network": {
      "type": "object",
      "description": "The network config for capacity reservation.",
      "properties": {
        "subnets": {
          "type": "array",
          "items": {
            "type": "string"
          },
          "description": "The array of subnets for AZ"
        }
      }
    },
    "OverlayNetwork": {
      "type": "object",
      "description": "Contains the information about overlay network.",
      "properties": {
        "plugin": {
          "type": "string",
          "description": "The plugin specifies specific cni vendor, ex: calico, weave etc."
        },
        "topology": {
          "description": "The options for overlay topology.",
          "$ref": "#/$defs/Topology"
        },
        "gcp": {
          "description": "The networking options for GCP platform.",
          "$ref": "#/$defs/Gcp"
        }
      }
    },
    "ProvisionTag": {
      "type": "object",
      "description": "Contains a single tag entry that will be configured on cloud resources associated with a workbench.",
      "required": [
        "key",
        "value"
      ],
      "properties": {
        "key": {
          "type": "string",
          "description": "The name for the tag."
        },
        "value": {
          "type": "string",
          "description": "The value for the tag."
        }
      }
    },
    "RootVolume": {
      "type": "object",
      "description": "Configuration for instance root device volume.",
      "required": [
        "size"
      ],
      "properties": {
        "size": {
          "type": "integer",
          "format": "int64",
          "description": "The volume size in GB."
        }
      }
    },
    "Topology": {
      "type": "object",
      "description": "Contains the information about topology.",
      "properties": {
        "subnets": {
          "type": "array",
          "items": {
            "type": "string"
          },
          "description": "The options for subnets."
        }
      }
    }
  }
}