GuidesAPI Reference
Log In

Application Configuration Reference

application:
  name: ""  # requried, unique Application name
  releaseChannels:  # required
  - name: ""  # required, Release Channel name
    group: ""  # if specified, this Release Channel is part of a group. This can affect how release channels are rendered on the Prodvana UI.
    runtimes:  # required, list of Runtimes that Services in this Release Channel can deploy to. A Service will pick only one Runtime on this list to deploy to, e.g. having an ECS Runtime and Kubernetes Runtime available in the same Release Channel for appropriate Services.
    - runtime: ""  # Runtime name
      name: ""  # optional, fill this in if the Release Channel has more than one Runtime capable of running the same kind of Services. Will be used by the Service's `runtimeConnection` setting.
      containerOrchestration:  # optional settings for certain kinds of Runtimes
        k8s:  # Kubernetes Runtime settings
          namespace: ""  # optional, what namespace to use for this Release Channel. If not specified, Prodvana will create one based on the Application and Release Channel names.
    preconditions:  # optional, what needs to be true before deploying to this Release Channel
    - # exactly one of these can be specified
      releaseChannelStable:  # wait for a Release Channel to be stable
        # one of `releaseChannel`, `selector` is required
        releaseChannel: ""  # Release Channel name that the Service must be stable in before deploying
        selector: ""  # a label selector query to wait on a group of Release Channels. @application=<app name> is added automatically.
        allowEmpty: false  # if using selector, allow selector to return an empty list (otherwise, doing so will result in an error).
      manualApproval:  # wait for an approval via Prodvana UI
        name: ""  # optional, approval name. will be autogenerated
        description: ""  # optional
        everyAction: false  # request approval before every deployment action, not just the first. Only works for Custom Runtimes, ignored otherwise.
      sharedManualApproval:  # like manualApproval, but have a single approval shared by many different Release Channels
        name: ""  # required, the name is what determines uniqueness.
    protections:  # Release-Channel-level protections
    - name: ""  # optional, defaults to Protection name. Useful if the same Protection is instantiated many times in the same Service/Release Channel
      ref:  # required, reference a Protection defined from `pvnctl configs apply`
      - name: ""  # required, Protection name
        parameters:
        - name: ""  # required, parameter name
          # one of the following is required and must match the parameter definition
          string: ""  # string parameter value
          int: 0  # int parameter value
          dockerImageTag: ""  # docker image tag parameter value
          commit: ""  # commit parameter value
          blob: ""  # blob parameter value, the content of the blob to pass as an ID
          secret:  # a Prodvana secret
            secretRef:
              key: ""
              version: ""
      lifecycle: # optional, if not specified, the Protection will run but not impact convergence
        # at least one of these is required
        preApproval: {}
        postApproval: {}
        deployment:
          failureBehavior: FAIL | BLOCK  # optional, defaults to FAIL. What to do when the protection fails. BLOCK prevents Prodvana from applying further changes until Protection starts passing again, while FAIL causes the convergence to fail and any automatic rollback to be triggered.
        postDeployment:
          checkDuration: 0s  # required, how long to check the Protection for after deployment is complete
          delayCheckDuration: 0s  # optional, how long to wait before checking the Protection. If specified, the total duration in this lifecycle is the sum of checkDuration and delayCheckDuration.
    serviceInstanceProtections: ...  # Service-Instance-level Protections to apply to every Service in this Release Channel. Same schema as `protections`.
    convergenceProtections: ...  # convergence-level Protections to apply to every Service in this Release Channel. Same schema as `protections`.
    policy:  # optional
      defaultEnv:  # optional, default env variables for all Services, only supported for Kubernetes or Prodvana-backend-agnostic config
        "key":
           # one of these is required
          value: ""  # string value
          secret:  # reference a secret stored on Prodvana
            key: ""  # required
            version: ""  # required
          kubernetesSecret:  # reference a Kubernetes secret. The secret must already exist on the same namespace as the Service.
            secretName: ""  # required, secret name
            key: ""  # required, map key inside the secret to use (Kubernetes secrets are stored as a map)
    constants:  # optional, constants to be made available to Services in template variables under {{.Constants.*}}
    - name: ""  # required, name of constant, also used as template variable name
      string:
        value: ""  # constant value
    labels:  # optional, custom Release Channel labels
    - label: ""  # required
      value: ""  # required
    deployAnnotations:  # optional, annotations used when pushing events to external systems
      honeycomb:  # optional
        environment: ""  # required, Honeycomb environment
        dataset: ""  # optional
    disableAllProtections: false  # optional, disable all Protections defined on this Release Channel. Useful for testing or spinning up new Release Channels quickly.
  releaseChannelGroups:  # optional, used to generate a large list of Release Channels from a Runtime label selector.
  - name: ""  # required, Release Channel group name
    runtimeSelector: ""  # required, label selector for runtimes to generate release channels for. One release channel will be generated for each runtime that matches this selector. The selector will automatically be intersected with "@type=runtime".
    allowEmpty: false  # required, allow selector to return an empty list (otherwise, doing so will result in an error).
    # optional, customize how the release channel will be generated.
    # Template variables .Builtins.Group an d.Builtins.Runtime are available.
    # Any value specified here will be merged with:
    # name: {{.Builtins.Group}}-{{.Builtins.Runtime.Name}}
    # group: {{.Builtins.Group}}
    # runtimes:
    # - runtime: {{Builtins.Runtime.Name}}
    template: ...
  notifications:  # optional
    slack:  # Slack notification for releases
      channel: ""  # Slack channel to send notifications to
      errorChannel: ""  # optional, Slack channel to only send error notifications to