|
| 1 | +# Changelog |
| 2 | + |
| 3 | +All notable changes to psa-cli are documented in this file. |
| 4 | + |
| 5 | +The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/), |
| 6 | +and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). |
| 7 | + |
| 8 | +## [0.3.0] — 2026-05-12 |
| 9 | + |
| 10 | +**First public release.** psa-cli is now open source under the MIT license. This release collapses the un-tagged 0.2.1 through 0.2.5 development work into the first public cut. |
| 11 | + |
| 12 | +> :warning: **Pre-1.0 / beta.** Not yet recommended for production. The CLI surface, config schema, and command behavior may change before 1.0. |
| 13 | +
|
| 14 | +### Highlights |
| 15 | + |
| 16 | +- **Domain lifecycle** — `psa domain list / status / start / stop / restart / bounce / compare` with Rich-rendered output, JSON mode, quiet/verbose flags, and `--force` confirmation skips. |
| 17 | +- **DPK workflow** — end-to-end PeopleSoft DPK provisioning: `psa dpk stage → setup → init → sync → apply → cleanup`, including a 3-tier Hiera layout, `dpk module install` for custom Puppet modules, `dpk facts` for site facts, and `dpk lookup` for hiera key resolution. |
| 18 | +- **`psa dpk apply --summary`** — filtered, readable Puppet apply output with surfaced errors, exit-code mapping, and ANSI handling. |
| 19 | +- **Discovery** — `psa discover` finds local PeopleSoft domains and can report results to a configured API. |
| 20 | +- **Configuration** — `psa config setup` (interactive + `--yes` non-interactive), `psa config show`, `psa config set` for individual keys, with auto-detection of `PS_*` and `DPK_*` paths. |
| 21 | +- **Resilient file operations** — `SudoFileOps` abstraction transparently cascades to `sudo` when the runtime user lacks write permission, with timeout-driven diagnostics for missing passwordless sudo. |
| 22 | + |
| 23 | +### Added since v0.2.0 |
| 24 | + |
| 25 | +#### Domain |
| 26 | +- `psa domain compare` replaces `psa domain drift`; archive picker, archive age display, raw-config diff that handles `%PS_SERVDIR%` vars |
| 27 | +- Global `-q/--quiet` / `-v/--verbose` flags; Rich spinners |
| 28 | +- `--force/-f` flag (renamed from `--yes/-y`) on destructive operations |
| 29 | +- `psa domain status --json` with full process detail |
| 30 | +- Web tier renamed `pia` → `web`; status/start/stop route through `psadmin -w` for PT 8.62 |
| 31 | +- Graceful already-stopped / already-purged handling |
| 32 | + |
| 33 | +#### DPK |
| 34 | +- `psa dpk` command group consolidates DPK provisioning |
| 35 | +- `psa dpk module install <org/repo>` with `--branch`, `--dry-run`, `--as <name>` |
| 36 | +- `psa dpk facts` (writes to `/etc/`, not the DPK install tree) |
| 37 | +- `psa dpk init` auto-creates config, generates `hiera.yaml` (eyaml backend), 3-tier hiera layout |
| 38 | +- `psa dpk lookup` for hiera key resolution |
| 39 | +- `psa dpk apply --summary` mode + puppet error surfacing + stderr scanning + Rich bypass for raw streams |
| 40 | +- `psa dpk apply` auto-sudo to root unless already root or `runtime_user` |
| 41 | +- `psa dpk sync` with `SudoFileOps` permission fallback |
| 42 | +- `psa dpk status --json` + manifest parsing |
| 43 | +- `psa dpk cleanup --domains-only` for scoped domain+service teardown |
| 44 | +- `psa dpk stage --version` and `--dry-run` fix |
| 45 | +- Split `DPK_BASE` vs `DPK_HOME` with `--dpk-cust-home` flag |
| 46 | +- EL 9+ ncurses prereq: per-lib symlink fallback |
| 47 | +- OL8/RHEL8+ libnsl in DPK prereq checks |
| 48 | +- DPK repo commands: `init`, `status`, `list` |
| 49 | + |
| 50 | +#### Config |
| 51 | +- `psa config set` for individual config keys (`ps_cfg_home`, `ps_base`, `ps_home`, etc.) |
| 52 | +- `psa config show` groups DPK paths, uppercases path labels |
| 53 | +- `DPK_CUST_HOME` foundation (renamed from `PSA_CUST`) |
| 54 | +- `psa ops setup` moved out of `config` group (hidden by default) |
| 55 | + |
| 56 | +#### Quality / internal |
| 57 | +- Minimum Python bumped to 3.9 |
| 58 | +- `SudoFileOps` centralized file operations |
| 59 | +- Resilient domain discovery (skips permission errors, scopes by type) |
| 60 | +- Test fixes: verbosity reset, tmadmin process-table parsing, "Started" prcs pattern |
| 61 | +- Demo-lab regression fixes: status parser, PIA paths, empty errors, PS path auto-detect |
| 62 | + |
| 63 | +### Removed |
| 64 | + |
| 65 | +- `psa cache` and `psa secrets` (stub commands that were never wired into the CLI) |
| 66 | +- `psa domain drift` (replaced by `psa domain compare`) |
| 67 | +- `psa ops register` (folded into `psa ops setup`) |
| 68 | +- `start/stopPIA.sh` shim (now routes through `psadmin -w`) |
| 69 | +- `io_base` config key |
| 70 | + |
| 71 | +### Known limitations |
| 72 | + |
| 73 | +- **Encrypted password leak in JSON** — `psa domain --json` includes raw config content that contains encrypted password fields (`ConnectPswd`, `OprPswd`, etc). Values are encrypted, not cleartext, but should not appear in piped output. Tracked as issue #23, fix planned for 0.4. |
| 74 | +- **`psa ops` is hidden** — depends on the private psadmin.io ops API; not intended for general public use in this release. |
| 75 | +- **`psa kit` is gated** — requires `enable_psa_kit: true` in config and SSH access to the private `psadmin-io/psa-kit` repository. |
| 76 | +- Tested against **PeopleTools 8.62**; older versions may work but are unverified. |
| 77 | +- No PyPI release yet — install from the GitHub release wheel or from source. |
| 78 | + |
| 79 | +### Compatibility |
| 80 | + |
| 81 | +- Python 3.9, 3.10, 3.11, 3.12 |
| 82 | +- Linux (Oracle Linux 8/9, RHEL 8/9 covered; other distros likely fine) |
| 83 | +- PeopleTools 8.62 |
| 84 | + |
| 85 | +[0.3.0]: https://github.com/psadmin-io/psa-cli/releases/tag/v0.3.0 |
0 commit comments