首页 > 解决方案 > 如何使用`airflow create_user`在Docker容器上的Airflow 1.10.9中创建具有不同角色的用户?

问题描述

我在 Docker 容器上运行 Airflow 1.10.9(如本教程中所示)。

我需要创建用户并为他们分配角色。当我在本文档rbac = True中打开(默认为 False)时,我想象通过浏览器连接到网络服务器时 UI 会发生变化,但我却收到 Airflow 404 错误。localhost:8080

我不确定如何使用airflow create_user. 如果有人对此有任何见解或知道某处的任何说明,我将不胜感激。这是我尝试过的列表:

1-更改[webserver] authenticate = False[webserver] authenticate = True并添加auth_backend = airflow.contrib.auth.backends.password_auth。它可以工作,但是这只给了我一个用户类型的选项,并且任何用户都可以访问所有的 UI。我也需要像查看器用户这样的东西。

2- 随着 1 的变化,尝试使用airflow create_user所有必需的选项,但我在网络服务器上得到了这个(不是开玩笑):


                          ____/ (  (    )   )  \___
                         /( (  (  )   _    ))  )   )\
                       ((     (   )(    )  )   (   )  )
                     ((/  ( _(   )   (   _) ) (  () )  )
                    ( (  ( (_)   ((    (   )  .((_ ) .  )_
                   ( (  )    (      (  )    )   ) . ) (   )
                  (  (   (  (   ) (  _  ( _) ).  ) . ) ) ( )
                  ( (  (   ) (  )   (  ))     ) _)(   )  )  )
                 ( (  ( \ ) (    (_  ( ) ( )  )   ) )  )) ( )
                  (  (   (  (   (_ ( ) ( _    )  ) (  )  )   )
                 ( (  ( (  (  )     (_  )  ) )  _)   ) _( ( )
                  ((  (   )(    (     _    )   _) _(_ (  (_ )
                   (_((__(_(__(( ( ( |  ) ) ) )_))__))_)___)
                   ((__)        \\||lll|l||///          \_))
                            (   /(/ (  )  ) )\   )
                          (    ( ( ( | | ) ) )\   )
                           (   /(| / ( )) ) ) )) )
                         (     ( ((((_(|)_)))))     )
                          (      ||\(|(|)|/||     )
                        (        |(||(||)||||        )
                          (     //|/l|||)|\\ \     )
                        (/ / //  /|//||||\\  \ \  \ _)
-------------------------------------------------------------------------------
Node: a7f653c9257d
-------------------------------------------------------------------------------
Traceback (most recent call last):
  File "/usr/local/lib/python3.7/site-packages/flask/app.py", line 2447, in wsgi_app
    response = self.full_dispatch_request()
  File "/usr/local/lib/python3.7/site-packages/flask/app.py", line 1952, in full_dispatch_request
    rv = self.handle_user_exception(e)
  File "/usr/local/lib/python3.7/site-packages/flask/app.py", line 1821, in handle_user_exception
    reraise(exc_type, exc_value, tb)
  File "/usr/local/lib/python3.7/site-packages/flask/_compat.py", line 39, in reraise
    raise value
  File "/usr/local/lib/python3.7/site-packages/flask/app.py", line 1950, in full_dispatch_request
    rv = self.dispatch_request()
  File "/usr/local/lib/python3.7/site-packages/flask/app.py", line 1936, in dispatch_request
    return self.view_functions[rule.endpoint](**req.view_args)
  File "/usr/local/lib/python3.7/site-packages/flask_admin/base.py", line 69, in inner
    return self._run_view(f, *args, **kwargs)
  File "/usr/local/lib/python3.7/site-packages/flask_admin/base.py", line 368, in _run_view
    return fn(self, *args, **kwargs)
  File "/usr/local/lib/python3.7/site-packages/flask_login/utils.py", line 261, in decorated_view
    return func(*args, **kwargs)
  File "/usr/local/lib/python3.7/site-packages/airflow/utils/db.py", line 74, in wrapper
    return func(*args, **kwargs)
  File "/usr/local/lib/python3.7/site-packages/airflow/www/views.py", line 2296, in index
    auto_complete_data=auto_complete_data)
  File "/usr/local/lib/python3.7/site-packages/airflow/www/views.py", line 388, in render
    return super(AirflowViewMixin, self).render(template, **kwargs)
  File "/usr/local/lib/python3.7/site-packages/flask_admin/base.py", line 308, in render
    return render_template(template, **kwargs)
  File "/usr/local/lib/python3.7/site-packages/flask/templating.py", line 140, in render_template
    ctx.app,
  File "/usr/local/lib/python3.7/site-packages/flask/templating.py", line 120, in _render
    rv = template.render(context)
  File "/usr/local/lib/python3.7/site-packages/jinja2/asyncsupport.py", line 76, in render
    return original_render(self, *args, **kwargs)
  File "/usr/local/lib/python3.7/site-packages/jinja2/environment.py", line 1008, in render
    return self.environment.handle_exception(exc_info, True)
  File "/usr/local/lib/python3.7/site-packages/jinja2/environment.py", line 780, in handle_exception
    reraise(exc_type, exc_value, tb)
  File "/usr/local/lib/python3.7/site-packages/jinja2/_compat.py", line 37, in reraise
    raise value.with_traceback(tb)
  File "/usr/local/lib/python3.7/site-packages/airflow/www/templates/airflow/dags.html", line 20, in top-level template code
    {% extends "airflow/master.html" %}
  File "/usr/local/lib/python3.7/site-packages/jinja2/environment.py", line 1005, in render
    return concat(self.root_render_func(self.new_context(vars)))
  File "/usr/local/lib/python3.7/site-packages/airflow/www/templates/airflow/dags.html", line 16, in root
    specific language governing permissions and limitations
  File "/usr/local/lib/python3.7/site-packages/airflow/www/templates/airflow/master.html", line 16, in root
    specific language governing permissions and limitations
  File "/usr/local/lib/python3.7/site-packages/airflow/www/templates/admin/master.html", line 16, in root
    specific language governing permissions and limitations
  File "/usr/local/lib/python3.7/site-packages/flask_admin/templates/bootstrap3/admin/base.html", line 26, in root
    <style>
  File "/usr/local/lib/python3.7/site-packages/airflow/www/templates/admin/master.html", line 76, in block_page_body
    var field = $('<input></input>');
  File "/usr/local/lib/python3.7/site-packages/airflow/www/templates/admin/master.html", line 100, in block_main_menu
    seconds = seconds - hours * secondsPerHour;
  File "/usr/local/lib/python3.7/site-packages/jinja2/runtime.py", line 262, in call
    return __obj(*args, **kwargs)
  File "/usr/local/lib/python3.7/site-packages/jinja2/runtime.py", line 570, in __call__
    return self._invoke(arguments, autoescape)
  File "/usr/local/lib/python3.7/site-packages/jinja2/asyncsupport.py", line 110, in _invoke
    return original_invoke(self, arguments, autoescape)
  File "/usr/local/lib/python3.7/site-packages/jinja2/runtime.py", line 574, in _invoke
    rv = self._func(*arguments)
  File "/usr/local/lib/python3.7/site-packages/flask_admin/templates/bootstrap3/admin/layout.html", line 83, in macro
    {% endmacro %}
  File "/usr/local/lib/python3.7/site-packages/jinja2/runtime.py", line 262, in call
    return __obj(*args, **kwargs)
  File "/usr/local/lib/python3.7/site-packages/flask_admin/menu.py", line 52, in get_children
    return [c for c in self._children if c.is_accessible() and c.is_visible()]
  File "/usr/local/lib/python3.7/site-packages/flask_admin/menu.py", line 52, in <listcomp>
    return [c for c in self._children if c.is_accessible() and c.is_visible()]
  File "/usr/local/lib/python3.7/site-packages/flask_admin/menu.py", line 126, in is_accessible
    return self._view.is_accessible()
  File "/usr/local/lib/python3.7/site-packages/airflow/www/utils.py", line 94, in is_accessible
    (not current_user.is_anonymous and current_user.is_superuser())
  File "/usr/local/lib/python3.7/site-packages/airflow/contrib/auth/backends/password_auth.py", line 114, in is_superuser
    return hasattr(self, 'user') and self.user.is_superuser()
AttributeError: 'NoneType' object has no attribute 'is_superuser'

3-随着 1 的变化,也设置rbac = True了,这给了我 404 很多圈页面。

标签: pythonlinuxdocker-composeairflow

解决方案


推荐阅读