Initial commit of vrcx (Vegman Remote Collect, extended) — the BMC-only bmccollect renamed and extended with a parallel SDS-host log branch. - dev/prod/old repo layout - per-host bmc/ + os/ subdirs, archives/dump_<ip>.tar.gz, outer session tarball - SdsSession (paramiko, sudo via -S), OS_COMMAND_TABLE (lsiget, storcli, smartctl, journal, dmidecode, etc.) - SDS IP discovery via Redfish EthernetInterfaces -> /24 ping-sweep -> arp -a - UI shows BMC|OS dual progress per host - CI/pyinstaller paths updated for dev/
2.7 KiB
2.7 KiB
Contributing
Project layout, build, and release flow. If you only want to use the tool — read README instead.
Repo layout
bmccollect/
├── .github/
│ ├── workflows/release.yml ← CI: tag-driven build + GitHub Release
│ └── ISSUE_TEMPLATE/ ← bug / feature / security routing
├── src/bmccollect/ ← package source (≤200 lines per module)
│ ├── __init__.py ← single source of truth for __version__
│ ├── __main__.py ← entry: python -m bmccollect
│ ├── app.py ← orchestration: prompts, threads, packaging
│ ├── platform_win.py ← VT enable
│ ├── update_check.py ← GitHub /releases/latest poll
│ ├── commands.py ← table of "filename → how to obtain it"
│ ├── bmc.py ← BmcSession (SSH + Redfish helper)
│ ├── collector.py ← per-host collect loop
│ ├── tarball.py ← layout, per-host & session tar.gz
│ └── ui.py ← rich-based TUI
├── bmccollect-launcher.py ← PyInstaller entry (root, absolute import)
├── pyproject.toml ← deps, packaging, dynamic version
├── CHANGELOG.md / CONTRIBUTING.md / LICENSE / README.md / SECURITY.md
└── .gitignore
Run from source
python -m pip install rich paramiko
PYTHONPATH=src python -m bmccollect
Editable install
python -m pip install -e .
bmccollect
Build the portable .exe
python -m pip install pyinstaller rich paramiko
python -m PyInstaller --onefile --console --name bmccollect --paths src bmccollect-launcher.py
Cut a release
- Update
src/bmccollect/__init__.py— bump__version__toX.Y.Z. - Update
CHANGELOG.md— move items from[Unreleased]into a new[X.Y.Z]section with today's date. - Commit:
git commit -am "vX.Y.Z: …". - Tag:
git tag vX.Y.Z. - Push:
git push && git push --tags.
CI builds the exe and creates the GitHub Release with the zip attached.
Where features go
| Adding... | Touch this module |
|---|---|
| A new artefact (file in the dump) | commands.py → one new CommandSpec row |
| Support for a new BMC API (e.g. IPMI) | bmc.py → add a method on BmcSession; reference it from commands.py with a new kind |
| New per-host UI column / progress detail | ui.py → Ui._render_table + set_progress / set_summary |
| Different output naming or layout | tarball.py |
| Tweaking the startup banner / prompts | app.py → main / _prompt_inputs |