# 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.Genomics.V1.Model.VirtualMachine do
  @moduledoc """
  Carries information about a Compute Engine VM resource.

  ## Attributes

  *   `accelerators` (*type:* `list(GoogleApi.Genomics.V1.Model.Accelerator.t)`, *default:* `nil`) - The list of accelerators to attach to the VM.
  *   `bootDiskSizeGb` (*type:* `integer()`, *default:* `nil`) - The size of the boot disk, in GB. The boot disk must be large enough to accommodate all of the Docker images from each action in the pipeline at the same time. If not specified, a small but reasonable default value is used.
  *   `bootImage` (*type:* `String.t`, *default:* `nil`) - The host operating system image to use. Currently, only Container-Optimized OS images can be used. The default value is `projects/cos-cloud/global/images/family/cos-stable`, which selects the latest stable release of Container-Optimized OS. This option is provided to allow testing against the beta release of the operating system to ensure that the new version does not interact negatively with production pipelines. To test a pipeline against the beta release of Container-Optimized OS, use the value `projects/cos-cloud/global/images/family/cos-beta`.
  *   `cpuPlatform` (*type:* `String.t`, *default:* `nil`) - The CPU platform to request. An instance based on a newer platform can be allocated, but never one with fewer capabilities. The value of this parameter must be a valid Compute Engine CPU platform name (such as "Intel Skylake"). This parameter is only useful for carefully optimized work loads where the CPU platform has a significant impact. For more information about the effect of this parameter, see https://cloud.google.com/compute/docs/instances/specify-min-cpu-platform.
  *   `disks` (*type:* `list(GoogleApi.Genomics.V1.Model.Disk.t)`, *default:* `nil`) - The list of disks to create and attach to the VM. Specify either the `volumes[]` field or the `disks[]` field, but not both.
  *   `dockerCacheImages` (*type:* `list(String.t)`, *default:* `nil`) - The Compute Engine Disk Images to use as a Docker cache. The disks will be mounted into the Docker folder in a way that the images present in the cache will not need to be pulled. The digests of the cached images must match those of the tags used or the latest version will still be pulled. The root directory of the ext4 image must contain `image` and `overlay2` directories copied from the Docker directory of a VM where the desired Docker images have already been pulled. Any images pulled that are not cached will be stored on the first cache disk instead of the boot disk. Only a single image is supported.
  *   `enableStackdriverMonitoring` (*type:* `boolean()`, *default:* `nil`) - Whether Stackdriver monitoring should be enabled on the VM.
  *   `labels` (*type:* `map()`, *default:* `nil`) - Optional set of labels to apply to the VM and any attached disk resources. These labels must adhere to the [name and value restrictions](https://cloud.google.com/compute/docs/labeling-resources) on VM labels imposed by Compute Engine. Labels keys with the prefix 'google-' are reserved for use by Google. Labels applied at creation time to the VM. Applied on a best-effort basis to attached disk resources shortly after VM creation.
  *   `machineType` (*type:* `String.t`, *default:* `nil`) - Required. The machine type of the virtual machine to create. Must be the short name of a standard machine type (such as "n1-standard-1") or a custom machine type (such as "custom-1-4096", where "1" indicates the number of vCPUs and "4096" indicates the memory in MB). See [Creating an instance with a custom machine type](https://cloud.google.com/compute/docs/instances/creating-instance-with-custom-machine-type#create) for more specifications on creating a custom machine type.
  *   `network` (*type:* `GoogleApi.Genomics.V1.Model.Network.t`, *default:* `nil`) - The VM network configuration.
  *   `nvidiaDriverVersion` (*type:* `String.t`, *default:* `nil`) - The NVIDIA driver version to use when attaching an NVIDIA GPU accelerator. The version specified here must be compatible with the GPU libraries contained in the container being executed, and must be one of the drivers hosted in the `nvidia-drivers-us-public` bucket on Google Cloud Storage.
  *   `preemptible` (*type:* `boolean()`, *default:* `nil`) - If true, allocate a preemptible VM.
  *   `reservation` (*type:* `String.t`, *default:* `nil`) - If specified, the VM will only be allocated inside the matching reservation. It will fail if the VM parameters don't match the reservation.
  *   `serviceAccount` (*type:* `GoogleApi.Genomics.V1.Model.ServiceAccount.t`, *default:* `nil`) - The service account to install on the VM. This account does not need any permissions other than those required by the pipeline.
  *   `volumes` (*type:* `list(GoogleApi.Genomics.V1.Model.Volume.t)`, *default:* `nil`) - The list of disks and other storage to create or attach to the VM. Specify either the `volumes[]` field or the `disks[]` field, but not both.
  """

  use GoogleApi.Gax.ModelBase

  @type t :: %__MODULE__{
          :accelerators => list(GoogleApi.Genomics.V1.Model.Accelerator.t()) | nil,
          :bootDiskSizeGb => integer() | nil,
          :bootImage => String.t() | nil,
          :cpuPlatform => String.t() | nil,
          :disks => list(GoogleApi.Genomics.V1.Model.Disk.t()) | nil,
          :dockerCacheImages => list(String.t()) | nil,
          :enableStackdriverMonitoring => boolean() | nil,
          :labels => map() | nil,
          :machineType => String.t() | nil,
          :network => GoogleApi.Genomics.V1.Model.Network.t() | nil,
          :nvidiaDriverVersion => String.t() | nil,
          :preemptible => boolean() | nil,
          :reservation => String.t() | nil,
          :serviceAccount => GoogleApi.Genomics.V1.Model.ServiceAccount.t() | nil,
          :volumes => list(GoogleApi.Genomics.V1.Model.Volume.t()) | nil
        }

  field(:accelerators, as: GoogleApi.Genomics.V1.Model.Accelerator, type: :list)
  field(:bootDiskSizeGb)
  field(:bootImage)
  field(:cpuPlatform)
  field(:disks, as: GoogleApi.Genomics.V1.Model.Disk, type: :list)
  field(:dockerCacheImages, type: :list)
  field(:enableStackdriverMonitoring)
  field(:labels, type: :map)
  field(:machineType)
  field(:network, as: GoogleApi.Genomics.V1.Model.Network)
  field(:nvidiaDriverVersion)
  field(:preemptible)
  field(:reservation)
  field(:serviceAccount, as: GoogleApi.Genomics.V1.Model.ServiceAccount)
  field(:volumes, as: GoogleApi.Genomics.V1.Model.Volume, type: :list)
end

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

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