Packages
k8s
2.0.1
2.8.0
2.7.0
2.6.2
2.6.1
2.6.0
2.5.0
2.4.2
2.4.1
2.4.0
2.3.0
2.2.0
2.1.1
2.1.0
2.0.3
2.0.2
2.0.1
2.0.0
2.0.0-rc.6
2.0.0-rc.5
2.0.0-rc.4
2.0.0-rc.3
2.0.0-rc.2
2.0.0-rc.1
2.0.0-rc.0
1.2.1
1.2.0
1.1.10
1.1.9
1.1.8
1.1.7
1.1.6
1.1.5
1.1.4
1.1.3
1.1.2
1.1.1
1.1.0
1.0.0
1.0.0-rc1
0.5.2
0.5.1
0.5.0
0.5.0-rc.2
0.5.0-rc.1
0.4.0
0.3.2
0.3.1
0.3.0
0.2.13
0.2.12
0.2.11
0.2.10
0.2.9
0.2.8
0.2.7
retired
0.2.6
0.2.5
0.2.4
0.2.3
0.2.2
0.2.1
0.2.0
0.1.3
Kubernetes API Client for Elixir
Current section
Files
Jump to
Current section
Files
lib/k8s/middleware.ex
defmodule K8s.Middleware do
@moduledoc """
Interface for interacting with cluster middleware
While middlewares are applied to `K8s.Middleware.Request`s they are registerd by a _cluster name_ which is an atom.
This allows multiple connections to be used (different credentials) with the same middleware stack.
Any cluster name that has _not_ been initialized, will automatically have the default stack applied.
## Examples
Using default middleware
iex> conn = %K8s.Conn{}
...> req = %K8s.Middlware.Request{}
...> K8s.Middleware.run(req)
Adding middlware to a cluster
iex> conn = %K8s.Conn{cluster_name: "foo"}
...> K8s.Middleware.add("foo", :request, MyMiddlewareModule)
...> req = %K8s.Middlware.Request{}
...> K8s.Middleware.run(req)
Setting/Replacing middleware on a cluster
iex> conn = %K8s.Conn{cluster_name: "foo"}
...> K8s.Middleware.set("foo", :request, [MyMiddlewareModule, OtherModule])
...> req = %K8s.Middlware.Request{}
...> K8s.Middleware.run(req)
"""
alias K8s.Middleware.{Error, Request}
@spec run(Request.t(), list(module())) :: {:ok, Request.t()} | {:error, Error.t()}
def run(%Request{} = req, middlewares) do
result =
Enum.reduce_while(middlewares, req, fn middleware, req ->
case middleware.call(req) do
{:ok, updated_request} ->
{:cont, updated_request}
{:error, error} ->
{:halt, error(middleware, req, error)}
end
end)
case result do
%Request{} -> {:ok, result}
%Error{} -> {:error, result}
end
end
@spec error(module(), Request.t(), any()) :: Error.t()
defp error(middleware, %Request{} = req, error) do
%K8s.Middleware.Error{
middleware: middleware,
error: error,
request: req
}
end
end