env_check扩展开发实战:创建自定义系统命令检查actor的完整指南

📅 2026/6/30 10:03:10
env_check扩展开发实战:创建自定义系统命令检查actor的完整指南
env_check扩展开发实战创建自定义系统命令检查actor的完整指南【免费下载链接】env_checkA tool for health checking after operating system upgrade项目地址: https://gitcode.com/openeuler/env_check前往项目官网免费下载https://ar.openeuler.org/ar/env_check是openEuler社区开发的一款系统健康检查工具专门用于操作系统升级后的环境验证。本文将详细介绍如何为env_check创建自定义系统命令检查actor帮助开发者快速上手扩展开发。什么是env_checkenv_check是一个强大的系统健康检查框架它通过actor模式来执行各种系统命令和配置检查。在操作系统升级后使用env_check可以快速验证系统功能是否正常确保升级过程的可靠性。该工具的核心思想是将每个检查任务封装为一个独立的actor每个actor负责特定的系统命令或功能验证。这种模块化设计使得扩展非常灵活开发者可以根据需要轻松添加新的检查项。env_check架构解析env_check采用分层架构设计主要包含以下几个核心部分1. 基础actor类所有检查actor都继承自基础类BaseCheckActor位于sut/env_check/check_actor/base_check_actor.py。这个基类定义了actor的基本属性和接口class BaseCheckActor(object): SUCCESS True FAIL False task_type TaskType name description level priority staticmethod def run(node): result ReturnMessage(resultTrue, solution, message{}, failed_reason) return result2. 系统命令检查基类对于系统命令检查env_check提供了专门的基类OeBaseActor位于sut/env_check/check_actor/oe_base_actor.py。这个类封装了执行Shell脚本的标准流程class OeBaseActor(BaseCheckActor): name OeBaseActor description this is openEuler base test actor. level low priority unnecessary task_type (BaseCheckActor.task_type.SYSTEM_UPGRADE,) sh_dir os.path.join(os.path.abspath(os.path.dirname( os.path.dirname(os.path.abspath(__file__)))), smoke_test/local_sh) sh_file 3. 测试脚本目录所有的系统命令测试脚本都位于sut/env_check/smoke_test/local_sh/目录下按功能分类组织。创建自定义系统命令检查actor的步骤步骤1创建测试脚本首先在相应的测试脚本目录中创建Shell测试脚本。以创建一个检查ls命令的actor为例#!/usr/bin/bash -x # Create: 2024-01-01 OET_PATH$( cd $(dirname $0) || exit 1 pwd ) source $OET_PATH/../../common/common_lib.sh # 环境准备 function pre_test() { LOG_INFO 开始准备测试环境 OLD_LANG$LANG export LANGen_US.UTF-8 LOG_INFO 测试环境准备完成 } # 用例执行 function run_test() { LOG_INFO 开始测试ls命令... # 测试基本ls功能 ls /tmp CHECK_RESULT $? # 测试长格式显示 ls -l /tmp CHECK_RESULT $? # 测试显示隐藏文件 ls -a /tmp CHECK_RESULT $? # 测试帮助信息 ls --help | grep -E Usage|用法 CHECK_RESULT $? LOG_INFO ls命令测试完成 } # 环境清理 function post_test() { LOG_INFO 开始恢复测试环境 export LANG${OLD_LANG} LOG_INFO 测试环境恢复完成 } main $将脚本保存为sut/env_check/smoke_test/local_sh/01_files_directories/oe_test_ls.sh步骤2创建对应的actor类在sut/env_check/check_actor/目录下创建新的actor文件或者添加到现有的actor文件中。以添加到basic_commands_actor.py为例# -*- coding: utf-8 -*- from sut.env_check.check_actor.oe_base_actor import OeBaseActor class OeLsActor(OeBaseActor): name OeLsActor description 检查ls命令功能是否正常 level High priority mandatory task_type (OeBaseActor.task_type.SYSTEM_UPGRADE,) sh_file 01_files_directories/oe_test_ls.sh步骤3理解actor属性配置每个actor需要配置以下关键属性name: actor的唯一标识符建议使用描述性名称description: actor的功能描述会在检查结果中显示level: 检查级别可以是High/Medium/Lowpriority: 优先级mandatory表示必须通过optional表示可选task_type: 任务类型可以是系统升级、配置迁移等sh_file: 对应的测试脚本路径相对于smoke_test/local_sh步骤4测试脚本编写规范测试脚本需要遵循统一的格式环境准备函数 (pre_test): 设置测试环境如语言环境、临时文件等测试执行函数 (run_test): 执行具体的命令测试环境清理函数 (post_test): 恢复测试环境结果检查: 使用CHECK_RESULT $?检查命令执行结果实战案例创建网络配置检查actor让我们通过一个实际案例来演示如何创建一个检查网络配置的actor。1. 创建网络测试脚本在sut/env_check/smoke_test/local_sh/04_network/目录下创建oe_test_network_config.sh#!/usr/bin/bash -x # Create: 2024-01-01 OET_PATH$( cd $(dirname $0) || exit 1 pwd ) source $OET_PATH/../../common/common_lib.sh # 环境准备 function pre_test() { LOG_INFO 开始准备网络测试环境 OLD_LANG$LANG export LANGen_US.UTF-8 LOG_INFO 网络测试环境准备完成 } # 用例执行 function run_test() { LOG_INFO 开始网络配置检查... # 检查网络接口 ip link show CHECK_RESULT $? # 检查IP地址配置 ip addr show CHECK_RESULT $? # 检查路由表 ip route show CHECK_RESULT $? # 检查DNS配置 cat /etc/resolv.conf CHECK_RESULT $? # 测试网络连通性 ping -c 3 8.8.8.8 CHECK_RESULT $? LOG_INFO 网络配置检查完成 } # 环境清理 function post_test() { LOG_INFO 开始恢复测试环境 export LANG${OLD_LANG} LOG_INFO 测试环境恢复完成 } main $2. 创建网络检查actor在sut/env_check/check_actor/目录下创建network_config_actor.py# -*- coding: utf-8 -*- from sut.env_check.check_actor.oe_base_actor import OeBaseActor class OeNetworkConfigActor(OeBaseActor): name OeNetworkConfigActor description 检查系统网络配置是否正常 level High priority mandatory task_type (OeBaseActor.task_type.SYSTEM_UPGRADE,) sh_file 04_network/oe_test_network_config.sh class OePingActor(OeBaseActor): name OePingActor description 检查ping命令和网络连通性 level Medium priority mandatory task_type (OeBaseActor.task_type.SYSTEM_UPGRADE,) sh_file 04_network/oe_test_ping.sh class OeNetstatActor(OeBaseActor): name OeNetstatActor description 检查网络连接状态 level Medium priority optional task_type (OeBaseActor.task_type.SYSTEM_UPGRADE,) sh_file 04_network/oe_test_netstat.sh高级扩展技巧1. 自定义检查逻辑如果需要更复杂的检查逻辑可以直接继承BaseCheckActor而不是OeBaseActor# -*- coding: utf-8 -*- import subprocess import json from sut.env_check.check_actor.base_check_actor import BaseCheckActor, ReturnMessage class CustomServiceActor(BaseCheckActor): name CustomServiceActor description 自定义服务状态检查 level High priority mandatory task_type (BaseCheckActor.task_type.SYSTEM_UPGRADE,) staticmethod def run(node): solution message {} failed_reason try: # 检查系统服务状态 result subprocess.run([systemctl, is-active, sshd], capture_outputTrue, textTrue) if result.returncode 0 and result.stdout.strip() active: message[sshd_status] active return ReturnMessage(BaseCheckActor.SUCCESS, solution, message, failed_reason) else: failed_reason fSSH服务状态异常: {result.stdout.strip()} solution 请检查sshd服务配置并重启服务 return ReturnMessage(BaseCheckActor.FAIL, solution, message, failed_reason) except Exception as e: failed_reason f检查服务状态时发生异常: {str(e)} solution 请检查系统服务管理工具是否可用 return ReturnMessage(BaseCheckActor.FAIL, solution, message, failed_reason)2. 参数化检查可以通过node参数传递配置信息实现参数化检查class ParametricCheckActor(BaseCheckActor): name ParametricCheckActor description 参数化系统检查 level Medium priority mandatory task_type (BaseCheckActor.task_type.SYSTEM_UPGRADE,) staticmethod def run(node): solution message {} failed_reason # 从node参数获取配置 check_items node.get(check_items, []) threshold node.get(threshold, 80) for item in check_items: # 根据配置执行相应的检查 pass return ReturnMessage(BaseCheckActor.SUCCESS, solution, message, failed_reason)3. 批量检查多个命令可以创建一个actor来批量检查多个相关命令class MultipleCommandsActor(BaseCheckActor): name MultipleCommandsActor description 批量检查文件操作命令 level Medium priority mandatory task_type (BaseCheckActor.task_type.SYSTEM_UPGRADE,) staticmethod def run(node): solution message {} failed_commands [] commands_to_check [ls, cp, mv, rm, mkdir] for cmd in commands_to_check: try: result subprocess.run([which, cmd], capture_outputTrue, textTrue) if result.returncode ! 0: failed_commands.append(cmd) message[f{cmd}_status] not found else: message[f{cmd}_status] available message[f{cmd}_path] result.stdout.strip() except Exception as e: failed_commands.append(cmd) message[f{cmd}_status] error if failed_commands: failed_reason f以下命令检查失败: {, .join(failed_commands)} solution 请安装缺失的命令或检查PATH环境变量 return ReturnMessage(BaseCheckActor.FAIL, solution, message, failed_reason) else: return ReturnMessage(BaseCheckActor.SUCCESS, solution, message, )调试和测试技巧1. 本地测试actor在开发过程中可以单独测试actor的功能# test_actor.py import sys sys.path.append(/path/to/env_check) from sut.env_check.check_actor.your_new_actor import YourNewActor # 创建测试节点 test_node { hostname: test-host, config: {} } # 执行检查 result YourNewActor.run(test_node) print(f检查结果: {result.result}) print(f解决方案: {result.solution}) print(f失败原因: {result.failed_reason}) print(f详细信息: {result.message})2. 查看执行日志env_check会生成详细的执行日志位于当前目录的env_check.log文件中。通过查看日志可以了解actor的执行过程和问题# 查看最近的日志 tail -f env_check.log # 查看特定actor的日志 grep OeLsActor env_check.log3. 验证测试脚本在集成到actor之前先单独运行测试脚本# 给脚本添加执行权限 chmod x sut/env_check/smoke_test/local_sh/01_files_directories/oe_test_ls.sh # 执行测试脚本 bash -x sut/env_check/smoke_test/local_sh/01_files_directories/oe_test_ls.sh最佳实践建议1. 命名规范actor类名使用Oe[功能]Actor格式测试脚本使用oe_test_[功能].sh格式保持命名一致性和可读性2. 错误处理在测试脚本中做好错误检查和清理在actor中捕获异常并提供有意义的错误信息区分警告和错误合理设置priority3. 性能考虑避免长时间运行的检查对于耗时操作考虑设置超时机制合理使用缓存避免重复检查4. 文档化为每个actor编写清晰的描述在测试脚本中添加必要的注释记录检查项的预期行为和失败处理方案总结通过env_check的actor扩展机制我们可以轻松地为系统健康检查添加新的检查项。无论是简单的命令检查还是复杂的配置验证都可以通过创建相应的actor来实现。关键要点继承合适的基类系统命令检查使用OeBaseActor复杂逻辑使用BaseCheckActor遵循测试脚本规范统一的三段式结构准备-执行-清理合理配置actor属性正确设置name、description、level和priority完善的错误处理提供清晰的错误信息和解决方案充分的测试验证在集成前充分测试actor和测试脚本env_check的扩展开发不仅简单高效而且具有良好的可维护性。通过模块化的设计我们可以持续为系统健康检查添加新的能力确保openEuler系统升级后的稳定性和可靠性。现在你已经掌握了env_check扩展开发的核心技能可以开始创建自己的自定义检查actor了【免费下载链接】env_checkA tool for health checking after operating system upgrade项目地址: https://gitcode.com/openeuler/env_check创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考