Skip to content

Commit

Permalink
feat(operator): Bootstrap KeptnEvaluationProvider and KeptnEvaluation…
Browse files Browse the repository at this point in the history
… Definition CRDs (#165)

Signed-off-by: odubajDT <[email protected]>
  • Loading branch information
odubajDT authored Oct 13, 2022
1 parent 271f5a8 commit 03d2346
Show file tree
Hide file tree
Showing 18 changed files with 665 additions and 0 deletions.
39 changes: 39 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -253,6 +253,45 @@ A Task is responsible for executing the TaskDefinition of a workload.
The execution is done spawning a K8s Job to handle a single Task.
In its state, it keeps track of the current status of the K8s Job created.

### Keptn Evaluation Definition
A `KeptnEvaluationDefinition` is a CRD used to define evaluation tasks that can be run by the Keptn Lifecycle Controller
as part of pre- and post-analysis phases of a workload or application.

A Keptn evaluation definition looks like the following:

```yaml
apiVersion: keptn.sh/v1
kind: KeptnEvaluationDefinition
metadata:
name: my-prometheus-evaluation
spec:
source: prometheus
objectives:
- name: query-1
query: "xxxx"
evaluationTarget: <20
- name: query-2
query: "yyyy"
evaluationTarget: >4
```


### Keptn Evaluation Provider
A `KeptnEvaluationProvider` is a CRD used to define evaluation provider, which will provide data for the
pre- and post-analysis phases of a workload or application.

A Keptn evaluation provider looks like the following:

```yaml
apiVersion: keptn.sh/v1
kind: KeptnEvaluationProvider
metadata:
name: prometheus
spec:
targetServer: "http://prometheus-k8s.monitoring.svc.cluster.local:9090"
secretName: prometheusLoginCredentials
```


## Install a dev build

Expand Down
17 changes: 17 additions & 0 deletions operator/PROJECT
Original file line number Diff line number Diff line change
Expand Up @@ -58,4 +58,21 @@ resources:
kind: KeptnAppVersion
path: github.com/keptn-sandbox/lifecycle-controller/operator/api/v1alpha1
version: v1alpha1
- api:
crdVersion: v1
namespaced: true
controller: true
domain: keptn.sh
group: lifecycle
kind: KeptnEvaluationDefinition
path: github.com/keptn-sandbox/lifecycle-controller/operator/api/v1alpha1
version: v1alpha1
- api:
crdVersion: v1
namespaced: true
domain: keptn.sh
group: lifecycle
kind: KeptnEvaluationProvider
path: github.com/keptn-sandbox/lifecycle-controller/operator/api/v1alpha1
version: v1alpha1
version: "3"
68 changes: 68 additions & 0 deletions operator/api/v1alpha1/keptnevaluationdefinition_types.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,68 @@
/*
Copyright 2022.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
*/

package 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.

// KeptnEvaluationDefinitionSpec defines the desired state of KeptnEvaluationDefinition
type KeptnEvaluationDefinitionSpec struct {
Source string `json:"source"`
Objectives []Objective `json:"objectives"`
}

type Objective struct {
Name string `json:"name"`
Query string `json:"query"`
EvaluationTarget string `json:"evaluationTarget"`
}

// KeptnEvaluationDefinitionStatus defines the observed state of KeptnEvaluationDefinition
type KeptnEvaluationDefinitionStatus struct {
// INSERT ADDITIONAL STATUS FIELD - define observed state of cluster
// Important: Run "make" to regenerate code after modifying this file
}

//+kubebuilder:object:root=true
//+kubebuilder:subresource:status
//+kubebuilder:resource:path=keptnevaluationdefinitions,shortName=ked

// KeptnEvaluationDefinition is the Schema for the keptnevaluationdefinitions API
type KeptnEvaluationDefinition struct {
metav1.TypeMeta `json:",inline"`
metav1.ObjectMeta `json:"metadata,omitempty"`

Spec KeptnEvaluationDefinitionSpec `json:"spec,omitempty"`
Status KeptnEvaluationDefinitionStatus `json:"status,omitempty"`
}

//+kubebuilder:object:root=true

// KeptnEvaluationDefinitionList contains a list of KeptnEvaluationDefinition
type KeptnEvaluationDefinitionList struct {
metav1.TypeMeta `json:",inline"`
metav1.ListMeta `json:"metadata,omitempty"`
Items []KeptnEvaluationDefinition `json:"items"`
}

func init() {
SchemeBuilder.Register(&KeptnEvaluationDefinition{}, &KeptnEvaluationDefinitionList{})
}
62 changes: 62 additions & 0 deletions operator/api/v1alpha1/keptnevaluationprovider_types.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,62 @@
/*
Copyright 2022.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
*/

package 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.

// KeptnEvaluationProviderSpec defines the desired state of KeptnEvaluationProvider
type KeptnEvaluationProviderSpec struct {
TargetServer string `json:"targetServer"`
SecretName string `json:"secretName"`
}

// KeptnEvaluationProviderStatus defines the observed state of KeptnEvaluationProvider
type KeptnEvaluationProviderStatus struct {
// INSERT ADDITIONAL STATUS FIELD - define observed state of cluster
// Important: Run "make" to regenerate code after modifying this file
}

//+kubebuilder:object:root=true
//+kubebuilder:subresource:status
//+kubebuilder:resource:path=keptnevaluationproviders,shortName=kep

// KeptnEvaluationProvider is the Schema for the keptnevaluationproviders API
type KeptnEvaluationProvider struct {
metav1.TypeMeta `json:",inline"`
metav1.ObjectMeta `json:"metadata,omitempty"`

Spec KeptnEvaluationProviderSpec `json:"spec,omitempty"`
Status KeptnEvaluationProviderStatus `json:"status,omitempty"`
}

//+kubebuilder:object:root=true

// KeptnEvaluationProviderList contains a list of KeptnEvaluationProvider
type KeptnEvaluationProviderList struct {
metav1.TypeMeta `json:",inline"`
metav1.ListMeta `json:"metadata,omitempty"`
Items []KeptnEvaluationProvider `json:"items"`
}

func init() {
SchemeBuilder.Register(&KeptnEvaluationProvider{}, &KeptnEvaluationProviderList{})
}
Loading

0 comments on commit 03d2346

Please sign in to comment.