Skip to content

Add Vultr cloud module set (live-validated)#354

Merged
anshulsao merged 3 commits into
mainfrom
feat/vultr-modules
Jun 9, 2026
Merged

Add Vultr cloud module set (live-validated)#354
anshulsao merged 3 commits into
mainfrom
feat/vultr-modules

Conversation

@anshulsao

Copy link
Copy Markdown
Contributor

Vultr cloud module set (mirror of Linode)

Adds a full Vultr cloud module set — 6 modules + 4 output types + a vultr project type + ONBOARDING + README + a wired sample blueprint — mirroring the Linode set one-for-one.

Modules

  • cloud_account/vultr_provider@facets/vultr_cloud_account (exposes the vultr provider; API key as secret-ref)
  • network/vultr_vpc@facets/vultr-vpc-details
  • kubernetes_cluster/vke@facets/vke + @facets/kubernetes-details (exposes kubernetes + helm)
  • kubernetes_node_pool/vke@facets/kubernetes_nodepool
  • object_storage/vultr@facets/vultr-object-storage
  • datastore/postgres/vultr@facets/postgres

Live end-to-end validation ✅

Deployed the full sample stack on real Vultr infra (demo CP, region ewr) and confirmed it stands up end to end: cloud → VPC → VKE cluster (v1.35.5+1, 5× vc2-2c-4gb nodes) → object storage (ewr1) + managed Postgres (pg16). Release SUCCEEDED, environment RUNNING.

Fix found during live validation

Object storage cluster selection (906477e): the vultr_object_storage_cluster data source failed with "too many results" because Vultr now exposes multiple object-storage clusters per region (e.g. ewrewr1, ewr2). The singular data source rejects a filter matching >1 cluster and the provider has no list-and-pick variant. Switched selection from the ambiguous region to the unique cluster_hostname (default ewr1.vultrobjects.com); fixed tier docs (1=Legacy, 2=Standard) and defaulted tier_id to Standard. Live-validated: object storage created active on ewr1.vultrobjects.com.

Note for reviewers (volatile, not code issues)

  • VKE k8s_version is a volatile full string; Vultr rotated supported versions (now v1.36.1+1 / v1.35.5+1 / v1.34.8+1). The module correctly models it as a free-string; blueprint values must track Vultr's current list.
  • Security scan was skipped (Trivy not installed locally) — same as the Linode build.

🤖 Generated with Claude Code

anshulsao and others added 3 commits June 9, 2026 11:42
Mirrors the Linode redesign module set one-for-one for Vultr, using the
official vultr/vultr provider (v2.31.2). All modules pass terraform validate
and raptor create iac-module --dry-run; uploaded + published to the demo CP
and wired into a vultr-demo sample blueprint (account -> vpc -> vke ->
node pool + object storage + managed postgres).

Modules:
- cloud_account/vultr_provider  -> @facets/vultr_cloud_account (exposes vultr provider, API key from secret store)
- network/vultr_vpc             -> @facets/vultr-vpc-details (legacy vultr_vpc; VKE is NOT compatible with VPC 2.0)
- kubernetes_cluster/vke        -> @facets/vke + @facets/kubernetes-details (client-cert auth; exposes kubernetes + helm)
- kubernetes_node_pool/vke      -> @facets/kubernetes_nodepool
- object_storage/vultr          -> @facets/vultr-object-storage (S3 subscription, not a bucket)
- datastore/postgres/vultr      -> @facets/postgres (Vultr Managed Database)

Also: vultr project type, ONBOARDING guide, README Vultr section, and a
cloud-neutral object_storage icon (was missing for the object_storage intent).

Vultr-specific deviations from the Linode template (provider-driven):
- VKE requires the original VPC (vultr_vpc), not the deprecated VPC 2.0
- VKE auth is client certificate/key, not a bearer token
- Vultr object storage is a subscription (S3 endpoint + keys), no ACL/versioning
- DB plan is a single slug; k8s version is a volatile full string (v1.35.0+1)

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
The vultr_object_storage_cluster data source errored with 'too many results'
during live deploy because Vultr now exposes multiple object storage clusters
per region (e.g. ewr -> ewr1, ewr2). The singular data source rejects a filter
that matches >1 cluster, and the provider offers no list-and-pick variant.

Select the cluster by its unique hostname instead of the ambiguous region.
Spec: region -> cluster_hostname (default ewr1.vultrobjects.com). Fix tier docs
(1=Legacy, 2=Standard) and default tier_id to 2 (Standard, validated for ewr1).

Live-validated: object storage subscription created active on ewr1.vultrobjects.com.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
@anshulsao
anshulsao merged commit 4b84872 into main Jun 9, 2026
@anshulsao
anshulsao deleted the feat/vultr-modules branch June 9, 2026 11:42
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