//
// Code generated by Microsoft (R) AutoRest Code Generator.
// Changes may cause incorrect behavior and will be lost if the code is
// regenerated.
//
namespace k8s.Models
{
using Microsoft.Rest;
using Newtonsoft.Json;
using System.Linq;
///
/// MetricSpec specifies how to scale based on a single metric (only `type`
/// and one other matching field should be set at once).
///
public partial class V2beta1MetricSpec
{
///
/// Initializes a new instance of the V2beta1MetricSpec class.
///
public V2beta1MetricSpec()
{
CustomInit();
}
///
/// Initializes a new instance of the V2beta1MetricSpec class.
///
/// type is the type of metric source. It should be
/// one of "Object", "Pods" or "Resource", each mapping to a matching
/// field in the object.
/// external refers to a global metric that is
/// not associated with any Kubernetes object. It allows autoscaling
/// based on information coming from components running outside of
/// cluster (for example length of queue in cloud messaging service, or
/// QPS from loadbalancer running outside of cluster).
/// object refers to a metric describing a
/// single kubernetes object (for example, hits-per-second on an
/// Ingress object).
/// pods refers to a metric describing each pod in
/// the current scale target (for example,
/// transactions-processed-per-second). The values will be averaged
/// together before being compared to the target value.
/// resource refers to a resource metric (such
/// as those specified in requests and limits) known to Kubernetes
/// describing each pod in the current scale target (e.g. CPU or
/// memory). Such metrics are built in to Kubernetes, and have special
/// scaling options on top of those available to normal per-pod metrics
/// using the "pods" source.
public V2beta1MetricSpec(string type, V2beta1ExternalMetricSource external = default(V2beta1ExternalMetricSource), V2beta1ObjectMetricSource objectProperty = default(V2beta1ObjectMetricSource), V2beta1PodsMetricSource pods = default(V2beta1PodsMetricSource), V2beta1ResourceMetricSource resource = default(V2beta1ResourceMetricSource))
{
External = external;
ObjectProperty = objectProperty;
Pods = pods;
Resource = resource;
Type = type;
CustomInit();
}
///
/// An initialization method that performs custom operations like setting defaults
///
partial void CustomInit();
///
/// Gets or sets external refers to a global metric that is not
/// associated with any Kubernetes object. It allows autoscaling based
/// on information coming from components running outside of cluster
/// (for example length of queue in cloud messaging service, or QPS
/// from loadbalancer running outside of cluster).
///
[JsonProperty(PropertyName = "external")]
public V2beta1ExternalMetricSource External { get; set; }
///
/// Gets or sets object refers to a metric describing a single
/// kubernetes object (for example, hits-per-second on an Ingress
/// object).
///
[JsonProperty(PropertyName = "object")]
public V2beta1ObjectMetricSource ObjectProperty { get; set; }
///
/// Gets or sets pods refers to a metric describing each pod in the
/// current scale target (for example,
/// transactions-processed-per-second). The values will be averaged
/// together before being compared to the target value.
///
[JsonProperty(PropertyName = "pods")]
public V2beta1PodsMetricSource Pods { get; set; }
///
/// Gets or sets resource refers to a resource metric (such as those
/// specified in requests and limits) known to Kubernetes describing
/// each pod in the current scale target (e.g. CPU or memory). Such
/// metrics are built in to Kubernetes, and have special scaling
/// options on top of those available to normal per-pod metrics using
/// the "pods" source.
///
[JsonProperty(PropertyName = "resource")]
public V2beta1ResourceMetricSource Resource { get; set; }
///
/// Gets or sets type is the type of metric source. It should be one
/// of "Object", "Pods" or "Resource", each mapping to a matching field
/// in the object.
///
[JsonProperty(PropertyName = "type")]
public string Type { get; set; }
///
/// Validate the object.
///
///
/// Thrown if validation fails
///
public virtual void Validate()
{
if (Type == null)
{
throw new ValidationException(ValidationRules.CannotBeNull, "Type");
}
if (External != null)
{
External.Validate();
}
if (ObjectProperty != null)
{
ObjectProperty.Validate();
}
if (Pods != null)
{
Pods.Validate();
}
if (Resource != null)
{
Resource.Validate();
}
}
}
}