From 2f48fe597acdb6b27b06145c3bdbc8a362c9b45c Mon Sep 17 00:00:00 2001 From: Ingolf Wagner Date: Fri, 7 Jun 2024 20:07:55 +0200 Subject: [PATCH] delete terranix folder --- terranix/.gitignore | 3 - terranix/gitlab/.gitignore | 3 - terranix/gitlab/README.md | 7 - terranix/gitlab/config.nix | 31 - terranix/gitlab/flake.lock | 129 ---- terranix/gitlab/flake.nix | 53 -- terranix/graylog/MyDashboards.json | 674 ------------------ terranix/graylog/config.nix | 47 -- terranix/graylog/journald.nix | 115 --- terranix/graylog/journald/kibana.nix | 59 -- terranix/graylog/journald/nextcloud.nix | 62 -- terranix/graylog/nginx.nix | 311 -------- terranix/graylog/provider.nix | 13 - terranix/graylog/shell.nix | 15 - terranix/graylog/terraform.tfstate | Bin 43612 -> 0 bytes terranix/servers/config.nix | 32 - terranix/servers/modules/nix-server.nix | 35 - terranix/servers/shell.nix | 36 - terranix/servers/terraform.tfstate | Bin 2036 -> 0 bytes terranix/space-left/.gitignore | 2 - terranix/space-left/README.md | 54 -- terranix/space-left/config.nix | 52 -- .../plops/configs/nixserver-host/codimd.nix | 29 - .../configs/nixserver-host/configuration.nix | 19 - .../plops/configs/nixserver-host/gitlab.nix | 49 -- .../nixserver-host/hardware-configuration.nix | 10 - .../plops/configs/nixserver-host/jitsi.nix | 61 -- .../plops/configs/nixserver-host/netdata.nix | 15 - .../plops/configs/nixserver-host/ssh.nix | 14 - .../configs/nixserver-host/workadventure.nix | 166 ----- terranix/space-left/plops/shell.nix | 74 -- terranix/space-left/shell.nix | 49 -- terranix/space-left/terraform.tfstate | Bin 180 -> 0 bytes terranix/tinc-test/.gitignore | 10 - terranix/tinc-test/01-terranix/config.nix | 32 - .../01-terranix/config/file-generation.nix | 31 - .../01-terranix/config/ssh-setup.nix | 46 -- terranix/tinc-test/01-terranix/shell.nix | 37 - .../assets/tinc/client/ed25519_key.priv | 4 - .../02-build/assets/tinc/client/host_file | 14 - .../02-build/assets/tinc/client/rsa_key.priv | 51 -- .../02-build/assets/tinc/client_host_file | 1 - .../02-build/assets/tinc/ed25519_key | 1 - .../tinc-test/02-build/assets/tinc/rsa_key | 1 - .../02-build/assets/tinc/server/ed25519_key | 4 - .../02-build/assets/tinc/server/host_file | 14 - .../02-build/assets/tinc/server/rsa_key | 51 -- .../02-build/assets/tinc/server_host_file | 1 - .../nixserver-server/configuration.nix | 19 - .../hardware-configuration.nix | 8 - .../configs/nixserver-server/tinc-server.nix | 11 - .../configs/nixserver-server/tinc.nix | 33 - terranix/tinc-test/02-build/generated/.keep | 0 terranix/tinc-test/02-build/shell.nix | 76 -- terranix/tinc-test/README.md | 73 -- terranix/tinc-test/sshkey | 27 - terranix/tinc-test/sshkey.pub | 1 - terranix/workadventure-jitsi-setup/.gitignore | 2 - terranix/workadventure-jitsi-setup/README.md | 54 -- terranix/workadventure-jitsi-setup/config.nix | 49 -- .../plops/configs/nixserver-host/codimd.nix | 29 - .../configs/nixserver-host/configuration.nix | 34 - .../nixserver-host/hardware-configuration.nix | 10 - .../plops/configs/nixserver-host/jitsi.nix | 60 -- .../plops/configs/nixserver-host/netdata.nix | 26 - .../plops/configs/nixserver-host/options.nix | 15 - .../plops/configs/nixserver-host/ssh.nix | 14 - .../configs/nixserver-host/workadventure.nix | 167 ----- .../workadventure-jitsi-setup/plops/shell.nix | 74 -- terranix/workadventure-jitsi-setup/shell.nix | 50 -- 70 files changed, 3349 deletions(-) delete mode 100644 terranix/.gitignore delete mode 100644 terranix/gitlab/.gitignore delete mode 100644 terranix/gitlab/README.md delete mode 100644 terranix/gitlab/config.nix delete mode 100644 terranix/gitlab/flake.lock delete mode 100644 terranix/gitlab/flake.nix delete mode 100644 terranix/graylog/MyDashboards.json delete mode 100644 terranix/graylog/config.nix delete mode 100644 terranix/graylog/journald.nix delete mode 100644 terranix/graylog/journald/kibana.nix delete mode 100644 terranix/graylog/journald/nextcloud.nix delete mode 100644 terranix/graylog/nginx.nix delete mode 100644 terranix/graylog/provider.nix delete mode 100644 terranix/graylog/shell.nix delete mode 100644 terranix/graylog/terraform.tfstate delete mode 100644 terranix/servers/config.nix delete mode 100644 terranix/servers/modules/nix-server.nix delete mode 100644 terranix/servers/shell.nix delete mode 100644 terranix/servers/terraform.tfstate delete mode 100644 terranix/space-left/.gitignore delete mode 100644 terranix/space-left/README.md delete mode 100644 terranix/space-left/config.nix delete mode 100644 terranix/space-left/plops/configs/nixserver-host/codimd.nix delete mode 100644 terranix/space-left/plops/configs/nixserver-host/configuration.nix delete mode 100644 terranix/space-left/plops/configs/nixserver-host/gitlab.nix delete mode 100644 terranix/space-left/plops/configs/nixserver-host/hardware-configuration.nix delete mode 100644 terranix/space-left/plops/configs/nixserver-host/jitsi.nix delete mode 100644 terranix/space-left/plops/configs/nixserver-host/netdata.nix delete mode 100644 terranix/space-left/plops/configs/nixserver-host/ssh.nix delete mode 100644 terranix/space-left/plops/configs/nixserver-host/workadventure.nix delete mode 100644 terranix/space-left/plops/shell.nix delete mode 100644 terranix/space-left/shell.nix delete mode 100644 terranix/space-left/terraform.tfstate delete mode 100644 terranix/tinc-test/.gitignore delete mode 100644 terranix/tinc-test/01-terranix/config.nix delete mode 100644 terranix/tinc-test/01-terranix/config/file-generation.nix delete mode 100644 terranix/tinc-test/01-terranix/config/ssh-setup.nix delete mode 100644 terranix/tinc-test/01-terranix/shell.nix delete mode 100644 terranix/tinc-test/02-build/assets/tinc/client/ed25519_key.priv delete mode 100644 terranix/tinc-test/02-build/assets/tinc/client/host_file delete mode 100644 terranix/tinc-test/02-build/assets/tinc/client/rsa_key.priv delete mode 120000 terranix/tinc-test/02-build/assets/tinc/client_host_file delete mode 120000 terranix/tinc-test/02-build/assets/tinc/ed25519_key delete mode 120000 terranix/tinc-test/02-build/assets/tinc/rsa_key delete mode 100644 terranix/tinc-test/02-build/assets/tinc/server/ed25519_key delete mode 100644 terranix/tinc-test/02-build/assets/tinc/server/host_file delete mode 100644 terranix/tinc-test/02-build/assets/tinc/server/rsa_key delete mode 120000 terranix/tinc-test/02-build/assets/tinc/server_host_file delete mode 100644 terranix/tinc-test/02-build/configs/nixserver-server/configuration.nix delete mode 100644 terranix/tinc-test/02-build/configs/nixserver-server/hardware-configuration.nix delete mode 100644 terranix/tinc-test/02-build/configs/nixserver-server/tinc-server.nix delete mode 100644 terranix/tinc-test/02-build/configs/nixserver-server/tinc.nix delete mode 100644 terranix/tinc-test/02-build/generated/.keep delete mode 100644 terranix/tinc-test/02-build/shell.nix delete mode 100644 terranix/tinc-test/README.md delete mode 100755 terranix/tinc-test/sshkey delete mode 100644 terranix/tinc-test/sshkey.pub delete mode 100644 terranix/workadventure-jitsi-setup/.gitignore delete mode 100644 terranix/workadventure-jitsi-setup/README.md delete mode 100644 terranix/workadventure-jitsi-setup/config.nix delete mode 100644 terranix/workadventure-jitsi-setup/plops/configs/nixserver-host/codimd.nix delete mode 100644 terranix/workadventure-jitsi-setup/plops/configs/nixserver-host/configuration.nix delete mode 100644 terranix/workadventure-jitsi-setup/plops/configs/nixserver-host/hardware-configuration.nix delete mode 100644 terranix/workadventure-jitsi-setup/plops/configs/nixserver-host/jitsi.nix delete mode 100644 terranix/workadventure-jitsi-setup/plops/configs/nixserver-host/netdata.nix delete mode 100644 terranix/workadventure-jitsi-setup/plops/configs/nixserver-host/options.nix delete mode 100644 terranix/workadventure-jitsi-setup/plops/configs/nixserver-host/ssh.nix delete mode 100644 terranix/workadventure-jitsi-setup/plops/configs/nixserver-host/workadventure.nix delete mode 100644 terranix/workadventure-jitsi-setup/plops/shell.nix delete mode 100644 terranix/workadventure-jitsi-setup/shell.nix diff --git a/terranix/.gitignore b/terranix/.gitignore deleted file mode 100644 index a28903b..0000000 --- a/terranix/.gitignore +++ /dev/null @@ -1,3 +0,0 @@ -*.backup -.history -.terraform diff --git a/terranix/gitlab/.gitignore b/terranix/gitlab/.gitignore deleted file mode 100644 index e0e98f6..0000000 --- a/terranix/gitlab/.gitignore +++ /dev/null @@ -1,3 +0,0 @@ -.terraform* -terraform.tfstate* -config.tf.json diff --git a/terranix/gitlab/README.md b/terranix/gitlab/README.md deleted file mode 100644 index c4f2abe..0000000 --- a/terranix/gitlab/README.md +++ /dev/null @@ -1,7 +0,0 @@ -# nix flake example - -This example shows how you could use terranix as flake. - -- `nix run` run `nix run ".#apply"` -- `nix run ".#apply"` run `terraform apply` -- `nix run ".#destroy"` run `terraform destroy` diff --git a/terranix/gitlab/config.nix b/terranix/gitlab/config.nix deleted file mode 100644 index 1e23633..0000000 --- a/terranix/gitlab/config.nix +++ /dev/null @@ -1,31 +0,0 @@ -# start with: -# export GITLAB_TOKEN="" -{ config, lib, ... }: -{ - terraform.required_providers.gitlab.source = "gitlabhq/gitlab"; - - provider.gitlab = { - base_url = "https://gitlab.ingolf-wagner.de/api/v4/"; - }; - - resource.gitlab_deploy_key = - let - ssh_key = "ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAACAQDNRzdW7SYizwrECoTJbL0peeTkaRfAT5Jjefgad+MmHFHsRRy/q2bDQLlhKGPC4I0gXsaYuZSeSpaCwa6JHwDXDUjeSwj/osKE7lDnRx0XmGKKwZPNU4KuI9CUH450p5M9w3KgSmKEXJKayUz1/8E4WlSjfSkqpGwkhCeHtuIVd6Wei+fU/7uzYrL6tg8ZZD3omvvD4AxCEzNvM3wuX915K0x52GySJLpQUt9xYZLb1qrQAkVAnOE2ZZLx5rVzDLJkPrPRQ5Og3Yi3mT469AbKM/XPPuVgluiMCLOq8avAOQGK2brKjdaw2m3bDKuH18WJfMwwu/0uzSe1CWBwNj8/gAQapevhoYwMLjK9eJvWBh2Wc7tgHO51uZM3mVTylWFlsundM2ASssVHueReNpnUtMvXdCPHb0ZmZNy/3NW0u+y7FnLRvnrRSF8TYPeUYTOoRd0nbvwb6R0mBvHFqjs6ILLL7+d+JHCBnGAxu3AwgWAsS8LP3G+VL7arb1pEVJK52Svjoi2tPXWaRixAB1KxMep44UtY+TCGs+5fx++y2sUGhcEJBxXywpFmAPjOZLRuiDcnsWxZfTSMkQowoG6PUtcplasY4+NzJ/ivBjfka111KRLURNIRkCGaBZKPAROkGd9iKdiSENdpXRwubFl5ISjEPR3tdZaTY97w+hj8OQ=="; - work_repositories = { - mindcurv = "palo/mindcurv_nix"; - timewarrior = "palo/timewarrior_mindcurv"; - }; - - repository = name: project_path: { - name = name; - value = { - project = project_path; - title = "Deployment key"; - key = ssh_key; - }; - }; - - in - lib.mapAttrs' repository work_repositories; - -} diff --git a/terranix/gitlab/flake.lock b/terranix/gitlab/flake.lock deleted file mode 100644 index 37d94c7..0000000 --- a/terranix/gitlab/flake.lock +++ /dev/null @@ -1,129 +0,0 @@ -{ - "nodes": { - "bats-assert": { - "flake": false, - "locked": { - "lastModified": 1636059754, - "narHash": "sha256-ewME0l27ZqfmAwJO4h5biTALc9bDLv7Bl3ftBzBuZwk=", - "owner": "bats-core", - "repo": "bats-assert", - "rev": "34551b1d7f8c7b677c1a66fc0ac140d6223409e5", - "type": "github" - }, - "original": { - "owner": "bats-core", - "repo": "bats-assert", - "type": "github" - } - }, - "bats-support": { - "flake": false, - "locked": { - "lastModified": 1548869839, - "narHash": "sha256-Gr4ntadr42F2Ks8Pte2D4wNDbijhujuoJi4OPZnTAZU=", - "owner": "bats-core", - "repo": "bats-support", - "rev": "d140a65044b2d6810381935ae7f0c94c7023c8c3", - "type": "github" - }, - "original": { - "owner": "bats-core", - "repo": "bats-support", - "type": "github" - } - }, - "flake-utils": { - "locked": { - "lastModified": 1631561581, - "narHash": "sha256-3VQMV5zvxaVLvqqUrNz3iJelLw30mIVSfZmAaauM3dA=", - "owner": "numtide", - "repo": "flake-utils", - "rev": "7e5bf3925f6fbdfaf50a2a7ca0be2879c4261d19", - "type": "github" - }, - "original": { - "owner": "numtide", - "repo": "flake-utils", - "type": "github" - } - }, - "flake-utils_2": { - "locked": { - "lastModified": 1634851050, - "narHash": "sha256-N83GlSGPJJdcqhUxSCS/WwW5pksYf3VP1M13cDRTSVA=", - "owner": "numtide", - "repo": "flake-utils", - "rev": "c91f3de5adaf1de973b797ef7485e441a65b8935", - "type": "github" - }, - "original": { - "owner": "numtide", - "repo": "flake-utils", - "type": "github" - } - }, - "nixpkgs": { - "locked": { - "lastModified": 1633074215, - "narHash": "sha256-epmR1H1amgFWuU7xW9OXGjsAqltMqCSqkv1U2+9rOlM=", - "owner": "nixos", - "repo": "nixpkgs", - "rev": "378d2c5dcec7fef958cca3760448c09a9be2b7a3", - "type": "github" - }, - "original": { - "owner": "nixos", - "repo": "nixpkgs", - "type": "github" - } - }, - "root": { - "inputs": { - "flake-utils": "flake-utils", - "nixpkgs": "nixpkgs", - "terranix": "terranix" - } - }, - "terranix": { - "inputs": { - "bats-assert": "bats-assert", - "bats-support": "bats-support", - "flake-utils": "flake-utils_2", - "nixpkgs": [ - "nixpkgs" - ], - "terranix-examples": "terranix-examples" - }, - "locked": { - "lastModified": 1636274003, - "narHash": "sha256-HDiyJGgyDUoLnpL8N+wDm3cM/vEfYYc/p4N1kKH/kLk=", - "owner": "terranix", - "repo": "terranix", - "rev": "87fe67a2c254e74c1c3f3206c504fe7ba76a3c59", - "type": "github" - }, - "original": { - "owner": "terranix", - "repo": "terranix", - "type": "github" - } - }, - "terranix-examples": { - "locked": { - "lastModified": 1633465925, - "narHash": "sha256-BfXRW1ZHpK5jh5CVcw7eFpGsWE1CyVxL8R+V7uXemaU=", - "owner": "terranix", - "repo": "terranix-examples", - "rev": "70bf5d5a1ad4eabef1e4e71c1eb101021decd5a4", - "type": "github" - }, - "original": { - "owner": "terranix", - "repo": "terranix-examples", - "type": "github" - } - } - }, - "root": "root", - "version": 7 -} diff --git a/terranix/gitlab/flake.nix b/terranix/gitlab/flake.nix deleted file mode 100644 index 0299b8c..0000000 --- a/terranix/gitlab/flake.nix +++ /dev/null @@ -1,53 +0,0 @@ -{ - inputs = { - nixpkgs.url = "github:nixos/nixpkgs"; - flake-utils.url = "github:numtide/flake-utils"; - terranix = { - url = "github:terranix/terranix"; - inputs.nixpkgs.follows = "nixpkgs"; - }; - }; - - outputs = { self, nixpkgs, flake-utils, terranix }: - flake-utils.lib.eachDefaultSystem (system: - let - pkgs = nixpkgs.legacyPackages.${system}; - terraform = pkgs.terraform_0_15; - terraformConfiguration = terranix.lib.terranixConfiguration { - inherit system; - modules = [ ./config.nix ]; - }; - in - { - defaultPackage = terraformConfiguration; - # nix develop - devShell = pkgs.mkShell { - buildInputs = [ - pkgs.terraform_0_15 - terranix.defaultPackage.${system} - ]; - }; - # nix run ".#apply" - apps.apply = { - type = "app"; - program = toString (pkgs.writers.writeBash "apply" '' - if [[ -e config.tf.json ]]; then rm -f config.tf.json; fi - cp ${terraformConfiguration} config.tf.json \ - && ${terraform}/bin/terraform init \ - && ${terraform}/bin/terraform apply - ''); - }; - # nix run ".#destroy" - apps.destroy = { - type = "app"; - program = toString (pkgs.writers.writeBash "destroy" '' - if [[ -e config.tf.json ]]; then rm -f config.tf.json; fi - cp ${terraformConfiguration} config.tf.json \ - && ${terraform}/bin/terraform init \ - && ${terraform}/bin/terraform destroy - ''); - }; - # nix run - defaultApp = self.apps.${system}.apply; - }); -} diff --git a/terranix/graylog/MyDashboards.json b/terranix/graylog/MyDashboards.json deleted file mode 100644 index e4ea79a..0000000 --- a/terranix/graylog/MyDashboards.json +++ /dev/null @@ -1,674 +0,0 @@ -{ - "v": "1", - "id": "da023d7e-086a-4387-a5b1-02bd267d9c3f", - "rev": 2, - "name": "Dashboards", - "summary": "My Dashboards", - "description": "All my Dashboards focusing mainly on journald logs", - "vendor": "Ingolf Wagner", - "url": "", - "parameters": [], - "entities": [ - { - "v": "1", - "type": { - "name": "dashboard", - "version": "2" - }, - "id": "04d927ad-a217-43bf-aa9e-820777399cc3", - "data": { - "summary": { - "@type": "string", - "@value": "Overview on Graylog" - }, - "search": { - "queries": [ - { - "id": "bfb6a815-7213-484c-91ba-ebaeff542a66", - "timerange": { - "type": "relative", - "range": 300 - }, - "query": { - "type": "elasticsearch", - "query_string": "" - }, - "search_types": [ - { - "query": { - "type": "elasticsearch", - "query_string": "from_journald:true AND syslog_facility:<4 AND (systemd_unit:elasticsearch.service OR systemd_unit:kibana.service OR systemd_unit:graylog.service)" - }, - "name": "chart", - "timerange": { - "type": "relative", - "range": 86400 - }, - "streams": [], - "series": [ - { - "type": "count", - "id": "count()", - "field": null - } - ], - "filter": null, - "rollup": false, - "row_groups": [ - { - "type": "time", - "field": "timestamp", - "interval": { - "type": "auto", - "scaling": 1 - } - } - ], - "type": "pivot", - "id": "8e1ed6ed-ff1f-4d86-8981-a987aaaa5eed", - "column_groups": [ - { - "type": "values", - "field": "systemd_unit", - "limit": 15 - } - ], - "sort": [] - }, - { - "query": { - "type": "elasticsearch", - "query_string": "from_journald:true" - }, - "name": "chart", - "timerange": { - "type": "relative", - "range": 86400 - }, - "streams": [], - "series": [ - { - "type": "count", - "id": "count()", - "field": null - } - ], - "filter": null, - "rollup": false, - "row_groups": [ - { - "type": "time", - "field": "timestamp", - "interval": { - "type": "auto", - "scaling": 1 - } - } - ], - "type": "pivot", - "id": "d7e2a713-28fd-46d1-8c7a-29bd2867bebd", - "column_groups": [ - { - "type": "values", - "field": "source", - "limit": 15 - } - ], - "sort": [] - } - ] - } - ], - "parameters": [], - "requires": {}, - "owner": "admin", - "created_at": "2021-07-17T08:03:26.960Z" - }, - "created_at": "2021-07-17T05:53:41.503Z", - "requires": {}, - "state": { - "bfb6a815-7213-484c-91ba-ebaeff542a66": { - "selected_fields": null, - "static_message_list_id": null, - "titles": { - "widget": { - "b0d1972c-c917-4054-a946-d412859ee5f0": "Graylog Errors of last day", - "49928524-8949-42e2-b6a6-4f208e2febb5": "Graylog Input of last day", - "c535afa8-b27f-4cec-b117-483df2d439ec": "Graylog errors of last day", - "9a6682e0-8993-439a-bfff-62e4a3c99473": "Graylog errors of last day (copy)" - }, - "tab": { - "title": "Last Day" - } - }, - "widgets": [ - { - "id": "c535afa8-b27f-4cec-b117-483df2d439ec", - "type": "aggregation", - "filter": null, - "timerange": { - "type": "relative", - "range": 86400 - }, - "query": { - "type": "elasticsearch", - "query_string": "from_journald:true AND syslog_facility:<4 AND (systemd_unit:elasticsearch.service OR systemd_unit:kibana.service OR systemd_unit:graylog.service)" - }, - "streams": [], - "config": { - "visualization": "line", - "event_annotation": false, - "row_pivots": [ - { - "field": "timestamp", - "type": "time", - "config": { - "interval": { - "type": "auto", - "scaling": null - } - } - } - ], - "series": [ - { - "config": { - "name": null - }, - "function": "count()" - } - ], - "rollup": false, - "column_pivots": [ - { - "field": "systemd_unit", - "type": "values", - "config": { - "limit": 15 - } - } - ], - "visualization_config": { - "interpolation": "spline" - }, - "formatting_settings": null, - "sort": [] - } - }, - { - "id": "49928524-8949-42e2-b6a6-4f208e2febb5", - "type": "aggregation", - "filter": null, - "timerange": { - "type": "relative", - "range": 86400 - }, - "query": { - "type": "elasticsearch", - "query_string": "from_journald:true" - }, - "streams": [], - "config": { - "visualization": "line", - "event_annotation": false, - "row_pivots": [ - { - "field": "timestamp", - "type": "time", - "config": { - "interval": { - "type": "auto", - "scaling": null - } - } - } - ], - "series": [ - { - "config": { - "name": null - }, - "function": "count()" - } - ], - "rollup": false, - "column_pivots": [ - { - "field": "source", - "type": "values", - "config": { - "limit": 15 - } - } - ], - "visualization_config": { - "interpolation": "spline" - }, - "formatting_settings": null, - "sort": [] - } - } - ], - "widget_mapping": { - "49928524-8949-42e2-b6a6-4f208e2febb5": [ - "d7e2a713-28fd-46d1-8c7a-29bd2867bebd" - ], - "c535afa8-b27f-4cec-b117-483df2d439ec": [ - "8e1ed6ed-ff1f-4d86-8981-a987aaaa5eed" - ] - }, - "positions": { - "49928524-8949-42e2-b6a6-4f208e2febb5": { - "col": 1, - "row": 11, - "height": 3, - "width": "Infinity" - }, - "c535afa8-b27f-4cec-b117-483df2d439ec": { - "col": 1, - "row": 8, - "height": 3, - "width": "Infinity" - } - }, - "formatting": { - "highlighting": [] - }, - "display_mode_settings": { - "positions": {} - } - } - }, - "properties": [], - "owner": "admin", - "title": { - "@type": "string", - "@value": "Graylog" - }, - "type": "DASHBOARD", - "description": { - "@type": "string", - "@value": "" - } - }, - "constraints": [ - { - "type": "server-version", - "version": ">=3.3.9+abab7dc" - } - ] - }, - { - "v": "1", - "type": { - "name": "dashboard", - "version": "2" - }, - "id": "40d84ea8-3f72-47b8-9819-722b3f5dcbd3", - "data": { - "summary": { - "@type": "string", - "@value": "Overview on Graylog" - }, - "search": { - "queries": [ - { - "id": "bfb6a815-7213-484c-91ba-ebaeff542a66", - "timerange": { - "type": "relative", - "range": 300 - }, - "query": { - "type": "elasticsearch", - "query_string": "" - }, - "search_types": [ - { - "query": { - "type": "elasticsearch", - "query_string": "from_journald:true AND systemd_unit:init.scope AND syslog_priority:4" - }, - "name": "chart", - "timerange": { - "type": "relative", - "range": 86400 - }, - "streams": [], - "series": [ - { - "type": "count", - "id": "count()", - "field": null - } - ], - "filter": null, - "rollup": true, - "row_groups": [ - { - "type": "values", - "field": "custom_unit", - "limit": 15 - } - ], - "type": "pivot", - "id": "d480b368-2968-442c-94b9-e1e4e1830db7", - "column_groups": [], - "sort": [] - }, - { - "query": { - "type": "elasticsearch", - "query_string": "from_journald:true" - }, - "name": "chart", - "timerange": { - "type": "relative", - "range": 86400 - }, - "streams": [], - "series": [ - { - "type": "count", - "id": "count()", - "field": null - } - ], - "filter": null, - "rollup": false, - "row_groups": [ - { - "type": "time", - "field": "timestamp", - "interval": { - "type": "auto", - "scaling": 1 - } - } - ], - "type": "pivot", - "id": "148df0da-281a-4266-a363-9565c9b851b6", - "column_groups": [ - { - "type": "values", - "field": "source", - "limit": 15 - } - ], - "sort": [] - }, - { - "query": { - "type": "elasticsearch", - "query_string": "from_journald:true AND syslog_facility:<4 AND (systemd_unit:elasticsearch.service OR systemd_unit:kibana.service OR systemd_unit:graylog.service)" - }, - "name": "chart", - "timerange": { - "type": "relative", - "range": 86400 - }, - "streams": [], - "series": [ - { - "type": "count", - "id": "count()", - "field": null - } - ], - "filter": null, - "rollup": false, - "row_groups": [ - { - "type": "time", - "field": "timestamp", - "interval": { - "type": "auto", - "scaling": 1 - } - } - ], - "type": "pivot", - "id": "fe958d96-6908-4516-848d-9490d810ed3e", - "column_groups": [ - { - "type": "values", - "field": "systemd_unit", - "limit": 15 - } - ], - "sort": [] - } - ] - } - ], - "parameters": [], - "requires": {}, - "owner": "admin", - "created_at": "2021-07-17T11:41:39.203Z" - }, - "created_at": "2021-07-17T05:53:41.503Z", - "requires": {}, - "state": { - "bfb6a815-7213-484c-91ba-ebaeff542a66": { - "selected_fields": null, - "static_message_list_id": null, - "titles": { - "widget": { - "b0d1972c-c917-4054-a946-d412859ee5f0": "Graylog Errors of last day", - "49928524-8949-42e2-b6a6-4f208e2febb5": "Graylog Input of last day", - "c535afa8-b27f-4cec-b117-483df2d439ec": "Graylog errors of last day", - "9a6682e0-8993-439a-bfff-62e4a3c99473": "Graylog errors of last day (copy)", - "ac9ffdfc-8f48-4ed8-af3b-62120dc86bfa": "init.scope warnings", - "221557b8-5b8b-4c57-9449-00a1aaf91388": "Messages for custom_unit:backup.mount" - }, - "tab": { - "title": "Last Day" - } - }, - "widgets": [ - { - "id": "c535afa8-b27f-4cec-b117-483df2d439ec", - "type": "aggregation", - "filter": null, - "timerange": { - "type": "relative", - "range": 86400 - }, - "query": { - "type": "elasticsearch", - "query_string": "from_journald:true AND syslog_facility:<4 AND (systemd_unit:elasticsearch.service OR systemd_unit:kibana.service OR systemd_unit:graylog.service)" - }, - "streams": [], - "config": { - "visualization": "line", - "event_annotation": false, - "row_pivots": [ - { - "field": "timestamp", - "type": "time", - "config": { - "interval": { - "type": "auto", - "scaling": null - } - } - } - ], - "series": [ - { - "config": { - "name": null - }, - "function": "count()" - } - ], - "rollup": false, - "column_pivots": [ - { - "field": "systemd_unit", - "type": "values", - "config": { - "limit": 15 - } - } - ], - "visualization_config": { - "interpolation": "spline" - }, - "formatting_settings": null, - "sort": [] - } - }, - { - "id": "49928524-8949-42e2-b6a6-4f208e2febb5", - "type": "aggregation", - "filter": null, - "timerange": { - "type": "relative", - "range": 86400 - }, - "query": { - "type": "elasticsearch", - "query_string": "from_journald:true" - }, - "streams": [], - "config": { - "visualization": "line", - "event_annotation": false, - "row_pivots": [ - { - "field": "timestamp", - "type": "time", - "config": { - "interval": { - "type": "auto", - "scaling": null - } - } - } - ], - "series": [ - { - "config": { - "name": null - }, - "function": "count()" - } - ], - "rollup": false, - "column_pivots": [ - { - "field": "source", - "type": "values", - "config": { - "limit": 15 - } - } - ], - "visualization_config": { - "interpolation": "spline" - }, - "formatting_settings": null, - "sort": [] - } - }, - { - "id": "ac9ffdfc-8f48-4ed8-af3b-62120dc86bfa", - "type": "aggregation", - "filter": null, - "timerange": { - "type": "relative", - "range": 86400 - }, - "query": { - "type": "elasticsearch", - "query_string": "from_journald:true AND systemd_unit:init.scope AND syslog_priority:4" - }, - "streams": [], - "config": { - "visualization": "table", - "event_annotation": false, - "row_pivots": [ - { - "field": "custom_unit", - "type": "values", - "config": { - "limit": 15 - } - } - ], - "series": [ - { - "config": { - "name": null - }, - "function": "count()" - } - ], - "rollup": true, - "column_pivots": [], - "visualization_config": null, - "formatting_settings": null, - "sort": [] - } - } - ], - "widget_mapping": { - "c535afa8-b27f-4cec-b117-483df2d439ec": [ - "fe958d96-6908-4516-848d-9490d810ed3e" - ], - "ac9ffdfc-8f48-4ed8-af3b-62120dc86bfa": [ - "d480b368-2968-442c-94b9-e1e4e1830db7" - ], - "49928524-8949-42e2-b6a6-4f208e2febb5": [ - "148df0da-281a-4266-a363-9565c9b851b6" - ] - }, - "positions": { - "ac9ffdfc-8f48-4ed8-af3b-62120dc86bfa": { - "col": 1, - "row": 6, - "height": 6, - "width": 4 - }, - "c535afa8-b27f-4cec-b117-483df2d439ec": { - "col": 5, - "row": 6, - "height": 3, - "width": 8 - }, - "49928524-8949-42e2-b6a6-4f208e2febb5": { - "col": 5, - "row": 9, - "height": 3, - "width": 8 - } - }, - "formatting": { - "highlighting": [] - }, - "display_mode_settings": { - "positions": {} - } - } - }, - "properties": [], - "owner": "admin", - "title": { - "@type": "string", - "@value": "Graylog" - }, - "type": "DASHBOARD", - "description": { - "@type": "string", - "@value": "" - } - }, - "constraints": [ - { - "type": "server-version", - "version": ">=3.3.9+abab7dc" - } - ] - } - ] -} diff --git a/terranix/graylog/config.nix b/terranix/graylog/config.nix deleted file mode 100644 index e08f541..0000000 --- a/terranix/graylog/config.nix +++ /dev/null @@ -1,47 +0,0 @@ -with builtins; { - - imports = [ ./provider.nix ./nginx.nix ./journald.nix ]; - - # create default index - resource.graylog_index_set.default = - let - maxIndexSize = 200; - maxIndexCount = 20; - isDefault = true; - in - { - title = "default"; - description = '' - This is the default index set, where everything ends up which is - not specifically send to another index. - - Be aware this index can only hold ${ - toString (maxIndexCount * maxIndexSize) - }MB of logs! - ''; - default = isDefault; - index_prefix = "graylog"; - rotation_strategy_class = - "org.graylog2.indexer.rotation.strategies.SizeBasedRotationStrategy"; - retention_strategy_class = - "org.graylog2.indexer.retention.strategies.DeletionRetentionStrategy"; - index_analyzer = "standard"; - index_optimization_disabled = false; - writable = true; - shards = 1; - replicas = 0; - index_optimization_max_num_segments = 1; - field_type_refresh_interval = 5000; - retention_strategy = toJSON ({ - max_number_of_indices = maxIndexCount; - type = - "org.graylog2.indexer.retention.strategies.DeletionRetentionStrategyConfig"; - }); - rotation_strategy = toJSON ({ - #max_docs_per_index = 30000000; - max_size = maxIndexSize * 1024 * 1024; - type = - "org.graylog2.indexer.rotation.strategies.SizeBasedRotationStrategyConfig"; - }); - }; -} diff --git a/terranix/graylog/journald.nix b/terranix/graylog/journald.nix deleted file mode 100644 index 5d6c872..0000000 --- a/terranix/graylog/journald.nix +++ /dev/null @@ -1,115 +0,0 @@ -with builtins; { - - imports = [ ./journald/nextcloud.nix ./journald/kibana.nix ]; - - resource = { - - graylog_input = { - journalbeat = { - title = "Journalbeat Logs"; - # https://javadoc.io/doc/org.graylog2/graylog2-inputs/latest/index.html - type = "org.graylog.plugins.beats.Beats2Input"; - global = true; - attributes = toJSON ({ - bind_address = "0.0.0.0"; - no_beats_prefix = true; - number_worker_threads = 4; - port = 5044; - recv_buffer_size = 1048576; - tcp_keepalive = false; - tls_cert_file = ""; - tls_client_auth = "disabled"; - tls_client_auth_cert_file = ""; - tls_enable = false; - tls_key_file = ""; - tls_key_password = ""; - }); - }; - }; - - graylog_input_static_fields.journalbeat = { - input_id = "\${graylog_input.journalbeat.id}"; - fields = { - from_journald = true; - journalbeat = true; - }; - }; - - graylog_stream.journald = { - title = "journald"; - description = "journald processing stream"; - index_set_id = "\${graylog_index_set.default.id}"; - disabled = false; - matching_type = "AND"; - }; - - graylog_stream_rule.journald = { - field = "from_journald"; - value = true; - stream_id = "\${graylog_stream.journald.id}"; - #description = ""; - type = 1; - inverted = false; - }; - - graylog_pipeline_connection = { - journald = { - stream_id = "\${graylog_stream.journald.id}"; - pipeline_ids = [ - #"\${graylog_pipeline.journald_fix_loglevel.id}" - "\${graylog_pipeline.journald_iptable_parse.id}" - #"\${graylog_pipeline.journald_loglevel_int_to_str.id}" - ]; - }; - }; - - graylog_pipeline = { - journald_iptable_parse.source = '' - pipeline "journald : ip table parse" - stage 0 match either - rule "journald : iptables split" - end - ''; - }; - - graylog_pipeline_rule = { - iptableSplit.source = '' - rule "journald : iptables split" - when - has_field("facility") && $message.facility == "kernel" - then - let result = regex( - "^refused connection:\\s*IN=(.*) OUT=(.*) MAC=(.*) SRC=(.*) DST=(.*) LEN=.* TOS=.* PREC=.* TTL=(.*) ID=(.*) PROTO=(.*) SPT=(.*) DPT=(.*) WINDOW=(.*) RES=.*", - to_string($message.message), - ["in_interface" - ,"out_interface" - ,"mac_addr" - ,"src_addr" - ,"dst_addr" - ,"ttl" - ,"iptables_id" - ,"protocol" - ,"src_port" - ,"dst_port" - ,"window"] - ); - - set_field("in_interface" ,result.in_interface); - set_field("out_interface" ,result.out_interface); - set_field("mac_addr" ,result.mac_addr); - set_field("src_addr" ,result.src_addr); - set_field("dst_addr" ,result.dst_addr); - set_field("ttl" ,result.ttl); - set_field("iptables_id" ,result.iptables_id); - set_field("protocol" ,result.protocol); - set_field("src_port" ,result.src_port); - set_field("dst_port" ,result.dst_port); - set_field("window" ,result.window); - - end - ''; - - }; - }; - -} diff --git a/terranix/graylog/journald/kibana.nix b/terranix/graylog/journald/kibana.nix deleted file mode 100644 index e6e856c..0000000 --- a/terranix/graylog/journald/kibana.nix +++ /dev/null @@ -1,59 +0,0 @@ -with builtins; { - - resource = { - - graylog_pipeline_connection = { - journald.pipeline_ids = [ "\${graylog_pipeline.kibana.id}" ]; - }; - - graylog_pipeline = { - kibana.source = '' - pipeline "kibana : parsing" - stage 10 match either - rule "kibana : parse level 1" - stage 11 match either - rule "kibana : parse message" - end - ''; - }; - - graylog_pipeline_rule = { - kibanaLevel1.source = '' - rule "kibana : parse level 1" - when - has_field("systemd_unit") && ($message.systemd_unit == "kibana.service") - then - let parsedJson = parse_json(to_string($message.message)); - set_fields(to_map(parsedJson),"kibana_"); - end - ''; - kibanaLevelRequest.source = '' - rule "kibana : parse request" - when - has_field("kibana_req") - then - let parsedJson = parse_json(to_string($message.kibana_req)); - set_fields(to_map(parsedJson),"kibana_req_"); - end - ''; - kibanaLevelResponse.source = '' - rule "kibana : parse response" - when - has_field("kibana_res") - then - let parsedJson = parse_json(to_string($message.kibana_res)); - set_fields(to_map(parsedJson),"kibana_res_"); - end - ''; - kibanaLevelMessage.source = '' - rule "kibana : parse message" - when - has_field("kibana_message") - then - set_field("message", $message.kibana_message); - end - ''; - }; - - }; -} diff --git a/terranix/graylog/journald/nextcloud.nix b/terranix/graylog/journald/nextcloud.nix deleted file mode 100644 index e3e56ce..0000000 --- a/terranix/graylog/journald/nextcloud.nix +++ /dev/null @@ -1,62 +0,0 @@ -with builtins; { - - resource = { - - graylog_pipeline_connection = { - journald.pipeline_ids = [ "\${graylog_pipeline.nextcloud.id}" ]; - }; - - graylog_pipeline = { - nextcloud.source = '' - pipeline "nextcloud : parsing" - stage 10 match either - rule "nextcloud : parse level 1" - stage 11 match either - rule "nextcloud : parse level 2" - stage 12 match either - rule "nextcloud : parse level 3" - end - ''; - }; - - graylog_pipeline_rule = { - nextcloudLevel1.source = '' - rule "nextcloud : parse level 1" - when - has_field("systemd_unit") && ($message.systemd_unit == "phpfpm-nextcloud.service" || $message.systemd_unit == "nextcloud-cron.service") && starts_with(to_string($message.message),"{") - then - let parsedJson = parse_json(to_string($message.message)); - set_fields(to_map(parsedJson),"nextcloud_"); - end - ''; - #nextcloudLevel2.source = '' - # rule "nextcloud : parse level 2" - # when - # has_field("nextcloud_message") - # then - # let parsedJson = parse_json(to_string($message.nextcloud_message)); - # set_field("message", $message.nextcloud_message); - # set_fields(to_map(parsedJson),"nextcloud_message_"); - # end - #''; - nextcloudLevel2.source = '' - rule "nextcloud : parse level 2" - when - has_field("nextcloud_message") - then - set_field("message", $message.nextcloud_message); - end - ''; - nextcloudLevel3.source = '' - rule "nextcloud : parse level 3" - when - has_field("nextcloud_message_Message") - then - remove_field("nextcloud_message"); - set_field("message", $message.nextcloud_message_Message); - end - ''; - }; - - }; -} diff --git a/terranix/graylog/nginx.nix b/terranix/graylog/nginx.nix deleted file mode 100644 index c47cc39..0000000 --- a/terranix/graylog/nginx.nix +++ /dev/null @@ -1,311 +0,0 @@ -/* # use this nginx configuration - # to send data to these inputs - - log_format graylog2_json escape=json '{ "timestamp": "$time_iso8601", ' - '"facility": "nginx", ' - '"src_addr": "$remote_addr", ' - '"body_bytes_sent": $body_bytes_sent, ' - '"request_time": $request_time, ' - '"response_status": $status, ' - '"request": "$request", ' - '"request_method": "$request_method", ' - '"host": "$host",' - '"upstream_cache_status": "$upstream_cache_status",' - '"upstream_addr": "$upstream_addr",' - '"http_x_forwarded_for": "$http_x_forwarded_for",' - '"http_referrer": "$http_referer", ' - '"http_user_agent": "$http_user_agent" }'; - - access_log syslog:server=${access_log_input} graylog2_json; - error_log syslog:server=${error_log_input}; -*/ - -with builtins; { - - resource = { - - graylog_input = { - - nginx_access_logs = { - title = "nginx access log"; - # https://javadoc.io/doc/org.graylog2/graylog2-inputs/latest/index.html - type = "org.graylog2.inputs.syslog.udp.SyslogUDPInput"; - global = true; - attributes = toJSON ({ - allow_override_date = true; - bind_address = "0.0.0.0"; - expand_structured_data = false; - force_rdns = false; - number_worker_threads = 4; - port = 12304; - recv_buffer_size = 1048576; - store_full_message = false; - }); - }; - - nginx_error_logs = { - title = "nginx error log"; - # https://javadoc.io/doc/org.graylog2/graylog2-inputs/latest/index.html - type = "org.graylog2.inputs.syslog.udp.SyslogUDPInput"; - global = true; - attributes = toJSON ({ - allow_override_date = true; - bind_address = "0.0.0.0"; - expand_structured_data = false; - force_rdns = false; - number_worker_threads = 4; - port = 12305; - recv_buffer_size = 1048576; - store_full_message = false; - }); - }; - - }; - - graylog_extractor = { - - # nginx error - nginx_error_timestamp = { - input_id = "\${graylog_input.nginx_error_logs.id}"; - order = 0; - title = "Timestamp"; - type = "regex"; - extractor_config = toJSON ({ - regex_value = - "^.*:\\s(\\d\\d\\d\\d/\\d\\d/\\d\\d\\s\\d\\d:\\d\\d:\\d\\d)\\s.*$"; - }); - target_field = "timestamp"; - source_field = "message"; - cursor_strategy = "copy"; - condition_type = "none"; - converters = { - config = toJSON ({ date_format = "yyyy/MM/dd HH:mm:ss "; }); - type = "date"; - }; - }; - nginx_error_server = { - input_id = "\${graylog_input.nginx_error_logs.id}"; - type = "regex"; - source_field = "message"; - cursor_strategy = "copy"; - condition_type = "string"; - condition_value = "server"; - extractor_config = toJSON ({ regex_value = "server:\\s(.+?)(,|$)"; }); - order = 1; - target_field = "server"; - title = "server"; - }; - nginx_error_remote_addr = { - input_id = "\${graylog_input.nginx_error_logs.id}"; - type = "regex"; - source_field = "message"; - cursor_strategy = "copy"; - condition_type = "string"; - condition_value = "client"; - extractor_config = toJSON ({ regex_value = "client:\\s(.+?)(,|$)"; }); - order = 2; - target_field = "remote_addr"; - title = "remote_addr/client"; - }; - nginx_error_host = { - input_id = "\${graylog_input.nginx_error_logs.id}"; - type = "regex"; - source_field = "message"; - cursor_strategy = "copy"; - condition_type = "string"; - condition_value = "host"; - extractor_config = toJSON ({ regex_value = ''host:\s"(.+?)"(,|$)''; }); - order = 3; - target_field = "host"; - title = "host"; - }; - nginx_error_request_path = { - input_id = "\${graylog_input.nginx_error_logs.id}"; - type = "regex"; - source_field = "message"; - cursor_strategy = "copy"; - condition_type = "string"; - condition_value = "request"; - extractor_config = - toJSON ({ regex_value = ''request:\s"(.+?)"(,|$)''; }); - order = 4; - target_field = "request_path"; - title = "request_path/request"; - }; - nginx_error_request_verb = { - input_id = "\${graylog_input.nginx_error_logs.id}"; - type = "regex"; - source_field = "message"; - cursor_strategy = "copy"; - condition_type = "string"; - condition_value = "request"; - extractor_config = toJSON ({ - regex_value = '' - request:\s"(GET|HEAD|POST|PUT|DELETE|TRACE|OPTIONS|CONNECT|PATCH).+"(,|$)''; - }); - order = 5; - target_field = "request_verb"; - title = "request_verb"; - }; - - # nginx access - nginx_access_json_from_syslog = { - input_id = "\${graylog_input.nginx_access_logs.id}"; - title = "Get JSON from syslog message"; - type = "regex"; - cursor_strategy = "copy"; - condition_type = "none"; - source_field = "message"; - target_field = "json"; - order = 0; - extractor_config = toJSON ({ regex_value = "nginx:\\s+(.*)"; }); - }; - nginx_access_extract_json = { - input_id = "\${graylog_input.nginx_access_logs.id}"; - title = "Extract JSON fields"; - order = 1; - source_field = "json"; - type = "json"; - cursor_strategy = "copy"; - condition_type = "none"; - extractor_config = toJSON ({ - flatten = true; - list_separator = ", "; - kv_separator = "="; - key_prefix = ""; - key_separator = "_"; - replace_key_whitespace = false; - key_whitespace_replacement = "_"; - }); - }; - nginx_access_empty_json = { - input_id = "\${graylog_input.nginx_access_logs.id}"; - order = 2; - title = "Empty JSON field"; - type = "regex_replace"; - extractor_config = toJSON ({ - regex = ".*"; - replacement = "-"; - }); - target_field = "json"; - source_field = "json"; - cursor_strategy = "copy"; - condition_type = "none"; - }; - nginx_access_reduce_message = { - input_id = "\${graylog_input.nginx_access_logs.id}"; - order = 3; - title = "Reduced message to path"; - type = "regex_replace"; - extractor_config = toJSON ({ - regex = ''.*request": "(.*?)".*''; - replacement = "$1"; - }); - target_field = "message"; - source_field = "message"; - cursor_strategy = "copy"; - condition_type = "none"; - }; - - }; - - graylog_input_static_fields = { - - nginx_access_logs = { - input_id = "\${graylog_input.nginx_access_logs.id}"; - fields = { - from_nginx = true; - nginx_error = false; - nginx_access = true; - }; - }; - - nginx_error_logs = { - input_id = "\${graylog_input.nginx_error_logs.id}"; - fields = { - from_nginx = true; - nginx_error = true; - nginx_access = false; - }; - }; - - }; - - graylog_stream = { - nginx5xx = { - title = "nginx 5xx"; - description = "all requests answered with a 5xx response"; - index_set_id = "\${graylog_index_set.default.id}"; - disabled = false; - matching_type = "AND"; - }; - nginx4xx = { - title = "nginx 4xx"; - description = "all requests answered with a 4xx response"; - index_set_id = "\${graylog_index_set.default.id}"; - disabled = false; - matching_type = "AND"; - }; - nginx2xx = { - title = "nginx 2xx"; - description = "all requests answered with a 2xx response"; - index_set_id = "\${graylog_index_set.default.id}"; - disabled = false; - matching_type = "AND"; - }; - nginx_access = { - title = "nginx access"; - description = "all requests"; - index_set_id = "\${graylog_index_set.default.id}"; - disabled = false; - matching_type = "AND"; - }; - nginx_error = { - title = "nginx error"; - description = "all errors"; - index_set_id = "\${graylog_index_set.default.id}"; - disabled = false; - matching_type = "AND"; - }; - }; - - graylog_stream_rule = - let - nq_stream_rule = field: value: stream_id: { - inherit field value stream_id; - type = 1; - inverted = true; - }; - eq_stream_rule = field: value: stream_id: { - inherit field value stream_id; - type = 1; - inverted = false; - }; - gt_stream_rule = field: value: stream_id: { - inherit field value stream_id; - type = 3; - inverted = false; - }; - lt_stream_rule = field: value: stream_id: { - inherit field value stream_id; - type = 4; - inverted = false; - }; - between = min: max: stream_id: { - "is_nginx_access_${min}_${max}" = - (eq_stream_rule "nginx_access" true stream_id); - "nginx_above${min}" = (gt_stream_rule "response_status" min stream_id); - "nginx_below${max}" = (lt_stream_rule "response_status" max stream_id); - }; - in - (between "499" "600" "\${graylog_stream.nginx5xx.id}") - // (between "399" "500" "\${graylog_stream.nginx4xx.id}") - // (between "199" "300" "\${graylog_stream.nginx2xx.id}") // { - is_nginx_access = (eq_stream_rule "nginx_access" true - "\${graylog_stream.nginx_access.id}"); - is_nginx_error = - (eq_stream_rule "nginx_error" true "\${graylog_stream.nginx_error.id}"); - }; - - }; -} diff --git a/terranix/graylog/provider.nix b/terranix/graylog/provider.nix deleted file mode 100644 index f5ccb44..0000000 --- a/terranix/graylog/provider.nix +++ /dev/null @@ -1,13 +0,0 @@ -{ - terraform.required_providers.graylog = { - source = "terraform-provider-graylog/graylog"; - version = "1.0.4"; - }; - - provider.graylog = { - web_endpoint_uri = "http://graylog.workhorse.private/api"; - api_version = "v3"; - #auth_name = "GRAYLOG_AUTH_NAME"; - auth_password = "token"; - }; -} diff --git a/terranix/graylog/shell.nix b/terranix/graylog/shell.nix deleted file mode 100644 index 0f9857f..0000000 --- a/terranix/graylog/shell.nix +++ /dev/null @@ -1,15 +0,0 @@ -{ pkgs ? import { } }: -let pass_access_token_path = "development/graylog/access_token"; - -in pkgs.mkShell { - - buildInputs = with pkgs; [ - git-crypt - terranix - (writers.writeBashBin "terraform" '' - export GRAYLOG_AUTH_NAME=`${pkgs.pass}/bin/pass show ${pass_access_token_path}` - ${pkgs.terraform_0_15}/bin/terraform "$@" - '') - ]; - -} diff --git a/terranix/graylog/terraform.tfstate b/terranix/graylog/terraform.tfstate deleted file mode 100644 index 4b0218c9618ebfd63dd3b3eb3f201c8112c3b3a3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 43612 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�g4^!Ol*o%~2V)Vu@^9=P?klpO&NbX!zZp5}TL5*7If zz?s23m~?LeAA6hCEKI|@u=TaLi5_CnYnqnGz}3uQ5@B-5viaP0Bob#}t9{dS4?0qj<}WqC@wuVGZ-K!}6!j|EjP@u`?P8A*0K%Xmot)tlpE?7z#?W9Z{H;W^jzAFfGUEN$W zJif%o+d1#}oz1)!LhXMLo3yt6ndBMkh#INVp4;0e%Z*B#8+MgeCe4p z33@sYIrwbjCil+QUjAM0C+y=av-uCChJ`Dt*dpC0(>h!SwuYTMDc)aHQn!-P7L2Vj z|0tp~UtF5uvJcS;G;sYr=w4LXG$guWZY@&f$Urf%A%ym&1*Z!z%!QOGoF=GU@&ti? z%KH6;e<v7I$b2cFH-8b>zsC?hDR!j4h5N$5=G)Uy@24mQ zB#arN@`oyf#UM(0Is?#Vox1>@>$J_4el3B2k8qCi zhqfK&aaZ&s(x<_N7PLQgdP{LAbv<#F5p2JEB+6_%L`@^Dy~z%Gn|GB>ip>Pp88uTx z-UE-?5RCVsSe78`MZo>jh99>?C6W)ps@JeN#Rxe_%J@r|wb~5y~fgLy(mCoa9g{hDpb!x<$St1qv5JdWo+`M73&9sFV8soE%8;+z>N_}>^zo5R^GD&-}d zu$-um09;yVofO%3KpETA6xwaV8ajym&qo^aWkPjGt*pWFjF zDsY0%R)J&KaQmC5kPR>g+O=`oxG-^0?F+SmZht?ab;f93MC5!+|G#){bW1+HQ&L4- z-ir^Ul|_u@9^Cr_Z7vRTDYreHXz;b<4$N>*U_gLAN0F^k$Qo^94n^l4>8<%iQh_2& zcng=yMn_dhjF=j$!N&Pht?ah(t|ZMMK-6984Lx!;<&jVm8HCB6x|>z;EY_?eY99uc zrAJYBU9gns+{kYx)47->HRSSOhST*`A8R0^-+n6TExj^7J>zN2#{{|Asf<(~?Esd% z1X%;6s@&(n>=vLw8CCLN{-P^svO>u;>mB>`%SyJY=@g5GPG zr!_$DF5u8D3z8+xLz}{sK2o=mCmmg(MGnGc+b^Dof&c)BOqA0 zHVxJTOmtTnM!pR^jkojkoN%mce*;_izds(WCX1-zYah^)D5wU2jXpCs@>%JT35biH zM7XkDylj%Oa&cts8khE{gK?nd_5tUgP$KVlm?K>3dV7DeN#A&~S$8hKIFzvLp+E7o zt(g9V7gYZ0lX~{~zbLxu1XjCPo?v7K&%*Y2zJx9KvBuZ+hPm{_b6tDOCGJ@>iLev{ z&Ili%EbwFSg}K7zehnn7x~4v-*ZD4f#MB``eY9BN3w}BGTIj%nZwNyqvH+3V8YXu< z#y|+TX~<~_my`mA6l)0I5^mT!2ZI0~%b)=|!k|5*W+3ppnoQ|ew$UDF5(TLlNsix37A zS`TNjZMtM-=KkXeyi?@|KGADKyP&>!{Sf2lo(2GEtky@?nBc_E61>O#nU>ItWcrkl4> ziI&mqB~S@0O8eilvkWgw1JQn}G`kR2J(uF3_Z6+$kV@m)jfg2`j^xa%q^grts-%Xa z(s#=KtE-#(hFmmAIJr$NI8u53T|c}m3X7dVCWCilbCK3Di0_w|97w))F^7Q)k2h?= z3Vz@^9;rEnu&g2$0{qM0NGT!g)-|||;=(pt%Dnh%OoH^)3vO;=64XT%{t)%dyjWHw z25u0~%e*-xcr4O5HgzXv_wwHYfmJm}HT|<6!0<+Oh=9Z@n8lgp<>puEj(4?OhEWoZ z-HYiNg?t+sW7wqmrzp5r#;%JWZCRe@S{sR=py22f7_oFjIf-f3Z(Z$;=F5u}C@|jh z6#sRLt8vUS<%f1CoXRv9beVs|0=wAHQeidJ5GUraXErAp)RZU+Y_ zJoDg3wENp?_@6_p$35a|J_d4JB8YCoN&x|LD49&*&w?p?N`K%L^4J~A-(ww=;JMIj zt>C0w{ZYH$Yjg>%qm5za?-O+iqw=3?vARmr^{SsnMbAsMQYA8!IKZ}fI1+`*XG4OA zTXNOv6Fkckt~SX8$Ar@XQF*bVC*cSqAiQ|(BPkM{2ApGCr{BSlrBu^OX+H`H!{e!~ zeZupk_og~4At+*u#U+_hd z*X0~~ydFi7#XFI}(4#uB2QEh9gopTd|Z2^+!! zT(!Q$+6FN#3RE7$(V1iZl&l`YkC6VC)2 zn_{o2!3sI{9)n@|#|;YW<uFU`a-(}vRC}gvY-6rP=KP>P z6prKsY`8Ql>=7BBH}`GMCJa~c2TPNT80!i{pRcfaGSYV8Pmtyh#R2Icj#F&Pb}pg$ zHZspB{}`NHZV*`6J|1#4Cmw#GezcBxUK}eDC2RgBWD1gr9wA%L*Xp0XqaxM}Do^iY zx5=5VW?Te4BynO*kgLZtuhJo=kro#`eohb5?9?DYZbB%UgmXH7QQW5LEh%>COeST| z$d$bkJq*voSWZb4hu>jghxh&8SPP?fwhY} zLP`86G0z<7-=?sphoXp~F*}#8korwX=2QKz)S)npo_tkb7Ce%SIAtFTfXI!aDfglF zVr}m&(|UNhBUZLd8Vw@HwS9WeS$_8w)x_RMbdgD6}Mh#UWY#k9jP%bgP?q1zpLh zYhqRQ8kygx>h`11r=i#Lex0(I1 zJ?jrmZ&nojce+Hv_G@5Gi}A>6*oRj1K`~`$t9wU-{IeUBw&1Ntx~V`z0yNX!PS(voDA094beuS)=A6g&dpd z_tt`VP=k4m@U^34qPA;#6#MHNfN+xGtu*&!1j8ZMah_A1!%h{WQ=Mu4DSR%W*} z3`9L8^#zB8nm{m)5EbcIS>QlbwyKLw{A3MWQ zi@p}BAbfL1k!fxmF*c15-0@N)?gG?V?mzKPB3#R&xQVUiNL7GXWaq(xy)+m;%Xh69 z2mt}I2+#L9@48P}RBVynGUq^<(%iiYpIfwMeI3kHaHp$q+j^4}dyY#TNzaBX0J)FB zx1%1(v&KK78YUn>g2%m{5Dn3p=Dwh|$|Ru@YdJD03&`+i9;lHp43di3`KvNs_K_SS z*ZtQqFVePPdVT7g#i~abKT0T=)jKPJxOzuGF~eWN+aalOhlya*9VDYrLFD@`T<;>Q?I`WV{-pE|HCk5!DPU`2<2kX=B@n|A!mRv2-9d?h(u2x>V7~W-%W%IK3@BD}%I%x!Cw!O#!4pIuQpN*zdvHk1>=u=wr@5P6K$>*oSF)1?K z^`;(zORF6K9E*wg#azs=edZP;V3fH2`PiseJK!fO)c?RBJC?cmP za%~Jg09aDdfsy#5`*Ox;Wjj})p_3;r?IlJ^pmt$QVl!gREs&|MV}zfdMTrZaK!qfy z(LL~ZgE0od1h4rKxt*k>5q9Kb-j!QC_eUjR_Y`?|@VX+=+-&VYIzH7h2tRmG1qh#t z7-Fi4Bo948%~djKQcrm2hxc<0)COVBdGWbIdR8X9huNcbVIujn+U7Fu?CXvFTiNQL zeCWn>c|S=VJwkRqyN3&i;o3KTfUOQXdw^@#k`-WXEW32~CH)n)L-tvhK-6OxlQLUXh#+ z*LXo0<<)2?zBGiWD$M+r3yq9+Xp?k%w$E^!F-NhC!7-X{bb1-Z7_X87{iL46XQB-& z$R!c7WWs4r=t3?HqQU=iZKtQ{Is$smBuPgGjg=shFC=DKq8OdG%u3ie!;TAJ6~iJN zIk<*~QFI42&HiVfdCI(Sr(oJhl`h3~6xZ=T5R5sbpNbXC2lQuhL$tK0AW0%ZEvO%? ze%S7MShQpnCveRUHcLT{g%<~7ED8xo9Yq6$VOWvU^=rTN1>##eU(oFw(IzMSTVLcK zJ2;GhNVOzjTsTdCYZ^mxwVV1(melP@CFCc{eQnfQ>~)PDumXT21Q+|i4m?#K@r|w! z;@!+cF}?YY&t&rY(!c-xpmUJkuirQX<9iNOKh^*_oN(UIt>PTOmfR#)tibETZ1?p= z$B4%^yW#HZZDYOFfO4XaSHp0hFK9IKej&brrQ$JAR zt8We{a@yP1H+CM8^HnWjub5`43DpqLeuoE(M=Mp$rx7A7-(%KNUiKwBo7{84s$khM&1as$<7bHjW;U|IyiKRjo>8gfJrGfT%jn z5g>pCBm%dogffS|(Ihh3mO&IE(N+&f5l)wG8$1*~NVO&T$Olewdvhi%6~KQ)@$oM_ zsp`w~$VgY4??;me5%;>Mr&OJ@w&vaKbKbS8@9fj2Mj&GR0M7zWCn(kRq|Wycx;xu%s?pQs&^qF#T=z@*n9)#FuIoY?+2t zd?%~yjGy&#t(uBmS}v&5DXy6 zjh_nt(hzR_GwF@z1C<+(I|WxZZly1YmDFZl8#has090|$x>^&Chi}6n;FH-O1ah9eb`5ox_YeV zVeEg0H7H@=p6p+#R#~b2IC_{2%YJq>uS5EhzMO67dhA!ZRfL~)|A1=Bh=nKc&oUZ@ zN`_V`S5rOVqPxF^WUz21U$n)cOH;>QBe*Xi(Xq+~c_0wpACfAN1b~f5KDU-o3@eat zsB-D;Cy5<`oR{ZedEoZR(J3~a7NEKXdmXaVXgE9$lfL(NAxq7CO2-m(`qU>s-^;sV z+KmScMp2x}?(b=P^8VApyW9#Y0~v(v!rY9bR}*7c{aE9e{DI^yDEhh^uf2h`GS}4z zhSLehY-@a5O=UbgyN zcyh)-I+?e*yu&emJr3(*NQ6lNo$^2ff(en675n;8UO8^fjuZQX(~tYeQB6ZVDAfD6 zeJ9mt#Baw5$p)!n7VA$73ucw`XRQp`# zR*bizBG*}gAJI6L`{&p&6wO8!TFgO}1VoD>2#nM)|jqoWoVMpJH1tk-QtLn zyh2@-gBg>XVU1mO55mLQUw0}%GLR7GX)__^NY%c3CXY%&rzGT8xiFkb)^WOk@u#Id zI2?FWlc1<^NfWb&f@~TzvV{$}%FoMgo`!RX;ZrgB&9~6`x6n!_f@Cwx77Nug^^8TY1=}Aax#1&#M&8rf)+j@ZM7aFc#6YW2^k14 zf*fTI4Z)0_rE2)iG{j(n+qtO?k+6?Av&$t69c}QpulDL_o~Qht2h$!mLJ-5Ybr-Yk{}tr-VSs6Pf0RUp4Iqh^v-H*H`I#2*da3#%^0c5z z#;IWxGIQ$g?_(N2HAY6Jm(lw3@t;-n^M2B&0rtiDGZw`3(*1b zTNPirO0ZQr9i$NJ>oku=pI!)+z~|}rkJ~3ab8yrX_QYL6)VR5T3TVCfuae&4`;>}k z6({c|+v_29bF3$qkJjYO(c`HH-wfKaWLR9*E4&RZ(DRo9v|UIy+Ednm#Z}YbkTTxG z<6ap$Ap5s0g8FN?gZ0 z?|yyXlss_~21s2TNWuM!IfrKxD~%uj3>P`@p3TtpVgKFSRe86ARQL=V*6+YQ~q&h~Sg8IBqOK+a}sO(6x4iucEpXK4%)R{txhjauNQ}3lq z@gGLO?Y>_)W={W_1yV)}^{$_y!VrHq%k0Kc7hGyi@0-Smu8?7}N{n(5Wkf)R$Ows? z&Y>aU12i`=5~Z};v(PM*P5$Uj#uxO{u^YtIzvtvtYRoyV%8SMGA^{z?~2^v(e2A@*5j;!4%hT;z2u@EkecKU9iRo4<2}2q~}V zjj%~cW6Ir$W-PG$4cyOPNBq*5QnA_-3?~uWed%r<6))VPlDg5@8cz26^J*JkptJaN z_r6^U#jPRMU&%=H$LRYu$H_Aam|M#Gj4#xLQPT`H7UnQ!5XR>F2qDl2w`^+|;hUgf zLQ*%^yA3JcKc{TOfwvHs8>Y224Pgb{4@ki2_#_WkZTmicMxJgD>QaM|7$JBF?PuKe zPd*E5I`&nkiNHMIpiq`zO$I1aOuKq*<*MFR?(w)fP-=}179mWTQaaj;!54FPEqWq~ zpVsd&E)2+0Jnxpu{-h8f?rxm$)YJ<~SNL5mW#^1SDd|{UVucOadCERB$Z9h%_`j6y zqzapzPS$SrH*Zny$G4z|F*y(0G3Ri%lL}gI1O0urWsR%6Qlx$oExOpt-=wcs`#ZB# zz0@+y9y}WjGDpUWess-}tOy>DVDBC|Qm&+aV>tsLP?ivALj_B`0hz0P?6#XY?$nY zQ7te%OVQ<@@4 zOqwxo#yD291#^6-!5o>(- zg7WZDp2-d~9i`6gx>hPOcx3}z%?mkAce*H6OW9vvdR{INLNTV!{4}ge+*QG@<}I`y zX?3lr%hpA33*ypP!52bX=QB~rTOIDu>8YJ9StZC?@n+c-JI8*57KGuW7{PYdQq_g3 z^3^#^Fw!TOkIUkTGXFAnN>+Q;=Ae`%3OO&FVX57hUo z(t=$<_5S?rUpYDTwvNlKPlm1$Jz<^%lI58^`PtVCO7ESIB6q+ut*s11RK)relAya} z=ke3L%%;_DQQ>m73bqq@)I4e3da4oO*-JmR%)HwZenl=c0T4+~HYHmOXdgvEg;y>C z?al*WPD!UNObh~ zV$JH9AjFK}RZRL^9iIAnd>M+}wGL7D6soS}@&;vBp)gov6C(q2Hn@+i$wLT4a5y}2 z{p_QZZZ>$lWc?&k=W4`g+qzt`UDp^V9=3t(c~6bFez}V@dk~z-5NAueKrGKdU_10; zZAqNWxc2&z=e}06;PjN_XbP@wzBsZ9lt_UxmZxRYdu|ejfr{Le8DXOP%Au)RC}_(N zysUISCm(%k&j;4s4=UrzM~oD3d<=+p_l3UUYq72vLJ@*pPX*_#8LL+J05L$$zh=I&g6xbpfHX z*bgP7#4A#MA1W!BXfk7vKWKOwm1fk%AiW31fm8ZG$KDN9TV!Z7H=l|HOvC3RVtsUK z?`FqX0_jkDG;Z!nDPdIy+71ZeD%A@V!JvpCNC=A8a#|DHy3#=;*Jeae>--um|4^D- zVi9R^vyaiw}J6UBK=o^uOD;1 zjka)bw4fV<(m}`*i0dHGZ}sjCl@YtiABFi{h5KeQ43s^7a@?7pcT4#>s6(z6m_NFVFgwaD!a|2(e=DTTEv^x+D2xZVy6Ne8dI zwPvFcABB-N;$vSjb$Tw$zdjM$3I7HwMM6t40lk>J2+~aa#ma1d*&za15gvb{_bagL zQS;UXKaommby^IRg;U*@6Gq$NB2uW2b7>SlJJ9HA zTHgA!p|zm^)?EZH^76>L0=;AKbJVj5P2%mT8b_0j(Jyv^aoSQC_pZJ~OnENmyZ`?k z(d$EKOxQ^Jf=|k=_QA;5FZ(tvQ|lElVj-uhkP)pYA?-3mp2v3?!9D;zH6mx>uwvtx z&8qs|YL~tclWtinmbqqYNbfC|7QA|F?d^p-KA=d`b#R!25qrhPY(@i_w3L}~KZAJ#VgBApG+F|sQucp`#Y zSIyQ!*7=LNpY@r1c1Cij5A~=qEX6evDlbbpoxr+sY&a}Vlk6hMJ2Q1qU zNhypT3!Z?bWrqs*TEj1AMexp&-PWlfA+lFJHZ@SyxW~GUN=w2_UO{dfKN@LkCJDBu z;SvRCu(1W3G-GYd5YK4B-iKE;`fk#!=q;FVlrFgB&}R|mX}}Z76F}QN3~@+Opgx`g zx0)*SVqMu)d&IG%zZyc!(@~w`9+)C3Pe-Mkfw@ik4%D#MvOQX8$6L~ZsO!_WxWi^* zwLF{YX_N~eVom-e7XIVo8qdDtIMvKRk(|Y<#JGS@_&9*^3sae zn$SylH@Q`Um!>S=nXKbtJvmF;q}mRFe_#0APOS7E3zvCG!sz1{C3_&wU&mzts)Rbv z0F3sd@L;vpYv>}66I4}$ql(txej5)jN0;J;tpNq*jxCqRXj`Wr=Femk$~kxJwpofw zXco@Trg%S~O!9RAD$LP&c?RaN?+^b1Ir?aS?_NlPY?jUhY)>dD$YHayAP&1Z+XR-O z@Ka=KV9p9~;rRq4ao7mM#n(9BPw>N5(o2NYBF>}BgmJj~2Ie5nE;7YYOHKv>-u?*k zjwN-=`ru_Bn;_zDGIfa=diV>)fu}|F9^!hAKO=!+BmZZuZifAu*Rn!|4cP#WuFqI=!>7#)@qIe} z|D%KWo#c~3U^$j*p4VC8IXL`8X?6fWM*eJ}Eu3a%#c<)-vdaz{ow3z7j~TsaJQia( z^+jFYDf*JFg;w%JBp{VkTir!1UB$@iyG0h!fuZYrY|VaR2HvqwP})JL_=f1TgofAb zmgtzO+-e2({DU$FlC~rh1BAA~h6(6@*fKoW1f=|<_mF5RBHv7}oY}v2M}v9s^;o&w zw#iNq1u*0+er$;PEmQUqu#h-BwF{{wq{g=V5!4shQoOi@Od-Iqgo{N^}wn)Ar1s}v$~ z;L%WNC9RIJr5+m1-tGKLEoy(eBs9Av9SRg|P#tdL>+eU_+%gQ^jx;a$;nWgX$hOOV zW^9h&6cBvXjlZNUmbmFqyVDK{9RL(ukkk5yfzGD0^zewcKA)tlj^%)C?HwdiVUUF; z4ZA#8nZg?`~uvXT_Nxm7wQ6We4luMVk5!0IJlU*+I{SXHM_g3UNy zDcUN)T{U7?2iq=_P+(+7#zZO<9cI~eB#HpSm_z+tn$*E!OhyWTzB`>pp;YCuZQ`7z z@(p%up(K5)^VyJ^O-#(SBLPH3uu7_m3KJPC7P`3!r*0A#v(du=)X0G&Bw!i=5i7z7 z@y1B4)<0tr84$lpfE|hWxxjTS)8vypbi><*K zz2B>;9P#JQ2LE3J1@(oy-U=r-ga|JFZ&p&`l#&ShzoVfjx0U~k1?jOmP3Sm_#I^g0 zF#MYQx_sUX_(1>La%6V8W+M|HmQ;gN`gyA+VGS7$v4GZt*p^L%>wFSn-gAzyW1$D}WY5r! z)~)>2_lT&Ku=VjnwwbL)V9eSIdikC*=D&h`x0((WMrqGgiUQAz`nqBO}!sHA<2f&`OS4X2|>w+|fedWlLTpd za1A}9^1z1Do7vuD7^J?olAzWS*V=c4hbq??&r0PmQ&v4}h?3WH_l1$)P-y6g?jpG{ z5O%fAR|&$UlRB}L&C|3!n2klMe*?Jnc@LE{%#?|@bAq5&;W34nfEv-s1>CS|?w}v7 zV+6`nJD2kZttxU;jGSmfSRjbli7_ycF%6-g(-~^Kq2C7K@x*MIdaJSS*_`CIAp;Sh z(j){~q-uIT{f4gacNtN;@G$I7{Nf?!YBMf2L5ZW@H-ct~Z-j=Fu1M(S-j~!liYD}v z9I4KDl0XU1L3##g0DfRcd5sr(xNZFuI?-iM-pE z2V!-DZ*1bc$JD+W%6D1$I~sj5bWl=h_xI#5e)MpAx3u=rH#%VPe8oJnS>)ZNxRJUN zUzh6(1ghKPJd2i>=B-a2d3p5_&FZEe7q%2O%Q<6w@lGg&GGZ@Hf?gv3e}|Yr&h*y6 z5=IfU`-DvhhU%=U;5cgVz}`_|KxJG0S0tW;h$7>iVb(3{6B zro!+!W?+L6luuARg%5v)q1Pzn!#DXAmk*+9%-EI8gG#zX>-JiB5w0iU&DdcH-Riib z4R9Lq?_V!?h;v`2X{99`z%@opB>^n>bY|tz)X_ZC7WImgsi@+IV z#SweyeZNIrbE|+l@b7|11bfM80Vu)YY>r<8*?@t&2qWL)DU^h28TNb#6Fj%=q{c~Nms!yY>Uru6me7wVaQfVly@Q~-{8I^g`4>H&Yu4k zba!BuLM!|~k{@;nP5Onxp>>95gCIMb6tDhw1*Qm|znDnSlVp?E&UxaD>6&-4wFh?P zfjzf^{&T{}Z;RF!B z$_I!4{1pJgTFcB>4_g9}!X3h?GxUN`HE&AZvps{c?{ux>w==`QnXKhP(m@O*z?hTM z$d-Ve7UHof)SrD_{%JhcI-Hs4Ykr&m-kfd6N4<9VJ^RrV(sM+#-3v5h!A!6Kd_iYp zerTGicKytg?K?E3lw2d0@ze~YL8s`|i3B<0mV{q4lf2*{z)F7-_efRag4F6U`qgD_ z0qen8EY6Jv)rTOg3?q*RU+q=gL4OOA6U(w!*i;q|OOnwt2tbVR?xN{564Qwzy22fO zM~r28F>(hy?AWyjNB(AR+8gjPe=hqeSi&zbSEzWiYI&QhqdE%dNb(i(jFi9qG|t+k zUVf9HRX8M5gjnO#)sb=ducybyQid^LTQwV# z*w!nU(+?OuE+V)PRj81gP*$bTb;O~X=Skb!A%*FNVwf1~vHrehv$Ix^D@A0~#2sG* zLNb8nHw}FZl<%y&$N#KpDbDRGw#SmTh4)J?L2KsRAh*j*blcK$zvu}ea|#sK$GKJ6 zSiN{C=hQ(_l%8MreDd|L)!u_7Q(+goXt4*$67Xm_t!ihGzKoT=34?xPLAXRZWv_4 zp+`$|+<8#M)+HPYK3xH0o*xI0>30h=rk2Gt_0Vo>lY5toYA-H0KWEy8a;* z9(m3C-2es#*8^3G=O0#e#5Nq9#bbFmD)X@tkDW_7AfF%cMkcLb?7aNINN=|zUO7Ih z1R`j_?t;g9%-L=E=1i`0oYEm;>{(xyP*xB!ReKu_niL$!UwWYMb2Ghk z7K!t|5*jPSiLWHREbI@sgODMsNgoj?`wG#fnF~aJQli)U2?a$%Q7;vSo8A}7SP796 zksaCxs7Ww8-3CZ}g2r4yZ<+sQpCUsqYL^m`?Le%Px^Hs*)FKxn#l2~`0?ypDx2=}; z4EJ257!hbI!paR_yt zAhcqne)zHgPW_FB97Xc#=h^=VP^%bZ^zF9ZD$CN{phL^q1V#5xVQvxwL9E~ZJ5zr~ zF@hK;RgEr0TOLZDuKNcX0-b_2L=obIj-N2)Eh6m0C*KD;)A7SElIH>?^%N)f?O7#e z&xC{ZSmADG|6$>Lrjr-9wspMzef_2eDz>WiP$<66s?B;!X%U#RFzgl4nh*yt1Tb+Z z?({h0S5LzbkMo}pQo2LJKLny)XJzGm^#c~D+b3*Fh|C>0K{MGhW;g5Tf(60^rbYmP zU!pZZ%BobbHb_l`oiT~Apwz)rGOjLCH=Q8GjT_eiHsQb2D~?VHRJ6&gYVezp!1ne^ zKA~Y8irVIFixqn?Vhq>6xk}igZ0P=?1pdj7DwfNGO*#KI*+f#Lr|}|E#(u*50X)Ow zcPiOyx&+(qQ6d@cub3IKO?=OStjWXNeSjsZp+TZyJn70AVn^t3(7am{8|d#n?v-~@ z?CI6`vcJ^I%deTiPlahLGZc32(ArHNf3yG_;AK`9hTM}!YZ|r8JqSr7F*GS#hQKWq zvW0|Gyga?(%Owky1KTlxGmG8Anrq$(#FoRk{S3wI-$Ox*wd(srUf@yu1o_N_PMpdC z$Y8y#42-W4$`rBFAT3EQZ`&3hWMFDt+FeTnM?zHmLa$!vVXhjKUGQjxt#B@BoNu%N z0zRFGi*+<#Vs==qFT1NfBa+Uf;^1Q5EY`~144)YYKQimsNeK`xdkX^uNPB?+9Wb7a zy-QLZk#G+JC19d_clAM}&n9g%ZvB+i>0XZ{@3X{peNJ!@XYqC1x|3t>q)NPu)|z4A zP(xn;TVGTI_N#gOe~gtlwN9phC^Zt}lNf?;nUXRu?+D$aF|aTR0H`*_aRItE@gT)- z2&%b6btHsp0dgG@>AQp!?8Y%OjBK4F!0O>rr%M*z7RLs|!Ef5us&{dZ;BXT`-pYU4 zBAYaA5S{$g^K*Y%S7a@k(7m7BJad#M{g3Z`kwh!$cq`R6ph@HhvrHhXaBTi53i$-q z$*o-B$AG+~z+{EfhR+gE+Hpu9Rb)$iDea9X4X>R2uDjoc!nPB7J)aq)GG<3b0RGoD zYPjQAr`X8-$k^@U_F-b%V3Ey|lSW7yrljhV(jEPWd8!*6owcTz?4q(^NY7LVXh_rb+$N*!m7Vn;X!JKucT=A&zCH49f>4Ir?ophDHJUnl*yyu_7?z@P5#SXd(pMVcQC$z;!kDKyUI}}X~Wk&D#zW9KS!fXme=~)BY<>|6bxq}OpN*9J6q9p z>Bp3Uy?=&{W5qu3D81|U|51wl7~7Y}voNmVlse7D-KPkVY;&zsf(OqJ5Z2Y_Z~sP# zGI{IMDj5AF))zZ-M%-YgJiPT}z!?>s-A~Vl5BDr0g5xA>u~9>8nNOz%C2us-7y#rb zesS${|3*zXQV0~t5;`I7Od?HC@TqgfFdtri~ldjQR0GaJ@KT>Kh?!%5iv^#23&!M^Y1hrrM z7uO#wM*u)0;CXrsvbax0E|>0xE067QK2h)V=P?9k*t@*0SG1`Eb(^>>0eM*!Y zfi654$RA&Cy}rse4nIsp>~umwV2#}98gfBZS5;m-zuF`g{ZCwvkAEn^>U?#gTTbiw zgq}w`3q%RGruRC4%j5^Sl@phb*|HN0Q2s=}zr{6YUD{e5xZ)tqQrN84Pr4!{F0PrK zm=^0PDgx5df%%J=*m$g+sY%NlD|Et>*1BK>YrUd(6~@z%>uaz7;PZd!OBRN$&@`1-edh-GEf z1tmt171$2dd9xT-h`N>}kNRnOKI?x}`r?u+JabpIE(^=1m2@e$TAzLGC=gubg10j} zFs-A2^HXhgpE(@Uq;UT-GceV-En}I)Ti^!ooU~}R^uO9E>!t%9&0P=FLIOHF54_%l zze0XTa|sK+MUYXKD2{&9S@y0dpkA4-FTUzt+vqte2+3%YsXJOt#|h80r$_F8eG|g_ z$sMSatgi4LjPXhF^s;Elxx75WGG&3*IT*wy@KP%C!{zoQ6re3OK$wm^GBEbq=Ov0Z z9}Ly*k7H>};O0GfMwdqtp?$2MWPLn{GnnwlE92$9RdF;Bx)-DmC#}z3Py=GmGFh+HAj4q1*|xNhkzZ#Ydq;RzO$a=$;4+yF2)s4# zNMvzVUJ0QmJbDSMy1ecqi8Ww=^XUd0*p{U~!@3izy&CP@J5&cc$kwFmp%Pv6)c~}@ zb(BYQvy#^_Jg74^(nBl6jj4K-Ts`_X>>?2Ld8@SJx5@%t5|_r)`Jw$S2%)IEZLH>Z zn9zT}b30lS&>2>a<;++zD|v;H@vtyo^+?Md72Jb8z891Fr0e98u^Fba?M49 zdww7D#XXrCi2fa#iq9;F&>79d}7%!HA){z928~M zm%XOD`%{T)bS$K;T;9Ukfh1F;6X}JUfP9RR(>ECPQIiBnB!w_OJ->ktSru5sq4W#} zokcw)A0#d-_j>S0m%$CIE3oP6^fKU$Jr&EkWp9A9 zs@mg=J-}o##vY*F){DTeSwhx~SCha-t3;26ScIRala_9sPZY`j6)}$KMOVVMQG3H< zg({H6u&}*%k2y23kpOus3x^^%G@640i4^jrS4 z-v5rs+Ls0$-!X}_`%wr8bpNTiJ2ZWcN++JAEAeJVRFK%=ztxI-o?R(4y4#KqIu2a8UR*%PQoURBZ+QBOjeAF6oB!JaHxH-W| zA==_7ZIdOw;9h`gO#xryRL0iPk7FQ*B6}XJ-fQ6nZC;mQjWkt52qB=$VT$jDU;s{P z3-it7lrniD(}tatp|GZBV7|3yPBnM`R1G0{*AMnvLO()cf#uWfA?#`Q8AlE_PGMED0_g)y5S zOff*3zUyx-2}sS>BdcMy7yGvWb3?8*9a*q#`%NqvJ0lZe?iOf14CNu>KhFU;ahS35 z_x8A!1SE!##bOXD7I=VtEdj8t2{~`N_kNzxYhQi` z-<^|U5;89w5UFd~qnw`tZ9U(yYr?aJ?dS9HfwJmDb_xl63=yBpYHDsVpc@Iob=U!T z>e?{JL+*gjJ_UUTwX)4I(RO0k(9{T_vBe_kY@S0lwX^RhO+O3C`PW-#_+--8z%!P}TW`St9iNJ*tOz}Hq$M3$wo2kCG! zu8A%O&lVESInpud+ZGVo^|jM7gXCtEhif3g>khvE{E*yr7kpRsx<7Rfsb{ezZnXSM zMdR(EU$hm|C*6R*O~k$_T57rab#J0bY~|}dT^s_>1(_+MVjx|WeNp>3tp4;KwR;a@ zJl+N?5c9=4*G;85Q@JMA|Kj2pI%p?&)J$3;SKB^w_oZswuShPMKB{yU*OHcBPcxszb*Ezeb+EC;g(I7OB$vW6WkMx1)9%y0vLESVn=yqBt&=CfK z1jNFXW`M55Uy(}k)&n# z^G0xf!19Rv-zO#g>z${M$<(2{DbNbz=Wn?Z8cfRS8(dPov?I@ilwp1+jJye z0&3NeX(pUzAt1pXRFmlI|H=%N$8-jkf~rRgjxhPJnkL$M2DWBq7@Kl-k11cpEI3-f zDzIhYU1+?_QGrCS%;Ldg>k+dh^Gc~G`3&UKKBynL%Dt#M#Z2v%$w9&d& ze$~KT$vx6Vj`3Oos+*T{qNYj3`mS57C8a7Tx!n9e_XM;JF8lY!F_8Rs2t!G7>KMQ* z*=}5dNhU1qBcWm*0|L<+XCJc!AP_u(;@3$Wu0(x@Rea%j?y}4N!BY^s1i|X_8TLX` z{INC-Tln>JL1gdPg4-jfhLxMWUvJ=v@;xZ*aQI*OSihsl zzmp1lhIad@b%VsqfsI@e=H&{pXp#1)Y7eq4nmEeeXG6GmzJkb3jxiQ08`zF zGJU0x)_Ou#_=C+sY`bY?7g`{fzox^`W{Xr^A(TO3C=unQ3BlVgd8=_6CQbz9r$@u# zcDsxE-VV05FB&PM5hIZXALot4&sYG^$L>C5YvQ(ZfFP~ani+`R zwbpR~S%g1qS~sAfh9-d%vfBSbT&p@H4RtGw;!pk~?y@%uq=&po${l&s{vG>`yX2bw z%%YA$)uU99HXY6#JvzKm3@KA!9Er?`3%Yacl#_)IbMk55uNC1cc-zfFU!XtCX8eB6EGN%HB(dLtJA-y*&h`*Q*oSB&h&0@T zbZz5q(ags7DOZhPn0A0@*&W>wY;grLX{}A@pLl`#$WHTrd)KC%-kiY?Mn6YYpDW}r zz^}$39$~Tb>e!#&i4v7K4Bo34cH`jsHW{IPonqeI^CW}zx8K)qP?81}W}(quDtH^0 zvY3da!riN0?_&uK2@?iZq_hPgcm-p*za1P?QW_Ljd3vb#nX~_|SyPt}%bOn9$oyD^ z6=&O2DG%}OLgKpDLu9L0$~1#<-1|J@G^Rcjq3ro3Xfhm2gDG$g>jL1!XUVED}kG>F&bg z0JQ1H|JH&rDqh`epl`K<^V@Zv<9D2}O7PA|=3aE7;flYP;6F;*q^gnCoDdu)^oO8? zU?T>?Ej4c{D~=FwT^}a?lX~PaC%ZA1{98Y~4uhzz?!Z95 zK^GhpeIVIy2`3zHv$W(UfvR0lTPvp|Dg26xCT_{6c8xI9oiF!?&4NR}aRU_^rZd8MrPkb}G5Qz+2S06sNBiOYF|=L9Sf zmG$&CJr>Xt^k!1oTbfuy3x1_q(b$HZN}6pAroPZffuK*&VV>mVqyW9FfU-{HXPNuA4H6}Q4^lNb9QftMU(nSxV z_5OCc&HX z{Tl87jX!$BW|cG_(H!u%Jn-3b=;I3=Nv@sMH(nQ!xu78?)%xf^^h6Xq%&A_WvSL#vX$4 zq(&2EtQ|7vf2;V3#ecUR&-LA~zG|E2Sd{-x2Y?|DhQg3=?LO5~W)=-suOZ_zLrnMy zTcmvLux?&m6}7(Xl*R?wCcM)ajY7)I7#W@6iWd_1WZG+q?sW>bzAIYrs^Z8W#3wP; zw_L>Pk@NWHaZr^dxpdO*pXaur6l_d`tftU(FisEw4}^$;cG+@sMR;F5$#kFc_RA^zS+%-k#&? z!DGR8w(HL_E%716+&XLEh}?fo_yeDpBHubb1u^07gH=t-69q)EVS+n)J5>1ognN|} zfYJ)$e)4R-IVp%iVGTN1DL+#n6kSkub9#;rIteEG`6D5mT`KovUm94=KNq1(Psp4J zET+^}5AccNsO)c=Q}b^TUJ45NHAUqBW4Uc}1kWAdgr5ncdPr+xlD0SMk|(=B{EicO zy3?3d<5jMtZSFN>aV6N;-byX|HSNsfi}_!#sIPL6=>I9X+8&E_{0n`AEWltp4J0wo zNcf-;>R)5^22?YFLzzBQjFy(Qm6S6@tYgU*q7tSvYt+-cYyrH5TwWic%Z6o7rimLFx*j2srQ94%FIo*$w0x}}u zX90HK#`m*a)T#BymD-dv8 z!-aU?#nx&SQ~!YEtKTq0|Ig*w1tOuON#$C8C#AcYX}cFo!@R^kr?-OSYLm?i&~od( zm%E^17_}~uiV?gNTK7UB5-b5mOm+Z$cRwd~;mC4uSIP)_DE(RX{N<~jely`j-on@#Wc? zc|c%Q6iS+zp9Gn-s|%TuVRBOn@L43W_9ieEz@UDlkM4<_uV7$eaisBTHIZumf%u+0 zUl*<}vFHB8Qk!#HGt-)zjHQTi_?3SnF(28a{X*&WDG>Nr@%G~ zm%G`wjB!JmeN-XD|E&n|RfH{DiPq>p;GVU3SW$P(Y^Vb>oy4&cENJuODq%vzkv99k zw05UwXzg28>X#1Kp*eaLRoNNI=d@0Ycw!z$&|zdO>B6-y1?f$*yM*!WM5G;E7rW*94)RkU;qP^%^ax-kd^~Ef zkM;Wc!aD!W-5-I+ROI0IiqESybNq-0qwc2^qV&PM`4Y<337f}nlkceO;b&ApY0sFC zh9b=qL>9(it&lq#N}XyLW@snBgTQ7#>u&yXRBplDvO&|m zQh&3EvHM$^pak6M!jEf=jLPSWtdRMxUwCb`B@}1iGwQmT3q~O?(4B{ELA_$oWP~j- z-D^(@0Hq>Cutn-Ah=z8`FoJ3oAU96VK2>2*wQUB@9?>Nn(_b#T@&=vrFt z*+9NPT1~}0w6o>ZV$res0iXAbTk`hl`5(eSl7_Bv|3W_?m^6hTsz<95=L8`%fE9#I zurbSQE39S3tH#X9vob81-I~*Vm?kKSR3Mk7s~+7ZPkJlfr=QSa|LS7xg9~#2mk7El z>MEld^Q2y0uu~CFiX&E;8i(~VAN`2%s*DPkkyB0#Ei?j&`c)ps0)-bPWkJO!=V5D-Au0Pv%Mk|~_9kR>FV#x=UZ&AUydN48tQgafbxHl^u&^yLX zOBrsv8tg0X0vd$-*7$A#F*dco&SXF(6Kj85ZMU=?l>TYQGtI=5c5&Rd>E<-ikapUX zMY0Z zn<&vWj%Ey4?tdBB!vi%6op3oh_o80AX3)UIn&g{fSbVD&30YndMG+}9bX#-D)kLj< zHq2r7WPC8pUw}lCB^i%hz6AvA|H{IHJnJAEOOQEp(LSMQC;X%6U(!P8-Lz&*Ec|^( z*#~J&QU=$JaY8Q3wfU;>hWZ9CvsZyf>TPDUd)Gdx9e5bMnOqCXI_er*0IA0BcSa<- z|MJDZ`@4D!<|_balCUsGERv}ChIoCnuDB!jE7Qi(7Ikc1K(XFd)5I{2wetFaYdX*b zKBcg#?pO)HVd>L#Hud#X>Dn3D1;8i8iM07Qv)}g)zQsM|37_er|CjmldZ&g5yf$Th zPuxsIeYtCdnF$S$gZUEEb)=NB^@z>HKEh?~Y&Ksx)ry1yKrDHVIHL>I)3%IA$e|+G zZ>tuI%`O2exz~9nj7=w_NgF3g`kfDh&lQ!5#s(OaW|tCtBLt5lsgq)nlP5(T2Kaux z{RAvc_b0xjD3rV4!RD(r!q4OhU8%lAXlEG?1ybM#v*hEJhi{;vIW(9|Y6EeVzx{&G zIL%q27Pn+(2!jVuZ%QW-pZ!umn%*Zpu@;snmEf`D`l><>>?TxW?C{&;oV^Jf*F}Bk z_RFI=P(&<1ii`U}tzmaeq9MX^k+;>T{)Lh(#!zwsFVPn%jSp?BY*Q>#Y*4z35w%gm zRd?HFq7tovG9C^eJmDHNC&faxFOY&N`kZ+8Zz^rsNtRW&PlF)Qe2lIwuuVzf8=wTD z+iHwX>{?G{?>_!1HICog?$zVGu-B$Bo=18gttB?#$ED`m+dVTE`$Px2>Q*MrY4R&h zeZ`L(AFD0Ou+7@7C*uq7s<-kQFhD!c$m3e7Zjd%%i#lJzhD+|NgbWZYrUlCQVB+t$0D`xEx1cC78O#U`d9~W{g%!hu%tPi zT3qrE;2qgqA88Ah$F-^1Yj6AluwfU5ps2zb{!~Lz{0FU1{~bb^y>78k@E>vF3$G=- zGOH&KRC=#+?eNJ{kln;gh`_YU1x|4>+BH3vsa4^ZqT1S{XCIpTp`P|j3I^BJeiB&R z4B{{owPx?vAFFJn#L>^ipssiM?%L!JC-uAwwpDN}r6>v~hP+@o8V2e21azcoUws<1 zU4|KB9Y9sZ-R{3*syndQhj+JIq_dp2Umf7@^%(e+6<=vWU;MT0-u<$Vtn@zHcs?~m zqWf7V0D#YFbn}#``67tp;(n5{W-!zPR;s?kLp9;&UQxF$QNumJbr)t|S_#@{7$7sD zHRQ^GV7uvBlVM_d6&&XD%SAfclPuPSSm2j4e;i8XlHNk&w$?v-hXeGWwa}yXeIl+e zslC8%Bhh9~5vVq3X!CggJ>c~|K(U5dmEIvAmmHo=Hz;QKhAG| zv}emc9OI+rl1sGOh0bDErN?(2YG;c_LB6Y%clZU+X zTyZYbkx6p4)5pE>0B4Fn4NOd2D|YXk@iaQ1cpbSX?Qg0VPH@G{Nv_k9JFWez$0adUF5WT&i-F2&1yJUw1i)AEhCYD?)$g!Xs zI)3S2@^9DeBTXvLueX?DcLWlkcW#gpw16vw7z2w+9OJh$*_VQ4xTl1@%);?#zw;mv zD690RQWKlX6`x^~8_WW%w0)^n2%^wC6UvNk6O|$%gCEry!6+e54{CZV*okwi|-ftsfK@;ajMgOf*w?wB61*X|Vq> zV2-D(wZ4X>TeBT2*U1Dcj}$%qFac0jm|kU0UHy@?w)Jy=*;$$HVc``G*{*Qx_Hz0w zW{VdYHP6OiZ}Yk}LwXz}RuWl&CKKlbR(-Tk)ZEBGO3XVYZ!gG9wCUqEllAP$fF-mb ze5)>BpbCB>`Gegj{RpD03D(X~0$nRJ<)`}2lX!+JrQK2*_jH^Y-k`M!%3!VY5wPoU zKK0wc+Z7!Sq;4`aTnvOReZD>M&ps+Qnkeum;oRMa&NiFu4mo!0fw7KM`%@D2AbAC%%S&*V(yab)^j*2w;BKH!70SK&7am1@Pe$=Wb}>2=1pJgEsDu zrVqo9zI=2{Sy-waygUKHE|VI-9*Oaa<8F_qVkJ7WQPUOsH6@z z0ePp9;YygeQ$iHN;r^-VXcr8VZ81Az8;x>zC>7}&p``-Pi@pjL>`{0sB1MBGxNMei z7(|Dz02ge(oVL?BgGvm3zUZ+7S*)}JxGfEku%Q7SQ9H)IODLjFegRPZpv+@|+&z<} z)9}u4T+dKzSxY?CAG7xHqaJcRTv8pR3-1dIhhF?gJ>b2GZw5#$I z`FVBlVml|OI@Es62Cm7wWRBCWuOdI$Q(rZ{VJ$M;_goU__o{8(sWmW_<&g}sWonoO zo^5Rr^{<^sX|`8zcs|2EAJ zfGVpeD!>MOfDa?#{*0f+uxp8(DoC}@Ouqj}OhHoz*(@=M$CU4qZg&jQ$<<89Ja^3d zxh%FSzmLbeOng@3iTThXL-J7rNJfyHu}w9^HHmDgPcsdt8K7*s$0%+Mo-{KieA|L9 z(v8?$iG;KqX2(?-3HOwGM7+~O=}81x@qVb;N3ttfVZjcp1m6fSS>dTafL^G!CdTyver18+5j^~Q87G1)#;qPLY;T=RUKEJobrd-wU;9t4rOxyvTGAi1qqD51k+IV9kJDk-PHj7EOjOL67!&_W^3vg zg56VzjSU&&p{o3CPf3U?*H6dWpE%-}?BLIx zkxg?f3d*O@+}m2Qy=HsqDC>Wq@LFyEgB|O;5zG=iBIBsTS;8mE{+AGYnpX)lvrL3V zb5ktIU)?DUx{v7;y{0zapwi)2vX@xr>z`JzEIhp|8_LR#I zL^*by_($TW>D=2t^M`^7Sd5))=WPs~mgg>LQxuCGUfbu1C0;^c)8Jes@=%w5rf&fT zN7{$zDY6IwbGE8~&&`xsFlGjvpnqZeanH|#MNfnih*7lWk*2Ss-?&O*T{2M+%&&Q=M*LO@~W*H#qPwVH~J5UZ4J~KML!{+xPjo^J=Pu+SiUx z;e=VW4GAh+bcCe#Bz=GIR@VhiUmx4Jg}-vjZe(cGpdVJj!|X(?6NJHX zA39_t;>t*DU!va@Vecw_d0EVCp}FL39U!B`j40~Ig>9Rjb}!XJXu%2#u#Alq8l2tp zCQTI$#Z#;5`)B7(2>o&@SHYIb&Bq)>cn<&`I=uii=hyKgw<32$=_kL<9957$|NBhe$!UAEG8SSb`}s%ZDd#zKx#(7`54<`FlXX0HK>3OFh}5x^=1 zYcGuAOBVY6I=+X`y%@Q&$TZB6z45FqAyq6Ke>#!+I}&$b_C}?CaR`{J!F}ho!ThOd3C`Z$p2sz1;IlE5$m3^(IP>J-z+n)mECzwVgU-H?d>SJ=J> zoOW8p)=_D|hk;!-@}14&!|m0QjUpx$>+6iLn$sgEpqY*tvz+r=3=%%Ok?B#X$wuHS zqcjyd+EIX@Dp!5q*kR+S>~0yNI3e1Xf02sig9Whe0O~$ZPQv?C<4BCxK0vv>THAPL z;at6q{a>_Ccy3nlxM5~iyJoO^yyak0-~1OA_fBKqMvbD{vLW&(Plvqnv6eMp3gt;~<5rF|7D&f`AJgxVX?yDUk-t6j{-)w3B z)L2>fj27p$s`~AZ^6?zWb<)Y_jRS*KmD%I(c01kbVy(vL*zvG|^7R8IJy>R(W`@{f?OC?-?~rkSPV50=uM^6e4Z}K^r{lj zOS+bnE2sOyErRh(7SQFXCtotlw6E+(qRNh5c4fS7FW_nin9D@zX75c_0?CVum5udB z$tD)Ddo+<<&IPcRRE0eG7Mdm*OFj1P2^HE2-1Gcx!B9CbpFJ99o@V=CG!SKYBdbE+ z#-*b)w@2|T0u+WbfKF12i~wgas0+F~u>R)u2NFbdjI1qqcMdR{1@wYfr9_V0Gs@*F&9vvlA&)3c%#UfI@eSxyUoibN)|E1Q!>PnX zE-LTV2n~oSWXnb6!UEtiJh_^|P2kV3s=LEQK-S4^5w%I)zR|N9n9#i4ZC{$H&hC|g z-_ho8|9$S*9;7h?keAajdx9POg1bm@advS2y&~cxKe2wsoSFH3_c8*mguxx@>}8_p zU3K}G1k1NZP1wTKKm|*9&t;m)E(H?Z-<#Dn8GEz#J#pzOvXwek&`P1veA@_9ky|LV z56!p-FQ$a$R$JMfpHCm+;=mRoA_O7(`&bCYH6W822|7XEw3yM%vx5 zdsBA?oqWWn2^<9M9fH#`@MQYPUpCJ0zt%Y{JC{^@XrE=aIAD<3sb+WndWV5U8=Z&c zOC8Wca76o1$(~+jGM_hDhMu=1?~F_2%ULjBV}Yw-9p@fo?&{6QWv`o}a{{P0e; zumu9kxWe(zg0=eegyA16vvuvn{=x^49%AD)`6@ICW2RcwCov6w;qba`p=G>l10Bdq%0XXc~sK z6&{jk%GD}0{*${oQ~61`Ao_VAlYLQKC@AAfdta%d$tAhM1ZyA(ra==8^M+1vgbg05 zzAlSChE4+ViJ?)Cxxp6hEuT+>F)IH$vh_wo^YY)WF_eO8ueh?^ddd)?Q$fm*&l^1Z z_<6LE1%)~h)BS4ZfiRbfKL)oe{tgXrgFFFocFK>1En{8&D|j4$1EA31bNH~A9K@y^ z8-+-VPsv2c2r*gNW8}-Joq6`1=+F|n=u>OWCE1%v8~w-OiI&a5pJ8&Cnt=I-22OjY zdFd6{ufAQZgzs7bPE*&fPmam(=^Ygfj>vAmKm+rz5TZs%8|54jfNs}n^%`Z1IT0fx z7!=#rE6GSQZs;~fK*lkn-nYZbs&&TmG$nQQ8CL$6p$NeGOmzSgw4c#D7BC`$82rGO zp%ZRIz8R~PV}3sfoz`Ms`|8ymBOY8f_VpD3X`tde#-(3q3O^qbog`;PIXMcb)P?#L z@!4$6K@6oVLc+?+wi-e$OS2I_El#=iaBarYQ?nd7_+VwbHCk4_=kdXG#+VG$qx+$% z7yO)Q4im>NMS;e`X?@3ZjFI4bcv8HZWm!Xn%F4`{f2g*_71-T}@GWJgJj?)!J}*GG z(Bzvv9=(|YM;*r@%u5O_Hc>$2rix%Ld-0L|j#{{YoJjTSV_Q7Sa|xORCG8n@G*HOp z&RMS0SfdUMj{g%baZ1vEqExV%NW*0op>x@F&zmiIJZf)+5!467ZkMGh_IWLkEN^Ww zOz4(MYf=Tlyi3o~*Kl9zvBHp9mAk6b|I>9oB@j2Ek*8-hU$>*2C!avWoMdE9=*{w4WP&q&;l{waG2(yaLe`z3=_~ zqvAsqBtuZ)Tn6DOfWI!Z`+QRM6v(yzag;3)jSEflF0n7GnLg@)hnqGytHf4e@fw;w z1(vO|3&Pt&VoKL)gvG!+a{{jxiROYpud^K?WC5-!c~Jk^-ybD{RR_@>8uT7%hzUjQ z2POV^Ig;j=V0}Jg3Ku$<;leKnFPvyG5B3Nm{kL##FE4GafgpJD^Mg+YP^jFS>%P7u zPb9UX*0b})1giM90$|Q+xR02EP)P{HT@bVn+M>8;pb3r#Mqu>M_|1HgRIM_)n`&px z1*{@w`Dka=t9sWv63_k-EcJaLLc+?t`9;#EJ&+5yW(*z?{ zUD{jhK0+2*KX0nX&m%6l=eWymi`zJ2BAzJHzrDE>$mybU-~9!2@xa-m7<=d`BP=u- zasBzFnUJCxNSZ*1=Jo7~SOfANK*s{^=-wS89FW6`h{7mswZ=i-<>}YVOb``q>N z_kxjvv9$I2G&DnO1+bzNC7yBT=xAC?t?nJ$E-Wm%elnbR2q|0lml6^}qI&~{ z`>YQ(vaSTbJge@pyAg+Yri|2`=NBj*CW;l{#K7SA5%HovDq2#H%qJQ7Hfyn!XrAul zM<}_h0`!>VIkn;0@+_iZldPE*>HT_beYsno>ULVBL|e01NDvnrRk|Hx)6xDKgU{kZW--^VIg-*_u_q#v29A zgpL&cFIy7L!)&73168l7Tf%HaL?tkPv*?k(-_#IvjKLcxr#Jalq!j)3|9j&jy@0J-ViB#O=&3gKoW%NZ= z^}k=#9?srRARvDJx@yI_d#kJJ8h{%QG63#Ee(CpUS$8COEZiUFS!F$k&|81Wtj48` zl?HJ$z7a^46cRc74wBejm^TkuduURcAC72PeIQJzAKHr%?OJk#YRn z#Xfm9_}otqh9pRj)A;@K`|wy}%thJZk}8>R+0+KnbO90)pe%kDO1UZ?JAXwC=+R3A zA!9qqF~d^=kqFs!t}EUtfzo))$*8;gUsxu4>=e{Js!P-@%Gxn-e0CrKpX{Udqo~Bp zy~>fgn0}B_abs^5@&SsYErtH9^{d-T0F-)ZL7c0>wUfl(iwLh=Yg2#*B7v11s2rSA z@|?c8&dtfq7-zM^f?WulovbcaA|Rug8L$Ea z4_5gOpEWp$dGwGG3I61kQcyGC6A zbT)Nbd&J$2nH!Z8smCl!m{fF8S6NuYby<-!?KYfjAqP*0UEB-M;9|ET2$lUqP!Fe7 z^NrJhR9Rf%bfDb7hkh3764I|yvLiG<&qON!avgiVcB;f3H+!VaE zGGb61Na)P66XG416Lnp&^sxW6{3c<}gK|`VoSGmadNn)>Z}~NrONvH#idq~`99%nX z^o#89GU%y}t|bfK9fQ6>=8(s;$z*i-q?30?6GQT8lR`}XMgISuH@Ap_dEIBn@8P-X z*sr-N_CEv32X?FtLkm-z=QtGV>A;YBP#`e_cyZrvtYU9lr5U#C;AY(8kX^o$?udgtAV8@2%_ z#@$V)59ZQ`1FGO$_RN7rRx9rbB{!@i$1ZiB+=r|0tK=!^CPmghx>gaWu<9D>2_-f~ zgsp*-P%jLPTNNUdsrmoacvO}*vB43od#j`o9B7zfY=dfXNLJw7z*L!H=zV_D;+LKhH8`sQi$_92^!sSqQZirXzTbN?kQ6L;Z_B z&soecPE9cj`9j%xfyk1;_Jphie2Mj9?7b`BEn&d1z7m2Xo|FvUse`8Z58FZdhU1VS zcXL(2R4n`{&ow-Oy-9BkV%(u%2LG)vKW^}%=O{4W;@cP+!~l7m(Ppp)$dcz^KjX5T zcU%+%@5rm$Nj#D6yyMkYvZ&NFFo}hax1mp)_`0R^(@@T_YWMSD17~)M-ZRMb(Y{|i z-rm&kIJ2*=xMd(M7JwZsPg0!5SH+ZWAuM=oJ`v0Wg{kEk|H)d;#21roK~01lNr6Wo zD#3cN2WTKh^+$6TNt>5M1sW+@snJU2CtGMRH}>H$VuBRznMb}{sH%leNOqvq5$ZO- zfe3X-Ia1Fok4iyI!gyZ>Hk3S49FP7DC-jmL>yPvRl78@Sf5bEdG7H>nDzcYdvDQ9p zu@E&~6U_d6#l0E^f_+gHK=t|S8^jff;Y9q$z3C<9TctEl<&`ivTa#BZC1n|Cvmy2? z?eL}@J-HxW`&#y_Q7#KOD_Zs~?ly0GYo(2I-iFNXXrm1{W>A_G{$WMOu?LYtYXhV; zI;l1w2w+AsDAN48soPQr_RFLN2LL!X9#fe>u2G9?`O>*+TT8jT?wkk;=Yj)}in|wa z(k~za$-J4}H2;ePO3t$OIdf;-Dc8-2UjQHd?qN#mQDwHz-&nO`IZi`nRjfB_Ev~!ACvNzn28A9wOmF?wZ1h`1gw+3KCvVJP|}a>JBE- z9E}*`#fa;K>%$zL))YyxExGmb>8-M4A`uV6}YJm zC)6)kEs(liMutY-th_n6;LSQ)Lu}I1q`9F#uKYErwqP-y)@+B|q~*)67e5B|wQX98 z-96#}@Xcp?ftG<;$H(ziC=16tJf^l?SNpvU!ev+VL=)#dU8(9zu zh1-e&>knQ{L)2cmW8ex@f_$-MEbada>tVfkz&8DOo27yXDzMVVLs7JuN00Kn)Wrm8 zH%cA8%aL^oBT@o;bH5WH3Y0hVr9@h7P5C6ichLW3c!K2{*?w9Zpn>MheHYC=`aY|R zXXY--&bQfnvri7xj+%IVlmzFLEU)q5$_1fr>3{zlw3DKZ3WZJSb8DQ&AJ>d8>{(6N zdF0OSso&!|B;^79QOb-tR3m&hEK^~ga2Li4On!fAeb!qjGuvfA@#31hCmkgV%m>7X z4Z<>wZML(cAjNtQN1~Ba$Zf!j#*Nn@^Bd8VI`1ZyvfJ^#^1^7icSY6^fs5Md-j`HTcQ#lL7m&S1D@a@0kRO zwPTaNj{p5#Fcf3F&VEaZTzDkEy$2$96`vfjc4X;Gpp@X_;GHmTP=h!2B3Im>m+Dv; z`sxnXEETtJ`|Vt~8seze;#XzKGV;G( zg6rySS*uyuwtApdo4NrQ1UJE`GZBHxg+}h$@K>FdC)Cz$(Z~O8QOi(NOsZrDEp5Ai zL#`L(DxA$`m>7&_(1YfJJ%GpgK{|Z_5k)h~vbD@)v=jSy=<4x49=X9vF%qio)CYI6 zE|BB}<7kqv^wRjTS}HIrm~7cj5thirHUFb@ewxO2->%0JG2-g{K}-|YBaIPTLHagV zyp|l8X$gAEuo6 z5^w2Dh`+}-N~FB<*WBl}S6Jl=@E^p?FLXt&)`-`AMxi@XgO3V#oR4gnkqvBza7T{7 z8J)bPJ$)+Njvc;6r?BFXX$`omu?DUc=2P90et=b+50WV4;VFd-aB9VC_S*+Q9sH@S zajcUv>`FDlqZi78OgpHPF=YgyfxR`m^upqVtHrlE#gyZ3S-KRoK|$!H`J5P{At$s| zaX7ozrHHXKb7LE5JRej=&=~6Ru!Ks?vO9N=p1$*GgGhfVO-cv}@gF|*#0Y>&%nU1al^KZ-GMY}D|Ok-(MbCoZNREXp;3F9%JeE{%sNYWg;y7A7Y}#MK9JQIS`2jF z!E;IL3-f|sm1B`5AlpP-iz&1M$Z1Wm1wF12#k2G_f3wNiLe@XFe5CWUW#e>2YwWEtZ4Y~(40u^{!M z)^$--T-ivV=1^vedku(JJ-q@F!tfp%9)wB|dfn_F&3+#30D)yD!Se?*DSTGK0{p{EQIx2J!>7EfuRwJ!i+5f@ZGpZ#Is#RQ<$U=7pGk9NOFCgb zSCZ(lJTvQ5o;W`9>JZiEOnB9>VQsz36DCs0*sekLrBTYA=#8F#Mf4$W<1DqIOe;ChZ!O=MuIbOni} z81d>h3kkBdk(v^3cYoz*c_>7chmMT8$c6vBQ3<_ed}9{5i-szA1f)ll0?%HVBsXW* zN8RY9xJ2dmEWNxu;Jc#*m#t1eIlod&#VlkS;M!-?46z7Mf7uL691VrV69i5lHP1j3 zAi74ooNxpqi2qc@Vf(if0$|cc`OrEK#5@GydL>Q_>#=R#mm2ZQECb=IWm5T%`&VBr`ibtmI=6vkeB-iAY=av z3HsMZT?#ykr6HVtbv2RzZvCqp`o9b+sU1#2OmsqvgnUi2K>Qa37#mRcAv$*r5;69> zb;B#hh|^#yv%W{&c2`lqFDCn*R5yCI)5sD*_M9WYI@W@TJvdW1Wa7<@F?*u$sDS$8 zY2amN-Yy|^A-}iNSbVhQOGTOpd^104%;WG}5)x>l4ecaIGj>>}g4ne@+?I5P7m@=L zQPL~lefFlfB9fi3{Xca*A_aMQ(cgq)d-4}2AQl5cMUncj9hRHN_jzyTdbuGvM)x!9 zkxZ;4Uel9r^5Np0P{<@+-?%NMtMG}f#q!n9iuGel@VxF??ocn+OawA9I1Z_|BMd!@ zRt&qD<}hhChg*0yy#nmzyoDhGvM~ki0?qAZdg&(m0y->YoaqfsdXkmhfY?-ce%3bn zNb!Y!NyhJ~E2XQ}IYV(}>+k#S$)6rQN*f?MD(RJ7q2xz7!w%v8x3JD4dwe}0IZ`$n z^uFqzZkC0yZu*laE}B;lKZ9CTVCTiwt^EbP;!THZOTCOBtfhftL$D2_QW8?G2zfmnTc+P8nCQdoV! zoyXFV_0M*%zZ@KqrV|5sV#nLFXD>Y$?9HD%(6L28KkW+AV+1yV$+B0}jC_3SDhkym zPL-}W2lHWD>%;SKb)__82)+cOHefG~<01x;)Zl-AW`yC8C9P6fW-wh~0g1E)O8|cn zTDiPR$+;`q2JcX=Uk)aCqb*53gj*|t1A4Ws1;_@vH_hn#!H7V_YDGo(QRKDflppmI z61t9SH<$?+z9e_=%zViIZzmJh@s?C3DT^SHjxux`2)q74n6PrCV&CiDN$i#pf5zc| z0YyD^V;EKVNuC_X$riz#4)9lHEU5NGdlOi8qk zFrUL9VvBS3xO-X-Wjd|H3Z*O=UyHUrD`l@I3zddd4SqLTG7f(bt?xaV;|k2bvd*KB z5h>$WjGV{O-=@-E#2z`4tqf*F@S?#{rxL47#}Hd5!oIgyXrLIPFgQ1@G&5)2(%uUi z;VW#AM3GKa@`LbaCY{0Sr6(TdJMH9DB| zzx>YGrGo0nvWrO=;IP6cCIWqt3fRjJSyEAOO%a`!;{zD#6EmAD@VNM*8Cs;cV&^yG zNzs%4TIGyfNgZ}SuWU82!W|2TCE4be=rTg`GFM&q4o9p}r}u^NU_j)W&+MPAthz8b zV`0cA4SVpm`sQWH+zGn^$hIE-n#3mA&N*^hZAo_{*M}D(> zh;&Py!kD#LQr42lm{rE$)`7TX;?NxD9zQ19netNSTA}P}9EQs;Nrvi(0QDCL5YrVW zjmFh3=ruyc%P*0uZA@F*oKI_2Fz_sVD?F= zHei(v5cA&e3*3HI!x8&8;ZUQFV~ZkRwT3b^4+$UH5~))dZ`jGA_avN87oXk$de39W z(9CT1I2#&cbQX-_P)&Xt3ju{)mnI0$Ztbm>n*qy*{?KRM`T(@MQQb9zJ+B!Oy=3xx zlO^+QK>n{AOQ*tU`IXR&vA&6tYocP zbr9FsicSO)q~w5U(ho1k$e3f>FR%);P7JI`l{X~Pk}{B%-LwE)SNnUfkFS<78b=*bJJOM=|O-nNxwGtJ3Q^zs=pVjfOA?6r58Ku!8`VD9O zN_{{rs$>}!n?2%yBNT&T<=|f&Uv@d=hJ^0(g-W)D$)WVly?Zh%v>! z)?Xm*qF@7FMb>suhW4ihRy+K51;$a0P=Tglm~*0txE_E{-Y6cH;|y55B&?$86QS

