|
|
import os |
|
|
import sys |
|
|
import subprocess |
|
|
import time |
|
|
|
|
|
PROJECT_PATH = os.getcwd() |
|
|
AIRFLOW_HOME = os.path.join(PROJECT_PATH, "airflow") |
|
|
LOG_DIR = os.path.join(AIRFLOW_HOME, "logs") |
|
|
|
|
|
def run(cmd, cwd=None): |
|
|
p = subprocess.Popen( |
|
|
cmd, shell=True, |
|
|
|
|
|
stdout=subprocess.PIPE, stderr=subprocess.PIPE, |
|
|
universal_newlines=True |
|
|
) |
|
|
stdout, stderr = p.communicate() |
|
|
if p.returncode != 0: |
|
|
raise subprocess.CalledProcessError(p.returncode, cmd, output=stderr) |
|
|
return stdout |
|
|
|
|
|
os.environ["AIRFLOW_HOME"] = AIRFLOW_HOME |
|
|
os.makedirs(AIRFLOW_HOME, exist_ok=True) |
|
|
os.makedirs(LOG_DIR, exist_ok=True) |
|
|
|
|
|
|
|
|
python_version = ".".join(str(el) for el in list(sys.version_info[:2])) |
|
|
|
|
|
run( |
|
|
'pip install "apache-airflow[async,celery,postgres,cncf.kubernetes]" ' |
|
|
f'--constraint "https://raw.githubusercontent.com/apache/airflow/constraints-2.10.3/constraints-{python_version}.txt"' |
|
|
) |
|
|
|
|
|
run("airflow db init") |
|
|
run( |
|
|
"airflow users create --username admin --firstname Admin --lastname User " |
|
|
"--role Admin --email admin@example.com --password admin", |
|
|
) |
|
|
run("airflow users list") |
|
|
|
|
|
|
|
|
subprocess.Popen( |
|
|
f"nohup airflow scheduler > {os.path.join(LOG_DIR, 'scheduler.log')} 2>&1 &", |
|
|
shell=True, |
|
|
) |
|
|
|
|
|
time.sleep(2) |
|
|
|
|
|
|
|
|
subprocess.Popen( |
|
|
f"airflow webserver --port 8081 > {os.path.join(LOG_DIR, 'webserver.log')} 2>&1 &", |
|
|
shell=True, |
|
|
) |
|
|
|
|
|
time.sleep(10) |
|
|
|
|
|
print(f"Setup at {AIRFLOW_HOME}, Login: admin/admin at http://localhost:8081") |
|
|
|