aboutsummaryrefslogtreecommitdiff
path: root/apps/dreki/src/storages/dreki_storages.erl
diff options
context:
space:
mode:
Diffstat (limited to 'apps/dreki/src/storages/dreki_storages.erl')
-rw-r--r--apps/dreki/src/storages/dreki_storages.erl98
1 files changed, 98 insertions, 0 deletions
diff --git a/apps/dreki/src/storages/dreki_storages.erl b/apps/dreki/src/storages/dreki_storages.erl
new file mode 100644
index 0000000..3a87347
--- /dev/null
+++ b/apps/dreki/src/storages/dreki_storages.erl
@@ -0,0 +1,98 @@
+-module(dreki_storages).
+-behaviour(dreki_store_namespace).
+-export([start/0, version/0, valid_store/4, format_item/1, actions/0, actions/1, schemas/0, as_tuple/1, as_map/1]).
+-export([record_name/0, record_attributes/0]).
+-export([after_create/1]).
+-export([install_local_store/0, create_local_storage/4]).
+
+-record(?MODULE, {
+ id,
+ version,
+ schema,
+ name,
+ type,
+ handler,
+ params,
+ tags = []
+ }).
+
+install_local_store() ->
+ NodeUrn = dreki_node:urn(),
+ Urn = <<NodeUrn/binary, "::storages:local">>,
+ dreki_store:create_store(Urn, dreki_mnesia_store, #{}, #{}).
+
+create_local_storage(Type, Handler, Params, Tags) ->
+ NodeUrn = dreki_node:urn(),
+ LocalStoreUrn = <<NodeUrn/binary, "::storages:local">>,
+ Storage = #{
+ type => Type,
+ handler => Handler,
+ params => Params,
+ tags => Tags
+ },
+ dreki_store:create(LocalStoreUrn, Storage).
+
+record_name() -> ?MODULE.
+record_attributes() -> record_info(fields, ?MODULE).
+version() -> 1.
+
+start() ->
+ ok.
+
+valid_store(_Ns, _Loc, _Name, _BackendMod) ->
+ ok.
+
+format_item(Item) ->
+ ok.
+
+actions() ->
+ [].
+
+actions(_) ->
+ [].
+
+schemas() ->
+ #{default => <<"storage">>,
+ <<"storage">> => #{
+ default_version => <<"1.0">>,
+ <<"1.0">> => schemas(<<"storage">>, <<"1.0">>)
+ }
+ }.
+
+schemas(<<"storage">>, <<"1.0">>) ->
+ #{
+ version => 'draft-06',
+ title => <<"Storage">>,
+ type => object,
+ required => [id, type, handler, params],
+ properties => #{
+ id => #{type => string, <<"dreki:form">> => #{}},
+ name => #{type => string},
+ type => #{type => string, enum => [<<"fs">>, <<"os">>, <<"bs">>]},
+ handler => #{type => string, enum => [<<"zfs">>, <<"fs">>]},
+ params => #{type => object},
+ tags => #{type => array, items => #{type => string}}
+ }
+ }.
+
+as_tuple(Map = #{id := Id, type := Type, handler := Handler, params := Params, tags := Tags}) ->
+ #?MODULE{id = Id,
+ name = maps:get(name, Map, undefined),
+ type = Type,
+ handler = Handler,
+ params = Params,
+ tags = maps:get(tags, Map, [])
+ }.
+
+as_map(R = #?MODULE{}) ->
+ #{
+ id => R#?MODULE.id,
+ name => R#?MODULE.name,
+ type => R#?MODULE.type,
+ handler => R#?MODULE.handler,
+ params => R#?MODULE.params,
+ tags => R#?MODULE.tags
+ }.
+
+after_create(_Storage) ->
+ ok.