气流用户创建

时间:2018-01-03 06:51:07

标签: python authentication airflow

我正在使用Airflow版本1.8.2并设置了几个Dags.Everything正在按预期运行。我已经为气流Web服务器访问创建了管理员用户。但是对于其他团队来监控他们的工作我们无法提供此管理员用户所以我尝试从UI'/ admin / user /'创建一个不同的用户。 但只有以下字段可用。没有提供角色或密码的选项等。 enter image description here

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

由于

3 个答案:

答案 0 :(得分:6)

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))

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

答案 1 :(得分:4)

从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]

答案 2 :(得分:1)

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

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

>>> 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()