b)G@0%fe%8XncIM8iS5VIcFQY3^7B!C?o z0Tz6pg~m?(={laKW`JPHpD&-@{(@5KB_^EA$MHKy{nG%MJ&xsSlMk?US{e{PWK8ydGhHhh^c&991;pg@&CYXA64ukr-ZfU1XP$(RL-@%BK6c)*$>70Z z9CBF5>sqCk0HFUGhF1!Jr;*i`N#n-63!Q8WO-H!e2X>>A?}UkTT>3zK9;v%Evf_ z5cZ}|3#Y&#aW7HEX6A)fk1mW5j@7zpEgY@M8tu#~{19CXX|%Cf*>#>{2VU-Bw<07^ zMh}BG0`~=WaW#RMe^&spbz`bpx*g`a$A@r6d@uvNERBf6=e^ysjGeWypd7HEWU{!J zRhQHx#Ei*{s<{g!ZYpv_tIfaVRm6+doJlxJCm(i_SQU_bp0nCK#vgia)m}dI$BSAV ze1&B4hE|sKI;Wr17lDzcZglag&^kCDiXSzNF#ti_q}|0Io){rHSW7B$u34uEp(C)$ z&b68ZvNkd8>m@Neulax2pX0DtSD4fp)vVw;K7ySSpkf^`Vt97eNdD33j@B$)@@8*G5euyWgllC>v>*Zi_uN)8Iq+Kno z$nHn6wJSH{$sUFL00FxyfB&dlhS{-iwhgYl>s=0tTy*)avm3N{60PHBY@kv{z;gLj zdWk9#3(fE53w1JBic5#8 z0;IgWfLFP**wH%2<#VBE1n{r%)fhDDazsnleF=?Dgij#@a;!d(ayS`VfQLlc3D36= z0i}CcE8I&z>~nBKbydF^Sv${!Lkqcd1Rx&=g#3N_1t94ZP|O$2crg*DF!Kg07Zg49 z^&4%{lcFy?hsBhiB>4{MGv3)6_;8Iu85_>%s{-eTEZ2kE&n`637I|PXD*(1*FT{22 zvo{Z3g=oQnVq-xP$2k2kS!z`SJ9VAQ8On_%( z&TbVou~QvcnsY;Uh{->k9c9Mv>El7)iGrNR^Eb1Y?#1w4!!3d-Au>!inaSF~;P0v5 zM*T8K^%z}<^CiJDJUQIskxXe2`XDEh%%!|(XMJ%jLHVqR!?+I19UAFSaqA?PxY1tL_Y>}=_8fpT&QB%va6Sj2;pWV4(4b;D< zlAt3RuUd7?dt$z3^u{((AkBN5pj&#AUz^{l5=s>3P>0tE26-@;qL*n_6LJ4VibS}r z@;0B2lf3tgWg;s%TMbeEl>z2OZPV#aqSWR}De?4PB|`v;Z`udb2igN~BImreP|n(s z?#GpASJdlB{Klqv8AX;`L(#t6HeklrVLydX_J~=F||;ii4d4$Yjs738fqVI~}XXX_taHI_=QluR88mP!SkX%IGeQe zK;9bXiXFOeULwETr7;7Xov>?h#89!T1*)EviYUn)`92sru_F;IpEJH_zmz;(^<=UL zQSEMnfD{{IL*f*iR;HZ@#35boYXNmVB0-S}XAe$|`h84Wzs3ku@zW>zBlW78rp0s< zenXZzBTX^l`~HK$IXjgPj>adCqej@r|0Pz8MirLUt5JAjVG$dZzU)*j+*j4ZM&5XP zobO7F;#}OD_t$FS6717!+9H)aI44N^kKvg(&9%|zeEcV< zx3o-LVS$0~#xMG8?fZZz0920JG!A9{?rS+dCCFth!Y>xfRS=bPcn~D*DuBEfb5d2N zLxWnFbycc0I#E4b=>BJtY)T!Has>Y8VEFf@fT#v2g;DPpya}e6@+pm(k-n2;e_Dmy E?-Pt5GXMYp diff --git a/terranix/servers/config.nix b/terranix/servers/config.nix deleted file mode 100644 index 8c41130..0000000 --- a/terranix/servers/config.nix +++ /dev/null @@ -1,32 +0,0 @@ -{ config, ... }: -let - - get = element: object: "\${ ${object."_ref"}.${element} }"; - - getVariable = name: "\${ var.${name} }"; - -in -{ - - hcloud = { - enable = true; - - resource.server."tinc_node" = { - name = "tinc-node-nurnberg"; - image = "ubuntu-18.04"; - server_type = "cx11"; - backups = false; - # datacenter = "nbg1-dc3"; - location = "nbg1"; - labels = { system = "nixos"; }; - }; - }; - - output = { - "${config.hcloud.resource.server."tinc_node".name}-ip4_address".value = - get "ipv4_address" config.hcloud.resource.server."tinc_node"; - "${config.hcloud.resource.server."tinc_node".name}-ip6_address".value = - get "ipv6_address" config.hcloud.resource.server."tinc_node"; - }; - -} diff --git a/terranix/servers/modules/nix-server.nix b/terranix/servers/modules/nix-server.nix deleted file mode 100644 index 5acc03f..0000000 --- a/terranix/servers/modules/nix-server.nix +++ /dev/null @@ -1,35 +0,0 @@ -{ config, lib, pkgs, ... }: - -with lib; - -let - - cfg = config.hcloud.nixserver; - -in -{ - - options.hcloud.nixserver = { - enable = mkEnableOption '' - create a nixos server on hetzner. - this module will take car of everything needed - to be done, to install stuff on it. - - wip - ''; - }; - - config = mkIf cfg.enable { - hcloud.resource = { - server."todo" = { - name = "todo-module-created-server"; - image = "ubuntu-18.04"; - iso = "nixos-graphical-18.09.1195.bf7930d582b-x86_64-linux.iso"; - server_type = "cx11"; - location = "nbg1"; - rescue = "linux64"; - labels = { system = "nixos"; }; - }; - }; - }; -} diff --git a/terranix/servers/shell.nix b/terranix/servers/shell.nix deleted file mode 100644 index 07400cf..0000000 --- a/terranix/servers/shell.nix +++ /dev/null @@ -1,36 +0,0 @@ -{ pkgs ? import { } }: -let - - #terraform = terraform-current; - terraform = pkgs.terraform; - terraform-current = pkgs.terraform.overrideAttrs (old: rec { - version = "0.11.10"; - name = "terraform-${version}"; - src = pkgs.fetchFromGitHub { - owner = "hashicorp"; - repo = "terraform"; - rev = "v${version}"; - sha256 = "08mapla89g106bvqr41zfd7l4ki55by6207qlxq9caiha54nx4nb"; - }; - }); - -in -pkgs.mkShell { - - # needed pkgs - # ----------- - buildInputs = with pkgs; - [ - - (pkgs.writeShellScriptBin "terraform" '' - export TF_VAR_hcloud_api_token=`${pkgs.pass}/bin/pass development/hetzner.com/api-token` - ${terraform}/bin/terraform "$@" - '') - ]; - - # run this on start - # ----------------- - shellHook = '' - HISTFILE=${toString ./.}/.history - ''; -} diff --git a/terranix/servers/terraform.tfstate b/terranix/servers/terraform.tfstate deleted file mode 100644 index 91dff49c50ec1d4a2e233bad47455a7a3ab2367b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2036 zcmVcw2V;q@ea ze(6MGiFpd|_mQ>1OXt~G2+ko=SXR_3ZkFZ9oi*6cY)<`+zL47=wu6+%tuc~!{e{d| zQ}fQi8kLm>;%1;Gf)!@|mpLk{<0+C!9DzWtz~PXl?Z}*R$c*3EB)ziG7Hi5HtE{WU znRqkV_4zxmk)bCOboZ;Akzi;$D2bLN#=S9ouH%)?oqrOfh(I-z z-m<-Gbz_m-6Mh1B;97_@Pta_9p>y_=4Yo?A;Op0(C&i89%v59_yR$StMjC{S0xiX;>6__PNHPT9QXjQFKn^_X8R2hR<(}vY+dO zpu*~dpFzheRvw#grnRkJI6UnbN_AMLnf;vSz@>}~wbHKA?8DPw{9 zns|9L#NR|)aVFLtzY?_dFCf-|dPHr#LOHYP{*QhkG&luy|d&<(VMTcF)Rij%|GTTX98^b62QP2*)z&>fH; zc2J^tj*yZr2vG{*%-P3qNiLxn6Vn7^IX~Qtr_^)@i$R>&iMTV7cCq#NfLXG>@F+tN zDYP6bn2YYqdI*={Agh0EJJv-Qg*lf!YiC)-t9FjOm^jTM|2P{=%1RRt*k!z;x^ZNwT3He zuq2=giP_*~bLe3|m)Na|Yxt1TrY|$|^Nk0U&KWuH43NI=j@m}gmPO<%> zii;DyIX)@UWecHG4F>1F8cE85Tcv^b!ZCoC4lrKKvJ0c7{h3w2pOo^p7I;!G_a~Ze zbD~rTuhp23me40PC0^sOO~i$-$4f#rUCbLv>0D!E-KyEX*N|E_fpkNHX42&jK8Hn8 zj53{#mG*-@N@ksGZSiQV(Oc6*usYwe9VkOebe+>$_=(jw^jS2hqdQ$Ll2ruj_Wf^w z4K0g0o_MxAOf$ruSewNA8J zF#04D%aLR=s<8FiA~#VsHrfDCJyw9UT1Ejs>sUU|st55Nt3-cibB!edDf34?!n#G}{risM#q}6K>JsqBpGv2T@S<8CBlm zi^n3LB}#-p_3yQo1DxNgtA83+FMJH2vCqgLa@}%By(NWsqx$yO?;I)>bNt&c4cVFJ za#j}~Ve#kooL^a+hJHbJG{AP9G!V_j&B}mU?|7JQW6+6wQ+ykNz}Um)>A1ZVABYKN z0Zj>sX;Fa1-TQj#5=#!V3uNkn-bM%hTLRV|8(Ov6?hOJ5sbDSG|Bzzn^%b&RCkIi0 z6$v8CV1hH}mv=4ih&!&ZC+n5gG(6oC1Y8wM$E~cC`L_cHkWAskA{0N~AcWIyZ`=Ae zBBPriC!UJBzXGv`ue`<86Ij1$993+(v+g(LN+CH#0Q;JxziQ$Ic&HhKHqK@-bt-TA z+h7y@p`hKjV2mz(w7G(DR< z_e!z4?a~ySvW4ppxdI$}aeBY5;34S&hhf0^=xOuIsW*nTdGe5M(V*7F;@{^9iwT1e za!8L;GTz`|Khrw26Tn8sjx}iD(zBS-9gO&{$AMAy`q-f&;X}0EvyeT=r$d2$Zc_$b z*FLt5iO!}eh4WJqiNWhZ{(TO;pS16+ofy;b$T^MQSVDVXi9~PFxbGeL=;!jH41GM6 z`3|B)Dokq9!+%Sk7Qe!6{aQnr9x}+2xPW$41J??S7`KwoKRA}T&h0G{4!nPDUn zoJ)$J-WL1f#W`N&s-p(R<@$PK)gu8~G?bD@o1^xzKs>a&vZvkLCU@w+1lX7hy?1tBCno)%rq5y*_ zCWVH@Gd>6lX-J~Y!uH(A5}m!71qBE`PSnBD_X3|$PWD-pt>oECbz0{gnEv5Y(!f(z z6{Mu^;w(opue|m2y0r8_j0Bh-XOHoAoWO>Jfa5Vz{ZhsO;LY%>+L7Xxy4;>Mho5Ci zx~eFiy&u#F=HD;}{}A;h0p!a&goMImRu1e33ma#B*joJ{lL!mP8{22NOU9Eu-1r=%9u>s&WKoR1Y^y*>i$Cj diff --git a/terranix/space-left/.gitignore b/terranix/space-left/.gitignore deleted file mode 100644 index 6073c1a..0000000 --- a/terranix/space-left/.gitignore +++ /dev/null @@ -1,2 +0,0 @@ -plops/generated/ -sshkey* \ No newline at end of file diff --git a/terranix/space-left/README.md b/terranix/space-left/README.md deleted file mode 100644 index 9a50870..0000000 --- a/terranix/space-left/README.md +++ /dev/null @@ -1,54 +0,0 @@ -# NixOS Server Example with plops - -This setup shows: - -- how to use a terranix module -- how to use 3rd party provision software after terraform. -- how to run terranix and terraform - -Setup containing opinionated modules to deploy -[NixOS servers](https://nixos.org/) -on -[hcloud](https://www.hetzner.com/cloud) -using -[nixos-infect](https://github.com/elitak/nixos-infect) -with my -[plops](https://github.com/mrVanDalo/plops) -provisioning tool for NixOS, -which is an overlay on -[krops](https://cgit.krebsco.de/krops/about/). - -After server creation, -the initial provisioning uploads the -nixos-infect -script and applys it. -After server creation and initialization -terranix/terraform generates -files used for the "real" provisioning -done by plops. - -Of course instead of plops you can use every provsioning tool you like -here (e.g. NixOps, Ansible, ... ) - -# How to Run - -## What you need - -- a setup [passwordstore](https://www.passwordstore.org/). -- a [hcloud token](https://docs.hetzner.cloud/#overview-getting-started) - stored under `development/hetzner.com/api-token` - -## Steps - -- `terraform-prepare`: to create ssh keys. -- `terraform-build`: to run terranix and terraform do create server. -- `terraform-destroy`: to delete server (don't forget that step, or else it gets costly) -- `terraform-cleanup`: to delete ssh keys and terraform data. - -## DNS - -define domains with your nameserver and update `jitsi.nix` and `workadventure.nix`. - -- `meet.${domain}` to given ip4 address -- `party.${domain}` to given ip4 address -- `*.party.${domain}` to given ip4 address diff --git a/terranix/space-left/config.nix b/terranix/space-left/config.nix deleted file mode 100644 index 7b9e8db..0000000 --- a/terranix/space-left/config.nix +++ /dev/null @@ -1,52 +0,0 @@ -{ config, lib, pkgs, ... }: -let - hcloud-modules = pkgs.fetchgit { - url = "https://github.com/mrVanDalo/terranix-hcloud.git"; - rev = "5fa359a482892cd973dcc6ecfc607f4709f24495"; - sha256 = "0smgmdiklj98y71fmcdjsqjq8l41i66hs8msc7k4m9dpkphqk86p"; - }; -in -{ - - imports = [ "${hcloud-modules}/default.nix" ]; - - # configure temporary admin ssh keys - users.admins.palo.publicKey = "${lib.fileContents ./sshkey.pub}"; - - # configure provisioning private Key to be used when running provisioning on the machines - provisioner.privateKeyFile = toString ./sshkey; - - hcloud.nixserver = { - host = { - enable = true; - serverType = "cx31"; - configurationFile = pkgs.writeText "configuration.nix" '' - { pkgs, lib, config, ... }: - { - environment.systemPackages = [ pkgs.git ]; - } - ''; - }; - }; - - # todo : put this in the hcloud module - resource.hcloud_server.nixserver-host.location = "hel1"; - - hcloud.export.nix = toString ./plops/generated/nixos-machines.nix; - - resource.local_file.sshConfig = { - filename = "${toString ./plops/generated/ssh-configuration}"; - content = with lib; - let - configPart = name: '' - Host ''${ hcloud_server.nixserver-${name}.ipv4_address } - IdentityFile ${toString ./sshkey} - ServerAliveInterval 60 - ServerAliveCountMax 3 - ''; - in - concatStringsSep "\n" - (map configPart (attrNames config.hcloud.nixserver)); - }; - -} diff --git a/terranix/space-left/plops/configs/nixserver-host/codimd.nix b/terranix/space-left/plops/configs/nixserver-host/codimd.nix deleted file mode 100644 index fbcc958..0000000 --- a/terranix/space-left/plops/configs/nixserver-host/codimd.nix +++ /dev/null @@ -1,29 +0,0 @@ -{ config, lib, pkgs, ... }: { - - services.nginx.enable = true; - services.nginx.virtualHosts.codimd = { - enableACME = true; - addSSL = true; - serverName = "codimd.ingolf-wagner.de"; - locations."/".extraConfig = '' - client_max_body_size 4G; - proxy_set_header Host $host; - proxy_pass http://localhost:3091; - ''; - }; - - services.codimd = { - enable = true; - configuration = { - allowFreeURL = true; - db = { - dialect = "sqlite"; - storage = "/var/lib/codimd/db.codimd.sqlite"; - useCDN = false; - }; - port = 3091; - }; - }; - -} - diff --git a/terranix/space-left/plops/configs/nixserver-host/configuration.nix b/terranix/space-left/plops/configs/nixserver-host/configuration.nix deleted file mode 100644 index 49ec152..0000000 --- a/terranix/space-left/plops/configs/nixserver-host/configuration.nix +++ /dev/null @@ -1,19 +0,0 @@ -{ config, pkgs, lib, ... }: { - imports = [ - # - #./codimd.nix - ./hardware-configuration.nix - #/jitsi.nix - #./netdata.nix - ./ssh.nix - #./workadventure.nix - ]; - - environment.systemPackages = [ pkgs.git pkgs.ag pkgs.htop ]; - - networking.hostName = "space-left"; - - security.acme.email = "contact@ingolf-wagner.de"; - security.acme.acceptTerms = true; - -} diff --git a/terranix/space-left/plops/configs/nixserver-host/gitlab.nix b/terranix/space-left/plops/configs/nixserver-host/gitlab.nix deleted file mode 100644 index 3786d2e..0000000 --- a/terranix/space-left/plops/configs/nixserver-host/gitlab.nix +++ /dev/null @@ -1,49 +0,0 @@ -{ config, pkgs, lib, ... }: -let domain = "gitlab.space-left.org"; -in { - - # setup gitlab - services.gitlab = { - enable = true; - host = domain; - databasePasswordFile = "path/todo"; - initialRootPasswordFile = "path/todo"; - - secrets = { - # Make sure the secret is at least 30 characters and all random, - # no regular words or you'll be exposed to dictionary attacks - dbFile = "path/todo"; - - # openssl genrsa 2048 - jwsFile = "path/todo"; - - # Make sure the secret is at least 30 characters and all random, - # no regular words or you'll be exposed to dictionary attacks - otpFile = "path/todo"; - - # Make sure the secret is at least 30 characters and all random, - # no regular words or you'll be exposed to dictionary attacks - secretFile = "path/todo"; - }; - - # smtp? - - # gitlab-runner? - }; - - # setup nginx for gitlab - services.nginx = { - enable = true; - recommendedProxySettings = true; - - virtualHosts."${domain}" = { - enableACME = true; - forceSSL = true; - locations."/" = { - proxyPass = "http://127.0.0.1:${toString config.services.gitlab.port}"; - }; - }; - }; - -} - diff --git a/terranix/space-left/plops/configs/nixserver-host/hardware-configuration.nix b/terranix/space-left/plops/configs/nixserver-host/hardware-configuration.nix deleted file mode 100644 index ae82a10..0000000 --- a/terranix/space-left/plops/configs/nixserver-host/hardware-configuration.nix +++ /dev/null @@ -1,10 +0,0 @@ -{ ... }: { - imports = [ ]; - boot.initrd.availableKernelModules = - [ "ata_piix" "uhci_hcd" "virtio_pci" "sd_mod" "sr_mod" ]; - boot.loader.grub.device = "/dev/sda"; - fileSystems."/" = { - device = "/dev/sda1"; - fsType = "ext4"; - }; -} diff --git a/terranix/space-left/plops/configs/nixserver-host/jitsi.nix b/terranix/space-left/plops/configs/nixserver-host/jitsi.nix deleted file mode 100644 index aaffea5..0000000 --- a/terranix/space-left/plops/configs/nixserver-host/jitsi.nix +++ /dev/null @@ -1,61 +0,0 @@ -{ - # + + - # | | - # | | - # v v - # 80, 443 TCP 443 TCP, 10000 UDP - # +--------------+ +---------------------+ - # | nginx | 5222, 5347 TCP | | - # | jitsi-meet |<-------------------+| jitsi-videobridge | - # | prosody | | | | - # | jicofo | | +---------------------+ - # +--------------+ | - # | +---------------------+ - # | | | - # +----------+| jitsi-videobridge | - # | | | - # | +---------------------+ - # | - # | +---------------------+ - # | | | - # +----------+| jitsi-videobridge | - # | | - # +---------------------+ - - # This is a one server setup - services.jitsi-meet = { - enable = true; - hostName = "meet.ingolf-wagner.de"; - - # JItsi COnference FOcus is a server side focus component used in Jitsi Meet conferences. - # https://github.com/jitsi/jicofo - jicofo.enable = true; - - # Whether to enable nginx virtual host that will serve the javascript application and act as a proxy for the XMPP server. - # Further nginx configuration can be done by adapting services.nginx.virtualHosts.. When this is enabled, ACME - # will be used to retrieve a TLS certificate by default. To disable this, set the - # services.nginx.virtualHosts..enableACME to false and if appropriate do the same for - # services.nginx.virtualHosts..forceSSL. - nginx.enable = true; - - # https://github.com/jitsi/jitsi-meet/blob/master/config.js - config = { - enableWelcomePage = false; - defaultLang = "en"; - - }; - - # https://github.com/jitsi/jitsi-meet/blob/master/interface_config.js - interfaceConfig = { - SHOW_JITSI_WATERMARK = false; - SHOW_WATERMARK_FOR_GUESTS = false; - }; - - }; - - networking.firewall = { - allowedTCPPorts = [ 80 443 ]; - allowedUDPPorts = [ 10000 ]; - }; - -} diff --git a/terranix/space-left/plops/configs/nixserver-host/netdata.nix b/terranix/space-left/plops/configs/nixserver-host/netdata.nix deleted file mode 100644 index a879b7f..0000000 --- a/terranix/space-left/plops/configs/nixserver-host/netdata.nix +++ /dev/null @@ -1,15 +0,0 @@ -{ - services.netdata = { - enable = true; - config = { - #"exporting:global" = { "enabled" = "yes"; }; - global = { - "memory mode" = "dbengine"; - "dbengine disk space" = 1024 * 10; # in MB - "debug log" = "none"; - "access log" = "none"; - "error log" = "syslog"; - }; - }; - }; -} diff --git a/terranix/space-left/plops/configs/nixserver-host/ssh.nix b/terranix/space-left/plops/configs/nixserver-host/ssh.nix deleted file mode 100644 index 93bfd18..0000000 --- a/terranix/space-left/plops/configs/nixserver-host/ssh.nix +++ /dev/null @@ -1,14 +0,0 @@ -{ - # ssh configuration - # ----------------- - services.sshd.enable = true; - services.openssh.passwordAuthentication = false; - services.openssh.banner = '' - [ Space Left Server ] - ''; - - # the public ssh key used at deployment - users.users.root.openssh.authorizedKeys.keys = [ - "ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAACAQC6uza62+Go9sBFs3XZE2OkugBv9PJ7Yv8ebCskE5WYPcahMZIKkQw+zkGI8EGzOPJhQEv2xk+XBf2VOzj0Fto4nh8X5+Llb1nM+YxQPk1SVlwbNAlhh24L1w2vKtBtMy277MF4EP+caGceYP6gki5+DzlPUSdFSAEFFWgN1WPkiyUii15Xi3QuCMR8F18dbwVUYbT11vwNhdiAXWphrQG+yPguALBGR+21JM6fffOln3BhoDUp2poVc5Qe2EBuUbRUV3/fOU4HwWVKZ7KCFvLZBSVFutXCj5HuNWJ5T3RuuxJSmY5lYuFZx9gD+n+DAEJt30iXWcaJlmUqQB5awcB1S2d9pJ141V4vjiCMKUJHIdspFrI23rFNYD9k2ZXDA8VOnQE33BzmgF9xOVh6qr4G0oEpsNqJoKybVTUeSyl4+ifzdQANouvySgLJV/pcqaxX1srSDIUlcM2vDMWAs3ryCa0aAlmAVZIHgRhh6wa+IXW8gIYt+5biPWUuihJ4zGBEwkyVXXf2xsecMWCAGPWPDL0/fBfY9krNfC5M2sqxey2ShFIq+R/wMdaI7yVjUCF2QIUNiIdFbJL6bDrDyHnEXJJN+rAo23jUoTZZRv7Jq3DB/A5H7a73VCcblZyUmwMSlpg3wos7pdw5Ctta3zQPoxoAKGS1uZ+yTeZbPMmdbw==" - ]; -} diff --git a/terranix/space-left/plops/configs/nixserver-host/workadventure.nix b/terranix/space-left/plops/configs/nixserver-host/workadventure.nix deleted file mode 100644 index 2609101..0000000 --- a/terranix/space-left/plops/configs/nixserver-host/workadventure.nix +++ /dev/null @@ -1,166 +0,0 @@ -{ config, pkgs, lib, ... }: -let - # If your Jitsi environment has authentication set up, - # you MUST set JITSI_PRIVATE_MODE to "true" and - # you MUST pass a SECRET_JITSI_KEY to generate the JWT secret - jitsiPrivateMode = "false"; - - secretJitsiKey = ""; - - jitsiISS = ""; - - workadventureSecretKey = "YXNkZnNkZmxranNhZGxma2phc2RsZmtqYXNsa2Zkago="; - - jitsiURL = "meet.ingolf-wagner.de"; - - domain = "party.ingolf-wagner.de"; - # domain will redirect to this map. (not play.${domain}) - defaultMap = "mrvandalo.github.io/workadventure-worlds/main.json"; - - apiURL = "api.${domain}"; - apiPort = 9002; - - frontURL = "play.${domain}"; - frontPort = 9004; - - pusherURL = "push.${domain}"; - pusherPort = 9005; - - uploaderURL = "upload.${domain}"; - uploaderPort = 9006; - - frontImage = "thecodingmachine/workadventure-front:develop"; - pusherImage = "thecodingmachine/workadventure-pusher:develop"; - apiImage = "thecodingmachine/workadventure-back:develop"; - uploaderImage = "thecodingmachine/workadventure-uploader:develop"; - -in -{ - - virtualisation.docker.enable = true; - boot.kernel.sysctl."net.ipv4.ip_forward" = true; - - networking.firewall = { - allowedTCPPorts = [ 80 443 ]; - allowedUDPPorts = [ 80 443 ]; - }; - - services.nginx.enable = true; - services.nginx.recommendedProxySettings = true; - - systemd.services.workadventure-network = { - enable = true; - wantedBy = [ "multi-user.target" ]; - script = '' - ${pkgs.docker}/bin/docker network create --driver bridge workadventure ||: - ''; - after = [ "docker" ]; - before = [ - "docker-workadventure-back.service" - "docker-workadventure-pusher.service" - "docker-workadventure-uploader.service" - "docker-workadventure-website.service" - ]; - }; - - virtualisation.oci-containers.backend = "docker"; - - services.nginx.virtualHosts."${domain}" = { - enableACME = true; - forceSSL = true; - locations."/" = { - return = "302 $scheme://play.${domain}/_/global/${defaultMap}"; - }; - }; - - virtualisation.oci-containers.containers.workadventure-front = { - image = frontImage; - environment = { - API_URL = pusherURL; - JITSI_PRIVATE_MODE = jitsiPrivateMode; - JITSI_URL = jitsiURL; - SECRET_JITSI_KEY = secretJitsiKey; - UPLOADER_URL = uploaderURL; - }; - ports = [ "127.0.0.1:${toString frontPort}:80" ]; - extraOptions = [ "--network=workadventure" ]; - }; - services.nginx.virtualHosts."${frontURL}" = { - enableACME = true; - forceSSL = true; - locations."/" = { proxyPass = "http://127.0.0.1:${toString frontPort}"; }; - }; - - virtualisation.oci-containers.containers.workadventure-pusher = { - image = pusherImage; - environment = { - API_URL = "workadventure-back:50051"; - JITSI_ISS = jitsiISS; - JITSI_URL = jitsiURL; - SECRET_KEY = workadventureSecretKey; - }; - ports = [ "127.0.0.1:${toString pusherPort}:8080" ]; - extraOptions = [ "--network=workadventure" ]; - }; - services.nginx.virtualHosts."${pusherURL}" = { - enableACME = true; - forceSSL = true; - locations."/" = { - proxyPass = "http://127.0.0.1:${toString pusherPort}"; - proxyWebsockets = true; - }; - locations."/room" = { - proxyPass = "http://127.0.0.1:${toString pusherPort}"; - proxyWebsockets = true; - }; - }; - - virtualisation.oci-containers.containers.workadventure-back = { - image = apiImage; - environment = { - #DEBUG = "*"; - JITSI_ISS = jitsiISS; - JITSI_URL = jitsiURL; - SECRET_KEY = workadventureSecretKey; - }; - ports = [ "127.0.0.1:${toString apiPort}:8080" "50051" ]; - extraOptions = [ "--network=workadventure" ]; - }; - services.nginx.virtualHosts."${apiURL}" = { - enableACME = true; - forceSSL = true; - locations."/" = { proxyPass = "http://127.0.0.1:${toString apiPort}"; }; - }; - - virtualisation.oci-containers.containers.workadventure-uploader = { - image = uploaderImage; - ports = [ "127.0.0.1:${toString uploaderPort}:8080" ]; - extraOptions = [ "--network=workadventure" ]; - }; - services.nginx.virtualHosts."${uploaderURL}" = { - enableACME = true; - forceSSL = true; - locations."/" = { - proxyPass = "http://127.0.0.1:${toString uploaderPort}"; - proxyWebsockets = true; - }; - }; - - systemd.services.docker-workadventure-front.serviceConfig = { - StandardOutput = lib.mkForce "journal"; - StandardError = lib.mkForce "journal"; - }; - systemd.services.docker-workadventure-uploader.serviceConfig = { - StandardOutput = lib.mkForce "journal"; - StandardError = lib.mkForce "journal"; - }; - systemd.services.docker-workadventure-pusher.serviceConfig = { - StandardOutput = lib.mkForce "journal"; - StandardError = lib.mkForce "journal"; - }; - systemd.services.docker-workadventure-back.serviceConfig = { - StandardOutput = lib.mkForce "journal"; - StandardError = lib.mkForce "journal"; - }; - -} diff --git a/terranix/space-left/plops/shell.nix b/terranix/space-left/plops/shell.nix deleted file mode 100644 index 16e7de6..0000000 --- a/terranix/space-left/plops/shell.nix +++ /dev/null @@ -1,74 +0,0 @@ -let - - # import plops with pkgs and lib - opsImport = import ((import { }).fetchgit { - url = "https://github.com/mrVanDalo/plops.git"; - rev = "9fabba016a3553ae6e13d5d17d279c4de2eb00ad"; - sha256 = "193pajq1gcd9jyd12nii06q1sf49xdhbjbfqk3lcq83s0miqfs63"; - }); - - ops = - let - overlay = self: super: { - # overwrite ssh to use the generated ssh configuration - openssh = super.writeShellScriptBin "ssh" '' - ${super.openssh}/bin/ssh -F ${ - toString ./generated/ssh-configuration - } "$@" - ''; - }; - in - opsImport { overlays = [ overlay ]; }; - - lib = ops.lib; - pkgs = ops.pkgs; - - # define all sources - source = { - - # nixpkgs (no need for channels anymore) - nixPkgs.nixpkgs.git = { - ref = "nixos-20.09"; - url = "https://github.com/NixOS/nixpkgs"; - }; - - # system configurations - system = name: { - configs.file = toString ./configs; - nixos-config.symlink = "configs/${name}/configuration.nix"; - }; - - # secrets which are hold and stored by pass - secrets = name: { - secrets.pass = { - dir = toString ./secrets; - name = name; - }; - }; - }; - - servers = import ./generated/nixos-machines.nix; - - deployServer = name: - { user ? "root", host, ... }: - with ops; - jobs "deploy-${name}" "${user}@${host.ipv4}" [ - # deploy secrets to /run/plops-secrets/secrets - # (populateTmpfs (source.secrets name)) - # deploy system to /var/src/system - (populate (source.system name)) - # deploy nixpkgs to /var/src/nixpkgs - (populate source.nixPkgs) - switch - ]; - -in -pkgs.mkShell { - - buildInputs = lib.mapAttrsToList deployServer servers; - - shellHook = '' - export PASSWORD_STORE_DIR=./secrets - ''; - -} diff --git a/terranix/space-left/shell.nix b/terranix/space-left/shell.nix deleted file mode 100644 index b334a45..0000000 --- a/terranix/space-left/shell.nix +++ /dev/null @@ -1,49 +0,0 @@ -{ pkgs ? import { } }: -let - - #terranix = pkgs.callPackage (pkgs.fetchgit { - # url = "https://github.com/mrVanDalo/terranix.git"; - # rev = "2.3.0"; - # sha256 = "030067h3gjc02llaa7rx5iml0ikvw6szadm0nrss2sqzshsfimm4"; - #}) { }; - terranix = pkgs.terranix; - - terraform = pkgs.writers.writeBashBin "terraform" '' - export TF_VAR_hcloud_api_token=`${pkgs.pass}/bin/pass development/hetzner.com/api-token` - ${pkgs.terraform_0_12}/bin/terraform "$@" - ''; - -in -pkgs.mkShell { - - buildInputs = [ - - terranix - terraform - - (pkgs.writers.writeBashBin "terraform-prepare" '' - ${pkgs.openssh}/bin/ssh-keygen -P "" -f ${toString ./.}/sshkey - '') - - (pkgs.writers.writeBashBin "terraform-build" '' - set -e - set -o pipefail - ${terranix}/bin/terranix | ${pkgs.jq}/bin/jq '.' > config.tf.json - ${terraform}/bin/terraform init - ${terraform}/bin/terraform apply - '') - - (pkgs.writers.writeBashBin "terraform-destroy" '' - ${terraform}/bin/terraform destroy - rm ${toString ./.}/config.tf.json - '') - - (pkgs.writers.writeBashBin "terraform-cleanup" '' - rm ${toString ./.}/sshkey - rm ${toString ./.}/sshkey.pub - rm ${toString ./.}/terraform.tfstate* - '') - - ]; -} - diff --git a/terranix/space-left/terraform.tfstate b/terranix/space-left/terraform.tfstate deleted file mode 100644 index 29860b0dcb1f4f2b6fa55145978b2daa56bf9ad6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 180 zcmV;l089S>M@dveQdv+`0AxoWEDrwB4cy**|NQu>TKx}lv#YU#unroSy2ztq>xH@| z7cIbD;E2ib`FWE0AQ8LNpdg6dE>Yf2B%9Rpl-_Fzz(CpR;;C|Fx@!93s;RG$q9g?dpc4FiKP@A iYa5=79mKrxOSkXi!1Yyi%6rbL?4DX;vKp}P10rmTqFq%0 diff --git a/terranix/tinc-test/.gitignore b/terranix/tinc-test/.gitignore deleted file mode 100644 index bd14e35..0000000 --- a/terranix/tinc-test/.gitignore +++ /dev/null @@ -1,10 +0,0 @@ -.terraform -*.tf.json -*.swp - -02-build/generated/** -!02-build/generated/.keep - -terraform.tfstate -terraform.tfstate.backup -.terraform.tfstate.lock.info diff --git a/terranix/tinc-test/01-terranix/config.nix b/terranix/tinc-test/01-terranix/config.nix deleted file mode 100644 index 1ceb636..0000000 --- a/terranix/tinc-test/01-terranix/config.nix +++ /dev/null @@ -1,32 +0,0 @@ -{ config, lib, pkgs, ... }: -let - - #hcloud-modules = pkgs.fetchgit { - # #url = "https://github.com/mrVanDalo/terranix-hcloud.git"; - # url = "https://git.ingolf-wagner.de/terranix/hcloud.git"; - # rev = "b6896f385f45ecfd66e970663c55635c9fd8b26b"; - # sha256 = "1bggnbry7is7b7cjl63q6r5wg9pqz0jn8i3nnc4rqixp0ckwdn85"; - #}; - - hcloud-modules = /home/palo/dev/terranix-hcloud/terraform-0.11; - -in -{ - - imports = [ (toString hcloud-modules) ./config/ssh-setup.nix ]; - - hcloud.export.nix = "${toString ../02-build/generated}/nixos-machines.nix"; - - hcloud.nixserver.server = { - configurationFile = pkgs.writeText "configuration.nix" '' - { pkgs, lib, ... }: - { - environment.systemPackages = with pkgs; [ - htop git vim mosh - ]; - networking.firewall.allowedUDPPorts = [ 60001 ]; - } - ''; - }; - -} diff --git a/terranix/tinc-test/01-terranix/config/file-generation.nix b/terranix/tinc-test/01-terranix/config/file-generation.nix deleted file mode 100644 index 2c5bf50..0000000 --- a/terranix/tinc-test/01-terranix/config/file-generation.nix +++ /dev/null @@ -1,31 +0,0 @@ -# -------------------------------------------------------------------------------- -# -# collect all server information and generate files which get picked up -# by 02-build to deploy the machines properly. -# -# This makes it possible to deploy VPNs like tinc and wireguard. -# -# -------------------------------------------------------------------------------- - -{ config, lib, pkgs, ... }: { - resource.local_file = { - nixosMachines = { - content = with lib; - let - serverPart = name: '' - ${name} = { - host = "''${ hcloud_server.${name}.ipv4_address }"; - user = "root"; - }; - ''; - allServerParts = map serverPart (attrNames config.hcloud.server); - in - '' - { - ${concatStringsSep "\n" allServerParts} - } - ''; - filename = "${toString ../../02-build/generated/nixos-machines.nix}"; - }; - }; -} diff --git a/terranix/tinc-test/01-terranix/config/ssh-setup.nix b/terranix/tinc-test/01-terranix/config/ssh-setup.nix deleted file mode 100644 index 83dd167..0000000 --- a/terranix/tinc-test/01-terranix/config/ssh-setup.nix +++ /dev/null @@ -1,46 +0,0 @@ -# -------------------------------------------------------------------------------- -# -# configure ssh setup -# -# -------------------------------------------------------------------------------- - -{ config, lib, pkgs, ... }: -let - ssh = { - privateKeyFile = ../../sshkey; - publicKeyFile = ../../sshkey.pub; - }; - target = file: "${toString ../../02-build/generated}/${file}"; -in -{ - # configure admin ssh keys - users.admins.palo.publicKey = lib.fileContents ssh.publicKeyFile; - - # configure provisioning private Key to be used when running provisioning on the machines - provisioner.privateKeyFile = toString ssh.privateKeyFile; - - resource.local_file = { - - # provide ssh key for the server - sshKey = { - content = lib.fileContents ssh.publicKeyFile; - filename = target "sshkey.pub"; - }; - - sshConfig = { - filename = target "ssh-configuration"; - content = with lib; - let - configPart = name: '' - Host ''${ hcloud_server.${name}.ipv4_address } - IdentityFile ${toString ssh.privateKeyFile} - ServerAliveInterval 60 - ServerAliveCountMax 3 - ''; - in - concatStringsSep "\n" - (map configPart (attrNames config.hcloud.server)); - }; - }; -} - diff --git a/terranix/tinc-test/01-terranix/shell.nix b/terranix/tinc-test/01-terranix/shell.nix deleted file mode 100644 index c1c8fcf..0000000 --- a/terranix/tinc-test/01-terranix/shell.nix +++ /dev/null @@ -1,37 +0,0 @@ -{ pkgs ? import { } }: - -let - - terranix = pkgs.callPackage - (pkgs.fetchgit { - url = "https://github.com/mrVanDalo/terranix.git"; - rev = "6097722f3a94972a92d810f3a707351cd425a4be"; - sha256 = "1d8w82mvgflmscvq133pz9ynr79cgd5qjggng85byk8axj6fg6jw"; - }) - { }; - - terraform = pkgs.writers.writeDashBin "terraform" '' - export TF_VAR_hcloud_api_token=`${pkgs.pass}/bin/pass development/hetzner.com/api-token` - ${pkgs.terraform_0_11}/bin/terraform "$@" - ''; - - create = pkgs.writers.writeDashBin "create" '' - ${terranix}/bin/terranix | ${pkgs.jq}/bin/jq '.' > ${ - toString ./. - }/config.tf.json \ - && ${terraform}/bin/terraform init \ - && ${terraform}/bin/terraform apply - ''; - - destroy = pkgs.writers.writeBashBin "destroy" '' - ${terraform}/bin/terraform destroy - rm ${toString ./.}/config.tf.json - rm ${toString ./.}/terraform.tfstate* - ''; - -in -pkgs.mkShell { - - buildInputs = with pkgs; [ terranix terraform create destroy ]; - -} diff --git a/terranix/tinc-test/02-build/assets/tinc/client/ed25519_key.priv b/terranix/tinc-test/02-build/assets/tinc/client/ed25519_key.priv deleted file mode 100644 index ea89506..0000000 --- a/terranix/tinc-test/02-build/assets/tinc/client/ed25519_key.priv +++ /dev/null @@ -1,4 +0,0 @@ ------BEGIN ED25519 PRIVATE KEY----- -gTFtvOMvD5KTUZeGNcTh5ngY/BktUd0OW/37jT8w+61eLP0ntMkaBB8yovTbJvXR -vReDUb/hjIi7nhGgy2EzP6An4QtXWvTHWJSDefglGVlcFqPDbhRkJ8CpWbCGoIYt ------END ED25519 PRIVATE KEY----- diff --git a/terranix/tinc-test/02-build/assets/tinc/client/host_file b/terranix/tinc-test/02-build/assets/tinc/client/host_file deleted file mode 100644 index eba689a..0000000 --- a/terranix/tinc-test/02-build/assets/tinc/client/host_file +++ /dev/null @@ -1,14 +0,0 @@ -Ed25519PublicKey = OwJOU7l170hVi0g3HYpRVJXh6zwWYEZCvQq1mgBKCWL ------BEGIN RSA PUBLIC KEY----- -MIICCgKCAgEAwNR4EbAffxezhbmTIoetrUPPpo66rR9kPJkLCl/fTJbVE1ryjXNQ -Cq0lefDURLT4L3Iw/XgBUIy1xpH8InolnYlL2DRadOvbA0nCUzoekwshcV1N6tCe -HsxrVP5XSxGJ6Es7L0zzvqXCoYP4tic+N4ztZBknn9RRMY497qHPxLoejqPZndmj -9VPciWtiZMhLPka/r0mS/Y7h2t3IQg3J2QCXjQoojTpGym9wPlBXcE2Hv5hYKM8X -359/arLKlAi91I2SH1o6+rBoGaMB50goEnDvWqdha95CR9K/I7+eJm8/AiJCxus0 -2KKCK7K5GvBPifEgMX4AVF8bqgTF9VZi0peG3dUEsg2L/6XqfH6IeFziWfuzuR9k -Ud0fzu235ssshMz/WHtTZiwTUc/xzs29PrF8ThieN/nt6tdBS3A0wdqeNfKjoD3k -zgqcc+ODUUR4gaq/46W0lU8aiP1w32YmKLnrBmFYjZXHqXNgYOZctoW/SjblvpCK -pYUxowFOXA8BU/eRiNZfa+b0ONe0XQOj8Q78st5XsCTlqHLkytdjwauZvM4jVuE9 -7lhvvr1ft/QO3RdBMXAXgDN0F2eDnzqdRE/rrvqNJCeheS9rmHE6Aa0e5yTcJMMK -qCkys4lQn4y9RnfH3MpzRtRnpSKid31WcmCI+JYHLe4ZhFWXju4fKPECAwEAAQ== ------END RSA PUBLIC KEY----- diff --git a/terranix/tinc-test/02-build/assets/tinc/client/rsa_key.priv b/terranix/tinc-test/02-build/assets/tinc/client/rsa_key.priv deleted file mode 100644 index 9267f93..0000000 --- a/terranix/tinc-test/02-build/assets/tinc/client/rsa_key.priv +++ /dev/null @@ -1,51 +0,0 @@ ------BEGIN RSA PRIVATE KEY----- -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 ------END RSA PRIVATE KEY----- diff --git a/terranix/tinc-test/02-build/assets/tinc/client_host_file b/terranix/tinc-test/02-build/assets/tinc/client_host_file deleted file mode 120000 index a10ede8..0000000 --- a/terranix/tinc-test/02-build/assets/tinc/client_host_file +++ /dev/null @@ -1 +0,0 @@ -client/host_file \ No newline at end of file diff --git a/terranix/tinc-test/02-build/assets/tinc/ed25519_key b/terranix/tinc-test/02-build/assets/tinc/ed25519_key deleted file mode 120000 index bf79954..0000000 --- a/terranix/tinc-test/02-build/assets/tinc/ed25519_key +++ /dev/null @@ -1 +0,0 @@ -server/ed25519_key \ No newline at end of file diff --git a/terranix/tinc-test/02-build/assets/tinc/rsa_key b/terranix/tinc-test/02-build/assets/tinc/rsa_key deleted file mode 120000 index 246733d..0000000 --- a/terranix/tinc-test/02-build/assets/tinc/rsa_key +++ /dev/null @@ -1 +0,0 @@ -server/rsa_key \ No newline at end of file diff --git a/terranix/tinc-test/02-build/assets/tinc/server/ed25519_key b/terranix/tinc-test/02-build/assets/tinc/server/ed25519_key deleted file mode 100644 index 07c16ef..0000000 --- a/terranix/tinc-test/02-build/assets/tinc/server/ed25519_key +++ /dev/null @@ -1,4 +0,0 @@ ------BEGIN ED25519 PRIVATE KEY----- -wNkj/HdU70l7X5XC5YVlWp3FBa8cBaDRy1LbJCjkh83CYYieSQ2IUWgHQ4Vhx253 -7bXVLSOnVIKMifAnBwSOSX7lTGI6gUP2aZCwa142WdxPDPiYv3sEMqK037VyfHVl ------END ED25519 PRIVATE KEY----- diff --git a/terranix/tinc-test/02-build/assets/tinc/server/host_file b/terranix/tinc-test/02-build/assets/tinc/server/host_file deleted file mode 100644 index 924e735..0000000 --- a/terranix/tinc-test/02-build/assets/tinc/server/host_file +++ /dev/null @@ -1,14 +0,0 @@ -Ed25519PublicKey = 1e5kBiOI1jtWmAsWNutVX8zwjI27NLBjqC99el83RVJ ------BEGIN RSA PUBLIC KEY----- -MIICCgKCAgEA1qFa0YFVefm3kVXGG5j26TF4JNJtBpZo1Jtd9XB6cErMG80vrdvb -RWNwCoY8SM21zN5ew9p7W/P8aClZShx7WRyIzPsTnc69N7zIosAIeXURgo8Ot2Yd -1us5RquPxc6NZ0JhDkz50EgQiJ4fRaCmaBb68hP36U8XdO7VTn93+l0YlmvbhAny -gB7iMOsXiDXxbzxOO+XC3ygaeO45ioEDduEv9Ny9KptXN08eOkxKL7dN4om2Nux0 -2EurWqTBYTrWki+XxovfvsmiM5AELHtTaUM8FwwEX0e7dV1cDYYqz3hWPmYgZ4Bj -dp258VDa/sbUCiRVQfcxzHqbvd3UCoNG76YsGJ6s7TqoxvCCvB4ziH+d6/Uu+h5h -DtjccwVQmW22A5DQHix4T/DmXs1GB5qzOa8eEd6cHTpqp/qzGmvC0un5BezY+CVR -ZphzFoYGF6Q3T7JwC6LCMCNBOqby+bhZNYmkztRzhXvFFrBmj6E17+8Z5fgLgl6u -+1QhxQTjg3uvjZXmQh2+jjTwa3vO1pZR6k9yyLMo9zPpr7i7QY4tqPR8u4j0fkHj -aXtOOj2wl0gDCnVX3mWeUKCJusCDdJ2hPpuz11pPQt67mxtUXO31aMM9J3mHjj0y -PKl7NGKA7ozI9e4HV09KiozM6yrLrvLyoRTn8AgwVoMiEw91CHhDNRkCAwEAAQ== ------END RSA PUBLIC KEY----- diff --git a/terranix/tinc-test/02-build/assets/tinc/server/rsa_key b/terranix/tinc-test/02-build/assets/tinc/server/rsa_key deleted file mode 100644 index 7319895..0000000 --- a/terranix/tinc-test/02-build/assets/tinc/server/rsa_key +++ /dev/null @@ -1,51 +0,0 @@ ------BEGIN RSA PRIVATE KEY----- -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 ------END RSA PRIVATE KEY----- diff --git a/terranix/tinc-test/02-build/assets/tinc/server_host_file b/terranix/tinc-test/02-build/assets/tinc/server_host_file deleted file mode 120000 index 539b85c..0000000 --- a/terranix/tinc-test/02-build/assets/tinc/server_host_file +++ /dev/null @@ -1 +0,0 @@ -server/host_file \ No newline at end of file diff --git a/terranix/tinc-test/02-build/configs/nixserver-server/configuration.nix b/terranix/tinc-test/02-build/configs/nixserver-server/configuration.nix deleted file mode 100644 index bcb1cda..0000000 --- a/terranix/tinc-test/02-build/configs/nixserver-server/configuration.nix +++ /dev/null @@ -1,19 +0,0 @@ -{ pkgs, lib, ... }: { - imports = [ ./hardware-configuration.nix ./tinc-server.nix ]; - - networking.hostName = "server"; - - # ssh - environment.systemPackages = with pkgs; [ htop git vim mosh tmux ]; - networking.firewall.allowedUDPPortRanges = [{ - from = 60000; - to = 60100; - }]; - services.sshd.enable = true; - users.users.root.openssh.authorizedKeys.keyFiles = - [ ]; - - # wireshark - programs.wireshark.enable = true; - -} diff --git a/terranix/tinc-test/02-build/configs/nixserver-server/hardware-configuration.nix b/terranix/tinc-test/02-build/configs/nixserver-server/hardware-configuration.nix deleted file mode 100644 index 5f34b82..0000000 --- a/terranix/tinc-test/02-build/configs/nixserver-server/hardware-configuration.nix +++ /dev/null @@ -1,8 +0,0 @@ -{ ... }: { - imports = [ ]; - boot.loader.grub.device = "/dev/sda"; - fileSystems."/" = { - device = "/dev/sda1"; - fsType = "ext4"; - }; -} diff --git a/terranix/tinc-test/02-build/configs/nixserver-server/tinc-server.nix b/terranix/tinc-test/02-build/configs/nixserver-server/tinc-server.nix deleted file mode 100644 index 4c5002f..0000000 --- a/terranix/tinc-test/02-build/configs/nixserver-server/tinc-server.nix +++ /dev/null @@ -1,11 +0,0 @@ -{ - imports = [ ./tinc.nix ]; - - module.cluster.services.tinc = { - "test" = { - debugLevel = 5; - enable = true; - openPort = true; - }; - }; -} diff --git a/terranix/tinc-test/02-build/configs/nixserver-server/tinc.nix b/terranix/tinc-test/02-build/configs/nixserver-server/tinc.nix deleted file mode 100644 index 77a7679..0000000 --- a/terranix/tinc-test/02-build/configs/nixserver-server/tinc.nix +++ /dev/null @@ -1,33 +0,0 @@ -# shared tinc file between client and server -{ config, pkgs, lib, ... }: -let nixosMachines = import ; -in { - - imports = [ ]; - - networking.firewall.trustedInterfaces = [ "tinc.private" ]; - - # nix-shell -p tinc_pre --run "tinc --config . generate-keys 4096" - module.cluster.services.tinc = { - "test" = { - networkSubnet = "10.123.142.0/24"; - extraConfig = '' - LocalDiscovery = yes - ''; - privateEd25519KeyFile = toString ; - privateRsaKeyFile = toString ; - hosts = { - server = { - tincIp = "10.123.142.1"; - realAddress = [ nixosMachines.nixserver-server.host.ipv4 ]; - publicKey = lib.fileContents ; - }; - sterni = { - tincIp = "10.123.142.100"; - publicKey = lib.fileContents ; - }; - }; - }; - }; -} - diff --git a/terranix/tinc-test/02-build/generated/.keep b/terranix/tinc-test/02-build/generated/.keep deleted file mode 100644 index e69de29..0000000 diff --git a/terranix/tinc-test/02-build/shell.nix b/terranix/tinc-test/02-build/shell.nix deleted file mode 100644 index c702b95..0000000 --- a/terranix/tinc-test/02-build/shell.nix +++ /dev/null @@ -1,76 +0,0 @@ -{ pkgs ? import { } }: - -with pkgs.lib; - -let - - ops = - let - opsImport = import ((import { }).fetchgit { - url = "https://github.com/mrVanDalo/plops.git"; - rev = "9fabba016a3553ae6e13d5d17d279c4de2eb00ad"; - sha256 = "193pajq1gcd9jyd12nii06q1sf49xdhbjbfqk3lcq83s0miqfs63"; - }); - overlay = self: super: { - # overwrite ssh to use the generated ssh configuration - openssh = super.writers.writeBashBin "ssh" '' - ${super.openssh}/bin/ssh -F ${ - toString ./generated/ssh-configuration - } "$@" - ''; - }; - in - opsImport { overlays = [ overlay ]; }; - - lib = ops.lib; - pkgs = ops.pkgs; - - source = { - - nixPkgs.nixpkgs.git = { - ref = "nixos-19.09"; - url = "https://github.com/NixOS/nixpkgs-channels"; - }; - - system = name: { - configs.file = toString ./configs; - test-assets.file = toString ./assets; - test-generated.file = toString ./generated; - nixos-config.symlink = "configs/${name}/configuration.nix"; - }; - - modules.cluster-module.git = { - url = "https://git.ingolf-wagner.de/nix-modules/cluster.git"; - ref = "1.2.0"; - }; - - }; - - servers = import ./generated/nixos-machines.nix; - - deployServer = name: - { user ? "root", host, ... }: - with ops; - jobs "deploy-${name}" "${user}@${host.ipv4}" [ - (populate (source.system name)) - (populate source.nixPkgs) - (populate source.modules) - switch - ]; - - moshServer = name: - { user ? "root", host, ... }: - pkgs.writers.writeDashBin "mosh-${name}" '' - ${pkgs.mosh}/bin/mosh \ - --ssh="${pkgs.openssh}/bin/ssh -F ${ - toString ./generated/ssh-configuration - }" \ - "${user}@${host.ipv4}" - ''; - -in -pkgs.mkShell { - buildInputs = lib.mapAttrsToList deployServer servers - ++ mapAttrsToList moshServer servers; - -} diff --git a/terranix/tinc-test/README.md b/terranix/tinc-test/README.md deleted file mode 100644 index 074f2fd..0000000 --- a/terranix/tinc-test/README.md +++ /dev/null @@ -1,73 +0,0 @@ -A setup to test tinc on a hetzner box - -# steps - -## OPTIONAL: generate fresh ssh keys - -```sh -ssh-keygen -P "" -f sshkey -``` - -## OPTIONAL: generate new tinc keys - -``` -nix-shell -p tinc_pre --run "tinc --config . generate-keys 4096" -cat *.pub host_file -rm *.pub -``` - -## generate machine - -```sh -cd ./01-terranix -nix-shell --run "create" -``` - -## provision machine - -```sh -cd ./02-build -nix-shell --run deploy-server -``` - -## tracking and collecting - -``` -dumpcap \ - -i ens3 \ - -w /root/hardware-device_working.dcap -dumpcap \ - -i tinc.test \ - -w /root/tinc-device_working.dcap -``` - -and for the not working experiment - -``` -dumpcap \ - -i ens3 \ - -w /root/hardware-device_not-working.dcap -dumpcap \ - -i tinc.test \ - -w /root/tinc-device_not-working.dcap -``` - -logs - -``` -systemctl --from "2020-01-04 15:00" --until "2020-01-04 16:00" -o json > working-logs.json -systemctl --from "2020-01-04 17:00" --until "2020-01-04 18:00" -o json > nog-working-logs.json -``` - -and setup - -``` -tar cvzf etc.tgz /etc/tinc -``` - -## cleanup - -```sh -cd ./01-terranix -nix-shell --run "clean" -``` diff --git a/terranix/tinc-test/sshkey b/terranix/tinc-test/sshkey deleted file mode 100755 index 245d3cf..0000000 --- a/terranix/tinc-test/sshkey +++ /dev/null @@ -1,27 +0,0 @@ ------BEGIN OPENSSH PRIVATE KEY----- -b3BlbnNzaC1rZXktdjEAAAAABG5vbmUAAAAEbm9uZQAAAAAAAAABAAABFwAAAAdzc2gtcn -NhAAAAAwEAAQAAAQEAqD70wK7MGSV6uBaP/IWxgr/eWm/LXsVu0rLOF8/VQdcPZgVw8eo6 -ZyDnfJpSvaYMknP9JlaiawMTpwrON8A5y8i2prQDhdO8Uz1pK+VXfZgY6hEOcs1UJmacsV -82oyaYAHg8gYUsRp8FOYQUCyZPrVlQMJN4F854sCugVr9Zfgc8B3Q+zoLX13jO+QLCTefI -BRkKwBDHK3lGrNYyJ6qSTV/gA6LruwglPlK5BQsyB7djoLRgi7eNmJRyFqH7SotY40TzZR -w3BF7ssW4DFfqCXw/OtuOKls7+uivQgfUkAKvhGVbFbGRdEzRKTmgMzUNVXILZ5CYoTjEJ -FGzrB6APwQAAA8A3cOj/N3Do/wAAAAdzc2gtcnNhAAABAQCoPvTArswZJXq4Fo/8hbGCv9 -5ab8texW7Sss4Xz9VB1w9mBXDx6jpnIOd8mlK9pgySc/0mVqJrAxOnCs43wDnLyLamtAOF -07xTPWkr5Vd9mBjqEQ5yzVQmZpyxXzajJpgAeDyBhSxGnwU5hBQLJk+tWVAwk3gXzniwK6 -BWv1l+BzwHdD7OgtfXeM75AsJN58gFGQrAEMcreUas1jInqpJNX+ADouu7CCU+UrkFCzIH -t2OgtGCLt42YlHIWoftKi1jjRPNlHDcEXuyxbgMV+oJfD86244qWzv66K9CB9SQAq+EZVs -VsZF0TNEpOaAzNQ1VcgtnkJihOMQkUbOsHoA/BAAAAAwEAAQAAAQBwNZTNEYeD2fBP6JRd -adkrB8ZHcLolWe4AzkoPrYhgogteEpDydzI+Z76b5tz6KU3HO16B/FPUpTetN9KzchvZ4u -KWqgaTcdTve0yyfwHr/M3ZBkkpnfHarqMg1Qy+oVXNMmPASk5uR06XvpQTn5iSV7fYvfHh -hs4NSPtl/7azCxFK6PnQSKoUz1FSSdV/JT1Iptw5pSASMv6qCPWK04tIpfV9kVnxJMDRuD -f8DZqxhruien6YjIKaP2UOvVIj2cog5siELmkRN56naPEXdEKs2heSnQ1NtjexmKkzEJM7 -vAbZJ1EBT2c4UbmLlCJ/M+3wgjTdDIzjUK7WHVRD1Mh1AAAAgBfcHhwEwStAZ2DUgrOFYE -kBUWZzBUmnFIK/HB0SX7CGk7V1I3PhpG8TF2PhC85dcC44i/wYdrEC/R+zA/iOf/94tO3l -T0pksYewfk+1uUPWxJtBLzDpYJk/RfskA+K5aLw1UI+4kGdtaoia/Y1qbHmwrBfNUYUZx6 -NDo7X5teQKAAAAgQDTBDReUialFX046Qq6CXinMpvprgwKNaWgdUfnZ6ihKye3IoLkVqYk -IkIJDcDzyPiekJc2Xwi2uFVo//2T02aeisYgkOmFYYNXM4eHQfsEQyt6SqtpvlsoZ6BF7z -sB4QQsYnuwxsO6vbQSKItlX5qrodbnldNqjqwU9Eiz6S+5XwAAAIEAzByjPznLIcsYAk/u -bZ8TyX2Iigd8WAmuauvhfHJ9o65AQM1D5kYytD8c3Zn64iZxPaZX1UK9T5gkSQETJz/Ix8 -EEulFiWyS1GtGImykJ1E32zM06xS+nMDKrbvQbAsUPDD0u52eMMLwex1GG8YWxcRKZyDL2 -jz63bvm/l1vcKt8AAAALcGFsb0BzdGVybmk= ------END OPENSSH PRIVATE KEY----- diff --git a/terranix/tinc-test/sshkey.pub b/terranix/tinc-test/sshkey.pub deleted file mode 100644 index dfd4b46..0000000 --- a/terranix/tinc-test/sshkey.pub +++ /dev/null @@ -1 +0,0 @@ -ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQCoPvTArswZJXq4Fo/8hbGCv95ab8texW7Sss4Xz9VB1w9mBXDx6jpnIOd8mlK9pgySc/0mVqJrAxOnCs43wDnLyLamtAOF07xTPWkr5Vd9mBjqEQ5yzVQmZpyxXzajJpgAeDyBhSxGnwU5hBQLJk+tWVAwk3gXzniwK6BWv1l+BzwHdD7OgtfXeM75AsJN58gFGQrAEMcreUas1jInqpJNX+ADouu7CCU+UrkFCzIHt2OgtGCLt42YlHIWoftKi1jjRPNlHDcEXuyxbgMV+oJfD86244qWzv66K9CB9SQAq+EZVsVsZF0TNEpOaAzNQ1VcgtnkJihOMQkUbOsHoA/B palo@sterni diff --git a/terranix/workadventure-jitsi-setup/.gitignore b/terranix/workadventure-jitsi-setup/.gitignore deleted file mode 100644 index 6073c1a..0000000 --- a/terranix/workadventure-jitsi-setup/.gitignore +++ /dev/null @@ -1,2 +0,0 @@ -plops/generated/ -sshkey* \ No newline at end of file diff --git a/terranix/workadventure-jitsi-setup/README.md b/terranix/workadventure-jitsi-setup/README.md deleted file mode 100644 index 9a50870..0000000 --- a/terranix/workadventure-jitsi-setup/README.md +++ /dev/null @@ -1,54 +0,0 @@ -# NixOS Server Example with plops - -This setup shows: - -- how to use a terranix module -- how to use 3rd party provision software after terraform. -- how to run terranix and terraform - -Setup containing opinionated modules to deploy -[NixOS servers](https://nixos.org/) -on -[hcloud](https://www.hetzner.com/cloud) -using -[nixos-infect](https://github.com/elitak/nixos-infect) -with my -[plops](https://github.com/mrVanDalo/plops) -provisioning tool for NixOS, -which is an overlay on -[krops](https://cgit.krebsco.de/krops/about/). - -After server creation, -the initial provisioning uploads the -nixos-infect -script and applys it. -After server creation and initialization -terranix/terraform generates -files used for the "real" provisioning -done by plops. - -Of course instead of plops you can use every provsioning tool you like -here (e.g. NixOps, Ansible, ... ) - -# How to Run - -## What you need - -- a setup [passwordstore](https://www.passwordstore.org/). -- a [hcloud token](https://docs.hetzner.cloud/#overview-getting-started) - stored under `development/hetzner.com/api-token` - -## Steps - -- `terraform-prepare`: to create ssh keys. -- `terraform-build`: to run terranix and terraform do create server. -- `terraform-destroy`: to delete server (don't forget that step, or else it gets costly) -- `terraform-cleanup`: to delete ssh keys and terraform data. - -## DNS - -define domains with your nameserver and update `jitsi.nix` and `workadventure.nix`. - -- `meet.${domain}` to given ip4 address -- `party.${domain}` to given ip4 address -- `*.party.${domain}` to given ip4 address diff --git a/terranix/workadventure-jitsi-setup/config.nix b/terranix/workadventure-jitsi-setup/config.nix deleted file mode 100644 index 6b9dbc0..0000000 --- a/terranix/workadventure-jitsi-setup/config.nix +++ /dev/null @@ -1,49 +0,0 @@ -{ config, lib, pkgs, ... }: -let - hcloud-modules = pkgs.fetchgit { - url = "https://github.com/mrVanDalo/terranix-hcloud.git"; - rev = "5fa359a482892cd973dcc6ecfc607f4709f24495"; - sha256 = "0smgmdiklj98y71fmcdjsqjq8l41i66hs8msc7k4m9dpkphqk86p"; - }; -in -{ - - imports = [ "${hcloud-modules}/default.nix" ]; - - # configure temporary admin ssh keys - users.admins.palo.publicKey = "${lib.fileContents ./sshkey.pub}"; - - # configure provisioning private Key to be used when running provisioning on the machines - provisioner.privateKeyFile = toString ./sshkey; - - hcloud.nixserver = { - host = { - enable = true; - serverType = "cx51"; # 35€/month - configurationFile = pkgs.writeText "configuration.nix" '' - { pkgs, lib, config, ... }: - { - environment.systemPackages = [ pkgs.git ]; - } - ''; - }; - }; - - hcloud.export.nix = toString ./plops/generated/nixos-machines.nix; - - resource.local_file.sshConfig = { - filename = "${toString ./plops/generated/ssh-configuration}"; - content = with lib; - let - configPart = name: '' - Host ''${ hcloud_server.nixserver-${name}.ipv4_address } - IdentityFile ${toString ./sshkey} - ServerAliveInterval 60 - ServerAliveCountMax 3 - ''; - in - concatStringsSep "\n" - (map configPart (attrNames config.hcloud.nixserver)); - }; - -} diff --git a/terranix/workadventure-jitsi-setup/plops/configs/nixserver-host/codimd.nix b/terranix/workadventure-jitsi-setup/plops/configs/nixserver-host/codimd.nix deleted file mode 100644 index 92cf135..0000000 --- a/terranix/workadventure-jitsi-setup/plops/configs/nixserver-host/codimd.nix +++ /dev/null @@ -1,29 +0,0 @@ -{ config, lib, pkgs, ... }: { - - services.nginx.enable = true; - services.nginx.virtualHosts.codimd = { - enableACME = true; - addSSL = true; - serverName = "codimd.${config.workadventure.domain}"; - locations."/".extraConfig = '' - client_max_body_size 4G; - proxy_set_header Host $host; - proxy_pass http://localhost:3091; - ''; - }; - - services.codimd = { - enable = true; - configuration = { - allowFreeURL = true; - db = { - dialect = "sqlite"; - storage = "/var/lib/codimd/db.codimd.sqlite"; - useCDN = false; - }; - port = 3091; - }; - }; - -} - diff --git a/terranix/workadventure-jitsi-setup/plops/configs/nixserver-host/configuration.nix b/terranix/workadventure-jitsi-setup/plops/configs/nixserver-host/configuration.nix deleted file mode 100644 index 88115b6..0000000 --- a/terranix/workadventure-jitsi-setup/plops/configs/nixserver-host/configuration.nix +++ /dev/null @@ -1,34 +0,0 @@ -{ config, pkgs, lib, ... }: { - imports = [ - ./options.nix - # codimd.${hostName} - ./codimd.nix - ./hardware-configuration.nix - # meet.${hostName} - ./jitsi.nix - # netdata.${hostName} - #./netdata.nix - ./ssh.nix - # party.${hostName} - # api.party.${hostName} - # push.party.${hostName} - # play.party.${hostName} - # upload.party.${hostName} - ./workadventure.nix - ]; - - environment.systemPackages = - [ pkgs.git pkgs.docker-compose pkgs.ag pkgs.htop ]; - - # party.${hostName} - # api.party.${hostName} - # push.party.${hostName} - # play.party.${hostName} - # upload.party.${hostName} - - networking.hostName = "host"; - workadventure.domain = "palovandalo.com"; - security.acme.email = "contact@ingolf-wagner.de"; - security.acme.acceptTerms = true; - -} diff --git a/terranix/workadventure-jitsi-setup/plops/configs/nixserver-host/hardware-configuration.nix b/terranix/workadventure-jitsi-setup/plops/configs/nixserver-host/hardware-configuration.nix deleted file mode 100644 index ae82a10..0000000 --- a/terranix/workadventure-jitsi-setup/plops/configs/nixserver-host/hardware-configuration.nix +++ /dev/null @@ -1,10 +0,0 @@ -{ ... }: { - imports = [ ]; - boot.initrd.availableKernelModules = - [ "ata_piix" "uhci_hcd" "virtio_pci" "sd_mod" "sr_mod" ]; - boot.loader.grub.device = "/dev/sda"; - fileSystems."/" = { - device = "/dev/sda1"; - fsType = "ext4"; - }; -} diff --git a/terranix/workadventure-jitsi-setup/plops/configs/nixserver-host/jitsi.nix b/terranix/workadventure-jitsi-setup/plops/configs/nixserver-host/jitsi.nix deleted file mode 100644 index 89849e4..0000000 --- a/terranix/workadventure-jitsi-setup/plops/configs/nixserver-host/jitsi.nix +++ /dev/null @@ -1,60 +0,0 @@ -{ config, ... }: { - # + + - # | | - # | | - # v v - # 80, 443 TCP 443 TCP, 10000 UDP - # +--------------+ +---------------------+ - # | nginx | 5222, 5347 TCP | | - # | jitsi-meet |<-------------------+| jitsi-videobridge | - # | prosody | | | | - # | jicofo | | +---------------------+ - # +--------------+ | - # | +---------------------+ - # | | | - # +----------+| jitsi-videobridge | - # | | | - # | +---------------------+ - # | - # | +---------------------+ - # | | | - # +----------+| jitsi-videobridge | - # | | - # +---------------------+ - - # This is a one server setup - services.jitsi-meet = { - enable = true; - hostName = "meet.${config.workadventure.domain}"; - - # JItsi COnference FOcus is a server side focus component used in Jitsi Meet conferences. - # https://github.com/jitsi/jicofo - jicofo.enable = true; - - # Whether to enable nginx virtual host that will serve the javascript application and act as a proxy for the XMPP server. - # Further nginx configuration can be done by adapting services.nginx.virtualHosts.. When this is enabled, ACME - # will be used to retrieve a TLS certificate by default. To disable this, set the - # services.nginx.virtualHosts..enableACME to false and if appropriate do the same for - # services.nginx.virtualHosts..forceSSL. - nginx.enable = true; - - # https://github.com/jitsi/jitsi-meet/blob/master/config.js - config = { - enableWelcomePage = false; - defaultLang = "en"; - }; - - # https://github.com/jitsi/jitsi-meet/blob/master/interface_config.js - interfaceConfig = { - SHOW_JITSI_WATERMARK = false; - SHOW_WATERMARK_FOR_GUESTS = false; - }; - - }; - - networking.firewall = { - allowedTCPPorts = [ 80 443 ]; - allowedUDPPorts = [ 10000 ]; - }; - -} diff --git a/terranix/workadventure-jitsi-setup/plops/configs/nixserver-host/netdata.nix b/terranix/workadventure-jitsi-setup/plops/configs/nixserver-host/netdata.nix deleted file mode 100644 index 667b550..0000000 --- a/terranix/workadventure-jitsi-setup/plops/configs/nixserver-host/netdata.nix +++ /dev/null @@ -1,26 +0,0 @@ -{ config, ... }: { - services.netdata = { - enable = true; - config = { - #"exporting:global" = { "enabled" = "yes"; }; - global = { - "memory mode" = "dbengine"; - "dbengine disk space" = 1024 * 10; # in MB - "debug log" = "none"; - "access log" = "none"; - "error log" = "syslog"; - }; - }; - }; - - services.nginx.enable = true; - services.nginx.virtualHosts."netdata.${config.workadventure.domain}" = { - enableACME = true; - forceSSL = true; - basicAuth.admin = "NYsXfBKRwkkS60WIeZONtFTv3nz4tPy52uqLkzJzuc"; - locations."/" = { - proxyPass = "http://localhost:19999"; - proxyWebsockets = true; - }; - }; -} diff --git a/terranix/workadventure-jitsi-setup/plops/configs/nixserver-host/options.nix b/terranix/workadventure-jitsi-setup/plops/configs/nixserver-host/options.nix deleted file mode 100644 index c246b82..0000000 --- a/terranix/workadventure-jitsi-setup/plops/configs/nixserver-host/options.nix +++ /dev/null @@ -1,15 +0,0 @@ -{ config, lib, pkgs, ... }: -with lib; -let cfg = config.workadventure; -in { - - options.workadventure = { - domain = mkOption { - type = with types; str; - description = '' - domain of the server - ''; - }; - }; - -} diff --git a/terranix/workadventure-jitsi-setup/plops/configs/nixserver-host/ssh.nix b/terranix/workadventure-jitsi-setup/plops/configs/nixserver-host/ssh.nix deleted file mode 100644 index c794884..0000000 --- a/terranix/workadventure-jitsi-setup/plops/configs/nixserver-host/ssh.nix +++ /dev/null @@ -1,14 +0,0 @@ -{ - # ssh configuration - # ----------------- - services.sshd.enable = true; - services.openssh.passwordAuthentication = false; - services.openssh.banner = '' - [ JITSI Server ] - ''; - - # the public ssh key used at deployment - users.users.root.openssh.authorizedKeys.keys = [ - "ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAACAQC6uza62+Go9sBFs3XZE2OkugBv9PJ7Yv8ebCskE5WYPcahMZIKkQw+zkGI8EGzOPJhQEv2xk+XBf2VOzj0Fto4nh8X5+Llb1nM+YxQPk1SVlwbNAlhh24L1w2vKtBtMy277MF4EP+caGceYP6gki5+DzlPUSdFSAEFFWgN1WPkiyUii15Xi3QuCMR8F18dbwVUYbT11vwNhdiAXWphrQG+yPguALBGR+21JM6fffOln3BhoDUp2poVc5Qe2EBuUbRUV3/fOU4HwWVKZ7KCFvLZBSVFutXCj5HuNWJ5T3RuuxJSmY5lYuFZx9gD+n+DAEJt30iXWcaJlmUqQB5awcB1S2d9pJ141V4vjiCMKUJHIdspFrI23rFNYD9k2ZXDA8VOnQE33BzmgF9xOVh6qr4G0oEpsNqJoKybVTUeSyl4+ifzdQANouvySgLJV/pcqaxX1srSDIUlcM2vDMWAs3ryCa0aAlmAVZIHgRhh6wa+IXW8gIYt+5biPWUuihJ4zGBEwkyVXXf2xsecMWCAGPWPDL0/fBfY9krNfC5M2sqxey2ShFIq+R/wMdaI7yVjUCF2QIUNiIdFbJL6bDrDyHnEXJJN+rAo23jUoTZZRv7Jq3DB/A5H7a73VCcblZyUmwMSlpg3wos7pdw5Ctta3zQPoxoAKGS1uZ+yTeZbPMmdbw==" - ]; -} diff --git a/terranix/workadventure-jitsi-setup/plops/configs/nixserver-host/workadventure.nix b/terranix/workadventure-jitsi-setup/plops/configs/nixserver-host/workadventure.nix deleted file mode 100644 index af1c6af..0000000 --- a/terranix/workadventure-jitsi-setup/plops/configs/nixserver-host/workadventure.nix +++ /dev/null @@ -1,167 +0,0 @@ -{ config, pkgs, lib, ... }: -let - # If your Jitsi environment has authentication set up, - # you MUST set JITSI_PRIVATE_MODE to "true" and - # you MUST pass a SECRET_JITSI_KEY to generate the JWT secret - jitsiPrivateMode = "false"; - - secretJitsiKey = ""; - - jitsiISS = ""; - - workadventureSecretKey = ""; - - jitsiURL = "meet.${config.workadventure.domain}"; - - domain = "party.${config.workadventure.domain}"; - # domain will redirect to this map. (not play.${domain}) - defaultMap = "mrvandalo.github.io/workadventure-worlds/main.json"; - - apiURL = "api.${domain}"; - apiPort = 9002; - - frontURL = "play.${domain}"; - frontPort = 9004; - - pusherURL = "push.${domain}"; - pusherPort = 9005; - - uploaderURL = "upload.${domain}"; - uploaderPort = 9006; - - version = "v1.1.0"; - frontImage = "thecodingmachine/workadventure-front:${version}"; - pusherImage = "thecodingmachine/workadventure-pusher:${version}"; - apiImage = "thecodingmachine/workadventure-back:${version}"; - uploaderImage = "thecodingmachine/workadventure-uploader:${version}"; - -in -{ - - virtualisation.docker.enable = true; - boot.kernel.sysctl."net.ipv4.ip_forward" = true; - - networking.firewall = { - allowedTCPPorts = [ 80 443 ]; - allowedUDPPorts = [ 80 443 ]; - }; - - services.nginx.enable = true; - services.nginx.recommendedProxySettings = true; - - systemd.services.workadventure-network = { - enable = true; - wantedBy = [ "multi-user.target" ]; - script = '' - ${pkgs.docker}/bin/docker network create --driver bridge workadventure ||: - ''; - after = [ "docker" ]; - before = [ - "docker-workadventure-back.service" - "docker-workadventure-pusher.service" - "docker-workadventure-uploader.service" - "docker-workadventure-website.service" - ]; - }; - - virtualisation.oci-containers.backend = "docker"; - - services.nginx.virtualHosts."${domain}" = { - enableACME = true; - forceSSL = true; - locations."/" = { - return = "302 $scheme://play.${domain}/_/global/${defaultMap}"; - }; - }; - - virtualisation.oci-containers.containers.workadventure-front = { - image = frontImage; - environment = { - API_URL = pusherURL; - JITSI_PRIVATE_MODE = jitsiPrivateMode; - JITSI_URL = jitsiURL; - SECRET_JITSI_KEY = secretJitsiKey; - UPLOADER_URL = uploaderURL; - }; - ports = [ "127.0.0.1:${toString frontPort}:80" ]; - extraOptions = [ "--network=workadventure" ]; - }; - services.nginx.virtualHosts."${frontURL}" = { - enableACME = true; - forceSSL = true; - locations."/" = { proxyPass = "http://127.0.0.1:${toString frontPort}"; }; - }; - - virtualisation.oci-containers.containers.workadventure-pusher = { - image = pusherImage; - environment = { - API_URL = "workadventure-back:50051"; - JITSI_ISS = jitsiISS; - JITSI_URL = jitsiURL; - SECRET_KEY = workadventureSecretKey; - }; - ports = [ "127.0.0.1:${toString pusherPort}:8080" ]; - extraOptions = [ "--network=workadventure" ]; - }; - services.nginx.virtualHosts."${pusherURL}" = { - enableACME = true; - forceSSL = true; - locations."/" = { - proxyPass = "http://127.0.0.1:${toString pusherPort}"; - proxyWebsockets = true; - }; - locations."/room" = { - proxyPass = "http://127.0.0.1:${toString pusherPort}"; - proxyWebsockets = true; - }; - }; - - virtualisation.oci-containers.containers.workadventure-back = { - image = apiImage; - environment = { - #DEBUG = "*"; - JITSI_ISS = jitsiISS; - JITSI_URL = jitsiURL; - SECRET_KEY = workadventureSecretKey; - }; - ports = [ "127.0.0.1:${toString apiPort}:8080" "50051" ]; - extraOptions = [ "--network=workadventure" ]; - }; - services.nginx.virtualHosts."${apiURL}" = { - enableACME = true; - forceSSL = true; - locations."/" = { proxyPass = "http://127.0.0.1:${toString apiPort}"; }; - }; - - virtualisation.oci-containers.containers.workadventure-uploader = { - image = uploaderImage; - ports = [ "127.0.0.1:${toString uploaderPort}:8080" ]; - extraOptions = [ "--network=workadventure" ]; - }; - services.nginx.virtualHosts."${uploaderURL}" = { - enableACME = true; - forceSSL = true; - locations."/" = { - proxyPass = "http://127.0.0.1:${toString uploaderPort}"; - proxyWebsockets = true; - }; - }; - - systemd.services.docker-workadventure-front.serviceConfig = { - StandardOutput = lib.mkForce "journal"; - StandardError = lib.mkForce "journal"; - }; - systemd.services.docker-workadventure-uploader.serviceConfig = { - StandardOutput = lib.mkForce "journal"; - StandardError = lib.mkForce "journal"; - }; - systemd.services.docker-workadventure-pusher.serviceConfig = { - StandardOutput = lib.mkForce "journal"; - StandardError = lib.mkForce "journal"; - }; - systemd.services.docker-workadventure-back.serviceConfig = { - StandardOutput = lib.mkForce "journal"; - StandardError = lib.mkForce "journal"; - }; - -} diff --git a/terranix/workadventure-jitsi-setup/plops/shell.nix b/terranix/workadventure-jitsi-setup/plops/shell.nix deleted file mode 100644 index 16e7de6..0000000 --- a/terranix/workadventure-jitsi-setup/plops/shell.nix +++ /dev/null @@ -1,74 +0,0 @@ -let - - # import plops with pkgs and lib - opsImport = import ((import { }).fetchgit { - url = "https://github.com/mrVanDalo/plops.git"; - rev = "9fabba016a3553ae6e13d5d17d279c4de2eb00ad"; - sha256 = "193pajq1gcd9jyd12nii06q1sf49xdhbjbfqk3lcq83s0miqfs63"; - }); - - ops = - let - overlay = self: super: { - # overwrite ssh to use the generated ssh configuration - openssh = super.writeShellScriptBin "ssh" '' - ${super.openssh}/bin/ssh -F ${ - toString ./generated/ssh-configuration - } "$@" - ''; - }; - in - opsImport { overlays = [ overlay ]; }; - - lib = ops.lib; - pkgs = ops.pkgs; - - # define all sources - source = { - - # nixpkgs (no need for channels anymore) - nixPkgs.nixpkgs.git = { - ref = "nixos-20.09"; - url = "https://github.com/NixOS/nixpkgs"; - }; - - # system configurations - system = name: { - configs.file = toString ./configs; - nixos-config.symlink = "configs/${name}/configuration.nix"; - }; - - # secrets which are hold and stored by pass - secrets = name: { - secrets.pass = { - dir = toString ./secrets; - name = name; - }; - }; - }; - - servers = import ./generated/nixos-machines.nix; - - deployServer = name: - { user ? "root", host, ... }: - with ops; - jobs "deploy-${name}" "${user}@${host.ipv4}" [ - # deploy secrets to /run/plops-secrets/secrets - # (populateTmpfs (source.secrets name)) - # deploy system to /var/src/system - (populate (source.system name)) - # deploy nixpkgs to /var/src/nixpkgs - (populate source.nixPkgs) - switch - ]; - -in -pkgs.mkShell { - - buildInputs = lib.mapAttrsToList deployServer servers; - - shellHook = '' - export PASSWORD_STORE_DIR=./secrets - ''; - -} diff --git a/terranix/workadventure-jitsi-setup/shell.nix b/terranix/workadventure-jitsi-setup/shell.nix deleted file mode 100644 index 6648cc3..0000000 --- a/terranix/workadventure-jitsi-setup/shell.nix +++ /dev/null @@ -1,50 +0,0 @@ -{ pkgs ? import { } }: -let - - terranix = pkgs.callPackage - (pkgs.fetchgit { - url = "https://github.com/mrVanDalo/terranix.git"; - rev = "2.3.0"; - sha256 = "030067h3gjc02llaa7rx5iml0ikvw6szadm0nrss2sqzshsfimm4"; - }) - { }; - - terraform = pkgs.writers.writeBashBin "terraform" '' - export TF_VAR_hcloud_api_token=`${pkgs.pass}/bin/pass development/hetzner.com/api-token` - ${pkgs.terraform_0_12}/bin/terraform "$@" - ''; - -in -pkgs.mkShell { - - buildInputs = [ - - terranix - terraform - - (pkgs.writers.writeBashBin "terraform-prepare" '' - ${pkgs.openssh}/bin/ssh-keygen -P "" -f ${toString ./.}/sshkey - '') - - (pkgs.writers.writeBashBin "terraform-build" '' - set -e - set -o pipefail - ${terranix}/bin/terranix | ${pkgs.jq}/bin/jq '.' > config.tf.json - ${terraform}/bin/terraform init - ${terraform}/bin/terraform apply - '') - - (pkgs.writers.writeBashBin "terraform-destroy" '' - ${terraform}/bin/terraform destroy - rm ${toString ./.}/config.tf.json - '') - - (pkgs.writers.writeBashBin "terraform-cleanup" '' - rm ${toString ./.}/sshkey - rm ${toString ./.}/sshkey.pub - rm ${toString ./.}/terraform.tfstate* - '') - - ]; -} -