Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 4 additions & 2 deletions modules/multi-runner/README.md

Large diffs are not rendered by default.

48 changes: 48 additions & 0 deletions modules/multi-runner/config.experimental.resolved.tf
Original file line number Diff line number Diff line change
Expand Up @@ -467,6 +467,54 @@ locals {
}
tags = merge(local.normalized_config.compute_provider.aws.ec2.tags, v.compute_provider.aws.ec2.tags)
})
microvm = v.compute_provider.aws.microvm == null ? null : merge(v.compute_provider.aws.microvm, {
image_arn = try(coalesce(v.compute_provider.aws.microvm.image_arn, local.normalized_config.compute_provider.aws.microvm.image_arn), null)
image_version = try(coalesce(v.compute_provider.aws.microvm.image_version, local.normalized_config.compute_provider.aws.microvm.image_version), null)
ingress_network_connectors = v.compute_provider.aws.microvm.ingress_network_connectors != null ? (
v.compute_provider.aws.microvm.ingress_network_connectors
) : local.normalized_config.compute_provider.aws.microvm.ingress_network_connectors
egress_network_connectors = v.compute_provider.aws.microvm.egress_network_connectors != null ? (
v.compute_provider.aws.microvm.egress_network_connectors
) : local.normalized_config.compute_provider.aws.microvm.egress_network_connectors
cloudwatch_agent = {
enabled = coalesce(
v.compute_provider.aws.microvm.cloudwatch_agent.enabled,
local.normalized_config.compute_provider.aws.microvm.cloudwatch_agent.enabled,
)
config = try(coalesce(
v.compute_provider.aws.microvm.cloudwatch_agent.config,
local.normalized_config.compute_provider.aws.microvm.cloudwatch_agent.config,
), null)
}
log_files = v.compute_provider.aws.microvm.log_files != null ? (
v.compute_provider.aws.microvm.log_files
) : local.normalized_config.compute_provider.aws.microvm.log_files
environment_variables = merge(
local.normalized_config.compute_provider.aws.microvm.environment_variables,
v.compute_provider.aws.microvm.environment_variables,
)
iam = {
resource_arns = {
images = v.compute_provider.aws.microvm.iam.resource_arns.images != null ? (
v.compute_provider.aws.microvm.iam.resource_arns.images
) : local.normalized_config.compute_provider.aws.microvm.iam.resource_arns.images
}
additional_policy_json = {
scale_up = try(coalesce(
v.compute_provider.aws.microvm.iam.additional_policy_json.scale_up,
local.normalized_config.compute_provider.aws.microvm.iam.additional_policy_json.scale_up,
), null)
}
managed_policies = {
scale_up = v.compute_provider.aws.microvm.iam.managed_policies.scale_up != null ? (
v.compute_provider.aws.microvm.iam.managed_policies.scale_up
) : local.normalized_config.compute_provider.aws.microvm.iam.managed_policies.scale_up
pool = v.compute_provider.aws.microvm.iam.managed_policies.pool != null ? (
v.compute_provider.aws.microvm.iam.managed_policies.pool
) : local.normalized_config.compute_provider.aws.microvm.iam.managed_policies.pool
}
}
})
}
}
})
Expand Down
25 changes: 25 additions & 0 deletions modules/multi-runner/config.experimental.translation.tf
Original file line number Diff line number Diff line change
Expand Up @@ -301,6 +301,30 @@ locals {
}
}
}
microvm = {
image_arn = null
image_version = null
ingress_network_connectors = []
egress_network_connectors = []
cloudwatch_agent = {
enabled = true
config = null
}
log_files = null
environment_variables = {}
iam = {
resource_arns = {
images = null
}
additional_policy_json = {
scale_up = null
}
managed_policies = {
scale_up = null
pool = null
}
}
}
}
}

Expand Down Expand Up @@ -552,6 +576,7 @@ locals {
log_files = v.runner_config.runner_log_files
tags = v.runner_config.runner_ec2_tags
}
microvm = null
}
}
}
Expand Down
115 changes: 115 additions & 0 deletions modules/multi-runner/tests/config-resolution.tftest.hcl
Original file line number Diff line number Diff line change
Expand Up @@ -461,3 +461,118 @@ run "v2_inputs_do_not_require_legacy_arguments" {
error_message = "The v2 interface must work without the stable v1 GitHub App, VPC, subnet, or runner configuration inputs."
}
}

