前言
公众号沉寂了很久,原因说复杂也简单——过去一年,一半时间在工作,一半时间在 Gap 中漂浮。
最近虽然回归职场,却陷入了一种新的倦怠:面对传统企业客户,流程繁冗、协作低效,有时甚至恨不得每天都要和人吵架;而公司内部,也并不怎么看得起我这个“不够油滑”的人。
就在这种低气压里,我终于又找回了些许乐趣。不是因为项目好玩,而是因为我重新开始写代码了——准确地说,是用 AIGC 写小工具。
这一次,我只用了五天时间,以及下班后的星巴克点滴时光,在 ChatGPT 的辅助下,写出了我的第一个 DevOps 工具:
? CraftWeave —— 一个面向“极限运维环境”的 Ansible-like 工具。
它不只是我用 AIGC 落地的第一个作品,更像是我在灰暗现实中亲手织出的一道光。在给多个传统客户提供服务的过程中,我遇到了这样一些 “奇葩但真实” 的环境:
-
❌ 没有 apt/yum,没有 Python/pip,镜像仓库不可访问 -
❌ CI/CD 无法部署,ansible 依赖过重,venv/pip 崩溃 -
❌ 所有操作靠 scp + rpm -ivh手工执行
一度想强行用 Ansible,但连 Python 环境都被锁死,根本跑不起来。于是我萌生了一个想法:
“不如自己写一个类 Ansible 工具,真正做到可执行、轻依赖、可扩展,还能在这些环境下跑起来。”
这,就是 CraftWeave 的诞生背景。
项目简介
CraftWeave 是一个融合任务编排、架构建模和轻量执行能力的 DevOps 工具集,灵感源于 Ansible,但更灵活、模块化,并具备独立运行的 Rust 轻量 Agent,适用于极限环境下的配置管理与远程运维。
核心能力
✅ 控制端(Go 实现)
|
功能 |
描述 |
|---|---|
|
craftweave ansible |
类 Ansible 命令行执行器 |
|
craftweave playbook |
支持 YAML 多步骤任务编排 |
|
craftweave vault |
加解密配置 (TODO) |
|
craftweave cmdb |
拓扑导出为图模型 (TODO) |
|
craftweave plugin |
运行插件模块,预留 WASM 扩展 (TODO) |
✅ Agent 端(Rust 实现)
|
功能 |
描述 |
|---|---|
|
cw-agent run |
单次拉取远程配置并执行 |
|
cw-agent daemon |
后台常驻运行,定期调度 |
|
cw-agent apply –file |
支持本地 JSON 配置的离线执行 |
|
状态持久化 |
执行结果保存到本地 JSON/嵌入式 DB |
|
免 Python / Shell |
纯 Rust 编写,极致轻量,跨平台部署 |
? 快速开始(控制端 CLI)
1️⃣ 编译项目
make -C CraftWeave init
make -C CraftWeave
2️⃣ 编写示例 Inventory 文件(example/inventory)
all
demo ansible_host=192.168.124.77 ansible_ssh_user=shenlan
cn-hub ansible_host=1.15.155.245 ansible_ssh_user=ubuntu
global-hub ansible_host=2.15.135.215 ansible_ssh_user=centos
all:vars
ansible_port=22
ansible_ssh_private_key_file=~/.ssh/id_rsa
3️⃣ 执行远程命令(类似 Ansible)
./CraftWeave/craftweave ansible all -i example/inventory -m shell -a 'id'
4️⃣ 输出聚合展示(推荐大规模环境)
./CraftWeave/craftweave ansible all -i example/inventory -m shell -a 'id' –aggregate
5️⃣ 上传并执行本地脚本
./CraftWeave/craftweave ansible all -i example/inventory -m script -a example/uname.sh
6️⃣ 执行 YAML Playbook 任务编排
示例 example/playbook.yaml:
- name: 系统信息检查
hosts: all
tasks:
- name: 获取主机名
module: shell
args: hostname
- name: 查看内核版本
module: shell
args: uname -r
执行命令:
./CraftWeave/craftweave playbook -i example/inventory -f example/playbook.yaml


