CI pipelines target a named environment (for example production, staging, eu-prod). The CLI resolves that name to a Deslicer tenant and Observer backend via deslicer-ai.
Environment definitions live in the repository under:
.deslicer/environments/
├── production.yml
├── staging.yml
└── 550e8400-e29b-41d4-a716-446655440000.json
Supported extensions: .yml, .yaml, .json.
The filename stem (without extension) is the environment name passed to --environment:
| File | --environment value |
|---|---|
.deslicer/environments/production.yml |
production |
.deslicer/environments/staging.yaml |
staging |
.deslicer/environments/eu-prod.json |
eu-prod |
Example:
deslicer change plan --environment productionWhen portal bindings are ambiguous (exit code 7) or you need to pin an exact tenant without a friendly alias, name the file after the tenant UUID:
.deslicer/environments/550e8400-e29b-41d4-a716-446655440000.yml
Reference it directly:
deslicer auth login --environment 550e8400-e29b-41d4-a716-446655440000UUID stems bypass fuzzy name matching and map one-to-one to the tenant record encoded in the file or resolved via the portal.
Environment files carry metadata used by the Action layer and portal (Plan 1d). Typical fields:
# .deslicer/environments/production.yml
tenant_code: acme-prod
description: Production Splunk fleet
target_group: plant-aExact schema validation is enforced by the composite Action and portal — the CLI consumes the resolved binding after OIDC auth, not by walking these files itself.
Important: walking .deslicer/environments/ to list available environments is performed by the GitHub Action / composite Action layer (Plan 1d — deslicer/change-action), not by the deslicer CLI binary.
The CLI accepts --environment <name> and validates the binding through deslicer-ai after authentication. It does not glob the directory locally.
For local discovery, list files manually:
ls .deslicer/environments/Two layers cooperate:
- Portal (deslicer-ai) — maps
(repository, environment, OIDC subject)→ tenant + Observer URL. Required for CI OIDC. - Repo files (
.deslicer/environments/*) — document and pin environment names for Actions/workflows; UUID stems disambiguate.
A missing portal binding causes exit code 6 even if a repo file exists. A missing repo file does not block the CLI when the portal binding is correct.
Monorepos may define many files:
.deslicer/environments/
├── production.yml
├── staging.yml
├── dev.yml
└── dr-failover.yml
Select per job:
- run: deslicer change deploy --environment staging
- run: deslicer change deploy --environment production
if: github.ref == 'refs/heads/main'When resolve-backend cannot reach deslicer-ai, operators may set OBSERVER_API_URL to talk to Observer directly. Environment files still name the logical target for workflows; the override is a break-glass path documented in installation.md.