net-shell 0.4.5

A script execution and variable extraction framework with SSH remote execution and local execution support, pipeline orchestration, and flexible variable extraction via regex.
Documentation
# Net-Shell 项目概述

Net-Shell 是一个用 Rust 编写的强大脚本执行和变量提取框架,支持通过 SSH 进行远程执行和本地执行,具有流水线编排功能和通过正则表达式进行灵活变量提取的能力。

## 项目结构

```
net-shell/
├── src/                    # 源代码目录
│   ├── main.rs            # 主程序入口
│   ├── lib.rs             # 库入口
│   ├── models/mod.rs      # 数据模型定义
│   ├── config/mod.rs      # 配置管理
│   ├── executor/mod.rs    # 执行器实现
│   ├── ssh/mod.rs         # SSH 连接管理
│   ├── ssh/local.rs       # 本地执行
│   └── vars/mod.rs        # 变量管理
├── scripts/               # 脚本目录
│   ├── global.sh          # 全局脚本
│   ├── get_system_info.sh # 系统信息获取脚本
│   ├── deploy.sh          # 部署脚本
│   └── verify.sh          # 验证脚本
├── config.yaml            # 配置文件
├── Cargo.toml             # Rust 项目配置
└── README.md              # 项目文档
```

## 核心功能

1. **混合执行模式**:支持本地和远程(通过SSH)脚本执行
2. **变量提取**:使用正则表达式从命令输出中提取变量
3. **流水线编排**:链式执行多个步骤,支持步骤间变量传递
4. **实时输出**:流式显示命令执行输出
5. **灵活配置**:基于YAML的配置,支持多服务器配置
6. **错误处理**:健壮的错误处理和日志记录

## 构建和运行

### 构建项目

```bash
cargo build --release
```

### 运行项目

使用默认配置文件:
```bash
cargo run
```

指定自定义配置文件:
```bash
cargo run -- config_custom.yaml
```

### 安装为二进制工具

```bash
cargo install net-shell
# 安装后的可执行文件名为 main
```

## 配置说明

### 配置文件结构

配置文件使用 YAML 格式,主要包含以下部分:

1. **全局变量**:定义可在整个配置中引用的变量
2. **客户端配置**:定义 SSH 客户端用于远程执行
3. **流水线定义**:包含多个步骤的执行流水线
4. **全局脚本**:在运行步骤前加载的全局脚本

### 变量引用

在配置文件中可以使用 `{{ variable_name }}` 语法引用变量:
- 全局变量:`{{ master_ip }}`
- 步骤内变量:`{{ step_var }}`
- 脚本目录:`{{ script_dir }}`

### 变量提取

使用正则表达式从命令输出中提取变量:

```yaml
extract:
  - name: "os_version"
    patterns: ["OS Version: (.+)"]
    source: "stdout"
  - name: "version_number"
    patterns: 
      - "Version: (.+)"
      - "(\\d+\\.\\d+\\.\\d+)"  # 级联提取版本号
    source: "stdout"
```

## 开发约定

### 代码风格

- 使用 Rust 2021 版本
- 使用 `serde` 进行序列化/反序列化
- 使用 `tokio` 进行异步处理
- 使用 `tracing` 进行日志记录
- 使用 `anyhow` 进行错误处理

### 测试

运行测试:
```bash
cargo test
```

### 脚本约定

- 脚本文件存放在 `scripts/` 目录下
- 全局脚本为 `global.sh`,在每个步骤执行前加载
- 脚本应输出结构化信息以便变量提取

## 常见使用场景

1. **应用部署**:获取系统信息 -> 部署应用 -> 验证部署
2. **环境配置**:安装 Docker -> 启动服务 -> 验证状态
3. **系统监控**:收集系统信息 -> 分析数据 -> 生成报告

## 扩展点

1. **执行方式**:当前支持 SSH 和本地执行,预留了 WebSocket 支持
2. **变量提取**:支持从 stdout、stderr 和退出码提取变量
3. **流水线编排**:支持步骤间变量传递和条件执行

## 注意事项

- SSH 密钥路径需要正确配置
- 脚本执行超时时间需要根据实际情况调整
- 变量提取正则表达式需要准确匹配输出格式
- 全局脚本中的函数可在后续脚本中使用