diff --git a/.icons/airflow.svg b/.icons/airflow.svg new file mode 100644 index 0000000..46300fe --- /dev/null +++ b/.icons/airflow.svg @@ -0,0 +1,19 @@ + + + + + + + + + + + + + + + + + + + diff --git a/.images/airflow.png b/.images/airflow.png new file mode 100644 index 0000000..bdd5798 Binary files /dev/null and b/.images/airflow.png differ diff --git a/apache-airflow/README.md b/apache-airflow/README.md new file mode 100644 index 0000000..ae8a278 --- /dev/null +++ b/apache-airflow/README.md @@ -0,0 +1,69 @@ +--- +display_name: airflow +description: A module that adds Apache Airflow in your Coder template +icon: ../.icons/airflow.svg +maintainer_github: nataindata +verified: false +tags: [airflow, idea, web, helper] +--- + +# airflow + +A module that adds Apache Airflow in your Coder template. + +```tf +module "airflow" { + source = "registry.coder.com/modules/airflow/coder" + version = "1.0.2" +} +``` + +![Airflow](../.images/airflow.png) + +## Examples + +### Example 1 + +Install the Dracula theme from [OpenVSX](https://open-vsx.org/): + +```tf +module "airflow" { + source = "registry.coder.com/modules/airflow/coder" + version = "1.0.2" + agent_id = coder_agent.example.id + extensions = [ + "dracula-theme.theme-dracula" + ] +} +``` + +Enter the `.` into the extensions array and code-server will automatically install on start. + +### Example 2 + +Configure VS Code's [settings.json](https://code.visualstudio.com/docs/getstarted/settings#_settingsjson) file: + +```tf +module "airflow" { + source = "registry.coder.com/modules/airflow/coder" + version = "1.0.2" + agent_id = coder_agent.example.id + extensions = ["dracula-theme.theme-dracula"] + settings = { + "workbench.colorTheme" = "Dracula" + } +} +``` + +### Example 3 + +Run code-server in the background, don't fetch it from GitHub: + +```tf +module "airflow" { + source = "registry.coder.com/modules/airflow/coder" + version = "1.0.2" + agent_id = coder_agent.example.id + offline = true +} +``` diff --git a/apache-airflow/main.tf b/apache-airflow/main.tf new file mode 100644 index 0000000..91b6682 --- /dev/null +++ b/apache-airflow/main.tf @@ -0,0 +1,65 @@ +terraform { + required_version = ">= 1.0" + + required_providers { + coder = { + source = "coder/coder" + version = ">= 0.17" + } + } +} + +# Add required variables for your modules and remove any unneeded variables +variable "agent_id" { + type = string + description = "The ID of a Coder agent." +} + +variable "log_path" { + type = string + description = "The path to log airflow to." + default = "/tmp/airflow.log" +} + +variable "port" { + type = number + description = "The port to run airflow on." + default = 8080 +} + +variable "share" { + type = string + default = "owner" + validation { + condition = var.share == "owner" || var.share == "authenticated" || var.share == "public" + error_message = "Incorrect value. Please set either 'owner', 'authenticated', or 'public'." + } +} + +variable "order" { + type = number + description = "The order determines the position of app in the UI presentation. The lowest order is shown first and apps with equal order are sorted by name (ascending order)." + default = null +} + +resource "coder_script" "airflow" { + agent_id = var.agent_id + display_name = "airflow" + icon = "/icon/apache-guacamole.svg" + script = templatefile("${path.module}/run.sh", { + LOG_PATH : var.log_path, + PORT : var.port + }) + run_on_start = true +} + +resource "coder_app" "airflow" { + agent_id = var.agent_id + slug = "airflow" + display_name = "airflow" + url = "http://localhost:${var.port}" + icon = "/icon/apache-guacamole.svg" + subdomain = true + share = var.share + order = var.order +} diff --git a/apache-airflow/run.sh b/apache-airflow/run.sh new file mode 100644 index 0000000..d881260 --- /dev/null +++ b/apache-airflow/run.sh @@ -0,0 +1,19 @@ +#!/usr/bin/env sh + +BOLD='\033[0;1m' + +PATH=$PATH:~/.local/bin +pip install --upgrade apache-airflow + +filename=~/airflow/airflow.db +if ! [ -f $filename ] || ! [ -s $filename ]; then + airflow db init +fi + +export AIRFLOW__CORE__LOAD_EXAMPLES=false + +airflow webserver > ${LOG_PATH} 2>&1 & + +airflow scheduler >> /tmp/airflow_scheduler.log 2>&1 & + +airflow users create -u admin -p admin -r Admin -e admin@admin.com -f Coder -l User