Clean up the mistral install guide

* A lot of redundant info has been cleanup
* Deleted the docker install guide (was obsolete)
* Move mistral client from admin to user guide
* Various cleanup in doc

Change-Id: I5c0c27653a053603bb6ad8428db18024a58533a8
Signed-off-by: Arnaud M <arnaud.morin@gmail.com>
This commit is contained in:
Arnaud M
2025-02-02 14:28:22 +01:00
parent cc9371a32f
commit c3d3138516
22 changed files with 288 additions and 1151 deletions

View File

@@ -7,59 +7,35 @@ control mistral objects by interacting with web user interface.
Setup Instructions
------------------
This instruction assumes that Horizon is already installed and it's
installation folder is <horizon>. Detailed information on how to install
installation folder is *<horizon>*.
Detailed information on how to install
Horizon can be found at `Horizon Installation
<https://docs.openstack.org/horizon/latest/contributor/quickstart.html#setup>`_
The installation folder of Mistral Dashboard will be referred to as
<mistral-dashboard>.
The following steps should get you started:
The following should get you started:
#. Install mistral-dashboard in horizon virtual env:
1. Clone the repository into your local OpenStack directory::
.. code-block:: console
$ git clone https://github.com/openstack/mistral-dashboard.git
$ pip install mistral-dashboard
2. Install mistral-dashboard::
#. Enable the dashboard:
$ sudo pip install -e <mistral-dashboard>
.. code-block:: console
Or if you're planning to run Horizon server in a virtual environment
(see below)::
$ tox -evenv -- pip install -e ../mistral-dashboard/
and then::
$ cp -b <mistral-dashboard>/mistraldashboard/enabled/_50_mistral.py \
$ cp -b <horizon>/mistraldashboard/enabled/_50_mistral.py \
<horizon>/openstack_dashboard/local/enabled/_50_mistral.py
3. Since Mistral only supports Identity v3, you must ensure that the dashboard
points the proper OPENSTACK_KEYSTONE_URL in
<horizon>/openstack_dashboard/local/local_settings.py file::
#. When you're ready, you would need to restart horizon, e.g. with apache:
OPENSTACK_API_VERSIONS = {
"identity": 3,
}
.. code-block:: console
OPENSTACK_KEYSTONE_URL = "http://%s:5000/v3" % OPENSTACK_HOST
# Debian based
$ systemctl restart apache2
4. Also, make sure you have changed OPENSTACK_HOST to point to your Keystone
server and check all endpoints are accessible. You may want to change
OPENSTACK_ENDPOINT_TYPE to "publicURL" if some of them are not.
5. When you're ready, you would need to either restart your apache::
$ sudo service apache2 restart
or run the development server
(in case you have decided to use local horizon)::
$ cd ../horizon/
$ tox -evenv -- python manage.py runserver
Debug instructions
------------------
Please refer to :doc:`Mistral Troubleshooting
<../../contributor/debugging_and_testing>`
# Or RHEL/CentOS
$ systemctl restart httpd

View File

@@ -1,29 +0,0 @@
=========================
Workflow Service Overview
=========================
The Workflow service consists of the following components:
``Mistral API`` service
Provides a REST API for operating and monitoring workflow executions.
``mistral-dashboard`` service
Mistral Dashboard is a Horizon plugin.
``Mistral Engine`` service
Controls workflow executions and handles their data flow, places finished
tasks in a queue, transfers data from task to task, and deals with condition
transitions, and so on.
``Mistral Executor`` service
Executes task actions, picks up the tasks from the queue, runs actions, and
sends results back to the engine.
``Mistral Notifier`` service
``python-mistralclient``
Python client API and Command Line Interface.
``mistral-lib``
A library to support writing custom Mistral actions.

View File

@@ -5,13 +5,9 @@ Installation Guide
.. toctree::
:maxdepth: 1
get_started
install
verify
next-steps
dashboard_guide
installation_guide
mistralclient_guide
The Workflow service (mistral) enables setting up task relations that have to be
executed in a particular order, called workflows.

View File

@@ -1,10 +0,0 @@
.. _install-obs:
Install and configure for openSUSE and SUSE Linux Enterprise
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
For information on how to install and configure the Workflow service
for openSUSE and SUSE Linux Enterprise, refer to the :doc:`Installation guide
for Ubuntu <install-ubuntu>`. Note that some commands vary by distribution and
might differ from the ones described, for instance, package management.

View File

@@ -1,10 +0,0 @@
.. _install-rdo:
Install and configure for Red Hat Enterprise Linux and CentOS
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
For information on how to install and configure the Workflow service
for Red Hat Enterprise Linux 7 and CentOS 7, refer to the :doc:`Installation
guide for Ubuntu <install-ubuntu>`. Note that some commands vary by distribution
and might differ from the ones described, for instance, package management.

View File

