Плагины воздушного потока, RBAC включен Blueprint не работает - PullRequest
0 голосов
/ 10 декабря 2018

У нас был пользовательский интерфейс Airflow, основанный на этой ссылке , и он работал нормально с Airflow 1.9.0.После этого мы обновились до 1.10.1 и также включили RBAC.После этого наш пользовательский интерфейс перестал появляться.

Мы следовали этому объяснению представления на основе ролей и пытались использовать наши старые шаблоны пользовательского интерфейса с appbuilder_views.При использовании TestAppBuilderBaseView из /tests/plugins/test_plugin.py,

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.но я не знаю, как вы можете сделать это с помощью Airflow

Любое руководство по этому вопросу, пожалуйста ?.Заранее спасибоJeenson

1 Ответ

0 голосов
/ 08 января 2019

В версии 1.10.0, когда она была выпущена, была ошибка, которая неправильно устанавливала плагины в новом пользовательском интерфейсе.Это было исправлено в версии 1.10.1, но пример кода для плагинов в документации Airflow не работает.

Я написал пример проекта, чтобы сделать интеграцию работающей, вы можете проверить его здесь: https://github.com/felipegasparini/airflow_plugin_rbac_test

Но вкратце вам необходимо:

  1. Правильно импортировать BaseView из appbuilder, используя:

    из 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]
...