/*
Copyright 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.api.settings.v1alpha1;

import "k8s.io/api/core/v1/generated.proto";
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";

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

// PodPreset is a policy resource that defines additional runtime
// requirements for a Pod.
message PodPreset {
  // +optional
  optional k8s.io.apimachinery.pkg.apis.meta.v1.ObjectMeta metadata = 1;

  // +optional
  optional PodPresetSpec spec = 2;
}

// PodPresetList is a list of PodPreset objects.
message PodPresetList {
  // Standard list metadata.
  // More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata
  // +optional
  optional k8s.io.apimachinery.pkg.apis.meta.v1.ListMeta metadata = 1;

  // Items is a list of schema objects.
  repeated PodPreset items = 2;
}

// PodPresetSpec is a description of a pod preset.
message PodPresetSpec {
  // Selector is a label query over a set of resources, in this case pods.
  // Required.
  optional k8s.io.apimachinery.pkg.apis.meta.v1.LabelSelector selector = 1;

  // Env defines the collection of EnvVar to inject into containers.
  // +optional
  repeated k8s.io.api.core.v1.EnvVar env = 2;

  // EnvFrom defines the collection of EnvFromSource to inject into containers.
  // +optional
  repeated k8s.io.api.core.v1.EnvFromSource envFrom = 3;

  // Volumes defines the collection of Volume to inject into the pod.
  // +optional
  repeated k8s.io.api.core.v1.Volume volumes = 4;

  // VolumeMounts defines the collection of VolumeMount to inject into containers.
  // +optional
  repeated k8s.io.api.core.v1.VolumeMount volumeMounts = 5;
}

