# Copyright 2019 Google LLC
#
# Licensed 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.

# NOTE: This file is auto generated by the elixir code generator program.
# Do not edit this file manually.

defmodule GoogleApi.Batch.V1.Model.Runnable do
  @moduledoc """
  Runnable describes instructions for executing a specific script or container as part of a Task.

  ## Attributes

  *   `alwaysRun` (*type:* `boolean()`, *default:* `nil`) - By default, after a Runnable fails, no further Runnable are executed. This flag indicates that this Runnable must be run even if the Task has already failed. This is useful for Runnables that copy output files off of the VM or for debugging. The always_run flag does not override the Task's overall max_run_duration. If the max_run_duration has expired then no further Runnables will execute, not even always_run Runnables.
  *   `background` (*type:* `boolean()`, *default:* `nil`) - Normally, a runnable that doesn't exit causes its task to fail. However, you can set this field to `true` to configure a background runnable. Background runnables are allowed continue running in the background while the task executes subsequent runnables. For example, background runnables are useful for providing services to other runnables or providing debugging-support tools like SSH servers. Specifically, background runnables are killed automatically (if they have not already exited) a short time after all foreground runnables have completed. Even though this is likely to result in a non-zero exit status for the background runnable, these automatic kills are not treated as task failures.
  *   `barrier` (*type:* `GoogleApi.Batch.V1.Model.Barrier.t`, *default:* `nil`) - Barrier runnable.
  *   `container` (*type:* `GoogleApi.Batch.V1.Model.Container.t`, *default:* `nil`) - Container runnable.
  *   `displayName` (*type:* `String.t`, *default:* `nil`) - Optional. DisplayName is an optional field that can be provided by the caller. If provided, it will be used in logs and other outputs to identify the script, making it easier for users to understand the logs. If not provided the index of the runnable will be used for outputs.
  *   `environment` (*type:* `GoogleApi.Batch.V1.Model.Environment.t`, *default:* `nil`) - Environment variables for this Runnable (overrides variables set for the whole Task or TaskGroup).
  *   `ignoreExitStatus` (*type:* `boolean()`, *default:* `nil`) - Normally, a runnable that returns a non-zero exit status fails and causes the task to fail. However, you can set this field to `true` to allow the task to continue executing its other runnables even if this runnable fails.
  *   `labels` (*type:* `map()`, *default:* `nil`) - Labels for this Runnable.
  *   `script` (*type:* `GoogleApi.Batch.V1.Model.Script.t`, *default:* `nil`) - Script runnable.
  *   `timeout` (*type:* `String.t`, *default:* `nil`) - Timeout for this Runnable.
  """

  use GoogleApi.Gax.ModelBase

  @type t :: %__MODULE__{
          :alwaysRun => boolean() | nil,
          :background => boolean() | nil,
          :barrier => GoogleApi.Batch.V1.Model.Barrier.t() | nil,
          :container => GoogleApi.Batch.V1.Model.Container.t() | nil,
          :displayName => String.t() | nil,
          :environment => GoogleApi.Batch.V1.Model.Environment.t() | nil,
          :ignoreExitStatus => boolean() | nil,
          :labels => map() | nil,
          :script => GoogleApi.Batch.V1.Model.Script.t() | nil,
          :timeout => String.t() | nil
        }

  field(:alwaysRun)
  field(:background)
  field(:barrier, as: GoogleApi.Batch.V1.Model.Barrier)
  field(:container, as: GoogleApi.Batch.V1.Model.Container)
  field(:displayName)
  field(:environment, as: GoogleApi.Batch.V1.Model.Environment)
  field(:ignoreExitStatus)
  field(:labels, type: :map)
  field(:script, as: GoogleApi.Batch.V1.Model.Script)
  field(:timeout)
end

defimpl Poison.Decoder, for: GoogleApi.Batch.V1.Model.Runnable do
  def decode(value, options) do
    GoogleApi.Batch.V1.Model.Runnable.decode(value, options)
  end
end

defimpl Poison.Encoder, for: GoogleApi.Batch.V1.Model.Runnable do
  def encode(value, options) do
    GoogleApi.Gax.ModelBase.encode(value, options)
  end
end
