From 2b9e867a71803901324495a60a3fb05e06981dc2 Mon Sep 17 00:00:00 2001 From: vijayrap Date: Mon, 10 Aug 2020 00:57:00 -0700 Subject: [PATCH 01/10] adding files --- deploy/1-create-operator.yaml | 243 +++++++- ...rail.juniper.net_contrailmonitors_crd.yaml | 85 +++ ...uniper.net_contrailstatusmonitors_crd.yaml | 43 ++ .../contrail.juniper.net_managers_crd.yaml | 83 ++- ...niper.net_v1alpha1_contrailmonitor_cr.yaml | 7 + ...net_v1alpha1_contrailstatusmonitor_cr.yaml | 11 + deploy/role.yaml | 2 + pkg/apis/contrail/v1alpha1/BUILD.bazel | 2 + .../v1alpha1/contrailmonitor_types.go | 75 +++ .../v1alpha1/contrailstatusmonitor_types.go | 30 + pkg/apis/contrail/v1alpha1/manager_types.go | 2 + .../v1alpha1/zz_generated.deepcopy.go | 195 +++++++ pkg/controller/add_contrailmonitor.go | 10 + pkg/controller/contrailmonitor/BUILD.bazel | 31 + .../contrailmonitor_controller.go | 531 ++++++++++++++++++ pkg/controller/manager/manager_controller.go | 32 +- 16 files changed, 1361 insertions(+), 21 deletions(-) create mode 100644 deploy/crds/contrail.juniper.net_contrailmonitors_crd.yaml create mode 100644 deploy/crds/contrail.juniper.net_contrailstatusmonitors_crd.yaml create mode 100644 deploy/crds/contrail.juniper.net_v1alpha1_contrailmonitor_cr.yaml create mode 100644 deploy/crds/contrail.juniper.net_v1alpha1_contrailstatusmonitor_cr.yaml create mode 100644 pkg/apis/contrail/v1alpha1/contrailmonitor_types.go create mode 100644 pkg/apis/contrail/v1alpha1/contrailstatusmonitor_types.go create mode 100644 pkg/controller/add_contrailmonitor.go create mode 100644 pkg/controller/contrailmonitor/BUILD.bazel create mode 100644 pkg/controller/contrailmonitor/contrailmonitor_controller.go diff --git a/deploy/1-create-operator.yaml b/deploy/1-create-operator.yaml index 305ca9513..b8bc2cb17 100644 --- a/deploy/1-create-operator.yaml +++ b/deploy/1-create-operator.yaml @@ -65,6 +65,8 @@ rules: - swifts - memcacheds - fernetkeymanagers + - contrailmonitors + - contrailstatusmonitors verbs: - '*' - apiGroups: @@ -179,7 +181,7 @@ spec: listKind: CassandraList plural: cassandras singular: cassandra - scope: Namespaced + scope: "" subresources: status: {} validation: @@ -365,7 +367,7 @@ spec: listKind: CommandList plural: commands singular: command - scope: Namespaced + scope: "" subresources: status: {} validation: @@ -528,7 +530,7 @@ spec: listKind: ConfigList plural: configs singular: config - scope: Namespaced + scope: "" subresources: status: {} validation: @@ -757,6 +759,136 @@ spec: --- apiVersion: apiextensions.k8s.io/v1beta1 kind: CustomResourceDefinition +metadata: + name: contrailmonitors.contrail.juniper.net +spec: + group: contrail.juniper.net + names: + kind: Contrailmonitor + listKind: ContrailmonitorList + plural: contrailmonitors + singular: contrailmonitor + scope: Namespaced + subresources: + status: {} + validation: + openAPIV3Schema: + description: Contrailmonitor is the Schema for the contrailmonitors API + properties: + apiVersion: + 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/sig-architecture/api-conventions.md#resources' + type: string + kind: + 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/sig-architecture/api-conventions.md#types-kinds' + type: string + metadata: + type: object + spec: + description: ContrailmonitorSpec defines the desired state of Contrailmonitor + properties: + serviceConfiguration: + description: 'INSERT ADDITIONAL SPEC FIELDS - desired state of cluster + Important: Run "operator-sdk generate k8s" to regenerate code after + modifying this file Add custom validation using kubebuilder tags: + https://book-v1.book.kubebuilder.io/beyond_basics/generating_crd.html' + properties: + cassandraInstance: + type: string + commandInstance: + type: string + configInstance: + type: string + controlInstance: + type: string + keystoneInstance: + type: string + memcachedInstance: + type: string + postgresInstance: + type: string + provisionmanagerInstance: + type: string + rabbitmqInstance: + type: string + webuiInstance: + type: string + zookeeperInstance: + type: string + type: object + required: + - serviceConfiguration + type: object + status: + description: ContrailmonitorStatus defines the observed state of Contrailmonitor + properties: + active: + description: 'INSERT ADDITIONAL STATUS FIELD - define observed state + of cluster Important: Run "operator-sdk generate k8s" to regenerate + code after modifying this file Add custom validation using kubebuilder + tags: https://book-v1.book.kubebuilder.io/beyond_basics/generating_crd.html' + type: boolean + name: + type: string + required: + - name + type: object + type: object + version: v1alpha1 + versions: + - name: v1alpha1 + served: true + storage: true +--- +apiVersion: apiextensions.k8s.io/v1beta1 +kind: CustomResourceDefinition +metadata: + name: contrailstatusmonitors.contrail.juniper.net +spec: + additionalPrinterColumns: + - JSONPath: .status + description: Number of instances in group + name: Status + type: string + group: contrail.juniper.net + names: + kind: Contrailstatusmonitor + listKind: ContrailstatusmonitorList + plural: contrailstatusmonitors + singular: contrailstatusmonitor + scope: Namespaced + subresources: {} + validation: + openAPIV3Schema: + description: Contrailstatusmonitor is the Schema for the contrailstatusmonitors + API + properties: + apiVersion: + 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/sig-architecture/api-conventions.md#resources' + type: string + kind: + 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/sig-architecture/api-conventions.md#types-kinds' + type: string + metadata: + type: object + status: + type: string + type: object + version: v1alpha1 + versions: + - name: v1alpha1 + served: true + storage: true +--- +apiVersion: apiextensions.k8s.io/v1beta1 +kind: CustomResourceDefinition metadata: name: controls.contrail.juniper.net spec: @@ -766,7 +898,7 @@ spec: listKind: ControlList plural: controls singular: control - scope: Namespaced + scope: "" subresources: status: {} validation: @@ -1044,7 +1176,7 @@ spec: listKind: KeystoneList plural: keystones singular: keystone - scope: Namespaced + scope: "" subresources: status: {} validation: @@ -1199,7 +1331,7 @@ spec: listKind: KubemanagerList plural: kubemanagers singular: kubemanager - scope: Namespaced + scope: "" subresources: status: {} validation: @@ -1394,7 +1526,7 @@ spec: listKind: ManagerList plural: managers singular: manager - scope: Namespaced + scope: "" subresources: status: {} validation: @@ -2066,6 +2198,76 @@ spec: type: object type: object type: object + contrailmonitor: + description: Contrailmonitor is the Schema for the contrailmonitors + API + properties: + apiVersion: + 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/sig-architecture/api-conventions.md#resources' + type: string + kind: + 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/sig-architecture/api-conventions.md#types-kinds' + type: string + metadata: + type: object + spec: + description: ContrailmonitorSpec defines the desired state of + Contrailmonitor + properties: + serviceConfiguration: + description: 'INSERT ADDITIONAL SPEC FIELDS - desired state + of cluster Important: Run "operator-sdk generate k8s" + to regenerate code after modifying this file Add custom + validation using kubebuilder tags: https://book-v1.book.kubebuilder.io/beyond_basics/generating_crd.html' + properties: + cassandraInstance: + type: string + commandInstance: + type: string + configInstance: + type: string + controlInstance: + type: string + keystoneInstance: + type: string + memcachedInstance: + type: string + postgresInstance: + type: string + provisionmanagerInstance: + type: string + rabbitmqInstance: + type: string + webuiInstance: + type: string + zookeeperInstance: + type: string + type: object + required: + - serviceConfiguration + type: object + status: + description: ContrailmonitorStatus defines the observed state + of Contrailmonitor + properties: + active: + description: 'INSERT ADDITIONAL STATUS FIELD - define observed + state of cluster Important: Run "operator-sdk generate + k8s" to regenerate code after modifying this file Add + custom validation using kubebuilder tags: https://book-v1.book.kubebuilder.io/beyond_basics/generating_crd.html' + type: boolean + name: + type: string + required: + - name + type: object + type: object controls: items: description: Control is the Schema for the controls API. @@ -3962,6 +4164,17 @@ spec: name: type: string type: object + contrailmonitor: + description: ServiceStatus provides information on the current status + of the service. + properties: + active: + type: boolean + created: + type: boolean + name: + type: string + type: object controls: items: description: ServiceStatus provides information on the current status @@ -4297,7 +4510,7 @@ spec: listKind: PostgresList plural: postgres singular: postgres - scope: Namespaced + scope: "" subresources: status: {} validation: @@ -4552,7 +4765,7 @@ spec: listKind: RabbitmqList plural: rabbitmqs singular: rabbitmq - scope: Namespaced + scope: "" subresources: status: {} validation: @@ -4741,7 +4954,7 @@ spec: listKind: SwiftProxyList plural: swiftproxies singular: swiftproxy - scope: Namespaced + scope: "" subresources: status: {} validation: @@ -4908,7 +5121,7 @@ spec: listKind: SwiftList plural: swifts singular: swift - scope: Namespaced + scope: "" subresources: status: {} validation: @@ -5140,7 +5353,7 @@ spec: listKind: SwiftStorageList plural: swiftstorages singular: swiftstorage - scope: Namespaced + scope: "" subresources: status: {} validation: @@ -5310,7 +5523,7 @@ spec: listKind: VrouterList plural: vrouters singular: vrouter - scope: Namespaced + scope: "" subresources: status: {} validation: @@ -5510,7 +5723,7 @@ spec: listKind: WebuiList plural: webuis singular: webui - scope: Namespaced + scope: "" subresources: status: {} validation: @@ -5684,7 +5897,7 @@ spec: listKind: ZookeeperList plural: zookeepers singular: zookeeper - scope: Namespaced + scope: "" subresources: status: {} validation: diff --git a/deploy/crds/contrail.juniper.net_contrailmonitors_crd.yaml b/deploy/crds/contrail.juniper.net_contrailmonitors_crd.yaml new file mode 100644 index 000000000..473eed294 --- /dev/null +++ b/deploy/crds/contrail.juniper.net_contrailmonitors_crd.yaml @@ -0,0 +1,85 @@ +apiVersion: apiextensions.k8s.io/v1beta1 +kind: CustomResourceDefinition +metadata: + name: contrailmonitors.contrail.juniper.net +spec: + group: contrail.juniper.net + names: + kind: Contrailmonitor + listKind: ContrailmonitorList + plural: contrailmonitors + singular: contrailmonitor + scope: Namespaced + subresources: + status: {} + validation: + openAPIV3Schema: + description: Contrailmonitor is the Schema for the contrailmonitors API + properties: + apiVersion: + 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/sig-architecture/api-conventions.md#resources' + type: string + kind: + 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/sig-architecture/api-conventions.md#types-kinds' + type: string + metadata: + type: object + spec: + description: ContrailmonitorSpec defines the desired state of Contrailmonitor + properties: + serviceConfiguration: + description: 'INSERT ADDITIONAL SPEC FIELDS - desired state of cluster + Important: Run "operator-sdk generate k8s" to regenerate code after + modifying this file Add custom validation using kubebuilder tags: + https://book-v1.book.kubebuilder.io/beyond_basics/generating_crd.html' + properties: + cassandraInstance: + type: string + commandInstance: + type: string + configInstance: + type: string + controlInstance: + type: string + keystoneInstance: + type: string + memcachedInstance: + type: string + postgresInstance: + type: string + provisionmanagerInstance: + type: string + rabbitmqInstance: + type: string + webuiInstance: + type: string + zookeeperInstance: + type: string + type: object + required: + - serviceConfiguration + type: object + status: + description: ContrailmonitorStatus defines the observed state of Contrailmonitor + properties: + active: + description: 'INSERT ADDITIONAL STATUS FIELD - define observed state + of cluster Important: Run "operator-sdk generate k8s" to regenerate + code after modifying this file Add custom validation using kubebuilder + tags: https://book-v1.book.kubebuilder.io/beyond_basics/generating_crd.html' + type: boolean + name: + type: string + required: + - name + type: object + type: object + version: v1alpha1 + versions: + - name: v1alpha1 + served: true + storage: true diff --git a/deploy/crds/contrail.juniper.net_contrailstatusmonitors_crd.yaml b/deploy/crds/contrail.juniper.net_contrailstatusmonitors_crd.yaml new file mode 100644 index 000000000..823c8b875 --- /dev/null +++ b/deploy/crds/contrail.juniper.net_contrailstatusmonitors_crd.yaml @@ -0,0 +1,43 @@ +apiVersion: apiextensions.k8s.io/v1beta1 +kind: CustomResourceDefinition +metadata: + name: contrailstatusmonitors.contrail.juniper.net +spec: + additionalPrinterColumns: + - JSONPath: .status + description: Number of instances in group + name: Status + type: string + group: contrail.juniper.net + names: + kind: Contrailstatusmonitor + listKind: ContrailstatusmonitorList + plural: contrailstatusmonitors + singular: contrailstatusmonitor + scope: Namespaced + subresources: {} + validation: + openAPIV3Schema: + description: Contrailstatusmonitor is the Schema for the contrailstatusmonitors + API + properties: + apiVersion: + 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/sig-architecture/api-conventions.md#resources' + type: string + kind: + 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/sig-architecture/api-conventions.md#types-kinds' + type: string + metadata: + type: object + status: + type: string + type: object + version: v1alpha1 + versions: + - name: v1alpha1 + served: true + storage: true diff --git a/deploy/crds/contrail.juniper.net_managers_crd.yaml b/deploy/crds/contrail.juniper.net_managers_crd.yaml index 6a90f0ee0..ad80aef5f 100644 --- a/deploy/crds/contrail.juniper.net_managers_crd.yaml +++ b/deploy/crds/contrail.juniper.net_managers_crd.yaml @@ -9,7 +9,7 @@ spec: listKind: ManagerList plural: managers singular: manager - scope: Namespaced + scope: "" subresources: status: {} validation: @@ -681,6 +681,76 @@ spec: type: object type: object type: object + contrailmonitor: + description: Contrailmonitor is the Schema for the contrailmonitors + API + properties: + apiVersion: + 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/sig-architecture/api-conventions.md#resources' + type: string + kind: + 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/sig-architecture/api-conventions.md#types-kinds' + type: string + metadata: + type: object + spec: + description: ContrailmonitorSpec defines the desired state of + Contrailmonitor + properties: + serviceConfiguration: + description: 'INSERT ADDITIONAL SPEC FIELDS - desired state + of cluster Important: Run "operator-sdk generate k8s" + to regenerate code after modifying this file Add custom + validation using kubebuilder tags: https://book-v1.book.kubebuilder.io/beyond_basics/generating_crd.html' + properties: + cassandraInstance: + type: string + commandInstance: + type: string + configInstance: + type: string + controlInstance: + type: string + keystoneInstance: + type: string + memcachedInstance: + type: string + postgresInstance: + type: string + provisionmanagerInstance: + type: string + rabbitmqInstance: + type: string + webuiInstance: + type: string + zookeeperInstance: + type: string + type: object + required: + - serviceConfiguration + type: object + status: + description: ContrailmonitorStatus defines the observed state + of Contrailmonitor + properties: + active: + description: 'INSERT ADDITIONAL STATUS FIELD - define observed + state of cluster Important: Run "operator-sdk generate + k8s" to regenerate code after modifying this file Add + custom validation using kubebuilder tags: https://book-v1.book.kubebuilder.io/beyond_basics/generating_crd.html' + type: boolean + name: + type: string + required: + - name + type: object + type: object controls: items: description: Control is the Schema for the controls API. @@ -2577,6 +2647,17 @@ spec: name: type: string type: object + contrailmonitor: + description: ServiceStatus provides information on the current status + of the service. + properties: + active: + type: boolean + created: + type: boolean + name: + type: string + type: object controls: items: description: ServiceStatus provides information on the current status diff --git a/deploy/crds/contrail.juniper.net_v1alpha1_contrailmonitor_cr.yaml b/deploy/crds/contrail.juniper.net_v1alpha1_contrailmonitor_cr.yaml new file mode 100644 index 000000000..d7fe060f3 --- /dev/null +++ b/deploy/crds/contrail.juniper.net_v1alpha1_contrailmonitor_cr.yaml @@ -0,0 +1,7 @@ +apiVersion: contrail.juniper.net/v1alpha1 +kind: Contrailmonitor +metadata: + name: example-contrailmonitor +spec: + # Add fields here + size: 3 diff --git a/deploy/crds/contrail.juniper.net_v1alpha1_contrailstatusmonitor_cr.yaml b/deploy/crds/contrail.juniper.net_v1alpha1_contrailstatusmonitor_cr.yaml new file mode 100644 index 000000000..3649ff89c --- /dev/null +++ b/deploy/crds/contrail.juniper.net_v1alpha1_contrailstatusmonitor_cr.yaml @@ -0,0 +1,11 @@ +apiVersion: contrail.juniper.net/v1alpha1 +kind: Contrailstatusmonitor +metadata: + name: cassandra1 +status: functional +--- +apiVersion: contrail.juniper.net/v1alpha1 +kind: Contrailstatusmonitor +metadata: + name: zookeeper1 +status: non-functional diff --git a/deploy/role.yaml b/deploy/role.yaml index 0975cb375..bc3e363da 100644 --- a/deploy/role.yaml +++ b/deploy/role.yaml @@ -60,6 +60,8 @@ rules: - swifts - memcacheds - fernetkeymanagers + - contrailmonitors + - contrailstatusmonitors verbs: - '*' - apiGroups: diff --git a/pkg/apis/contrail/v1alpha1/BUILD.bazel b/pkg/apis/contrail/v1alpha1/BUILD.bazel index 27aba58b5..2901b933d 100644 --- a/pkg/apis/contrail/v1alpha1/BUILD.bazel +++ b/pkg/apis/contrail/v1alpha1/BUILD.bazel @@ -8,6 +8,8 @@ go_library( "command_types.go", "config_types.go", "control_types.go", + # "contrailmonitor_types.go", + # "contrailstatusmonitor_types.go", "defaults.go", "doc.go", "exec_to_pod.go", diff --git a/pkg/apis/contrail/v1alpha1/contrailmonitor_types.go b/pkg/apis/contrail/v1alpha1/contrailmonitor_types.go new file mode 100644 index 000000000..e6ed34343 --- /dev/null +++ b/pkg/apis/contrail/v1alpha1/contrailmonitor_types.go @@ -0,0 +1,75 @@ +package v1alpha1 + +import ( + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" +) + +// EDIT THIS FILE! THIS IS SCAFFOLDING FOR YOU TO OWN! +// NOTE: json tags are required. Any new fields you add must have json tags for the fields to be serialized. + +// ContrailmonitorSpec defines the desired state of Contrailmonitor +type ContrailmonitorSpec struct { + // INSERT ADDITIONAL SPEC FIELDS - desired state of cluster + // Important: Run "operator-sdk generate k8s" to regenerate code after modifying this file + // Add custom validation using kubebuilder tags: https://book-v1.book.kubebuilder.io/beyond_basics/generating_crd.html + ServiceConfiguration ContrailmonitorConfiguration `json:"serviceConfiguration"` +} + + +// ContrailmonitorConfiguration is the Spec for the Contrailmonitor API. +// +k8s:openapi-gen=true +type ContrailmonitorConfiguration struct { + MemcachedInstance string `json:"memcachedInstance,omitempty"` + PostgresInstance string `json:"postgresInstance,omitempty"` + CassandraInstance string `json:"cassandraInstance,omitempty"` + KeystoneInstance string `json:"keystoneInstance,omitempty"` + ConfigInstance string `json:"configInstance,omitempty"` + ZookeeperInstance string `json:"zookeeperInstance,omitempty"` + RabbitmqInstance string `json:"rabbitmqInstance,omitempty"` + ProvisionmanagerInstance string `json:"provisionmanagerInstance,omitempty"` + CommandInstance string `json:"commandInstance,omitempty"` + ControlInstance string `json:"controlInstance,omitempty"` + WebuiInstance string `json:"webuiInstance,omitempty"` +} + +// ContrailmonitorStatus defines the observed state of Contrailmonitor +type ContrailmonitorStatus struct { + // INSERT ADDITIONAL STATUS FIELD - define observed state of cluster + // Important: Run "operator-sdk generate k8s" to regenerate code after modifying this file + // Add custom validation using kubebuilder tags: https://book-v1.book.kubebuilder.io/beyond_basics/generating_crd.html + Active bool `json:"active,omitempty"` + Name string `json:"name"` +} + +// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object + +// Contrailmonitor is the Schema for the contrailmonitors API +// +kubebuilder:subresource:status +// +kubebuilder:resource:path=contrailmonitors,scope=Namespaced +type Contrailmonitor struct { + metav1.TypeMeta `json:",inline"` + metav1.ObjectMeta `json:"metadata,omitempty"` + + Spec ContrailmonitorSpec `json:"spec,omitempty"` + Status ContrailmonitorStatus `json:"status,omitempty"` +} + +// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object + +// ContrailmonitorList contains a list of Contrailmonitor +type ContrailmonitorList struct { + metav1.TypeMeta `json:",inline"` + metav1.ListMeta `json:"metadata,omitempty"` + Items []Contrailmonitor `json:"items"` +} + +func init() { + SchemeBuilder.Register(&Contrailmonitor{}, &ContrailmonitorList{}) +} + +// ModuleStatus defines the observed state of ConfigStatus +// +k8s:openapi-gen=true +type ModuleStatus struct { + ModuleName string `json:"moduleName,omitempty"` + ModuleState string `json:"state"` +} diff --git a/pkg/apis/contrail/v1alpha1/contrailstatusmonitor_types.go b/pkg/apis/contrail/v1alpha1/contrailstatusmonitor_types.go new file mode 100644 index 000000000..2f0c3f018 --- /dev/null +++ b/pkg/apis/contrail/v1alpha1/contrailstatusmonitor_types.go @@ -0,0 +1,30 @@ +package v1alpha1 + +import ( + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" +) + +// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object + +// Contrailstatusmonitor is the Schema for the contrailstatusmonitors API +// +kubebuilder:resource:path=contrailstatusmonitors,scope=Namespaced +// +kubebuilder:printcolumn:name="Status",type="string",JSONPath=".status",description="Number of instances in group" +type Contrailstatusmonitor struct { + metav1.TypeMeta `json:",inline"` + metav1.ObjectMeta `json:"metadata,omitempty"` + + Status string `json:"status,omitempty"` +} + +// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object + +// ContrailstatusmonitorList contains a list of Contrailstatusmonitor +type ContrailstatusmonitorList struct { + metav1.TypeMeta `json:",inline"` + metav1.ListMeta `json:"metadata,omitempty"` + Items []Contrailstatusmonitor `json:"items"` +} + +func init() { + SchemeBuilder.Register(&Contrailstatusmonitor{}, &ContrailstatusmonitorList{}) +} diff --git a/pkg/apis/contrail/v1alpha1/manager_types.go b/pkg/apis/contrail/v1alpha1/manager_types.go index 12e47fa82..944b2f7dd 100644 --- a/pkg/apis/contrail/v1alpha1/manager_types.go +++ b/pkg/apis/contrail/v1alpha1/manager_types.go @@ -37,6 +37,7 @@ type Services struct { Keystone *Keystone `json:"keystone,omitempty"` Swift *Swift `json:"swift,omitempty"` Memcached *Memcached `json:"memcached,omitempty"` + Contrailmonitor *Contrailmonitor `json:"contrailmonitor,omitempty"` } // ManagerStatus defines the observed state of Manager. @@ -60,6 +61,7 @@ type ManagerStatus struct { Swift *ServiceStatus `json:"swift,omitempty"` Command *ServiceStatus `json:"command,omitempty"` Memcached *ServiceStatus `json:"memcached,omitempty"` + Contrailmonitor *ServiceStatus `json:"contrailmonitor,omitempty"` // +optional // +patchMergeKey=type // +patchStrategy=merge diff --git a/pkg/apis/contrail/v1alpha1/zz_generated.deepcopy.go b/pkg/apis/contrail/v1alpha1/zz_generated.deepcopy.go index 74b9d95fa..32a83bc24 100644 --- a/pkg/apis/contrail/v1alpha1/zz_generated.deepcopy.go +++ b/pkg/apis/contrail/v1alpha1/zz_generated.deepcopy.go @@ -858,6 +858,175 @@ func (in *Container) DeepCopy() *Container { return out } +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *Contrailmonitor) DeepCopyInto(out *Contrailmonitor) { + *out = *in + out.TypeMeta = in.TypeMeta + in.ObjectMeta.DeepCopyInto(&out.ObjectMeta) + out.Spec = in.Spec + out.Status = in.Status + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new Contrailmonitor. +func (in *Contrailmonitor) DeepCopy() *Contrailmonitor { + if in == nil { + return nil + } + out := new(Contrailmonitor) + in.DeepCopyInto(out) + return out +} + +// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object. +func (in *Contrailmonitor) 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 *ContrailmonitorConfiguration) DeepCopyInto(out *ContrailmonitorConfiguration) { + *out = *in + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ContrailmonitorConfiguration. +func (in *ContrailmonitorConfiguration) DeepCopy() *ContrailmonitorConfiguration { + if in == nil { + return nil + } + out := new(ContrailmonitorConfiguration) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *ContrailmonitorList) DeepCopyInto(out *ContrailmonitorList) { + *out = *in + out.TypeMeta = in.TypeMeta + in.ListMeta.DeepCopyInto(&out.ListMeta) + if in.Items != nil { + in, out := &in.Items, &out.Items + *out = make([]Contrailmonitor, len(*in)) + for i := range *in { + (*in)[i].DeepCopyInto(&(*out)[i]) + } + } + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ContrailmonitorList. +func (in *ContrailmonitorList) DeepCopy() *ContrailmonitorList { + if in == nil { + return nil + } + out := new(ContrailmonitorList) + in.DeepCopyInto(out) + return out +} + +// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object. +func (in *ContrailmonitorList) 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 *ContrailmonitorSpec) DeepCopyInto(out *ContrailmonitorSpec) { + *out = *in + out.ServiceConfiguration = in.ServiceConfiguration + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ContrailmonitorSpec. +func (in *ContrailmonitorSpec) DeepCopy() *ContrailmonitorSpec { + if in == nil { + return nil + } + out := new(ContrailmonitorSpec) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *ContrailmonitorStatus) DeepCopyInto(out *ContrailmonitorStatus) { + *out = *in + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ContrailmonitorStatus. +func (in *ContrailmonitorStatus) DeepCopy() *ContrailmonitorStatus { + if in == nil { + return nil + } + out := new(ContrailmonitorStatus) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *Contrailstatusmonitor) DeepCopyInto(out *Contrailstatusmonitor) { + *out = *in + out.TypeMeta = in.TypeMeta + in.ObjectMeta.DeepCopyInto(&out.ObjectMeta) + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new Contrailstatusmonitor. +func (in *Contrailstatusmonitor) DeepCopy() *Contrailstatusmonitor { + if in == nil { + return nil + } + out := new(Contrailstatusmonitor) + in.DeepCopyInto(out) + return out +} + +// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object. +func (in *Contrailstatusmonitor) 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 *ContrailstatusmonitorList) DeepCopyInto(out *ContrailstatusmonitorList) { + *out = *in + out.TypeMeta = in.TypeMeta + in.ListMeta.DeepCopyInto(&out.ListMeta) + if in.Items != nil { + in, out := &in.Items, &out.Items + *out = make([]Contrailstatusmonitor, len(*in)) + for i := range *in { + (*in)[i].DeepCopyInto(&(*out)[i]) + } + } + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ContrailstatusmonitorList. +func (in *ContrailstatusmonitorList) DeepCopy() *ContrailstatusmonitorList { + if in == nil { + return nil + } + out := new(ContrailstatusmonitorList) + in.DeepCopyInto(out) + return out +} + +// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object. +func (in *ContrailstatusmonitorList) 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 *Control) DeepCopyInto(out *Control) { *out = *in @@ -1795,6 +1964,11 @@ func (in *ManagerStatus) DeepCopyInto(out *ManagerStatus) { *out = new(ServiceStatus) (*in).DeepCopyInto(*out) } + if in.Contrailmonitor != nil { + in, out := &in.Contrailmonitor, &out.Contrailmonitor + *out = new(ServiceStatus) + (*in).DeepCopyInto(*out) + } if in.Conditions != nil { in, out := &in.Conditions, &out.Conditions *out = make([]ManagerCondition, len(*in)) @@ -1936,6 +2110,22 @@ func (in *MemcachedStatus) DeepCopy() *MemcachedStatus { return out } +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *ModuleStatus) DeepCopyInto(out *ModuleStatus) { + *out = *in + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ModuleStatus. +func (in *ModuleStatus) DeepCopy() *ModuleStatus { + if in == nil { + return nil + } + out := new(ModuleStatus) + in.DeepCopyInto(out) + return out +} + // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. func (in *MonitorConfig) DeepCopyInto(out *MonitorConfig) { *out = *in @@ -2557,6 +2747,11 @@ func (in *Services) DeepCopyInto(out *Services) { *out = new(Memcached) (*in).DeepCopyInto(*out) } + if in.Contrailmonitor != nil { + in, out := &in.Contrailmonitor, &out.Contrailmonitor + *out = new(Contrailmonitor) + (*in).DeepCopyInto(*out) + } return } diff --git a/pkg/controller/add_contrailmonitor.go b/pkg/controller/add_contrailmonitor.go new file mode 100644 index 000000000..d0e0ac45c --- /dev/null +++ b/pkg/controller/add_contrailmonitor.go @@ -0,0 +1,10 @@ +package controller + +import ( + "github.com/Juniper/contrail-operator/pkg/controller/contrailmonitor" +) + +func init() { + // AddToManagerFuncs is a list of functions to create controllers and add them to a manager. + AddToManagerFuncs = append(AddToManagerFuncs, contrailmonitor.Add) +} diff --git a/pkg/controller/contrailmonitor/BUILD.bazel b/pkg/controller/contrailmonitor/BUILD.bazel new file mode 100644 index 000000000..54797837c --- /dev/null +++ b/pkg/controller/contrailmonitor/BUILD.bazel @@ -0,0 +1,31 @@ +load("@io_bazel_rules_go//go:def.bzl", "go_library", "go_test") + +go_library( + name = "go_default_library", + srcs = ["contrailmonitor_controller.go"], + importpath = "github.com/Juniper/contrail-operator/pkg/controller/contrailmonitor", + visibility = ["//visibility:public"], + deps = [ + "//pkg/apis/contrail/v1alpha1:go_default_library", + "//pkg/certificates:go_default_library", + "//pkg/controller/utils:go_default_library", + "//pkg/volumeclaims:go_default_library", + "//pkg/k8s:go_default_library", + "@io_k8s_api//core/v1:go_default_library", + "@io_k8s_apimachinery//pkg/api/errors:go_default_library", + "@io_k8s_apimachinery//pkg/api/resource:go_default_library", + "@io_k8s_apimachinery//pkg/apis/meta/v1:go_default_library", + "@io_k8s_apimachinery//pkg/labels:go_default_library", + "@io_k8s_apimachinery//pkg/runtime:go_default_library", + "@io_k8s_apimachinery//pkg/types:go_default_library", + "@io_k8s_client_go//rest:go_default_library", + "@io_k8s_sigs_controller_runtime//pkg/client:go_default_library", + "@io_k8s_sigs_controller_runtime//pkg/controller:go_default_library", + "@io_k8s_sigs_controller_runtime//pkg/controller/controllerutil:go_default_library", + "@io_k8s_sigs_controller_runtime//pkg/handler:go_default_library", + "@io_k8s_sigs_controller_runtime//pkg/log:go_default_library", + "@io_k8s_sigs_controller_runtime//pkg/manager:go_default_library", + "@io_k8s_sigs_controller_runtime//pkg/reconcile:go_default_library", + "@io_k8s_sigs_controller_runtime//pkg/source:go_default_library", + ], +) diff --git a/pkg/controller/contrailmonitor/contrailmonitor_controller.go b/pkg/controller/contrailmonitor/contrailmonitor_controller.go new file mode 100644 index 000000000..a473bd61f --- /dev/null +++ b/pkg/controller/contrailmonitor/contrailmonitor_controller.go @@ -0,0 +1,531 @@ +package contrailmonitor + +import ( + "context" + + contrailv1alpha1 "github.com/Juniper/contrail-operator/pkg/apis/contrail/v1alpha1" + corev1 "k8s.io/api/core/v1" + "k8s.io/apimachinery/pkg/api/errors" + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + "k8s.io/apimachinery/pkg/runtime" + "k8s.io/apimachinery/pkg/types" + "sigs.k8s.io/controller-runtime/pkg/client" + "sigs.k8s.io/controller-runtime/pkg/controller" + "sigs.k8s.io/controller-runtime/pkg/controller/controllerutil" + "sigs.k8s.io/controller-runtime/pkg/handler" + logf "sigs.k8s.io/controller-runtime/pkg/log" + "sigs.k8s.io/controller-runtime/pkg/manager" + "sigs.k8s.io/controller-runtime/pkg/reconcile" + "sigs.k8s.io/controller-runtime/pkg/source" + + "github.com/Juniper/contrail-operator/pkg/k8s" +) + +var log = logf.Log.WithName("controller_contrailmonitor") + +/** +* USER ACTION REQUIRED: This is a scaffold file intended for the user to modify with their own Controller +* business logic. Delete these comments after modifying this file.* + */ + +// Add creates a new Contrailmonitor Controller and adds it to the Manager. The Manager will set fields on the Controller +// and Start it when the Manager is Started. +func Add(mgr manager.Manager) error { + return add(mgr, newReconciler(mgr)) +} + +// newReconciler returns a new reconcile.Reconciler +func newReconciler(mgr manager.Manager) reconcile.Reconciler { + return &ReconcileContrailmonitor{client: mgr.GetClient(), + scheme: mgr.GetScheme(), + manager: mgr, + kubernetes: k8s.New(mgr.GetClient(), mgr.GetScheme())} +} + +// add adds a new Controller to mgr with r as the reconcile.Reconciler +func add(mgr manager.Manager, r reconcile.Reconciler) error { + // Create a new controller + c, err := controller.New("contrailmonitor-controller", mgr, controller.Options{Reconciler: r}) + if err != nil { + return err + } + + // Watch for changes to primary resource Contrailmonitor + err = c.Watch(&source.Kind{Type: &contrailv1alpha1.Contrailmonitor{}}, &handler.EnqueueRequestForObject{}) + if err != nil { + return err + } + + // TODO(user): Modify this to be the types you create that are owned by the primary resource + // Watch for changes to secondary resource Pods and requeue the owner Contrailmonitor + err = c.Watch(&source.Kind{Type: &corev1.Pod{}}, &handler.EnqueueRequestForOwner{ + IsController: true, + OwnerType: &contrailv1alpha1.Contrailmonitor{}, + }) + if err != nil { + return err + } + // Watch for changes to secondary resource Postgres and requeue the owner Contrailmonitor + err = c.Watch(&source.Kind{Type: &contrailv1alpha1.Postgres{}}, &handler.EnqueueRequestForOwner{ + OwnerType: &contrailv1alpha1.Contrailmonitor{}, + }) + if err != nil { + return err + } + err = c.Watch(&source.Kind{Type: &contrailv1alpha1.Memcached{}}, &handler.EnqueueRequestForOwner{ + OwnerType: &contrailv1alpha1.Contrailmonitor{}, + }) + if err != nil { + return err + } + + err = c.Watch(&source.Kind{Type: &contrailv1alpha1.Cassandra{}}, &handler.EnqueueRequestForOwner{ + OwnerType: &contrailv1alpha1.Contrailmonitor{}, + }) + if err != nil { + return err + } + err = c.Watch(&source.Kind{Type: &contrailv1alpha1.Control{}}, &handler.EnqueueRequestForOwner{ + OwnerType: &contrailv1alpha1.Contrailmonitor{}, + }) + if err != nil { + return err + } + err = c.Watch(&source.Kind{Type: &contrailv1alpha1.Config{}}, &handler.EnqueueRequestForOwner{ + OwnerType: &contrailv1alpha1.Contrailmonitor{}, + }) + if err != nil { + return err + } + err = c.Watch(&source.Kind{Type: &contrailv1alpha1.Keystone{}}, &handler.EnqueueRequestForOwner{ + OwnerType: &contrailv1alpha1.Contrailmonitor{}, + }) + if err != nil { + return err + } + err = c.Watch(&source.Kind{Type: &contrailv1alpha1.Zookeeper{}}, &handler.EnqueueRequestForOwner{ + OwnerType: &contrailv1alpha1.Contrailmonitor{}, + }) + if err != nil { + return err + } + err = c.Watch(&source.Kind{Type: &contrailv1alpha1.Rabbitmq{}}, &handler.EnqueueRequestForOwner{ + OwnerType: &contrailv1alpha1.Contrailmonitor{}, + }) + if err != nil { + return err + } + err = c.Watch(&source.Kind{Type: &contrailv1alpha1.Webui{}}, &handler.EnqueueRequestForOwner{ + OwnerType: &contrailv1alpha1.Contrailmonitor{}, + }) + if err != nil { + return err + } + + return nil +} + +// blank assignment to verify that ReconcileContrailmonitor implements reconcile.Reconciler +var _ reconcile.Reconciler = &ReconcileContrailmonitor{} + +// ReconcileContrailmonitor reconciles a Contrailmonitor object +type ReconcileContrailmonitor struct { + // This client, initialized using mgr.Client() above, is a split client + // that reads objects from the cache and writes to the apiserver + client client.Client + scheme *runtime.Scheme + manager manager.Manager + kubernetes *k8s.Kubernetes +} + +// Reconcile reads that state of the cluster for a Contrailmonitor object and makes changes based on the state read +// and what is in the Contrailmonitor.Spec +// TODO(user): Modify this Reconcile function to implement your Controller logic. This example creates +// a Pod as an example +// Note: +// The Controller will requeue the Request to be processed again if the returned error is non-nil or +// Result.Requeue is true, otherwise upon completion it will remove the work from the queue. +func (r *ReconcileContrailmonitor) Reconcile(request reconcile.Request) (reconcile.Result, error) { + reqLogger := log.WithValues("Request.Namespace", request.Namespace, "Request.Name", request.Name) + reqLogger.Info("Reconciling Contrailmonitor") + + // Fetch the Contrailmonitor instance + instance := &contrailv1alpha1.Contrailmonitor{} + err := r.client.Get(context.TODO(), request.NamespacedName, instance) + if err != nil { + if errors.IsNotFound(err) { + // Request object not found, could have been deleted after reconcile request. + // Owned objects are automatically garbage collected. For additional cleanup logic use finalizers. + // Return and don't requeue + return reconcile.Result{}, nil + } + // Error reading the object - requeue the request. + return reconcile.Result{}, err + } + + if !instance.GetDeletionTimestamp().IsZero() { + return reconcile.Result{}, nil + } + instance.Status.Name = "hello" + instance.Status.Active = true + psql, err := r.getPostgres(instance) + if err != nil { + return reconcile.Result{}, err + } + if err = r.kubernetes.Owner(instance).EnsureOwns(psql); err != nil { + return reconcile.Result{}, err + } + if !psql.Status.Active { + return reconcile.Result{}, nil + } + serIns := &contrailv1alpha1.Contrailstatusmonitor{ObjectMeta: metav1.ObjectMeta{Name: psql.Name, Namespace: "contrail"}} + if err := controllerutil.SetControllerReference(instance, serIns, r.scheme); err != nil { + return reconcile.Result{}, err + } + if psql.Status.Active { + serIns.Status = "Active" + } else { + serIns.Status = "NotActive" + } + _, err = controllerutil.CreateOrUpdate(context.Background(), r.client, serIns, func() error { + return controllerutil.SetControllerReference(instance, serIns, r.scheme) + }) + if err != nil{ + return reconcile.Result{}, nil + } + + memcached, err := r.getMemcached(instance) + if err != nil { + return reconcile.Result{}, err + } + if err = r.kubernetes.Owner(instance).EnsureOwns(memcached); err != nil { + return reconcile.Result{}, err + } + if !memcached.Status.Status.Active { + return reconcile.Result{}, nil + } + + serIns1 := &contrailv1alpha1.Contrailstatusmonitor{ObjectMeta: metav1.ObjectMeta{Name: memcached.Name, Namespace: "contrail"}} + // if err := controllerutil.SetControllerReference(instance, serIns1, r.scheme); err != nil { + // return reconcile.Result{}, err + // } + if memcached.Status.Active { + serIns1.Status = "Active" + } else { + serIns1.Status = "NotActive" + } + _, err = controllerutil.CreateOrUpdate(context.Background(), r.client, serIns1, func() error { + return controllerutil.SetControllerReference(instance, serIns1, r.scheme) + }) + if err != nil{ + return reconcile.Result{}, nil + } + + keystone, err := r.getKeystone(instance) + if err != nil { + return reconcile.Result{}, err + } + if err = r.kubernetes.Owner(instance).EnsureOwns(keystone); err != nil { + return reconcile.Result{}, err + } + if !keystone.Status.Active { + return reconcile.Result{}, nil + } + + serIns2 := &contrailv1alpha1.Contrailstatusmonitor{ObjectMeta: metav1.ObjectMeta{Name: keystone.Name, Namespace: "contrail"}} + // if err := controllerutil.SetControllerReference(instance, serIns2, r.scheme); err != nil { + // return reconcile.Result{}, err + // } + if keystone.Status.Active { + serIns2.Status = "Active" + } else { + serIns2.Status = "NotActive" + } + _, err = controllerutil.CreateOrUpdate(context.Background(), r.client, serIns2, func() error { + return controllerutil.SetControllerReference(instance, serIns2, r.scheme) + }) + if err != nil{ + return reconcile.Result{}, nil + } + + provisionmanager, err := r.getProvisionmanager(instance) + if err != nil { + return reconcile.Result{}, err + } + // if err = r.kubernetes.Owner(instance).EnsureOwns(provisionmanager); err != nil { + // return reconcile.Result{}, err + // } + serIns3 := &contrailv1alpha1.Contrailstatusmonitor{ObjectMeta: metav1.ObjectMeta{Name: provisionmanager.Name, Namespace: "contrail"}} + // if err := controllerutil.SetControllerReference(instance, serIns3, r.scheme); err != nil { + // return reconcile.Result{}, err + // } + if provisionmanager.Status.Active == nil { + serIns3.Status = "NotActive" + } else { + serIns3.Status = "Active" + } + _, err = controllerutil.CreateOrUpdate(context.Background(), r.client, serIns3, func() error { + return controllerutil.SetControllerReference(instance, serIns3, r.scheme) + }) + if err != nil{ + return reconcile.Result{}, nil + } + + cassandra, err := r.getCassandra(instance) + if err != nil { + return reconcile.Result{}, err + } + if err = r.kubernetes.Owner(instance).EnsureOwns(cassandra); err != nil { + return reconcile.Result{}, err + } + cassandraActive := cassandra.IsActive(instance.Spec.ServiceConfiguration.CassandraInstance,request.Namespace, r.client) + serIns4 := &contrailv1alpha1.Contrailstatusmonitor{ObjectMeta: metav1.ObjectMeta{Name: cassandra.Name, Namespace: "contrail"}} + // if err := controllerutil.SetControllerReference(instance, serIns4, r.scheme); err != nil { + // return reconcile.Result{}, err + // } + if cassandra.Status.Active == nil || !cassandraActive{ + serIns4.Status = "NotActive" + } else { + serIns4.Status = "Active" + } + _, err = controllerutil.CreateOrUpdate(context.Background(), r.client, serIns4, func() error { + return controllerutil.SetControllerReference(instance, serIns4, r.scheme) + }) + if err != nil{ + return reconcile.Result{}, nil + } + + zookeeper, err := r.getZookeeper(instance) + if err != nil { + return reconcile.Result{}, err + } + if err = r.kubernetes.Owner(instance).EnsureOwns(zookeeper); err != nil { + return reconcile.Result{}, err + } + zookeeperActive := zookeeper.IsActive(instance.Spec.ServiceConfiguration.ZookeeperInstance,request.Namespace, r.client) + serIns5 := &contrailv1alpha1.Contrailstatusmonitor{ObjectMeta: metav1.ObjectMeta{Name: zookeeper.Name, Namespace: "contrail"}} + // if err := controllerutil.SetControllerReference(instance, serIns5, r.scheme); err != nil { + // return reconcile.Result{}, err + // } + if zookeeper.Status.Active == nil || !zookeeperActive{ + serIns5.Status = "NotActive" + } else { + serIns5.Status = "Active" + } + _, err = controllerutil.CreateOrUpdate(context.Background(), r.client, serIns5, func() error { + return controllerutil.SetControllerReference(instance, serIns5, r.scheme) + }) + if err != nil{ + return reconcile.Result{}, nil + } + + + rabbitmq, err := r.getRabbitmq(instance) + if err != nil { + return reconcile.Result{}, err + } + if err = r.kubernetes.Owner(instance).EnsureOwns(rabbitmq); err != nil { + return reconcile.Result{}, err + } + rabbitmqActive := zookeeper.IsActive(instance.Spec.ServiceConfiguration.RabbitmqInstance,request.Namespace, r.client) + serIns6 := &contrailv1alpha1.Contrailstatusmonitor{ObjectMeta: metav1.ObjectMeta{Name: rabbitmq.Name, Namespace: "contrail"}} + // if err := controllerutil.SetControllerReference(instance, serIns6, r.scheme); err != nil { + // return reconcile.Result{}, err + // } + if rabbitmq.Status.Active == nil || !rabbitmqActive{ + serIns6.Status = "NotActive" + } else { + serIns6.Status = "Active" + } + _, err = controllerutil.CreateOrUpdate(context.Background(), r.client, serIns6, func() error { + return controllerutil.SetControllerReference(instance, serIns6, r.scheme) + }) + if err != nil{ + return reconcile.Result{}, nil + } + + + config, err := r.getConfig(instance) + if err != nil { + return reconcile.Result{}, err + } + if err = r.kubernetes.Owner(instance).EnsureOwns(config); err != nil { + return reconcile.Result{}, err + } + configActive := config.IsActive(instance.Spec.ServiceConfiguration.ConfigInstance,request.Namespace, r.client) + if !configActive || config.Status.Active == nil{ + serIns7 := &contrailv1alpha1.Contrailstatusmonitor{ObjectMeta: metav1.ObjectMeta{Name: config.Name, Namespace: "contrail"}} + // if err := controllerutil.SetControllerReference(instance, serIns7, r.scheme); err != nil { + // return reconcile.Result{}, err + // } + serIns7.Status = "NotActive" + _, err = controllerutil.CreateOrUpdate(context.Background(), r.client, serIns7, func() error { + return controllerutil.SetControllerReference(instance, serIns7, r.scheme) + }) + if err != nil{ + return reconcile.Result{}, nil + } + }else{ + clist, err := r.getConfiglist() + if err != nil{ + return reconcile.Result{}, err + } + for i := 0; i < len(clist.Items); i++{ + for _, value := range clist.Items[i].Status.ServiceStatus { + for _, n := range value { + serIns7 := &contrailv1alpha1.Contrailstatusmonitor{ObjectMeta: metav1.ObjectMeta{Name: n.ModuleName, Namespace: "contrail"}} + // if err := controllerutil.SetControllerReference(instance, serIns7, r.scheme); err != nil { + // return reconcile.Result{}, err + // } + serIns7.Status = n.ModuleState + _, err := controllerutil.CreateOrUpdate(context.Background(), r.client, serIns7, func() error { + return controllerutil.SetControllerReference(instance, serIns7, r.scheme) + }) + if err != nil{ + return reconcile.Result{}, err + } + } + } + } + } + + webui, err := r.getWebui(instance) + if err != nil { + return reconcile.Result{}, err + } + if err = r.kubernetes.Owner(instance).EnsureOwns(webui); err != nil { + return reconcile.Result{}, err + } + if !configActive || !webui.Status.Active { + serIns8 := &contrailv1alpha1.Contrailstatusmonitor{ObjectMeta: metav1.ObjectMeta{Name: webui.Name, Namespace: "contrail"}} + // if err := controllerutil.SetControllerReference(instance, serIns8, r.scheme); err != nil { + // return reconcile.Result{}, err + // } + serIns8.Status = "NotActive" + _, err = controllerutil.CreateOrUpdate(context.Background(), r.client, serIns8, func() error { + return controllerutil.SetControllerReference(instance, serIns8, r.scheme) + }) + if err != nil{ + return reconcile.Result{}, nil + } + }else{ + wlist, err := r.getWebuilist() + if err != nil{ + return reconcile.Result{}, err + } + for i := 0; i < len(wlist.Items); i++{ + for _, value := range wlist.Items[i].Status.ServiceStatus { + for _, n := range value { + serIns8 := &contrailv1alpha1.Contrailstatusmonitor{ObjectMeta: metav1.ObjectMeta{Name: n.ModuleName, Namespace: "contrail"}} + // if err := controllerutil.SetControllerReference(instance, serIns8, r.scheme); err != nil { + // return reconcile.Result{}, err + // } + serIns8.Status = n.ModuleState + _, err := controllerutil.CreateOrUpdate(context.Background(), r.client, serIns8, func() error { + return controllerutil.SetControllerReference(instance, serIns8, r.scheme) + }) + if err != nil{ + return reconcile.Result{}, err + } + } + } + } + } + + + // Check if this Pod already exists + err = r.client.Status().Update(context.TODO(), instance) + if err != nil { + return reconcile.Result{}, err + } + + // Pod already exists - don't requeue + // reqLogger.Info("Skip reconcile: Pod already exists", "Pod.Namespace", found.Namespace, "Pod.Name", found.Name) + return reconcile.Result{}, nil +} + + +func (r *ReconcileContrailmonitor) getPostgres(cr *contrailv1alpha1.Contrailmonitor) (*contrailv1alpha1.Postgres, error) { + psql := &contrailv1alpha1.Postgres{} + name := types.NamespacedName{Namespace: cr.Namespace, + Name: cr.Spec.ServiceConfiguration.PostgresInstance} + err := r.client.Get(context.Background(), name, psql) + return psql, err +} + +func (r *ReconcileContrailmonitor) getMemcached(cr *contrailv1alpha1.Contrailmonitor) (*contrailv1alpha1.Memcached, error) { + key := &contrailv1alpha1.Memcached{} + name := types.NamespacedName{Namespace: cr.Namespace, Name: cr.Spec.ServiceConfiguration.MemcachedInstance} + err := r.client.Get(context.Background(), name, key) + return key, err +} + +func (r *ReconcileContrailmonitor) getZookeeper(cr *contrailv1alpha1.Contrailmonitor) (*contrailv1alpha1.Zookeeper, error) { + + key := &contrailv1alpha1.Zookeeper{} + name := types.NamespacedName{Namespace: cr.Namespace, Name: cr.Spec.ServiceConfiguration.ZookeeperInstance} + err := r.client.Get(context.Background(), name, key) + return key, err +} + +func (r *ReconcileContrailmonitor) getCassandra(cr *contrailv1alpha1.Contrailmonitor) (*contrailv1alpha1.Cassandra, error) { + key := &contrailv1alpha1.Cassandra{} + name := types.NamespacedName{Namespace: cr.Namespace, Name: cr.Spec.ServiceConfiguration.CassandraInstance} + err := r.client.Get(context.Background(), name, key) + return key, err +} + +func (r *ReconcileContrailmonitor) getKeystone(cr *contrailv1alpha1.Contrailmonitor) (*contrailv1alpha1.Keystone, error) { + + key := &contrailv1alpha1.Keystone{} + name := types.NamespacedName{Namespace: cr.Namespace, Name: cr.Spec.ServiceConfiguration.KeystoneInstance} + err := r.client.Get(context.Background(), name, key) + return key, err +} + +func (r *ReconcileContrailmonitor) getRabbitmq(cr *contrailv1alpha1.Contrailmonitor) (*contrailv1alpha1.Rabbitmq, error) { + key := &contrailv1alpha1.Rabbitmq{} + name := types.NamespacedName{Namespace: cr.Namespace, Name: cr.Spec.ServiceConfiguration.RabbitmqInstance} + err := r.client.Get(context.Background(), name, key) + return key, err +} + +func (r *ReconcileContrailmonitor) getProvisionmanager(cr *contrailv1alpha1.Contrailmonitor) (*contrailv1alpha1.ProvisionManager, error) { + + key := &contrailv1alpha1.ProvisionManager{} + name := types.NamespacedName{Namespace: cr.Namespace, Name: cr.Spec.ServiceConfiguration.ProvisionmanagerInstance} + err := r.client.Get(context.Background(), name, key) + return key, err +} + +func (r *ReconcileContrailmonitor) getConfig(cr *contrailv1alpha1.Contrailmonitor) (*contrailv1alpha1.Config, error) { + key := &contrailv1alpha1.Config{} + name := types.NamespacedName{Namespace: cr.Namespace, Name: cr.Spec.ServiceConfiguration.ConfigInstance} + err := r.client.Get(context.Background(), name, key) + return key, err +} + +func (r *ReconcileContrailmonitor) getConfiglist() (*contrailv1alpha1.ConfigList, error) { + listOps := &client.ListOptions{Namespace: "contrail"} + clist := &contrailv1alpha1.ConfigList{} + err := r.client.List(context.TODO(), clist, listOps) + return clist, err +} + +func (r *ReconcileContrailmonitor) getWebui(cr *contrailv1alpha1.Contrailmonitor) (*contrailv1alpha1.Webui, error) { + key := &contrailv1alpha1.Webui{} + name := types.NamespacedName{Namespace: cr.Namespace, Name: cr.Spec.ServiceConfiguration.WebuiInstance} + err := r.client.Get(context.Background(), name, key) + return key, err +} + +func (r *ReconcileContrailmonitor) getWebuilist() (*contrailv1alpha1.WebuiList, error) { + listOps := &client.ListOptions{Namespace: "contrail"} + wlist := &contrailv1alpha1.WebuiList{} + err := r.client.List(context.TODO(), wlist, listOps) + return wlist, err + +} + + + diff --git a/pkg/controller/manager/manager_controller.go b/pkg/controller/manager/manager_controller.go index a03598661..1d6cee4f4 100644 --- a/pkg/controller/manager/manager_controller.go +++ b/pkg/controller/manager/manager_controller.go @@ -43,6 +43,7 @@ var resourcesList = []runtime.Object{ &v1alpha1.Memcached{}, &v1alpha1.Vrouter{}, &v1alpha1.Kubemanager{}, + &v1alpha1.Contrailmonitor{}, &corev1.ConfigMap{}, } @@ -1491,19 +1492,23 @@ func (r *ReconcileManager) Reconcile(request reconcile.Request) (reconcile.Resul return reconcile.Result{}, err } - if err = r.processCommand(instance); err != nil { - return reconcile.Result{}, err - } + // if err = r.processCommand(instance); err != nil { + // return reconcile.Result{}, err + // } if err = r.processKeystone(instance); err != nil { return reconcile.Result{}, err } - if err = r.processSwift(instance); err != nil { + // if err = r.processSwift(instance); err != nil { + // return reconcile.Result{}, err + // } + + if err = r.processMemcached(instance); err != nil { return reconcile.Result{}, err } - if err = r.processMemcached(instance); err != nil { + if err = r.processContrailmonitor(instance); err != nil { return reconcile.Result{}, err } @@ -1644,3 +1649,20 @@ func (r *ReconcileManager) processCSRSignerCaConfigMap(manager *v1alpha1.Manager return err } + +func (r *ReconcileManager) processContrailmonitor(manager *v1alpha1.Manager) error { + if manager.Spec.Services.Contrailmonitor == nil { + return nil + } + contrailmonitor := &v1alpha1.Contrailmonitor{} + contrailmonitor.ObjectMeta = manager.Spec.Services.Contrailmonitor.ObjectMeta + contrailmonitor.ObjectMeta.Namespace = manager.Namespace + _, err := controllerutil.CreateOrUpdate(context.Background(), r.client, contrailmonitor, func() error { + contrailmonitor.Spec = manager.Spec.Services.Contrailmonitor.Spec + return controllerutil.SetControllerReference(manager, contrailmonitor, r.scheme) + }) + status := &v1alpha1.ServiceStatus{} + status.Active = &contrailmonitor.Status.Active + manager.Status.Postgres = status + return err +} \ No newline at end of file From db06cace18c6f2beac1ea5979ea9392bef545470 Mon Sep 17 00:00:00 2001 From: vijayrap Date: Mon, 10 Aug 2020 01:12:56 -0700 Subject: [PATCH 02/10] adding more files --- .../contrail.juniper.net_cassandras_crd.yaml | 2 +- .../contrail.juniper.net_commands_crd.yaml | 2 +- .../contrail.juniper.net_configs_crd.yaml | 2 +- .../contrail.juniper.net_controls_crd.yaml | 2 +- .../contrail.juniper.net_keystones_crd.yaml | 2 +- ...contrail.juniper.net_kubemanagers_crd.yaml | 2 +- .../contrail.juniper.net_postgres_crd.yaml | 2 +- .../contrail.juniper.net_rabbitmqs_crd.yaml | 2 +- ...contrail.juniper.net_swiftproxies_crd.yaml | 2 +- .../crds/contrail.juniper.net_swifts_crd.yaml | 2 +- ...ontrail.juniper.net_swiftstorages_crd.yaml | 2 +- .../contrail.juniper.net_vrouters_crd.yaml | 2 +- .../crds/contrail.juniper.net_webuis_crd.yaml | 2 +- .../contrail.juniper.net_zookeepers_crd.yaml | 2 +- .../v1alpha1/contrailmonitor_types.go | 27 ++++---- .../v1alpha1/contrailstatusmonitor_types.go | 2 +- .../contrailmonitor_controller.go | 65 +++++++++---------- test/env/deploy/cluster.yaml | 17 +++++ 18 files changed, 74 insertions(+), 65 deletions(-) diff --git a/deploy/crds/contrail.juniper.net_cassandras_crd.yaml b/deploy/crds/contrail.juniper.net_cassandras_crd.yaml index 7005a8609..1f9bb227c 100644 --- a/deploy/crds/contrail.juniper.net_cassandras_crd.yaml +++ b/deploy/crds/contrail.juniper.net_cassandras_crd.yaml @@ -9,7 +9,7 @@ spec: listKind: CassandraList plural: cassandras singular: cassandra - scope: Namespaced + scope: "" subresources: status: {} validation: diff --git a/deploy/crds/contrail.juniper.net_commands_crd.yaml b/deploy/crds/contrail.juniper.net_commands_crd.yaml index d7c98f460..5c5798f1a 100644 --- a/deploy/crds/contrail.juniper.net_commands_crd.yaml +++ b/deploy/crds/contrail.juniper.net_commands_crd.yaml @@ -9,7 +9,7 @@ spec: listKind: CommandList plural: commands singular: command - scope: Namespaced + scope: "" subresources: status: {} validation: diff --git a/deploy/crds/contrail.juniper.net_configs_crd.yaml b/deploy/crds/contrail.juniper.net_configs_crd.yaml index 62714b05a..53de73122 100644 --- a/deploy/crds/contrail.juniper.net_configs_crd.yaml +++ b/deploy/crds/contrail.juniper.net_configs_crd.yaml @@ -9,7 +9,7 @@ spec: listKind: ConfigList plural: configs singular: config - scope: Namespaced + scope: "" subresources: status: {} validation: diff --git a/deploy/crds/contrail.juniper.net_controls_crd.yaml b/deploy/crds/contrail.juniper.net_controls_crd.yaml index e83ba8616..60764a006 100644 --- a/deploy/crds/contrail.juniper.net_controls_crd.yaml +++ b/deploy/crds/contrail.juniper.net_controls_crd.yaml @@ -9,7 +9,7 @@ spec: listKind: ControlList plural: controls singular: control - scope: Namespaced + scope: "" subresources: status: {} validation: diff --git a/deploy/crds/contrail.juniper.net_keystones_crd.yaml b/deploy/crds/contrail.juniper.net_keystones_crd.yaml index ffa93904d..09b641e48 100644 --- a/deploy/crds/contrail.juniper.net_keystones_crd.yaml +++ b/deploy/crds/contrail.juniper.net_keystones_crd.yaml @@ -9,7 +9,7 @@ spec: listKind: KeystoneList plural: keystones singular: keystone - scope: Namespaced + scope: "" subresources: status: {} validation: diff --git a/deploy/crds/contrail.juniper.net_kubemanagers_crd.yaml b/deploy/crds/contrail.juniper.net_kubemanagers_crd.yaml index 6caec6770..4331f6ce6 100644 --- a/deploy/crds/contrail.juniper.net_kubemanagers_crd.yaml +++ b/deploy/crds/contrail.juniper.net_kubemanagers_crd.yaml @@ -9,7 +9,7 @@ spec: listKind: KubemanagerList plural: kubemanagers singular: kubemanager - scope: Namespaced + scope: "" subresources: status: {} validation: diff --git a/deploy/crds/contrail.juniper.net_postgres_crd.yaml b/deploy/crds/contrail.juniper.net_postgres_crd.yaml index 40be47b11..c31a828fd 100644 --- a/deploy/crds/contrail.juniper.net_postgres_crd.yaml +++ b/deploy/crds/contrail.juniper.net_postgres_crd.yaml @@ -9,7 +9,7 @@ spec: listKind: PostgresList plural: postgres singular: postgres - scope: Namespaced + scope: "" subresources: status: {} validation: diff --git a/deploy/crds/contrail.juniper.net_rabbitmqs_crd.yaml b/deploy/crds/contrail.juniper.net_rabbitmqs_crd.yaml index 5ec6fa419..d9be8f45b 100644 --- a/deploy/crds/contrail.juniper.net_rabbitmqs_crd.yaml +++ b/deploy/crds/contrail.juniper.net_rabbitmqs_crd.yaml @@ -9,7 +9,7 @@ spec: listKind: RabbitmqList plural: rabbitmqs singular: rabbitmq - scope: Namespaced + scope: "" subresources: status: {} validation: diff --git a/deploy/crds/contrail.juniper.net_swiftproxies_crd.yaml b/deploy/crds/contrail.juniper.net_swiftproxies_crd.yaml index 2d1ac3ad7..e5a66458f 100644 --- a/deploy/crds/contrail.juniper.net_swiftproxies_crd.yaml +++ b/deploy/crds/contrail.juniper.net_swiftproxies_crd.yaml @@ -25,7 +25,7 @@ spec: listKind: SwiftProxyList plural: swiftproxies singular: swiftproxy - scope: Namespaced + scope: "" subresources: status: {} validation: diff --git a/deploy/crds/contrail.juniper.net_swifts_crd.yaml b/deploy/crds/contrail.juniper.net_swifts_crd.yaml index 4b395cb54..df007871f 100644 --- a/deploy/crds/contrail.juniper.net_swifts_crd.yaml +++ b/deploy/crds/contrail.juniper.net_swifts_crd.yaml @@ -9,7 +9,7 @@ spec: listKind: SwiftList plural: swifts singular: swift - scope: Namespaced + scope: "" subresources: status: {} validation: diff --git a/deploy/crds/contrail.juniper.net_swiftstorages_crd.yaml b/deploy/crds/contrail.juniper.net_swiftstorages_crd.yaml index c1cf85b83..e73d5c2ff 100644 --- a/deploy/crds/contrail.juniper.net_swiftstorages_crd.yaml +++ b/deploy/crds/contrail.juniper.net_swiftstorages_crd.yaml @@ -9,7 +9,7 @@ spec: listKind: SwiftStorageList plural: swiftstorages singular: swiftstorage - scope: Namespaced + scope: "" subresources: status: {} validation: diff --git a/deploy/crds/contrail.juniper.net_vrouters_crd.yaml b/deploy/crds/contrail.juniper.net_vrouters_crd.yaml index 628630753..0d94074f9 100644 --- a/deploy/crds/contrail.juniper.net_vrouters_crd.yaml +++ b/deploy/crds/contrail.juniper.net_vrouters_crd.yaml @@ -9,7 +9,7 @@ spec: listKind: VrouterList plural: vrouters singular: vrouter - scope: Namespaced + scope: "" subresources: status: {} validation: diff --git a/deploy/crds/contrail.juniper.net_webuis_crd.yaml b/deploy/crds/contrail.juniper.net_webuis_crd.yaml index 975647126..2741954fd 100644 --- a/deploy/crds/contrail.juniper.net_webuis_crd.yaml +++ b/deploy/crds/contrail.juniper.net_webuis_crd.yaml @@ -22,7 +22,7 @@ spec: listKind: WebuiList plural: webuis singular: webui - scope: Namespaced + scope: "" subresources: status: {} validation: diff --git a/deploy/crds/contrail.juniper.net_zookeepers_crd.yaml b/deploy/crds/contrail.juniper.net_zookeepers_crd.yaml index 0775532db..b79517f27 100644 --- a/deploy/crds/contrail.juniper.net_zookeepers_crd.yaml +++ b/deploy/crds/contrail.juniper.net_zookeepers_crd.yaml @@ -9,7 +9,7 @@ spec: listKind: ZookeeperList plural: zookeepers singular: zookeeper - scope: Namespaced + scope: "" subresources: status: {} validation: diff --git a/pkg/apis/contrail/v1alpha1/contrailmonitor_types.go b/pkg/apis/contrail/v1alpha1/contrailmonitor_types.go index e6ed34343..fa2b3f057 100644 --- a/pkg/apis/contrail/v1alpha1/contrailmonitor_types.go +++ b/pkg/apis/contrail/v1alpha1/contrailmonitor_types.go @@ -12,24 +12,23 @@ type ContrailmonitorSpec struct { // INSERT ADDITIONAL SPEC FIELDS - desired state of cluster // Important: Run "operator-sdk generate k8s" to regenerate code after modifying this file // Add custom validation using kubebuilder tags: https://book-v1.book.kubebuilder.io/beyond_basics/generating_crd.html - ServiceConfiguration ContrailmonitorConfiguration `json:"serviceConfiguration"` + ServiceConfiguration ContrailmonitorConfiguration `json:"serviceConfiguration"` } - // ContrailmonitorConfiguration is the Spec for the Contrailmonitor API. // +k8s:openapi-gen=true type ContrailmonitorConfiguration struct { - MemcachedInstance string `json:"memcachedInstance,omitempty"` - PostgresInstance string `json:"postgresInstance,omitempty"` - CassandraInstance string `json:"cassandraInstance,omitempty"` - KeystoneInstance string `json:"keystoneInstance,omitempty"` - ConfigInstance string `json:"configInstance,omitempty"` - ZookeeperInstance string `json:"zookeeperInstance,omitempty"` - RabbitmqInstance string `json:"rabbitmqInstance,omitempty"` + MemcachedInstance string `json:"memcachedInstance,omitempty"` + PostgresInstance string `json:"postgresInstance,omitempty"` + CassandraInstance string `json:"cassandraInstance,omitempty"` + KeystoneInstance string `json:"keystoneInstance,omitempty"` + ConfigInstance string `json:"configInstance,omitempty"` + ZookeeperInstance string `json:"zookeeperInstance,omitempty"` + RabbitmqInstance string `json:"rabbitmqInstance,omitempty"` ProvisionmanagerInstance string `json:"provisionmanagerInstance,omitempty"` - CommandInstance string `json:"commandInstance,omitempty"` - ControlInstance string `json:"controlInstance,omitempty"` - WebuiInstance string `json:"webuiInstance,omitempty"` + CommandInstance string `json:"commandInstance,omitempty"` + ControlInstance string `json:"controlInstance,omitempty"` + WebuiInstance string `json:"webuiInstance,omitempty"` } // ContrailmonitorStatus defines the observed state of Contrailmonitor @@ -37,8 +36,8 @@ type ContrailmonitorStatus struct { // INSERT ADDITIONAL STATUS FIELD - define observed state of cluster // Important: Run "operator-sdk generate k8s" to regenerate code after modifying this file // Add custom validation using kubebuilder tags: https://book-v1.book.kubebuilder.io/beyond_basics/generating_crd.html - Active bool `json:"active,omitempty"` - Name string `json:"name"` + Active bool `json:"active,omitempty"` + Name string `json:"name"` } // +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object diff --git a/pkg/apis/contrail/v1alpha1/contrailstatusmonitor_types.go b/pkg/apis/contrail/v1alpha1/contrailstatusmonitor_types.go index 2f0c3f018..db9eaf8fd 100644 --- a/pkg/apis/contrail/v1alpha1/contrailstatusmonitor_types.go +++ b/pkg/apis/contrail/v1alpha1/contrailstatusmonitor_types.go @@ -13,7 +13,7 @@ type Contrailstatusmonitor struct { metav1.TypeMeta `json:",inline"` metav1.ObjectMeta `json:"metadata,omitempty"` - Status string `json:"status,omitempty"` + Status string `json:"status,omitempty"` } // +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object diff --git a/pkg/controller/contrailmonitor/contrailmonitor_controller.go b/pkg/controller/contrailmonitor/contrailmonitor_controller.go index a473bd61f..8cd0ed971 100644 --- a/pkg/controller/contrailmonitor/contrailmonitor_controller.go +++ b/pkg/controller/contrailmonitor/contrailmonitor_controller.go @@ -180,7 +180,7 @@ func (r *ReconcileContrailmonitor) Reconcile(request reconcile.Request) (reconci } serIns := &contrailv1alpha1.Contrailstatusmonitor{ObjectMeta: metav1.ObjectMeta{Name: psql.Name, Namespace: "contrail"}} if err := controllerutil.SetControllerReference(instance, serIns, r.scheme); err != nil { - return reconcile.Result{}, err + return reconcile.Result{}, err } if psql.Status.Active { serIns.Status = "Active" @@ -190,7 +190,7 @@ func (r *ReconcileContrailmonitor) Reconcile(request reconcile.Request) (reconci _, err = controllerutil.CreateOrUpdate(context.Background(), r.client, serIns, func() error { return controllerutil.SetControllerReference(instance, serIns, r.scheme) }) - if err != nil{ + if err != nil { return reconcile.Result{}, nil } @@ -217,7 +217,7 @@ func (r *ReconcileContrailmonitor) Reconcile(request reconcile.Request) (reconci _, err = controllerutil.CreateOrUpdate(context.Background(), r.client, serIns1, func() error { return controllerutil.SetControllerReference(instance, serIns1, r.scheme) }) - if err != nil{ + if err != nil { return reconcile.Result{}, nil } @@ -244,7 +244,7 @@ func (r *ReconcileContrailmonitor) Reconcile(request reconcile.Request) (reconci _, err = controllerutil.CreateOrUpdate(context.Background(), r.client, serIns2, func() error { return controllerutil.SetControllerReference(instance, serIns2, r.scheme) }) - if err != nil{ + if err != nil { return reconcile.Result{}, nil } @@ -267,7 +267,7 @@ func (r *ReconcileContrailmonitor) Reconcile(request reconcile.Request) (reconci _, err = controllerutil.CreateOrUpdate(context.Background(), r.client, serIns3, func() error { return controllerutil.SetControllerReference(instance, serIns3, r.scheme) }) - if err != nil{ + if err != nil { return reconcile.Result{}, nil } @@ -278,12 +278,12 @@ func (r *ReconcileContrailmonitor) Reconcile(request reconcile.Request) (reconci if err = r.kubernetes.Owner(instance).EnsureOwns(cassandra); err != nil { return reconcile.Result{}, err } - cassandraActive := cassandra.IsActive(instance.Spec.ServiceConfiguration.CassandraInstance,request.Namespace, r.client) + cassandraActive := cassandra.IsActive(instance.Spec.ServiceConfiguration.CassandraInstance, request.Namespace, r.client) serIns4 := &contrailv1alpha1.Contrailstatusmonitor{ObjectMeta: metav1.ObjectMeta{Name: cassandra.Name, Namespace: "contrail"}} // if err := controllerutil.SetControllerReference(instance, serIns4, r.scheme); err != nil { // return reconcile.Result{}, err // } - if cassandra.Status.Active == nil || !cassandraActive{ + if cassandra.Status.Active == nil || !cassandraActive { serIns4.Status = "NotActive" } else { serIns4.Status = "Active" @@ -291,7 +291,7 @@ func (r *ReconcileContrailmonitor) Reconcile(request reconcile.Request) (reconci _, err = controllerutil.CreateOrUpdate(context.Background(), r.client, serIns4, func() error { return controllerutil.SetControllerReference(instance, serIns4, r.scheme) }) - if err != nil{ + if err != nil { return reconcile.Result{}, nil } @@ -302,12 +302,12 @@ func (r *ReconcileContrailmonitor) Reconcile(request reconcile.Request) (reconci if err = r.kubernetes.Owner(instance).EnsureOwns(zookeeper); err != nil { return reconcile.Result{}, err } - zookeeperActive := zookeeper.IsActive(instance.Spec.ServiceConfiguration.ZookeeperInstance,request.Namespace, r.client) + zookeeperActive := zookeeper.IsActive(instance.Spec.ServiceConfiguration.ZookeeperInstance, request.Namespace, r.client) serIns5 := &contrailv1alpha1.Contrailstatusmonitor{ObjectMeta: metav1.ObjectMeta{Name: zookeeper.Name, Namespace: "contrail"}} // if err := controllerutil.SetControllerReference(instance, serIns5, r.scheme); err != nil { // return reconcile.Result{}, err // } - if zookeeper.Status.Active == nil || !zookeeperActive{ + if zookeeper.Status.Active == nil || !zookeeperActive { serIns5.Status = "NotActive" } else { serIns5.Status = "Active" @@ -315,11 +315,10 @@ func (r *ReconcileContrailmonitor) Reconcile(request reconcile.Request) (reconci _, err = controllerutil.CreateOrUpdate(context.Background(), r.client, serIns5, func() error { return controllerutil.SetControllerReference(instance, serIns5, r.scheme) }) - if err != nil{ + if err != nil { return reconcile.Result{}, nil } - rabbitmq, err := r.getRabbitmq(instance) if err != nil { return reconcile.Result{}, err @@ -327,12 +326,12 @@ func (r *ReconcileContrailmonitor) Reconcile(request reconcile.Request) (reconci if err = r.kubernetes.Owner(instance).EnsureOwns(rabbitmq); err != nil { return reconcile.Result{}, err } - rabbitmqActive := zookeeper.IsActive(instance.Spec.ServiceConfiguration.RabbitmqInstance,request.Namespace, r.client) + rabbitmqActive := zookeeper.IsActive(instance.Spec.ServiceConfiguration.RabbitmqInstance, request.Namespace, r.client) serIns6 := &contrailv1alpha1.Contrailstatusmonitor{ObjectMeta: metav1.ObjectMeta{Name: rabbitmq.Name, Namespace: "contrail"}} // if err := controllerutil.SetControllerReference(instance, serIns6, r.scheme); err != nil { // return reconcile.Result{}, err // } - if rabbitmq.Status.Active == nil || !rabbitmqActive{ + if rabbitmq.Status.Active == nil || !rabbitmqActive { serIns6.Status = "NotActive" } else { serIns6.Status = "Active" @@ -340,11 +339,10 @@ func (r *ReconcileContrailmonitor) Reconcile(request reconcile.Request) (reconci _, err = controllerutil.CreateOrUpdate(context.Background(), r.client, serIns6, func() error { return controllerutil.SetControllerReference(instance, serIns6, r.scheme) }) - if err != nil{ + if err != nil { return reconcile.Result{}, nil } - config, err := r.getConfig(instance) if err != nil { return reconcile.Result{}, err @@ -352,8 +350,8 @@ func (r *ReconcileContrailmonitor) Reconcile(request reconcile.Request) (reconci if err = r.kubernetes.Owner(instance).EnsureOwns(config); err != nil { return reconcile.Result{}, err } - configActive := config.IsActive(instance.Spec.ServiceConfiguration.ConfigInstance,request.Namespace, r.client) - if !configActive || config.Status.Active == nil{ + configActive := config.IsActive(instance.Spec.ServiceConfiguration.ConfigInstance, request.Namespace, r.client) + if !configActive || config.Status.Active == nil { serIns7 := &contrailv1alpha1.Contrailstatusmonitor{ObjectMeta: metav1.ObjectMeta{Name: config.Name, Namespace: "contrail"}} // if err := controllerutil.SetControllerReference(instance, serIns7, r.scheme); err != nil { // return reconcile.Result{}, err @@ -362,15 +360,15 @@ func (r *ReconcileContrailmonitor) Reconcile(request reconcile.Request) (reconci _, err = controllerutil.CreateOrUpdate(context.Background(), r.client, serIns7, func() error { return controllerutil.SetControllerReference(instance, serIns7, r.scheme) }) - if err != nil{ + if err != nil { return reconcile.Result{}, nil } - }else{ + } else { clist, err := r.getConfiglist() - if err != nil{ + if err != nil { return reconcile.Result{}, err } - for i := 0; i < len(clist.Items); i++{ + for i := 0; i < len(clist.Items); i++ { for _, value := range clist.Items[i].Status.ServiceStatus { for _, n := range value { serIns7 := &contrailv1alpha1.Contrailstatusmonitor{ObjectMeta: metav1.ObjectMeta{Name: n.ModuleName, Namespace: "contrail"}} @@ -379,9 +377,9 @@ func (r *ReconcileContrailmonitor) Reconcile(request reconcile.Request) (reconci // } serIns7.Status = n.ModuleState _, err := controllerutil.CreateOrUpdate(context.Background(), r.client, serIns7, func() error { - return controllerutil.SetControllerReference(instance, serIns7, r.scheme) + return controllerutil.SetControllerReference(instance, serIns7, r.scheme) }) - if err != nil{ + if err != nil { return reconcile.Result{}, err } } @@ -405,15 +403,15 @@ func (r *ReconcileContrailmonitor) Reconcile(request reconcile.Request) (reconci _, err = controllerutil.CreateOrUpdate(context.Background(), r.client, serIns8, func() error { return controllerutil.SetControllerReference(instance, serIns8, r.scheme) }) - if err != nil{ + if err != nil { return reconcile.Result{}, nil } - }else{ + } else { wlist, err := r.getWebuilist() - if err != nil{ + if err != nil { return reconcile.Result{}, err } - for i := 0; i < len(wlist.Items); i++{ + for i := 0; i < len(wlist.Items); i++ { for _, value := range wlist.Items[i].Status.ServiceStatus { for _, n := range value { serIns8 := &contrailv1alpha1.Contrailstatusmonitor{ObjectMeta: metav1.ObjectMeta{Name: n.ModuleName, Namespace: "contrail"}} @@ -422,9 +420,9 @@ func (r *ReconcileContrailmonitor) Reconcile(request reconcile.Request) (reconci // } serIns8.Status = n.ModuleState _, err := controllerutil.CreateOrUpdate(context.Background(), r.client, serIns8, func() error { - return controllerutil.SetControllerReference(instance, serIns8, r.scheme) + return controllerutil.SetControllerReference(instance, serIns8, r.scheme) }) - if err != nil{ + if err != nil { return reconcile.Result{}, err } } @@ -432,11 +430,10 @@ func (r *ReconcileContrailmonitor) Reconcile(request reconcile.Request) (reconci } } - // Check if this Pod already exists err = r.client.Status().Update(context.TODO(), instance) if err != nil { - return reconcile.Result{}, err + return reconcile.Result{}, err } // Pod already exists - don't requeue @@ -444,7 +441,6 @@ func (r *ReconcileContrailmonitor) Reconcile(request reconcile.Request) (reconci return reconcile.Result{}, nil } - func (r *ReconcileContrailmonitor) getPostgres(cr *contrailv1alpha1.Contrailmonitor) (*contrailv1alpha1.Postgres, error) { psql := &contrailv1alpha1.Postgres{} name := types.NamespacedName{Namespace: cr.Namespace, @@ -526,6 +522,3 @@ func (r *ReconcileContrailmonitor) getWebuilist() (*contrailv1alpha1.WebuiList, return wlist, err } - - - diff --git a/test/env/deploy/cluster.yaml b/test/env/deploy/cluster.yaml index 4d90d36c3..ab1e8fc99 100644 --- a/test/env/deploy/cluster.yaml +++ b/test/env/deploy/cluster.yaml @@ -305,3 +305,20 @@ spec: image: registry:5000/common-docker-third-party/contrail/centos-binary-swift-account:train-2005 - name: swiftAccountServer image: registry:5000/common-docker-third-party/contrail/centos-binary-swift-account:train-2005 + + contrailmonitor: + metadata: + labels: + contrail_cluster: cluster1 + name: contrailmonitor + spec: + serviceConfiguration: + memcachedInstance: "memcached" + postgresInstance: "postgres" + cassandraInstance: "cassandra1" + keystoneInstance: "keystone" + rabbitmqInstance: "rabbitmq1" + zookeeperInstance: "zookeeper1" + configInstance: "config1" + provisionmanagerInstance: "provmanager1" + webuiInstance: "webui1" \ No newline at end of file From 48d84bf092a1081691cb1923f14995294bc76d72 Mon Sep 17 00:00:00 2001 From: vijayrap Date: Mon, 10 Aug 2020 01:21:31 -0700 Subject: [PATCH 03/10] updated build file --- pkg/apis/contrail/v1alpha1/BUILD.bazel | 2 -- 1 file changed, 2 deletions(-) diff --git a/pkg/apis/contrail/v1alpha1/BUILD.bazel b/pkg/apis/contrail/v1alpha1/BUILD.bazel index 2901b933d..27aba58b5 100644 --- a/pkg/apis/contrail/v1alpha1/BUILD.bazel +++ b/pkg/apis/contrail/v1alpha1/BUILD.bazel @@ -8,8 +8,6 @@ go_library( "command_types.go", "config_types.go", "control_types.go", - # "contrailmonitor_types.go", - # "contrailstatusmonitor_types.go", "defaults.go", "doc.go", "exec_to_pod.go", From 1b55fa40550db1c05551da14baa4a49b4d07d723 Mon Sep 17 00:00:00 2001 From: vijayrap Date: Mon, 10 Aug 2020 01:33:36 -0700 Subject: [PATCH 04/10] adding buildfile --- pkg/controller/contrailmonitor/BUILD.bazel | 14 ++++---------- 1 file changed, 4 insertions(+), 10 deletions(-) diff --git a/pkg/controller/contrailmonitor/BUILD.bazel b/pkg/controller/contrailmonitor/BUILD.bazel index 54797837c..f41c7b8b9 100644 --- a/pkg/controller/contrailmonitor/BUILD.bazel +++ b/pkg/controller/contrailmonitor/BUILD.bazel @@ -1,5 +1,5 @@ load("@io_bazel_rules_go//go:def.bzl", "go_library", "go_test") - + go_library( name = "go_default_library", srcs = ["contrailmonitor_controller.go"], @@ -7,25 +7,19 @@ go_library( visibility = ["//visibility:public"], deps = [ "//pkg/apis/contrail/v1alpha1:go_default_library", - "//pkg/certificates:go_default_library", - "//pkg/controller/utils:go_default_library", - "//pkg/volumeclaims:go_default_library", "//pkg/k8s:go_default_library", "@io_k8s_api//core/v1:go_default_library", "@io_k8s_apimachinery//pkg/api/errors:go_default_library", - "@io_k8s_apimachinery//pkg/api/resource:go_default_library", + "@io_k8s_sigs_controller_runtime//pkg/controller/controllerutil:go_default_library", + "@io_k8s_sigs_controller_runtime//pkg/handler:go_default_library", "@io_k8s_apimachinery//pkg/apis/meta/v1:go_default_library", - "@io_k8s_apimachinery//pkg/labels:go_default_library", "@io_k8s_apimachinery//pkg/runtime:go_default_library", "@io_k8s_apimachinery//pkg/types:go_default_library", - "@io_k8s_client_go//rest:go_default_library", "@io_k8s_sigs_controller_runtime//pkg/client:go_default_library", "@io_k8s_sigs_controller_runtime//pkg/controller:go_default_library", - "@io_k8s_sigs_controller_runtime//pkg/controller/controllerutil:go_default_library", - "@io_k8s_sigs_controller_runtime//pkg/handler:go_default_library", "@io_k8s_sigs_controller_runtime//pkg/log:go_default_library", - "@io_k8s_sigs_controller_runtime//pkg/manager:go_default_library", "@io_k8s_sigs_controller_runtime//pkg/reconcile:go_default_library", "@io_k8s_sigs_controller_runtime//pkg/source:go_default_library", + "@io_k8s_sigs_controller_runtime//pkg/manager:go_default_library", ], ) From 3c88b0987ed435cf6836e96191fdfaa8b25189f5 Mon Sep 17 00:00:00 2001 From: vijayrap Date: Mon, 10 Aug 2020 01:45:05 -0700 Subject: [PATCH 05/10] removing commented code --- pkg/controller/manager/manager_controller.go | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/pkg/controller/manager/manager_controller.go b/pkg/controller/manager/manager_controller.go index 1d6cee4f4..6653e0827 100644 --- a/pkg/controller/manager/manager_controller.go +++ b/pkg/controller/manager/manager_controller.go @@ -1492,17 +1492,17 @@ func (r *ReconcileManager) Reconcile(request reconcile.Request) (reconcile.Resul return reconcile.Result{}, err } - // if err = r.processCommand(instance); err != nil { - // return reconcile.Result{}, err - // } + if err = r.processCommand(instance); err != nil { + return reconcile.Result{}, err + } if err = r.processKeystone(instance); err != nil { return reconcile.Result{}, err } - // if err = r.processSwift(instance); err != nil { - // return reconcile.Result{}, err - // } + if err = r.processSwift(instance); err != nil { + return reconcile.Result{}, err + } if err = r.processMemcached(instance); err != nil { return reconcile.Result{}, err From 40fad0a3b124c5d398bbc236e2a9b5728787e784 Mon Sep 17 00:00:00 2001 From: vijayrap Date: Mon, 10 Aug 2020 08:27:01 -0700 Subject: [PATCH 06/10] adding build update --- pkg/apis/contrail/v1alpha1/BUILD.bazel | 1 + 1 file changed, 1 insertion(+) diff --git a/pkg/apis/contrail/v1alpha1/BUILD.bazel b/pkg/apis/contrail/v1alpha1/BUILD.bazel index 27aba58b5..65d3cd7e9 100644 --- a/pkg/apis/contrail/v1alpha1/BUILD.bazel +++ b/pkg/apis/contrail/v1alpha1/BUILD.bazel @@ -7,6 +7,7 @@ go_library( "cassandra_types.go", "command_types.go", "config_types.go", + "contrailmonitor_types.go", "control_types.go", "defaults.go", "doc.go", From 37a99925ea80d21e1048c15cca1975763d74ee11 Mon Sep 17 00:00:00 2001 From: vijayrap Date: Mon, 10 Aug 2020 08:37:21 -0700 Subject: [PATCH 07/10] adding build update2 --- pkg/apis/contrail/v1alpha1/BUILD.bazel | 1 + 1 file changed, 1 insertion(+) diff --git a/pkg/apis/contrail/v1alpha1/BUILD.bazel b/pkg/apis/contrail/v1alpha1/BUILD.bazel index 65d3cd7e9..17deb4b6b 100644 --- a/pkg/apis/contrail/v1alpha1/BUILD.bazel +++ b/pkg/apis/contrail/v1alpha1/BUILD.bazel @@ -8,6 +8,7 @@ go_library( "command_types.go", "config_types.go", "contrailmonitor_types.go", + "contrailstatusmonitor_types.go", "control_types.go", "defaults.go", "doc.go", From 15feed522cce7cb96b97cdef49855f384e2f21cb Mon Sep 17 00:00:00 2001 From: vijayrap Date: Mon, 10 Aug 2020 08:53:46 -0700 Subject: [PATCH 08/10] Removing newline at the end of the file --- test/env/deploy/cluster.yaml | 1 - 1 file changed, 1 deletion(-) diff --git a/test/env/deploy/cluster.yaml b/test/env/deploy/cluster.yaml index ab1e8fc99..e46ddb107 100644 --- a/test/env/deploy/cluster.yaml +++ b/test/env/deploy/cluster.yaml @@ -305,7 +305,6 @@ spec: image: registry:5000/common-docker-third-party/contrail/centos-binary-swift-account:train-2005 - name: swiftAccountServer image: registry:5000/common-docker-third-party/contrail/centos-binary-swift-account:train-2005 - contrailmonitor: metadata: labels: From 65daf813db09e96bd944679b7ca2a4cc0b4a923d Mon Sep 17 00:00:00 2001 From: vijayrap Date: Mon, 10 Aug 2020 09:06:28 -0700 Subject: [PATCH 09/10] adding build update3 in controller folder --- pkg/controller/BUILD.bazel | 2 ++ 1 file changed, 2 insertions(+) diff --git a/pkg/controller/BUILD.bazel b/pkg/controller/BUILD.bazel index 23d9995ba..de6398c0f 100644 --- a/pkg/controller/BUILD.bazel +++ b/pkg/controller/BUILD.bazel @@ -6,6 +6,7 @@ go_library( "add_cassandra.go", "add_command.go", "add_config.go", + "add_contrailmonitor.go", "add_control.go", "add_fernetkeymanager.go", "add_keystone.go", @@ -27,6 +28,7 @@ go_library( "//pkg/controller/cassandra:go_default_library", "//pkg/controller/command:go_default_library", "//pkg/controller/config:go_default_library", + "//pkg/controller/contrailmonitor:go_default_library", "//pkg/controller/control:go_default_library", "//pkg/controller/fernetkeymanager:go_default_library", "//pkg/controller/keystone:go_default_library", From 6c11ac2e90c4b5eefd89176148a36635cb3c37b7 Mon Sep 17 00:00:00 2001 From: vijayrap Date: Mon, 10 Aug 2020 21:42:18 -0700 Subject: [PATCH 10/10] removed comments --- .../contrailmonitor_controller.go | 29 ++++--------------- 1 file changed, 6 insertions(+), 23 deletions(-) diff --git a/pkg/controller/contrailmonitor/contrailmonitor_controller.go b/pkg/controller/contrailmonitor/contrailmonitor_controller.go index 8cd0ed971..c6d21c360 100644 --- a/pkg/controller/contrailmonitor/contrailmonitor_controller.go +++ b/pkg/controller/contrailmonitor/contrailmonitor_controller.go @@ -166,7 +166,7 @@ func (r *ReconcileContrailmonitor) Reconcile(request reconcile.Request) (reconci if !instance.GetDeletionTimestamp().IsZero() { return reconcile.Result{}, nil } - instance.Status.Name = "hello" + instance.Status.Name = "contrail-monitor" instance.Status.Active = true psql, err := r.getPostgres(instance) if err != nil { @@ -206,9 +206,6 @@ func (r *ReconcileContrailmonitor) Reconcile(request reconcile.Request) (reconci } serIns1 := &contrailv1alpha1.Contrailstatusmonitor{ObjectMeta: metav1.ObjectMeta{Name: memcached.Name, Namespace: "contrail"}} - // if err := controllerutil.SetControllerReference(instance, serIns1, r.scheme); err != nil { - // return reconcile.Result{}, err - // } if memcached.Status.Active { serIns1.Status = "Active" } else { @@ -233,9 +230,6 @@ func (r *ReconcileContrailmonitor) Reconcile(request reconcile.Request) (reconci } serIns2 := &contrailv1alpha1.Contrailstatusmonitor{ObjectMeta: metav1.ObjectMeta{Name: keystone.Name, Namespace: "contrail"}} - // if err := controllerutil.SetControllerReference(instance, serIns2, r.scheme); err != nil { - // return reconcile.Result{}, err - // } if keystone.Status.Active { serIns2.Status = "Active" } else { @@ -252,18 +246,16 @@ func (r *ReconcileContrailmonitor) Reconcile(request reconcile.Request) (reconci if err != nil { return reconcile.Result{}, err } - // if err = r.kubernetes.Owner(instance).EnsureOwns(provisionmanager); err != nil { - // return reconcile.Result{}, err - // } serIns3 := &contrailv1alpha1.Contrailstatusmonitor{ObjectMeta: metav1.ObjectMeta{Name: provisionmanager.Name, Namespace: "contrail"}} - // if err := controllerutil.SetControllerReference(instance, serIns3, r.scheme); err != nil { - // return reconcile.Result{}, err - // } + if err := controllerutil.SetControllerReference(instance, serIns3, r.scheme); err != nil { + return reconcile.Result{}, err + } if provisionmanager.Status.Active == nil { serIns3.Status = "NotActive" } else { serIns3.Status = "Active" } + _, err = controllerutil.CreateOrUpdate(context.Background(), r.client, serIns3, func() error { return controllerutil.SetControllerReference(instance, serIns3, r.scheme) }) @@ -280,9 +272,6 @@ func (r *ReconcileContrailmonitor) Reconcile(request reconcile.Request) (reconci } cassandraActive := cassandra.IsActive(instance.Spec.ServiceConfiguration.CassandraInstance, request.Namespace, r.client) serIns4 := &contrailv1alpha1.Contrailstatusmonitor{ObjectMeta: metav1.ObjectMeta{Name: cassandra.Name, Namespace: "contrail"}} - // if err := controllerutil.SetControllerReference(instance, serIns4, r.scheme); err != nil { - // return reconcile.Result{}, err - // } if cassandra.Status.Active == nil || !cassandraActive { serIns4.Status = "NotActive" } else { @@ -326,11 +315,8 @@ func (r *ReconcileContrailmonitor) Reconcile(request reconcile.Request) (reconci if err = r.kubernetes.Owner(instance).EnsureOwns(rabbitmq); err != nil { return reconcile.Result{}, err } - rabbitmqActive := zookeeper.IsActive(instance.Spec.ServiceConfiguration.RabbitmqInstance, request.Namespace, r.client) + rabbitmqActive := rabbitmq.IsActive(instance.Spec.ServiceConfiguration.RabbitmqInstance, request.Namespace, r.client) serIns6 := &contrailv1alpha1.Contrailstatusmonitor{ObjectMeta: metav1.ObjectMeta{Name: rabbitmq.Name, Namespace: "contrail"}} - // if err := controllerutil.SetControllerReference(instance, serIns6, r.scheme); err != nil { - // return reconcile.Result{}, err - // } if rabbitmq.Status.Active == nil || !rabbitmqActive { serIns6.Status = "NotActive" } else { @@ -430,14 +416,11 @@ func (r *ReconcileContrailmonitor) Reconcile(request reconcile.Request) (reconci } } - // Check if this Pod already exists err = r.client.Status().Update(context.TODO(), instance) if err != nil { return reconcile.Result{}, err } - // Pod already exists - don't requeue - // reqLogger.Info("Skip reconcile: Pod already exists", "Pod.Namespace", found.Namespace, "Pod.Name", found.Name) return reconcile.Result{}, nil }