Skip to content

Configure stops first, graceful already-stopped handling#30

Merged
kbens merged 1 commit into
stagingfrom
feature/configure-stop-first-graceful-stopped
Feb 12, 2026
Merged

Configure stops first, graceful already-stopped handling#30
kbens merged 1 commit into
stagingfrom
feature/configure-stop-first-graceful-stopped

Conversation

@kbens
Copy link
Copy Markdown
Member

@kbens kbens commented Feb 12, 2026

Summary

  • configure now stops domain first; --restart flag to start after
  • reconfigure removed (replaced by configure --restart)
  • stop/kill on already-stopped domains → warning, exit 0
  • bounce/restart stop substeps only warn on real failures
  • New _is_already_stopped() helper reusing status parser
  • skip_domain_confirm config field for all-mode confirmation skip

Test plan

  • 159/159 tests pass
  • Manual: psa domain configure APPDOM — stops then configures
  • Manual: psa domain configure APPDOM --restart — stops, configures, starts
  • Manual: psa domain stop APPDOM on stopped domain — warning, exit 0
  • Manual: psa domain bounce APPDOM on stopped domain — no spurious warning

- configure now stops domain before configuring; add --restart to start after
- Remove reconfigure (replaced by configure --restart)
- stop/kill on already-stopped domains warn instead of failing
- bounce/restart stop substeps only warn on real failures
- Add _is_already_stopped() helper reusing status parser
- Add skip_domain_confirm config field
- Tests for all new behavior
@kbens kbens merged commit cf67f1f into staging Feb 12, 2026
kbens added a commit that referenced this pull request Feb 13, 2026
* Set help title to PSA-CLI with subtitle (#12) (#17)

* Update ops command description (#13) (#18)

* Remove trailing periods from CLI help text

Standardize CLI help text by removing trailing periods across all Click command/option help strings

* Fix missed trailing period in config compare help (#20)

* Remove trailing periods from CLI help text

* Fix missed trailing period in config compare help

* Resilient discovery: skip permission errors, scope find_domain by type (#21)

- Discovery methods now catch PermissionError per-domain instead of
  crashing entire list (e.g. PIA dirs with 750 perms no longer block
  app/prcs discovery)
- find_domain() scopes to requested type, avoiding unnecessary discovery
- _find_domain() in commands catches errors cleanly instead of raw traceback

* Add SudoFileOps abstraction, refactor domain/psadmin to use centralized file operations (#22)

* Fix demo lab findings: status parser, PIA paths, empty errors, PS path auto-detect (#24)

F7: Add "is not started" pattern to status parser for app/prcs domains
F9: Fallback message when psadmin returns empty output on stop/kill
F3: PIA discovery uses config.xml for detection, globs DPK WAR path for properties
F5: PRCS/PIA inline status checks filesystem markers instead of hardcoded unknown
F1: Add ps_app_home/ps_cust_home to PsaConfig; auto-detect PS paths from runtime user env
F4: Filed as #23 (deferred — needs design decision)

* Fix status parser for tmadmin process table output (#25)

psadmin on some servers returns raw tmadmin tables (BBL, PSAPPSRV, etc.)
instead of summary "X processes running" lines. Detect BBL + "Prog Name"
header as running indicator for app/prcs domains.

Also reorder stopped checks before running checks so "is not started"
can't accidentally match a running pattern.

* Add "Started" as prcs running pattern (#26)

psadmin returns just "Started" for running prcs domains on some servers.

* Add global --quiet/--verbose flags and Rich spinners for domain commands (#27)

- Verbosity enum + run_step() helper in output.py with spinner + checkmark UX
- Global -q/-v flags in cli.py callback
- Domain commands use run_step() for multi-step operations (bounce, reconfigure, restart)
- Single-action commands (start/stop/configure/flush/purge/kill) wrapped in run_step()
- status --verbose shows full output, list --verbose shows config columns
- print_info/success/warning silenced in QUIET, print_error always prints
- Remove unused --verbose from ops report, --quiet from dpk apply/data sync
- New test_output.py covering verbosity and run_step behavior

* Configure stops first, graceful already-stopped handling (#30)

- configure now stops domain before configuring; add --restart to start after
- Remove reconfigure (replaced by configure --restart)
- stop/kill on already-stopped domains warn instead of failing
- bounce/restart stop substeps only warn on real failures
- Add _is_already_stopped() helper reusing status parser
- Add skip_domain_confirm config field
- Tests for all new behavior

* Add warn_if to run_step for already-stopped domain warnings (#31)

Show yellow ~ instead of red x when stop/kill fails on an
already-stopped domain. Updated all 5 stop substep callers.

* Add psa config set, always prompt in all-mode (#32)

* Add warn_if to run_step for already-stopped domain warnings

Show yellow ~ instead of red x when stop/kill fails on an
already-stopped domain. Updated all 5 stop substep callers.

* Add psa config set, always prompt in all-mode, show bypass hint

* Add -q/--quiet and -v/--verbose to all domain subcommands (#33)

* Graceful already-purged + summary only when multiple domains (#34)

- Add _is_already_purged() helper: warn instead of fail when cache empty
- Guard all 8 summary blocks with len(domains) > 1 to skip redundant
  ratio message for single-domain commands
- Add tests for already-purged and single-domain-no-summary

* Add warn_if to purge run_step for ~ icon on already-empty cache (#35)

* Replace `psa domain drift` with `psa domain compare`, move set-env to ops (#36)

- New `psa domain compare` command: local archive, --ops (API), --file modes
- New `src/psa/core/compare.py`: archive listing, INI/properties parsing, diff
- Add `get_latest_config()` to ApiClient
- Move `set-env` from domain to `psa ops set-env` with proper ApiClient usage
- Delete old drift command + tests, add compare + set-env tests

* Fix compare: use RawConfigParser to handle %PS_SERVDIR% vars (#37)

Real psappsrv.cfg contains %VAR% interpolation tokens that
ConfigParser chokes on. RawConfigParser skips interpolation.

* Show compared file name in no-diff output for clarity (#38)

* Add interactive archive picker to domain compare (#39) (#39)

Default mode shows numbered backup list, prompts user to select.
--latest skips picker (old behavior). --json/--quiet imply --latest.
--latest/--ops/--file now mutually exclusive.

* Add archive age display, bump to 0.2.0 (#41)

* Add human-friendly age display to archive backup selection

* Bump version to 0.2.0
@kbens kbens mentioned this pull request Feb 13, 2026
@kbens kbens deleted the feature/configure-stop-first-graceful-stopped branch May 6, 2026 15:07
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant