Skip to content

feat(microvm): add Terraform new compute provider - #5260

Draft
edersonbrilhante wants to merge 42 commits into
feat-microvm-runner-providerfrom
microvm-multi-runner-terraform
Draft

feat(microvm): add Terraform new compute provider#5260
edersonbrilhante wants to merge 42 commits into
feat-microvm-runner-providerfrom
microvm-multi-runner-terraform

Conversation

@edersonbrilhante

Copy link
Copy Markdown
Contributor

Description

Adds Terraform support for the experimental MicroVM compute-provider lane without changing the existing EC2 lane behavior.

  • Adds a microvm compute-provider module and wires it through runner-stack and experimental multi_runner_config_v2 routing.
  • Moves compute-provider validations out of variable blocks into provider-specific terraform_data checks for both runner-stack and multi-runner.
  • Replaces awsDynamicLabelsPolicy = optional(any, null) with a typed policy shape matching the TypeScript contract.
  • Updates webhook provider validation and generated module docs for EC2 and MicroVM provider routing.

Test Plan

  • terraform fmt -check -recursive modules/compute-providers/ec2 modules/compute-providers/microvm modules/runner-stack modules/multi-runner modules/webhook docs/modules/internal
  • terraform -chdir=modules/compute-providers/ec2 test
  • terraform -chdir=modules/compute-providers/microvm test
  • terraform -chdir=modules/runner-stack test
  • terraform -chdir=modules/multi-runner test
  • terraform -chdir=modules/webhook init -backend=false
  • terraform -chdir=modules/webhook validate

Related Issues

Related to #5252.

@github-actions

github-actions Bot commented Aug 7, 2026

Copy link
Copy Markdown
Contributor

Dependency Review

✅ No vulnerabilities or license issues or OpenSSF Scorecard issues found.

Scanned Files

None

@edersonbrilhante
edersonbrilhante changed the base branch from main to feat-microvm-runner-provider August 7, 2026 21:18
@edersonbrilhante edersonbrilhante changed the title feat(microvm): add Terraform compute provider lane feat(microvm): add Terraform compute provider Aug 7, 2026
@edersonbrilhante edersonbrilhante changed the title feat(microvm): add Terraform compute provider feat(microvm): add Terraform new compute provider Aug 7, 2026
@edersonbrilhante
edersonbrilhante force-pushed the feat-microvm-runner-provider branch from 61e4aa2 to a638a13 Compare August 7, 2026 21:42
@edersonbrilhante
edersonbrilhante force-pushed the microvm-multi-runner-terraform branch from fef4734 to 6d76a90 Compare August 7, 2026 21:42
@edersonbrilhante
edersonbrilhante force-pushed the feat-microvm-runner-provider branch from a638a13 to 2384430 Compare August 12, 2026 22:47
edersonbrilhante and others added 18 commits August 13, 2026 00:55
…dules (#5257)

## Description

- Keep `modules/runners` and stable `multi_runner_config` dispatch
unchanged. Stable configurations retain their historical
`module.runners["configuration"]` addresses and flat `runners_map`
fields.
- Add explicit opt-in through `experimental.multi_runner_config_v2`.
Stable and experimental configurations can coexist when their keys do
not overlap; duplicate keys are rejected.
- Normalize stable v1 once for shared queues, webhook matching, and
runner-binary discovery while routing only v2 configurations through
`modules/runner-stack`.
- Make `runner-stack` the provider-neutral control plane for scale-up,
scale-down, pool, job retry, SSM housekeeping, common Lambda IAM, and
runner-role ownership.
- Keep EC2-specific launch templates, instance profiles, security
groups, AMI/bootstrap resources, runner log groups, IAM fragments, and
Lambda environment fragments under `modules/compute-providers/ec2`.
- Define provider-owned runner-role requirements in EC2 and attach them
to the common runner role in `runner-stack`, allowing future compute
providers to supply different policies without duplicating the role
lifecycle.
- Replace flat runner-stack inputs with ownership-based nested objects.
Logging configuration is grouped under `observability.logs`, including
`level`, retention, encryption, class, and tags.
- Pass the canonical `compute_provider.ec2` object and nested `runner`,
`github`, `ssm`, and `observability` objects directly into the EC2
resource and runner-role policy modules instead of expanding them back
into prefixed scalar inputs.
- Layer module, shared-resource, component, subcomponent, and EC2
runtime tags with documented precedence; provider-required EC2 bootstrap
tags retain final precedence.
- Group experimental v2 outputs by ownership: `runner.role`,
`scale_up.{lambda,log_group,role}`,
`scale_down.{lambda,log_group,role}`, nullable
`pool.{lambda,log_group,role}`, and provider-specific resources under
`provider.<type>`.
- Use caller-known optional wrappers for external AMI parameters and KMS
keys. The wrapper determines Terraform graph shape while its `arn` leaf
may remain unknown until apply.
- Generate runner-stack, pool, job-retry, and EC2 IAM policies with
`aws_iam_policy_document` and retain provider-policy merge behavior.
- Document the experimental boundary, ownership model, plan-time wrapper
pattern, phased migration, and nested output contract under the internal
module documentation path.

This draft is stacked on #5251 because the provider boundary consumes
the experimental v2 normalization introduced there.

Lambda/TypeScript terminology changes are tracked separately in #5258.

## Test Plan

- `pre-commit run --all-files` — Terraform fmt, TFLint, validation, and
merge-conflict checks passed.
- `terraform test` in `modules/runner-stack` — 11 passed.
- `terraform test` in `modules/multi-runner` — 7 passed.
- `terraform test` in `modules/compute-providers/ec2` — 4 passed.
- `terraform test` in `modules/compute-providers/ec2/runner-role` — 3
passed.
- `terraform test` in `modules/runner-stack/pool` — 1 passed.
- `terraform test` in `modules/runner-stack/job-retry` — 1 passed.
- `terraform validate` in `modules/lambda` — passed.
- Verified `modules/runners` has no diff from `origin/main`, stable v1
still dispatches only to `module.runners`, and only the experimental map
dispatches to `module.runner_stacks`.
- Verified computed external role, profile, AMI-parameter,
managed-policy, and KMS ARN inputs plan successfully through the real
wrapper fixture.

No live AWS apply was performed. Terraform tests use mocked providers,
and state migration is intentionally deferred to the later migration
phase.

## Related Issues

Closes #5252

Depends on #5251

---------

Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
@edersonbrilhante
edersonbrilhante force-pushed the microvm-multi-runner-terraform branch from 961c120 to 0123bf9 Compare August 12, 2026 23:03
@edersonbrilhante
edersonbrilhante force-pushed the feat-microvm-runner-provider branch 2 times, most recently from 7679346 to 11c97de Compare August 12, 2026 23:41
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