// Code generated by sidekick. DO NOT EDIT.
//
// Copyright 2026 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
//
//     https://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.

import Foundation
import GoogleCloudWkt

/// Eviction signals are the current state of a particular resource at a specific
/// point in time. The kubelet uses eviction signals to make eviction decisions
/// by comparing the signals to eviction thresholds, which are the minimum amount
/// of the resource that should be available on the node.
public struct EvictionSignals: Codable, Equatable, GoogleCloudWkt._AnyPackable,
  Sendable
{
  /// Optional. Memory available (i.e. capacity - workingSet), in bytes. Defines
  /// the amount of "memory.available" signal in kubelet. Default is unset, if
  /// not specified in the kubelet config. Format: positive number + unit, e.g.
  /// 100Ki, 10Mi, 5Gi. Valid units are Ki, Mi, Gi. Must be >= 100Mi and <= 50%
  /// of the node's memory. See
  /// https://kubernetes.io/docs/concepts/scheduling-eviction/node-pressure-eviction/#eviction-signals
  public var memoryAvailable: Swift.String = Swift.String()

  /// Optional. Amount of storage available on filesystem that kubelet uses for
  /// volumes, daemon logs, etc. Defines the amount of "nodefs.available" signal
  /// in kubelet. Default is unset, if not specified in the kubelet config. It
  /// takses percentage value for now. Sample format: "30%". Must be >= 10% and
  /// <= 50%. See
  /// https://kubernetes.io/docs/concepts/scheduling-eviction/node-pressure-eviction/#eviction-signals
  public var nodefsAvailable: Swift.String = Swift.String()

  /// Optional. Amount of inodes available on filesystem that kubelet uses for
  /// volumes, daemon logs, etc. Defines the amount of "nodefs.inodesFree" signal
  /// in kubelet. Default is unset, if not specified in the kubelet config. Linux
  /// only. It takses percentage value for now. Sample format: "30%". Must be >=
  /// 5% and <= 50%. See
  /// https://kubernetes.io/docs/concepts/scheduling-eviction/node-pressure-eviction/#eviction-signals
  public var nodefsInodesFree: Swift.String = Swift.String()

  /// Optional. Amount of storage available on filesystem that container runtime
  /// uses for storing images layers. If the container filesystem and image
  /// filesystem are not separate, then imagefs can store both image layers and
  /// writeable layers. Defines the amount of "imagefs.available" signal in
  /// kubelet. Default is unset, if not specified in the kubelet config. It
  /// takses percentage value for now. Sample format: "30%". Must be >= 15% and
  /// <= 50%. See
  /// https://kubernetes.io/docs/concepts/scheduling-eviction/node-pressure-eviction/#eviction-signals
  public var imagefsAvailable: Swift.String = Swift.String()

  /// Optional. Amount of inodes available on filesystem that container runtime
  /// uses for storing images layers. Defines the amount of "imagefs.inodesFree"
  /// signal in kubelet. Default is unset, if not specified in the kubelet
  /// config. Linux only. It takses percentage value for now. Sample format:
  /// "30%". Must be >= 5% and <= 50%. See
  /// https://kubernetes.io/docs/concepts/scheduling-eviction/node-pressure-eviction/#eviction-signals
  public var imagefsInodesFree: Swift.String = Swift.String()

  /// Optional. Amount of PID available for pod allocation. Defines the amount of
  /// "pid.available" signal in kubelet. Default is unset, if not specified in
  /// the kubelet config. It takses percentage value for now. Sample format:
  /// "30%". Must be >= 10% and <= 50%. See
  /// https://kubernetes.io/docs/concepts/scheduling-eviction/node-pressure-eviction/#eviction-signals
  public var pidAvailable: Swift.String = Swift.String()

  /// Initialize a new instance of `EvictionSignals`.
  public init() {}

  /// Use `config` to return a new instance of this object, with some fields updated.
  ///
  /// Commonly used to initialize the value, for example:
  ///
  /// ```
  /// let value = EvictionSignals().with { $0.memoryAvailable = ... }
  /// ```
  public func with(_ config: (inout Self) throws -> Swift.Void) rethrows -> Self {
    var copy = self
    try config(&copy)
    return copy
  }

  public static var _anyTypeUrl: Swift.String {
    return "type.googleapis.com/google.container.v1.EvictionSignals"
  }
  public init(fromAny any: GoogleCloudWkt.`Any`) throws {
    self = try GoogleCloudWkt._slowAnyDeserialize(Self.self, from: any)
  }
  public func _pack() throws -> GoogleCloudWkt.Struct {
    return try GoogleCloudWkt._slowAnySerialize(message: self)
  }
}
