# Template (v20180702)

{% hint style="warning" %}
This page is still a work in progress.
{% endhint %}

The following is the proposed version of Ocean Template. By default, all keys are optional unless stated otherwise.

```yaml
---
version: 20180702 # required

# Required. Name should be unique across your account. Should be alphanumeric.
name: string

description: string

---
credentials:
# Required. The name of the credential to use. This credential should already
# be registered to your Mobingi account. Name is unique at account level.
- name: string

  # See vendor codes for valid values.
  provider: string

---
# The list of applications to be deployed.
applications:
# Required. The name of the application to deploy. Should be unique at
# deployment level.
- name: string

  # This should correspond to the credential used in creating the stack
  # this application will be installed to. 
  credential: string

  # Number of initial container instances to run.
  replicas: number

  # Application autoscaling minimum and maximum.
  min: number
  max: number

  # Containers to run in this application.
  containers:
  - name: string
    image: string
    args:
    - string
    envVars:
    - key: string
      value: string
    # If ports is empty, default value is a random valid port from 49152 to 65535.
    ports:
    - number

  service:
    # Valid values: LoadBalancer
    # If not provided, defaults to NodePort type.
    type: string

    # If not provided, defaults to port 80.
    port: number

    # If not provided, defaults to the first port number provided in the
    # first container.
    targetPort: number

  # So far, all key-values above are Mobingi-defined defaults for an application.
  # Set this to true if you want to skip deploying the application above.
  skip: bool

  # Use this key if you want to deploy raw Kubernetes apps to
  # your stack. All k8s resources are supported here.
  k8sExtra: |
    {Insert Kubernetes application deployments here}

  # The list of stacks where you want to deploy this application.
  # The following names should correspond to a cluster under the
  # `stacks` key.
  stacks:
  - string

---
# The list of stacks where you want to deploy your applications.
stacks:
#  Required. Stack name should be unique per account per provider.
- name: string

  # Valid values (for now:
  #   k8s
  type: string

  # This should correspond to a credential name you provided
  # somewhere in this template.
  credential: string

  # Region values depends on what cloud this stack belongs.
  region: string

  # Whether or not keypair is created for nodes.
  keyPair: bool

  master:
    # Optional. When you need zones in master, you can use this key.
    zones:
    - string

    # Optional: if setting the number of nodes for master is required,
    # use this key.
    nodeCount: number

  # Definitions of worker node groups for this cluster.
  workerGroups:
  # Cloud provider specific instance type, i.e. t2.medium
  - type: string

    # Optional. When you need zones in your worker nodes, you can use this key.
    zones:
    - string

    # Node autoscaling minimum and maximum values.
    min: number
    max: number

    # If true, this node group will use the cloud provider's low-cost
    # instances, i.e. Spot (AWS), Preemptive (GCP), Low priority (Azure), etc.
    lowCost: bool

  # So far, all key-values above are Mobingi-defined defaults for a k8s cluster.
  # Set this to true if you want to skip provisioning the cluster defined above.
  skip: bool

  # This key is provided if you want to provision any AWS resources using
  # CloudFormation.
  cfnExtra: |
    {Insert CloudFormation template here}

  # This key is provided if you want to provision any GCP resources using
  # Deployment Manager.
  dmExtra:
  - {filename}: |
      {Insert GCP Deployment Manager template here}

  # This key is provided if you want to provision any Azure resources using
  # Azure Resource Manager.
  armExtra: |
    {Insert Azure Resource Manager template here}

  # This key is provided if you want to provision any Alibaba resources using
  # Resource Orchestration Service.
  aliExtra: |
    {Insert Alibaba ROS template here}
```


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://docs.alphaus.cloud/ocean-en/template-2018-07-02.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
