GuidesAPI Reference
Log In
Guides

Service Configuration Reference

service:
  name: ""  # required, unique Service name in the Application
  application: ""  # required, Application that this Service belongs to
  
  # at least one of the following configurations are required
  kubernetesConfig:  # optional, configure a Kubernetes Service
    type: KUBERNETES | KUSTOMIZE  # required
    local:
      # one of path, paths is required
      path: ""  # relative path to Kubernetes config file or directory. If directory, all YAML files (side from .pvn.yaml files) are concatenated together.
      paths:  # same as `path`, but can be specified multiple times
      - ""
      subPath: ""  # optional, used in conjunction with path to allow templating `path` to Kubernetes config file. When specified, `path` must be a directory and the entire content of the directory will be uploaded to Prodvana. Cannot be used with `paths`.
      excludePattern:  # optional, used in conjunection with subPath to exclude sub paths from being tarball'ed and uploaded to Prodvana. Follows the same format as gitignore.
      - ""
    patches:  # optional, patch the Kubernetes or Kustomize configs that was read in
    - target: # optional, only apply this patch to objects matching this filter
        # if any of these fields are omitted, it is the same as not filtering on that field
        group: ""  # optional, Kubernetes API group. e.g. `apps` (the part of `apiVersion` before the /)
        version: ""  # optional, Kubernetes API version. e.g. `v1` (the part of `apiVersion` after the /)
        kind: ""  # optional, Kubernetes object kind. e.g. `Deployment`
        name: ""  # optional, Kubernetes object name
        namespace: ""  # optional, Kubernetes namespace
      replace:  # required
        path: ""  # json6902 path leading to the field to patch, e.g. `/spec/replicas` or `/spec/template/spec/containers/0/ports/0/nodePort`
        # one of these is required
        string: ""  # string value
        intAsString: ""  # int value written as a string. Will be coerced to an int and patched in as an int
  helm:  # optional, configure a Helm Service
    # one of local or remote is required
    remote:  # a remote Helm chart
      repo: ""  # required, Helm repo name
      chart: ""  # required, Helm chart name
      chartVersion: ""  # required, Helm chart version
    local:  # a local Helm chart
      path: ""  # path to directory containing Chart.yaml
    valuesOverrides:  # optional, override Helm values. When multiple are specified, they are merged with the later ones taking precedence.
    - # one of local or inlined is required
      inlined: ""  # inlined Helm values.yaml string
      local:
        path: ""  # required, path to values.yaml file
        subPath: ""  # optional, used in conjunction with path to allow templating `path` to Helm values.yaml file. When specified, `path` must be a directory and the entire content of the directory will be uploaded to Prodvana.
    releaseName: ""  # optional, Helm release name, defaults to an autogenerated name. Mainly useful for migrating an existing Helm release into Prodvana.
  customRuntime:  # optional, configure a Service that runs on a custom Runtime.
    parameterValues:  # pass parameters to the Custom Runtime
    - 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: ""
  awsEcs:
    taskDefinition:  # required, ECS task definition
      local:
        path: ""  # path to task definition JSON
        subPath: ""  # optional, used in conjunction with path to allow templating `path` to task definition JSON. When specified, `path` must be a directory and the entire content of the directory will be uploaded to Prodvana.
    # one of serviceDefinition or updateTaskDefinitionOnly is required
    serviceDefinition:  # ECS service definition
      local:
        path: ""  # path to service definition JSON
        subPath: ""  # optional, used in conjunction with path to allow templating `path` to service definition JSON. When specified, `path` must be a directory and the entire content of the directory will be uploaded to Prodvana.
    updateTaskDefinitionOnly: false  # update task definition without touching the service definition. The ECS service must already exist.
    ecsServiceNameOverride: ""  # optional, override the ECS service name. Defaults to the Prodvana service name. Override this if you are deploying the same service to the same ECS cluster via many different Release Channels
  googleCloudRun:
    local:
      path: ""  # path to cloud run YAML
      subPath: ""  # optional, used in conjunction with path to allow templating `path` to cloud run YAML. When specified, `path` must be a directory and the entire content of the directory will be uploaded to Prodvana.
  terraform:
    image: ""  # required: The full Terraform Docker image.
    path: ""  # required: The path inside your Docker image to the Terraform module to run.
    shellPath: ""  # optional: A shell needed by the Terraform Runner. `sh` and `bash` are supported. Defaults to `/bin/sh`.
    backendConfig:  # extra backend configurations, to be passed to -backend-config=key=value in terraform-init.
      "key": "value"
  # end of configuration one of
  
  env:  # optional, additional env to be injected into the running Service. only supported for Kubernetes.
    "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)
  convergenceExtensions:  # optional, Convergence Extensions that every Release Channel should get
  - # one of `inlined`, `instance`, or `ref` is required
    inlined:  # define a Convergence Extension inlined
      name: ""  # required, name of the convergence extension
      # one of `kubernetesConfig` or `taskConfig` is required
      kubernetesConfig:  # Kubernetes config defining a Job
        type: KUBERNETES | KUSTOMIZE
        local:
          path: ""  # relative path to the Job definition or a directory containing the Job definition
          subPath: "" # optional, used in conjunction with path to allow templating `path` to the Job definition. When specified, `path` must be a directory and the entire content of the directory will be uploaded to Prodvana.
      taskConfig:
        program:  # required
          name: ""  # required, container name
          # one of `image` or `imageTag` with `imageRegistryInfo` is required.
          image: ""  # docker image
          imageRegistryInfo:
            containerRegistry: ""  # container registry name on Prodvana
            imageRepository: ""  # image repository (path after the domain)
          imageTag: ""  # image tag, used in conjunction with imageRegistryInfo
          entrypoint:  # optional, override the image entrypoint
          - ""
          cmd:  # optional, override the image command
          - ""
          env:  # optional, env variables
            "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)
          workingDirectory: ""  # optional, override working directory from the image
      lifecycle: CONVERGENCE_START | PRE_APPROVAL | APPROVAL | POST_APPROVAL | DEPLOYMENT | POST_DEPLOYMENT  # lifecycle the extension should run in
      dependencies: # optional, list of other Convergence Extensions that will run before this one
		  - name: "" # name of a Convergence Extension defined in the `convergenceExtensions` field
  convergenceExtensionInstances: {}  # Deprecated
  convergenceProtections:  # optional, Protections on the convergence that every Release Channel should get
  - 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: # required, indicate when the Protection should run
      # 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.
  noCleanupOnDelete: false  # optional, do not delete resources on the Runtime when deleting the Service or Release Channel. Only used for Kubernetes and Helm (other backends already do not support cleanup).
  runtimeConnection: ""  # optional, which Runtime in the Release Channel to use. Will default to whatever the appropriate Runtime is (e.g. Kubernetes Runtime if the service is a Kubernetes Service).
  autoRollback:  # optional
    disabled: false  # disable automatic rollbacks
  maestro:  # optional, configure Maestro strategy. Defaults to IMMEDIATE
    strategy: IMMEDIATE | RELEASE_TRAIN
  parameters:  # optional, parameters that can be changed from the UI without editing config files. Available in template variables as {{.Params.*}}
  - name: ""  # required, parameter name, used as the template variable name
    description: ""  # optional
    required: false  # optional, mark parameter as required
    string:  # string parameter
      defaultValue: ""  # optional, default value
    dockerImage:  # docker image parameter, populated from a docker registry integration
      imageRegistryInfo:
        containerRegistry: ""  # container registry name on Prodvana
        imageRepository: ""  # image repository (path after the domain)
      defaultTag: ""  # optional, default value
    int:  # int parameter
      defaultValue: 0  # optional, default value
    commit:  # commit parameter, populated from a repository integration
      repository: ""  # required, e.g. github.com/foo/bar
      branch: ""  # optional, branch to pull commits from when populating parameter textbox in the Prodvana UI
    blob:  # similar to string, but pass a blob ID in the template variable instead of the string content. Useful if the string content is going to be very large.
      defaultValue: ""  # optional, default value
    secret: {}  # secret stored on Prodvana. The content of the secret is passed via the template variable
  constants:  # optional, constants to be made available in template variables under {{.Constants.*}}
  - name: ""  # required, name of constant, also used as template variable name
    string:
      value: ""  # constant value
  perReleaseChannel:  # optional, Release Channel-specific settings to override or merge with values above
  - releaseChannel: ""  # required, Release Channel name
    kubernetesConfig: ... # overrides Service-level
    helm:  # merged with Service-level
      valuesOverrides:  # appended to Service-level
      ...  # the rest overrides Service-level
    customRuntime:  # merged with Service-level
      clearOnPerReleasechannelMerge: false  # override Service-level parameters list instead of appending
      parameterValues: ...  # appended or overrides depending on clearOnPerReleasechannelMerge
    awsEcs: ...  # merged with Service-level
    googleCloudRun: ...  # merged with Service-level
    env: ...  # merged with Service-Level, takes precedence
    constants: ...  # appended to Service-level, takes precedence
    convergenceExtensions: ...  # appended to Service-level
    runtimeConnection: ""  # overrides Service-level
    convergenceProtections: ...  # appended to Service-level
    protections:  # Service-instance-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: {}
        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.