Helpers for building project-local HostKit DSLs.
HostKit stays generic; consuming projects can define their own roots, prefixes, service wrappers, and helper macros with this module.
defmodule MyInfra do
use HostKit.ProjectDSL
root :source, "/opt/apps/src"
root :state, "/var/lib/apps"
prefix :user, "app-"
defservice :app_service do
let :service_user, do: prefixed(:user, service_name())
path :source_dir, root(:source), service_name()
path :state_dir, root(:state), service_name()
macro :standard_user do
account service_user(), system: true, home: state_path("home")
end
end
endThen explicitly load and use it from a HostKit config:
Code.require_file("my_infra.exs", __DIR__)
use HostKit.DSL
use MyInfra
project :demo do
app_service :web do
standard_user()
directory state_path("home"), owner: service_user()
end
end