@@ -1,212 +0,0 @@
.. _install-ubuntu:
================================
Install and Configure for Ubuntu
================================
This section describes how to install and configure the Workflow Service
service for Ubuntu.
Prerequisites
-------------
#. Install the packages:
.. code-block:: console
# apt-get update
# apt-get install python-setuptools python-pip libffi-dev libxslt1-dev \
libxml2-dev libyaml-dev libssl-dev python3-dev tox mistral-common
Installation
------------
**NOTE**: For instructions on how to install Mistral using devstack, refer to
:doc:`Mistral Devstack Installation <../../contributor/devstack>`
Clone the repo and go to the repo directory:
.. code-block:: console
$ git clone https://opendev.org/openstack/mistral
$ cd mistral
Generate the configuration file:
.. code-block:: console
$ tox -egenconfig
Create the mistral directory and copy the example configuration file:
.. code-block:: console
$ mkdir /etc/mistral
$ cp etc/mistral.conf.sample /etc/mistral/mistral.conf
Edit the configuration file:
.. code-block:: console
$ vi /etc/mistral/mistral.conf
**Virtualenv installation**:
.. code-block:: console
$ tox
This installs the necessary virtual environments and runs all the project
tests. Installing the virtual environments may take significant time (~10-15
mins).
**Local installation**:
.. code-block:: console
$ pip install -e .
or:
.. code-block:: console
$ pip install -r requirements.txt
$ python setup.py install
**NOTE**: There are some differences between *pip install -e* and *setup.py
install*. **pip install -e** works similarly to **setup.py install**
or the EasyInstall tool, however, it does not actually install anything.
Instead, it creates a special .egg-link file in the deployment directory that
links to your projects source code.
Configuring Mistral
-------------------
Refer :doc:`../configuration/index` to find general information on how to
configure Mistral server.
Before The First Run
--------------------
After the installation, you will see the **mistral-server** and
**mistral-db-manage** commands in your environment, either in system or virtual
environment.
**NOTE**: If you use **virtualenv**, all Mistral-related commands can be
accessed with **tox -evenv --**. For example, *mistral-server* is available via
*tox -evenv -- mistral-server*.
The **mistral-db-manage** command can be used for migrations.
Updating the database to the latest revision type:
.. code-block:: console
$ mistral-db-manage --config-file <path-to-mistral.conf> upgrade head
Before starting the Mistral server, run the *mistral-db-manage populate*
command. It creates the DB with all the standard actions and standard workflows
that Mistral provides to all Mistral users.:
.. code-block:: console
$ mistral-db-manage --config-file <path-to-mistral.conf> populate
For more detailed information on the *mistral-db-manage* script, see
the :doc:`Mistral Upgrade Guide </admin/upgrade_guide>`.
**NOTE**: For users who want a dry run with an **SQLite** database backend (not
used in production), the *mistral-db-manage* script is not recommended for
database initialization because of
`SQLite limitations <http://www.sqlite.org/omitted.html>`_.
Use the sync_db script described below for database
initialization instead.
**If you use virtualenv**:
.. code-block:: console
$ tools/sync_db.sh --config-file <path-to-mistral.conf>
**Or run sync_db directly**:
.. code-block:: console
$ python tools/sync_db.py --config-file <path-to-mistral.conf>
Running Mistral API server
--------------------------
To run the Mistral API server, execute the following command in a shell:
.. code-block:: console
$ mistral-server --server api --config-file <path-to-mistral.conf>
Running Mistral Engines
-----------------------
To run the Mistral Engine, execute the following command in a shell:
.. code-block:: console
$ mistral-server --server engine --config-file <path-to-mistral.conf>
Running Mistral Executors
-------------------------
To run the Mistral Executor instance, execute the following command in a
shell:
.. code-block:: console
$ mistral-server --server executor --config-file <path-to-mistral.conf>
Note that at least one Engine instance and one Executor instance should be
running so that workflow tasks are processed by Mistral.
Mistral Notifier
----------------
To run the Mistral Notifier, execute the following command in a shell:
.. code-block:: console
$ mistral-server --server notifier --config-file <path-to-mistral.conf>
Running Multiple Mistral Servers Under the Same Process
-------------------------------------------------------
To run more than one server (API, Engine, or Task Executor) on the same process,
execute the following command in a shell:
.. code-block:: console
$ mistral-server --server api,engine --config-file <path-to-mistral.conf>
The --server command line option can be a comma delimited list. The valid
options are "all" (by default if not specified) or any combination of "api",
"engine", and "executor". It is important to note that the "fake" transport for
the rpc_backend defined in the config file should only be used if "all" the
Mistral servers are launched on the same process. Otherwise, messages do not
get delivered if the Mistral servers are launched on different processes
because the "fake" transport is using an in-process queue.
Mistral Client Installation
---------------------------
Refer :doc:`/admin/install/mistralclient_guide` to find out how to install
Mistral Client.
Finalize installation
---------------------
Restart the Workflow services:
.. code-block:: console
# service openstack-mistral-api restart

View File

@@ -1,5 +1,3 @@
.. _install:
=====================
Install and configure
=====================
@@ -7,19 +5,222 @@ Install and configure
This section describes how to install and configure the
Workflow Service, code-named mistral, on the controller node.
**NOTE:** **Mistral can be used in standalone mode or it can work
with OpenStack.**
.. note::
Mistral can be used in standalone mode or it can work with OpenStack.
If Mistral is used with OpenStack, you must already have a working OpenStack
environment with at least the following components installed:
- Keystone with API v3 support
Note that installation and configuration vary by distribution.
Note that installation and configuration may vary by distribution.
.. toctree::
:maxdepth: 2
Overview
--------
install-ubuntu
install-rdo
install-obs
The Workflow service consists of the following components:
``Mistral API`` service
Provides a REST API for operating and monitoring workflow executions.
``mistral-dashboard`` service
Mistral Dashboard is a Horizon plugin.
``Mistral Engine`` service
Controls workflow executions and handles their data flow, places finished
tasks in a queue, transfers data from task to task, and deals with condition
transitions, and so on.
``Mistral Executor`` service
Executes task actions, picks up the tasks from the queue, runs actions, and
sends results back to the engine.
``Mistral Notifier`` service
``python-mistralclient``
Python client API and Command Line Interface.
``mistral-lib``
A library to support writing custom Mistral actions.
Prerequisites
-------------
Install the following dependencies:
On ``apt`` based distributions:
.. code-block:: console
$ apt-get update
$ apt-get install python3 python3-venv python3-pip git
On ``dnf`` based distributions:
.. code-block:: console
$ dnf update
$ dnf install python3 python3-venv python3-pip git
.. note::
you may need to adapt the previous commands based on your distribution.
Installation
------------
.. note::
For instructions on how to install Mistral using devstack, refer to
:doc:`Mistral Devstack Installation <../../contributor/devstack>`
Clone the repo and go to the repo directory:
.. code-block:: console
$ git clone https://opendev.org/openstack/mistral
$ cd mistral
Create a venv:
.. code-block:: console
$ python3 -m venv venv
$ source venv/bin/activate
Now install mistral:
.. code-block:: console
$ pip install \
-c https://releases.openstack.org/constraints/upper/master \
-r requirements.txt \
.
.. note::
You may need to adjust the constraints file based on the release
of mistral you are installing
Generate the configuration file:
.. code-block:: console
$ pip install tox
$ tox -egenconfig
Create the mistral directory and copy the example configuration file:
.. code-block:: console
$ mkdir /etc/mistral
$ cp etc/mistral.conf.sample /etc/mistral/mistral.conf
Edit the configuration file:
.. code-block:: console
$ vi /etc/mistral/mistral.conf
You may also want to install the `mistral-extra` package to have the
opentack actions available (but this is not mandatory):
.. code-block:: console
$ pip install mistral-extra
Configuring Mistral
-------------------
Refer :doc:`../configuration/index` to find general information on how to
configure Mistral server.
Before The First Run
--------------------
After the installation, you will see the **mistral-server** and
**mistral-db-manage** commands in your virtual env.
The **mistral-db-manage** command can be used for database migrations.
Update the database to the latest revision:
.. code-block:: console
# For MySQL / MariaDB / PostgreSQL
$ mistral-db-manage --config-file /etc/mistral/mistral.conf upgrade head
# For SQLite - do not use sqlite in production!
# e.g. connection = 'sqlite:////var/lib/mistral.sqlite'
$ python tools/sync_db.py --config-file /etc/mistral/mistral.conf
Before starting the Mistral server, run the *mistral-db-manage populate*
command. It creates the DB with all the standard actions and standard workflows
that Mistral provides to all Mistral users.:
.. code-block:: console
$ mistral-db-manage --config-file /etc/mistral/mistral.conf populate
For more detailed information on the *mistral-db-manage* script, see
the :doc:`Mistral Upgrade Guide </admin/upgrade_guide>`.
Running Mistral API server
--------------------------
To run the Mistral API server, execute the following command in a shell:
.. code-block:: console
$ mistral-server --server api --config-file /etc/mistral/mistral.conf
Running Mistral Engines
-----------------------
To run the Mistral Engine, execute the following command in a shell:
.. code-block:: console
$ mistral-server --server engine --config-file /etc/mistral/mistral.conf
Running Mistral Executors
-------------------------
To run the Mistral Executor instance, execute the following command in a
shell:
.. code-block:: console
$ mistral-server --server executor --config-file /etc/mistral/mistral.conf
Note that at least one Engine instance and one Executor instance should be
running so that workflow tasks are processed by Mistral.
Mistral Notifier
----------------
To run the Mistral Notifier, execute the following command in a shell:
.. code-block:: console
$ mistral-server --server notifier --config-file /etc/mistral/mistral.conf
Running Multiple Mistral Servers Under the Same Process
-------------------------------------------------------
To run more than one server (API, Engine, or Task Executor) on the same process,
execute the following command in a shell:
.. code-block:: console
$ mistral-server --server api,engine --config-file /etc/mistral/mistral.conf
The --server command line option can be a comma delimited list. The valid
options are "all" (by default if not specified) or any combination of "api",
"engine", and "executor". It is important to note that the "fake" transport for
the rpc_backend defined in the config file should only be used if "all" the
Mistral servers are launched on the same process. Otherwise, messages do not
get delivered if the Mistral servers are launched on different processes
because the "fake" transport is using an in-process queue.

View File

