气流用户创建

Ano*_*p R 5 python authentication airflow

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

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

谢谢

Mic*_*ith 8

从Airflow 1.10开始,有一个airflow create_userCLI: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]
Run Code Online (Sandbox Code Playgroud)

  • 请注意,`airflow create_user`(即将成为`airflow users --create` 或类似的)仅适用于基于 RBAC 的 UI,在 1.10 中默认情况下未启用 (5认同)

Ash*_*lor 5

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))
Run Code Online (Sandbox Code Playgroud)

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


off*_*dal 5

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

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

>>> 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()
Run Code Online (Sandbox Code Playgroud)

如果你想创建一个管理员用户,你可以简单地通过添加user.superuser = True它来完成这项工作。