Skip to content

Changelog

All notable changes to psa-cli are documented in this file.

The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.

0.3.0 — 2026-05-12

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.

⚠ Pre-1.0 / beta. Not yet recommended for production. The CLI surface, config schema, and command behavior may change before 1.0.

Highlights

  • Domain lifecyclepsa domain list / status / start / stop / restart / bounce / compare with Rich-rendered output, JSON mode, quiet/verbose flags, and --force confirmation skips.
  • 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.
  • psa dpk apply --summary — filtered, readable Puppet apply output with surfaced errors, exit-code mapping, and ANSI handling.
  • Discoverypsa discover finds local PeopleSoft domains and can report results to a configured API.
  • Configurationpsa config setup (interactive + --yes non-interactive), psa config show, psa config set for individual keys, with auto-detection of PS_* and DPK_* paths.
  • Resilient file operationsSudoFileOps abstraction transparently cascades to sudo when the runtime user lacks write permission, with timeout-driven diagnostics for missing passwordless sudo.

Added since v0.2.0

Domain

  • psa domain compare replaces psa domain drift; archive picker, archive age display, raw-config diff that handles %PS_SERVDIR% vars
  • Global -q/--quiet / -v/--verbose flags; Rich spinners
  • --force/-f flag (renamed from --yes/-y) on destructive operations
  • psa domain status --json with full process detail
  • Web tier renamed piaweb; status/start/stop route through psadmin -w for PT 8.62
  • Graceful already-stopped / already-purged handling

DPK

  • psa dpk command group consolidates DPK provisioning
  • psa dpk module install <org/repo> with --branch, --dry-run, --as <name>
  • psa dpk facts (writes to /etc/, not the DPK install tree)
  • psa dpk init auto-creates config, generates hiera.yaml (eyaml backend), 3-tier hiera layout
  • psa dpk lookup for hiera key resolution
  • psa dpk apply --summary mode + puppet error surfacing + stderr scanning + Rich bypass for raw streams
  • psa dpk apply auto-sudo to root unless already root or runtime_user
  • psa dpk sync with SudoFileOps permission fallback
  • psa dpk status --json + manifest parsing
  • psa dpk cleanup --domains-only for scoped domain+service teardown
  • psa dpk stage --version and --dry-run fix
  • Split DPK_BASE vs DPK_HOME with --dpk-cust-home flag
  • EL 9+ ncurses prereq: per-lib symlink fallback
  • OL8/RHEL8+ libnsl in DPK prereq checks
  • DPK repo commands: init, status, list

Config

  • psa config set for individual config keys (ps_cfg_home, ps_base, ps_home, etc.)
  • psa config show groups DPK paths, uppercases path labels
  • DPK_CUST_HOME foundation (renamed from PSA_CUST)
  • psa ops setup moved out of config group (hidden by default)

Quality / internal

  • Minimum Python bumped to 3.9
  • SudoFileOps centralized file operations
  • Resilient domain discovery (skips permission errors, scopes by type)
  • Test fixes: verbosity reset, tmadmin process-table parsing, "Started" prcs pattern
  • Demo-lab regression fixes: status parser, PIA paths, empty errors, PS path auto-detect

Removed

  • psa cache and psa secrets (stub commands that were never wired into the CLI)
  • psa domain drift (replaced by psa domain compare)
  • psa ops register (folded into psa ops setup)
  • start/stopPIA.sh shim (now routes through psadmin -w)
  • io_base config key

Known limitations

  • Encrypted password leak in JSONpsa 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.
  • psa ops is hidden — depends on the private psadmin.io ops API; not intended for general public use in this release.
  • psa kit is gated — requires enable_psa_kit: true in config and SSH access to the private psadmin-io/psa-kit repository.
  • Tested against PeopleTools 8.62; older versions may work but are unverified.
  • No PyPI release yet — install from the GitHub release wheel or from source.

Compatibility

  • Python 3.9, 3.10, 3.11, 3.12
  • Linux (Oracle Linux 8/9, RHEL 8/9 covered; other distros likely fine)
  • PeopleTools 8.62