loading...

插件基本组件

本节介绍插件架构中的基本组件的概念定义。通过学习本章节,你可以更深入理解插件规范定义文件plugin.spec.yaml中各配置项的含义。

要了解更多plugin.spec.yaml定义的详细规则,请阅读插件规范文档。

连接(connection)

每个插件可能包含一个连接,这是一段负责身份验证的代码,连接是插件对接第三方平台使用的凭证信息。连接代码在其他组件之前运行,因此可以用来初始化各种库和可以在之后不同组件中使用的共享变量和代码。

以下是关于连接的一些信息:

  • 连接在插件开发中是可选的
    无需通过帐号密码登录第三方服务的插件通常不需要连接。
  • 连接可在千乘产品中重复使用
    用户可以有多个连接,每个连接可以在不同的工作流程中被使用,例如每个用户邮箱都可以和IMAP插件有连接,以便其对邮箱进行监控。
  • 连接的输入将在千乘数据库中被加密
  • 连接是在插件规范文件中被定义的,即 plugin.spec.yaml,位于connection节点下
  • 连接代码位于 $PLUGIN_NAME/actions/$PLUGIN_NAME.py中的connection方法
  • 不论actions还是triggers,每个plugin.spec.yaml对应的类都含有一个connection()方法用于单独处理连接,且connection()一定先于run()运行

插件作者应负责编写yaml中的connection节点,并实现连接代码。

动作(action)

每个插件可能包含一个或多个动作,动作是一个简短的功能函数,用于实现某个特定的功能。工作流通常包含串连在一起的许多动作。插件动作代码是在Docker容器中执行的。当动作初始化时,连接对象将被创建,然后运行动作代码。

示例用途:

  • 如果您需要发出API请求并返回结果。
    例如,取消配置用户
    例如,创建一个JIRA ticket
    例如,进行LDAP查询
  • 如果需要运行命令/实用程序并返回结果。
    例如,运行Nmap扫描
    例如,运行base64解码功能

以下是有关动作的一些信息:

  • 如果动作存在,它会在工作流被触发后执行
  • 开发插件时,动作是可选的,并且可以有多个动作
  • 动作是短暂的运行进程
  • 动作失败可能会停止工作流
    取决于在工作流程构建器中是否为插件设置了失败后继续执行工作流
    如果工作流接下来的部分依赖于此动作的成功执行,则可能需要停止工作流
    如果工作流的接下来的部分可以处理此动作的异常,则可以继续工作流程
  • 动作是在插件规范文件中被定义的,即 plugin.spec.yaml,位于actions节点下
  • 动作代码位于 $PLUGIN_NAME/actions/$PLUGIN_NAME.py

插件作者应负责编写yaml中的actions节点,并实现动作代码。

触发器(trigger)

每个插件可能包含一个或多个触发器,这些触发器是长时间运行的进程,用于轮询/发出新事件,然后将事件发送到千乘引擎以启动工作流。基于工作流获取数据的方式,千乘中的所有工作流都必须以触发器开始。激活工作流时,带有触发器的插件将在Docker容器中执行。当触发器初始化时,连接对象将被创建,然后触发器进入一个循环并等待消息或轮询新数据。

触发器分类两种类型:

  • API 触发器
    由千乘平台提供一个 REST 触发器接口,外部系统访问此接口从而触发工作流执行。
  • 插件触发器
    通过插件实现特定的触发逻辑,主动触发工作流执行。

示例用途:

  • 如果您需要轮询API,网站等以监测改动,触发器则是一个很适用的机制。
    例如,监控JIRA以获取新创建的ticket,并在找到时产生触发
    例如,监控某个Twitter帐户有没新tweet,并在找到时触发
  • 如果你需要打开一个套接字来监听消息,那么触发器就是一个很适用的机制。
    例如,打开Kafka监听器,在收到新消息时触发
    例如,创建一个自定义HTTP服务器以侦听来自ElastAlert的消息,根据它们的消息触发
  • 如果你需要通过WebSocket来接受第三方服务的消息推送,那么触发器就是一个很适用的机制。
    例如,通过WebSocket接受金融市场交易行情信息,实现量化交易

以下是有关触发器的一些信息:

  • 所有工作流程都必须以触发器开始
  • 触发器在插件开发时是可选的,可以有多个触发器
  • 触发器是长时间运行的进程
  • 触发器故障将阻止工作流的正常运行
    触发器需要具有处理异常的能力
  • 如果需要测试api触发器,在测试文件中将enable_web改为true
  • 如果想要工作流中的触发器以api启动,在plugin.spec.yamltriggers下添加enable_web: true
  • 触发器是在插件规范文件中被定义的,即 plugin.spec.yaml,位于triggers节点下
  • 触发器代码位于 $PLUGIN_NAME/triggers/$PLUGIN_NAME.py

插件作者应负责编写yaml中的triggers节点,并实现触发器代码。