How it works
From subscription creation to fully configured — automatically
The service hooks into Azure Event Grid. When a new subscription is created via the Azure portal or IaC, a Microsoft.Resources.ResourceActionSuccess event fires and triggers the provisioning workflow.
Provisioning Workflow
7 deterministic steps, run every time
Steps are independent of each other. A failure in one step does not block the others. The service always returns 200 OK to Event Grid to prevent retry storms.
itl-environment tag and the configurable environment-to-MG mapping, ensuring correct policy inheritance from day one.itl-budget tag is present. Keeps teams informed before they hit their spending limit.Key Features
Built for reliability and observability
Designed to run unattended in production, with sensible defaults and full visibility into every provisioning run.
none (inline, always 200), dead_letter (500 on failure for Event Grid retry), or queue (async Storage Queue worker). Switch with a single env var.POST /webhook/replay without a real Event Grid event. Idempotent, supports dry-run, and optionally protected by a shared secret.Microsoft.Resources.ResourceActionSuccess — no polling, no cron jobs.none always returns 200, dead_letter returns 500 on failure so Event Grid retries, queue offloads async..py file in extensions/ and it self-registers at startup. Built-in extensions include webhook notify, API notify, ServiceNow gate check, and ServiceNow feedback — all activated by env vars alone.azure-identity — no secrets in environment variables. Supports Managed Identity, Workload Identity, and service principal credentials transparently.POST /webhook/preflight to validate all gate checks and simulate every provisioning step against a real subscription — zero Azure mutations, full plan output returned./jobs/* API exposes live queue stats, message peek, job lookup, DLQ purge, and direct enqueue — all accessible via the vending jobs CLI or a remote API call.GET /config returns all active settings with secrets automatically redacted. Pair with vending config validate to verify connectivity and required fields in any environment.vending CLI covers every operation — provision, preflight, enqueue, job lookup, DLQ purge, config show/validate — all with --remote for live environments and --verbose for timing output.Tech Stack
Standard Python, Azure-native SDKs
No proprietary frameworks. Swap any Azure SDK call for your own implementation without touching the webhook logic.
Documentation
Everything you need to deploy and extend
Full reference docs live alongside the code in the /docs folder.