From 8a1357854d21246059d79258b0752834f965ee25 Mon Sep 17 00:00:00 2001 From: Aguirre Matteo Date: Fri, 26 Sep 2025 11:46:51 -0300 Subject: [PATCH] airlift: add module --- modules/programs/airlift.nix | 53 +++++++++++++++++++++ tests/modules/programs/airlift/config.yaml | 11 +++++ tests/modules/programs/airlift/default.nix | 1 + tests/modules/programs/airlift/settings.nix | 25 ++++++++++ 4 files changed, 90 insertions(+) create mode 100644 modules/programs/airlift.nix create mode 100644 tests/modules/programs/airlift/config.yaml create mode 100644 tests/modules/programs/airlift/default.nix create mode 100644 tests/modules/programs/airlift/settings.nix diff --git a/modules/programs/airlift.nix b/modules/programs/airlift.nix new file mode 100644 index 000000000..1f46566d1 --- /dev/null +++ b/modules/programs/airlift.nix @@ -0,0 +1,53 @@ +{ + lib, + pkgs, + config, + ... +}: +let + inherit (lib) + mkIf + mkEnableOption + mkPackageOption + mkOption + ; + + cfg = config.programs.airlift; + yamlFormat = pkgs.formats.yaml { }; +in +{ + meta.maintainers = with lib.hm.maintainers; [ aguirre-matteo ]; + options.programs.airlift = { + enable = mkEnableOption "airlift"; + package = mkPackageOption pkgs "airlift" { nullable = true; }; + settings = mkOption { + inherit (yamlFormat) type; + default = { }; + example = { + dag_path = "/path/to/dags"; + plugin_path = "/path/to/plugins"; + requirements_file = "/path/to/requirements.txt"; + helm_values_file = "/path/to/values.yaml"; + extra_volume_mounts = [ + "hostPath=/my/cool/path,containerPath=/my/mounted/path,name=a_unique_name" + ]; + cluster_config_file = "/path/to/cluster/config.yaml"; + image = "apache/airflow:2.6.0"; + helm_chart_version = "1.0.0"; + port = 8080; + post_start_dag_id = "example_dag_id"; + }; + description = '' + Configuration settings for airlift. All the available options can be found here: + . + ''; + }; + }; + + config = mkIf cfg.enable { + home.packages = mkIf (cfg.package != null) [ cfg.package ]; + home.file.".config/airlift/config.yaml" = mkIf (cfg.settings != { }) { + source = yamlFormat.generate "airlift-config.yaml" cfg.settings; + }; + }; +} diff --git a/tests/modules/programs/airlift/config.yaml b/tests/modules/programs/airlift/config.yaml new file mode 100644 index 000000000..d3ad99e20 --- /dev/null +++ b/tests/modules/programs/airlift/config.yaml @@ -0,0 +1,11 @@ +cluster_config_file: /path/to/cluster/config.yaml +dag_path: /path/to/dags +extra_volume_mounts: +- hostPath=/my/cool/path,containerPath=/my/mounted/path,name=a_unique_name +helm_chart_version: 1.0.0 +helm_values_file: /path/to/values.yaml +image: apache/airflow:2.6.0 +plugin_path: /path/to/plugins +port: 8080 +post_start_dag_id: example_dag_id +requirements_file: /path/to/requirements.txt diff --git a/tests/modules/programs/airlift/default.nix b/tests/modules/programs/airlift/default.nix new file mode 100644 index 000000000..10428c29a --- /dev/null +++ b/tests/modules/programs/airlift/default.nix @@ -0,0 +1 @@ +{ airlift-settings = ./settings.nix; } diff --git a/tests/modules/programs/airlift/settings.nix b/tests/modules/programs/airlift/settings.nix new file mode 100644 index 000000000..a6a09d58a --- /dev/null +++ b/tests/modules/programs/airlift/settings.nix @@ -0,0 +1,25 @@ +{ + programs.airlift = { + enable = true; + settings = { + dag_path = "/path/to/dags"; + plugin_path = "/path/to/plugins"; + requirements_file = "/path/to/requirements.txt"; + helm_values_file = "/path/to/values.yaml"; + extra_volume_mounts = [ + "hostPath=/my/cool/path,containerPath=/my/mounted/path,name=a_unique_name" + ]; + cluster_config_file = "/path/to/cluster/config.yaml"; + image = "apache/airflow:2.6.0"; + helm_chart_version = "1.0.0"; + port = 8080; + post_start_dag_id = "example_dag_id"; + }; + }; + + nmt.script = '' + assertFileExists home-files/.config/airlift/config.yaml + assertFileContent home-files/.config/airlift/config.yaml \ + ${./config.yaml} + ''; +}