Skip to content
This repository was archived by the owner on Jan 16, 2025. It is now read-only.

Commit e2f9a27

Browse files
surminusnpalm
andauthored
feat: Replace environment variable by prefix (#1858)
We're looking at using this module to deploy multiple sets of runner types (x86_64 and arm architectures) but within the same conceptual "environment". We use the "Environment" tag throughout our tooling, but the constraints of using the "environment" variable for resource naming mean that we need to essentially supply different environment names (eg "env-amd64" and "env-arm64"), even though they are not in different environments. We also use the dot character (".") in our environment names, which isn't allowed in some resource names (eg SQS queue name). This PR replaces the "environmet" variable by "prefix" to prefix resources crated by the module. The prefix is also used to set the tag: "ghr:environment" with the value of prefix for lambda's to orchestrate the instnaces. You can still set the tag "environment" to all resources via the AWS provider. Co-authored-by: Niek Palm <[email protected]>
1 parent 055e2b0 commit e2f9a27

File tree

31 files changed

+159
-88
lines changed

31 files changed

+159
-88
lines changed

Diff for: examples/arm64/main.tf

+1-1
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ module "runners" {
1919
vpc_id = module.vpc.vpc_id
2020
subnet_ids = module.vpc.private_subnets
2121

22-
environment = local.environment
22+
prefix = local.environment
2323
tags = {
2424
Project = "ProjectX"
2525
}

Diff for: examples/default/main.tf

+1-1
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ module "runners" {
1919
vpc_id = module.vpc.vpc_id
2020
subnet_ids = module.vpc.private_subnets
2121

22-
environment = local.environment
22+
prefix = local.environment
2323
tags = {
2424
Project = "ProjectX"
2525
}

Diff for: examples/ephemeral/main.tf

+1-1
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ module "runners" {
1616
vpc_id = module.vpc.vpc_id
1717
subnet_ids = module.vpc.private_subnets
1818

19-
environment = local.environment
19+
prefix = local.environment
2020
tags = {
2121
Project = "ProjectX"
2222
}

Diff for: examples/permissions-boundary/main.tf

+1-1
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,7 @@ module "runners" {
3535
subnet_ids = module.vpc.private_subnets
3636
kms_key_arn = aws_kms_key.github.key_id
3737

38-
environment = local.environment
38+
prefix = local.environment
3939
tags = {
4040
Project = "ProjectX"
4141
}

Diff for: examples/prebuilt/main.tf

+1-1
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ module "runners" {
1515
vpc_id = module.vpc.vpc_id
1616
subnet_ids = module.vpc.private_subnets
1717

18-
environment = local.environment
18+
prefix = local.environment
1919

2020
github_app = {
2121
key_base64 = var.github_app_key_base64

Diff for: examples/ubuntu/main.tf

+1-1
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ module "runners" {
1616
vpc_id = module.vpc.vpc_id
1717
subnet_ids = module.vpc.private_subnets
1818

19-
environment = local.environment
19+
prefix = local.environment
2020
tags = {
2121
Project = "ProjectX"
2222
}

Diff for: examples/windows/main.tf

+4-4
Original file line numberDiff line numberDiff line change
@@ -10,10 +10,10 @@ resource "random_id" "random" {
1010
module "runners" {
1111
source = "../../"
1212

13-
aws_region = local.aws_region
14-
vpc_id = module.vpc.vpc_id
15-
subnet_ids = module.vpc.private_subnets
16-
environment = local.environment
13+
aws_region = local.aws_region
14+
vpc_id = module.vpc.vpc_id
15+
subnet_ids = module.vpc.private_subnets
16+
prefix = local.environment
1717

1818
github_app = {
1919
key_base64 = var.github_app_key_base64

Diff for: main.tf

+12-13
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
locals {
22
tags = merge(var.tags, {
3-
Environment = var.environment,
4-
"ghr:environment" = format("%s", var.environment)
3+
"ghr:environment" = var.prefix
54
})
65

76
s3_action_runner_url = "s3://${module.runner_binaries.bucket.id}/${module.runner_binaries.runner_distribution_object_key}"
@@ -50,7 +49,7 @@ resource "aws_sqs_queue_policy" "build_queue_policy" {
5049
}
5150

5251
resource "aws_sqs_queue" "queued_builds" {
53-
name = "${var.environment}-queued-builds${var.fifo_build_queue ? ".fifo" : ""}"
52+
name = "${var.prefix}-queued-builds${var.fifo_build_queue ? ".fifo" : ""}"
5453
delay_seconds = var.delay_webhook_event
5554
visibility_timeout_seconds = var.runners_scale_up_lambda_timeout
5655
message_retention_seconds = var.job_queue_retention_in_seconds
@@ -74,7 +73,7 @@ resource "aws_sqs_queue_policy" "build_queue_dlq_policy" {
7473

7574
resource "aws_sqs_queue" "queued_builds_dlq" {
7675
count = var.redrive_build_queue.enabled ? 1 : 0
77-
name = "${var.environment}-queued-builds_dead_letter"
76+
name = "${var.prefix}-queued-builds_dead_letter"
7877

7978
tags = var.tags
8079
}
@@ -83,7 +82,7 @@ module "ssm" {
8382
source = "./modules/ssm"
8483

8584
kms_key_arn = var.kms_key_arn
86-
environment = var.environment
85+
prefix = var.prefix
8786
github_app = var.github_app
8887
tags = local.tags
8988
}
@@ -92,7 +91,7 @@ module "webhook" {
9291
source = "./modules/webhook"
9392

9493
aws_region = var.aws_region
95-
environment = var.environment
94+
prefix = var.prefix
9695
tags = local.tags
9796
kms_key_arn = var.kms_key_arn
9897

@@ -127,7 +126,7 @@ module "runners" {
127126
aws_partition = var.aws_partition
128127
vpc_id = var.vpc_id
129128
subnet_ids = var.subnet_ids
130-
environment = var.environment
129+
prefix = var.prefix
131130
tags = local.tags
132131

133132
s3_bucket_runner_binaries = module.runner_binaries.bucket
@@ -214,11 +213,11 @@ module "runners" {
214213
module "runner_binaries" {
215214
source = "./modules/runner-binaries-syncer"
216215

217-
aws_region = var.aws_region
218-
environment = var.environment
219-
tags = local.tags
216+
aws_region = var.aws_region
217+
prefix = var.prefix
218+
tags = local.tags
220219

221-
distribution_bucket_name = "${var.environment}-dist-${random_string.random.result}"
220+
distribution_bucket_name = "${var.prefix}-dist-${random_string.random.result}"
222221

223222
runner_os = var.runner_os
224223
runner_architecture = var.runner_architecture
@@ -244,10 +243,10 @@ module "runner_binaries" {
244243
}
245244

246245
resource "aws_resourcegroups_group" "resourcegroups_group" {
247-
name = "${var.environment}-group"
246+
name = "${var.prefix}-group"
248247
resource_query {
249248
query = templatefile("${path.module}/templates/resource-group.json", {
250-
environment = var.environment
249+
environment = var.prefix
251250
})
252251
}
253252
}

Diff for: modules/runner-binaries-syncer/runner-binaries-syncer.tf

+6-6
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
locals {
22
lambda_zip = var.lambda_zip == null ? "${path.module}/lambdas/runner-binaries-syncer/runner-binaries-syncer.zip" : var.lambda_zip
3-
role_path = var.role_path == null ? "/${var.environment}/" : var.role_path
3+
role_path = var.role_path == null ? "/${var.prefix}/" : var.role_path
44
gh_binary_os_label = {
55
windows = "win",
66
linux = "linux"
@@ -13,7 +13,7 @@ resource "aws_lambda_function" "syncer" {
1313
s3_object_version = var.syncer_lambda_s3_object_version != null ? var.syncer_lambda_s3_object_version : null
1414
filename = var.lambda_s3_bucket == null ? local.lambda_zip : null
1515
source_code_hash = var.lambda_s3_bucket == null ? filebase64sha256(local.lambda_zip) : null
16-
function_name = "${var.environment}-syncer"
16+
function_name = "${var.prefix}-syncer"
1717
role = aws_iam_role.syncer_lambda.arn
1818
handler = "index.handler"
1919
runtime = "nodejs14.x"
@@ -63,7 +63,7 @@ resource "aws_cloudwatch_log_group" "syncer" {
6363
}
6464

6565
resource "aws_iam_role" "syncer_lambda" {
66-
name = "${var.environment}-action-syncer-lambda-role"
66+
name = "${var.prefix}-action-syncer-lambda-role"
6767
assume_role_policy = data.aws_iam_policy_document.lambda_assume_role_policy.json
6868
path = local.role_path
6969
permissions_boundary = var.role_permissions_boundary
@@ -92,7 +92,7 @@ data "aws_iam_policy_document" "lambda_assume_role_policy" {
9292
}
9393

9494
resource "aws_iam_role_policy" "lambda_logging" {
95-
name = "${var.environment}-lambda-logging-policy-syncer"
95+
name = "${var.prefix}-lambda-logging-policy-syncer"
9696
role = aws_iam_role.syncer_lambda.id
9797

9898
policy = templatefile("${path.module}/policies/lambda-cloudwatch.json", {
@@ -101,7 +101,7 @@ resource "aws_iam_role_policy" "lambda_logging" {
101101
}
102102

103103
resource "aws_iam_role_policy" "syncer" {
104-
name = "${var.environment}-lambda-syncer-s3-policy"
104+
name = "${var.prefix}-lambda-syncer-s3-policy"
105105
role = aws_iam_role.syncer_lambda.id
106106

107107
policy = templatefile("${path.module}/policies/lambda-syncer.json", {
@@ -110,7 +110,7 @@ resource "aws_iam_role_policy" "syncer" {
110110
}
111111

112112
resource "aws_cloudwatch_event_rule" "syncer" {
113-
name = "${var.environment}-syncer-rule"
113+
name = "${var.prefix}-syncer-rule"
114114
schedule_expression = var.lambda_schedule_expression
115115
tags = var.tags
116116
}

Diff for: modules/runner-binaries-syncer/variables.tf

+12
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,18 @@ variable "tags" {
1212
variable "environment" {
1313
description = "A name that identifies the environment, used as prefix and for tagging."
1414
type = string
15+
default = null
16+
17+
validation {
18+
condition = var.environment == null
19+
error_message = "The \"environment\" variable is no longer used. To migrate, set the \"prefix\" variable to the original value of \"environment\" and optionally, add \"Environment\" to the \"tags\" variable map with the same value."
20+
}
21+
}
22+
23+
variable "prefix" {
24+
description = "The prefix used for naming resources"
25+
type = string
26+
default = "github-actions"
1527
}
1628

1729
variable "distribution_bucket_name" {

Diff for: modules/runners/README.md

+3-3
Original file line numberDiff line numberDiff line change
@@ -130,7 +130,7 @@ yarn run dist
130130
| <a name="input_enable_runner_detailed_monitoring"></a> [enable\_runner\_detailed\_monitoring](#input\_enable\_runner\_detailed\_monitoring) | Enable detailed monitoring for runners | `bool` | `false` | no |
131131
| <a name="input_enable_ssm_on_runners"></a> [enable\_ssm\_on\_runners](#input\_enable\_ssm\_on\_runners) | Enable to allow access to the runner instances for debugging purposes via SSM. Note that this adds additional permissions to the runner instances. | `bool` | n/a | yes |
132132
| <a name="input_enabled_userdata"></a> [enabled\_userdata](#input\_enabled\_userdata) | Should the userdata script be enabled for the runner. Set this to false if you are using your own prebuilt AMI | `bool` | `true` | no |
133-
| <a name="input_environment"></a> [environment](#input\_environment) | A name that identifies the environment, used as prefix and for tagging. | `string` | n/a | yes |
133+
| <a name="input_prefix"></a> [prefix](#input\_prefix) | The prefix used for naming resources | `string` | `github-actions` | no |
134134
| <a name="input_ghes_ssl_verify"></a> [ghes\_ssl\_verify](#input\_ghes\_ssl\_verify) | GitHub Enterprise SSL verification. Set to 'false' when custom certificate (chains) is used for GitHub Enterprise Server (insecure). | `bool` | `true` | no |
135135
| <a name="input_ghes_url"></a> [ghes\_url](#input\_ghes\_url) | GitHub Enterprise Server URL. DO NOT SET IF USING PUBLIC GITHUB | `string` | `null` | no |
136136
| <a name="input_github_app_parameters"></a> [github\_app\_parameters](#input\_github\_app\_parameters) | Parameter Store for GitHub App Parameters. | <pre>object({<br> key_base64 = map(string)<br> id = map(string)<br> })</pre> | n/a | yes |
@@ -171,7 +171,7 @@ yarn run dist
171171
| <a name="input_runner_extra_labels"></a> [runner\_extra\_labels](#input\_runner\_extra\_labels) | Extra labels for the runners (GitHub). Separate each label by a comma | `string` | `""` | no |
172172
| <a name="input_runner_group_name"></a> [runner\_group\_name](#input\_runner\_group\_name) | Name of the runner group. | `string` | `"Default"` | no |
173173
| <a name="input_runner_iam_role_managed_policy_arns"></a> [runner\_iam\_role\_managed\_policy\_arns](#input\_runner\_iam\_role\_managed\_policy\_arns) | Attach AWS or customer-managed IAM policies (by ARN) to the runner IAM role | `list(string)` | `[]` | no |
174-
| <a name="input_runner_log_files"></a> [runner\_log\_files](#input\_runner\_log\_files) | (optional) List of logfiles to send to CloudWatch, will only be used if `enable_cloudwatch_agent` is set to true. Object description: `log_group_name`: Name of the log group, `prefix_log_group`: If true, the log group name will be prefixed with `/github-self-hosted-runners/<var.environment>`, `file_path`: path to the log file, `log_stream_name`: name of the log stream. | <pre>list(object({<br> log_group_name = string<br> prefix_log_group = bool<br> file_path = string<br> log_stream_name = string<br> }))</pre> | `null` | no |
174+
| <a name="input_runner_log_files"></a> [runner\_log\_files](#input\_runner\_log\_files) | (optional) List of logfiles to send to CloudWatch, will only be used if `enable_cloudwatch_agent` is set to true. Object description: `log_group_name`: Name of the log group, `prefix_log_group`: If true, the log group name will be prefixed with `/github-self-hosted-runners/<var.prefix>`, `file_path`: path to the log file, `log_stream_name`: name of the log stream. | <pre>list(object({<br> log_group_name = string<br> prefix_log_group = bool<br> file_path = string<br> log_stream_name = string<br> }))</pre> | `null` | no |
175175
| <a name="input_runner_os"></a> [runner\_os](#input\_runner\_os) | The EC2 Operating System type to use for action runner instances (linux,windows). | `string` | `"linux"` | no |
176176
| <a name="input_runner_run_as"></a> [runner\_run\_as](#input\_runner\_run\_as) | Run the GitHub actions agent as user. | `string` | `"ec2-user"` | no |
177177
| <a name="input_runners_lambda_s3_key"></a> [runners\_lambda\_s3\_key](#input\_runners\_lambda\_s3\_key) | S3 key for runners lambda function. Required if using S3 bucket to specify lambdas. | `any` | `null` | no |
@@ -183,7 +183,7 @@ yarn run dist
183183
| <a name="input_scale_up_reserved_concurrent_executions"></a> [scale\_up\_reserved\_concurrent\_executions](#input\_scale\_up\_reserved\_concurrent\_executions) | Amount of reserved concurrent executions for the scale-up lambda function. A value of 0 disables lambda from being triggered and -1 removes any concurrency limitations. | `number` | `1` | no |
184184
| <a name="input_sqs_build_queue"></a> [sqs\_build\_queue](#input\_sqs\_build\_queue) | SQS queue to consume accepted build events. | <pre>object({<br> arn = string<br> })</pre> | n/a | yes |
185185
| <a name="input_subnet_ids"></a> [subnet\_ids](#input\_subnet\_ids) | List of subnets in which the action runners will be launched, the subnets needs to be subnets in the `vpc_id`. | `list(string)` | n/a | yes |
186-
| <a name="input_tags"></a> [tags](#input\_tags) | Map of tags that will be added to created resources. By default resources will be tagged with name and environment. | `map(string)` | `{}` | no |
186+
| <a name="input_tags"></a> [tags](#input\_tags) | Map of tags that will be added to created resources. By default resources will be tagged with name. | `map(string)` | `{}` | no |
187187
| <a name="input_userdata_post_install"></a> [userdata\_post\_install](#input\_userdata\_post\_install) | User-data script snippet to insert after GitHub action runner install | `string` | `""` | no |
188188
| <a name="input_userdata_pre_install"></a> [userdata\_pre\_install](#input\_userdata\_pre\_install) | User-data script snippet to insert before GitHub action runner install | `string` | `""` | no |
189189
| <a name="input_userdata_template"></a> [userdata\_template](#input\_userdata\_template) | Alternative user-data template, replacing the default template. By providing your own user\_data you have to take care of installing all required software, including the action runner. Variables userdata\_pre/post\_install are ignored. | `string` | `null` | no |

Diff for: modules/runners/lambdas/runners/src/aws/runners.test.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -101,7 +101,7 @@ describe('list instances', () => {
101101
Filters: [
102102
{ Name: 'tag:Application', Values: ['github-action-runner'] },
103103
{ Name: 'instance-state-name', Values: ['running', 'pending'] },
104-
{ Name: 'tag:Environment', Values: [ENVIRONMENT] },
104+
{ Name: 'tag:ghr:environment', Values: [ENVIRONMENT] },
105105
],
106106
});
107107
});

Diff for: modules/runners/lambdas/runners/src/aws/runners.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -54,7 +54,7 @@ export async function listEC2Runners(filters: ListRunnerFilters | undefined = un
5454

5555
if (filters) {
5656
if (filters.environment !== undefined) {
57-
ec2Filters.push({ Name: 'tag:Environment', Values: [filters.environment] });
57+
ec2Filters.push({ Name: 'tag:ghr:environment', Values: [filters.environment] });
5858
}
5959
if (filters.runnerType && filters.runnerOwner) {
6060
ec2Filters.push({ Name: `tag:Type`, Values: [filters.runnerType] });

Diff for: modules/runners/logging.tf

+2-2
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@ locals {
3030
]
3131
)
3232
logfiles = var.enable_cloudwatch_agent ? [for l in local.runner_log_files : {
33-
"log_group_name" : l.prefix_log_group ? "/github-self-hosted-runners/${var.environment}/${l.log_group_name}" : "/${l.log_group_name}"
33+
"log_group_name" : l.prefix_log_group ? "/github-self-hosted-runners/${var.prefix}/${l.log_group_name}" : "/${l.log_group_name}"
3434
"log_stream_name" : l.log_stream_name
3535
"file_path" : l.file_path
3636
}] : []
@@ -42,7 +42,7 @@ locals {
4242

4343
resource "aws_ssm_parameter" "cloudwatch_agent_config_runner" {
4444
count = var.enable_cloudwatch_agent ? 1 : 0
45-
name = "${var.environment}-cloudwatch_agent_config_runner"
45+
name = "${var.prefix}-cloudwatch_agent_config_runner"
4646
type = "String"
4747
value = var.cloudwatch_config != null ? var.cloudwatch_config : templatefile("${path.module}/templates/cloudwatch_config.json", {
4848
logfiles = jsonencode(local.logfiles)

Diff for: modules/runners/main.tf

+6-6
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,15 @@
11
locals {
22
tags = merge(
33
{
4-
"Name" = format("%s-action-runner", var.environment)
4+
"Name" = format("%s-action-runner", var.prefix)
55
},
66
var.tags,
77
)
88

99
name_sg = var.overrides["name_sg"] == "" ? local.tags["Name"] : var.overrides["name_sg"]
1010
name_runner = var.overrides["name_runner"] == "" ? local.tags["Name"] : var.overrides["name_runner"]
11-
role_path = var.role_path == null ? "/${var.environment}/" : var.role_path
12-
instance_profile_path = var.instance_profile_path == null ? "/${var.environment}/" : var.instance_profile_path
11+
role_path = var.role_path == null ? "/${var.prefix}/" : var.role_path
12+
instance_profile_path = var.instance_profile_path == null ? "/${var.prefix}/" : var.instance_profile_path
1313
lambda_zip = var.lambda_zip == null ? "${path.module}/lambdas/runners/runners.zip" : var.lambda_zip
1414
userdata_template = var.userdata_template == null ? local.default_userdata_template[var.runner_os] : var.userdata_template
1515
kms_key_arn = var.kms_key_arn != null ? var.kms_key_arn : ""
@@ -54,7 +54,7 @@ data "aws_ami" "runner" {
5454
}
5555

5656
resource "aws_launch_template" "runner" {
57-
name = "${var.environment}-action-runner"
57+
name = "${var.prefix}-action-runner"
5858

5959
dynamic "block_device_mappings" {
6060
for_each = var.block_device_mappings != null ? var.block_device_mappings : []
@@ -131,7 +131,7 @@ resource "aws_launch_template" "runner" {
131131
ghes_url = var.ghes_url
132132
ghes_ssl_verify = var.ghes_ssl_verify
133133
## retain these for backwards compatibility
134-
environment = var.environment
134+
environment = var.prefix
135135
enable_cloudwatch_agent = var.enable_cloudwatch_agent
136136
ssm_key_cloudwatch_agent_config = var.enable_cloudwatch_agent ? aws_ssm_parameter.cloudwatch_agent_config_runner[0].name : ""
137137
})) : ""
@@ -143,7 +143,7 @@ resource "aws_launch_template" "runner" {
143143

144144
resource "aws_security_group" "runner_sg" {
145145
count = var.enable_managed_runner_security_group ? 1 : 0
146-
name_prefix = "${var.environment}-github-actions-runner-sg"
146+
name_prefix = "${var.prefix}-github-actions-runner-sg"
147147
description = "Github Actions Runner security group"
148148

149149
vpc_id = var.vpc_id

Diff for: modules/runners/policies-runner.tf

+4-4
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,15 @@
11
data "aws_caller_identity" "current" {}
22

33
resource "aws_iam_role" "runner" {
4-
name = "${var.environment}-runner-role"
4+
name = "${var.prefix}-runner-role"
55
assume_role_policy = templatefile("${path.module}/policies/instance-role-trust-policy.json", {})
66
path = local.role_path
77
permissions_boundary = var.role_permissions_boundary
88
tags = local.tags
99
}
1010

1111
resource "aws_iam_instance_profile" "runner" {
12-
name = "${var.environment}-runner-profile"
12+
name = "${var.prefix}-runner-profile"
1313
role = aws_iam_role.runner.name
1414
path = local.instance_profile_path
1515
}
@@ -26,8 +26,8 @@ resource "aws_iam_role_policy" "ssm_parameters" {
2626
role = aws_iam_role.runner.name
2727
policy = templatefile("${path.module}/policies/instance-ssm-parameters-policy.json",
2828
{
29-
arn_ssm_parameters_prefix = "arn:${var.aws_partition}:ssm:${var.aws_region}:${data.aws_caller_identity.current.account_id}:parameter/${var.environment}-*"
30-
arn_ssm_parameters_path = "arn:${var.aws_partition}:ssm:${var.aws_region}:${data.aws_caller_identity.current.account_id}:parameter/${var.environment}/*"
29+
arn_ssm_parameters_prefix = "arn:${var.aws_partition}:ssm:${var.aws_region}:${data.aws_caller_identity.current.account_id}:parameter/${var.prefix}-*"
30+
arn_ssm_parameters_path = "arn:${var.aws_partition}:ssm:${var.aws_region}:${data.aws_caller_identity.current.account_id}:parameter/${var.prefix}/*"
3131
}
3232
)
3333
}

Diff for: modules/runners/pool.tf

+1-1
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ module "pool" {
44
source = "./pool"
55

66
config = {
7-
environment = var.environment
7+
prefix = var.prefix
88
ghes = {
99
ssl_verify = var.ghes_ssl_verify
1010
url = var.ghes_url

0 commit comments

Comments
 (0)