Skip to content

Commit

Permalink
feat: add events entropy gvk
Browse files Browse the repository at this point in the history
Signed-off-by: r3drun3 <simone.ragonesi@sighup.io>
  • Loading branch information
R3DRUN3 committed Nov 30, 2023
1 parent 0aaa6d2 commit e633a00
Show file tree
Hide file tree
Showing 14 changed files with 464 additions and 9 deletions.
9 changes: 9 additions & 0 deletions PROJECT
Original file line number Diff line number Diff line change
Expand Up @@ -80,4 +80,13 @@ resources:
kind: ApiServerOverload
path: stackzoo.io/khaos/api/v1alpha1
version: v1alpha1
- api:
crdVersion: v1
namespaced: true
controller: true
domain: stackzoo.io
group: khaos
kind: EventsEntropy
path: stackzoo.io/khaos/api/v1alpha1
version: v1alpha1
version: "3"
74 changes: 65 additions & 9 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,7 @@ Currently, Khaos does not implement *cronjobs*; any scheduling of Khaos Custom R
- [X] Inject resource constraints in pods
- [X] Add o remove labels in pods
- [X] Flood api server with calls
- [X] Create custom kubernetes events
- [X] Exec commands inside pods (**experimental**).


Expand Down Expand Up @@ -85,14 +86,15 @@ Install and list the operator CRDs with the following command:
make install && kubectl get crds

