bonny v0.4.1 Bonny.Server.Reconciler behaviour
Continuously reconciles a set of kubernetes resources.
reconcile/1
will be executed asynchronously with each result returned from reconcilable_resources/0
.
reconcilable_resources/0
has a default implementation of running K8s.Client.stream/2
with reconcile_operation/0
.
For a working example of the Reconciler
see Bonny.Server.Scheduler
Examples
Print every pod. Not very useful, but a simple copy-paste example.
defmodule PodPrinterReconciler do
use Bonny.Server.Reconciler, frequency: 15
@impl true
def reconcile(pod) do
IO.inspect(pod)
:ok
end
@impl true
def reconcile_operation(), do: K8s.Client.list("v1", :pods, namespace: "default")
@impl true
def reconcilable_resources() do
operation = reconcile_operation()
cluster = Bonny.Config.cluster_name()
K8s.Client.stream(operation, cluster)
end
end
PodPrinterReconciler.start_link()
A quick and dirty chaos monkey for pods. 20% chance of eviction every 15 seconds.
defmodule ChaosMonkeyReconciler do
use Bonny.Server.Reconciler, frequency: 15
@percent_chance_evicted 20
@impl true
def reconcile(pod) do
chance = :rand.uniform(100)
if chance < @percent_chance_evicted do
my_function_to_evict_pod(pod)
end
:ok
end
@impl true
def reconcile_operation(), do: K8s.Client.list("v1", :pods, namespace: :all)
@impl true
def reconcilable_resources() do
operation = reconcile_operation()
cluster = Bonny.Config.cluster_name()
K8s.Client.stream(operation, cluster)
end
end
ChaosMonkeyReconciler.start_link()
Reconcile a CRD's resources every 15 seconds
defmodule MyCustomResourceReconciler do
use Bonny.Server.Reconciler, frequency: 15
@impl true
def reconcile(resource) do
# You should do something much cooler than inspect here...
IO.inspect(resource)
:ok
end
@impl true
def reconcile_operation() do
K8s.Client.list("example.com/v1", "MyCustomResourceDef", namespace: :all)
end
@impl true
def reconcilable_resources() do
operation = reconcile_operation()
cluster = Bonny.Config.cluster_name()
K8s.Client.stream(operation, cluster)
end
end
MyCustomResourceReconciler.start_link()
Link to this section Summary
Functions
Runs a Reconcilers
reconcile/1
for each resource return by reconcilable_resources/0
Schedules a run of a started Reconciler
Callbacks
(Optional) List of resources to be reconciled.
Reconciles a resource. This will receive a list of resources from reconcilable_resources/0
.
K8s.Operation
to reconcile.
Link to this section Functions
run(module)
Runs a Reconcilers
reconcile/1
for each resource return by reconcilable_resources/0
schedule(pid, frequency)
schedule(pid(), pos_integer()) :: reference()
schedule(pid(), pos_integer()) :: reference()
Schedules a run of a started Reconciler
Link to this section Callbacks
reconcilable_resources()
(Optional) List of resources to be reconciled.
Default implementation is to stream all resources (reconcile_operation/0
) from the cluster (Bonny.Config.cluster_name/0
).
reconcile(map)
Reconciles a resource. This will receive a list of resources from reconcilable_resources/0
.
reconcile_operation()
reconcile_operation() :: K8s.Operation.t()
reconcile_operation() :: K8s.Operation.t()
K8s.Operation
to reconcile.
Examples
def reconcile_operation() do
K8s.Client.list("v1", :pods, namespace: :all)
end