vrcx 0.2.0-dev: BMC + SDS parallel collector
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/
This commit is contained in:
@@ -0,0 +1,68 @@
|
||||
# Contributing
|
||||
|
||||
> Project layout, build, and release flow. **If you only want to use the tool — read [README](README.md) 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
|
||||
|
||||
1. Update `src/bmccollect/__init__.py` — bump `__version__` to `X.Y.Z`.
|
||||
2. Update `CHANGELOG.md` — move items from `[Unreleased]` into a new `[X.Y.Z]` section with today's date.
|
||||
3. Commit: `git commit -am "vX.Y.Z: …"`.
|
||||
4. Tag: `git tag vX.Y.Z`.
|
||||
5. 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` |
|
||||
Reference in New Issue
Block a user