mirror of
				https://github.com/optim-enterprises-bv/kubernetes.git
				synced 2025-10-31 18:28:13 +00:00 
			
		
		
		
	Add new Events API group
This commit is contained in:
		| @@ -205,6 +205,7 @@ var apiVersionPriorities = map[schema.GroupVersion]priority{ | |||||||
| 	{Group: "apps", Version: "v1beta1"}:                          {group: 17800, version: 1}, | 	{Group: "apps", Version: "v1beta1"}:                          {group: 17800, version: 1}, | ||||||
| 	{Group: "apps", Version: "v1beta2"}:                          {group: 17800, version: 9}, | 	{Group: "apps", Version: "v1beta2"}:                          {group: 17800, version: 9}, | ||||||
| 	{Group: "apps", Version: "v1"}:                               {group: 17800, version: 15}, | 	{Group: "apps", Version: "v1"}:                               {group: 17800, version: 15}, | ||||||
|  | 	{Group: "events.k8s.io", Version: "v1beta1"}:                 {group: 17750, version: 5}, | ||||||
| 	{Group: "authentication.k8s.io", Version: "v1"}:              {group: 17700, version: 15}, | 	{Group: "authentication.k8s.io", Version: "v1"}:              {group: 17700, version: 15}, | ||||||
| 	{Group: "authentication.k8s.io", Version: "v1beta1"}:         {group: 17700, version: 9}, | 	{Group: "authentication.k8s.io", Version: "v1beta1"}:         {group: 17700, version: 9}, | ||||||
| 	{Group: "authorization.k8s.io", Version: "v1"}:               {group: 17600, version: 15}, | 	{Group: "authorization.k8s.io", Version: "v1"}:               {group: 17600, version: 15}, | ||||||
|   | |||||||
| @@ -66,6 +66,7 @@ import ( | |||||||
| 	"k8s.io/kubernetes/pkg/apis/apps" | 	"k8s.io/kubernetes/pkg/apis/apps" | ||||||
| 	"k8s.io/kubernetes/pkg/apis/batch" | 	"k8s.io/kubernetes/pkg/apis/batch" | ||||||
| 	api "k8s.io/kubernetes/pkg/apis/core" | 	api "k8s.io/kubernetes/pkg/apis/core" | ||||||
|  | 	"k8s.io/kubernetes/pkg/apis/events" | ||||||
| 	"k8s.io/kubernetes/pkg/apis/extensions" | 	"k8s.io/kubernetes/pkg/apis/extensions" | ||||||
| 	"k8s.io/kubernetes/pkg/apis/networking" | 	"k8s.io/kubernetes/pkg/apis/networking" | ||||||
| 	"k8s.io/kubernetes/pkg/apis/storage" | 	"k8s.io/kubernetes/pkg/apis/storage" | ||||||
| @@ -579,6 +580,7 @@ func BuildStorageFactory(s *options.ServerRunOptions) (*serverstorage.DefaultSto | |||||||
| 	storageFactory.AddCohabitatingResources(extensions.Resource("deployments"), apps.Resource("deployments")) | 	storageFactory.AddCohabitatingResources(extensions.Resource("deployments"), apps.Resource("deployments")) | ||||||
| 	storageFactory.AddCohabitatingResources(extensions.Resource("daemonsets"), apps.Resource("daemonsets")) | 	storageFactory.AddCohabitatingResources(extensions.Resource("daemonsets"), apps.Resource("daemonsets")) | ||||||
| 	storageFactory.AddCohabitatingResources(extensions.Resource("replicasets"), apps.Resource("replicasets")) | 	storageFactory.AddCohabitatingResources(extensions.Resource("replicasets"), apps.Resource("replicasets")) | ||||||
|  | 	storageFactory.AddCohabitatingResources(api.Resource("events"), events.Resource("events")) | ||||||
| 	for _, override := range s.Etcd.EtcdServersOverrides { | 	for _, override := range s.Etcd.EtcdServersOverrides { | ||||||
| 		tokens := strings.Split(override, "#") | 		tokens := strings.Split(override, "#") | ||||||
| 		if len(tokens) != 2 { | 		if len(tokens) != 2 { | ||||||
|   | |||||||
| @@ -30,6 +30,7 @@ import ( | |||||||
| 	_ "k8s.io/kubernetes/pkg/apis/batch/install" | 	_ "k8s.io/kubernetes/pkg/apis/batch/install" | ||||||
| 	_ "k8s.io/kubernetes/pkg/apis/certificates/install" | 	_ "k8s.io/kubernetes/pkg/apis/certificates/install" | ||||||
| 	_ "k8s.io/kubernetes/pkg/apis/core/install" | 	_ "k8s.io/kubernetes/pkg/apis/core/install" | ||||||
|  | 	_ "k8s.io/kubernetes/pkg/apis/events/install" | ||||||
| 	_ "k8s.io/kubernetes/pkg/apis/extensions/install" | 	_ "k8s.io/kubernetes/pkg/apis/extensions/install" | ||||||
| 	_ "k8s.io/kubernetes/pkg/apis/policy/install" | 	_ "k8s.io/kubernetes/pkg/apis/policy/install" | ||||||
| 	_ "k8s.io/kubernetes/pkg/apis/rbac/install" | 	_ "k8s.io/kubernetes/pkg/apis/rbac/install" | ||||||
|   | |||||||
| @@ -53,6 +53,8 @@ pkg/apis/core/v1/helper | |||||||
| pkg/apis/core/v1/helper/qos | pkg/apis/core/v1/helper/qos | ||||||
| pkg/apis/core/v1/validation | pkg/apis/core/v1/validation | ||||||
| pkg/apis/core/validation | pkg/apis/core/validation | ||||||
|  | pkg/apis/events | ||||||
|  | pkg/apis/events/v1beta1 | ||||||
| pkg/apis/extensions | pkg/apis/extensions | ||||||
| pkg/apis/extensions/validation | pkg/apis/extensions/validation | ||||||
| pkg/apis/imagepolicy | pkg/apis/imagepolicy | ||||||
| @@ -292,6 +294,7 @@ pkg/registry/core/service/portallocator | |||||||
| pkg/registry/core/service/portallocator/controller | pkg/registry/core/service/portallocator/controller | ||||||
| pkg/registry/core/service/storage | pkg/registry/core/service/storage | ||||||
| pkg/registry/core/serviceaccount/storage | pkg/registry/core/serviceaccount/storage | ||||||
|  | pkg/registry/events/rest | ||||||
| pkg/registry/extensions/controller/storage | pkg/registry/extensions/controller/storage | ||||||
| pkg/registry/extensions/daemonset | pkg/registry/extensions/daemonset | ||||||
| pkg/registry/extensions/daemonset/storage | pkg/registry/extensions/daemonset/storage | ||||||
| @@ -449,6 +452,7 @@ staging/src/k8s.io/api/batch/v1beta1 | |||||||
| staging/src/k8s.io/api/batch/v2alpha1 | staging/src/k8s.io/api/batch/v2alpha1 | ||||||
| staging/src/k8s.io/api/certificates/v1beta1 | staging/src/k8s.io/api/certificates/v1beta1 | ||||||
| staging/src/k8s.io/api/core/v1 | staging/src/k8s.io/api/core/v1 | ||||||
|  | staging/src/k8s.io/api/events/v1beta1 | ||||||
| staging/src/k8s.io/api/extensions/v1beta1 | staging/src/k8s.io/api/extensions/v1beta1 | ||||||
| staging/src/k8s.io/api/imagepolicy/v1alpha1 | staging/src/k8s.io/api/imagepolicy/v1alpha1 | ||||||
| staging/src/k8s.io/api/networking/v1 | staging/src/k8s.io/api/networking/v1 | ||||||
| @@ -659,6 +663,8 @@ staging/src/k8s.io/client-go/kubernetes/typed/certificates/v1beta1 | |||||||
| staging/src/k8s.io/client-go/kubernetes/typed/certificates/v1beta1/fake | staging/src/k8s.io/client-go/kubernetes/typed/certificates/v1beta1/fake | ||||||
| staging/src/k8s.io/client-go/kubernetes/typed/core/v1 | staging/src/k8s.io/client-go/kubernetes/typed/core/v1 | ||||||
| staging/src/k8s.io/client-go/kubernetes/typed/core/v1/fake | staging/src/k8s.io/client-go/kubernetes/typed/core/v1/fake | ||||||
|  | staging/src/k8s.io/client-go/kubernetes/typed/events/v1beta1 | ||||||
|  | staging/src/k8s.io/client-go/kubernetes/typed/events/v1beta1/fake | ||||||
| staging/src/k8s.io/client-go/kubernetes/typed/extensions/v1beta1 | staging/src/k8s.io/client-go/kubernetes/typed/extensions/v1beta1 | ||||||
| staging/src/k8s.io/client-go/kubernetes/typed/extensions/v1beta1/fake | staging/src/k8s.io/client-go/kubernetes/typed/extensions/v1beta1/fake | ||||||
| staging/src/k8s.io/client-go/kubernetes/typed/networking/v1 | staging/src/k8s.io/client-go/kubernetes/typed/networking/v1 | ||||||
|   | |||||||
| @@ -69,6 +69,7 @@ batch/v1beta1 \ | |||||||
| batch/v2alpha1 \ | batch/v2alpha1 \ | ||||||
| certificates.k8s.io/v1beta1 \ | certificates.k8s.io/v1beta1 \ | ||||||
| extensions/v1beta1 \ | extensions/v1beta1 \ | ||||||
|  | events.k8s.io/v1beta1 \ | ||||||
| imagepolicy.k8s.io/v1alpha1 \ | imagepolicy.k8s.io/v1alpha1 \ | ||||||
| networking.k8s.io/v1 \ | networking.k8s.io/v1 \ | ||||||
| policy/v1beta1 \ | policy/v1beta1 \ | ||||||
|   | |||||||
| @@ -59,10 +59,10 @@ for gv in "${GROUP_VERSIONS[@]}"; do | |||||||
| 	# collect internal groups | 	# collect internal groups | ||||||
| 	int_group="${pkg_dir%/*}/" | 	int_group="${pkg_dir%/*}/" | ||||||
| 	if [[ "${pkg_dir}" = core/* ]]; then | 	if [[ "${pkg_dir}" = core/* ]]; then | ||||||
| 	    int_group="api/" | 	  int_group="api/" | ||||||
| 	fi | 	fi | ||||||
|     if ! [[ " ${INTERNAL_DIRS[@]:-} " =~ " ${int_group} " ]]; then |     if ! [[ " ${INTERNAL_DIRS[@]:-} " =~ " ${int_group} " ]]; then | ||||||
|         INTERNAL_DIRS+=("${int_group}") |       INTERNAL_DIRS+=("${int_group}") | ||||||
|     fi |     fi | ||||||
| done | done | ||||||
| # delimit by commas for the command | # delimit by commas for the command | ||||||
|   | |||||||
| @@ -60,6 +60,7 @@ PACKAGES=( | |||||||
|   k8s.io/api/apps/v1 |   k8s.io/api/apps/v1 | ||||||
|   k8s.io/api/authentication/v1 |   k8s.io/api/authentication/v1 | ||||||
|   k8s.io/api/authentication/v1beta1 |   k8s.io/api/authentication/v1beta1 | ||||||
|  |   k8s.io/api/events/v1beta1 | ||||||
|   k8s.io/api/rbac/v1alpha1 |   k8s.io/api/rbac/v1alpha1 | ||||||
|   k8s.io/api/rbac/v1beta1 |   k8s.io/api/rbac/v1beta1 | ||||||
|   k8s.io/api/rbac/v1 |   k8s.io/api/rbac/v1 | ||||||
|   | |||||||
| @@ -43,6 +43,7 @@ import ( | |||||||
| 	"k8s.io/kubernetes/pkg/apis/batch" | 	"k8s.io/kubernetes/pkg/apis/batch" | ||||||
| 	"k8s.io/kubernetes/pkg/apis/certificates" | 	"k8s.io/kubernetes/pkg/apis/certificates" | ||||||
| 	api "k8s.io/kubernetes/pkg/apis/core" | 	api "k8s.io/kubernetes/pkg/apis/core" | ||||||
|  | 	"k8s.io/kubernetes/pkg/apis/events" | ||||||
| 	"k8s.io/kubernetes/pkg/apis/extensions" | 	"k8s.io/kubernetes/pkg/apis/extensions" | ||||||
| 	"k8s.io/kubernetes/pkg/apis/imagepolicy" | 	"k8s.io/kubernetes/pkg/apis/imagepolicy" | ||||||
| 	"k8s.io/kubernetes/pkg/apis/networking" | 	"k8s.io/kubernetes/pkg/apis/networking" | ||||||
| @@ -62,6 +63,7 @@ import ( | |||||||
| 	_ "k8s.io/kubernetes/pkg/apis/certificates/install" | 	_ "k8s.io/kubernetes/pkg/apis/certificates/install" | ||||||
| 	_ "k8s.io/kubernetes/pkg/apis/componentconfig/install" | 	_ "k8s.io/kubernetes/pkg/apis/componentconfig/install" | ||||||
| 	_ "k8s.io/kubernetes/pkg/apis/core/install" | 	_ "k8s.io/kubernetes/pkg/apis/core/install" | ||||||
|  | 	_ "k8s.io/kubernetes/pkg/apis/events/install" | ||||||
| 	_ "k8s.io/kubernetes/pkg/apis/extensions/install" | 	_ "k8s.io/kubernetes/pkg/apis/extensions/install" | ||||||
| 	_ "k8s.io/kubernetes/pkg/apis/imagepolicy/install" | 	_ "k8s.io/kubernetes/pkg/apis/imagepolicy/install" | ||||||
| 	_ "k8s.io/kubernetes/pkg/apis/networking/install" | 	_ "k8s.io/kubernetes/pkg/apis/networking/install" | ||||||
| @@ -79,6 +81,7 @@ var ( | |||||||
| 	Autoscaling   TestGroup | 	Autoscaling   TestGroup | ||||||
| 	Batch         TestGroup | 	Batch         TestGroup | ||||||
| 	Extensions    TestGroup | 	Extensions    TestGroup | ||||||
|  | 	Events        TestGroup | ||||||
| 	Apps          TestGroup | 	Apps          TestGroup | ||||||
| 	Policy        TestGroup | 	Policy        TestGroup | ||||||
| 	Rbac          TestGroup | 	Rbac          TestGroup | ||||||
| @@ -314,6 +317,15 @@ func init() { | |||||||
| 			externalTypes:        legacyscheme.Scheme.KnownTypes(externalGroupVersion), | 			externalTypes:        legacyscheme.Scheme.KnownTypes(externalGroupVersion), | ||||||
| 		} | 		} | ||||||
| 	} | 	} | ||||||
|  | 	if _, ok := Groups[events.GroupName]; !ok { | ||||||
|  | 		externalGroupVersion := schema.GroupVersion{Group: events.GroupName, Version: legacyscheme.Registry.GroupOrDie(events.GroupName).GroupVersion.Version} | ||||||
|  | 		Groups[events.GroupName] = TestGroup{ | ||||||
|  | 			externalGroupVersion: externalGroupVersion, | ||||||
|  | 			internalGroupVersion: events.SchemeGroupVersion, | ||||||
|  | 			internalTypes:        legacyscheme.Scheme.KnownTypes(events.SchemeGroupVersion), | ||||||
|  | 			externalTypes:        legacyscheme.Scheme.KnownTypes(externalGroupVersion), | ||||||
|  | 		} | ||||||
|  | 	} | ||||||
|  |  | ||||||
| 	Default = Groups[api.GroupName] | 	Default = Groups[api.GroupName] | ||||||
| 	Autoscaling = Groups[autoscaling.GroupName] | 	Autoscaling = Groups[autoscaling.GroupName] | ||||||
| @@ -322,6 +334,7 @@ func init() { | |||||||
| 	Policy = Groups[policy.GroupName] | 	Policy = Groups[policy.GroupName] | ||||||
| 	Certificates = Groups[certificates.GroupName] | 	Certificates = Groups[certificates.GroupName] | ||||||
| 	Extensions = Groups[extensions.GroupName] | 	Extensions = Groups[extensions.GroupName] | ||||||
|  | 	Events = Groups[events.GroupName] | ||||||
| 	Rbac = Groups[rbac.GroupName] | 	Rbac = Groups[rbac.GroupName] | ||||||
| 	Scheduling = Groups[scheduling.GroupName] | 	Scheduling = Groups[scheduling.GroupName] | ||||||
| 	Settings = Groups[settings.GroupName] | 	Settings = Groups[settings.GroupName] | ||||||
|   | |||||||
| @@ -25,8 +25,8 @@ const ( | |||||||
| 	PodStatusField         = "status.phase" | 	PodStatusField         = "status.phase" | ||||||
| 	SecretTypeField        = "type" | 	SecretTypeField        = "type" | ||||||
|  |  | ||||||
| 	EventReasonField                  = "reason" | 	EventReasonField                  = "action" | ||||||
| 	EventSourceField                  = "source" | 	EventSourceField                  = "reportingComponent" | ||||||
| 	EventTypeField                    = "type" | 	EventTypeField                    = "type" | ||||||
| 	EventInvolvedKindField            = "involvedObject.kind" | 	EventInvolvedKindField            = "involvedObject.kind" | ||||||
| 	EventInvolvedNamespaceField       = "involvedObject.namespace" | 	EventInvolvedNamespaceField       = "involvedObject.namespace" | ||||||
|   | |||||||
| @@ -19,10 +19,12 @@ package fuzzer | |||||||
| import ( | import ( | ||||||
| 	"reflect" | 	"reflect" | ||||||
| 	"strconv" | 	"strconv" | ||||||
|  | 	"time" | ||||||
|  |  | ||||||
| 	fuzz "github.com/google/gofuzz" | 	fuzz "github.com/google/gofuzz" | ||||||
|  |  | ||||||
| 	"k8s.io/apimachinery/pkg/api/resource" | 	"k8s.io/apimachinery/pkg/api/resource" | ||||||
|  | 	metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" | ||||||
| 	"k8s.io/apimachinery/pkg/fields" | 	"k8s.io/apimachinery/pkg/fields" | ||||||
| 	"k8s.io/apimachinery/pkg/labels" | 	"k8s.io/apimachinery/pkg/labels" | ||||||
| 	"k8s.io/apimachinery/pkg/runtime" | 	"k8s.io/apimachinery/pkg/runtime" | ||||||
| @@ -483,5 +485,12 @@ var Funcs = func(codecs runtimeserializer.CodecFactory) []interface{} { | |||||||
| 			c.FuzzNoCustom(s) | 			c.FuzzNoCustom(s) | ||||||
| 			s.Allocatable = s.Capacity | 			s.Allocatable = s.Capacity | ||||||
| 		}, | 		}, | ||||||
|  | 		func(e *core.Event, c fuzz.Continue) { | ||||||
|  | 			c.FuzzNoCustom(e) | ||||||
|  | 			e.EventTime = metav1.MicroTime{Time: time.Unix(1, 1000)} | ||||||
|  | 			if e.Series != nil { | ||||||
|  | 				e.Series.LastObservedTime = metav1.MicroTime{Time: time.Unix(3, 3000)} | ||||||
|  | 			} | ||||||
|  | 		}, | ||||||
| 	} | 	} | ||||||
| } | } | ||||||
|   | |||||||
| @@ -3958,7 +3958,7 @@ type Event struct { | |||||||
| 	// +optional | 	// +optional | ||||||
| 	metav1.ObjectMeta | 	metav1.ObjectMeta | ||||||
|  |  | ||||||
| 	// Required. The object that this event is about. | 	// Required. The object that this event is about. Mapped to events.Event.regarding | ||||||
| 	// +optional | 	// +optional | ||||||
| 	InvolvedObject ObjectReference | 	InvolvedObject ObjectReference | ||||||
|  |  | ||||||
| @@ -3970,7 +3970,7 @@ type Event struct { | |||||||
| 	Reason string | 	Reason string | ||||||
|  |  | ||||||
| 	// Optional. A human-readable description of the status of this operation. | 	// Optional. A human-readable description of the status of this operation. | ||||||
| 	// TODO: decide on maximum length. | 	// TODO: decide on maximum length. Mapped to events.Event.note | ||||||
| 	// +optional | 	// +optional | ||||||
| 	Message string | 	Message string | ||||||
|  |  | ||||||
| @@ -3993,8 +3993,49 @@ type Event struct { | |||||||
| 	// Type of this event (Normal, Warning), new types could be added in the future. | 	// Type of this event (Normal, Warning), new types could be added in the future. | ||||||
| 	// +optional | 	// +optional | ||||||
| 	Type string | 	Type string | ||||||
|  |  | ||||||
|  | 	// Time when this Event was first observed. | ||||||
|  | 	// +optional | ||||||
|  | 	EventTime metav1.MicroTime | ||||||
|  |  | ||||||
|  | 	// Data about the Event series this event represents or nil if it's a singleton Event. | ||||||
|  | 	// +optional | ||||||
|  | 	Series *EventSeries | ||||||
|  |  | ||||||
|  | 	// What action was taken/failed regarding to the Regarding object. | ||||||
|  | 	// +optional | ||||||
|  | 	Action string | ||||||
|  |  | ||||||
|  | 	// Optional secondary object for more complex actions. | ||||||
|  | 	// +optional | ||||||
|  | 	Related *ObjectReference | ||||||
|  |  | ||||||
|  | 	// Name of the controller that emitted this Event, e.g. `kubernetes.io/kubelet`. | ||||||
|  | 	// +optional | ||||||
|  | 	ReportingController string | ||||||
|  |  | ||||||
|  | 	// ID of the controller instance, e.g. `kubelet-xyzf`. | ||||||
|  | 	// +optional | ||||||
|  | 	ReportingInstance string | ||||||
| } | } | ||||||
|  |  | ||||||
|  | type EventSeries struct { | ||||||
|  | 	// Number of occurrences in this series up to the last heartbeat time | ||||||
|  | 	Count int32 | ||||||
|  | 	// Time of the last occurence observed | ||||||
|  | 	LastObservedTime metav1.MicroTime | ||||||
|  | 	// State of this Series: Ongoing or Finished | ||||||
|  | 	State EventSeriesState | ||||||
|  | } | ||||||
|  |  | ||||||
|  | type EventSeriesState string | ||||||
|  |  | ||||||
|  | const ( | ||||||
|  | 	EventSeriesStateOngoing  EventSeriesState = "Ongoing" | ||||||
|  | 	EventSeriesStateFinished EventSeriesState = "Finished" | ||||||
|  | 	EventSeriesStateUnknown  EventSeriesState = "Unknown" | ||||||
|  | ) | ||||||
|  |  | ||||||
| // +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object | // +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object | ||||||
|  |  | ||||||
| // EventList is a list of events. | // EventList is a list of events. | ||||||
|   | |||||||
| @@ -18,6 +18,7 @@ package validation | |||||||
|  |  | ||||||
| import ( | import ( | ||||||
| 	"fmt" | 	"fmt" | ||||||
|  | 	"time" | ||||||
|  |  | ||||||
| 	"k8s.io/apimachinery/pkg/api/meta" | 	"k8s.io/apimachinery/pkg/api/meta" | ||||||
| 	metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" | 	metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" | ||||||
| @@ -28,24 +29,68 @@ import ( | |||||||
| 	"k8s.io/kubernetes/pkg/apis/core" | 	"k8s.io/kubernetes/pkg/apis/core" | ||||||
| ) | ) | ||||||
|  |  | ||||||
|  | const ( | ||||||
|  | 	ReportingInstanceLengthLimit = 128 | ||||||
|  | 	ActionLengthLimit            = 128 | ||||||
|  | 	ReasonLengthLimit            = 128 | ||||||
|  | 	NoteLengthLimit              = 1024 | ||||||
|  | ) | ||||||
|  |  | ||||||
| // ValidateEvent makes sure that the event makes sense. | // ValidateEvent makes sure that the event makes sense. | ||||||
| func ValidateEvent(event *core.Event) field.ErrorList { | func ValidateEvent(event *core.Event) field.ErrorList { | ||||||
| 	allErrs := field.ErrorList{} | 	allErrs := field.ErrorList{} | ||||||
|  | 	// Because go | ||||||
|  | 	zeroTime := time.Time{} | ||||||
|  |  | ||||||
| 	// Make sure event.Namespace and the involvedObject.Namespace agree | 	// "New" Events need to have EventTime set, so it's validating old object. | ||||||
| 	if len(event.InvolvedObject.Namespace) == 0 { | 	if event.EventTime.Time == zeroTime { | ||||||
| 		// event.Namespace must also be empty (or "default", for compatibility with old clients) | 		// Make sure event.Namespace and the involvedInvolvedObject.Namespace agree | ||||||
| 		if event.Namespace != metav1.NamespaceNone && event.Namespace != metav1.NamespaceDefault { | 		if len(event.InvolvedObject.Namespace) == 0 { | ||||||
|  | 			// event.Namespace must also be empty (or "default", for compatibility with old clients) | ||||||
|  | 			if event.Namespace != metav1.NamespaceNone && event.Namespace != metav1.NamespaceDefault { | ||||||
|  | 				allErrs = append(allErrs, field.Invalid(field.NewPath("involvedObject", "namespace"), event.InvolvedObject.Namespace, "does not match event.namespace")) | ||||||
|  | 			} | ||||||
|  | 		} else { | ||||||
|  | 			// event namespace must match | ||||||
|  | 			if event.Namespace != event.InvolvedObject.Namespace { | ||||||
|  | 				allErrs = append(allErrs, field.Invalid(field.NewPath("involvedObject", "namespace"), event.InvolvedObject.Namespace, "does not match event.namespace")) | ||||||
|  | 			} | ||||||
|  | 		} | ||||||
|  |  | ||||||
|  | 	} else { | ||||||
|  | 		if len(event.InvolvedObject.Namespace) == 0 && event.Namespace != metav1.NamespaceSystem { | ||||||
| 			allErrs = append(allErrs, field.Invalid(field.NewPath("involvedObject", "namespace"), event.InvolvedObject.Namespace, "does not match event.namespace")) | 			allErrs = append(allErrs, field.Invalid(field.NewPath("involvedObject", "namespace"), event.InvolvedObject.Namespace, "does not match event.namespace")) | ||||||
| 		} | 		} | ||||||
| 	} else { | 		if len(event.ReportingController) == 0 { | ||||||
| 		// event namespace must match | 			allErrs = append(allErrs, field.Required(field.NewPath("reportingController"), "")) | ||||||
| 		if event.Namespace != event.InvolvedObject.Namespace { | 		} | ||||||
| 			allErrs = append(allErrs, field.Invalid(field.NewPath("involvedObject", "namespace"), event.InvolvedObject.Namespace, "does not match event.namespace")) | 		for _, msg := range validation.IsQualifiedName(event.ReportingController) { | ||||||
|  | 			allErrs = append(allErrs, field.Invalid(field.NewPath("reportingController"), event.ReportingController, msg)) | ||||||
|  | 		} | ||||||
|  | 		if len(event.ReportingInstance) == 0 { | ||||||
|  | 			allErrs = append(allErrs, field.Required(field.NewPath("reportingInstance"), "")) | ||||||
|  | 		} | ||||||
|  | 		if len(event.ReportingInstance) > ReportingInstanceLengthLimit { | ||||||
|  | 			allErrs = append(allErrs, field.Invalid(field.NewPath("repotingIntance"), "", fmt.Sprintf("can have at most %v characters", ReportingInstanceLengthLimit))) | ||||||
|  | 		} | ||||||
|  | 		if len(event.Action) == 0 { | ||||||
|  | 			allErrs = append(allErrs, field.Required(field.NewPath("action"), "")) | ||||||
|  | 		} | ||||||
|  | 		if len(event.Action) > ActionLengthLimit { | ||||||
|  | 			allErrs = append(allErrs, field.Invalid(field.NewPath("action"), "", fmt.Sprintf("can have at most %v characters", ActionLengthLimit))) | ||||||
|  | 		} | ||||||
|  | 		if len(event.Reason) == 0 { | ||||||
|  | 			allErrs = append(allErrs, field.Required(field.NewPath("reason"), "")) | ||||||
|  | 		} | ||||||
|  | 		if len(event.Reason) > ReasonLengthLimit { | ||||||
|  | 			allErrs = append(allErrs, field.Invalid(field.NewPath("reason"), "", fmt.Sprintf("can have at most %v characters", ReasonLengthLimit))) | ||||||
|  | 		} | ||||||
|  | 		if len(event.Message) > NoteLengthLimit { | ||||||
|  | 			allErrs = append(allErrs, field.Invalid(field.NewPath("message"), "", fmt.Sprintf("can have at most %v characters", NoteLengthLimit))) | ||||||
| 		} | 		} | ||||||
| 	} | 	} | ||||||
|  |  | ||||||
| 	// For kinds we recognize, make sure involvedObject.Namespace is set for namespaced kinds | 	// For kinds we recognize, make sure InvolvedObject.Namespace is set for namespaced kinds | ||||||
| 	if namespaced, err := isNamespacedKind(event.InvolvedObject.Kind, event.InvolvedObject.APIVersion); err == nil { | 	if namespaced, err := isNamespacedKind(event.InvolvedObject.Kind, event.InvolvedObject.APIVersion); err == nil { | ||||||
| 		if namespaced && len(event.InvolvedObject.Namespace) == 0 { | 		if namespaced && len(event.InvolvedObject.Namespace) == 0 { | ||||||
| 			allErrs = append(allErrs, field.Required(field.NewPath("involvedObject", "namespace"), fmt.Sprintf("required for kind %s", event.InvolvedObject.Kind))) | 			allErrs = append(allErrs, field.Required(field.NewPath("involvedObject", "namespace"), fmt.Sprintf("required for kind %s", event.InvolvedObject.Kind))) | ||||||
|   | |||||||
| @@ -18,6 +18,7 @@ package validation | |||||||
|  |  | ||||||
| import ( | import ( | ||||||
| 	"testing" | 	"testing" | ||||||
|  | 	"time" | ||||||
|  |  | ||||||
| 	metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" | 	metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" | ||||||
| 	"k8s.io/kubernetes/pkg/apis/core" | 	"k8s.io/kubernetes/pkg/apis/core" | ||||||
| @@ -215,7 +216,177 @@ func TestValidateEvent(t *testing.T) { | |||||||
|  |  | ||||||
| 	for _, item := range table { | 	for _, item := range table { | ||||||
| 		if e, a := item.valid, len(ValidateEvent(item.Event)) == 0; e != a { | 		if e, a := item.valid, len(ValidateEvent(item.Event)) == 0; e != a { | ||||||
| 			t.Errorf("%v: expected %v, got %v", item.Event.Name, e, a) | 			t.Errorf("%v: expected %v, got %v: %v", item.Event.Name, e, a, ValidateEvent(item.Event)) | ||||||
|  | 		} | ||||||
|  | 	} | ||||||
|  | } | ||||||
|  |  | ||||||
|  | func TestValidateNewEvent(t *testing.T) { | ||||||
|  | 	someTime := metav1.MicroTime{Time: time.Unix(1505828956, 0)} | ||||||
|  | 	table := []struct { | ||||||
|  | 		*core.Event | ||||||
|  | 		valid bool | ||||||
|  | 		msg   string | ||||||
|  | 	}{ | ||||||
|  | 		{ | ||||||
|  | 			Event: &core.Event{ | ||||||
|  | 				ObjectMeta: metav1.ObjectMeta{ | ||||||
|  | 					Name:      "test", | ||||||
|  | 					Namespace: metav1.NamespaceDefault, | ||||||
|  | 				}, | ||||||
|  | 				InvolvedObject: core.ObjectReference{ | ||||||
|  | 					APIVersion: "v1", | ||||||
|  | 					Kind:       "Node", | ||||||
|  | 				}, | ||||||
|  | 				EventTime: someTime, | ||||||
|  | 			}, | ||||||
|  | 			valid: false, | ||||||
|  | 			msg:   "Old Event with EventTime should trigger new validation and fail", | ||||||
|  | 		}, | ||||||
|  | 		{ | ||||||
|  | 			Event: &core.Event{ | ||||||
|  | 				ObjectMeta: metav1.ObjectMeta{ | ||||||
|  | 					Name:      "test", | ||||||
|  | 					Namespace: metav1.NamespaceSystem, | ||||||
|  | 				}, | ||||||
|  | 				InvolvedObject: core.ObjectReference{ | ||||||
|  | 					APIVersion: "v1", | ||||||
|  | 					Kind:       "Node", | ||||||
|  | 				}, | ||||||
|  | 				EventTime:           someTime, | ||||||
|  | 				ReportingController: "k8s.io/my-controller", | ||||||
|  | 				ReportingInstance:   "node-xyz", | ||||||
|  | 				Action:              "Do", | ||||||
|  | 				Reason:              "Because", | ||||||
|  | 			}, | ||||||
|  | 			valid: true, | ||||||
|  | 			msg:   "Valid new Event", | ||||||
|  | 		}, | ||||||
|  | 		{ | ||||||
|  | 			Event: &core.Event{ | ||||||
|  | 				ObjectMeta: metav1.ObjectMeta{ | ||||||
|  | 					Name:      "test", | ||||||
|  | 					Namespace: metav1.NamespaceSystem, | ||||||
|  | 				}, | ||||||
|  | 				InvolvedObject: core.ObjectReference{ | ||||||
|  | 					APIVersion: "v1", | ||||||
|  | 					Kind:       "Node", | ||||||
|  | 				}, | ||||||
|  | 				EventTime:           someTime, | ||||||
|  | 				ReportingController: "my-contr@ller", | ||||||
|  | 				ReportingInstance:   "node-xyz", | ||||||
|  | 				Action:              "Do", | ||||||
|  | 				Reason:              "Because", | ||||||
|  | 			}, | ||||||
|  | 			valid: false, | ||||||
|  | 			msg:   "not qualified reportingController", | ||||||
|  | 		}, | ||||||
|  | 		{ | ||||||
|  | 			Event: &core.Event{ | ||||||
|  | 				ObjectMeta: metav1.ObjectMeta{ | ||||||
|  | 					Name:      "test", | ||||||
|  | 					Namespace: metav1.NamespaceSystem, | ||||||
|  | 				}, | ||||||
|  | 				InvolvedObject: core.ObjectReference{ | ||||||
|  | 					APIVersion: "v1", | ||||||
|  | 					Kind:       "Node", | ||||||
|  | 				}, | ||||||
|  | 				EventTime:           someTime, | ||||||
|  | 				ReportingController: "k8s.io/my-controller", | ||||||
|  | 				ReportingInstance:   "node-xyzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz", | ||||||
|  | 				Action:              "Do", | ||||||
|  | 				Reason:              "Because", | ||||||
|  | 			}, | ||||||
|  | 			valid: false, | ||||||
|  | 			msg:   "too long reporting instance", | ||||||
|  | 		}, | ||||||
|  | 		{ | ||||||
|  | 			Event: &core.Event{ | ||||||
|  | 				ObjectMeta: metav1.ObjectMeta{ | ||||||
|  | 					Name:      "test", | ||||||
|  | 					Namespace: metav1.NamespaceSystem, | ||||||
|  | 				}, | ||||||
|  | 				InvolvedObject: core.ObjectReference{ | ||||||
|  | 					APIVersion: "v1", | ||||||
|  | 					Kind:       "Node", | ||||||
|  | 				}, | ||||||
|  | 				EventTime:           someTime, | ||||||
|  | 				ReportingController: "k8s.io/my-controller", | ||||||
|  | 				ReportingInstance:   "node-xyz", | ||||||
|  | 				Action:              "Do", | ||||||
|  | 			}, | ||||||
|  | 			valid: false, | ||||||
|  | 			msg:   "missing reason", | ||||||
|  | 		}, | ||||||
|  | 		{ | ||||||
|  | 			Event: &core.Event{ | ||||||
|  | 				ObjectMeta: metav1.ObjectMeta{ | ||||||
|  | 					Name:      "test", | ||||||
|  | 					Namespace: metav1.NamespaceSystem, | ||||||
|  | 				}, | ||||||
|  | 				InvolvedObject: core.ObjectReference{ | ||||||
|  | 					APIVersion: "v1", | ||||||
|  | 					Kind:       "Node", | ||||||
|  | 				}, | ||||||
|  | 				EventTime:           someTime, | ||||||
|  | 				ReportingController: "k8s.io/my-controller", | ||||||
|  | 				ReportingInstance:   "node-xyz", | ||||||
|  | 				Reason:              "Because", | ||||||
|  | 			}, | ||||||
|  | 			valid: false, | ||||||
|  | 			msg:   "missing action", | ||||||
|  | 		}, | ||||||
|  | 		{ | ||||||
|  | 			Event: &core.Event{ | ||||||
|  | 				ObjectMeta: metav1.ObjectMeta{ | ||||||
|  | 					Name: "test", | ||||||
|  | 				}, | ||||||
|  | 				InvolvedObject: core.ObjectReference{ | ||||||
|  | 					APIVersion: "v1", | ||||||
|  | 					Kind:       "Node", | ||||||
|  | 				}, | ||||||
|  | 				EventTime:           someTime, | ||||||
|  | 				ReportingController: "k8s.io/my-controller", | ||||||
|  | 				ReportingInstance:   "node-xyz", | ||||||
|  | 				Reason:              "Because", | ||||||
|  | 			}, | ||||||
|  | 			valid: false, | ||||||
|  | 			msg:   "missing namespace", | ||||||
|  | 		}, | ||||||
|  | 		{ | ||||||
|  | 			Event: &core.Event{ | ||||||
|  | 				ObjectMeta: metav1.ObjectMeta{ | ||||||
|  | 					Name: "test", | ||||||
|  | 				}, | ||||||
|  | 				InvolvedObject: core.ObjectReference{ | ||||||
|  | 					APIVersion: "v1", | ||||||
|  | 					Kind:       "Node", | ||||||
|  | 				}, | ||||||
|  | 				EventTime:           someTime, | ||||||
|  | 				ReportingController: "k8s.io/my-controller", | ||||||
|  | 				ReportingInstance:   "node-xyz", | ||||||
|  | 				Action:              "Do", | ||||||
|  | 				Reason:              "Because", | ||||||
|  | 				Message: `zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz | ||||||
|  | zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz | ||||||
|  | zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz | ||||||
|  | zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz | ||||||
|  | zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz | ||||||
|  | zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz | ||||||
|  | zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz | ||||||
|  | zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz | ||||||
|  | zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz | ||||||
|  | zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz | ||||||
|  | zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz`, | ||||||
|  | 			}, | ||||||
|  | 			valid: false, | ||||||
|  | 			msg:   "too long message", | ||||||
|  | 		}, | ||||||
|  | 	} | ||||||
|  |  | ||||||
|  | 	for _, item := range table { | ||||||
|  | 		if e, a := item.valid, len(ValidateEvent(item.Event)) == 0; e != a { | ||||||
|  | 			t.Errorf("%v: expected %v, got %v: %v", item.msg, e, a, ValidateEvent(item.Event)) | ||||||
| 		} | 		} | ||||||
| 	} | 	} | ||||||
| } | } | ||||||
|   | |||||||
							
								
								
									
										18
									
								
								pkg/apis/events/doc.go
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										18
									
								
								pkg/apis/events/doc.go
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,18 @@ | |||||||
|  | /* | ||||||
|  | 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. | ||||||
|  | */ | ||||||
|  |  | ||||||
|  | // +groupName=events.k8s.io | ||||||
|  | package events // import "k8s.io/kubernetes/pkg/apis/events" | ||||||
							
								
								
									
										48
									
								
								pkg/apis/events/install/install.go
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										48
									
								
								pkg/apis/events/install/install.go
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,48 @@ | |||||||
|  | /* | ||||||
|  | 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. | ||||||
|  | */ | ||||||
|  |  | ||||||
|  | // Package install installs the events API group, making it available as | ||||||
|  | // an option to all of the API encoding/decoding machinery. | ||||||
|  | package install | ||||||
|  |  | ||||||
|  | import ( | ||||||
|  | 	"k8s.io/apimachinery/pkg/apimachinery/announced" | ||||||
|  | 	"k8s.io/apimachinery/pkg/apimachinery/registered" | ||||||
|  | 	"k8s.io/apimachinery/pkg/runtime" | ||||||
|  | 	"k8s.io/kubernetes/pkg/api/legacyscheme" | ||||||
|  | 	"k8s.io/kubernetes/pkg/apis/events" | ||||||
|  | 	"k8s.io/kubernetes/pkg/apis/events/v1beta1" | ||||||
|  | ) | ||||||
|  |  | ||||||
|  | func init() { | ||||||
|  | 	Install(legacyscheme.GroupFactoryRegistry, legacyscheme.Registry, legacyscheme.Scheme) | ||||||
|  | } | ||||||
|  |  | ||||||
|  | // Install registers the API group and adds types to a scheme | ||||||
|  | func Install(groupFactoryRegistry announced.APIGroupFactoryRegistry, registry *registered.APIRegistrationManager, scheme *runtime.Scheme) { | ||||||
|  | 	if err := announced.NewGroupMetaFactory( | ||||||
|  | 		&announced.GroupMetaFactoryArgs{ | ||||||
|  | 			GroupName:                  events.GroupName, | ||||||
|  | 			VersionPreferenceOrder:     []string{v1beta1.SchemeGroupVersion.Version}, | ||||||
|  | 			AddInternalObjectsToScheme: events.AddToScheme, | ||||||
|  | 		}, | ||||||
|  | 		announced.VersionToSchemeFunc{ | ||||||
|  | 			v1beta1.SchemeGroupVersion.Version: v1beta1.AddToScheme, | ||||||
|  | 		}, | ||||||
|  | 	).Announce(groupFactoryRegistry).RegisterAndEnable(registry, scheme); err != nil { | ||||||
|  | 		panic(err) | ||||||
|  | 	} | ||||||
|  | } | ||||||
							
								
								
									
										52
									
								
								pkg/apis/events/register.go
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										52
									
								
								pkg/apis/events/register.go
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,52 @@ | |||||||
|  | /* | ||||||
|  | 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. | ||||||
|  | */ | ||||||
|  |  | ||||||
|  | package events | ||||||
|  |  | ||||||
|  | import ( | ||||||
|  | 	"k8s.io/apimachinery/pkg/runtime" | ||||||
|  | 	"k8s.io/apimachinery/pkg/runtime/schema" | ||||||
|  | 	"k8s.io/kubernetes/pkg/apis/core" | ||||||
|  | ) | ||||||
|  |  | ||||||
|  | // GroupName is the group name use in this package | ||||||
|  | const GroupName = "events.k8s.io" | ||||||
|  |  | ||||||
|  | // SchemeGroupVersion is group version used to register these objects | ||||||
|  | var SchemeGroupVersion = schema.GroupVersion{Group: GroupName, Version: runtime.APIVersionInternal} | ||||||
|  |  | ||||||
|  | // Kind takes an unqualified kind and returns a Group qualified GroupKind | ||||||
|  | func Kind(kind string) schema.GroupKind { | ||||||
|  | 	return SchemeGroupVersion.WithKind(kind).GroupKind() | ||||||
|  | } | ||||||
|  |  | ||||||
|  | // Resource takes an unqualified resource and returns a Group qualified GroupResource | ||||||
|  | func Resource(resource string) schema.GroupResource { | ||||||
|  | 	return SchemeGroupVersion.WithResource(resource).GroupResource() | ||||||
|  | } | ||||||
|  |  | ||||||
|  | var ( | ||||||
|  | 	SchemeBuilder = runtime.NewSchemeBuilder(addKnownTypes) | ||||||
|  | 	AddToScheme   = SchemeBuilder.AddToScheme | ||||||
|  | ) | ||||||
|  |  | ||||||
|  | func addKnownTypes(scheme *runtime.Scheme) error { | ||||||
|  | 	scheme.AddKnownTypes(SchemeGroupVersion, | ||||||
|  | 		&core.Event{}, | ||||||
|  | 		&core.EventList{}, | ||||||
|  | 	) | ||||||
|  | 	return nil | ||||||
|  | } | ||||||
							
								
								
									
										58
									
								
								pkg/apis/events/v1beta1/conversion.go
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										58
									
								
								pkg/apis/events/v1beta1/conversion.go
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,58 @@ | |||||||
|  | /* | ||||||
|  | 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. | ||||||
|  | */ | ||||||
|  |  | ||||||
|  | package v1beta1 | ||||||
|  |  | ||||||
|  | import ( | ||||||
|  | 	v1beta1 "k8s.io/api/events/v1beta1" | ||||||
|  | 	conversion "k8s.io/apimachinery/pkg/conversion" | ||||||
|  | 	k8s_api "k8s.io/kubernetes/pkg/apis/core" | ||||||
|  | 	k8s_api_v1 "k8s.io/kubernetes/pkg/apis/core/v1" | ||||||
|  | ) | ||||||
|  |  | ||||||
|  | func Convert_v1beta1_Event_To_core_Event(in *v1beta1.Event, out *k8s_api.Event, s conversion.Scope) error { | ||||||
|  | 	if err := autoConvert_v1beta1_Event_To_core_Event(in, out, s); err != nil { | ||||||
|  | 		return err | ||||||
|  | 	} | ||||||
|  | 	if err := k8s_api_v1.Convert_v1_ObjectReference_To_core_ObjectReference(&in.Regarding, &out.InvolvedObject, s); err != nil { | ||||||
|  | 		return err | ||||||
|  | 	} | ||||||
|  | 	if err := k8s_api_v1.Convert_v1_EventSource_To_core_EventSource(&in.DeprecatedSource, &out.Source, s); err != nil { | ||||||
|  | 		return err | ||||||
|  | 	} | ||||||
|  | 	out.Message = in.Note | ||||||
|  | 	out.FirstTimestamp = in.DeprecatedFirstTimestamp | ||||||
|  | 	out.LastTimestamp = in.DeprecatedLastTimestamp | ||||||
|  | 	out.Count = in.DeprecatedCount | ||||||
|  | 	return nil | ||||||
|  | } | ||||||
|  |  | ||||||
|  | func Convert_core_Event_To_v1beta1_Event(in *k8s_api.Event, out *v1beta1.Event, s conversion.Scope) error { | ||||||
|  | 	if err := autoConvert_core_Event_To_v1beta1_Event(in, out, s); err != nil { | ||||||
|  | 		return err | ||||||
|  | 	} | ||||||
|  | 	if err := k8s_api_v1.Convert_core_ObjectReference_To_v1_ObjectReference(&in.InvolvedObject, &out.Regarding, s); err != nil { | ||||||
|  | 		return err | ||||||
|  | 	} | ||||||
|  | 	if err := k8s_api_v1.Convert_core_EventSource_To_v1_EventSource(&in.Source, &out.DeprecatedSource, s); err != nil { | ||||||
|  | 		return err | ||||||
|  | 	} | ||||||
|  | 	out.Note = in.Message | ||||||
|  | 	out.DeprecatedFirstTimestamp = in.FirstTimestamp | ||||||
|  | 	out.DeprecatedLastTimestamp = in.LastTimestamp | ||||||
|  | 	out.DeprecatedCount = in.Count | ||||||
|  | 	return nil | ||||||
|  | } | ||||||
							
								
								
									
										23
									
								
								pkg/apis/events/v1beta1/doc.go
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										23
									
								
								pkg/apis/events/v1beta1/doc.go
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,23 @@ | |||||||
|  | /* | ||||||
|  | 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. | ||||||
|  | */ | ||||||
|  |  | ||||||
|  | // +k8s:conversion-gen=k8s.io/kubernetes/pkg/apis/events | ||||||
|  | // +k8s:conversion-gen-external-types=../../../../vendor/k8s.io/api/events/v1beta1 | ||||||
|  | // +k8s:defaulter-gen=TypeMeta | ||||||
|  | // +k8s:defaulter-gen-input=../../../../vendor/k8s.io/api/events/v1beta1 | ||||||
|  |  | ||||||
|  | // +groupName=events.k8s.io | ||||||
|  | package v1beta1 // import "k8s.io/kubernetes/pkg/apis/events/v1beta1" | ||||||
							
								
								
									
										45
									
								
								pkg/apis/events/v1beta1/register.go
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										45
									
								
								pkg/apis/events/v1beta1/register.go
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,45 @@ | |||||||
|  | /* | ||||||
|  | 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. | ||||||
|  | */ | ||||||
|  |  | ||||||
|  | package v1beta1 | ||||||
|  |  | ||||||
|  | import ( | ||||||
|  | 	eventsv1beta1 "k8s.io/api/events/v1beta1" | ||||||
|  | 	"k8s.io/apimachinery/pkg/runtime/schema" | ||||||
|  | ) | ||||||
|  |  | ||||||
|  | // GroupName is the group name use in this package | ||||||
|  | const GroupName = "events.k8s.io" | ||||||
|  |  | ||||||
|  | // SchemeGroupVersion is group version used to register these objects | ||||||
|  | var SchemeGroupVersion = schema.GroupVersion{Group: GroupName, Version: "v1beta1"} | ||||||
|  |  | ||||||
|  | // Resource takes an unqualified resource and returns a Group qualified GroupResource | ||||||
|  | func Resource(resource string) schema.GroupResource { | ||||||
|  | 	return SchemeGroupVersion.WithResource(resource).GroupResource() | ||||||
|  | } | ||||||
|  |  | ||||||
|  | var ( | ||||||
|  | 	localSchemeBuilder = &eventsv1beta1.SchemeBuilder | ||||||
|  | 	AddToScheme        = localSchemeBuilder.AddToScheme | ||||||
|  | ) | ||||||
|  |  | ||||||
|  | func init() { | ||||||
|  | 	// We only register manually written functions here. The registration of the | ||||||
|  | 	// generated functions takes place in the generated files. The separation | ||||||
|  | 	// makes the code compile even when the generated files are missing. | ||||||
|  | 	localSchemeBuilder.Register(RegisterDefaults) | ||||||
|  | } | ||||||
| @@ -32,6 +32,7 @@ import ( | |||||||
| 	_ "k8s.io/kubernetes/pkg/apis/certificates/install" | 	_ "k8s.io/kubernetes/pkg/apis/certificates/install" | ||||||
| 	_ "k8s.io/kubernetes/pkg/apis/componentconfig/install" | 	_ "k8s.io/kubernetes/pkg/apis/componentconfig/install" | ||||||
| 	_ "k8s.io/kubernetes/pkg/apis/core/install" | 	_ "k8s.io/kubernetes/pkg/apis/core/install" | ||||||
|  | 	_ "k8s.io/kubernetes/pkg/apis/events/install" | ||||||
| 	_ "k8s.io/kubernetes/pkg/apis/extensions/install" | 	_ "k8s.io/kubernetes/pkg/apis/extensions/install" | ||||||
| 	_ "k8s.io/kubernetes/pkg/apis/imagepolicy/install" | 	_ "k8s.io/kubernetes/pkg/apis/imagepolicy/install" | ||||||
| 	_ "k8s.io/kubernetes/pkg/apis/networking/install" | 	_ "k8s.io/kubernetes/pkg/apis/networking/install" | ||||||
|   | |||||||
| @@ -37,6 +37,7 @@ import ( | |||||||
| 	batchapiv1beta1 "k8s.io/api/batch/v1beta1" | 	batchapiv1beta1 "k8s.io/api/batch/v1beta1" | ||||||
| 	certificatesapiv1beta1 "k8s.io/api/certificates/v1beta1" | 	certificatesapiv1beta1 "k8s.io/api/certificates/v1beta1" | ||||||
| 	apiv1 "k8s.io/api/core/v1" | 	apiv1 "k8s.io/api/core/v1" | ||||||
|  | 	eventsv1beta1 "k8s.io/api/events/v1beta1" | ||||||
| 	extensionsapiv1beta1 "k8s.io/api/extensions/v1beta1" | 	extensionsapiv1beta1 "k8s.io/api/extensions/v1beta1" | ||||||
| 	networkingapiv1 "k8s.io/api/networking/v1" | 	networkingapiv1 "k8s.io/api/networking/v1" | ||||||
| 	policyapiv1beta1 "k8s.io/api/policy/v1beta1" | 	policyapiv1beta1 "k8s.io/api/policy/v1beta1" | ||||||
| @@ -77,6 +78,7 @@ import ( | |||||||
| 	batchrest "k8s.io/kubernetes/pkg/registry/batch/rest" | 	batchrest "k8s.io/kubernetes/pkg/registry/batch/rest" | ||||||
| 	certificatesrest "k8s.io/kubernetes/pkg/registry/certificates/rest" | 	certificatesrest "k8s.io/kubernetes/pkg/registry/certificates/rest" | ||||||
| 	corerest "k8s.io/kubernetes/pkg/registry/core/rest" | 	corerest "k8s.io/kubernetes/pkg/registry/core/rest" | ||||||
|  | 	eventsrest "k8s.io/kubernetes/pkg/registry/events/rest" | ||||||
| 	extensionsrest "k8s.io/kubernetes/pkg/registry/extensions/rest" | 	extensionsrest "k8s.io/kubernetes/pkg/registry/extensions/rest" | ||||||
| 	networkingrest "k8s.io/kubernetes/pkg/registry/networking/rest" | 	networkingrest "k8s.io/kubernetes/pkg/registry/networking/rest" | ||||||
| 	policyrest "k8s.io/kubernetes/pkg/registry/policy/rest" | 	policyrest "k8s.io/kubernetes/pkg/registry/policy/rest" | ||||||
| @@ -350,6 +352,7 @@ func (c completedConfig) New(delegationTarget genericapiserver.DelegationTarget) | |||||||
| 		// See https://github.com/kubernetes/kubernetes/issues/42392 | 		// See https://github.com/kubernetes/kubernetes/issues/42392 | ||||||
| 		appsrest.RESTStorageProvider{}, | 		appsrest.RESTStorageProvider{}, | ||||||
| 		admissionregistrationrest.RESTStorageProvider{}, | 		admissionregistrationrest.RESTStorageProvider{}, | ||||||
|  | 		eventsrest.RESTStorageProvider{TTL: c.ExtraConfig.EventTTL}, | ||||||
| 	} | 	} | ||||||
| 	m.InstallAPIs(c.ExtraConfig.APIResourceConfigSource, c.GenericConfig.RESTOptionsGetter, restStorageProviders...) | 	m.InstallAPIs(c.ExtraConfig.APIResourceConfigSource, c.GenericConfig.RESTOptionsGetter, restStorageProviders...) | ||||||
|  |  | ||||||
| @@ -479,6 +482,7 @@ func DefaultAPIResourceConfigSource() *serverstorage.ResourceConfig { | |||||||
| 		authorizationapiv1.SchemeGroupVersion, | 		authorizationapiv1.SchemeGroupVersion, | ||||||
| 		authorizationapiv1beta1.SchemeGroupVersion, | 		authorizationapiv1beta1.SchemeGroupVersion, | ||||||
| 		networkingapiv1.SchemeGroupVersion, | 		networkingapiv1.SchemeGroupVersion, | ||||||
|  | 		eventsv1beta1.SchemeGroupVersion, | ||||||
| 	) | 	) | ||||||
|  |  | ||||||
| 	// all extensions resources except these are disabled by default | 	// all extensions resources except these are disabled by default | ||||||
|   | |||||||
							
								
								
									
										8
									
								
								pkg/registry/events/OWNERS
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										8
									
								
								pkg/registry/events/OWNERS
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,8 @@ | |||||||
|  | reviewers: | ||||||
|  | - gmarek | ||||||
|  | - deads2k | ||||||
|  | - sttts | ||||||
|  | approvers: | ||||||
|  | - gmarek | ||||||
|  | - deads2k | ||||||
|  | - sttts | ||||||
							
								
								
									
										17
									
								
								pkg/registry/events/event/doc.go
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										17
									
								
								pkg/registry/events/event/doc.go
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,17 @@ | |||||||
|  | /* | ||||||
|  | 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. | ||||||
|  | */ | ||||||
|  |  | ||||||
|  | package event // import "k8s.io/kubernetes/pkg/registry/events/event" | ||||||
							
								
								
									
										104
									
								
								pkg/registry/events/event/strategy.go
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										104
									
								
								pkg/registry/events/event/strategy.go
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,104 @@ | |||||||
|  | /* | ||||||
|  | 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. | ||||||
|  | */ | ||||||
|  |  | ||||||
|  | package event | ||||||
|  |  | ||||||
|  | import ( | ||||||
|  | 	"fmt" | ||||||
|  |  | ||||||
|  | 	"k8s.io/apimachinery/pkg/fields" | ||||||
|  | 	"k8s.io/apimachinery/pkg/labels" | ||||||
|  | 	"k8s.io/apimachinery/pkg/runtime" | ||||||
|  | 	"k8s.io/apimachinery/pkg/util/validation/field" | ||||||
|  | 	genericapirequest "k8s.io/apiserver/pkg/endpoints/request" | ||||||
|  | 	"k8s.io/apiserver/pkg/registry/generic" | ||||||
|  | 	apistorage "k8s.io/apiserver/pkg/storage" | ||||||
|  | 	"k8s.io/apiserver/pkg/storage/names" | ||||||
|  | 	"k8s.io/kubernetes/pkg/api/legacyscheme" | ||||||
|  | 	api "k8s.io/kubernetes/pkg/apis/core" | ||||||
|  | 	"k8s.io/kubernetes/pkg/apis/core/validation" | ||||||
|  | ) | ||||||
|  |  | ||||||
|  | // eventStrategy implements verification logic for Pod Presets. | ||||||
|  | type eventStrategy struct { | ||||||
|  | 	runtime.ObjectTyper | ||||||
|  | 	names.NameGenerator | ||||||
|  | } | ||||||
|  |  | ||||||
|  | // Strategy is the default logic that applies when creating and updating Pod Preset objects. | ||||||
|  | var Strategy = eventStrategy{legacyscheme.Scheme, names.SimpleNameGenerator} | ||||||
|  |  | ||||||
|  | // NamespaceScoped returns true because all Events need to be within a namespace. | ||||||
|  | func (eventStrategy) NamespaceScoped() bool { | ||||||
|  | 	return true | ||||||
|  | } | ||||||
|  |  | ||||||
|  | // PrepareForCreate clears the status of a Pod Preset before creation. | ||||||
|  | func (eventStrategy) PrepareForCreate(ctx genericapirequest.Context, obj runtime.Object) { | ||||||
|  | } | ||||||
|  |  | ||||||
|  | // PrepareForUpdate clears fields that are not allowed to be set by end users on update. | ||||||
|  | func (eventStrategy) PrepareForUpdate(ctx genericapirequest.Context, obj, old runtime.Object) { | ||||||
|  | } | ||||||
|  |  | ||||||
|  | // Validate validates a new Event. | ||||||
|  | func (eventStrategy) Validate(ctx genericapirequest.Context, obj runtime.Object) field.ErrorList { | ||||||
|  | 	event := obj.(*api.Event) | ||||||
|  | 	return validation.ValidateEvent(event) | ||||||
|  | } | ||||||
|  |  | ||||||
|  | // Canonicalize normalizes the object after validation. | ||||||
|  | // AllowCreateOnUpdate is false for Event; this means POST is needed to create one. | ||||||
|  | func (eventStrategy) AllowCreateOnUpdate() bool { | ||||||
|  | 	return false | ||||||
|  | } | ||||||
|  |  | ||||||
|  | func (eventStrategy) Canonicalize(obj runtime.Object) {} | ||||||
|  |  | ||||||
|  | // ValidateUpdate is the default update validation for an end user. | ||||||
|  | func (eventStrategy) ValidateUpdate(ctx genericapirequest.Context, obj, old runtime.Object) field.ErrorList { | ||||||
|  | 	event := obj.(*api.Event) | ||||||
|  | 	return validation.ValidateEvent(event) | ||||||
|  | } | ||||||
|  |  | ||||||
|  | // AllowUnconditionalUpdate is the default update policy for Event objects. | ||||||
|  | func (eventStrategy) AllowUnconditionalUpdate() bool { | ||||||
|  | 	return true | ||||||
|  | } | ||||||
|  |  | ||||||
|  | // SelectableFields returns a field set that represents the object. | ||||||
|  | func SelectableFields(pip *api.Event) fields.Set { | ||||||
|  | 	return generic.ObjectMetaFieldsSet(&pip.ObjectMeta, true) | ||||||
|  | } | ||||||
|  |  | ||||||
|  | // GetAttrs returns labels and fields of a given object for filtering purposes. | ||||||
|  | func GetAttrs(obj runtime.Object) (labels.Set, fields.Set, bool, error) { | ||||||
|  | 	pip, ok := obj.(*api.Event) | ||||||
|  | 	if !ok { | ||||||
|  | 		return nil, nil, false, fmt.Errorf("given object is not a Event") | ||||||
|  | 	} | ||||||
|  | 	return labels.Set(pip.ObjectMeta.Labels), SelectableFields(pip), pip.Initializers != nil, nil | ||||||
|  | } | ||||||
|  |  | ||||||
|  | // Matcher is the filter used by the generic etcd backend to watch events | ||||||
|  | // from etcd to clients of the apiserver only interested in specific labels/fields. | ||||||
|  | func Matcher(label labels.Selector, field fields.Selector) apistorage.SelectionPredicate { | ||||||
|  | 	return apistorage.SelectionPredicate{ | ||||||
|  | 		Label:    label, | ||||||
|  | 		Field:    field, | ||||||
|  | 		GetAttrs: GetAttrs, | ||||||
|  | 	} | ||||||
|  | } | ||||||
							
								
								
									
										62
									
								
								pkg/registry/events/rest/storage_events.go
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										62
									
								
								pkg/registry/events/rest/storage_events.go
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,62 @@ | |||||||
|  | /* | ||||||
|  | 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. | ||||||
|  | */ | ||||||
|  |  | ||||||
|  | package rest | ||||||
|  |  | ||||||
|  | import ( | ||||||
|  | 	"time" | ||||||
|  |  | ||||||
|  | 	eventsapiv1beta1 "k8s.io/api/events/v1beta1" | ||||||
|  | 	"k8s.io/apiserver/pkg/registry/generic" | ||||||
|  | 	"k8s.io/apiserver/pkg/registry/rest" | ||||||
|  | 	genericapiserver "k8s.io/apiserver/pkg/server" | ||||||
|  | 	serverstorage "k8s.io/apiserver/pkg/server/storage" | ||||||
|  | 	"k8s.io/kubernetes/pkg/api/legacyscheme" | ||||||
|  | 	"k8s.io/kubernetes/pkg/apis/events" | ||||||
|  | 	eventstore "k8s.io/kubernetes/pkg/registry/core/event/storage" | ||||||
|  | ) | ||||||
|  |  | ||||||
|  | type RESTStorageProvider struct { | ||||||
|  | 	TTL time.Duration | ||||||
|  | } | ||||||
|  |  | ||||||
|  | func (p RESTStorageProvider) NewRESTStorage(apiResourceConfigSource serverstorage.APIResourceConfigSource, restOptionsGetter generic.RESTOptionsGetter) (genericapiserver.APIGroupInfo, bool) { | ||||||
|  | 	apiGroupInfo := genericapiserver.NewDefaultAPIGroupInfo(events.GroupName, legacyscheme.Registry, legacyscheme.Scheme, legacyscheme.ParameterCodec, legacyscheme.Codecs) | ||||||
|  | 	// If you add a version here, be sure to add an entry in `k8s.io/kubernetes/cmd/kube-apiserver/app/aggregator.go with specific priorities. | ||||||
|  | 	// TODO refactor the plumbing to provide the information in the APIGroupInfo | ||||||
|  |  | ||||||
|  | 	if apiResourceConfigSource.AnyResourcesForVersionEnabled(eventsapiv1beta1.SchemeGroupVersion) { | ||||||
|  | 		apiGroupInfo.VersionedResourcesStorageMap[eventsapiv1beta1.SchemeGroupVersion.Version] = p.v1beta1Storage(apiResourceConfigSource, restOptionsGetter) | ||||||
|  | 		apiGroupInfo.GroupMeta.GroupVersion = eventsapiv1beta1.SchemeGroupVersion | ||||||
|  | 	} | ||||||
|  |  | ||||||
|  | 	return apiGroupInfo, true | ||||||
|  | } | ||||||
|  |  | ||||||
|  | func (p RESTStorageProvider) v1beta1Storage(apiResourceConfigSource serverstorage.APIResourceConfigSource, restOptionsGetter generic.RESTOptionsGetter) map[string]rest.Storage { | ||||||
|  | 	version := eventsapiv1beta1.SchemeGroupVersion | ||||||
|  |  | ||||||
|  | 	storage := map[string]rest.Storage{} | ||||||
|  | 	if apiResourceConfigSource.ResourceEnabled(version.WithResource("events")) { | ||||||
|  | 		eventsStorage := eventstore.NewREST(restOptionsGetter, uint64(p.TTL.Seconds())) | ||||||
|  | 		storage["events"] = eventsStorage | ||||||
|  | 	} | ||||||
|  | 	return storage | ||||||
|  | } | ||||||
|  |  | ||||||
|  | func (p RESTStorageProvider) GroupName() string { | ||||||
|  | 	return events.GroupName | ||||||
|  | } | ||||||
| @@ -4468,7 +4468,6 @@ const ( | |||||||
| // +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object | // +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object | ||||||
|  |  | ||||||
| // Event is a report of an event somewhere in the cluster. | // Event is a report of an event somewhere in the cluster. | ||||||
| // TODO: Decide whether to store these separately or with the object they apply to. |  | ||||||
| type Event struct { | type Event struct { | ||||||
| 	metav1.TypeMeta `json:",inline"` | 	metav1.TypeMeta `json:",inline"` | ||||||
| 	// Standard object's metadata. | 	// Standard object's metadata. | ||||||
| @@ -4508,8 +4507,51 @@ type Event struct { | |||||||
| 	// Type of this event (Normal, Warning), new types could be added in the future | 	// Type of this event (Normal, Warning), new types could be added in the future | ||||||
| 	// +optional | 	// +optional | ||||||
| 	Type string `json:"type,omitempty" protobuf:"bytes,9,opt,name=type"` | 	Type string `json:"type,omitempty" protobuf:"bytes,9,opt,name=type"` | ||||||
|  |  | ||||||
|  | 	// Time when this Event was first observed. | ||||||
|  | 	// +optional | ||||||
|  | 	EventTime metav1.MicroTime `json:"eventTime,omitempty" protobuf:"bytes,10,opt,name=eventTime"` | ||||||
|  |  | ||||||
|  | 	// Data about the Event series this event represents or nil if it's a singleton Event. | ||||||
|  | 	// +optional | ||||||
|  | 	Series *EventSeries `json:"series,omitempty" protobuf:"bytes,11,opt,name=series"` | ||||||
|  |  | ||||||
|  | 	// What action was taken/failed regarding to the Regarding object. | ||||||
|  | 	// +optional | ||||||
|  | 	Action string `json:"action,omitempty" protobuf:"bytes,12,opt,name=action"` | ||||||
|  |  | ||||||
|  | 	// Optional secondary object for more complex actions. | ||||||
|  | 	// +optional | ||||||
|  | 	Related *ObjectReference `json:"related,omitempty" protobuf:"bytes,13,opt,name=related"` | ||||||
|  |  | ||||||
|  | 	// Name of the controller that emitted this Event, e.g. `kubernetes.io/kubelet`. | ||||||
|  | 	// +optional | ||||||
|  | 	ReportingController string `json:"reportingComponent" protobuf:"bytes,14,opt,name=reportingComponent"` | ||||||
|  |  | ||||||
|  | 	// ID of the controller instance, e.g. `kubelet-xyzf`. | ||||||
|  | 	// +optional | ||||||
|  | 	ReportingInstance string `json:"reportingInstance" protobuf:"bytes,15,opt,name=reportingInstance"` | ||||||
| } | } | ||||||
|  |  | ||||||
|  | // EventSeries contain information on series of events, i.e. thing that was/is happening | ||||||
|  | // continously for some time. | ||||||
|  | type EventSeries struct { | ||||||
|  | 	// Number of occurrences in this series up to the last heartbeat time | ||||||
|  | 	Count int32 `json:"count,omitempty" protobuf:"varint,1,name=count"` | ||||||
|  | 	// Time of the last occurence observed | ||||||
|  | 	LastObservedTime metav1.MicroTime `json:"lastObservedTime,omitempty" protobuf:"bytes,2,name=lastObservedTime"` | ||||||
|  | 	// State of this Series: Ongoing or Finished | ||||||
|  | 	State EventSeriesState `json:"state,omitempty" protobuf:"bytes,3,name=state"` | ||||||
|  | } | ||||||
|  |  | ||||||
|  | type EventSeriesState string | ||||||
|  |  | ||||||
|  | const ( | ||||||
|  | 	EventSeriesStateOngoing  EventSeriesState = "Ongoing" | ||||||
|  | 	EventSeriesStateFinished EventSeriesState = "Finished" | ||||||
|  | 	EventSeriesStateUnknown  EventSeriesState = "Unknown" | ||||||
|  | ) | ||||||
|  |  | ||||||
| // +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object | // +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object | ||||||
|  |  | ||||||
| // EventList is a list of events. | // EventList is a list of events. | ||||||
|   | |||||||
							
								
								
									
										8
									
								
								staging/src/k8s.io/api/events/OWNERS
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										8
									
								
								staging/src/k8s.io/api/events/OWNERS
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,8 @@ | |||||||
|  | reviewers: | ||||||
|  | - gmarek | ||||||
|  | - deads2k | ||||||
|  | - sttts | ||||||
|  | approvers: | ||||||
|  | - gmarek | ||||||
|  | - deads2k | ||||||
|  | - sttts | ||||||
							
								
								
									
										21
									
								
								staging/src/k8s.io/api/events/v1beta1/doc.go
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										21
									
								
								staging/src/k8s.io/api/events/v1beta1/doc.go
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,21 @@ | |||||||
|  | /* | ||||||
|  | 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. | ||||||
|  | */ | ||||||
|  |  | ||||||
|  | // +k8s:deepcopy-gen=package | ||||||
|  | // +k8s:openapi-gen=true | ||||||
|  |  | ||||||
|  | // +groupName=events.k8s.io | ||||||
|  | package v1beta1 // import "k8s.io/api/events/v1beta1" | ||||||
							
								
								
									
										53
									
								
								staging/src/k8s.io/api/events/v1beta1/register.go
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										53
									
								
								staging/src/k8s.io/api/events/v1beta1/register.go
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,53 @@ | |||||||
|  | /* | ||||||
|  | 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. | ||||||
|  | */ | ||||||
|  |  | ||||||
|  | package v1beta1 | ||||||
|  |  | ||||||
|  | import ( | ||||||
|  | 	metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" | ||||||
|  | 	"k8s.io/apimachinery/pkg/runtime" | ||||||
|  | 	"k8s.io/apimachinery/pkg/runtime/schema" | ||||||
|  | ) | ||||||
|  |  | ||||||
|  | // GroupName is the group name use in this package | ||||||
|  | const GroupName = "events.k8s.io" | ||||||
|  |  | ||||||
|  | // SchemeGroupVersion is group version used to register these objects | ||||||
|  | var SchemeGroupVersion = schema.GroupVersion{Group: GroupName, Version: "v1beta1"} | ||||||
|  |  | ||||||
|  | // Resource takes an unqualified resource and returns a Group qualified GroupResource | ||||||
|  | func Resource(resource string) schema.GroupResource { | ||||||
|  | 	return SchemeGroupVersion.WithResource(resource).GroupResource() | ||||||
|  | } | ||||||
|  |  | ||||||
|  | var ( | ||||||
|  | 	// TODO: move SchemeBuilder with zz_generated.deepcopy.go to k8s.io/api. | ||||||
|  | 	// localSchemeBuilder and AddToScheme will stay in k8s.io/kubernetes. | ||||||
|  | 	SchemeBuilder      = runtime.NewSchemeBuilder(addKnownTypes) | ||||||
|  | 	localSchemeBuilder = &SchemeBuilder | ||||||
|  | 	AddToScheme        = localSchemeBuilder.AddToScheme | ||||||
|  | ) | ||||||
|  |  | ||||||
|  | // Adds the list of known types to api.Scheme. | ||||||
|  | func addKnownTypes(scheme *runtime.Scheme) error { | ||||||
|  | 	scheme.AddKnownTypes(SchemeGroupVersion, | ||||||
|  | 		&Event{}, | ||||||
|  | 		&EventList{}, | ||||||
|  | 	) | ||||||
|  |  | ||||||
|  | 	metav1.AddToGroupVersion(scheme, SchemeGroupVersion) | ||||||
|  | 	return nil | ||||||
|  | } | ||||||
							
								
								
									
										122
									
								
								staging/src/k8s.io/api/events/v1beta1/types.go
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										122
									
								
								staging/src/k8s.io/api/events/v1beta1/types.go
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,122 @@ | |||||||
|  | /* | ||||||
|  | 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. | ||||||
|  | */ | ||||||
|  |  | ||||||
|  | package v1beta1 | ||||||
|  |  | ||||||
|  | import ( | ||||||
|  | 	corev1 "k8s.io/api/core/v1" | ||||||
|  | 	metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" | ||||||
|  | ) | ||||||
|  |  | ||||||
|  | // +genclient | ||||||
|  | // +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object | ||||||
|  |  | ||||||
|  | // Event is a report of an event somewhere in the cluster. It generally denotes some state change in the system. | ||||||
|  | type Event struct { | ||||||
|  | 	metav1.TypeMeta `json:",inline"` | ||||||
|  | 	// +optional | ||||||
|  | 	metav1.ObjectMeta `json:"metadata,omitempty" protobuf:"bytes,1,opt,name=metadata"` | ||||||
|  |  | ||||||
|  | 	// Required. Time when this Event was first observed. | ||||||
|  | 	EventTime metav1.MicroTime `json:"eventTime" protobuf:"bytes,2,opt,name=eventTime"` | ||||||
|  |  | ||||||
|  | 	// Data about the Event series this event represents or nil if it's a singleton Event. | ||||||
|  | 	// +optional | ||||||
|  | 	Series *EventSeries `json:"series,omitempty" protobuf:"bytes,3,opt,name=series"` | ||||||
|  |  | ||||||
|  | 	// Name of the controller that emitted this Event, e.g. `kubernetes.io/kubelet`. | ||||||
|  | 	// +optional | ||||||
|  | 	ReportingController string `json:"reportingController,omitempty" protobuf:"bytes,4,opt,name=reportingController"` | ||||||
|  |  | ||||||
|  | 	// ID of the controller instance, e.g. `kubelet-xyzf`. | ||||||
|  | 	// +optional | ||||||
|  | 	ReportingInstance string `json:"reportingInstance,omitemtpy" protobuf:"bytes,5,opt,name=reportingInstance"` | ||||||
|  |  | ||||||
|  | 	// What action was taken/failed regarding to the regarding object. | ||||||
|  | 	// +optional | ||||||
|  | 	Action string `json:"action,omitemtpy" protobuf:"bytes,6,name=action"` | ||||||
|  |  | ||||||
|  | 	// Why the action was taken. | ||||||
|  | 	Reason string `json:"reason,omitempty" protobuf:"bytes,7,name=reason"` | ||||||
|  |  | ||||||
|  | 	// The object this Event is about. In most cases it's an Object reporting controller implements. | ||||||
|  | 	// E.g. ReplicaSetController implements ReplicaSets and this event is emitted because | ||||||
|  | 	// it acts on some changes in a ReplicaSet object. | ||||||
|  | 	// +optional | ||||||
|  | 	Regarding corev1.ObjectReference `json:"regarding,omitempty" protobuf:"bytes,8,opt,name=regarding"` | ||||||
|  |  | ||||||
|  | 	// Optional secondary object for more complex actions. E.g. when regarding object triggers | ||||||
|  | 	// a creation or deletion of related object. | ||||||
|  | 	// +optional | ||||||
|  | 	Related *corev1.ObjectReference `json:"related,omitempty" protobuf:"bytes,9,opt,name=related"` | ||||||
|  |  | ||||||
|  | 	// Optional. A human-readable description of the status of this operation. | ||||||
|  | 	// Maximal length of the note is 1kB, but libraries should be prepared to | ||||||
|  | 	// handle values up to 64kB. | ||||||
|  | 	// +optional | ||||||
|  | 	Note string `json:"note,omitempty" protobuf:"bytes,10,opt,name=note"` | ||||||
|  |  | ||||||
|  | 	// Type of this event (Normal, Warning), new types could be added in the | ||||||
|  | 	// future. | ||||||
|  | 	// +optional | ||||||
|  | 	Type string `json:"type,omitempty" protobuf:"bytes,11,opt,name=type"` | ||||||
|  |  | ||||||
|  | 	// Deprecated field assuring backward compatibility with core.v1 Event type | ||||||
|  | 	// +optional | ||||||
|  | 	DeprecatedSource corev1.EventSource `json:"deprecatedSource,omitempty" protobuf:"bytes,12,opt,name=deprecatedSource"` | ||||||
|  | 	// Deprecated field assuring backward compatibility with core.v1 Event type | ||||||
|  | 	// +optional | ||||||
|  | 	DeprecatedFirstTimestamp metav1.Time `json:"deprecatedFirstTimestamp,omitempty" protobuf:"bytes,13,opt,name=deprecatedFirstTimestamp"` | ||||||
|  | 	// Deprecated field assuring backward compatibility with core.v1 Event type | ||||||
|  | 	// +optional | ||||||
|  | 	DeprecatedLastTimestamp metav1.Time `json:"deprecatedLastTimestamp,omitempty" protobuf:"bytes,14,opt,name=deprecatedLastTimestamp"` | ||||||
|  | 	// Deprecated field assuring backward compatibility with core.v1 Event type | ||||||
|  | 	// +optional | ||||||
|  | 	DeprecatedCount int32 `json:"deprecatedCount,omitempty" protobuf:"varint,15,opt,name=deprecatedCount"` | ||||||
|  | } | ||||||
|  |  | ||||||
|  | // EventSeries contain information on series of events, i.e. thing that was/is happening | ||||||
|  | // continously for some time. | ||||||
|  | type EventSeries struct { | ||||||
|  | 	// Number of occurrences in this series up to the last heartbeat time | ||||||
|  | 	Count int32 `json:"count" protobuf:"varint,1,opt,name=count"` | ||||||
|  | 	// Time when last Event from the series was seen before last heartbeat. | ||||||
|  | 	LastObservedTime metav1.MicroTime `json:"lastObservedTime" protobuf:"bytes,2,opt,name=lastObservedTime"` | ||||||
|  | 	// Information whether this series is ongoing or finished. | ||||||
|  | 	State EventSeriesState `json:"state" protobuf:"bytes,3,opt,name=state"` | ||||||
|  | } | ||||||
|  |  | ||||||
|  | type EventSeriesState string | ||||||
|  |  | ||||||
|  | const ( | ||||||
|  | 	EventSeriesStateOngoing  EventSeriesState = "Ongoing" | ||||||
|  | 	EventSeriesStateFinished EventSeriesState = "Finished" | ||||||
|  | 	EventSeriesStateUnknown  EventSeriesState = "Unknown" | ||||||
|  | ) | ||||||
|  |  | ||||||
|  | // +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object | ||||||
|  |  | ||||||
|  | // EventList is a list of Event objects. | ||||||
|  | type EventList struct { | ||||||
|  | 	metav1.TypeMeta `json:",inline"` | ||||||
|  | 	// Standard list metadata. | ||||||
|  | 	// More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata | ||||||
|  | 	// +optional | ||||||
|  | 	metav1.ListMeta `json:"metadata,omitempty" protobuf:"bytes,1,opt,name=metadata"` | ||||||
|  |  | ||||||
|  | 	// Items is a list of schema objects. | ||||||
|  | 	Items []Event `json:"items" protobuf:"bytes,2,rep,name=items"` | ||||||
|  | } | ||||||
| @@ -38,6 +38,7 @@ func AddConversionFuncs(scheme *runtime.Scheme) error { | |||||||
| 		Convert_intstr_IntOrString_To_intstr_IntOrString, | 		Convert_intstr_IntOrString_To_intstr_IntOrString, | ||||||
|  |  | ||||||
| 		Convert_unversioned_Time_To_unversioned_Time, | 		Convert_unversioned_Time_To_unversioned_Time, | ||||||
|  | 		Convert_unversioned_MicroTime_To_unversioned_MicroTime, | ||||||
|  |  | ||||||
| 		Convert_Pointer_v1_Duration_To_v1_Duration, | 		Convert_Pointer_v1_Duration_To_v1_Duration, | ||||||
| 		Convert_v1_Duration_To_Pointer_v1_Duration, | 		Convert_v1_Duration_To_Pointer_v1_Duration, | ||||||
| @@ -199,6 +200,12 @@ func Convert_v1_Duration_To_Pointer_v1_Duration(in *Duration, out **Duration, s | |||||||
| 	return nil | 	return nil | ||||||
| } | } | ||||||
|  |  | ||||||
|  | func Convert_unversioned_MicroTime_To_unversioned_MicroTime(in *MicroTime, out *MicroTime, s conversion.Scope) error { | ||||||
|  | 	// Cannot deep copy these, because time.Time has unexported fields. | ||||||
|  | 	*out = *in | ||||||
|  | 	return nil | ||||||
|  | } | ||||||
|  |  | ||||||
| // Convert_Slice_string_To_unversioned_Time allows converting a URL query parameter value | // Convert_Slice_string_To_unversioned_Time allows converting a URL query parameter value | ||||||
| func Convert_Slice_string_To_unversioned_Time(input *[]string, out *Time, s conversion.Scope) error { | func Convert_Slice_string_To_unversioned_Time(input *[]string, out *Time, s conversion.Scope) error { | ||||||
| 	str := "" | 	str := "" | ||||||
|   | |||||||
| @@ -28,6 +28,7 @@ import ( | |||||||
| 	batch "k8s.io/client-go/informers/batch" | 	batch "k8s.io/client-go/informers/batch" | ||||||
| 	certificates "k8s.io/client-go/informers/certificates" | 	certificates "k8s.io/client-go/informers/certificates" | ||||||
| 	core "k8s.io/client-go/informers/core" | 	core "k8s.io/client-go/informers/core" | ||||||
|  | 	events "k8s.io/client-go/informers/events" | ||||||
| 	extensions "k8s.io/client-go/informers/extensions" | 	extensions "k8s.io/client-go/informers/extensions" | ||||||
| 	internalinterfaces "k8s.io/client-go/informers/internalinterfaces" | 	internalinterfaces "k8s.io/client-go/informers/internalinterfaces" | ||||||
| 	networking "k8s.io/client-go/informers/networking" | 	networking "k8s.io/client-go/informers/networking" | ||||||
| @@ -140,6 +141,7 @@ type SharedInformerFactory interface { | |||||||
| 	Batch() batch.Interface | 	Batch() batch.Interface | ||||||
| 	Certificates() certificates.Interface | 	Certificates() certificates.Interface | ||||||
| 	Core() core.Interface | 	Core() core.Interface | ||||||
|  | 	Events() events.Interface | ||||||
| 	Extensions() extensions.Interface | 	Extensions() extensions.Interface | ||||||
| 	Networking() networking.Interface | 	Networking() networking.Interface | ||||||
| 	Policy() policy.Interface | 	Policy() policy.Interface | ||||||
| @@ -173,6 +175,10 @@ func (f *sharedInformerFactory) Core() core.Interface { | |||||||
| 	return core.New(f, f.namespace, f.tweakListOptions) | 	return core.New(f, f.namespace, f.tweakListOptions) | ||||||
| } | } | ||||||
|  |  | ||||||
|  | func (f *sharedInformerFactory) Events() events.Interface { | ||||||
|  | 	return events.New(f) | ||||||
|  | } | ||||||
|  |  | ||||||
| func (f *sharedInformerFactory) Extensions() extensions.Interface { | func (f *sharedInformerFactory) Extensions() extensions.Interface { | ||||||
| 	return extensions.New(f, f.namespace, f.tweakListOptions) | 	return extensions.New(f, f.namespace, f.tweakListOptions) | ||||||
| } | } | ||||||
|   | |||||||
| @@ -32,6 +32,7 @@ import ( | |||||||
| 	v2alpha1 "k8s.io/api/batch/v2alpha1" | 	v2alpha1 "k8s.io/api/batch/v2alpha1" | ||||||
| 	certificates_v1beta1 "k8s.io/api/certificates/v1beta1" | 	certificates_v1beta1 "k8s.io/api/certificates/v1beta1" | ||||||
| 	core_v1 "k8s.io/api/core/v1" | 	core_v1 "k8s.io/api/core/v1" | ||||||
|  | 	events_v1beta1 "k8s.io/api/events/v1beta1" | ||||||
| 	extensions_v1beta1 "k8s.io/api/extensions/v1beta1" | 	extensions_v1beta1 "k8s.io/api/extensions/v1beta1" | ||||||
| 	networking_v1 "k8s.io/api/networking/v1" | 	networking_v1 "k8s.io/api/networking/v1" | ||||||
| 	policy_v1beta1 "k8s.io/api/policy/v1beta1" | 	policy_v1beta1 "k8s.io/api/policy/v1beta1" | ||||||
| @@ -173,6 +174,10 @@ func (f *sharedInformerFactory) ForResource(resource schema.GroupVersionResource | |||||||
| 	case core_v1.SchemeGroupVersion.WithResource("serviceaccounts"): | 	case core_v1.SchemeGroupVersion.WithResource("serviceaccounts"): | ||||||
| 		return &genericInformer{resource: resource.GroupResource(), informer: f.Core().V1().ServiceAccounts().Informer()}, nil | 		return &genericInformer{resource: resource.GroupResource(), informer: f.Core().V1().ServiceAccounts().Informer()}, nil | ||||||
|  |  | ||||||
|  | 		// Group=events, Version=v1beta1 | ||||||
|  | 	case events_v1beta1.SchemeGroupVersion.WithResource("events"): | ||||||
|  | 		return &genericInformer{resource: resource.GroupResource(), informer: f.Events().V1beta1().Events().Informer()}, nil | ||||||
|  |  | ||||||
| 		// Group=extensions, Version=v1beta1 | 		// Group=extensions, Version=v1beta1 | ||||||
| 	case extensions_v1beta1.SchemeGroupVersion.WithResource("daemonsets"): | 	case extensions_v1beta1.SchemeGroupVersion.WithResource("daemonsets"): | ||||||
| 		return &genericInformer{resource: resource.GroupResource(), informer: f.Extensions().V1beta1().DaemonSets().Informer()}, nil | 		return &genericInformer{resource: resource.GroupResource(), informer: f.Extensions().V1beta1().DaemonSets().Informer()}, nil | ||||||
|   | |||||||
| @@ -35,6 +35,7 @@ import ( | |||||||
| 	batchv2alpha1 "k8s.io/client-go/kubernetes/typed/batch/v2alpha1" | 	batchv2alpha1 "k8s.io/client-go/kubernetes/typed/batch/v2alpha1" | ||||||
| 	certificatesv1beta1 "k8s.io/client-go/kubernetes/typed/certificates/v1beta1" | 	certificatesv1beta1 "k8s.io/client-go/kubernetes/typed/certificates/v1beta1" | ||||||
| 	corev1 "k8s.io/client-go/kubernetes/typed/core/v1" | 	corev1 "k8s.io/client-go/kubernetes/typed/core/v1" | ||||||
|  | 	eventsv1beta1 "k8s.io/client-go/kubernetes/typed/events/v1beta1" | ||||||
| 	extensionsv1beta1 "k8s.io/client-go/kubernetes/typed/extensions/v1beta1" | 	extensionsv1beta1 "k8s.io/client-go/kubernetes/typed/extensions/v1beta1" | ||||||
| 	networkingv1 "k8s.io/client-go/kubernetes/typed/networking/v1" | 	networkingv1 "k8s.io/client-go/kubernetes/typed/networking/v1" | ||||||
| 	policyv1beta1 "k8s.io/client-go/kubernetes/typed/policy/v1beta1" | 	policyv1beta1 "k8s.io/client-go/kubernetes/typed/policy/v1beta1" | ||||||
| @@ -84,6 +85,9 @@ type Interface interface { | |||||||
| 	CoreV1() corev1.CoreV1Interface | 	CoreV1() corev1.CoreV1Interface | ||||||
| 	// Deprecated: please explicitly pick a version if possible. | 	// Deprecated: please explicitly pick a version if possible. | ||||||
| 	Core() corev1.CoreV1Interface | 	Core() corev1.CoreV1Interface | ||||||
|  | 	EventsV1beta1() eventsv1beta1.EventsV1beta1Interface | ||||||
|  | 	// Deprecated: please explicitly pick a version if possible. | ||||||
|  | 	Events() eventsv1beta1.EventsV1beta1Interface | ||||||
| 	ExtensionsV1beta1() extensionsv1beta1.ExtensionsV1beta1Interface | 	ExtensionsV1beta1() extensionsv1beta1.ExtensionsV1beta1Interface | ||||||
| 	// Deprecated: please explicitly pick a version if possible. | 	// Deprecated: please explicitly pick a version if possible. | ||||||
| 	Extensions() extensionsv1beta1.ExtensionsV1beta1Interface | 	Extensions() extensionsv1beta1.ExtensionsV1beta1Interface | ||||||
| @@ -131,6 +135,7 @@ type Clientset struct { | |||||||
| 	batchV2alpha1                 *batchv2alpha1.BatchV2alpha1Client | 	batchV2alpha1                 *batchv2alpha1.BatchV2alpha1Client | ||||||
| 	certificatesV1beta1           *certificatesv1beta1.CertificatesV1beta1Client | 	certificatesV1beta1           *certificatesv1beta1.CertificatesV1beta1Client | ||||||
| 	coreV1                        *corev1.CoreV1Client | 	coreV1                        *corev1.CoreV1Client | ||||||
|  | 	eventsV1beta1                 *eventsv1beta1.EventsV1beta1Client | ||||||
| 	extensionsV1beta1             *extensionsv1beta1.ExtensionsV1beta1Client | 	extensionsV1beta1             *extensionsv1beta1.ExtensionsV1beta1Client | ||||||
| 	networkingV1                  *networkingv1.NetworkingV1Client | 	networkingV1                  *networkingv1.NetworkingV1Client | ||||||
| 	policyV1beta1                 *policyv1beta1.PolicyV1beta1Client | 	policyV1beta1                 *policyv1beta1.PolicyV1beta1Client | ||||||
| @@ -272,6 +277,17 @@ func (c *Clientset) Core() corev1.CoreV1Interface { | |||||||
| 	return c.coreV1 | 	return c.coreV1 | ||||||
| } | } | ||||||
|  |  | ||||||
|  | // EventsV1beta1 retrieves the EventsV1beta1Client | ||||||
|  | func (c *Clientset) EventsV1beta1() eventsv1beta1.EventsV1beta1Interface { | ||||||
|  | 	return c.eventsV1beta1 | ||||||
|  | } | ||||||
|  |  | ||||||
|  | // Deprecated: Events retrieves the default version of EventsClient. | ||||||
|  | // Please explicitly pick a version. | ||||||
|  | func (c *Clientset) Events() eventsv1beta1.EventsV1beta1Interface { | ||||||
|  | 	return c.eventsV1beta1 | ||||||
|  | } | ||||||
|  |  | ||||||
| // ExtensionsV1beta1 retrieves the ExtensionsV1beta1Client | // ExtensionsV1beta1 retrieves the ExtensionsV1beta1Client | ||||||
| func (c *Clientset) ExtensionsV1beta1() extensionsv1beta1.ExtensionsV1beta1Interface { | func (c *Clientset) ExtensionsV1beta1() extensionsv1beta1.ExtensionsV1beta1Interface { | ||||||
| 	return c.extensionsV1beta1 | 	return c.extensionsV1beta1 | ||||||
| @@ -449,6 +465,10 @@ func NewForConfig(c *rest.Config) (*Clientset, error) { | |||||||
| 	if err != nil { | 	if err != nil { | ||||||
| 		return nil, err | 		return nil, err | ||||||
| 	} | 	} | ||||||
|  | 	cs.eventsV1beta1, err = eventsv1beta1.NewForConfig(&configShallowCopy) | ||||||
|  | 	if err != nil { | ||||||
|  | 		return nil, err | ||||||
|  | 	} | ||||||
| 	cs.extensionsV1beta1, err = extensionsv1beta1.NewForConfig(&configShallowCopy) | 	cs.extensionsV1beta1, err = extensionsv1beta1.NewForConfig(&configShallowCopy) | ||||||
| 	if err != nil { | 	if err != nil { | ||||||
| 		return nil, err | 		return nil, err | ||||||
| @@ -522,6 +542,7 @@ func NewForConfigOrDie(c *rest.Config) *Clientset { | |||||||
| 	cs.batchV2alpha1 = batchv2alpha1.NewForConfigOrDie(c) | 	cs.batchV2alpha1 = batchv2alpha1.NewForConfigOrDie(c) | ||||||
| 	cs.certificatesV1beta1 = certificatesv1beta1.NewForConfigOrDie(c) | 	cs.certificatesV1beta1 = certificatesv1beta1.NewForConfigOrDie(c) | ||||||
| 	cs.coreV1 = corev1.NewForConfigOrDie(c) | 	cs.coreV1 = corev1.NewForConfigOrDie(c) | ||||||
|  | 	cs.eventsV1beta1 = eventsv1beta1.NewForConfigOrDie(c) | ||||||
| 	cs.extensionsV1beta1 = extensionsv1beta1.NewForConfigOrDie(c) | 	cs.extensionsV1beta1 = extensionsv1beta1.NewForConfigOrDie(c) | ||||||
| 	cs.networkingV1 = networkingv1.NewForConfigOrDie(c) | 	cs.networkingV1 = networkingv1.NewForConfigOrDie(c) | ||||||
| 	cs.policyV1beta1 = policyv1beta1.NewForConfigOrDie(c) | 	cs.policyV1beta1 = policyv1beta1.NewForConfigOrDie(c) | ||||||
| @@ -557,6 +578,7 @@ func New(c rest.Interface) *Clientset { | |||||||
| 	cs.batchV2alpha1 = batchv2alpha1.New(c) | 	cs.batchV2alpha1 = batchv2alpha1.New(c) | ||||||
| 	cs.certificatesV1beta1 = certificatesv1beta1.New(c) | 	cs.certificatesV1beta1 = certificatesv1beta1.New(c) | ||||||
| 	cs.coreV1 = corev1.New(c) | 	cs.coreV1 = corev1.New(c) | ||||||
|  | 	cs.eventsV1beta1 = eventsv1beta1.New(c) | ||||||
| 	cs.extensionsV1beta1 = extensionsv1beta1.New(c) | 	cs.extensionsV1beta1 = extensionsv1beta1.New(c) | ||||||
| 	cs.networkingV1 = networkingv1.New(c) | 	cs.networkingV1 = networkingv1.New(c) | ||||||
| 	cs.policyV1beta1 = policyv1beta1.New(c) | 	cs.policyV1beta1 = policyv1beta1.New(c) | ||||||
|   | |||||||
| @@ -33,6 +33,7 @@ import ( | |||||||
| 	batchv2alpha1 "k8s.io/api/batch/v2alpha1" | 	batchv2alpha1 "k8s.io/api/batch/v2alpha1" | ||||||
| 	certificatesv1beta1 "k8s.io/api/certificates/v1beta1" | 	certificatesv1beta1 "k8s.io/api/certificates/v1beta1" | ||||||
| 	corev1 "k8s.io/api/core/v1" | 	corev1 "k8s.io/api/core/v1" | ||||||
|  | 	eventsv1beta1 "k8s.io/api/events/v1beta1" | ||||||
| 	extensionsv1beta1 "k8s.io/api/extensions/v1beta1" | 	extensionsv1beta1 "k8s.io/api/extensions/v1beta1" | ||||||
| 	networkingv1 "k8s.io/api/networking/v1" | 	networkingv1 "k8s.io/api/networking/v1" | ||||||
| 	policyv1beta1 "k8s.io/api/policy/v1beta1" | 	policyv1beta1 "k8s.io/api/policy/v1beta1" | ||||||
| @@ -90,6 +91,7 @@ func AddToScheme(scheme *runtime.Scheme) { | |||||||
| 	batchv2alpha1.AddToScheme(scheme) | 	batchv2alpha1.AddToScheme(scheme) | ||||||
| 	certificatesv1beta1.AddToScheme(scheme) | 	certificatesv1beta1.AddToScheme(scheme) | ||||||
| 	corev1.AddToScheme(scheme) | 	corev1.AddToScheme(scheme) | ||||||
|  | 	eventsv1beta1.AddToScheme(scheme) | ||||||
| 	extensionsv1beta1.AddToScheme(scheme) | 	extensionsv1beta1.AddToScheme(scheme) | ||||||
| 	networkingv1.AddToScheme(scheme) | 	networkingv1.AddToScheme(scheme) | ||||||
| 	policyv1beta1.AddToScheme(scheme) | 	policyv1beta1.AddToScheme(scheme) | ||||||
|   | |||||||
| @@ -33,6 +33,7 @@ import ( | |||||||
| 	batchv2alpha1 "k8s.io/api/batch/v2alpha1" | 	batchv2alpha1 "k8s.io/api/batch/v2alpha1" | ||||||
| 	certificatesv1beta1 "k8s.io/api/certificates/v1beta1" | 	certificatesv1beta1 "k8s.io/api/certificates/v1beta1" | ||||||
| 	corev1 "k8s.io/api/core/v1" | 	corev1 "k8s.io/api/core/v1" | ||||||
|  | 	eventsv1beta1 "k8s.io/api/events/v1beta1" | ||||||
| 	extensionsv1beta1 "k8s.io/api/extensions/v1beta1" | 	extensionsv1beta1 "k8s.io/api/extensions/v1beta1" | ||||||
| 	networkingv1 "k8s.io/api/networking/v1" | 	networkingv1 "k8s.io/api/networking/v1" | ||||||
| 	policyv1beta1 "k8s.io/api/policy/v1beta1" | 	policyv1beta1 "k8s.io/api/policy/v1beta1" | ||||||
| @@ -90,6 +91,7 @@ func AddToScheme(scheme *runtime.Scheme) { | |||||||
| 	batchv2alpha1.AddToScheme(scheme) | 	batchv2alpha1.AddToScheme(scheme) | ||||||
| 	certificatesv1beta1.AddToScheme(scheme) | 	certificatesv1beta1.AddToScheme(scheme) | ||||||
| 	corev1.AddToScheme(scheme) | 	corev1.AddToScheme(scheme) | ||||||
|  | 	eventsv1beta1.AddToScheme(scheme) | ||||||
| 	extensionsv1beta1.AddToScheme(scheme) | 	extensionsv1beta1.AddToScheme(scheme) | ||||||
| 	networkingv1.AddToScheme(scheme) | 	networkingv1.AddToScheme(scheme) | ||||||
| 	policyv1beta1.AddToScheme(scheme) | 	policyv1beta1.AddToScheme(scheme) | ||||||
|   | |||||||
| @@ -247,6 +247,14 @@ var etcdStorageData = map[schema.GroupVersionResource]struct { | |||||||
| 	}, | 	}, | ||||||
| 	// -- | 	// -- | ||||||
|  |  | ||||||
|  | 	// k8s.io/kubernetes/pkg/apis/events/v1beta1 | ||||||
|  | 	gvr("events.k8s.io", "v1beta1", "events"): { | ||||||
|  | 		stub:             `{"metadata": {"name": "event2"}, "regarding": {"namespace": "etcdstoragepathtestnamespace"}, "note": "some data here", "eventTime": "2017-08-09T15:04:05.000000Z", "reportingInstance": "node-xyz", "reportingController": "k8s.io/my-controller", "action": "DidNothing", "reason": "Lazyness"}`, | ||||||
|  | 		expectedEtcdPath: "/registry/events/etcdstoragepathtestnamespace/event2", | ||||||
|  | 		expectedGVK:      gvkP("", "v1", "Event"), | ||||||
|  | 	}, | ||||||
|  | 	// -- | ||||||
|  |  | ||||||
| 	// k8s.io/kubernetes/pkg/apis/extensions/v1beta1 | 	// k8s.io/kubernetes/pkg/apis/extensions/v1beta1 | ||||||
| 	gvr("extensions", "v1beta1", "daemonsets"): { | 	gvr("extensions", "v1beta1", "daemonsets"): { | ||||||
| 		stub:             `{"metadata": {"name": "ds1"}, "spec": {"selector": {"matchLabels": {"u": "t"}}, "template": {"metadata": {"labels": {"u": "t"}}, "spec": {"containers": [{"image": "fedora:latest", "name": "container5"}]}}}}`, | 		stub:             `{"metadata": {"name": "ds1"}, "spec": {"selector": {"matchLabels": {"u": "t"}}, "template": {"metadata": {"labels": {"u": "t"}}, "spec": {"containers": [{"image": "fedora:latest", "name": "container5"}]}}}}`, | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user
	 gmarek
					gmarek