NAME CREATED AT
apiserveroverloads.khaos.stackzoo.io 2023-11-30T06:25:59Z
commandinjections.khaos.stackzoo.io 2023-11-30T06:25:59Z
configmapdestroyers.khaos.stackzoo.io 2023-11-30T06:25:59Z
containerresourcechaos.khaos.stackzoo.io 2023-11-30T06:25:59Z
nodedestroyers.khaos.stackzoo.io 2023-11-30T06:25:59Z
poddestroyers.khaos.stackzoo.io 2023-11-30T06:25:59Z
podlabelchaos.khaos.stackzoo.io 2023-11-30T06:25:59Z
secretdestroyers.khaos.stackzoo.io 2023-11-30T06:25:59Z
apiserveroverloads.khaos.stackzoo.io 2023-11-30T08:43:49Z
commandinjections.khaos.stackzoo.io 2023-11-30T08:43:49Z
configmapdestroyers.khaos.stackzoo.io 2023-11-30T08:43:49Z
containerresourcechaos.khaos.stackzoo.io 2023-11-30T08:43:49Z
eventsentropies.khaos.stackzoo.io 2023-11-30T08:43:49Z
nodedestroyers.khaos.stackzoo.io 2023-11-30T08:43:49Z
poddestroyers.khaos.stackzoo.io 2023-11-30T08:43:49Z
podlabelchaos.khaos.stackzoo.io 2023-11-30T08:43:49Z
secretdestroyers.khaos.stackzoo.io 2023-11-30T08:43:49Z
```

In order to run the operator on your cluster (current context - i.e. whatever cluster `kubectl cluster-info` shows) run:
Expand Down Expand Up @@ -122,7 +124,7 @@ In vscode you need to create a `.vscode/launch.json` file similar to the followi



## Examples
## Some Examples

In order to test the following examples, you can use the local *KinD* cluster (see the `Local Testing and Debugging` section).
Once you have the cluster up and running, procede to create a new namespace called `prod` and apply an example deployment:
Expand Down Expand Up @@ -482,6 +484,60 @@ metadata:













<details>
<summary>CREATE CUSTOM KUBERNETES EVENTS</summary>

Apply the following `EventsEntropy` manifest:

```yaml
apiVersion: khaos.stackzoo.io/v1alpha1
kind: EventsEntropy
metadata:
name: example-eventsentropy
spec:
events:
- "Custom event 1 with some gibberish - dfsdfsdffdgt egeg4e 😊"
- "Custom event 2 - with some gibberish dfsdfsdffdgt 676565 🥴"
- "Custom event 3 - with some gibberish 8/ihfwgf sufdh 🤪"
```

```console
kubectl apply -f examples/events-entropy.yaml
```

Now retrieve kubernetes events via kubectl:
```console
kubectl get events | grep gibberish
<unknown> Custom event 1 with some gibberish - dfsdfsdffdgt egeg4e 😊
<unknown> Custom event 3 - with some gibberish 8/ihfwgf sufdh 🤪
<unknown> Custom event 2 - with some gibberish dfsdfsdffdgt 676565 🥴
```


</details>










<br/>


Expand Down
60 changes: 60 additions & 0 deletions api/v1alpha1/eventsentropy_types.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,60 @@
/*
Copyright 2023.
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.

// EventsEntropySpec defines the desired state of EventsEntropy
type EventsEntropySpec struct {
Events []string `json:"events"`
}

// EventsEntropyStatus defines the observed state of EventsEntropy
type EventsEntropyStatus 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

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

Spec EventsEntropySpec `json:"spec,omitempty"`
Status EventsEntropyStatus `json:"status,omitempty"`
}

//+kubebuilder:object:root=true

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

func init() {
SchemeBuilder.Register(&EventsEntropy{}, &EventsEntropyList{})
}
94 changes: 94 additions & 0 deletions api/v1alpha1/zz_generated.deepcopy.go

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

7 changes: 7 additions & 0 deletions cmd/main.go
Original file line number Diff line number Diff line change
Expand Up @@ -145,6 +145,13 @@ func main() {
setupLog.Error(err, "unable to create controller", "controller", "ApiServerOverload")
os.Exit(1)
}
if err = (&controller.EventsEntropyReconciler{
Client: mgr.GetClient(),
Scheme: mgr.GetScheme(),
}).SetupWithManager(mgr); err != nil {
setupLog.Error(err, "unable to create controller", "controller", "EventsEntropy")
os.Exit(1)
}
//+kubebuilder:scaffold:builder

if err := mgr.AddHealthzCheck("healthz", healthz.Ping); err != nil {
Expand Down
51 changes: 51 additions & 0 deletions config/crd/bases/khaos.stackzoo.io_eventsentropies.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,51 @@
---
apiVersion: apiextensions.k8s.io/v1
kind: CustomResourceDefinition
metadata:
annotations:
controller-gen.kubebuilder.io/version: v0.13.0
name: eventsentropies.khaos.stackzoo.io
spec:
group: khaos.stackzoo.io
names:
kind: EventsEntropy
listKind: EventsEntropyList
plural: eventsentropies
singular: eventsentropy
scope: Namespaced
versions:
- name: v1alpha1
schema:
openAPIV3Schema:
description: EventsEntropy is the Schema for the eventsentropies 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: EventsEntropySpec defines the desired state of EventsEntropy
properties:
events:
items:
type: string
type: array
required:
- events
type: object
status:
description: EventsEntropyStatus defines the observed state of EventsEntropy
type: object
type: object
served: true
storage: true
subresources:
status: {}
3 changes: 3 additions & 0 deletions config/crd/kustomization.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@ resources:
- bases/khaos.stackzoo.io_podlabelchaos.yaml
- bases/khaos.stackzoo.io_configmapdestroyers.yaml
- bases/khaos.stackzoo.io_apiserveroverloads.yaml
- bases/khaos.stackzoo.io_eventsentropies.yaml
#+kubebuilder:scaffold:crdkustomizeresource

patches:
Expand All @@ -23,6 +24,7 @@ patches:
#- path: patches/webhook_in_podlabelchaos.yaml
#- path: patches/webhook_in_configmapdestroyers.yaml
#- path: patches/webhook_in_apiserveroverloads.yaml
#- path: patches/webhook_in_eventsentropies.yaml
#+kubebuilder:scaffold:crdkustomizewebhookpatch

# [CERTMANAGER] To enable cert-manager, uncomment all the sections with [CERTMANAGER] prefix.
Expand All @@ -35,6 +37,7 @@ patches:
#- path: patches/cainjection_in_podlabelchaos.yaml
#- path: patches/cainjection_in_configmapdestroyers.yaml
#- path: patches/cainjection_in_apiserveroverloads.yaml
#- path: patches/cainjection_in_eventsentropies.yaml
#+kubebuilder:scaffold:crdkustomizecainjectionpatch

# [WEBHOOK] To enable webhook, uncomment the following section
Expand Down
31 changes: 31 additions & 0 deletions config/rbac/eventsentropy_editor_role.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
# permissions for end users to edit eventsentropies.
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
labels:
app.kubernetes.io/name: clusterrole
app.kubernetes.io/instance: eventsentropy-editor-role
app.kubernetes.io/component: rbac
app.kubernetes.io/created-by: khaos
app.kubernetes.io/part-of: khaos
app.kubernetes.io/managed-by: kustomize
name: eventsentropy-editor-role
rules:
- apiGroups:
- khaos.stackzoo.io
resources:
- eventsentropies
verbs:
- create
- delete
- get
- list
- patch
- update
- watch
- apiGroups:
- khaos.stackzoo.io
resources:
- eventsentropies/status
verbs:
- get
Loading

0 comments on commit e633a00

Please sign in to comment.