@@ -1,456 +0,0 @@
==========================
Mistral Installation Guide
==========================
Prerequisites
-------------
It is necessary to install some specific system libs for installing Mistral.
They can be installed on most popular operating system using their package
manager (for Ubuntu - *apt*, for Fedora - *dnf*, CentOS - *yum*, for Mac OS -
*brew* or *macports*).
The list of needed packages is shown below:
1. **python-dev**
2. **python-setuptools**
3. **python-pip**
4. **libffi-dev**
5. **libxslt1-dev (or libxslt-dev)**
6. **libxml2-dev**
7. **libyaml-dev**
8. **libssl-dev**
In case of Ubuntu, just run::
$ apt-get install python-dev python-setuptools python-pip libffi-dev \
libxslt1-dev libxml2-dev libyaml-dev libssl-dev
**NOTE:** **Mistral can be used without authentication at all or it can work
with OpenStack.** In case of OpenStack, it works **only on Keystone v3**, make
sure **Keystone v3** is installed.
Installation
------------
**NOTE**: If it is needed to install Mistral using devstack, please refer to
:doc:`Mistral Devstack Installation <../../contributor/devstack>`
First of all, clone the repo and go to the repo directory::
$ git clone https://github.com/openstack/mistral.git
$ cd mistral
Install tox::
$ pip install tox
Generate config::
$ tox -egenconfig
Configure Mistral as needed. The configuration file is located in
``etc/mistral.conf.sample``. You will need to modify the configuration options
and then copy it into ``/etc/mistral/mistral.conf``.
For details see :doc:`Mistral Configuration Guide </admin/configuration/index>`
**Virtualenv installation**::
$ tox
This will install necessary virtual environments and run all the project tests.
Installing virtual environments may take significant time (~10-15 mins).
**Local installation**::
$ pip install -e .
or::
$ pip install -r requirements.txt
$ python setup.py install
**NOTE**: Differences *pip install -e* and *setup.py install*.
**pip install -e** works very similarly to **setup.py install** or the
EasyInstall tool, except that it doesn't actually install anything.
Instead, it creates a special .egg-link file in the deployment directory,
that links to your project's source code.
Before the first run
--------------------
After installation you will see **mistral-server** and **mistral-db-manage**
commands in your environment, either in system or virtual environment.
**NOTE**: In case of using **virtualenv**, all Mistral related commands
available via **tox -evenv --**. For example, *mistral-server* is available via
*tox -evenv -- mistral-server*.
**mistral-db-manage** command can be used for migrations.
For updating the database to the latest revision type::
$ mistral-db-manage --config-file <path-to-mistral.conf> upgrade head
Before starting Mistral server, run *mistral-db-manage populate* command.
It prepares the database with standard actions and workflows which Mistral
will provide for all users.::
$ mistral-db-manage --config-file <path-to-mistral.conf> populate
For more detailed information about *mistral-db-manage* script please
see :doc:`Mistral Upgrade Guide </admin/upgrade_guide>`.
**NOTE**: For users who want a dry run with **SQLite** database backend(not
used in production), *mistral-db-manage* is not recommended for database
initialization because of
`SQLite limitations <http://www.sqlite.org/omitted.html>`_.
Please use sync_db script described below instead for database initialization.
**If you use virtualenv**::
$ tools/sync_db.sh --config-file <path-to-mistral.conf>
**Or run sync_db directly**::
$ python tools/sync_db.py --config-file <path-to-mistral.conf>
Running Mistral API server
--------------------------
To run Mistral API server perform the following command in a shell::
$ mistral-server --server api --config-file <path-to-mistral.conf>
Running Mistral Engines
-----------------------
To run Mistral Engine perform the following command in a shell::
$ mistral-server --server engine --config-file <path-to-mistral.conf>
Running Mistral Task Executors
------------------------------
To run Mistral Task Executor instance perform the following command
in a shell::
$ mistral-server --server executor --config-file <path-to-mistral.conf>
Running Mistral Notifier
------------------------
To run Mistral Notifier perform the following command in a shell::
$ mistral-server --server notifier -- config-file <path-to-mistral.conf>
Note that at least one Engine instance and one Executor instance should be
running so that workflow tasks are processed by Mistral.
Running Multiple Mistral Servers Under the Same Process
-------------------------------------------------------
To run more than one server (API, Engine, or Task Executor) on the same
process, perform the following command in a shell::
$ mistral-server --server api,engine --config-file <path-to-mistral.conf>
The --server command line option can be a comma delimited list. The valid
options are "all" (by default if not specified) or any combination of "api",
"engine", "notifier" and "executor". It's important to note
that the "fake" transport for
the rpc_backend defined in the config file should only be used if "all" the
Mistral servers are launched on the same process. Otherwise, messages do not
get delivered if the Mistral servers are launched on different processes
because the "fake" transport is using an in process queue.
Running Mistral By Systemd
--------------------------
#. Create an upstart config, it could be named as
``/etc/systemd/system/mistral-api.service``:
.. code-block:: bash
[Unit]
Description = Openstack Workflow Service API
[Service]
ExecStart = /usr/bin/mistral-server --server api --config-file /etc/mistral/mistral.conf
User = mistral
[Install]
WantedBy = multi-user.target
#. Enable and start mistral-api:
.. code-block:: console
# systemctl enable mistral-api
# systemctl start mistral-api
#. Verify that mistral-api services are running:
.. code-block:: console
# systemctl status mistral-api
#. Create an upstart config, it could be named as
``/etc/systemd/system/mistral-engine.service``:
.. code-block:: bash
[Unit]
Description = Openstack Workflow Service Engine
[Service]
ExecStart = /usr/bin/mistral-server --server engine --config-file /etc/mistral/mistral.conf
User = mistral
[Install]
WantedBy = multi-user.target
#. Enable and start mistral-engine:
.. code-block:: console
# systemctl enable mistral-engine
# systemctl start mistral-engine
#. Verify that mistral-engine services are running:
.. code-block:: console
# systemctl status mistral-engine
#. Create an upstart config, it could be named as
``/etc/systemd/system/mistral-notifier.service``:
.. code-block:: bash
[Unit]
Description = Openstack Workflow Service Notifier
[Service]
ExecStart = /usr/bin/mistral-server --server notifier --config-file /etc/mistral/mistral.conf
User = mistral
[Install]
WantedBy = multi-user.target
#. Enable and start mistral-notifier:
.. code-block:: console
# systemctl enable mistral-notifier
# systemctl start mistral-notifier
#. Verify that mistral-notifier services are running:
.. code-block:: console
# systemctl status mistral-notifier
#. Create an upstart config, it could be named as
``/etc/systemd/system/mistral-executor.service``:
.. code-block:: bash
[Unit]
Description = Openstack Workflow Service Executor
[Service]
ExecStart = /usr/bin/mistral-server --server executor --config-file /etc/mistral/mistral.conf
User = mistral
[Install]
WantedBy = multi-user.target
#. Enable and start mistral-executor:
.. code-block:: console
# systemctl enable mistral-executor
# systemctl start mistral-executor
#. Verify that mistral-executor services are running:
.. code-block:: console
# systemctl status mistral-executor
Mistral And Docker
------------------
Docker containers provide an easy way to quickly deploy independent or
networked Mistral instances in seconds. This guide describes the process
to launch an all-in-one Mistral container.
Docker Installation
-------------------
The following links contain instructions to install latest Docker software:
* `Docker Engine <https://docs.docker.com/engine/installation/>`_
* `Docker Compose <https://docs.docker.com/compose/install/>`_
Build the Mistral Image Manually
--------------------------------
Execute the following command from the repository top-level directory::
docker build -t mistral -f tools/docker/Dockerfile .
The Mistral Docker image has one build parameter:
+-------------------------+-------------+--------------------------------------+
|Name |Default value| Description |
+=========================+=============+======================================+
|`BUILD_TEST_DEPENDENCIES`|false |If the `BUILD_TEST_DEPENDENCIES` |
| | |equals `true`, the Mistral test |
| | |dependencies will be installed inside |
| | |the Docker image |
+-------------------------+-------------+----------------------+---------------+
Running Mistral using Docker Compose
------------------------------------
To launch Mistral in the single node configuration::
docker-compose -f tools/docker/docker-compose/infrastructure.yaml \
-f tools/docker/docker-compose/mistral-single-node.yaml \
-p mistral up -d
To launch Mistral in the multi node configuration::
docker-compose -f tools/docker/docker-compose/infrastructure.yaml \
-f tools/docker/docker-compose/mistral-multi-node.yaml \
-p mistral up -d
The infrastructure docker-compose file contains examples of RabbitMQ,
PostgreSQL and MySQL configurations. Feel free to modify the docker-compose
files as needed.
The docker-compose Mistral configurations also include the CloudFlow container.
It is available at `link <http://localhost:8000/>`_
The `--build` option can be used when it is necessary to rebuild the image,
for example::
docker-compose -f tools/docker/docker-compose/infrastructure.yaml \
-f tools/docker/docker-compose/mistral-single-node.yaml \
-p mistral up -d --build
Running the Mistral client from the Docker Compose container
------------------------------------------------------------
To run the mistral client against the server in the container using the client
present in the container::
docker run -it mistral_mistral mistral workflow-list
Configuring Mistral
-------------------
The Docker image contains the minimal set of Mistral configuration parameters
by default:
+--------------------+------------------+--------------------------------------+
|Name |Default value | Description |
+====================+==================+======================================+
|`MESSAGE_BROKER_URL`|rabbit://guest:gu\|The message broker URL |
| |est@rabbitmq:5672 | |
+--------------------+------------------+----------------------+---------------+
|`DATABASE_URL` |sqlite:///mistral\|The database URL |
| |.db | |
+--------------------+------------------+----------------------+---------------+
|`UPGRADE_DB` |false |If the `UPGRADE_DB` equals `true`, |
| | |a database upgrade will be launched |
| | |before Mistral main process |
+--------------------+------------------+----------------------+---------------+
|`MISTRAL_SERVER` |all |Specifies which mistral server to |
| | |start by the launch script. |
+--------------------+------------------+----------------------+---------------+
|`LOG_DEBUG` |false |If set to true, the logging level will|
| | |be set to DEBUG instead of the default|
| | |INFO level. |
+--------------------+------------------+----------------------+---------------+
|`RUN_TESTS` |false |If the `UPGRADE_DB` equals `true`, |
| | |the Mistral unit tests will be |
| | |launched inside container |
+--------------------+------------------+----------------------+---------------+
The `/etc/mistral/mistral.conf` configuration file can be mounted to the Mistral
Docker container by uncommenting and editing the `volumes` sections in the
Mistral docker-compose files.
Launch tests inside Container
-----------------------------
Build mistral::
docker build -t mistral -f tools/docker/Dockerfile \
--build-arg BUILD_TEST_DEPENDENCIES=true .
Run tests using SQLite::
docker run -it -e RUN_TESTS=true mistral
or PostgreSQL::
docker run -it \
-e DATABASE_URL=postgresql://postgres:postgres@localhost:5432/postgres \
-e RUN_TESTS=true mistral
Keycloak integration
--------------------
If you set AUTH_ENABLE to True value in the mistral.env file then Mistral will
enable Keycloak integration by default. Keycloak will be deployed with
mistral/mistral credentials. You should uncomment the volume line in the
`infrastructure.yaml` for the CloudFlow.
Next step you login in the administrative console using the
http://localhost:8080/auth/admin URL. Create a oauth client, you can
specify only a name, for example mistral.
Specify valid redirect URL: http://localhost:8000/* and turn on the
"Implicit Flow Enabled" in the your client page. Save your changes.
Add the following line to your /etc/hosts file::
127.0.0.1 keycloak
Export the following environments variable for mistral cli::
export MISTRAL_AUTH_TYPE=keycloak-oidc
export OS_AUTH_URL=http://keycloak:8080/auth
export OS_TENANT_NAME=master
export OS_USERNAME=mistral
export OS_PASSWORD=mistral
export OS_MISTRAL_URL=http://localhost:8989/v2
export OPENID_CLIENT_ID=mistral
export OPENID_CLIENT_SECRET=
export MISTRALCLIENT_INSECURE=True
Check your configuration::
mistral workflow-list
Or open a cloud flow page in a browser::
http://localhost:8000
Using Mistral Client with Docker
--------------------------------
The Mistral API will be accessible from the host machine on the default
port 8989. Install `python-mistralclient` on the host machine to
execute mistral commands.
Mistral Client Installation
---------------------------
Please refer to :doc:`Mistral Client / CLI Guide </user/cli/index>`

