DevOpsHiveHQ / devops-coding-mentorship

Helping DevOps Engineers to write more code
https://github.com/orgs/DevOpsHiveHQ/projects/1
94 stars 1 forks source link

Support KRM in Kustomize plugin - PolicyGenerator #7

Open aabouzaid opened 1 year ago

aabouzaid commented 1 year ago

Intro

Kustomize (the official tool to create K8s IaC) adopted the new Kubernetes declarative configurations known as KRM Functions. The new style is used as a unified way to interact with Kustomize plugins. There are 2 ways to use KRM in the plugins: Containerized KRM Functions and Exec KRM functions.

Not all Kustomize plugins adopted the new format; hence the goal of this task is to support the new method in existing plugins, namely, PolicyGenerator.

Acquired Skills

By doing this task, you will gain the following skills:

The Challange

Support KRM in PolicyGenerator Kustomize plugin.

The Task

Notes and Tips

Related Links

hamza-m-masood commented 3 weeks ago

I will attempt to do this task.

hamza-m-masood commented 3 weeks ago

I am not able to get the kustomize-plugin-kubeconform project to run. I noticed this line in the go.mod file:

replace github.com/yannh/kubeconform => ../kubeconform

ref

I assumed that I needed your fork to run this plugin. So I went to your profile and grabbed your fork: https://github.com/aabouzaid/kubeconform

After cloning the fork, I get the following error:

main.go:11:2: import "github.com/yannh/kubeconform/cmd/kubeconform" is a program, not an importable package
hamza-m-masood commented 3 weeks ago

I'm still seeing what the best way would be to run introduce KRM functions to that PolicyGenerator project. I need a deeper understanding of KRM functions.

hamza-m-masood commented 3 weeks ago

I just read your blog post about krm functions: https://tech.aabouzaid.com/2022/07/notes-about-krm-functions-kustomize.html

The PR you made in the Kustomize repo to fix the exec feature is very impressive!! Nice job!!

aabouzaid commented 3 weeks ago

Thanks @hamza-m-masood :raised_hands:

Take a look at the PR I created to support KRM in SopsSecretGenerator. It will give you some directions about how to implement it.

aabouzaid commented 3 weeks ago

You can also check Kustomize Merger as a good example of using kyaml/fn/framework.

hamza-m-masood commented 2 weeks ago

To be honest, I am a bit overwhelmed. I am very slowly making progress. I am still quite shaky on how KRM functions actually work and how the resourceList type is generated. I am not sure if the resourceList is made by kustomize and then passed to the go binary/container, or does the go program itself make the resourceList? I need to do more research to find out.

I made this program to learn more: https://gist.github.com/hamza-m-masood/077d34a35a5892fcdab93eba4524f4e2 I modified the annotation and label using KRM functions in the kyaml package.

@aabouzaid Looking at my program above, would setAnnotationFn and setLabelFn be considered KRM functions?

aabouzaid commented 2 weeks ago

@hamza-m-masood It's a good start :ok_hand: Let's have a paring session next week.