配置指南¶
无论是在真实的 OpenStack 环境中还是没有 OpenStack 环境的情况下,都需要 Mistral 配置才能使 Mistral 正常工作。
注意: 以下大多数操作应在 mistral 目录下执行。
生成 mistral.conf(如果它不存在)
$ oslo-config-generator \ --config-file tools/config/config-generator.mistral.conf \ --output-file /etc/mistral/mistral.conf
编辑文件 /etc/mistral/mistral.conf。
如果您不使用 OpenStack,请跳过此项。 提供有效的 keystone 认证属性
[keystone_authtoken] www_authenticate_uri = http://keystone1.example.com:5000/v3 identity_uri = http://<keystone-host:5000 auth_version = v3 admin_user = <user> admin_password = <password> admin_tenant_name = <tenant>
Mistral 也可以配置为通过 OpenID Connect 协议与 Keycloak 服务器进行身份验证。为了启用 Keycloak 身份验证,配置文件中应包含以下部分
auth_type = keycloak-oidc [keycloak_oidc] auth_url = https://<keycloak-server-host>:<keycloak-server-port>/auth
默认情况下,属性
auth_type分配给keystone。如果需要禁用 SSL/TLS 验证,则应在[keycloak_oidc]组下添加insecure = True。如果您想为 Mistral API 服务器配置 SSL,请在配置文件中提供以下选项
[api] enable_ssl_api = True [ssl] ca_file = <path-to-ca file> cert_file = <path-to-certificate file> key_file = <path-to-key file>
如果您不使用 OpenStack 或想要禁用 Mistral 服务的身份验证,请在配置文件中提供
auth_enable = False[pecan] auth_enable = False
如果您不使用 OpenStack,请跳过此项。 在 Keystone 上注册 Mistral 服务和 Mistral 端点
$ MISTRAL_URL="http://[host]:[port]/v2" $ openstack service create workflowv2 --name mistral \ --description 'OpenStack Workflow service' $ openstack endpoint create workflowv2 public $MISTRAL_URL $ openstack endpoint create workflowv2 internal $MISTRAL_URL $ openstack endpoint create workflowv2 admin $MISTRAL_URL
在
[DEFAULT]部分配置传输属性[DEFAULT] transport_url = rabbit://<user_id>:<password>@<host>:5672/
配置数据库。 生产环境中不能使用 SQLite;请使用 MySQL 或 PostgreSQL。 以下是如何将 MySQL 数据库连接到 Mistral 的步骤
确保您已在数据库机器上安装
mysql-server包(它也可以是您的 Mistral 机器)。安装 Python 的 MySQL 驱动程序
$ pip install PyMySQL
创建数据库并授予权限
# mysql CREATE DATABASE mistral; USE mistral GRANT ALL ON mistral.* TO 'root'@<database-host> IDENTIFIED BY <password>;
在 Mistral 配置文件中配置连接
[database] connection = mysql+pymysql://<user>:<password>@<database-host>:3306/mistral
注意:如果使用 PostgreSQL,请按以下方式配置连接项
connection = postgresql://<user>:<password>@<database-host>:5432/mistral
如果您不使用 OpenStack,请跳过此项。 更新
mistral/actions/openstack/mapping.json文件,该文件包含所有允许的 OpenStack 操作,根据部署中 OpenStack 项目的特定客户端版本进行更新。请在tools/get_action_list.py脚本中找到更多详细信息。如果需要,配置合并策略功能。它需要更改 Mistral 变量交互的默认行为,即在自己的上下文中用另一个变量替换一个变量。例如
version: '2.0' wf: input: - aa: bb: wf_ex_input cc: wf_ex_input zz: wf_ex_input output: aa: <% $.aa %> tasks: task1: action: std.echo # emulate some action result input: output: cc: task1_res dd: task1_res on-success: [task2] publish: aa: cc: <% task().result["cc"] %> dd: <% task().result["dd"] %> task2: action: std.echo # emulate some action result input: output: bb: task2_res publish: aa: bb: <% task().result["bb"] %>执行的默认结果是
{ "aa": { "bb": "task2_res" } }
要合并任务的结果,我们需要使用扁平数据结构或 yaql 合并函数。merge_strategy 配置具有以下选项
replace - 这是默认值。这是变量在上下文中相互替换的旧行为。
merge - 如果您设置此值,变量将与其他上下文合并。
考虑使用与上述相同的工作流 merge 策略。结果是
{ "aa" : { "bb": "task2_res", "cc": "task1_res", "dd": "task1_res", "zz": "wf_ex_input", } }
可以按以下方式配置 merge_strategy
[engine] merge_strategy = replace
如果需要,配置任务亲和性功能。它需要区分单个任务执行器或来自任务执行器组的一个任务执行器
[executor] host = my_favorite_executor
然后,可以在工作流语言中通过以下方式引用此执行器
...Workflow YAML... my_task: ... target: my_favorite_executor ...Workflow YAML...
配置 Mistral 端点的基于角色的访问策略 (policy.yaml)
[oslo_policy] policy_file = <path-of-policy.yaml file>
默认 policy.yaml 文件位于
mistral/etc/。有关更多详细信息,请参见 policy.yaml 文件。如果需要,修改日志配置
默认日志格式与 Graylog 兼容,但是可以配置日志格式。Mistral 使用库 oslo.log 进行日志记录。有关配置信息,请参阅官方 oslo.log 配置:https://docs.openstack.org/oslo.log/2025.2/configuration/index.html。您可以按如下方式使用 root_execution_id
logging_context_format_string = [%(asctime)s,%(msecs)03d][%(levelname)-5s][category=%(name)s][pid=%(process)d][root_execution_id=%(root_execution_id)s] %(message)s
如果需要,修改操作执行报告配置。
操作可能会卡在 “RUNNING” 状态,例如,如果分配的执行器崩溃或发出操作完成信号的消息丢失。本节描述了一种基于心跳的解决方案来关闭这些被遗忘的操作执行。相关的配置选项是
max_missed_heartbeats和check_interval。请注意,如果这两个选项中的任何一个为 “0”,则该功能将不会启用。默认配置如下
[action_heartbeat] max_missed_heartbeats = 15 check_interval = 20 first_heartbeat_timeout = 3600
“check_interval = 20”,因此每 20 秒检查一次操作执行。当检查器运行时,如果收到的最后一个心跳时间早于 “20 * 15” 秒,它将把所有正在运行的操作执行转换为错误。请注意,“first_heartbeat_timeout = 3600”,因此如果未收到心跳,操作执行在 3600 秒内不会关闭。
max_missed_heartbeats
定义允许的最大未收到心跳数。如果未收到心跳数超过此数字,则相关操作执行将转换为 “ERROR” 状态,原因 “Heartbeat wasn’t received.”。
check_interval
检查间隔(以秒为单位)。
first_heartbeat_timeout
第一个心跳的宽限期(以秒为单位)。
默认情况下,Mistral 会记录 HTTP 操作中的请求信息。要隐藏请求标头和端点响应中的日志,请应用如下配置
[action_logging] hide_response_body = True hide_request_body = True sensitive_headers = Header1, Header2
上面的示例将使 Mistral 隐藏响应的所有主体,并隐藏 Mistral 执行器日志中请求中的 Header1 和 Header2。
hide_response_body
如果此值为 True,则 HTTP 操作响应主体将在日志中隐藏。默认值为 False
hide_request_body
如果此值为 True,则 HTTP 操作请求主体将在日志中隐藏。默认值为 False
sensitive_headers
应在日志中隐藏的敏感标头列表。默认情况下为空。
配置事件发布者。事件发布者是可选地安装在与 Mistral 相同的虚拟环境中的插件。可以为所有工作流执行配置一个或多个事件发布者的事件通知。配置位于通知器部分中的 notify 参数下。notify 参数是一个字典列表,每个发布者一个,用于标识类型或注册的插件名称以及作为 kwargs 传递给发布者的其他键值对
[notifier] notify = [ {"type": "webhook", "url": "http://example.com", "headers": {"X-Auth-Token": "XXXX"}}, {"type": "custom_publisher"} ]
配置信息端点。信息端点可用于以 json 格式公开一些重要的支持数据。应手动启用此端点。将填写的信息文件存储到 Mistral 将运行的环境中。
默认配置如下
[api] enable_info_endpoint = False info_json_file_path = info.json
最后,尝试运行 mistral 引擎并验证它是否在没有错误的情况下运行
$ mistral-server --config-file <path-to-config> --server engine