Metadata-Version: 2.4
Name: xyz-strata
Version: 0.0.8
Summary: Python infrastructure platform for managing VM workspaces and clusters to deploy and maintain an automated container orchestration platform.
Author-email: Vincent Huybrechts <vincent@huybrechts.xyz>
License: AGPL-3.0-or-later
Project-URL: Homepage, https://github.com/huybrechtsxyz/strata
Project-URL: Repository, https://github.com/huybrechtsxyz/strata
Project-URL: Issues, https://github.com/huybrechtsxyz/strata/issues
Keywords: infrastructure,platform,orchestration,containers,automation
Classifier: Programming Language :: Python :: 3.13
Classifier: Development Status :: 4 - Beta
Classifier: Intended Audience :: Developers
Classifier: License :: OSI Approved :: GNU Affero General Public License v3 or later (AGPLv3+)
Classifier: Operating System :: OS Independent
Requires-Python: >=3.13
Description-Content-Type: text/markdown
License-File: LICENSE
Requires-Dist: pydantic>=2.4
Requires-Dist: pyyaml>=6.0
Requires-Dist: python-hcl2>=8.0
Requires-Dist: click>=8.0
Requires-Dist: rich>=13.0
Requires-Dist: requests>=2.31
Requires-Dist: paramiko>=3.0
Requires-Dist: scp>=0.14
Requires-Dist: structlog>=24.0
Requires-Dist: opentelemetry-api>=1.20
Requires-Dist: opentelemetry-sdk>=1.20
Requires-Dist: azure-monitor-opentelemetry>=1.0
Dynamic: license-file

﻿# strata

You already have Terraform. The problem is you have eight environment folders — `dev`, `staging`, `prd`, `prd-eu`, `prd-us`, `dr`, `sandbox`, `perf` — and they are 90% identical. Every change gets applied to one folder, forgotten in three others, and you only find out when production drifts. `strata` is a YAML config layer over Terraform, Helm, and scripts that treats your environments as data, not as copy-pasted folders. One source of truth, one command to validate it, one command to deploy it.

📖 **[Full documentation](docs/README.md)**

---

## Quick Start

```bash
pipx install xyz-strata                        # install
strata sln init                                             # scaffold a new config workspace
strata validate --file stack/my-environment.yaml        # validate before you touch anything
strata deploy run --file deploy/my-environment.yaml     # deploy to the target environment
```

New here? See the [Getting Started guide](docs/platform/getting-started.md) for the full walkthrough. Dev install: `uv sync`.

---

## Automation & AI Agents

Set `STRATA_OUTPUT=json` once (or `strata config set output json`) and every command returns a structured JSON envelope on **stdout**:

```json
{
  "success": true,
  "command": "validate",
  "execution_id": "fb063135-...",
  "timestamp": "2026-05-18T14:31:47.267924",
  "data": { "validation_passed": true, "errors": [] },
  "messages": [],
  "errors": []
}
```

Key conventions for automation:

| Concern               | Guidance                                                                                        |
| --------------------- | ----------------------------------------------------------------------------------------------- |
| Output format         | Always use `--output json` or `STRATA_OUTPUT=json`                                              |
| Exit codes            | `0` success · `1` system failure · `2` bad args · `3` validation failure                        |
| Workspace             | Set `STRATA_WORK_PATH` to target a workspace without `cd`                                       |
| Error stream          | In console mode, errors go to **stderr**; structured JSON always goes to **stdout**             |
| Execution correlation | `execution_id` in the envelope maps directly to `strata audit list --execution-id <id>`         |
| Env-var overrides     | Every CLI flag has an `XYZ_<OPTION>` equivalent (`STRATA_VERBOSE=true`, `STRATA_QUIET=true`, …) |

Safe read-only commands that work outside an initialized workspace (`INIT_REQUIRED=False`): `validate`, `status`, `schema list`, `schema get`.

---

## License

GNU Affero General Public License v3.0 — see [LICENSE](LICENSE).
