docs(adrs): move decision folder into docs to make them publicly visible within docs
This commit is contained in:
@@ -1 +0,0 @@
|
|||||||
see [architecture-decision-record](https://github.com/joelparkerhenderson/architecture-decision-record)
|
|
||||||
@@ -22,7 +22,11 @@ markdown_extensions:
|
|||||||
emoji_generator: !!python/name:material.extensions.emoji.to_svg
|
emoji_generator: !!python/name:material.extensions.emoji.to_svg
|
||||||
- pymdownx.tasklist:
|
- pymdownx.tasklist:
|
||||||
custom_checkbox: true
|
custom_checkbox: true
|
||||||
- pymdownx.superfences
|
- pymdownx.superfences:
|
||||||
|
custom_fences:
|
||||||
|
- name: mermaid
|
||||||
|
class: mermaid
|
||||||
|
format: !!python/name:pymdownx.superfences.fence_code_format
|
||||||
- pymdownx.tabbed:
|
- pymdownx.tabbed:
|
||||||
alternate_style: true
|
alternate_style: true
|
||||||
- pymdownx.details
|
- pymdownx.details
|
||||||
@@ -75,6 +79,12 @@ nav:
|
|||||||
- Migrate inventory Services: guides/migrate-inventory-services.md
|
- Migrate inventory Services: guides/migrate-inventory-services.md
|
||||||
- Reference:
|
- Reference:
|
||||||
- Overview: reference/index.md
|
- Overview: reference/index.md
|
||||||
|
- Architecture Decisions:
|
||||||
|
- Architecture Decisions: decisions/README.md
|
||||||
|
- 01-clanModules: decisions/01-ClanModules.md
|
||||||
|
- 02-clan-api: decisions/02-clan-api.md
|
||||||
|
- 03-adr-numbering-process: decisions/03-adr-numbering-process.md
|
||||||
|
- Template: decisions/_template.md
|
||||||
- Clan Modules:
|
- Clan Modules:
|
||||||
- Overview:
|
- Overview:
|
||||||
- reference/clanModules/index.md
|
- reference/clanModules/index.md
|
||||||
|
|||||||
@@ -1,6 +1,8 @@
|
|||||||
# Clan service modules
|
# Clan service modules
|
||||||
|
|
||||||
Status: Accepted
|
## Status
|
||||||
|
|
||||||
|
Accepted
|
||||||
|
|
||||||
## Context
|
## Context
|
||||||
|
|
||||||
@@ -65,9 +67,9 @@ Problems with the current way of writing clanModules:
|
|||||||
1. No way to retrieve the config of a single service instance, together with its name.
|
1. No way to retrieve the config of a single service instance, together with its name.
|
||||||
2. Directly exporting a single, anonymous nixosModule without any intermediary attribute layers doesn't leave room for exporting other inventory resources such as potentially `vars` or `homeManagerConfig`.
|
2. Directly exporting a single, anonymous nixosModule without any intermediary attribute layers doesn't leave room for exporting other inventory resources such as potentially `vars` or `homeManagerConfig`.
|
||||||
3. Can't access multiple config instances individually.
|
3. Can't access multiple config instances individually.
|
||||||
Example:
|
Example:
|
||||||
```nix
|
```nix
|
||||||
inventory = {
|
inventory = {
|
||||||
services = {
|
services = {
|
||||||
network.c-base = {
|
network.c-base = {
|
||||||
instanceConfig.ips = {
|
instanceConfig.ips = {
|
||||||
@@ -81,7 +83,7 @@ Problems with the current way of writing clanModules:
|
|||||||
};
|
};
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
```
|
```
|
||||||
This doesn't work because all instance configs are applied to the same namespace. So this results in a conflict currently.
|
This doesn't work because all instance configs are applied to the same namespace. So this results in a conflict currently.
|
||||||
Resolving this problem means that new inventory modules cannot be plain nixos modules anymore. If they are configured via `instances` / `instanceConfig` they cannot be configured without using the inventory. (There might be ways to inject instanceConfig but that requires knowledge of inventory internals)
|
Resolving this problem means that new inventory modules cannot be plain nixos modules anymore. If they are configured via `instances` / `instanceConfig` they cannot be configured without using the inventory. (There might be ways to inject instanceConfig but that requires knowledge of inventory internals)
|
||||||
|
|
||||||
@@ -256,7 +258,6 @@ The following thoughts went into this:
|
|||||||
|
|
||||||
We want to implement the system as described. Once we have sufficient data on real world use-cases and modules we might revisit this document along with the updated implementation.
|
We want to implement the system as described. Once we have sufficient data on real world use-cases and modules we might revisit this document along with the updated implementation.
|
||||||
|
|
||||||
|
|
||||||
## Real world example
|
## Real world example
|
||||||
|
|
||||||
The following module demonstrates the idea in the example of *borgbackup*.
|
The following module demonstrates the idea in the example of *borgbackup*.
|
||||||
@@ -407,7 +408,7 @@ The following module demonstrates the idea in the example of *borgbackup*.
|
|||||||
''
|
''
|
||||||
) (lib.attrValues config.clan.core.state)}
|
) (lib.attrValues config.clan.core.state)}
|
||||||
|
|
||||||
if [[ ''${#preCommandErrors[@]} -gt 0 ]]; then
|
if [[ ''${preCommandErrors[@]} -gt 0 ]]; then
|
||||||
echo "pre-backup commands failed for the following services:"
|
echo "pre-backup commands failed for the following services:"
|
||||||
for state in "''${!preCommandErrors[@]}"; do
|
for state in "''${!preCommandErrors[@]}"; do
|
||||||
echo " $state"
|
echo " $state"
|
||||||
@@ -22,11 +22,9 @@ This leads to the conclusion that we should do `library` centric development.
|
|||||||
With the current `clan` python code being a library that can be imported to create various tools ontop of it.
|
With the current `clan` python code being a library that can be imported to create various tools ontop of it.
|
||||||
All **CLI** or **UI** related parts should be moved out of the main library.
|
All **CLI** or **UI** related parts should be moved out of the main library.
|
||||||
|
|
||||||
*Note: The next person who wants implement any new frontend should do this first. Currently it looks like the TUI is the next one.*
|
|
||||||
|
|
||||||
Imagine roughly the following architecture:
|
Imagine roughly the following architecture:
|
||||||
|
|
||||||
```mermaid
|
``` mermaid
|
||||||
graph TD
|
graph TD
|
||||||
%% Define styles
|
%% Define styles
|
||||||
classDef frontend fill:#f9f,stroke:#333,stroke-width:2px;
|
classDef frontend fill:#f9f,stroke:#333,stroke-width:2px;
|
||||||
@@ -75,7 +73,7 @@ Integration tests and smaller unit-tests should both be utilized to ensure the s
|
|||||||
|
|
||||||
Note: Library function don't have to be json-serializable in general.
|
Note: Library function don't have to be json-serializable in general.
|
||||||
|
|
||||||
Persistence includes but is not limited to: creating git commits, writing to inventory.json, reading and writing vars and to/from disk in general.
|
Persistence includes but is not limited to: creating git commits, writing to inventory.json, reading and writing vars, and interacting with persisted data in general.
|
||||||
|
|
||||||
## Benefits / Drawbacks
|
## Benefits / Drawbacks
|
||||||
|
|
||||||
16
docs/site/decisions/README.md
Normal file
16
docs/site/decisions/README.md
Normal file
@@ -0,0 +1,16 @@
|
|||||||
|
# Architecture Decision Records
|
||||||
|
|
||||||
|
This section contains the architecture decisions that have been reviewed and generally agreed upon
|
||||||
|
|
||||||
|
## What is an ADR?
|
||||||
|
|
||||||
|
> An architecture decision record (ADR) is a document that captures an important architecture decision made along with its context and consequences.
|
||||||
|
|
||||||
|
!!! Note
|
||||||
|
For further reading about adr's we recommend [architecture-decision-record](https://github.com/joelparkerhenderson/architecture-decision-record)
|
||||||
|
|
||||||
|
## Crafting a new ADR
|
||||||
|
|
||||||
|
1. Use the [template](./_template.md)
|
||||||
|
2. Create the Pull request and gather feedback
|
||||||
|
3. Retreive your adr-number (see: [numbering](./03-adr-numbering-process.md))
|
||||||
Reference in New Issue
Block a user