OCI(Oracle Cloud Infrastructure)操作辅助工具。
- 查询实例:列出当前用户可见 compartment 下的计算实例及其状态。
- 轮询自动开启:按可配置的时间间隔轮询,自动将处于
STOPPED状态的实例开启。
本项目使用 Python 虚拟环境隔离依赖,所有依赖(含 OCI Python SDK)都安装在 .venv/
中,不影响系统 Python。
python -m venv .venv若提示缺少
venv模块,Debian/Ubuntu 可先执行sudo apt install python3-venv。
激活后,终端提示符前通常会出现 (.venv) 字样,此后 python / pip / oci-help
都会指向虚拟环境内的版本。
-
Linux / macOS(bash/zsh):
source .venv/bin/activate -
Windows(CMD):
.venv\Scripts\activate.bat
-
Windows(PowerShell):
.venv\Scripts\Activate.ps1
pip install -e .-e 表示以“可编辑”方式安装,后续修改代码无需重新安装。
oci-help --help能正常打印帮助信息即说明安装与虚拟环境均就绪。
若不想先 source 激活,也可以直接用虚拟环境里的可执行文件:
.venv/bin/oci-help --help # Linux / macOS
.venv\Scripts\oci-help.exe --help # Windowsdeactivate修改了 ocihelper/ 下的源码后,可编辑安装会自动同步;若改动涉及依赖或打包元数据,
重新执行一次:
pip install -e .依赖 OCI Python SDK,需提前准备好 OCI 配置文件与 API 密钥(参考 https://docs.oracle.com/en-us/iaas/Content/API/Concepts/apisigningkey.htm )。
项目所有配置与凭证统一放在 config/ 目录下:
config/
├── config.example.yaml # 应用配置示例(提交到仓库)
├── config.yaml # 应用实际配置(不提交,本地使用)
├── oci_config.example # OCI SDK 配置示例(提交到仓库)
├── oci_config # OCI SDK 实际配置(不提交,含凭证)
└── oci_api_private_key.pem # API 私钥(不提交)
复制示例并填入真实值:
cp config/config.example.yaml config/config.yaml
cp config/oci_config.example config/oci_config应用配置(config/config.yaml)说明:
oci:
config_file: config/oci_config # OCI SDK 配置文件路径
profile: DEFAULT # 配置中的 profile 名称
monitor:
poll_interval: 300 # 轮询间隔(秒)
compartments: [] # 要扫描的 compartment OCID;为空则使用 tenancy 根
name_filter: "" # 仅作用于匹配的 display name(正则,可选)
dry_run: false # true 时只记录不实际开启
telegram:
token: "" # 通过 @BotFather 获取的 token;留空则禁用通知
user_id: "" # 通过 @myidbot 获取的聊天 ID;留空则禁用通知
notify_on_start: true # 程序启动成功时发送通知
notify_on_failure: true # 启动实例失败时发送通知(可配置是否发送)
notify_on_success: true # 启动实例成功时发送通知启用 Telegram 通知:token 通过 @BotFather 创建 bot 获取,user_id 通过 @myidbot 发送 /start 获取,填入上述配置即可。token 或 user_id 为空时不发送任何通知,也不影响主流程。
下面是从零到运行的一条完整命令流(假设已进入项目根目录):
# 1) 创建并激活虚拟环境
python -m venv .venv
source .venv/bin/activate # Windows 见上文对应命令
# 2) 安装依赖
pip install -e .
# 3) 准备配置文件(复制示例后按需修改)
cp config/config.example.yaml config/config.yaml
cp config/oci_config.example config/oci_config
# 编辑 config/config.yaml 填入 telegram token/user_id(可选)
# 编辑 config/oci_config 确认 user/tenancy/region/key_file 正确
# 4) 查询当前实例(只读,安全)
oci-help list
# 5) 试运行:只记录将要开启的实例,不真正开机
oci-help monitor --dry-run
# 6) 真正开启一次后退出
oci-help monitor --once
# 7) 后台持续轮询(按 config 中的 poll_interval)
oci-help monitor若未激活 venv,可把上面的
oci-help替换为.venv/bin/oci-help。
列出当前用户可见 compartment 下的实例(OCID / 名称 / 状态 / compartment):
oci-help list可选参数:
--compartment OCID:指定要扫描的 compartment(可多次传入);不指定时使用 tenancy 根。--name-filter REGEX:按实例 display name 正则过滤。
oci-help list --compartment ocid1.compartment.oc1..xxxx --name-filter '^web-'按配置的时间间隔轮询,自动对处于 STOPPED 状态的实例执行 START:
oci-help monitor常用参数(均可覆盖配置文件中的对应项):
--poll-interval 秒:轮询间隔。--compartment OCID:指定 compartment(可多次)。--name-filter REGEX:仅对匹配的实例操作。--dry-run:只记录将要执行的操作,不真正开启实例(用于验证)。--once:只执行一次轮询后立即退出(用于单次手动触发 / 测试)。
示例:
oci-help monitor --dry-run # 试运行,不实际开机
oci-help monitor --once # 立即尝试开启一次后退出
oci-help monitor --poll-interval 120 --name-filter '^test-'bash setup.sh命令行参数 > config/config.yaml > config/config.example.yaml/默认值。
未指定 compartment 时,默认扫描 tenancy 根 compartment。
在 config/config.yaml 的 telegram 段填入 token(@BotFather 获取)与
user_id(@myidbot 发送 /start 获取)后即启用通知。token 或 user_id
为空时不发送任何通知,也不影响主流程。可分别通过 notify_on_start /
notify_on_failure / notify_on_success 控制启动成功、启动失败、每次成功开启
的通知开关。