terraform-cdk-serverless-github-actions-runner-controller 0.0.0 → 0.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.jsii +3571 -2
- package/lib/__tests__/index-test.js +16 -4
- package/lib/lib/aws.d.ts +4 -0
- package/lib/lib/aws.js +391 -0
- package/lib/lib/azure.js +1 -1
- package/lib/lib/gcp.d.ts +4 -0
- package/lib/lib/gcp.js +247 -0
- package/lib/tfModules.js +17 -1
- package/modules/azure-container-apps/README.md +1 -1
- package/modules/elastic-container-service/README.md +66 -0
- package/modules/elastic-container-service/cdk.tf.json +314 -0
- package/modules/google-cloud-run/README.md +62 -0
- package/modules/google-cloud-run/cdk.tf.json +355 -0
- package/package.json +8 -1
package/lib/lib/gcp.js
ADDED
@@ -0,0 +1,247 @@
|
|
1
|
+
"use strict";
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
3
|
+
exports.Gcp = void 0;
|
4
|
+
const cdktf_1 = require("cdktf");
|
5
|
+
const constructs_1 = require("constructs");
|
6
|
+
const provider_1 = require("@cdktf/provider-google/lib/provider");
|
7
|
+
const artifact_registry_repository_1 = require("@cdktf/provider-google/lib/artifact-registry-repository");
|
8
|
+
const cloud_run_v2_job_1 = require("@cdktf/provider-google/lib/cloud-run-v2-job");
|
9
|
+
const project_iam_custom_role_1 = require("@cdktf/provider-google/lib/project-iam-custom-role");
|
10
|
+
const service_account_1 = require("@cdktf/provider-google/lib/service-account");
|
11
|
+
const project_iam_member_1 = require("@cdktf/provider-google/lib/project-iam-member");
|
12
|
+
const variables_1 = require("./variables");
|
13
|
+
const cloud_run_service_1 = require("@cdktf/provider-google/lib/cloud-run-service");
|
14
|
+
const provider_2 = require("@cdktf/provider-null/lib/provider");
|
15
|
+
const resource_1 = require("@cdktf/provider-null/lib/resource");
|
16
|
+
class Gcp extends constructs_1.Construct {
|
17
|
+
constructor(scope, id) {
|
18
|
+
super(scope, id);
|
19
|
+
const location = 'europe-north1';
|
20
|
+
const project = 'gha-runner-example';
|
21
|
+
new provider_1.GoogleProvider(this, 'google', {
|
22
|
+
project,
|
23
|
+
region: location
|
24
|
+
});
|
25
|
+
new provider_2.NullProvider(this, 'null');
|
26
|
+
const { pat, githubConfigUrl } = (0, variables_1.commonVariables)(this);
|
27
|
+
const registry = new artifact_registry_repository_1.ArtifactRegistryRepository(this, 'registry', {
|
28
|
+
format: 'DOCKER',
|
29
|
+
mode: 'REMOTE_REPOSITORY',
|
30
|
+
repositoryId: 'gha-runner-test',
|
31
|
+
description: 'Repository to host run and resulting images from GHA runs',
|
32
|
+
remoteRepositoryConfig: {
|
33
|
+
dockerRepository: {
|
34
|
+
customRepository: {
|
35
|
+
uri: 'https://ghcr.io'
|
36
|
+
}
|
37
|
+
}
|
38
|
+
}
|
39
|
+
});
|
40
|
+
const jobSa = new service_account_1.ServiceAccount(this, 'jobServiceAccount', {
|
41
|
+
accountId: 'gha-runner-job-sa',
|
42
|
+
});
|
43
|
+
const runnerRole = new project_iam_custom_role_1.ProjectIamCustomRole(this, 'runnerRole', {
|
44
|
+
roleId: 'ghaRunnerRole',
|
45
|
+
title: 'GHA Runner Role',
|
46
|
+
permissions: [
|
47
|
+
'artifactregistry.dockerimages.get',
|
48
|
+
'artifactregistry.dockerimages.list',
|
49
|
+
'run.jobs.run',
|
50
|
+
'run.jobs.create',
|
51
|
+
'run.jobs.delete',
|
52
|
+
'run.jobs.list',
|
53
|
+
// Needed for waiting
|
54
|
+
'run.executions.get',
|
55
|
+
],
|
56
|
+
});
|
57
|
+
const jobPolicyMember = new cdktf_1.TerraformLocal(this, 'ghaMember', `serviceAccount:${jobSa.email}`);
|
58
|
+
new project_iam_member_1.ProjectIamMember(this, 'runnerRoleBinding', {
|
59
|
+
member: jobPolicyMember.toString(),
|
60
|
+
project,
|
61
|
+
role: runnerRole.id,
|
62
|
+
});
|
63
|
+
new project_iam_member_1.ProjectIamMember(this, 'runnerRoleBindingStorage', {
|
64
|
+
member: jobPolicyMember.toString(),
|
65
|
+
project,
|
66
|
+
role: 'roles/storage.admin',
|
67
|
+
});
|
68
|
+
new project_iam_member_1.ProjectIamMember(this, 'runnerRoleBindingRunServiceAgent', {
|
69
|
+
member: jobPolicyMember.toString(),
|
70
|
+
project,
|
71
|
+
role: 'roles/run.serviceAgent',
|
72
|
+
});
|
73
|
+
new project_iam_member_1.ProjectIamMember(this, 'runnerRoleBindingRunViewer', {
|
74
|
+
member: jobPolicyMember.toString(),
|
75
|
+
project,
|
76
|
+
role: 'roles/run.viewer',
|
77
|
+
});
|
78
|
+
const storageName = 'gha-runner-job-externals';
|
79
|
+
const createBucket = new cdktf_1.TerraformLocal(this, 'bucketModification', `CLOUDSDK_CORE_DISABLE_PROMPTS=1 gcloud alpha storage buckets create gs://${storageName} --project=${project} --location=${location} --uniform-bucket-level-access --enable-hierarchical-namespace`);
|
80
|
+
// Hierarchial namespaces can't be enabled with Terraform.
|
81
|
+
const bucketCreation = new resource_1.Resource(this, 'gcloud', {
|
82
|
+
provisioners: [
|
83
|
+
{
|
84
|
+
type: "local-exec",
|
85
|
+
command: createBucket.fqn
|
86
|
+
},
|
87
|
+
],
|
88
|
+
triggers: {
|
89
|
+
fqn: createBucket.fqn
|
90
|
+
},
|
91
|
+
});
|
92
|
+
// TODO: check caching https://cloud.google.com/artifact-registry/docs/pull-cached-dockerhub-images
|
93
|
+
const runnerJob = new cloud_run_v2_job_1.CloudRunV2Job(this, 'ghaJob', {
|
94
|
+
deletionProtection: false,
|
95
|
+
name: 'gha-runner-job',
|
96
|
+
location,
|
97
|
+
template: {
|
98
|
+
template: {
|
99
|
+
containers: [
|
100
|
+
{
|
101
|
+
image: `${registry.location}-docker.pkg.dev/${project}/${registry.repositoryId}/hi-fi/actions-runner:cr`,
|
102
|
+
env: [
|
103
|
+
{
|
104
|
+
name: 'CLOUDSDK_RUN_REGION',
|
105
|
+
value: location,
|
106
|
+
},
|
107
|
+
{
|
108
|
+
name: 'GOOGLE_CLOUD_PROJECT',
|
109
|
+
value: project,
|
110
|
+
},
|
111
|
+
{
|
112
|
+
name: 'EXTERNAL_STORAGE_NAME',
|
113
|
+
value: storageName,
|
114
|
+
},
|
115
|
+
// FUSE mounts directory as root with 777 fo directories and 555 for other files. As path is owned always by root, utime or permission change is not possible. These options prevent tar to try those
|
116
|
+
{
|
117
|
+
name: 'TAR_OPTIONS',
|
118
|
+
value: '--touch --no-overwrite-dir --no-same-owner'
|
119
|
+
}
|
120
|
+
],
|
121
|
+
volumeMounts: [
|
122
|
+
{
|
123
|
+
name: 'externals',
|
124
|
+
mountPath: '/home/runner/_work/externals'
|
125
|
+
}
|
126
|
+
],
|
127
|
+
command: ['/home/runner/ephemeral_runner.sh'],
|
128
|
+
resources: {
|
129
|
+
limits: {
|
130
|
+
cpu: '1',
|
131
|
+
memory: '2Gi'
|
132
|
+
}
|
133
|
+
},
|
134
|
+
}
|
135
|
+
],
|
136
|
+
volumes: [
|
137
|
+
{
|
138
|
+
name: 'externals',
|
139
|
+
gcs: {
|
140
|
+
bucket: storageName
|
141
|
+
}
|
142
|
+
}
|
143
|
+
],
|
144
|
+
maxRetries: 0,
|
145
|
+
serviceAccount: jobSa.email
|
146
|
+
}
|
147
|
+
},
|
148
|
+
dependsOn: [
|
149
|
+
bucketCreation
|
150
|
+
]
|
151
|
+
});
|
152
|
+
const autoscalerSa = new service_account_1.ServiceAccount(this, 'autoscalerServiceAccount', {
|
153
|
+
accountId: 'autoscaler-sa',
|
154
|
+
});
|
155
|
+
new project_iam_custom_role_1.ProjectIamCustomRole(this, 'autoscalerRole', {
|
156
|
+
roleId: 'ghaAutoscalerRole',
|
157
|
+
title: 'GHA Autoscaler Role',
|
158
|
+
permissions: [
|
159
|
+
'artifactregistry.dockerimages.get',
|
160
|
+
'artifactregistry.dockerimages.list',
|
161
|
+
'run.jobs.run',
|
162
|
+
'run.jobs.create',
|
163
|
+
'run.jobs.delete',
|
164
|
+
],
|
165
|
+
});
|
166
|
+
const autoscalerPolicyMember = new cdktf_1.TerraformLocal(this, 'autoscalerMember', `serviceAccount:${autoscalerSa.email}`);
|
167
|
+
// TODO: replace 2 following with more specific ones.
|
168
|
+
new project_iam_member_1.ProjectIamMember(this, 'autoscalerRoleBindingRun', {
|
169
|
+
member: autoscalerPolicyMember.toString(),
|
170
|
+
project,
|
171
|
+
role: 'roles/run.developer',
|
172
|
+
});
|
173
|
+
new project_iam_member_1.ProjectIamMember(this, 'autoscalerRoleBindingStorage', {
|
174
|
+
member: autoscalerPolicyMember.toString(),
|
175
|
+
project,
|
176
|
+
role: 'roles/storage.admin',
|
177
|
+
});
|
178
|
+
new project_iam_member_1.ProjectIamMember(this, 'autoscalerRoleBindingRunServiceAgent', {
|
179
|
+
member: autoscalerPolicyMember.toString(),
|
180
|
+
project,
|
181
|
+
role: 'roles/run.serviceAgent',
|
182
|
+
});
|
183
|
+
new cloud_run_service_1.CloudRunService(this, 'autoscalerService', {
|
184
|
+
location,
|
185
|
+
name: 'gha-autoscaler',
|
186
|
+
metadata: {
|
187
|
+
annotations: {
|
188
|
+
'run.googleapis.com/ingress': 'internal',
|
189
|
+
}
|
190
|
+
},
|
191
|
+
template: {
|
192
|
+
metadata: {
|
193
|
+
annotations: {
|
194
|
+
'autoscaling.knative.dev/maxScale': '1',
|
195
|
+
'autoscaling.knative.dev/minScale': '1',
|
196
|
+
'run.googleapis.com/cpu-throttling': 'false',
|
197
|
+
'run.googleapis.com/startup-cpu-boost': 'false'
|
198
|
+
}
|
199
|
+
},
|
200
|
+
spec: {
|
201
|
+
containerConcurrency: 1,
|
202
|
+
containers: [
|
203
|
+
{
|
204
|
+
image: `${registry.location}-docker.pkg.dev/${project}/${registry.repositoryId}/hi-fi/gha-runners-on-managed-env:test`,
|
205
|
+
env: [
|
206
|
+
{
|
207
|
+
name: 'PAT',
|
208
|
+
value: pat.value
|
209
|
+
},
|
210
|
+
{
|
211
|
+
name: 'GITHUB_CONFIG_URL',
|
212
|
+
value: githubConfigUrl.value
|
213
|
+
},
|
214
|
+
{
|
215
|
+
name: 'JOB_NAME',
|
216
|
+
value: runnerJob.name
|
217
|
+
},
|
218
|
+
{
|
219
|
+
name: 'SCALE_SET_NAME',
|
220
|
+
value: 'cr-runner-set'
|
221
|
+
},
|
222
|
+
{
|
223
|
+
name: 'CLOUDSDK_RUN_REGION',
|
224
|
+
value: location
|
225
|
+
},
|
226
|
+
{
|
227
|
+
name: 'GOOGLE_CLOUD_PROJECT',
|
228
|
+
value: project
|
229
|
+
}
|
230
|
+
],
|
231
|
+
resources: {
|
232
|
+
// Service would work for much lower, but these are minimum values for "always on" mode
|
233
|
+
limits: {
|
234
|
+
cpu: '1000m',
|
235
|
+
memory: '512Mi'
|
236
|
+
}
|
237
|
+
}
|
238
|
+
}
|
239
|
+
],
|
240
|
+
serviceAccountName: autoscalerSa.email
|
241
|
+
}
|
242
|
+
}
|
243
|
+
});
|
244
|
+
}
|
245
|
+
}
|
246
|
+
exports.Gcp = Gcp;
|
247
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2NwLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2xpYi9nY3AudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsaUNBQXVDO0FBQ3ZDLDJDQUF1QztBQUN2QyxrRUFBb0U7QUFDcEUsMEdBQXFHO0FBQ3JHLGtGQUE0RTtBQUM1RSxnR0FBMEY7QUFDMUYsZ0ZBQTRFO0FBQzVFLHNGQUFpRjtBQUNqRiwyQ0FBOEM7QUFDOUMsb0ZBQStFO0FBQy9FLGdFQUFpRTtBQUNqRSxnRUFBNEQ7QUFFNUQsTUFBYSxHQUFJLFNBQVEsc0JBQVM7SUFDOUIsWUFBWSxLQUFnQixFQUFFLEVBQVU7UUFDcEMsS0FBSyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQztRQUVqQixNQUFNLFFBQVEsR0FBRyxlQUFlLENBQUM7UUFDakMsTUFBTSxPQUFPLEdBQUcsb0JBQW9CLENBQUM7UUFFckMsSUFBSSx5QkFBYyxDQUFDLElBQUksRUFBRSxRQUFRLEVBQUU7WUFDL0IsT0FBTztZQUNQLE1BQU0sRUFBRSxRQUFRO1NBQ25CLENBQUMsQ0FBQztRQUVILElBQUksdUJBQVksQ0FBQyxJQUFJLEVBQUUsTUFBTSxDQUFDLENBQUE7UUFFOUIsTUFBTSxFQUFFLEdBQUcsRUFBRSxlQUFlLEVBQUUsR0FBRyxJQUFBLDJCQUFlLEVBQUMsSUFBSSxDQUFDLENBQUM7UUFFdkQsTUFBTSxRQUFRLEdBQUcsSUFBSSx5REFBMEIsQ0FBQyxJQUFJLEVBQUUsVUFBVSxFQUFFO1lBQzlELE1BQU0sRUFBRSxRQUFRO1lBQ2hCLElBQUksRUFBRSxtQkFBbUI7WUFDekIsWUFBWSxFQUFFLGlCQUFpQjtZQUMvQixXQUFXLEVBQUUsMkRBQTJEO1lBQ3hFLHNCQUFzQixFQUFFO2dCQUNwQixnQkFBZ0IsRUFBRTtvQkFDZCxnQkFBZ0IsRUFBRTt3QkFDZCxHQUFHLEVBQUUsaUJBQWlCO3FCQUN6QjtpQkFDSjthQUNKO1NBQ0osQ0FBQyxDQUFDO1FBRUgsTUFBTSxLQUFL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S0FBSyxFQUFFLGVBQWUsQ0FBQyxLQUFLO2lDQUMvQjtnQ0FDRDtvQ0FDSSxJQUFJLEVBQUUsVUFBVTtvQ0FDaEIsS0FBSyxFQUFFLFNBQVMsQ0FBQyxJQUFJO2lDQUN4QjtnQ0FDRDtvQ0FDSSxJQUFJLEVBQUUsZ0JBQWdCO29DQUN0QixLQUFLLEVBQUUsZUFBZTtpQ0FDekI7Z0NBQ0Q7b0NBQ0ksSUFBSSxFQUFFLHFCQUFxQjtvQ0FDM0IsS0FBSyxFQUFFLFFBQVE7aUNBQ2xCO2dDQUNEO29DQUNJLElBQUksRUFBRSxzQkFBc0I7b0NBQzVCLEtBQUssRUFBRSxPQUFPO2lDQUNqQjs2QkFFSjs0QkFDRCxTQUFTLEVBQUU7Z0NBQ1AsdUZBQXVGO2dDQUN2RixNQUFNLEVBQUU7b0NBQ0osR0FBRyxFQUFFLE9BQU87b0NBQ1osTUFBTSxFQUFFLE9BQU87aUNBQ2xCOzZCQUNKO3lCQUNKO3FCQUNKO29CQUNELGtCQUFrQixFQUFFLFlBQVksQ0FBQyxLQUFLO2lCQUN6QzthQUNKO1NBQ0osQ0FBQyxDQUFBO0lBQ04sQ0FBQztDQUNKO0FBN1BELGtCQTZQQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFRlcnJhZm9ybUxvY2FsIH0gZnJvbSBcImNka3RmXCI7XG5pbXBvcnQgeyBDb25zdHJ1Y3QgfSBmcm9tIFwiY29uc3RydWN0c1wiO1xuaW1wb3J0IHsgR29vZ2xlUHJvdmlkZXIgfSBmcm9tICdAY2RrdGYvcHJvdmlkZXItZ29vZ2xlL2xpYi9wcm92aWRlcidcbmltcG9ydCB7IEFydGlmYWN0UmVnaXN0cnlSZXBvc2l0b3J5IH0gZnJvbSBcIkBjZGt0Zi9wcm92aWRlci1nb29nbGUvbGliL2FydGlmYWN0LXJlZ2lzdHJ5LXJlcG9zaXRvcnlcIjtcbmltcG9ydCB7IENsb3VkUnVuVjJKb2IgfSBmcm9tIFwiQGNka3RmL3Byb3ZpZGVyLWdvb2dsZS9saWIvY2xvdWQtcnVuLXYyLWpvYlwiO1xuaW1wb3J0IHsgUHJvamVjdElhbUN1c3RvbVJvbGUgfSBmcm9tIFwiQGNka3RmL3Byb3ZpZGVyLWdvb2dsZS9saWIvcHJvamVjdC1pYW0tY3VzdG9tLXJvbGVcIjtcbmltcG9ydCB7IFNlcnZpY2VBY2NvdW50IH0gZnJvbSBcIkBjZGt0Zi9wcm92aWRlci1nb29nbGUvbGliL3NlcnZpY2UtYWNjb3VudFwiO1xuaW1wb3J0IHsgUHJvamVjdElhbU1lbWJlciB9IGZyb20gXCJAY2RrdGYvcHJvdmlkZXItZ29vZ2xlL2xpYi9wcm9qZWN0LWlhbS1tZW1iZXJcIjtcbmltcG9ydCB7IGNvbW1vblZhcmlhYmxlcyB9IGZyb20gXCIuL3ZhcmlhYmxlc1wiO1xuaW1wb3J0IHsgQ2xvdWRSdW5TZXJ2aWNlIH0gZnJvbSBcIkBjZGt0Zi9wcm92aWRlci1nb29nbGUvbGliL2Nsb3VkLXJ1bi1zZXJ2aWNlXCI7XG5pbXBvcnQgeyBOdWxsUHJvdmlkZXIgfSBmcm9tIFwiQGNka3RmL3Byb3ZpZGVyLW51bGwvbGliL3Byb3ZpZGVyXCI7XG5pbXBvcnQgeyBSZXNvdXJjZSB9IGZyb20gJ0BjZGt0Zi9wcm92aWRlci1udWxsL2xpYi9yZXNvdXJjZSdcblxuZXhwb3J0IGNsYXNzIEdjcCBleHRlbmRzIENvbnN0cnVjdCB7XG4gICAgY29uc3RydWN0b3Ioc2NvcGU6IENvbnN0cnVjdCwgaWQ6IHN0cmluZykge1xuICAgICAgICBzdXBlcihzY29wZSwgaWQpO1xuXG4gICAgICAgIGNvbnN0IGxvY2F0aW9uID0gJ2V1cm9wZS1ub3J0aDEnO1xuICAgICAgICBjb25zdCBwcm9qZWN0ID0gJ2doYS1ydW5uZXItZXhhbXBsZSc7XG4gICAgICAgIFxuICAgICAgICBuZXcgR29vZ2xlUHJvdmlkZXIodGhpcywgJ2dvb2dsZScsIHtcbiAgICAgICAgICAgIHByb2plY3QsXG4gICAgICAgICAgICByZWdpb246IGxvY2F0aW9uXG4gICAgICAgIH0pO1xuXG4gICAgICAgIG5ldyBOdWxsUHJvdmlkZXIodGhpcywgJ251bGwnKVxuXG4gICAgICAgIGNvbnN0IHsgcGF0LCBnaXRodWJDb25maWdVcmwgfSA9IGNvbW1vblZhcmlhYmxlcyh0aGlzKTtcblxuICAgICAgICBjb25zdCByZWdpc3RyeSA9IG5ldyBBcnRpZmFjdFJlZ2lzdHJ5UmVwb3NpdG9yeSh0aGlzLCAncmVnaXN0cnknLCB7XG4gICAgICAgICAgICBmb3JtYXQ6ICdET0NLRVInLFxuICAgICAgICAgICAgbW9kZTogJ1JFTU9URV9SRVBPU0lUT1JZJyxcbiAgICAgICAgICAgIHJlcG9zaXRvcnlJZDogJ2doYS1ydW5uZXItdGVzdCcsXG4gICAgICAgICAgICBkZXNjcmlwdGlvbjogJ1JlcG9zaXRvcnkgdG8gaG9zdCBydW4gYW5kIHJlc3VsdGluZyBpbWFnZXMgZnJvbSBHSEEgcnVucycsXG4gICAgICAgICAgICByZW1vdGVSZXBvc2l0b3J5Q29uZmlnOiB7XG4gICAgICAgICAgICAgICAgZG9ja2VyUmVwb3NpdG9yeToge1xuICAgICAgICAgICAgICAgICAgICBjdXN0b21SZXBvc2l0b3J5OiB7XG4gICAgICAgICAgICAgICAgICAgICAgICB1cmk6ICdodHRwczovL2doY3IuaW8nXG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGNvbnN0IGpvYlNhID0gbmV3IFNlcnZpY2VBY2NvdW50KHRoaXMsICdqb2JTZXJ2aWNlQWNjb3VudCcsIHtcbiAgICAgICAgICAgIGFjY291bnRJZDogJ2doYS1ydW5uZXItam9iLXNhJyxcbiAgICAgICAgfSk7XG5cbiAgICAgICAgY29uc3QgcnVubmVyUm9sZSA9IG5ldyBQcm9qZWN0SWFtQ3VzdG9tUm9sZSh0aGlzLCAncnVubmVyUm9sZScsIHtcbiAgICAgICAgICAgIHJvbGVJZDogJ2doYVJ1bm5lclJvbGUnLFxuICAgICAgICAgICAgdGl0bGU6ICdHSEEgUnVubmVyIFJvbGUnLFxuICAgICAgICAgICAgcGVybWlzc2lvbnM6IFtcbiAgICAgICAgICAgICAgICAnYXJ0aWZhY3RyZWdpc3RyeS5kb2NrZXJpbWFnZXMuZ2V0JyxcbiAgICAgICAgICAgICAgICAnYXJ0aWZhY3RyZWdpc3RyeS5kb2NrZXJpbWFnZXMubGlzdCcsXG4gICAgICAgICAgICAgICAgJ3J1bi5qb2JzLnJ1bicsXG4gICAgICAgICAgICAgICAgJ3J1bi5qb2JzLmNyZWF0ZScsXG4gICAgICAgICAgICAgICAgJ3J1bi5qb2JzLmRlbGV0ZScsXG4gICAgICAgICAgICAgICAgJ3J1bi5qb2JzLmxpc3QnLFxuICAgICAgICAgICAgICAgIC8vIE5lZWRlZCBmb3Igd2FpdGluZ1xuICAgICAgICAgICAgICAgICdydW4uZXhlY3V0aW9ucy5nZXQnLFxuICAgICAgICAgICAgXSxcbiAgICAgICAgfSk7XG5cbiAgICAgICAgY29uc3Qgam9iUG9saWN5TWVtYmVyID0gbmV3IFRlcnJhZm9ybUxvY2FsKHRoaXMsICdnaGFNZW1iZXInLCBgc2VydmljZUFjY291bnQ6JHtqb2JTYS5lbWFpbH1gKVxuXG4gICAgICAgIG5ldyBQcm9qZWN0SWFtTWVtYmVyKHRoaXMsICdydW5uZXJSb2xlQmluZGluZycsIHtcbiAgICAgICAgICAgIG1lbWJlcjogam9iUG9saWN5TWVtYmVyLnRvU3RyaW5nKCksXG4gICAgICAgICAgICBwcm9qZWN0LFxuICAgICAgICAgICAgcm9sZTogcnVubmVyUm9sZS5pZCxcbiAgICAgICAgfSlcblxuICAgICAgICBuZXcgUHJvamVjdElhbU1lbWJlcih0aGlzLCAncnVubmVyUm9sZUJpbmRpbmdTdG9yYWdlJywge1xuICAgICAgICAgICAgbWVtYmVyOiBqb2JQb2xpY3lNZW1iZXIudG9TdHJpbmcoKSxcbiAgICAgICAgICAgIHByb2plY3QsXG4gICAgICAgICAgICByb2xlOiAncm9sZXMvc3RvcmFnZS5hZG1pbicsXG4gICAgICAgIH0pXG5cbiAgICAgICAgbmV3IFByb2plY3RJYW1NZW1iZXIodGhpcywgJ3J1bm5lclJvbGVCaW5kaW5nUnVuU2VydmljZUFnZW50Jywge1xuICAgICAgICAgICAgbWVtYmVyOiBqb2JQb2xpY3lNZW1iZXIudG9TdHJpbmcoKSxcbiAgICAgICAgICAgIHByb2plY3QsXG4gICAgICAgICAgICByb2xlOiAncm9sZXMvcnVuLnNlcnZpY2VBZ2VudCcsXG4gICAgICAgIH0pXG5cbiAgICAgICAgbmV3IFByb2plY3RJYW1NZW1iZXIodGhpcywgJ3J1bm5lclJvbGVCaW5kaW5nUnVuVmlld2VyJywge1xuICAgICAgICAgICAgbWVtYmVyOiBqb2JQb2xpY3lNZW1iZXIudG9TdHJpbmcoKSxcbiAgICAgICAgICAgIHByb2plY3QsXG4gICAgICAgICAgICByb2xlOiAncm9sZXMvcnVuLnZpZXdlcicsXG4gICAgICAgIH0pXG5cbiAgICAgICAgY29uc3Qgc3RvcmFnZU5hbWUgPSAnZ2hhLXJ1bm5lci1qb2ItZXh0ZXJuYWxzJztcbiAgICAgICAgY29uc3QgY3JlYXRlQnVja2V0ID0gbmV3IFRlcnJhZm9ybUxvY2FsKHRoaXMsICdidWNrZXRNb2RpZmljYXRpb24nLCBgQ0xPVURTREtfQ09SRV9ESVNBQkxFX1BST01QVFM9MSBnY2xvdWQgYWxwaGEgc3RvcmFnZSBidWNrZXRzIGNyZWF0ZSBnczovLyR7c3RvcmFnZU5hbWV9IC0tcHJvamVjdD0ke3Byb2plY3R9IC0tbG9jYXRpb249JHtsb2NhdGlvbn0gLS11bmlmb3JtLWJ1Y2tldC1sZXZlbC1hY2Nlc3MgLS1lbmFibGUtaGllcmFyY2hpY2FsLW5hbWVzcGFjZWApXG5cbiAgICAgICAgLy8gSGllcmFyY2hpYWwgbmFtZXNwYWNlcyBjYW4ndCBiZSBlbmFibGVkIHdpdGggVGVycmFmb3JtLlxuICAgICAgICBjb25zdCBidWNrZXRDcmVhdGlvbiA9IG5ldyBSZXNvdXJjZSh0aGlzLCAnZ2Nsb3VkJywge1xuICAgICAgICAgICAgcHJvdmlzaW9uZXJzOiBbXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICB0eXBlOiBcImxvY2FsLWV4ZWNcIixcbiAgICAgICAgICAgICAgICAgICAgY29tbWFuZDogY3JlYXRlQnVja2V0LmZxblxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgdHJpZ2dlcnM6IHtcbiAgICAgICAgICAgICAgICBmcW46IGNyZWF0ZUJ1Y2tldC5mcW5cbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0pO1xuXG4gICAgICAgIC8vIFRPRE86IGNoZWNrIGNhY2hpbmcgaHR0cHM6Ly9jbG91ZC5nb29nbGUuY29tL2FydGlmYWN0LXJlZ2lzdHJ5L2RvY3MvcHVsbC1jYWNoZWQtZG9ja2VyaHViLWltYWdlc1xuICAgICAgICBjb25zdCBydW5uZXJKb2IgPSBuZXcgQ2xvdWRSdW5WMkpvYih0aGlzLCAnZ2hhSm9iJywge1xuICAgICAgICAgICAgZGVsZXRpb25Qcm90ZWN0aW9uOiBmYWxzZSxcbiAgICAgICAgICAgIG5hbWU6ICdnaGEtcnVubmVyLWpvYicsXG4gICAgICAgICAgICBsb2NhdGlvbixcbiAgICAgICAgICAgIHRlbXBsYXRlOiB7XG4gICAgICAgICAgICAgICAgdGVtcGxhdGU6IHtcbiAgICAgICAgICAgICAgICAgICAgY29udGFpbmVyczogW1xuICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGltYWdlOiBgJHtyZWdpc3RyeS5sb2NhdGlvbn0tZG9ja2VyLnBrZy5kZXYvJHtwcm9qZWN0fS8ke3JlZ2lzdHJ5LnJlcG9zaXRvcnlJZH0vaGktZmkvYWN0aW9ucy1ydW5uZXI6Y3JgLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVudjogW1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lOiAnQ0xPVURTREtfUlVOX1JFR0lPTicsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogbG9jYXRpb24sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6ICdHT09HTEVfQ0xPVURfUFJPSkVDVCcsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogcHJvamVjdCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZTogJ0VYVEVSTkFMX1NUT1JBR0VfTkFNRScsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogc3RvcmFnZU5hbWUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEZVU0UgbW91bnRzIGRpcmVjdG9yeSBhcyByb290IHdpdGggNzc3IGZvIGRpcmVjdG9yaWVzIGFuZCA1NTUgZm9yIG90aGVyIGZpbGVzLiBBcyBwYXRoIGlzIG93bmVkIGFsd2F5cyBieSByb290LCB1dGltZSBvciBwZXJtaXNzaW9uIGNoYW5nZSBpcyBub3QgcG9zc2libGUuIFRoZXNlIG9wdGlvbnMgcHJldmVudCB0YXIgdG8gdHJ5IHRob3NlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6ICdUQVJfT1BUSU9OUycsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogJy0tdG91Y2ggLS1uby1vdmVyd3JpdGUtZGlyIC0tbm8tc2FtZS1vd25lcidcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9sdW1lTW91bnRzOiBbXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6ICdleHRlcm5hbHMnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbW91bnRQYXRoOiAnL2hvbWUvcnVubmVyL193b3JrL2V4dGVybmFscydcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29tbWFuZDogWycvaG9tZS9ydW5uZXIvZXBoZW1lcmFsX3J1bm5lci5zaCddLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc291cmNlczoge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaW1pdHM6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNwdTogJzEnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVtb3J5OiAnMkdpJ1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgICAgICAgdm9sdW1lczogW1xuICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6ICdleHRlcm5hbHMnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdjczoge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBidWNrZXQ6IHN0b3JhZ2VOYW1lXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICAgICAgICBtYXhSZXRyaWVzOiAwLFxuICAgICAgICAgICAgICAgICAgICBzZXJ2aWNlQWNjb3VudDogam9iU2EuZW1haWxcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZGVwZW5kc09uOiBbXG4gICAgICAgICAgICAgICAgYnVja2V0Q3JlYXRpb25cbiAgICAgICAgICAgIF1cbiAgICAgICAgfSlcblxuICAgICAgICBjb25zdCBhdXRvc2NhbGVyU2EgPSBuZXcgU2VydmljZUFjY291bnQodGhpcywgJ2F1dG9zY2FsZXJTZXJ2aWNlQWNjb3VudCcsIHtcbiAgICAgICAgICAgIGFjY291bnRJZDogJ2F1dG9zY2FsZXItc2EnLFxuICAgICAgICB9KTtcblxuICAgICAgICBuZXcgUHJvamVjdElhbUN1c3RvbVJvbGUodGhpcywgJ2F1dG9zY2FsZXJSb2xlJywge1xuICAgICAgICAgICAgcm9sZUlkOiAnZ2hhQXV0b3NjYWxlclJvbGUnLFxuICAgICAgICAgICAgdGl0bGU6ICdHSEEgQXV0b3NjYWxlciBSb2xlJyxcbiAgICAgICAgICAgIHBlcm1pc3Npb25zOiBbXG4gICAgICAgICAgICAgICAgJ2FydGlmYWN0cmVnaXN0cnkuZG9ja2VyaW1hZ2VzLmdldCcsXG4gICAgICAgICAgICAgICAgJ2FydGlmYWN0cmVnaXN0cnkuZG9ja2VyaW1hZ2VzLmxpc3QnLFxuICAgICAgICAgICAgICAgICdydW4uam9icy5ydW4nLFxuICAgICAgICAgICAgICAgICdydW4uam9icy5jcmVhdGUnLFxuICAgICAgICAgICAgICAgICdydW4uam9icy5kZWxldGUnLFxuICAgICAgICAgICAgXSxcbiAgICAgICAgfSk7XG5cbiAgICAgICAgY29uc3QgYXV0b3NjYWxlclBvbGljeU1lbWJlciA9IG5ldyBUZXJyYWZvcm1Mb2NhbCh0aGlzLCAnYXV0b3NjYWxlck1lbWJlcicsIGBzZXJ2aWNlQWNjb3VudDoke2F1dG9zY2FsZXJTYS5lbWFpbH1gKVxuXG4gICAgICAgIC8vIFRPRE86IHJlcGxhY2UgMiBmb2xsb3dpbmcgd2l0aCBtb3JlIHNwZWNpZmljIG9uZXMuXG4gICAgICAgIG5ldyBQcm9qZWN0SWFtTWVtYmVyKHRoaXMsICdhdXRvc2NhbGVyUm9sZUJpbmRpbmdSdW4nLCB7XG4gICAgICAgICAgICBtZW1iZXI6IGF1dG9zY2FsZXJQb2xpY3lNZW1iZXIudG9TdHJpbmcoKSxcbiAgICAgICAgICAgIHByb2plY3QsXG4gICAgICAgICAgICByb2xlOiAncm9sZXMvcnVuLmRldmVsb3BlcicsXG4gICAgICAgIH0pXG5cblxuICAgICAgICBuZXcgUHJvamVjdElhbU1lbWJlcih0aGlzLCAnYXV0b3NjYWxlclJvbGVCaW5kaW5nU3RvcmFnZScsIHtcbiAgICAgICAgICAgIG1lbWJlcjogYXV0b3NjYWxlclBvbGljeU1lbWJlci50b1N0cmluZygpLFxuICAgICAgICAgICAgcHJvamVjdCxcbiAgICAgICAgICAgIHJvbGU6ICdyb2xlcy9zdG9yYWdlLmFkbWluJyxcbiAgICAgICAgfSlcblxuICAgICAgICBuZXcgUHJvamVjdElhbU1lbWJlcih0aGlzLCAnYXV0b3NjYWxlclJvbGVCaW5kaW5nUnVuU2VydmljZUFnZW50Jywge1xuICAgICAgICAgICAgbWVtYmVyOiBhdXRvc2NhbGVyUG9saWN5TWVtYmVyLnRvU3RyaW5nKCksXG4gICAgICAgICAgICBwcm9qZWN0LFxuICAgICAgICAgICAgcm9sZTogJ3JvbGVzL3J1bi5zZXJ2aWNlQWdlbnQnLFxuICAgICAgICB9KVxuXG4gICAgICAgIG5ldyBDbG91ZFJ1blNlcnZpY2UodGhpcywgJ2F1dG9zY2FsZXJTZXJ2aWNlJywge1xuICAgICAgICAgICAgbG9jYXRpb24sXG4gICAgICAgICAgICBuYW1lOiAnZ2hhLWF1dG9zY2FsZXInLFxuICAgICAgICAgICAgbWV0YWRhdGE6IHtcbiAgICAgICAgICAgICAgICBhbm5vdGF0aW9uczoge1xuICAgICAgICAgICAgICAgICAgICAncnVuLmdvb2dsZWFwaXMuY29tL2luZ3Jlc3MnOiAnaW50ZXJuYWwnLFxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB0ZW1wbGF0ZToge1xuICAgICAgICAgICAgICAgIG1ldGFkYXRhOiB7XG4gICAgICAgICAgICAgICAgICAgIGFubm90YXRpb25zOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAnYXV0b3NjYWxpbmcua25hdGl2ZS5kZXYvbWF4U2NhbGUnOiAnMScsXG4gICAgICAgICAgICAgICAgICAgICAgICAnYXV0b3NjYWxpbmcua25hdGl2ZS5kZXYvbWluU2NhbGUnOiAnMScsXG4gICAgICAgICAgICAgICAgICAgICAgICAncnVuLmdvb2dsZWFwaXMuY29tL2NwdS10aHJvdHRsaW5nJzogJ2ZhbHNlJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICdydW4uZ29vZ2xlYXBpcy5jb20vc3RhcnR1cC1jcHUtYm9vc3QnOiAnZmFsc2UnXG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIHNwZWM6IHtcbiAgICAgICAgICAgICAgICAgICAgY29udGFpbmVyQ29uY3VycmVuY3k6IDEsXG4gICAgICAgICAgICAgICAgICAgIGNvbnRhaW5lcnM6IFtcbiAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbWFnZTogYCR7cmVnaXN0cnkubG9jYXRpb259LWRvY2tlci5wa2cuZGV2LyR7cHJvamVjdH0vJHtyZWdpc3RyeS5yZXBvc2l0b3J5SWR9L2hpLWZpL2doYS1ydW5uZXJzLW9uLW1hbmFnZWQtZW52OnRlc3RgLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVudjogW1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lOiAnUEFUJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBwYXQudmFsdWVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZTogJ0dJVEhVQl9DT05GSUdfVVJMJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBnaXRodWJDb25maWdVcmwudmFsdWVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZTogJ0pPQl9OQU1FJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBydW5uZXJKb2IubmFtZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lOiAnU0NBTEVfU0VUX05BTUUnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6ICdjci1ydW5uZXItc2V0J1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lOiAnQ0xPVURTREtfUlVOX1JFR0lPTicsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogbG9jYXRpb25cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZTogJ0dPT0dMRV9DTE9VRF9QUk9KRUNUJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBwcm9qZWN0XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzb3VyY2VzOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFNlcnZpY2Ugd291bGQgd29yayBmb3IgbXVjaCBsb3dlciwgYnV0IHRoZXNlIGFyZSBtaW5pbXVtIHZhbHVlcyBmb3IgXCJhbHdheXMgb25cIiBtb2RlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpbWl0czoge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3B1OiAnMTAwMG0nLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVtb3J5OiAnNTEyTWknXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgICAgICAgIHNlcnZpY2VBY2NvdW50TmFtZTogYXV0b3NjYWxlclNhLmVtYWlsXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9KVxuICAgIH1cbn1cbiJdfQ==
|
package/lib/tfModules.js
CHANGED
@@ -3,16 +3,32 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
const cdktf_1 = require("cdktf");
|
4
4
|
const tf_module_stack_1 = require("@cdktf/tf-module-stack");
|
5
5
|
const azure_1 = require("./lib/azure");
|
6
|
+
const aws_1 = require("./lib/aws");
|
7
|
+
const gcp_1 = require("./lib/gcp");
|
6
8
|
class AzureContainerAppsArc extends tf_module_stack_1.TFModuleStack {
|
7
9
|
constructor(scope, id) {
|
8
10
|
super(scope, id);
|
9
11
|
new azure_1.Azure(this, "aca");
|
10
12
|
}
|
11
13
|
}
|
14
|
+
class ElasticContainerServiceArc extends tf_module_stack_1.TFModuleStack {
|
15
|
+
constructor(scope, id) {
|
16
|
+
super(scope, id);
|
17
|
+
new aws_1.Aws(this, "aws");
|
18
|
+
}
|
19
|
+
}
|
20
|
+
class CloudRunArc extends tf_module_stack_1.TFModuleStack {
|
21
|
+
constructor(scope, id) {
|
22
|
+
super(scope, id);
|
23
|
+
new gcp_1.Gcp(this, "cr");
|
24
|
+
}
|
25
|
+
}
|
12
26
|
const app = new cdktf_1.App();
|
13
27
|
// This is the name the module can be found under.
|
14
28
|
// We expect a "my-awesome-module.md" file in this directory.
|
15
29
|
// The README.md file will be generated from this file.
|
16
30
|
new AzureContainerAppsArc(app, "azure-container-apps");
|
31
|
+
new ElasticContainerServiceArc(app, "elastic-container-service");
|
32
|
+
new CloudRunArc(app, "google-cloud-run");
|
17
33
|
app.synth();
|
18
|
-
//# sourceMappingURL=data:application/json;base64,
|
34
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGZNb2R1bGVzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL3RmTW9kdWxlcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUFBLGlDQUE0QjtBQUU1Qiw0REFBdUQ7QUFDdkQsdUNBQW9DO0FBQ3BDLG1DQUFnQztBQUNoQyxtQ0FBZ0M7QUFFaEMsTUFBTSxxQkFBc0IsU0FBUSwrQkFBYTtJQUMvQyxZQUFZLEtBQWdCLEVBQUUsRUFBVTtRQUN0QyxLQUFLLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBRWpCLElBQUksYUFBSyxDQUFDLElBQUksRUFBRSxLQUFLLENBQUMsQ0FBQztJQUN6QixDQUFDO0NBQ0Y7QUFFRCxNQUFNLDBCQUEyQixTQUFRLCtCQUFhO0lBQ3BELFlBQVksS0FBZ0IsRUFBRSxFQUFVO1FBQ3RDLEtBQUssQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFFakIsSUFBSSxTQUFHLENBQUMsSUFBSSxFQUFFLEtBQUssQ0FBQyxDQUFDO0lBQ3ZCLENBQUM7Q0FDRjtBQUVELE1BQU0sV0FBWSxTQUFRLCtCQUFhO0lBQ3JDLFlBQVksS0FBZ0IsRUFBRSxFQUFVO1FBQ3RDLEtBQUssQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFFakIsSUFBSSxTQUFHLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFDO0lBQ3RCLENBQUM7Q0FDRjtBQUVELE1BQU0sR0FBRyxHQUFHLElBQUksV0FBRyxFQUFFLENBQUM7QUFDdEIsbURBQW1EO0FBQ25ELDZEQUE2RDtBQUM3RCx1REFBdUQ7QUFDdkQsSUFBSSxxQkFBcUIsQ0FBQyxHQUFHLEVBQUUsc0JBQXNCLENBQUMsQ0FBQztBQUN2RCxJQUFJLDBCQUEwQixDQUFDLEdBQUcsRUFBRSwyQkFBMkIsQ0FBQyxDQUFDO0FBQ2pFLElBQUksV0FBVyxDQUFDLEdBQUcsRUFBRSxrQkFBa0IsQ0FBQyxDQUFDO0FBRXpDLEdBQUcsQ0FBQyxLQUFLLEVBQUUsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEFwcCB9IGZyb20gXCJjZGt0ZlwiO1xuaW1wb3J0IHsgQ29uc3RydWN0IH0gZnJvbSBcImNvbnN0cnVjdHNcIjtcbmltcG9ydCB7IFRGTW9kdWxlU3RhY2sgfSBmcm9tIFwiQGNka3RmL3RmLW1vZHVsZS1zdGFja1wiO1xuaW1wb3J0IHsgQXp1cmUgfSBmcm9tIFwiLi9saWIvYXp1cmVcIjtcbmltcG9ydCB7IEF3cyB9IGZyb20gXCIuL2xpYi9hd3NcIjtcbmltcG9ydCB7IEdjcCB9IGZyb20gXCIuL2xpYi9nY3BcIjtcblxuY2xhc3MgQXp1cmVDb250YWluZXJBcHBzQXJjIGV4dGVuZHMgVEZNb2R1bGVTdGFjayB7XG4gIGNvbnN0cnVjdG9yKHNjb3BlOiBDb25zdHJ1Y3QsIGlkOiBzdHJpbmcpIHtcbiAgICBzdXBlcihzY29wZSwgaWQpO1xuXG4gICAgbmV3IEF6dXJlKHRoaXMsIFwiYWNhXCIpO1xuICB9XG59XG5cbmNsYXNzIEVsYXN0aWNDb250YWluZXJTZXJ2aWNlQXJjIGV4dGVuZHMgVEZNb2R1bGVTdGFjayB7XG4gIGNvbnN0cnVjdG9yKHNjb3BlOiBDb25zdHJ1Y3QsIGlkOiBzdHJpbmcpIHtcbiAgICBzdXBlcihzY29wZSwgaWQpO1xuXG4gICAgbmV3IEF3cyh0aGlzLCBcImF3c1wiKTtcbiAgfVxufVxuXG5jbGFzcyBDbG91ZFJ1bkFyYyBleHRlbmRzIFRGTW9kdWxlU3RhY2sge1xuICBjb25zdHJ1Y3RvcihzY29wZTogQ29uc3RydWN0LCBpZDogc3RyaW5nKSB7XG4gICAgc3VwZXIoc2NvcGUsIGlkKTtcblxuICAgIG5ldyBHY3AodGhpcywgXCJjclwiKTtcbiAgfVxufVxuXG5jb25zdCBhcHAgPSBuZXcgQXBwKCk7XG4vLyBUaGlzIGlzIHRoZSBuYW1lIHRoZSBtb2R1bGUgY2FuIGJlIGZvdW5kIHVuZGVyLiBcbi8vIFdlIGV4cGVjdCBhIFwibXktYXdlc29tZS1tb2R1bGUubWRcIiBmaWxlIGluIHRoaXMgZGlyZWN0b3J5LlxuLy8gVGhlIFJFQURNRS5tZCBmaWxlIHdpbGwgYmUgZ2VuZXJhdGVkIGZyb20gdGhpcyBmaWxlLlxubmV3IEF6dXJlQ29udGFpbmVyQXBwc0FyYyhhcHAsIFwiYXp1cmUtY29udGFpbmVyLWFwcHNcIik7XG5uZXcgRWxhc3RpY0NvbnRhaW5lclNlcnZpY2VBcmMoYXBwLCBcImVsYXN0aWMtY29udGFpbmVyLXNlcnZpY2VcIik7XG5uZXcgQ2xvdWRSdW5BcmMoYXBwLCBcImdvb2dsZS1jbG91ZC1ydW5cIik7XG5cbmFwcC5zeW50aCgpOyJdfQ==
|
@@ -7,7 +7,7 @@
|
|
7
7
|
|
8
8
|
```hcl
|
9
9
|
module "arc_on_aca" {
|
10
|
-
source = "
|
10
|
+
source = "Hi-Fi/serverless-github-actions-runner-controller/cdk//modules/azure-container-apps"
|
11
11
|
}
|
12
12
|
```
|
13
13
|
<!-- BEGIN_TF_DOCS -->
|
@@ -0,0 +1,66 @@
|
|
1
|
+
# Actions Runner Controller (ARC) on Elastic Container Service (ECS)
|
2
|
+
|
3
|
+
> [!WARNING]
|
4
|
+
> This is currently PoC level thing for module publishing. Not ready for production or any use
|
5
|
+
|
6
|
+
## Usage
|
7
|
+
|
8
|
+
```hcl
|
9
|
+
module "arc_on_aca" {
|
10
|
+
source = "Hi-Fi/serverless-github-actions-runner-controller/cdk//modules/elastic-container-service"
|
11
|
+
}
|
12
|
+
```
|
13
|
+
<!-- BEGIN_TF_DOCS -->
|
14
|
+
## Requirements
|
15
|
+
|
16
|
+
| Name | Version |
|
17
|
+
|------|---------|
|
18
|
+
| <a name="requirement_aws"></a> [aws](#requirement\_aws) | 5.96.0 |
|
19
|
+
|
20
|
+
## Providers
|
21
|
+
|
22
|
+
| Name | Version |
|
23
|
+
|------|---------|
|
24
|
+
| <a name="provider_aws"></a> [aws](#provider\_aws) | 5.96.0 |
|
25
|
+
|
26
|
+
## Modules
|
27
|
+
|
28
|
+
No modules.
|
29
|
+
|
30
|
+
## Resources
|
31
|
+
|
32
|
+
| Name | Type |
|
33
|
+
|------|------|
|
34
|
+
| [aws_cloudwatch_log_group.aws_AutoscalerLogGroup_BFE58053](https://registry.terraform.io/providers/aws/5.96.0/docs/resources/cloudwatch_log_group) | resource |
|
35
|
+
| [aws_cloudwatch_log_group.aws_RunnerLogGroup_711756A6](https://registry.terraform.io/providers/aws/5.96.0/docs/resources/cloudwatch_log_group) | resource |
|
36
|
+
| [aws_ecs_cluster.aws_Cluster_BA268616](https://registry.terraform.io/providers/aws/5.96.0/docs/resources/ecs_cluster) | resource |
|
37
|
+
| [aws_ecs_service.aws_AutoscalerService_C7C3AA3C](https://registry.terraform.io/providers/aws/5.96.0/docs/resources/ecs_service) | resource |
|
38
|
+
| [aws_ecs_task_definition.aws_AutoscalerTaskDefinition_24A76F67](https://registry.terraform.io/providers/aws/5.96.0/docs/resources/ecs_task_definition) | resource |
|
39
|
+
| [aws_ecs_task_definition.aws_RunnerTaskDefinition_9C7563BE](https://registry.terraform.io/providers/aws/5.96.0/docs/resources/ecs_task_definition) | resource |
|
40
|
+
| [aws_efs_file_system.aws_efs_B3BBB350](https://registry.terraform.io/providers/aws/5.96.0/docs/resources/efs_file_system) | resource |
|
41
|
+
| [aws_efs_file_system.aws_externalsEfs_C15353C9](https://registry.terraform.io/providers/aws/5.96.0/docs/resources/efs_file_system) | resource |
|
42
|
+
| [aws_efs_mount_target.aws_EfsMountTarget_B2BDD3E5](https://registry.terraform.io/providers/aws/5.96.0/docs/resources/efs_mount_target) | resource |
|
43
|
+
| [aws_efs_mount_target.aws_ExternalsEfsMountTarget_2D9AE418](https://registry.terraform.io/providers/aws/5.96.0/docs/resources/efs_mount_target) | resource |
|
44
|
+
| [aws_iam_policy.aws_AutoscalerPolicy_FF16A997](https://registry.terraform.io/providers/aws/5.96.0/docs/resources/iam_policy) | resource |
|
45
|
+
| [aws_iam_policy.aws_RunnerPolicy_7B21DB81](https://registry.terraform.io/providers/aws/5.96.0/docs/resources/iam_policy) | resource |
|
46
|
+
| [aws_iam_role.aws_AutoscalerRole_CEB26423](https://registry.terraform.io/providers/aws/5.96.0/docs/resources/iam_role) | resource |
|
47
|
+
| [aws_iam_role.aws_RunnerRole_75263C23](https://registry.terraform.io/providers/aws/5.96.0/docs/resources/iam_role) | resource |
|
48
|
+
| [aws_iam_role.aws_TaskExecutionRole_FAB64402](https://registry.terraform.io/providers/aws/5.96.0/docs/resources/iam_role) | resource |
|
49
|
+
| [aws_iam_role_policy_attachment.aws_AutoscalerPolicyAttachment_5402A0C0](https://registry.terraform.io/providers/aws/5.96.0/docs/resources/iam_role_policy_attachment) | resource |
|
50
|
+
| [aws_iam_role_policy_attachment.aws_RunnerPolicyAttachment_A293771C](https://registry.terraform.io/providers/aws/5.96.0/docs/resources/iam_role_policy_attachment) | resource |
|
51
|
+
| [aws_caller_identity.aws_Identity_FDC445BF](https://registry.terraform.io/providers/aws/5.96.0/docs/data-sources/caller_identity) | data source |
|
52
|
+
| [aws_region.aws_Region_7477CA06](https://registry.terraform.io/providers/aws/5.96.0/docs/data-sources/region) | data source |
|
53
|
+
| [aws_security_groups.aws_SecurityGroups_BAABB08D](https://registry.terraform.io/providers/aws/5.96.0/docs/data-sources/security_groups) | data source |
|
54
|
+
| [aws_subnets.aws_Subnets_75E5377D](https://registry.terraform.io/providers/aws/5.96.0/docs/data-sources/subnets) | data source |
|
55
|
+
|
56
|
+
## Inputs
|
57
|
+
|
58
|
+
| Name | Description | Type | Default | Required |
|
59
|
+
|------|-------------|------|---------|:--------:|
|
60
|
+
| <a name="input_aws_PAT_4017AC3F"></a> [aws\_PAT\_4017AC3F](#input\_aws\_PAT\_4017AC3F) | Github PAT with Actions:Read and Admin:Read+Write scopes | `any` | n/a | yes |
|
61
|
+
| <a name="input_aws_github_config_url_BFDD14B2"></a> [aws\_github\_config\_url\_BFDD14B2](#input\_aws\_github\_config\_url\_BFDD14B2) | Github URL where runners should register to. Format https://<GitHub host>/<your\_enterprise/org/repo> | `any` | n/a | yes |
|
62
|
+
|
63
|
+
## Outputs
|
64
|
+
|
65
|
+
No outputs.
|
66
|
+
<!-- END_TF_DOCS -->
|