创建/采用自动机

https://blueprints.launchpad.net/oslo.utils/+spec/adopt-automaton

这个库的目标是提供一个文档完善的状态机类/工具,从一个基本集合开始,并随着时间的推移扩展到更大的集合。状态机模式(或其实现的变体)是一种常用模式,具有多种不同的用途。

当前的一些用途(正在积极推进中)

  • ironic 提供状态和转换验证。

  • taskflow 引擎提供状态和转换验证以及执行/调度/分析。

这个库的代码是从 taskflow 提取的,并被复制到 ironic 中,并且似乎是该项目状态工作的一个关键部分,现在在那里发挥着有用的作用;因此,我认为 API 大部分是稳定的(ironic 目前未使用 FSM 运行器属性,而 taskflow 会/正在使用)。该代码/迷你库最近被拆分为 https://github.com/harlowja/automaton,在那里进行了开发和隔离(例如,提取了测试,添加了 setup.py 并集成了 pbr…),并且有 travis-ci 针对其进行测试集成(这不再需要,因为 openstackci 具有类似/等效的功能)。

库名称

automaton

内容

  • automaton/__init__.py

  • automaton/exceptions.py

  • automaton/machines.py

    • 这是主文件,包含有限状态机和分层状态机以及相关的运行类,可用于运行状态机直到终止;这些运行器的使用是可选的,不需要使用这些机器进行状态和转换处理和/或验证。

对于那些想知道分层状态机是什么的人,可以参考以下内容(概念与以下幻灯片组中描述的类似)。

早期采用者

  • Taskflow

  • Ironic

  • 其他人?

公共 API

目前机器的公共 API 是以下

FiniteMachine
    - runner (read-only property)
    - default_start_state (read/write property)
    - current_state (read-only property)
    - terminated (read-only property)
    - add_state(state, terminal=False, on_enter=None, on_exit=None)
    - add_reaction(state, event, reaction, *args, **kwargs)
    - add_transition(start, end, event)
    - process_event(event) -- main function/method!!
    - initialize(start_state=None)
    - copy(shallow=False, unfreeze=False)
    - freeze()
    - frozen (read/write property)
    - states (read-only property)
    - events (read-only property)
    - pformat(sort=True, empty='.')

HierarchicalFiniteMachine(FiniteMachine)
    - runner (read-only property)
    - add_state(state, terminal=False,
                on_enter=None, on_exit=None, machine=None)

每个状态机的运行器具有以下公共 API

  • run(event, initialize=True)

  • run_iter(event, initialize=True)

更详细的 API 文档(可能更易读且注释更好)可以在以下找到

https://github.com/harlowja/automaton

或者从 live taskflow 文档(使用机器的较旧版本,缺少一些 API 调整;但没有重大变化)

https://docs.openstack.org/developer/taskflow/types.html#module-taskflow.types.fsm

实现

负责人

主要负责人

  • Harlowja

其他贡献者

  • 你?

主要维护者

主要维护者

  • Harlowja(直到另行通知)。

其他贡献者

  • Praneshp (@yahoo)

  • 你?

安全联系人

安全联系人:harlowja

里程碑

完成目标里程碑:liberty-1

工作项

  • 创建 Launchpad 项目

  • 更改 Launchpad 项目的所有者(使其成为 Oslo 项目组的一部分)

  • 授予 openstackci 在 PyPI 上的 Owner 权限

  • 创建初始仓库

  • 让库做一些事情

  • 更新 README.rst

  • 发布 git 仓库

  • Oslo 团队审查新仓库

  • Infra 项目配置

  • 更新 Gerrit 组和 ACL

  • openstack-infra/devstack-gate 调整

  • openstack/requirements projects.txt 调整

  • 更新 docs.openstack.org 上的项目列表

  • 标记一个发布版本

  • 盈利!

采用说明

N/A

依赖项

需求

  • python 2.6 –> 3.4 (以及更高版本!)

  • ordereddict(仅在 python 2.6 上需要)

  • pbr

  • prettytable

  • six

注意

所有当前计划的依赖项都在 requirements 仓库中。

参考资料

N/A

注意

本作品采用知识共享署名 3.0 非移植许可协议授权。 http://creativecommons.org/licenses/by/3.0/legalcode