View File

@@ -1,9 +0,0 @@
.. _next-steps:
Next steps
~~~~~~~~~~
Your OpenStack environment now includes the Mistral service.
To add additional services, see `OpenStack Pike Installation Tutorials and
Guides <https://docs.openstack.org/install/>`_.

View File

@@ -5,47 +5,61 @@ Basic verification
.. code-block:: console
$ mistral run-action std.noop
$ mistral run-action std.echo '{"output": "Hello world"}'
Should give you something like:
Verify operation of the Workflow service
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
.. code-block:: console
.. note::
{"result": "Hello world"}
Perform these commands on the controller node.
Congrats!
A step further - your first workflow
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
#. Create a workflow file:
.. code-block:: console
.. code-block:: console
$ cat >/tmp/test.wf.yaml <<EOL
---
version: '2.0'
test_wf:
tasks:
echo_task:
action: std.echo output="Hello"
EOL
$ cat >/tmp/test.wf.yaml <<EOL
---
version: '2.0'
test_wf:
input:
- message: "Hello world"
output:
output: <% $.output %>
tasks:
echo_task:
action: std.echo output=<% $.message %>
publish:
output: <% task().result %>
EOL
#. Create a workflow from the workflow file:
.. code-block:: console
.. code-block:: console
$ mistral workflow-create /tmp/test.wf.yaml
$ mistral workflow-create /tmp/test.wf.yaml
#. Create an execution based on the workflow:
.. code-block:: console
.. code-block:: console
$ mistral execution-create test_wf
$ mistral execution-create test_wf
#. Run the execution until its returning state is 'SUCCESS':
.. code-block:: console
.. code-block:: console
$ mistral execution-list
$ mistral execution-list
#. You can grab the output of the execution using:
.. code-block:: console
$ mistral execution-get-output <execution_id>
After performing the above steps, the Mistral service is ready for use.

