mruoss

mruoss

Kubegen - Generate resource based Kubernetes clients

Kubegen generates Kubernetes clients in the form of resource based client modules directly into your project.

I have been co-maintaining the k8s library for some time now and while it is very dynamic and mighty, I always found it a bit big and clumsy for simple use cases. With Kubegen I went down a different road. Kubegen generates per resource client modules into your project. They are super straight-forward to use:

# list ConfigMaps in the default namespace:
{:ok, resp} = MyApp.K8sClient.Core.V1.ConfigMap.list("default")

# get the ConfigMap with name "my-config" in namespace "default":
{:ok, resp} = MyApp.K8sClient.Core.V1.ConfigMap.get("default", "my-config")

The generated modules use Kubereq to load the Kubernetes configuration and prepare the Req.Request for operations on the resource. Finally, it’s plain Req to make the HTTP requests and most function return {:ok, Req.Response.t()} in the happy case.

Generate your first Client Module

Generating your first client is quite straight-foward. Have a look at the project’s README.md on detailed instructions. But in a nutshell, the library offers a Mix task (mix kubegen) which reads some entries from your application configuration and generates the configured modules.

Generating clients for ConfigMap, Deployment, ClusterRole and a CRD looks like this:

Where’s the Kubernetes Configuration?

As part of the configuration you need to tell Kubegen how the Kubeconfig is loaded. Kubereq comes with a default loading pipeline which does the job in most basic setups (i.e. load the current context from $HOME/.kube/config or when running on a Kuberenetes cluster).

Most Liked

mruoss

mruoss

kubereq v0.4.0

I have released kubereq v0.4.0 today. See the changelog below. BTW: kino_k8s v2.0.0 was also released today. It uses kubereq now and all smart cells were consolidated into a single cell.

:warning: Breaking Changes :warning:

  • Kubereq.watch/3 and Kubereq.watch_single/4 now also return t:Kubereq.response/0.
    The stream which was returned directly before is now accessible through the :body
    key of the returned t:Req.Response.t/0 struct. The :stream_to option was removed.
    Kubereq.Watcher was added for implementing long running watch event handlers.

Changes

  • Kubereq.wait_until/5 gets by without Task.async/1.
  • Kubereq.create/3, Kubereq.update/3 and Kubereq.apply/5: Extract api_verison and kind from passed resource.

Added

  • Kubereq.Watcher - A behaviour module for implementing a Kubernetes watch event handler.
  • Streaming for paginated list operation via the :into option of Kubereq.list/3
    #46
  • Kubereq.can_i/3 - Checks whether the authenticated user is authorized to perform a specific action.
  • Error raising variants for all functions in Kubereq except Kubereq.wait_until/5.

Where Next?

Popular in Libraries Top

vic
Expat is a tiny experiment I did for extracting patterns and being able to reuse them (compose and share patterns between elixir librarie...
New
RobertDober
Earmark is a pure-Elixir Markdown converter. It is intended to be used as a library (just call Earmark.as_html), but can also be used as...
239 11851 134
New
marcuslankenau
I feel kind of stuck with the absence of a proper xml library for Elixir. Currently I use SweetXML which was ok for me more or less to pa...
New
kip
Image is an image processing library for Elixir. It is based upon the fabulous vix library that provides a libvips wrapper for Elixir. I...
574 16576 179
New
asiniy
Hey there! I wrote a download elixir package which does exactly what its name about - an easy way to download files. I saw solutions ...
New
michalmuskala
Hello everybody. I have just released Jason - a new JSON library. You might be wondering, why do we need a new library? The primary foc...
New
Crowdhailer
I have been updating a library that allows you to pipe between functions that use the erlang result tuple convention. Assuming you have...
New
MRdotB
I needed to reuse React components from my Chrome extension in my Phoenix/LiveView backend. I noticed that for Svelte/Vue, there are live...
New
tmbb
PhoenixWS - Websockets over Phoenix Channels Source code on Github here: https://github.com/tmbb/phoenix_ws Phoenix channels are a great...
New
Antrater
Hi everyone! I’m thrilled to announce a huge thing. We have been developing Elixir Moon Design System for quite a while. We are finally ...
New

Other popular topics Top

Qqwy
Update: How to use the Blogs & Podcasts section You can post links to your blog posts or podcasts either in one of the Official Blog...
3268 119930 1237
New
fireproofsocks
I’m working on defining a simple Ecto schema for a table (in PostGres), but I don’t see where I can define a column as NOT NULL. Conside...
New
jononomo
I am trying to figure out how Mix knows whether the environment is test, dev, or prod -- where is this set? Thanks.
New
chrismccord
Phoenix 1.4.0 released Phoenix 1.4 is out! This release ships with exciting new features, most notably with HTTP2 support, improved deve...
688 30048 115
New
dotdotdotPaul
Okay, I'm having a heck of a time trying to figure out how to best handle the validation of belongs_to associations in Ecto. I'm sure I'...
New
Tee
can someone please explain to me how Enum.reduce works with maps
New
script
If I have a string “1000 cfu/ml” . I want to remove the characters and / and space . So the string is like this "1000" What is the ...
New
myronmarston
The Elixir Typespec docs show the following syntax for keyword lists in typespecs: # ... | [key: type] # keyword lis...
New
mgjohns61585
Could someone help me? I'm making my first elixir program, number guessing game. I can't figure out how to convert the user's guess from ...
New
ovidiubadita
Hey all, I discovered Elixir and I love it. I always wanted to learn a functional programming and I intended to go for Haskell, but afte...
New

Sub Categories:

We're in Beta

About us Mission Statement