/*
Copyright 2017 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.v1beta1;

import "k8s.io/apimachinery/pkg/apis/meta/v1/generated.proto";
import "k8s.io/apimachinery/pkg/runtime/generated.proto";
import "k8s.io/apimachinery/pkg/runtime/schema/generated.proto";
import "k8s.io/apimachinery/pkg/util/intstr/generated.proto";
import "k8s.io/apiserver/pkg/apis/example/v1/generated.proto";
import "k8s.io/kubernetes/pkg/api/v1/generated.proto";

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

// StatefulSet 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 StatefulSet guarantees that a given network identity will always
// map to the same storage identity.
message StatefulSet {
  // +optional
  optional k8s.io.apimachinery.pkg.apis.meta.v1.ObjectMeta metadata = 1;

  // Spec defines the desired identities of pods in this set.
  // +optional
  optional StatefulSetSpec spec = 2;

  // Status is the current status of Pods in this StatefulSet. This data
  // may be out of date by some window of time.
  // +optional
  optional StatefulSetStatus status = 3;
}

// StatefulSetList is a collection of StatefulSets.
message StatefulSetList {
  // +optional
  optional k8s.io.apimachinery.pkg.apis.meta.v1.ListMeta metadata = 1;

  repeated StatefulSet items = 2;
}

// A StatefulSetSpec is the specification of a StatefulSet.
message StatefulSetSpec {
  // 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
  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://kubernetes.io/docs/user-guide/labels#label-selectors
  // +optional
  optional k8s.io.apimachinery.pkg.apis.meta.v1.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 StatefulSet
  // will fulfill this Template, but have a unique identity from the rest
  // of the StatefulSet.
  optional k8s.io.kubernetes.pkg.api.v1.PodTemplateSpec template = 3;

  // VolumeClaimTemplates is a list of claims that pods are allowed to reference.
  // The StatefulSet controller is responsible for mapping network identities to
  // claims in a way that maintains the identity of a pod. 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.
  // +optional
  repeated k8s.io.kubernetes.pkg.api.v1.PersistentVolumeClaim volumeClaimTemplates = 4;

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

// StatefulSetStatus represents the current state of a StatefulSet.
message StatefulSetStatus {
  // most recent generation observed by this StatefulSet.
  // +optional
  optional int64 observedGeneration = 1;

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

