气流用户创建

Airflow user creation

我正在使用 Airflow 版本 1.8.2 并按预期设置了几个 Dags.Everything 运行。我为气流网络服务器 access.But 创建了管理员用户供其他团队监控他们的工作我们不能提供这个管理员用户所以我试图从 UI '/admin/user/' 创建一个不同的用户。 但只有以下字段可用。没有提供角色或密码等的选项。

有没有人遇到同样的问题或者我做错了什么。如何创建基于角色的用户以便我可以为这些团队标记一些特定的 dags

谢谢

Airflow 中的用户模型目前非常简单,并且(至少从 1.9.0 开始)无法通过 UI 设置密码。

我使用的方法是以下 python 脚本:

#!/usr/bin/env python

import argparse
import getpass
import sys


def create_user(opts):
    from airflow.contrib.auth.backends.password_auth import PasswordUser
    from airflow import models, settings

    u = PasswordUser(models.User())
    u.username = opts['username']
    u.email = opts['email']
    u.password = opts['password']

    s = settings.Session()
    s.add(u)
    s.commit()
    s.close()

if __name__ == "__main__":
    parser = argparse.ArgumentParser()
    parser.add_argument('email')
    parser.add_argument('username', nargs='?', help="Defaults to local part of email")
    args = parser.parse_args()

    if not args.username:
        # Default username is the local part of the email address
        args.username = args.email[:args.email.index('@')]

    args.password = getpass.getpass(prompt="Enter new user password: ")
    confirm = getpass.getpass(prompt="Confirm:  ")

    if args.password != confirm:
        sys.stderr.write("Passwords don't match\n")
        sys.exit(1)
    create_user(vars(args))

此版本不支持更改密码,因为我们还不需要它

从 Airflow 1.10 开始,有一个 airflow create_user CLI:https://airflow.apache.org/cli.html#create_user

它支持角色和密码:

airflow create_user [-h] [-r ROLE] [-u USERNAME] [-e EMAIL] [-f FIRSTNAME]
                    [-l LASTNAME] [-p PASSWORD] [--use_random_password]

更新:从 Airflow 2 开始,这已被纳入 airflow users createhttps://airflow.apache.org/docs/apache-airflow/stable/cli-and-env-variables-ref.html#create_repeat1

airflow users create [-h] -e EMAIL -f FIRSTNAME -l LASTNAME [-p PASSWORD] -r
                     ROLE [--use-random-password] -u USERNAME

如果有人正在寻找一种易于理解的方式,那么这就是事情。

激活您的气流 python 环境并启动 python shell。 然后借助这些命令,您可以轻松地在 airflow 中设置新用户。

>>> import airflow
>>> from airflow import models, settings
>>> from airflow.contrib.auth.backends.password_auth import PasswordUser
>>> user = PasswordUser(models.User())
>>> user.username = 'new_user_name'
>>> user.email = 'new_user_email@example.com'
>>> user.password = 'set_the_password'
>>> session = settings.Session()
>>> session.add(user)
>>> session.commit()
>>> session.close()
>>> exit()

如果您想创建管理员用户,只需添加 user.superuser = True 即可。