本文发布于Cylon的收藏册,转载请著名原文链接~
什么是包
包 “pack” 是扩展 StackStorm 的集成和自动化的部署单元。通常, pack 是沿着服务或产品边界组织的,例如 AWS、Docker、Sensu 等。 pack 包含Actions、Workflows、Rules、 Sensors和Aliases。StackStorm 内容始终是 pack 的一部分,因此了解如何创建 pack 并使用它们非常重要。
一些 pack 扩展了 StackStorm 以将其与外部系统集成,例如 AWS,GitHub,JIRA。我们称它们为“集成 pack ”。有些 pack 捕获自动化模式:这类 pack 含特定自动化过程的 workflow, Rule 和 Action - 例如st2 演示 pack 。我们称它们为“自动化 pack ”。这种命名主要是一种约定:StackStorm 本身对两者没有区别。
任何使用该 pack 所针对的服务的人都可以共享和重用集成 pack 。您可以在StackStorm Exchange找到许多这样的示例。自动化 pack 通常是特定于站点的,并且在特定团队或公司之外几乎没有用处;它们通常在内部共享。
总结:Packs是StackStorm中组织工作流、动作和传感器的方式。它们是一组相关的动作、工作流和传感器的集合,通常用于实现特定的自动化任务或集成。
包管理
StackStorm pack 通过命令进行管理:将为您提供有用的概述。st2 pack <...>
/ st2 pack -h
有些(例如core 基本 StackStorm action)是随 StackStorm 预装的。所有其他 pack 都需要您安装。幸运的是,这很容易!
list和get是获取有关本地 pack 信息的主要命令:
# List all installed packs
st2 pack list
# Get detailed information about an installed pack
st2 pack get core
使用 StackStorm 和 pack 管理 Action 时,所有 pack 都会安装到系统 pack 目录中,默认为 /opt/stackstorm/packs/.
除了可以安装本地的包,还可以安装社区维护的包,已有一百多个 StackStorm pack 您可以在 exchange.stackstorm.org 浏览包列表,或通过 CLI 搜索 pack 索引,st2 search 需要联网使用,大部分 stackstorm 包 已经不再更新,使用较多的为 jira, 定时任务,脚本类。
st2 pack searchst2 pack show
# Search query is applied across all pack parameters.
# It will search through pack names:
st2 pack search sensu
# And keywords:
st2 pack search monitoring
# And description (use quotes for multi-word search):
st2 pack search "Amazon Web Services"
# And even pack author:
st2 pack search "Jon Middleton"
# Show an index entry for the pack
# with the exact name match
st2 pack show sensu
安装包
从 stackstorm 官方仓库安装
stackstorm pack 安装起来很简单
# Install from the Exchange by pack name
st2 pack install sensu
# You can also install multiple packs:
st2 pack install datadog github
此命令将会从GitHub 上的 StackStorm Exchange 仓库下载包,将它们放在 下/opt/stackstorm/packs
,并向 StackStorm 注册它们。
本质上,用户可以同样轻松地使用名从 git 安装属于自己的包。
# Install your own pack from git using http(s)
st2 pack install https://github.com/emedvedev/chatops_tutorial
# Install your own pack from git using ssh
st2 pack install git@github.com/emedvedev/chatops_tutorial
# Install your own pack using gitlab URL (added in release 3.4)
st2 pack install gitlab@gitlab.com:example/examplepack
默认情况下,将安装最新版本的 pack ,但您可以指定特定版本、分支、tag,甚至提交哈希。只需使用下面命令
# Fetch a specific commit
st2 pack install cloudflare=776b9a4
# Or a version tag
st2 pack install cloudflare=0.1.0
# Or a branch
st2 pack install https://github.com/emedvedev/chatops_tutorial=testing
也可以从现有的本地目录安装 pack :
# Install a pack from '/home/stanley/bitcoin' dir
st2 pack install file:///home/stanley/bitcoin
需要注意的一点是,从 git 存储库目录安装 pack 将仅安装最新提交,并忽略对文件的任何后续未提交更改。在已安装的 pack 上运行会将其替换为请求的版本,或者如果未指定版本,则升级到最新版本。您的配置文件不会被覆盖,因此您可以轻松恢复到旧版本,但对于生产部署,我们建议始终指定版本,防止 st2 pack install latest
包依赖
依赖是从 StackStorm 3.2 开始的新功能!
如果您的包使用其他包中的 Action,您可以在文件 dependencies
的 部分中指定它们 pack.yaml
,StackStorm 将在安装您的包时自动安装它们。
与使用子命令类似,您可以仅使用名称来引用 StackStorm Exchange 中的包,也可以指定包的 Git 存储库 URL。您还可以使用相同的语法来安装特定版本、标签或分支:st2 pack install
dependencies:
- excel
- powerpoint=0.2.2
- https://github.com/StackStorm/stackstorm-ms.git
如果存在依赖性冲突,子命令可能会出错,而不会安装任何包。如果您想强制安装包而不安装其依赖项,您可以使用以下标志:
st2 pack install --skip-dependencies my-custom-pack
包卸载
卸载包使用 st2 pack remove
:
st2 pack remove sensu
配置包
集成一个包(pack)通常需要针对您的环境进行配置。例如,您需要指定 SMTP 服务器以使用电子邮件 pack 、指定 puppet master URL 以使用 Puppet pack ,或者指定 OpenStack 的 Keystone 端点和租户凭证。
通常大多数需要配置的 pack 都可以交互配置:
st2 pack config <pack_name>
系统将提示您在交互式工具中输入配置参数,其中包含说明、建议和默认值。在保存之前,您还会被要求在文本编辑器中验证您的最终配置文件;它是可选的,大多数包不需要超过两个或三个字段。生成的文件将被放入 /opt/stackstorm/configs/<pack>.yaml
并加载。
注意:StackStorm 将 pack 配置加载到 MongoDB 中。当您使用 st2 pack config 时,它会自动加载 。但是如果您手动编辑 pack 配置,或使用配置管理工具来管理这些文件,则必须告诉StackStorm 加载更新的配置。
更新包配置
sudo st2ctl reload --register-configs
覆盖包的默认值
安装包时,资源的状态是从包中的元数据文件中获取的。有时,在安装社区包时,您可能不希望启用所有资源,例如您只想使用 Action 的子集,或者想要禁用传感器。
在 StackStorm 3.7.0 之前,可以通过以下方式更改此状态:
- 使用 StackStorm API 禁用资源。然而,在重新安装或包重新安装时,这将被忘记。
st2ctl reload
- 手动更改元数据文件。这将在升级时丢失,并且无法轻易跟踪。
在StackStorm 3.7.0中,我们引入了覆盖功能,以便包资源的元数据可以被配置文件覆盖。这将始终在重新加载或包安装时被读取。 ST2 API 仍然允许您覆盖此设置,但与以前一样,StackStorm API 为启用/禁用资源所做的任何更改在重新加载或重新安装时都会被忘记。
覆盖工具当前仅限于允许仅针对以下类型的资源覆盖启用的属性:Action、Alias、Rule 和 Sensor。它由目录 /opt/stackstorm/overrides
控制 。
安装包或重载时,资源状态按如下方式管理:
- 状态是从位于 中的包的资源元数据文件中读取的
/opt/stackstorm/packs/<packname>
。这些是从包的相关存储库下载的,例如 GIT, StackStorm-Exchange。 - 如果 /opt/stackstorm/overrides/_global.yaml 存在,这回应用这个包的默认值或特定于资源的覆盖。允许
_global.yaml
您指定特定资源类型的默认状态,例如禁用所有 Sensor。 _global.yaml
的格式如下(设置为禁用所有内容):
---
sensors:
defaults:
enabled: false
actions:
defaults:
enabled: false
aliases:
defaults:
enabled: false
rules:
defaults:
enabled: false
如果发生了覆盖,则受影响的资源数量将在 Output 中输出,例如:st2ctl reload
$ st2ctl reload --register-all
Registering content...[flags = --config-file /etc/st2/st2.conf --register-all]
2022-02-07 12:56:43,694 INFO [-] Connecting to database "st2" @ "127.0.0.1:27017" as user "None".
2022-02-07 12:56:43,704 INFO [-] Successfully connected to database "st2" @ "127.0.0.1:27017" as user "None".
2022-02-07 12:56:44,254 INFO [-] =========================================================
2022-02-07 12:56:44,254 INFO [-] ############## Registering triggers #####################
2022-02-07 12:56:44,254 INFO [-] =========================================================
2022-02-07 12:56:44,549 INFO [-] Registered 1 triggers.
2022-02-07 12:56:44,549 INFO [-] =========================================================
2022-02-07 12:56:44,549 INFO [-] ############## Registering sensors ######################
2022-02-07 12:56:44,549 INFO [-] =========================================================
2022-02-07 12:56:44,832 INFO [-] Registered 9 sensors.
2022-02-07 12:56:44,832 INFO [-] 7 sensors had their metadata overridden.
示例:禁用一个包中的所有Sersor
如果要禁用一个包中的所有传感器,我们将创建一个 /opt/stackstorm/overrides/<packname>.yaml
文件,包含以下内容的 sensor:
---
sensors:
defaults:
enabled: false
示例:禁用所有包中的所有传感器(排除某个包)
相反,如果我们想覆盖除单个包之外的所有传感器,那么我们将创建一个/opt/stackstorm/overrides/_global.yaml
来禁用所有传感器:
---
sensors:
defaults:
enabled: false
之后创建 /opt/stackstorm/overrides/<packname>.yaml
,为所需的包启用 Sensor
---
sensors:
defaults:
enabled: true
示例:禁用包的Action,但排除某些Action
---
actions:
defaults:
enabled: false
exceptions:
action1:
enabled: true
action2:
enabled: true
示例:禁用包中某一个Rule
rules:
exceptions:
rule1:
enabled: false
虚拟环境
在 StackStorm 中,所有包的所有任务都是基于Python虚拟环境运行,以便区隔及管理各个包的Python套件。系统自带包使用系统自带的虚拟环境,位于目录:/opt/stackstorm/st2/
通常,自建的包则需在/opt/stackstorm/virtualenvs目录下创建跟包同样名称的Python虚拟环境。
$ tree virtualenvs/ -L 2
virtualenvs/
├── crontab
│ ├── bin
│ ├── include
│ ├── lib
│ ├── lib64 -> lib
│ └── pyvenv.cfg
.....
在包运行时,需要提前为包含 Python Action/Sensor 的每个包创建一个 Python 虚拟环境 /opt/stackstorm/virtualenv
,Python 依赖将通过 pip -rrequirements.txt
安装在 virtualenv 中,这部分是 Stackstorm 自动处理。
StackStorm v3.4.0 中删除了对 Python 2 的支持。请考虑更新任何仅适用于 Python 2 的包以与 Python 3 配合使用。
如果在 offline 环境中,需要创建一个自定义包,那么需要手动创建对应的虚拟环境,例如,在/opt/stackstorm/virtualenvs目录运行下列命令创建包的虚拟环境。也可以使用 ln 命令创建文件连接。x
$ python -m venv package_name
本文发布于Cylon的收藏册,转载请著名原文链接~
链接:https://www.oomkill.com/2023/11/stackstorm-pack/
版权:本作品采用「署名-非商业性使用-相同方式共享 4.0 国际」 许可协议进行许可。