# 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.GKEOnPrem.V1.Model.BareMetalBgpLbConfig do
  @moduledoc """
  BareMetalBgpLbConfig represents configuration parameters for a Border Gateway Protocol (BGP) load balancer.

  ## Attributes

  *   `addressPools` (*type:* `list(GoogleApi.GKEOnPrem.V1.Model.BareMetalLoadBalancerAddressPool.t)`, *default:* `nil`) - Required. AddressPools is a list of non-overlapping IP pools used by load balancer typed services. All addresses must be routable to load balancer nodes. IngressVIP must be included in the pools.
  *   `asn` (*type:* `String.t`, *default:* `nil`) - Required. BGP autonomous system number (ASN) of the cluster. This field can be updated after cluster creation.
  *   `bgpPeerConfigs` (*type:* `list(GoogleApi.GKEOnPrem.V1.Model.BareMetalBgpPeerConfig.t)`, *default:* `nil`) - Required. The list of BGP peers that the cluster will connect to. At least one peer must be configured for each control plane node. Control plane nodes will connect to these peers to advertise the control plane VIP. The Services load balancer also uses these peers by default. This field can be updated after cluster creation.
  *   `loadBalancerNodePoolConfig` (*type:* `GoogleApi.GKEOnPrem.V1.Model.BareMetalLoadBalancerNodePoolConfig.t`, *default:* `nil`) - Specifies the node pool running data plane load balancing. L2 connectivity is required among nodes in this pool. If missing, the control plane node pool is used for data plane load balancing.
  """

  use GoogleApi.Gax.ModelBase

  @type t :: %__MODULE__{
          :addressPools =>
            list(GoogleApi.GKEOnPrem.V1.Model.BareMetalLoadBalancerAddressPool.t()) | nil,
          :asn => String.t() | nil,
          :bgpPeerConfigs => list(GoogleApi.GKEOnPrem.V1.Model.BareMetalBgpPeerConfig.t()) | nil,
          :loadBalancerNodePoolConfig =>
            GoogleApi.GKEOnPrem.V1.Model.BareMetalLoadBalancerNodePoolConfig.t() | nil
        }

  field(:addressPools,
    as: GoogleApi.GKEOnPrem.V1.Model.BareMetalLoadBalancerAddressPool,
    type: :list
  )

  field(:asn)
  field(:bgpPeerConfigs, as: GoogleApi.GKEOnPrem.V1.Model.BareMetalBgpPeerConfig, type: :list)

  field(:loadBalancerNodePoolConfig,
    as: GoogleApi.GKEOnPrem.V1.Model.BareMetalLoadBalancerNodePoolConfig
  )
end

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

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