Packages
k8s
0.2.4
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/operation.ex
defmodule K8s.Operation do
@moduledoc """
Encapsulates a k8s swagger operations
"""
@derive {Jason.Encoder, except: [:path_params]}
@type t :: %__MODULE__{
method: atom(),
verb: atom(),
group_version: binary(),
kind: binary() | atom(),
resource: map(),
path_params: keyword(atom())
}
@allow_http_body [:put, :patch, :post]
@verb_map %{
list_all_namespaces: :get,
list: :get,
deletecollection: :delete,
create: :post,
update: :put,
patch: :patch
}
defstruct [:method, :verb, :group_version, :kind, :resource, :path_params]
@doc """
Builds an `Operation` given an verb and a k8s resource.
## Examples
iex> deploy = %{"apiVersion" => "apps/v1", "kind" => "Deployment", "metadata" => %{"namespace" => "default", "name" => "nginx"}}
...> K8s.Operation.build(:put, deploy)
%K8s.Operation{
method: :put,
verb: :put,
resource: %{"apiVersion" => "apps/v1", "kind" => "Deployment", "metadata" => %{"namespace" => "default", "name" => "nginx"}},
path_params: [namespace: "default", name: "nginx"],
group_version: "apps/v1",
kind: "Deployment"
}
"""
@spec build(atom, map) :: __MODULE__.t()
def build(
verb,
resource = %{
"apiVersion" => v,
"kind" => k,
"metadata" => %{"name" => name, "namespace" => ns}
}
) do
build(verb, v, k, [namespace: ns, name: name], resource)
end
def build(
verb,
resource = %{"apiVersion" => v, "kind" => k, "metadata" => %{"name" => name}}
) do
build(verb, v, k, [name: name], resource)
end
def build(
verb,
resource = %{"apiVersion" => v, "kind" => k, "metadata" => %{"namespace" => ns}}
) do
build(verb, v, k, [namespace: ns], resource)
end
def build(verb, resource = %{"apiVersion" => v, "kind" => k}) do
build(verb, v, k, [], resource)
end
@doc """
Builds an `Operation` given an verb and a k8s resource info
## Examples
iex> K8s.Operation.build(:get, "apps/v1", :deployment, [namespace: "default", name: "nginx"])
%K8s.Operation{
method: :get,
verb: :get,
resource: nil,
path_params: [namespace: "default", name: "nginx"],
group_version: "apps/v1",
kind: :deployment
}
"""
@spec build(atom, binary, atom | binary, keyword(), map() | nil) :: __MODULE__.t()
def build(verb, group_version, kind, path_params, resource \\ nil) do
http_method = @verb_map[verb] || verb
operation_resource =
case http_method do
method when method in @allow_http_body -> resource
_ -> nil
end
%__MODULE__{
method: http_method,
verb: verb,
resource: operation_resource,
group_version: group_version,
kind: kind,
path_params: path_params
}
end
end