Awesome
Kubereq
Used by kubegen
to build Resource based
Kubernetes API clients using Req with kubereq
.
While this library can be used directly, it is easier to let
kubegen
generate the API client modules
for you. The resulting clients are then using kubereq
to get the prepared
Req.Request
struct and make the requests to the Kubernetes API Server.
Installation
The package can be installed by adding kubereq
to your list of dependencies in
mix.exs
:
def deps do
[
{:kubereq, "~> 0.4.0"}
]
end
The docs can be found at https://hexdocs.pm/kubereq.
Usage
This library can be used with plain Req
but the functions in this module
provide an easier API to people used to kubectl
and friends.
Plain Req
Use Kubereq.Kubeconfig.Default
to create connection to cluster and
plain Req.request()
to make the request
req = Req.new() |> Kubereq.attach()
Req.request!(req,
api_version: "v1",
kind: "ServiceAccount",
operation: :get,
path_params: [namespace: "default", name: "default"]
)
You can pass your own Kubeconfigloader pipeline when attaching:
req = Req.new() |> Kubereq.attach(kubeconfig: {Kubereq.Kubeconfig.File, path: "/path/to/kubeconfig.yaml"})
Req.request!(req,
api_version: "v1",
kind: "ServiceAccount",
operation: :get,
path_params: [namespace: "default", name: "default"]
)
Prepare a Req
struct for a specific resource:
sa_req = Req.new() |> Kubereq.attach(api_version: "v1", kind: "ServiceAccount")
Req.request!(sa_req, operation: :get, path_params: [namespace: "default", name: "default"])
Req.request!(sa_req, operation: :list, path_params: [namespace: "default"])
Kubereq API
While this library can attach to any Req
struct, it is sometimes easier
to prepare Req
for a specific resource and then use the functions
defined in the Kubereq
module.
sa_req = Req.new() |> Kubereq.attach(api_version: "v1", kind: "ServiceAccount")
Kubereq.get(sa_req, "my-namespace", "default")
Kubereq.list(sa_req, "my-namespace")
Or use the functions right away, defining the resource through options:
req = Req.new() |> Kubereq.attach()
Kubereq.get(req, "my-namespace", "default", api_version: "v1", kind: "ServiceAccount")
# get the "status" subresource of the default namespace
Kubereq.get(req, "my-namespace", api_version: "v1", kind: "Namespace", subresource: "status")
For resources defined by Kubernetes, the api_version
can be omitted:
Req.new()
|> Kubereq.attach(kind: "Namespace")
|> Kubereq.get("my-namespace")