Editing a workflow script - Platform - BlueCat Gateway - 22.4.1

Gateway Administration Guide

Locale
English (United States)
Product name
BlueCat Gateway
Version
22.4.1

After the initial creation of a new workflow, you can start editing the workflow's _page.py file and other scripts to implement the desired functionality.

Files for the new workflow are created in the <bluecat_gateway> folder:
<bluecat_gateway>/workflows/<category_name>/<workflow_name>

Where:

  • <bluecat_gateway> is the BlueCat Gateway folder.
  • <category_name> is the nested Workflow Category (and optional subcategory) that you specified when creating the workflow in Gateway.
  • <workflow_name> is the Workflow Name that you specified when creating the workflow in Gateway.

For example, if the workflow name was example_workflow and you entered a category of Examples, the files would be stored under <bluecat_gateway>/workflows/Examples/example_workflow.

While Gateway fills in each file with starter code, you can replace it with your own implementation. Once done, it can be called by any suitable REST client using Basic authentication.

The workflow script's app.route header

When implementing a workflow script, make sure that Flask's app.route() decorator is replaced with the @route() decorator. The @route() decorator enforces separation of namespaces between different workflows. If you don't use @route(), it is possible for function and endpoint name collisions to occur, especially when multiple people develop workflows at the same time.

Sample UI workflow scripts

# The workflow name must be the first part of any endpoints defined in this file.
# If you break this rule, you will trip up on other people's endpoint names and
# chaos will ensue.
@route(app, '/example_workflow/example_workflow_endpoint')
@util.workflow_permission_required('example_workflow_page')
@util.exception_catcher
@util.ui_secure_endpoint
def example_workflow_example_workflow_page():
    form = GenericFormTemplate()
    # Remove this line if your workflow does not need to select a configuration
    form.configuration.choices = util.get_configurations(default_val=True)
    return render_template(
        'example_workflow_page.html',
        form=form,
        text=util.get_text(module_path(), config.language),
        options=g.user.get_options(),
    )
@route(app, '/example_workflow/form', methods=['POST'])
@util.workflow_permission_required('example_workflow_page')
@util.exception_catcher
@util.ui_secure_endpoint
def example_workflow_example_workflow_page_form():
    form = GenericFormTemplate()
    # Remove this line if your workflow does not need to select a configuration
    form.configuration.choices = util.get_configurations(default_val=True)
    if not form.validate_on_submit():
        g.user.logger.info('Form data was not valid.')
        return render_template(
            'example_workflow_page.html',
            form=form,
            text=util.get_text(module_path(), config.language),
            options=g.user.get_options(),
        )

    print(form.configuration.data)
    print(form.email.data)
    print(form.password.data)
    print(form.mac_address.data)
    print(form.ip_address.data)
    print(form.url.data)
    print(form.file.data)
    print(form.boolean_checked.data)
    print(form.boolean_unchecked.data)
    print(form.date_time.data)
    print(form.submit.data)

    # Put form processing logic here
    g.user.logger.info('SUCCESS')
    flash('success', 'succeed')
    return redirect(url_for('example_workflowexample_workflow_example_workflow_page'))

Sample API workflow script

Since the new workflow was created as a REST API workflow, it will not show up on the Available Actions menu. As with UI workflows, Gateway creates new files for your new API in the <bluecat_gateway>/workflows/<category_name>/<workflow_name> folder.

When complete, your new API workflow can be called by any suitable REST client using Basic authentication.
# Copyright 2020 BlueCat Networks. All rights reserved.
            from flask import request, g, abort, jsonify
            
            from bluecat import route, util
            from main_app import app
            
            
            @route(app, '/example_rest_workflow/example_rest_workflow_endpoint', methods=['GET', 'PUT', 'POST'])
            @util.rest_workflow_permission_required('example_rest_workflow_page')
            @util.rest_exception_catcher
            def example_rest_workflow_example_rest_workflow_page():
            # Put endpoint logic here
            g.user.logger.info('SUCCESS')
            return jsonify({"method": request.method})

Again, you can place your own implementation in this file. Once done, it can be called by any suitable REST client using Basic authentication.