/*
Copyright 2016 The Kubernetes Authors.

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.
*/


// This file was autogenerated by go-to-protobuf. Do not edit it manually!

syntax = 'proto2';

package k8s.io.kubernetes.pkg.apis.apps.v1alpha1;

import "k8s.io/kubernetes/pkg/api/resource/generated.proto";
import "k8s.io/kubernetes/pkg/api/unversioned/generated.proto";
import "k8s.io/kubernetes/pkg/api/v1/generated.proto";
import "k8s.io/kubernetes/pkg/util/intstr/generated.proto";

// Package-wide variables from generator "generated".
option go_package = "v1alpha1";

// PetSet represents a set of pods with consistent identities.
// Identities are defined as:
//  - Network: A single stable DNS and hostname.
//  - Storage: As many VolumeClaims as requested.
// The PetSet guarantees that a given network identity will always
// map to the same storage identity. PetSet is currently in alpha
// and subject to change without notice.
message PetSet {
  optional k8s.io.kubernetes.pkg.api.v1.ObjectMeta metadata = 1;

  // Spec defines the desired identities of pets in this set.
  optional PetSetSpec spec = 2;

  // Status is the current status of Pets in this PetSet. This data
  // may be out of date by some window of time.
  optional PetSetStatus status = 3;
}

// PetSetList is a collection of PetSets.
message PetSetList {
  optional k8s.io.kubernetes.pkg.api.unversioned.ListMeta metadata = 1;

  repeated PetSet items = 2;
}

// A PetSetSpec is the specification of a PetSet.
message PetSetSpec {
  // Replicas is the desired number of replicas of the given Template.
  // These are replicas in the sense that they are instantiations of the
  // same Template, but individual replicas also have a consistent identity.
  // If unspecified, defaults to 1.
  // TODO: Consider a rename of this field.
  optional int32 replicas = 1;

  // Selector is a label query over pods that should match the replica count.
  // If empty, defaulted to labels on the pod template.
  // More info: http://releases.k8s.io/HEAD/docs/user-guide/labels.md#label-selectors
  optional k8s.io.kubernetes.pkg.api.unversioned.LabelSelector selector = 2;

  // Template is the object that describes the pod that will be created if
  // insufficient replicas are detected. Each pod stamped out by the PetSet
  // will fulfill this Template, but have a unique identity from the rest
  // of the PetSet.
  optional k8s.io.kubernetes.pkg.api.v1.PodTemplateSpec template = 3;

  // VolumeClaimTemplates is a list of claims that pets are allowed to reference.
  // The PetSet controller is responsible for mapping network identities to
  // claims in a way that maintains the identity of a pet. Every claim in
  // this list must have at least one matching (by name) volumeMount in one
  // container in the template. A claim in this list takes precedence over
  // any volumes in the template, with the same name.
  // TODO: Define the behavior if a claim already exists with the same name.
  repeated k8s.io.kubernetes.pkg.api.v1.PersistentVolumeClaim volumeClaimTemplates = 4;

  // ServiceName is the name of the service that governs this PetSet.
  // This service must exist before the PetSet, and is responsible for
  // the network identity of the set. Pets get DNS/hostnames that follow the
  // pattern: pet-specific-string.serviceName.default.svc.cluster.local
  // where "pet-specific-string" is managed by the PetSet controller.
  optional string serviceName = 5;
}

// PetSetStatus represents the current state of a PetSet.
message PetSetStatus {
  // most recent generation observed by this autoscaler.
  optional int64 observedGeneration = 1;

  // Replicas is the number of actual replicas.
  optional int32 replicas = 2;
}

