diff --git a/clanServices/k3s/default.nix b/clanServices/k3s/default.nix index 5d00f01..07d753b 100644 --- a/clanServices/k3s/default.nix +++ b/clanServices/k3s/default.nix @@ -1,14 +1,14 @@ -{ ... }: +{ lib, ... }: let - inherit (builtins) readFile head; + inherit (builtins) readFile; in { _class = "clan.service"; manifest = { name = "amarth/k3s"; - description = "amarth/k3s"; - categories = [ "System" "Network" ]; + description = "K3s service in order to set up a cluster"; + categories = [ "System" "Network" "Containers" "Virtualisation" ]; readme = readFile ./README.md; }; @@ -27,8 +27,8 @@ in }; }; - perInstance = { settings, ... }: { - nixosModule = ./server.nix; + perInstance = instanceArgs: { + nixosModule = lib.modules.importApply ./roles/server.nix instanceArgs; }; }; @@ -36,10 +36,12 @@ in # Agent configuration #============================================================================================================== roles.agent = { - interface = { lib, ... }: { }; + interface = { lib, ... }: { + options = {}; + }; - perInstance = { settings, instanceName, roles, ... }: { - nixosModule = ./agent.nix; + perInstance = instanceArgs: { + nixosModule = lib.modules.importApply ./roles/agent.nix instanceArgs; }; }; -} \ No newline at end of file +} diff --git a/clanServices/k3s/agent.nix b/clanServices/k3s/roles/agent.nix similarity index 84% rename from clanServices/k3s/agent.nix rename to clanServices/k3s/roles/agent.nix index 035f948..14d90bf 100644 --- a/clanServices/k3s/agent.nix +++ b/clanServices/k3s/roles/agent.nix @@ -1,16 +1,16 @@ -{ config, lib, pkgs, roles, ... }: +{ config, lib, pkgs, roles, ... }: let inherit (builtins) head pathExists readFile; controller = head (lib.attrNames roles.controller.machines or {}); # Read the controller's ip address - ipAddressPath = "${config.clan.core.settings.directory}/vars/per-machine/${controller}/k3s-ip/ip_v4"; + ipAddressPath = "${config.clan.core.settings.directory}/vars/per-machine/${controller}/k3s/ip_v4"; ipAddress = if pathExists ipAddressPath then readFile ipAddressPath else null; # Read the controller's token - tokenPath = "${config.clan.core.settings.directory}/vars/per-machine/${controller}/k3s-token/token"; - token = if pathExists ipAddressPath then readFile ipAddressPath else null; + tokenPath = "${config.clan.core.settings.directory}/vars/per-machine/${controller}/k3s/token"; + token = if pathExists tokenPath then readFile tokenPath else null; in { config = { @@ -35,4 +35,4 @@ in }; }; }; -} \ No newline at end of file +} diff --git a/clanServices/k3s/server.nix b/clanServices/k3s/roles/server.nix similarity index 68% rename from clanServices/k3s/server.nix rename to clanServices/k3s/roles/server.nix index 46ac98a..90d1897 100644 --- a/clanServices/k3s/server.nix +++ b/clanServices/k3s/roles/server.nix @@ -2,30 +2,26 @@ { config = { clan.core.vars.generators = { - k3s-ip = { + k3s = { share = false; - files.ip_v6 = { - deploy = false; - secret = false; - }; - files.ip_v4 = { - deploy = false; - secret = false; - }; - script = '' - echo "::1" > "$out/ip_v6" - echo "127.0.0.1" > "$out/ip_v4" - ''; - }; - - k3s-token = { - share = false; - files.token = { - deploy = false; - secret = true; + files = { + ip_v6 = { + deploy = false; + secret = false; + }; + ip_v4 = { + deploy = false; + secret = false; + }; + token = { + deploy = false; + secret = true; + }; }; runtimeInputs = with pkgs; [ pwgen ]; script = '' + echo "::1" > "$out/ip_v6" + echo "127.0.0.1" > "$out/ip_v4" pwgen 50 1 > "$out/token" ''; }; @@ -47,9 +43,9 @@ k3s = { enable = true; role = "server"; - token = config.clan.core.vars.generators.k3s-token.token.value; + token = config.clan.core.vars.generators.k3s.token.value; clusterInit = true; }; }; }; -} \ No newline at end of file +} diff --git a/clanServices/zitadel/default.nix b/clanServices/zitadel/default.nix index 028775b..4d61b0c 100644 --- a/clanServices/zitadel/default.nix +++ b/clanServices/zitadel/default.nix @@ -1,44 +1,44 @@ -{ ... }: +{ lib, ... }: +let + inherit (builtins) readFile; +in { _class = "clan.service"; - manifest.name = "zitadel"; - - roles = { - controller = { - interface = { - options = {}; - }; - - perInstance = { instanceName, settings, machine, roles, ... }: { - nixosModule = { config }: { - config = { - services.zitadel.steps.${instanceName} = { - InstanceName = settings.hostName; - - Org = { - Name = settings.displayName; - Human = { - UserName = "chris"; - FirstName = "Chris"; - LastName = "Kruining"; - Email = { - Address = "chris@kruining.eu"; - Verified = true; - }; - Password = "KaasIsAwesome1!"; - }; - }; - }; - }; - }; - }; - }; - - peer = {}; + manifest = { + name = "amarth/zitadel"; + description = "Zitadel service module"; + categories = [ "System" "Identity" "IAM" ]; + readme = readFile ./README.md; }; - pweMachine = { instances, machine, ... }: { + #============================================================================================================== + # Controller configuration + #============================================================================================================== + roles.controller = { + interface = { + options = {}; + }; + + perInstance = instanceArgs: { + nixosModule = lib.modules.importApply ./roles/controller.nix instanceArgs; + }; + }; + + #============================================================================================================== + # Peer configuration + #============================================================================================================== + roles.peer = { + interface = { + options = {}; + }; + + perInstance = instanceArgs: { + nixosModule = lib.modules.importApply ./roles/peer.nix instanceArgs; + }; + }; + + perMachine = { instances, machine, ... }: { nixosModule = { config, ... }: { config = { services.zitadel = { diff --git a/clanServices/zitadel/roles/controller.nix b/clanServices/zitadel/roles/controller.nix new file mode 100644 index 0000000..4b12b9c --- /dev/null +++ b/clanServices/zitadel/roles/controller.nix @@ -0,0 +1,27 @@ +{ instanceName, settings, machine, roles, config, ... }: { + config = { + clan.core.vars.generators = { + zitadel = { + share = false; + }; + } + + services.zitadel.steps.${instanceName} = { + InstanceName = settings.hostName; + + Org = { + Name = settings.displayName; + Human = { + UserName = "chris"; + FirstName = "Chris"; + LastName = "Kruining"; + Email = { + Address = "chris@kruining.eu"; + Verified = true; + }; + Password = "KaasIsAwesome1!"; + }; + }; + }; + }; +} diff --git a/clanServices/zitadel/roles/peer.nix b/clanServices/zitadel/roles/peer.nix new file mode 100644 index 0000000..65c9607 --- /dev/null +++ b/clanServices/zitadel/roles/peer.nix @@ -0,0 +1,3 @@ +{ instanceName, settings, machine, roles, config, ... }: { + config = {}; +} diff --git a/clanServices/zitadel/tests/vm/default.nix b/clanServices/zitadel/tests/vm/default.nix new file mode 100644 index 0000000..b011702 --- /dev/null +++ b/clanServices/zitadel/tests/vm/default.nix @@ -0,0 +1,40 @@ +{ pkgs, ... }: +{ + name = "service-k3s"; + + clan = { + directory = ./.; + + inventory = { + machines = { + node1 = {}; + node2 = {}; + node3 = {}; + }; + + instances = { + k3s = { + module = { + name = "@amarth/k3s"; + input = "self"; + }; + + roles.server.machines."node1" = {}; + + roles.agent.machines."node2" = {}; + roles.agent.machines."node3" = {}; + }; + }; + }; + + nodes = { + node1 = {}; + node2 = {}; + node3 = {}; + }; + + testScript = '' + start_all() + ''; + }; +} \ No newline at end of file