aboutsummaryrefslogtreecommitdiff
path: root/apps/dreki/src/drekid_tasks_store.erl
diff options
context:
space:
mode:
Diffstat (limited to 'apps/dreki/src/drekid_tasks_store.erl')
-rw-r--r--apps/dreki/src/drekid_tasks_store.erl71
1 files changed, 71 insertions, 0 deletions
diff --git a/apps/dreki/src/drekid_tasks_store.erl b/apps/dreki/src/drekid_tasks_store.erl
new file mode 100644
index 0000000..e16182a
--- /dev/null
+++ b/apps/dreki/src/drekid_tasks_store.erl
@@ -0,0 +1,71 @@
+-module(drekid_tasks_store).
+-behaviour(dreki_store_backend).
+
+-export([install/0]).
+-export([start/0, start/5, checkout/1, checkin/1, stop/0, stop/1]).
+-export([valid_store/5]).
+-export([list/1, count/1, exists/2, get/2, create/2, update/2, delete/2]).
+
+tasks() ->
+ Tasks = #{<<"dreki.v1.exec">> => #{id => <<"dreki.v1.exec">>, module => drekid_task_handler, params => #{}}},
+ FreeBSD = [<<"dreki.v1.freebsd.jails.list">>,
+ <<"dreki.v1.freebsd.jails.get">>,
+ <<"dreki.v1.freebsd.jails.start">>,
+ <<"dreki.v1.freebsd.jails.exec">>
+ ],
+ Tasks0 = lists:foldr(fun (Id, Acc) ->
+ Task = #{id => Id, module => drekid_task_handler, params => dreki_freebsd_schemas:schema(Id)},
+ maps:put(Id, Task, Acc)
+ end, Tasks, FreeBSD),
+ Tasks0.
+
+urn() ->
+ Urn = dreki_node:urn(),
+ <<Urn/binary, "::tasks:drekid">>.
+
+install() ->
+ dreki_store:create_store(urn(), ?MODULE, #{}, #{}).
+
+valid_store(<<"tasks">>, _Loc, _Name, _NSMod, _Args) ->
+ ok;
+valid_store(_Ns, _Loc, _Name, _NSMod, _Args) ->
+ error.
+
+start() ->
+ ok.
+
+start(_Ns, _NsMod, _Loc, _XUrn, Args) ->
+ {ok, Args}.
+
+checkout(Args) ->
+ {ok, Args}.
+
+checkin(Args) ->
+ ok.
+
+stop() ->
+ ok.
+
+stop(Args) ->
+ ok.
+
+list(_) ->
+ {ok, [V || {K, V} <- maps:to_list(tasks())]}.
+
+get(_, Id) ->
+ maps:get(Id, tasks(), not_found).
+
+count(_) ->
+ {ok, maps:size(tasks())}.
+
+exists(_, Id) ->
+ {ok, maps:is_key(Id, tasks())}.
+
+create(_, _) ->
+ {error, not_supported}.
+
+update(_, _) ->
+ {error, not_supported}.
+
+delete(_, _) ->
+ {error, not_supported}.