View File

@@ -1,23 +1,6 @@
===========================
Mistral Client Installation
===========================
To install ``python-mistralclient``, it is required to have ``pip``
(in most cases). Make sure that ``pip`` is installed. Then type:
.. code-block:: console
$ pip install python-mistralclient
Or, if it is needed to install ``python-mistralclient`` from master branch,
type:
.. code-block:: console
$ pip install git+https://github.com/openstack/python-mistralclient.git
After ``python-mistralclient`` is installed you will see command ``mistral``
in your environment.
=============================
Mistral Client Advanced Usage
=============================
Configure Authentication Against Keystone
-----------------------------------------
@@ -27,9 +10,9 @@ have auth variables:
.. code-block:: console
$ export OS_AUTH_URL=http://<Keystone_host>:5000/v2.0
$ export OS_AUTH_URL=http://<Keystone_host>:5000/v3
$ export OS_TENANT_NAME=tenant
$ export OS_USERNAME=admin
$ export OS_USERNAME=user
$ export OS_PASSWORD=secret
$ export OS_MISTRAL_URL=http://<Mistral host>:8989/v2
( optional, by default URL=http://localhost:8989/v2)

View File

@@ -1,7 +1,19 @@
=============================
Mistral Client Commands Guide
=============================
The Mistral CLI can be used with ``mistral`` command or via `OpenStackClient
The Mistral CLI can be used with ``mistral`` command or via ``openstack``.
Installation
------------
To install ``mistral`` and ``openstack`` via ``pip``:
.. code-block:: console
$ pip install python-mistralclient python-openstackclient
See here for more info about `OpenStackClient
<https://docs.openstack.org/python-openstackclient/latest/>`_.
Mistral Client
@@ -10,7 +22,7 @@ Mistral Client
The best way to learn about all the commands and arguments that are expected
is to use the ``mistral help`` command.
.. code-block:: bash
.. code-block:: console
$ mistral help
usage: mistral [--version] [-v] [--log-file LOG_FILE] [-q] [-h] [--debug]
@@ -21,7 +33,7 @@ is to use the ``mistral help`` command.
It can also be used with the name of a sub-command.
.. code-block:: bash
.. code-block:: console
$ mistral help execution-create
usage: mistral execution-create [-h] [-f {json,shell,table,value,yaml}]
@@ -49,7 +61,7 @@ The full list of Mistral commands that are registered with OpenStack client
can be listed with ``openstack command list``. By default it will list all
commands grouped together, but we can specify only the Mistral command group.
.. code-block:: bash
.. code-block:: console
$ openstack command list --group openstack.workflow_engine.v2
+------------------------------+-----------------------------------+
@@ -66,7 +78,7 @@ commands grouped together, but we can specify only the Mistral command group.
Then detailed help output can be requested for an individual command.
.. code-block:: bash
.. code-block:: console
$ openstack help workflow execution create
usage: openstack workflow execution create [-h]

View File

@@ -25,4 +25,5 @@ info on concrete features.
wf_lang_v2
rest_api_v2
cli/index
cli/advanced
cookbooks/index

View File

@@ -1,5 +1,5 @@
Mistral Workflows
=================
Workflows
=========
Workflow is the main building block of Mistral Workflow Language, the reason
why the project exists. Workflow represents a process that can be described in

View File

@@ -1,2 +0,0 @@
You can find the latest documentation of Mistral integration with Docker
`here <https://docs.openstack.org/mistral/latest/admin/install/installation_guide.html#mistral-and-docker>`_.

View File

@@ -1,68 +0,0 @@
FROM krallin/ubuntu-tini:16.04
LABEL name="Mistral" \
description="Workflow Service for OpenStack" \
maintainers="Andras Kovi <akovi@nokia.com> \
Vitalii Solodilov <mcdkr@yandex.ru>"
RUN apt-get -qq update && \
apt-get install -y \
libffi-dev \
libpq-dev \
libssl-dev \
libxml2-dev \
libxslt1-dev \
libyaml-dev \
libmysqlclient-dev \
python \
python-dev \
crudini \
curl \
git \
gcc \
libuv1 \
libuv1-dev && \
curl -f -o /tmp/get-pip.py https://bootstrap.pypa.io/pip/3.2/get-pip.py && \
python /tmp/get-pip.py && rm /tmp/get-pip.py && \
pip install --upgrade pip
RUN pip install pymysql psycopg2 py_mini_racer
ENV MISTRAL_DIR="/opt/stack/mistral" \
TMP_CONSTRAINTS="/tmp/upper-constraints.txt" \
CONFIG_FILE="/etc/mistral/mistral.conf" \
INI_SET="crudini --set /etc/mistral/mistral.conf" \
MESSAGE_BROKER_URL="rabbit://guest:guest@rabbitmq:5672/" \
DATABASE_URL="sqlite:///mistral.db" \
UPGRADE_DB="false" \
RUN_TESTS="false" \
DEBIAN_FRONTEND="noninteractive" \
MISTRAL_SERVER="all" \
LOG_DEBUG="false" \
AUTH_URL="http://keycloak:8080/auth" \
AUTH_ENABLE="false" \
AUTH_TYPE="keycloak-oidc"
# We install dependencies separatly for a caching purpose
COPY requirements.txt "${MISTRAL_DIR}/"
RUN curl -o "${TMP_CONSTRAINTS}" \
http://opendev.org/openstack/requirements/raw/branch/master/upper-constraints.txt && \
sed -i "/^mistral.*/d" "${TMP_CONSTRAINTS}" && \
pip install -r "${MISTRAL_DIR}/requirements.txt"
ARG BUILD_TEST_DEPENDENCIES="false"
COPY test-requirements.txt "${MISTRAL_DIR}/"
RUN if ${BUILD_TEST_DEPENDENCIES} ; then \
pip install -r "${MISTRAL_DIR}/test-requirements.txt" ; \
fi
COPY . ${MISTRAL_DIR}
RUN pip install -e "${MISTRAL_DIR}" && \
mkdir /etc/mistral && \
rm -rf /var/lib/apt/lists/* && \
find ${MISTRAL_DIR} -name "*.sh" -exec chmod +x {} \;
WORKDIR "${MISTRAL_DIR}"
EXPOSE 8989
CMD "${MISTRAL_DIR}/tools/docker/start.sh"

View File

@@ -1,8 +0,0 @@
{
"_type": "openid-connect",
"issuer": "http://keycloak:8080/auth/realms/master",
"loginUrl": "http://keycloak:8080/auth/realms/master/protocol/openid-connect/auth",
"logoutUrl": "http://keycloak:8080/auth/realms/master/protocol/openid-connect/logout",
"requireHttps": false,
"clientId": "mistral"
}

View File

@@ -1,79 +0,0 @@
version: '3'
services:
# postgresql:
# image: postgres:10.1-alpine
# restart: always
# ports:
# - "5432:5432"
# volumes:
# - postgresql:/var/lib/postgresql/data
# networks:
# - database
# environment:
# - POSTGRES_PASSWORD=mistral
# - POSTGRES_USER=mistral
# - POSTGRES_DB=mistral
rabbitmq:
image: rabbitmq:3.7.2-management-alpine
restart: always
ports:
- "15672:15672"
networks:
- message-broker
hostname: rabbitmq
environment:
- RABBITMQ_VM_MEMORY_HIGH_WATERMARK=0.81
- RABBITMQ_DEFAULT_USER=mistral
- RABBITMQ_DEFAULT_PASS=mistral
- RABBITMQ_DEFAULT_VHOST=mistral
mysql:
image: mysql:8.0.3
restart: always
ports:
- "3306:3306"
volumes:
- mysql:/var/lib/mysql
networks:
- database
environment:
- MYSQL_ROOT_PASSWORD=mistral
- MYSQL_DATABASE=mistral
- MYSQL_USER=mistral
- MYSQL_PASSWORD=mistral
keycloak:
image: jboss/keycloak:4.1.0.Final
ports:
- "8080:8080"
networks:
- identity-provider
environment:
DB_VENDOR: h2
KEYCLOAK_USER: mistral
KEYCLOAK_PASSWORD: mistral
cloud-flow:
image: mcdoker18/cloud-flow:0.5.0
restart: always
networks:
- cloud-flow
ports:
- "8000:8000"
# TODO: make a Keycloak environment variables for CloudFlow
# volumes:
# - "./auth.json:/opt/CloudFlow/dist/assets/auth.json"
environment:
- CF_MISTRAL_URL=http://mistral:8989
volumes:
postgresql:
rabbitmq:
mysql:
networks:
database:
message-broker:
identity-provider:
cloud-flow:

View File

@@ -1,96 +0,0 @@
version: '3'
services:
mistral-api:
build:
context: ../../..
dockerfile: tools/docker/Dockerfile
args:
BUILD_TEST_DEPENDENCIES: "false"
restart: always
ports:
- "8989:8989"
networks:
database:
message-broker:
identity-provider:
cloud-flow:
aliases:
- mistral
env_file:
- mistral.env
# volumes:
# - "/path/to/mistral.conf:/etc/mistral/mistral.conf"
environment:
- MISTRAL_SERVER=api
- UPGRADE_DB=true
mistral-engine:
build:
context: ../../..
dockerfile: tools/docker/Dockerfile
args:
BUILD_TEST_DEPENDENCIES: "false"
restart: always
networks:
- database
- identity-provider
- message-broker
env_file:
- mistral.env
# volumes:
# - "/path/to/mistral.conf:/etc/mistral/mistral.conf"
environment:
- MISTRAL_SERVER=engine
mistral-executor:
build:
context: ../../..
dockerfile: tools/docker/Dockerfile
args:
BUILD_TEST_DEPENDENCIES: "false"
restart: always
networks:
- message-broker
- identity-provider
env_file:
- mistral.env
# volumes:
# - "/path/to/mistral.conf:/etc/mistral/mistral.conf"
environment:
- MISTRAL_SERVER=executor
mistral-event-engine:
build:
context: ../../..
dockerfile: tools/docker/Dockerfile
args:
BUILD_TEST_DEPENDENCIES: "false"
restart: always
networks:
- database
- message-broker
- identity-provider
env_file:
- mistral.env
# volumes:
# - "/path/to/mistral.conf:/etc/mistral/mistral.conf"
environment:
- MISTRAL_SERVER=event-engine
mistral-notifier:
build:
context: ../../..
dockerfile: tools/docker/Dockerfile
args:
BUILD_TEST_DEPENDENCIES: "false"
restart: always
networks:
- database
- message-broker
- identity-provider
env_file:
- mistral.env
# volumes:
# - "/path/to/mistral.conf:/etc/mistral/mistral.conf"
environment:
- MISTRAL_SERVER=notifier

View File

@@ -1,22 +0,0 @@
version: '3'
services:
mistral:
build:
context: ../../..
dockerfile: "tools/docker/Dockerfile"
args:
BUILD_TEST_DEPENDENCIES: "false"
restart: always
ports:
- "8989:8989"
networks:
- database
- message-broker
- identity-provider
- cloud-flow
env_file:
- mistral.env
# volumes:
# - "/path/to/mistral.conf:/etc/mistral/mistral.conf"
environment:
- UPGRADE_DB=true

View File

@@ -1,4 +0,0 @@
MESSAGE_BROKER_URL=rabbit://mistral:mistral@rabbitmq:5672/mistral
#DATABASE_URL=postgresql+psycopg2://mistral:mistral@postgresql:5432/mistral
DATABASE_URL=mysql+pymysql://mistral:mistral@mysql:3306/mistral
AUTH_ENABLE=false

View File

@@ -1,41 +0,0 @@
#!/bin/bash
set -e
# If a Mistral config doesn't exist we should create it and fill in with
# parameters
if [ ! -f ${CONFIG_FILE} ]; then
oslo-config-generator \
--config-file "${MISTRAL_DIR}/tools/config/config-generator.mistral.conf" \
--output-file "${CONFIG_FILE}"
${INI_SET} DEFAULT js_implementation py_mini_racer
${INI_SET} oslo_policy policy_file "${MISTRAL_DIR}/etc/policy.json"
${INI_SET} DEFAULT auth_type ${AUTH_TYPE}
${INI_SET} pecan auth_enable ${AUTH_ENABLE}
${INI_SET} keycloak_oidc auth_url ${AUTH_URL}
${INI_SET} keycloak_oidc insecure true
${INI_SET} DEFAULT transport_url "${MESSAGE_BROKER_URL}"
${INI_SET} database connection "${DATABASE_URL}"
${INI_SET} DEFAULT debug "${LOG_DEBUG}"
fi
if [ ${DATABASE_URL} == "sqlite:///mistral.db" -a ! -f ./mistral.db ]
then
python ./tools/sync_db.py --config-file "${CONFIG_FILE}"
mistral-db-manage --config-file "${CONFIG_FILE}" populate
fi
if "${UPGRADE_DB}";
then
/usr/local/bin/mistral-db-manage --config-file "${CONFIG_FILE}" upgrade head
mistral-db-manage --config-file "${CONFIG_FILE}" populate
fi
if "${RUN_TESTS}";
then
cp "${CONFIG_FILE}" .mistral.conf
"${MISTRAL_DIR}/run_tests.sh" -N
else
mistral-server --config-file "${CONFIG_FILE}" --server ${MISTRAL_SERVER}
fi