Docs/inventory: ad-hoc loading of user modules
This commit is contained in:
committed by
hsjobeki
parent
55175e38cc
commit
0d555df9ac
@@ -6,10 +6,8 @@ This site will guide you through authoring your first module. Explaining which c
|
|||||||
Under construction
|
Under construction
|
||||||
:fontawesome-solid-road-barrier: :fontawesome-solid-road-barrier: :fontawesome-solid-road-barrier:
|
:fontawesome-solid-road-barrier: :fontawesome-solid-road-barrier: :fontawesome-solid-road-barrier:
|
||||||
|
|
||||||
!!! Note
|
!!! Tip
|
||||||
Currently ClanModules should be contributed to the [clan-core repository](https://git.clan.lol/clan/clan-core) via a PR.
|
External ClanModules can be ad-hoc loaded via [`clan.inventory.modules`](../reference/nix-api/inventory.md#modules)
|
||||||
|
|
||||||
Ad-hoc loading of custom modules is not recommended / supported yet.
|
|
||||||
|
|
||||||
## Bootstrapping the `clanModule`
|
## Bootstrapping the `clanModule`
|
||||||
|
|
||||||
@@ -43,11 +41,35 @@ clanModules/borgbackup
|
|||||||
|
|
||||||
The `roles` folder is strictly required for `features = [ "inventory" ]`.
|
The `roles` folder is strictly required for `features = [ "inventory" ]`.
|
||||||
|
|
||||||
The clanModule must be registered via the `clanModules` attribute in `clan-core`
|
=== "User module"
|
||||||
|
|
||||||
|
If the module should be ad-hoc loaded.
|
||||||
|
It can be made avilable in any project via the [`clan.inventory.modules`](../reference/nix-api/inventory.md#modules) attribute.
|
||||||
|
|
||||||
|
```nix title="flake.nix"
|
||||||
|
# ...
|
||||||
|
buildClan {
|
||||||
|
# 1. Add the module to the avilable inventory modules
|
||||||
|
inventory.modules = {
|
||||||
|
custom-module = ./modules/my_module;
|
||||||
|
};
|
||||||
|
# 2. Use the module in the inventory
|
||||||
|
inventory.services = {
|
||||||
|
custom-module.instance_1 = {
|
||||||
|
roles.default.machines = [ "machineA" ];
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
```
|
||||||
|
|
||||||
|
=== "Upstream module"
|
||||||
|
|
||||||
|
If the module will be contributed to [`clan-core`](https://git.clan.lol/clan-core)
|
||||||
|
The clanModule must be registered within the `clanModules` attribute in `clan-core`
|
||||||
|
|
||||||
```nix title="clanModules/flake-module.nix"
|
```nix title="clanModules/flake-module.nix"
|
||||||
--8<-- "clanModules/flake-module.nix:0:6"
|
--8<-- "clanModules/flake-module.nix:0:5"
|
||||||
# Register your new module here
|
# Register our new module here
|
||||||
# ...
|
# ...
|
||||||
```
|
```
|
||||||
|
|
||||||
|
|||||||
@@ -58,7 +58,7 @@ let
|
|||||||
res = builtins.mapAttrs (
|
res = builtins.mapAttrs (
|
||||||
moduleName: module:
|
moduleName: module:
|
||||||
let
|
let
|
||||||
frontmatter = clan-core.lib.modules.getFrontmatter moduleName;
|
frontmatter = clan-core.lib.modules.getFrontmatter allModules.${moduleName} moduleName;
|
||||||
roles =
|
roles =
|
||||||
if builtins.elem "inventory" frontmatter.features or [ ] then
|
if builtins.elem "inventory" frontmatter.features or [ ] then
|
||||||
assert lib.isPath module;
|
assert lib.isPath module;
|
||||||
|
|||||||
@@ -94,10 +94,38 @@ in
|
|||||||
options = {
|
options = {
|
||||||
modules = lib.mkOption {
|
modules = lib.mkOption {
|
||||||
type = types.attrsOf types.path;
|
type = types.attrsOf types.path;
|
||||||
internal = true;
|
|
||||||
visible = false;
|
|
||||||
default = { };
|
default = { };
|
||||||
defaultText = "clanModules of clan-core";
|
defaultText = "clanModules of clan-core";
|
||||||
|
description = ''
|
||||||
|
A mapping of module names to their path.
|
||||||
|
|
||||||
|
Each module can be referenced by its `attributeName` in the `inventory.services` attribute set.
|
||||||
|
|
||||||
|
!!! Important
|
||||||
|
Each module MUST fullfill the following requirements to be usable with the inventory:
|
||||||
|
|
||||||
|
- The module MUST have a `README.md` file with a `description`.
|
||||||
|
- The module MUST have at least `features = [ "inventory" ]` in the frontmatter section.
|
||||||
|
- The module MUST have a subfolder `roles` with at least one `{roleName}.nix` file.
|
||||||
|
|
||||||
|
For further information see: [Module Authoring Guide](../../clanmodules/index.md).
|
||||||
|
|
||||||
|
???+ example
|
||||||
|
```nix
|
||||||
|
buildClan {
|
||||||
|
# 1. Add the module to the avilable inventory modules
|
||||||
|
inventory.modules = {
|
||||||
|
custom-module = ./modules/my_module;
|
||||||
|
};
|
||||||
|
# 2. Use the module in the inventory
|
||||||
|
inventory.services = {
|
||||||
|
custom-module.instance_1 = {
|
||||||
|
roles.default.machines = [ "machineA" ];
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
```
|
||||||
|
'';
|
||||||
};
|
};
|
||||||
|
|
||||||
assertions = lib.mkOption {
|
assertions = lib.mkOption {
|
||||||
|
|||||||
Reference in New Issue
Block a user