run "v2_microvm_inputs_route_to_microvm_provider" {
command = plan

variables {
experimental_global_config = {
runner = {
os = "linux"
architecture = "arm64"
}
}

experimental_global_config_github = {
app = {
key_base64 = "experimental-app-key"
id = "experimental-app-id"
webhook_secret = "experimental-webhook-secret"
}
}

experimental_global_config_lambda = {
artifact = {
s3 = {
bucket = "global-lambda-artifacts"
}
}
}

experimental_global_config_orchestration_provider = {
webhook = {
eventbridge = {
enabled = false
}
runner = {
ephemeral = true
jit_config_enabled = true
}
lambda = {
artifact = {
s3 = {
key = "global-runners.zip"
}
}
}
}
}

experimental_global_config_ssm = {
housekeeper = {
lambda = {
artifact = {
s3 = {
key = "global-housekeeper.zip"
}
}
}
}
}

experimental_global_config_compute_provider = {
aws = {
microvm = {
image_arn = "arn:aws:lambda:eu-west-1:123456789012:microvm-image:global"
image_version = "7"
}
}
}

experimental_multi_runner_config = {
microvm = {
runner = {
name_prefix = "microvm-"
}
orchestration_provider = {
webhook = {
matcherConfig = {
labelMatchers = [["microvm"]]
}
}
}
compute_provider = {
aws = {
microvm = {
image_version = "8"
}
}
}
}
}
}

assert {
condition = (
local.use_v2_config
&& keys(local.resolved_config.multi_runner_config) == ["microvm"]
&& local.resolved_config.multi_runner_config["microvm"].runner.os == "linux"
&& local.resolved_config.multi_runner_config["microvm"].runner.architecture == "arm64"
&& local.resolved_config.multi_runner_config["microvm"].compute_provider.aws.ec2 == null
&& local.resolved_config.multi_runner_config["microvm"].compute_provider.aws.microvm.image_arn == "arn:aws:lambda:eu-west-1:123456789012:microvm-image:global"
&& local.resolved_config.multi_runner_config["microvm"].compute_provider.aws.microvm.image_version == "8"
)
error_message = "Experimental MicroVM lanes must resolve Linux ARM64 settings and inherit global provider values while applying lane overrides."
}

assert {
condition = (
length(module.runners) == 0
&& keys(module.runner_configs) == ["microvm"]
&& output.runners_map_v2["microvm"].provider.aws.ec2 == null
&& output.runners_map_v2["microvm"].provider.aws.microvm.image_arn == "arn:aws:lambda:eu-west-1:123456789012:microvm-image:global"
&& output.runners_map_v2["microvm"].provider.aws.microvm.image_version == "8"
)
error_message = "Experimental MicroVM lanes must route through module.runner_configs and expose the MicroVM provider contract without an EC2 provider."
}
}
34 changes: 34 additions & 0 deletions modules/multi-runner/variables.experimental.compute-provider.tf
Original file line number Diff line number Diff line change
Expand Up @@ -131,6 +131,40 @@ variable "experimental_global_config_compute_provider" {
}), {})
}), {})
}), {})
microvm = optional(object({
image_arn = optional(string, null)
image_version = optional(string, null)
ingress_network_connectors = optional(list(string), [])
egress_network_connectors = optional(list(string), [])
cloudwatch_agent = optional(object({
enabled = optional(bool, true)
config = optional(string, null)
}), {})
log_files = optional(list(object({
log_group_name = string
prefix_log_group = bool
file_path = string
log_stream_name = string
log_class = optional(string, "STANDARD")
})), null)
environment_variables = optional(map(string), {})
iam = optional(object({
resource_arns = optional(object({
images = optional(list(string), null)
}), {})
additional_policy_json = optional(object({
scale_up = optional(string, null)
}), {})
managed_policies = optional(object({
scale_up = optional(object({
arn = string
}), null)
pool = optional(object({
arn = string
}), null)
}), {})
}), {})
}), {})
}), {})
})
default = {}
Expand Down
34 changes: 34 additions & 0 deletions modules/multi-runner/variables.experimental.multi-runner.tf
Original file line number Diff line number Diff line change
Expand Up @@ -325,6 +325,40 @@ variable "experimental_multi_runner_config" {
})), null)
tags = optional(map(string), {})
}), null)
microvm = optional(object({
image_arn = optional(string, null)
image_version = optional(string, null)
ingress_network_connectors = optional(list(string), null)
egress_network_connectors = optional(list(string), null)
cloudwatch_agent = optional(object({
enabled = optional(bool, null)
config = optional(string, null)
}), {})
log_files = optional(list(object({
log_group_name = string
prefix_log_group = bool
file_path = string
log_stream_name = string
log_class = optional(string, "STANDARD")
})), null)
environment_variables = optional(map(string), {})
iam = optional(object({
resource_arns = optional(object({
images = optional(list(string), null)
}), {})
additional_policy_json = optional(object({
scale_up = optional(string, null)
}), {})
managed_policies = optional(object({
scale_up = optional(object({
arn = string
}), null)
pool = optional(object({
arn = string
}), null)
}), {})
}), {})
}), null)
}), {})
})

Expand Down
Loading
Loading