From ab8c95eff5c1228237f758d3ccfc99c751f713f7 Mon Sep 17 00:00:00 2001 From: Kiran Kamineni Date: Wed, 31 Jul 2019 15:32:28 -0700 Subject: Adding monitor operator to monitor edge resources Add an operator to monitor resources at the edge location. The operator listens to pods and services right now and stores their information in a CustomResource Issue-ID: MULTICLOUD-675 Change-Id: I801478a77fcd019010ea1b4388d6077f63b89d05 Signed-off-by: Kiran Kamineni --- .../pkg/apis/addtoscheme_k8splugin_v1alpha1.go | 10 ++ src/monitor/pkg/apis/apis.go | 13 ++ src/monitor/pkg/apis/k8splugin/group.go | 6 + src/monitor/pkg/apis/k8splugin/v1alpha1/doc.go | 4 + .../pkg/apis/k8splugin/v1alpha1/register.go | 19 +++ src/monitor/pkg/apis/k8splugin/v1alpha1/types.go | 55 +++++++ .../k8splugin/v1alpha1/zz_generated.deepcopy.go | 141 ++++++++++++++++++ .../k8splugin/v1alpha1/zz_generated.openapi.go | 164 +++++++++++++++++++++ 8 files changed, 412 insertions(+) create mode 100644 src/monitor/pkg/apis/addtoscheme_k8splugin_v1alpha1.go create mode 100644 src/monitor/pkg/apis/apis.go create mode 100644 src/monitor/pkg/apis/k8splugin/group.go create mode 100644 src/monitor/pkg/apis/k8splugin/v1alpha1/doc.go create mode 100644 src/monitor/pkg/apis/k8splugin/v1alpha1/register.go create mode 100644 src/monitor/pkg/apis/k8splugin/v1alpha1/types.go create mode 100644 src/monitor/pkg/apis/k8splugin/v1alpha1/zz_generated.deepcopy.go create mode 100644 src/monitor/pkg/apis/k8splugin/v1alpha1/zz_generated.openapi.go (limited to 'src/monitor/pkg/apis') diff --git a/src/monitor/pkg/apis/addtoscheme_k8splugin_v1alpha1.go b/src/monitor/pkg/apis/addtoscheme_k8splugin_v1alpha1.go new file mode 100644 index 00000000..3c8f595d --- /dev/null +++ b/src/monitor/pkg/apis/addtoscheme_k8splugin_v1alpha1.go @@ -0,0 +1,10 @@ +package apis + +import ( + "monitor/pkg/apis/k8splugin/v1alpha1" +) + +func init() { + // Register the types with the Scheme so the components can map objects to GroupVersionKinds and back + AddToSchemes = append(AddToSchemes, v1alpha1.SchemeBuilder.AddToScheme) +} diff --git a/src/monitor/pkg/apis/apis.go b/src/monitor/pkg/apis/apis.go new file mode 100644 index 00000000..07dc9616 --- /dev/null +++ b/src/monitor/pkg/apis/apis.go @@ -0,0 +1,13 @@ +package apis + +import ( + "k8s.io/apimachinery/pkg/runtime" +) + +// AddToSchemes may be used to add all resources defined in the project to a Scheme +var AddToSchemes runtime.SchemeBuilder + +// AddToScheme adds all Resources to the Scheme +func AddToScheme(s *runtime.Scheme) error { + return AddToSchemes.AddToScheme(s) +} diff --git a/src/monitor/pkg/apis/k8splugin/group.go b/src/monitor/pkg/apis/k8splugin/group.go new file mode 100644 index 00000000..9696c626 --- /dev/null +++ b/src/monitor/pkg/apis/k8splugin/group.go @@ -0,0 +1,6 @@ +// Package k8splugin contains k8splugin API versions. +// +// This file ensures Go source parsers acknowledge the k8splugin package +// and any child packages. It can be removed if any other Go source files are +// added to this package. +package k8splugin diff --git a/src/monitor/pkg/apis/k8splugin/v1alpha1/doc.go b/src/monitor/pkg/apis/k8splugin/v1alpha1/doc.go new file mode 100644 index 00000000..c2bb0907 --- /dev/null +++ b/src/monitor/pkg/apis/k8splugin/v1alpha1/doc.go @@ -0,0 +1,4 @@ +// Package v1alpha1 contains API Schema definitions for the k8splugin v1alpha1 API group +// +k8s:deepcopy-gen=package,register +// +groupName=k8splugin.io +package v1alpha1 diff --git a/src/monitor/pkg/apis/k8splugin/v1alpha1/register.go b/src/monitor/pkg/apis/k8splugin/v1alpha1/register.go new file mode 100644 index 00000000..ee2af820 --- /dev/null +++ b/src/monitor/pkg/apis/k8splugin/v1alpha1/register.go @@ -0,0 +1,19 @@ +// NOTE: Boilerplate only. Ignore this file. + +// Package v1alpha1 contains API Schema definitions for the k8splugin v1alpha1 API group +// +k8s:deepcopy-gen=package,register +// +groupName=k8splugin.io +package v1alpha1 + +import ( + "k8s.io/apimachinery/pkg/runtime/schema" + "sigs.k8s.io/controller-runtime/pkg/runtime/scheme" +) + +var ( + // SchemeGroupVersion is group version used to register these objects + SchemeGroupVersion = schema.GroupVersion{Group: "k8splugin.io", Version: "v1alpha1"} + + // SchemeBuilder is used to add go types to the GroupVersionKind scheme + SchemeBuilder = &scheme.Builder{GroupVersion: SchemeGroupVersion} +) diff --git a/src/monitor/pkg/apis/k8splugin/v1alpha1/types.go b/src/monitor/pkg/apis/k8splugin/v1alpha1/types.go new file mode 100644 index 00000000..22dfdd25 --- /dev/null +++ b/src/monitor/pkg/apis/k8splugin/v1alpha1/types.go @@ -0,0 +1,55 @@ +package v1alpha1 + +import ( + corev1 "k8s.io/api/core/v1" + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" +) + +// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object + +// ResourceBundleState is the Schema for the ResourceBundleStatees API +// +k8s:openapi-gen=true +// +kubebuilder:subresource:status +type ResourceBundleState struct { + metav1.TypeMeta `json:",inline"` + metav1.ObjectMeta `json:"metadata,omitempty" protobuf:"bytes,1,opt,name=metadata"` + + Spec ResourceBundleStateSpec `json:"spec,omitempty" protobuf:"bytes,2,opt,name=spec"` + Status ResourceBundleStatus `json:"status,omitempty" protobuf:"bytes,3,opt,name=status"` +} + +// ResourceBundleStateSpec defines the desired state of ResourceBundleState +// +k8s:openapi-gen=true +type ResourceBundleStateSpec struct { + Selector *metav1.LabelSelector `json:"selector" protobuf:"bytes,1,opt,name=selector"` +} + +// ResourceBundleStatus defines the observed state of ResourceBundleState +// +k8s:openapi-gen=true +type ResourceBundleStatus struct { + Ready bool `json:"ready" protobuf:"varint,1,opt,name=ready"` + ResourceCount int32 `json:"resourceCount" protobuf:"varint,2,opt,name=resourceCount"` + PodStatuses []PodStatus `json:"podStatuses" protobuf:"varint,3,opt,name=podStatuses"` + ServiceStatuses []corev1.Service `json:"serviceStatuses" protobuf:"varint,4,opt,name=serviceStatuses"` +} + +// PodStatus defines the observed state of ResourceBundleState +// +k8s:openapi-gen=true +type PodStatus struct { + metav1.ObjectMeta `json:"metadata,omitempty" protobuf:"bytes,1,opt,name=metadata"` + Ready bool `json:"ready" protobuf:"varint,2,opt,name=ready"` + Status corev1.PodStatus `json:"status,omitempty" protobuf:"bytes,3,opt,name=status"` +} + +// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object + +// ResourceBundleStateList contains a list of ResourceBundleState +type ResourceBundleStateList struct { + metav1.TypeMeta `json:",inline"` + metav1.ListMeta `json:"metadata,omitempty"` + Items []ResourceBundleState `json:"items"` +} + +func init() { + SchemeBuilder.Register(&ResourceBundleState{}, &ResourceBundleStateList{}) +} diff --git a/src/monitor/pkg/apis/k8splugin/v1alpha1/zz_generated.deepcopy.go b/src/monitor/pkg/apis/k8splugin/v1alpha1/zz_generated.deepcopy.go new file mode 100644 index 00000000..72036ed1 --- /dev/null +++ b/src/monitor/pkg/apis/k8splugin/v1alpha1/zz_generated.deepcopy.go @@ -0,0 +1,141 @@ +// +build !ignore_autogenerated + +// Code generated by operator-sdk-v0.9.0-x86_64-linux-gnu. DO NOT EDIT. + +package v1alpha1 + +import ( + corev1 "k8s.io/api/core/v1" + v1 "k8s.io/apimachinery/pkg/apis/meta/v1" + runtime "k8s.io/apimachinery/pkg/runtime" +) + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *PodStatus) DeepCopyInto(out *PodStatus) { + *out = *in + in.ObjectMeta.DeepCopyInto(&out.ObjectMeta) + in.Status.DeepCopyInto(&out.Status) + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new PodStatus. +func (in *PodStatus) DeepCopy() *PodStatus { + if in == nil { + return nil + } + out := new(PodStatus) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *ResourceBundleState) DeepCopyInto(out *ResourceBundleState) { + *out = *in + out.TypeMeta = in.TypeMeta + in.ObjectMeta.DeepCopyInto(&out.ObjectMeta) + in.Spec.DeepCopyInto(&out.Spec) + in.Status.DeepCopyInto(&out.Status) + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ResourceBundleState. +func (in *ResourceBundleState) DeepCopy() *ResourceBundleState { + if in == nil { + return nil + } + out := new(ResourceBundleState) + in.DeepCopyInto(out) + return out +} + +// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object. +func (in *ResourceBundleState) DeepCopyObject() runtime.Object { + if c := in.DeepCopy(); c != nil { + return c + } + return nil +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *ResourceBundleStateList) DeepCopyInto(out *ResourceBundleStateList) { + *out = *in + out.TypeMeta = in.TypeMeta + out.ListMeta = in.ListMeta + if in.Items != nil { + in, out := &in.Items, &out.Items + *out = make([]ResourceBundleState, len(*in)) + for i := range *in { + (*in)[i].DeepCopyInto(&(*out)[i]) + } + } + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ResourceBundleStateList. +func (in *ResourceBundleStateList) DeepCopy() *ResourceBundleStateList { + if in == nil { + return nil + } + out := new(ResourceBundleStateList) + in.DeepCopyInto(out) + return out +} + +// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object. +func (in *ResourceBundleStateList) DeepCopyObject() runtime.Object { + if c := in.DeepCopy(); c != nil { + return c + } + return nil +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *ResourceBundleStateSpec) DeepCopyInto(out *ResourceBundleStateSpec) { + *out = *in + if in.Selector != nil { + in, out := &in.Selector, &out.Selector + *out = new(v1.LabelSelector) + (*in).DeepCopyInto(*out) + } + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ResourceBundleStateSpec. +func (in *ResourceBundleStateSpec) DeepCopy() *ResourceBundleStateSpec { + if in == nil { + return nil + } + out := new(ResourceBundleStateSpec) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *ResourceBundleStatus) DeepCopyInto(out *ResourceBundleStatus) { + *out = *in + if in.PodStatuses != nil { + in, out := &in.PodStatuses, &out.PodStatuses + *out = make([]PodStatus, len(*in)) + for i := range *in { + (*in)[i].DeepCopyInto(&(*out)[i]) + } + } + if in.ServiceStatuses != nil { + in, out := &in.ServiceStatuses, &out.ServiceStatuses + *out = make([]corev1.Service, len(*in)) + for i := range *in { + (*in)[i].DeepCopyInto(&(*out)[i]) + } + } + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ResourceBundleStatus. +func (in *ResourceBundleStatus) DeepCopy() *ResourceBundleStatus { + if in == nil { + return nil + } + out := new(ResourceBundleStatus) + in.DeepCopyInto(out) + return out +} diff --git a/src/monitor/pkg/apis/k8splugin/v1alpha1/zz_generated.openapi.go b/src/monitor/pkg/apis/k8splugin/v1alpha1/zz_generated.openapi.go new file mode 100644 index 00000000..232acefb --- /dev/null +++ b/src/monitor/pkg/apis/k8splugin/v1alpha1/zz_generated.openapi.go @@ -0,0 +1,164 @@ +// +build ! + +// This file was autogenerated by openapi-gen. Do not edit it manually! + +package v1alpha1 + +import ( + spec "github.com/go-openapi/spec" + common "k8s.io/kube-openapi/pkg/common" +) + +func GetOpenAPIDefinitions(ref common.ReferenceCallback) map[string]common.OpenAPIDefinition { + return map[string]common.OpenAPIDefinition{ + "monitor/pkg/apis/k8splugin/v1alpha1.PodStatus": schema_pkg_apis_k8splugin_v1alpha1_PodStatus(ref), + "monitor/pkg/apis/k8splugin/v1alpha1.ResourceBundleState": schema_pkg_apis_k8splugin_v1alpha1_ResourceBundleState(ref), + "monitor/pkg/apis/k8splugin/v1alpha1.ResourceBundleStateSpec": schema_pkg_apis_k8splugin_v1alpha1_ResourceBundleStateSpec(ref), + "monitor/pkg/apis/k8splugin/v1alpha1.ResourceBundleStatus": schema_pkg_apis_k8splugin_v1alpha1_ResourceBundleStatus(ref), + } +} + +func schema_pkg_apis_k8splugin_v1alpha1_PodStatus(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "PodStatus defines the observed state of ResourceBundleState", + Properties: map[string]spec.Schema{ + "metadata": { + SchemaProps: spec.SchemaProps{ + Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.ObjectMeta"), + }, + }, + "ready": { + SchemaProps: spec.SchemaProps{ + Type: []string{"boolean"}, + Format: "", + }, + }, + "status": { + SchemaProps: spec.SchemaProps{ + Ref: ref("k8s.io/api/core/v1.PodStatus"), + }, + }, + }, + Required: []string{"ready"}, + }, + }, + Dependencies: []string{ + "k8s.io/api/core/v1.PodStatus", "k8s.io/apimachinery/pkg/apis/meta/v1.ObjectMeta"}, + } +} + +func schema_pkg_apis_k8splugin_v1alpha1_ResourceBundleState(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "ResourceBundleState is the Schema for the ResourceBundleStatees API", + Properties: map[string]spec.Schema{ + "kind": { + SchemaProps: spec.SchemaProps{ + Description: "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", + Type: []string{"string"}, + Format: "", + }, + }, + "apiVersion": { + SchemaProps: spec.SchemaProps{ + Description: "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources", + Type: []string{"string"}, + Format: "", + }, + }, + "metadata": { + SchemaProps: spec.SchemaProps{ + Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.ObjectMeta"), + }, + }, + "spec": { + SchemaProps: spec.SchemaProps{ + Ref: ref("monitor/pkg/apis/k8splugin/v1alpha1.ResourceBundleStateSpec"), + }, + }, + "status": { + SchemaProps: spec.SchemaProps{ + Ref: ref("monitor/pkg/apis/k8splugin/v1alpha1.ResourceBundleStatus"), + }, + }, + }, + }, + }, + Dependencies: []string{ + "k8s.io/apimachinery/pkg/apis/meta/v1.ObjectMeta", "monitor/pkg/apis/k8splugin/v1alpha1.ResourceBundleStateSpec", "monitor/pkg/apis/k8splugin/v1alpha1.ResourceBundleStatus"}, + } +} + +func schema_pkg_apis_k8splugin_v1alpha1_ResourceBundleStateSpec(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "ResourceBundleStateSpec defines the desired state of ResourceBundleState", + Properties: map[string]spec.Schema{ + "selector": { + SchemaProps: spec.SchemaProps{ + Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.LabelSelector"), + }, + }, + }, + Required: []string{"selector"}, + }, + }, + Dependencies: []string{ + "k8s.io/apimachinery/pkg/apis/meta/v1.LabelSelector"}, + } +} + +func schema_pkg_apis_k8splugin_v1alpha1_ResourceBundleStatus(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "ResourceBundleStatus defines the observed state of ResourceBundleState", + Properties: map[string]spec.Schema{ + "ready": { + SchemaProps: spec.SchemaProps{ + Type: []string{"boolean"}, + Format: "", + }, + }, + "resourceCount": { + SchemaProps: spec.SchemaProps{ + Type: []string{"integer"}, + Format: "int32", + }, + }, + "podStatuses": { + SchemaProps: spec.SchemaProps{ + Type: []string{"array"}, + Items: &spec.SchemaOrArray{ + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Ref: ref("monitor/pkg/apis/k8splugin/v1alpha1.PodStatus"), + }, + }, + }, + }, + }, + "serviceStatuses": { + SchemaProps: spec.SchemaProps{ + Type: []string{"array"}, + Items: &spec.SchemaOrArray{ + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Ref: ref("k8s.io/api/core/v1.Service"), + }, + }, + }, + }, + }, + }, + Required: []string{"ready", "resourceCount", "podStatuses", "serviceStatuses"}, + }, + }, + Dependencies: []string{ + "k8s.io/api/core/v1.Service", "monitor/pkg/apis/k8splugin/v1alpha1.PodStatus"}, + } +} -- cgit 1.2.3-korg