气流插件,启用RBAC的蓝图不起作用



我们有基于此链接的Airflow自定义UI,它在Airflow 1.9.0中运行良好。在此之后,我们升级到1.10.1,并启用了RBAC。在此之后,我们的自定义UI就停止了。

我们遵循了关于基于角色的视图的说明,并尝试将旧的UI模板与appbuilder_views一起使用。关于使用/tests/plugins/test_plugin.py的TestAppBuilderBaseView,

class TestAppBuilderBaseView(AppBuilderBaseView):
@expose("/")
def test(self):
return self.render("test_plugin/test.html", content="Hello galaxy!")

我们得到菜单和链接,但点击后我们得到错误

对象没有属性"render">

将其更改为

return self.render_template("test_plugin/test.html",content="Hello galaxy!")

我们得到错误

jinja2.exceptions.TemplateNotFound:test_plugin/test.html

我已经尝试了所有可能的组合放置模板文件夹和html文件,但仍然是相同的错误。

我确实发现一些论坛告诉我要在Blueprint上启用调试。但我不知道你如何用气流做到这一点

有关于这方面的指导吗

提前感谢
Jeenson

1.10.0版本在发布时有一个错误,即在新的UI中没有正确安装插件。这在1.10.1版本中得到了修复,但Airflow文档中插件的代码示例已损坏。

我写了一个示例项目来实现集成,您可以在这里查看:https://github.com/felipegasparini/airflow_plugin_rbac_test

但简而言之,你需要:

  1. 使用从appbuilder正确导入BaseView

    从flask_appbuilder将BaseView导入为AppBuilderBaseView

  2. 将方法名称"test"更改为"list">

  3. 将template_folder属性设置为指向模板所在的位置。

类似这样的东西:

from airflow.plugins_manager import AirflowPlugin
from flask_appbuilder import BaseView as AppBuilderBaseView
class TestAppBuilderBaseView(AppBuilderBaseView):
template_folder = '/root/airflow/plugins/test_plugin/templates'
@expose("/")
def list(self):
return self.render_template("test.html", content="Hello galaxy!")
v_appbuilder_view = TestAppBuilderBaseView()
v_appbuilder_package = {"name": "Test View",
"category": "Test Plugin",
"view": v_appbuilder_view}
# Defining the plugin class
class AirflowTestPlugin(AirflowPlugin):
name = "test_plugin"
# operators = [PluginOperator]
# sensors = [PluginSensorOperator]
# hooks = [PluginHook]
# executors = [PluginExecutor]
# macros = [plugin_macro]
# admin_views = [v]
# flask_blueprints = [bp]
# menu_links = [ml]
appbuilder_views = [v_appbuilder_package]
# appbuilder_menu_items = [appbuilder_mitem]

我也面临同样的问题。在蓝图中包含模板文件夹后,它会选择正确的文件夹,这是我的工作示例。

请保持文件夹结构如下

Plugin
|_test_plugin
|_templates
|_test.html
test_plugin.py

test_plugin.py

from airflow.plugins_manager import AirflowPlugin
from flask import Blueprint
from flask_admin import BaseView, expose
from flask_admin.base import MenuLink
class TestView(BaseView):
@expose('/')
def test(self):        
return self.render("test.html", content="Hello galaxy!")
v = TestView(category="Test Plugin", name="Test View")
blue_print_ = Blueprint("test_plugin",
__name__,
template_folder='templates')
class AirflowTestPlugin(AirflowPlugin):
name = "MenuLinks"
# operators = []
flask_blueprints = [blue_print_]
# hooks = []
# executors = []
admin_views = [v]    
#appbuilder_views = [v_appbuilder_package]

fgasparini的答案是正确的,但我还需要启用RBAC设置

rbac = True 

airflow.cfg中,以便flask_appbuilder与气流一起工作,否则菜单将不会显示。

最新更新