terrafaker 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.
Files changed (33) hide show
  1. package/README.md +9 -9
  2. package/dist/commands/generate/file.js +11 -9
  3. package/dist/commands/generate/repo.js +7 -3
  4. package/dist/constants/azure.d.ts +138 -0
  5. package/dist/constants/azure.js +187 -0
  6. package/dist/enums/providers.d.ts +1 -0
  7. package/dist/enums/providers.js +1 -0
  8. package/dist/enums/resource-types.d.ts +11 -0
  9. package/dist/enums/resource-types.js +8 -0
  10. package/dist/utilities/generators/aws-generator.d.ts +9 -0
  11. package/dist/utilities/generators/aws-generator.js +68 -0
  12. package/dist/utilities/generators/azure-generator.d.ts +7 -0
  13. package/dist/utilities/generators/azure-generator.js +46 -0
  14. package/dist/utilities/generators/file-generator.d.ts +12 -0
  15. package/dist/utilities/generators/file-generator.js +13 -0
  16. package/dist/utilities/generators/gcp-generator.d.ts +7 -0
  17. package/dist/utilities/generators/gcp-generator.js +53 -0
  18. package/dist/utilities/generators/generator-utils.d.ts +2 -57
  19. package/dist/utilities/generators/generator-utils.js +1 -32
  20. package/dist/utilities/generators/provider-generator-factory.d.ts +8 -0
  21. package/dist/utilities/generators/provider-generator-factory.js +18 -0
  22. package/dist/utilities/generators/provider-generator.d.ts +22 -0
  23. package/dist/utilities/generators/provider-generator.js +31 -0
  24. package/dist/utilities/generators/repo-generator.d.ts +39 -0
  25. package/dist/utilities/generators/repo-generator.js +31 -0
  26. package/dist/utilities/string-utils.d.ts +2 -1
  27. package/dist/utilities/string-utils.js +2 -1
  28. package/oclif.manifest.json +5 -3
  29. package/package.json +6 -3
  30. package/dist/utilities/generators/aws-generators.d.ts +0 -4
  31. package/dist/utilities/generators/aws-generators.js +0 -80
  32. package/dist/utilities/generators/gcp-generators.d.ts +0 -4
  33. package/dist/utilities/generators/gcp-generators.js +0 -69
package/README.md CHANGED
@@ -41,7 +41,7 @@ $ npm install -g terrafaker
41
41
  $ terrafaker COMMAND
42
42
  running command...
43
43
  $ terrafaker (--version)
44
- terrafaker/0.0.0 darwin-arm64 node-v24.8.0
44
+ terrafaker/0.0.1 darwin-arm64 node-v24.8.0
45
45
  $ terrafaker --help [COMMAND]
46
46
  USAGE
47
47
  $ terrafaker COMMAND
@@ -64,21 +64,21 @@ Generates a terraform file.
64
64
 
65
65
  ```
66
66
  USAGE
67
- $ terrafaker generate file [--name <value>] [--provider aws|gcp] [--resource-count <value>] [-f] [-q]
67
+ $ terrafaker generate file [--name <value>] [--provider aws|gcp|azure] [--resource-count <value>] [-f] [-q]
68
68
 
69
69
  FLAGS
70
70
  -f, --[no-]format Format the output terraform files. Requires `terraform` to be in your $PATH.
71
71
  -q, --quiet Suppress the logging output.
72
72
  --name=<value> Name for the generated file, which must end in .tf
73
73
  --provider=<option> Cloud provider to generate resources for
74
- <options: aws|gcp>
74
+ <options: aws|gcp|azure>
75
75
  --resource-count=<value> [default: 3] Number of resources per file to generate
76
76
 
77
77
  DESCRIPTION
78
78
  Generates a terraform file.
79
79
  ```
80
80
 
81
- _See code: [src/commands/generate/file.ts](https://github.com/brandongregoryscott/terrafaker/blob/v0.0.0/src/commands/generate/file.ts)_
81
+ _See code: [src/commands/generate/file.ts](https://github.com/brandongregoryscott/terrafaker/blob/v0.0.1/src/commands/generate/file.ts)_
82
82
 
83
83
  ## `terrafaker generate repo`
84
84
 
@@ -87,7 +87,7 @@ Generates repo(s) with multiple terraform files.
87
87
  ```
88
88
  USAGE
89
89
  $ terrafaker generate repo [--directory <value>] [--count <value>] [--file-count <value>] [--resource-count
90
- <value>] [--prefix <value>] [--provider aws|gcp] [-f] [--create-remote] [--public] [-q]
90
+ <value>] [--prefix <value>] [--provider aws|gcp|azure] [-f] [--create-remote] [--public] [-q]
91
91
 
92
92
  FLAGS
93
93
  -f, --[no-]format Format the output terraform files. Requires `terraform` to be in your $PATH.
@@ -99,7 +99,7 @@ FLAGS
99
99
  --file-count=<value> [default: 3] Number of files per repo to generate
100
100
  --prefix=<value> [default: tf_] Prefix for repo names, useful for quickly identifying generated content
101
101
  --provider=<option> Cloud provider to generate resources for
102
- <options: aws|gcp>
102
+ <options: aws|gcp|azure>
103
103
  --public Whether the remote repo(s) created are public.
104
104
  --resource-count=<value> [default: 3] Number of resources per file to generate
105
105
 
@@ -107,7 +107,7 @@ DESCRIPTION
107
107
  Generates repo(s) with multiple terraform files.
108
108
  ```
109
109
 
110
- _See code: [src/commands/generate/repo.ts](https://github.com/brandongregoryscott/terrafaker/blob/v0.0.0/src/commands/generate/repo.ts)_
110
+ _See code: [src/commands/generate/repo.ts](https://github.com/brandongregoryscott/terrafaker/blob/v0.0.1/src/commands/generate/repo.ts)_
111
111
 
112
112
  ## `terrafaker gh clone-repos`
113
113
 
@@ -126,7 +126,7 @@ DESCRIPTION
126
126
  `gh` CLI to be installed. To install, run `brew install gh`.
127
127
  ```
128
128
 
129
- _See code: [src/commands/gh/clone-repos.ts](https://github.com/brandongregoryscott/terrafaker/blob/v0.0.0/src/commands/gh/clone-repos.ts)_
129
+ _See code: [src/commands/gh/clone-repos.ts](https://github.com/brandongregoryscott/terrafaker/blob/v0.0.1/src/commands/gh/clone-repos.ts)_
130
130
 
131
131
  ## `terrafaker gh delete-repos`
132
132
 
@@ -146,7 +146,7 @@ DESCRIPTION
146
146
  If the deletion fails, you may need to refresh your CLI permissions with `gh auth refresh -s delete_repo`
147
147
  ```
148
148
 
149
- _See code: [src/commands/gh/delete-repos.ts](https://github.com/brandongregoryscott/terrafaker/blob/v0.0.0/src/commands/gh/delete-repos.ts)_
149
+ _See code: [src/commands/gh/delete-repos.ts](https://github.com/brandongregoryscott/terrafaker/blob/v0.0.1/src/commands/gh/delete-repos.ts)_
150
150
 
151
151
  ## `terrafaker help [COMMAND]`
152
152
 
@@ -1,8 +1,9 @@
1
1
  import { Flags } from "@oclif/core";
2
2
  import { BaseCommand } from "../../utilities/base-command.js";
3
3
  import { formatFlag, providerFlag, quietFlag, resourceCountFlag, } from "../../utilities/flags.js";
4
- import { success } from "../../utilities/string-utils.js";
5
- import { generateFileByProvider, randomProvider, } from "../../utilities/generators/generator-utils.js";
4
+ import { formatTfFileName, success } from "../../utilities/string-utils.js";
5
+ import { randomProvider } from "../../utilities/generators/generator-utils.js";
6
+ import { FileGenerator } from "../../utilities/generators/file-generator.js";
6
7
  class File extends BaseCommand {
7
8
  static description = "Generates a terraform file.";
8
9
  static flags = {
@@ -18,14 +19,15 @@ class File extends BaseCommand {
18
19
  const { flags } = await this.parse(File);
19
20
  const { name, quiet, format, "resource-count": resourceCount } = flags;
20
21
  const provider = flags.provider ?? randomProvider();
21
- let tfFilename = name ?? "main.tf";
22
- if (!tfFilename.endsWith(".tf")) {
23
- tfFilename = `${tfFilename}.tf`;
24
- }
25
- const tfg = generateFileByProvider({ provider, resourceCount });
26
- tfg.write({ format, tfFilename });
22
+ const fileName = formatTfFileName(name ?? "main.tf");
23
+ FileGenerator.generate({
24
+ fileName,
25
+ provider,
26
+ resourceCount,
27
+ format,
28
+ });
27
29
  if (!quiet) {
28
- this.log(success(`Successfully generated ${tfFilename}`));
30
+ this.log(success(`Successfully generated '${fileName}'`));
29
31
  }
30
32
  }
31
33
  }
@@ -1,10 +1,11 @@
1
1
  import { Flags } from "@oclif/core";
2
2
  import path from "node:path";
3
- import { generateRepo, randomProvider, } from "../../utilities/generators/generator-utils.js";
4
3
  import { BaseCommand } from "../../utilities/base-command.js";
5
4
  import { formatFlag, providerFlag, quietFlag, resourceCountFlag, } from "../../utilities/flags.js";
6
5
  import { $ } from "zx";
7
6
  import { HelpMessages } from "../../enums/help-messages.js";
7
+ import { RepoGenerator } from "../../utilities/generators/repo-generator.js";
8
+ import { success } from "../../utilities/string-utils.js";
8
9
  class Repo extends BaseCommand {
9
10
  static description = "Generates repo(s) with multiple terraform files.";
10
11
  static flags = {
@@ -42,17 +43,20 @@ class Repo extends BaseCommand {
42
43
  const provider = flags.provider;
43
44
  const directory = path.resolve(process.cwd(), flags.directory);
44
45
  for (let i = 0; i < count; i++) {
45
- const { name, path } = await generateRepo({
46
+ const { name, path } = await RepoGenerator.generate({
46
47
  directory,
47
48
  fileCount,
48
49
  format,
49
50
  prefix,
50
- provider: provider ?? randomProvider(),
51
+ provider,
51
52
  resourceCount,
52
53
  quiet,
53
54
  });
54
55
  if (createRemote) {
55
56
  await $ `gh repo create ${name} --source ${path} ${isPublic ? "--public" : "--private"} --push`;
57
+ if (!quiet) {
58
+ this.log(success(`Successfully pushed '${name}'`));
59
+ }
56
60
  }
57
61
  }
58
62
  }
@@ -0,0 +1,138 @@
1
+ declare const AZURE_REGIONS: string[];
2
+ /**
3
+ * @see https://learn.microsoft.com/en-us/azure/virtual-machines/sizes/overview?tabs=breakdownseries%2Cgeneralsizelist%2Ccomputesizelist%2Cmemorysizelist%2Cstoragesizelist%2Cgpusizelist%2Cfpgasizelist%2Chpcsizelist#general-purpose
4
+ */
5
+ declare const AZURE_INSTANCE_TYPES_BY_FAMILY: {
6
+ Av2: string[];
7
+ Bsv2: string[];
8
+ Basv2: string[];
9
+ Bpsv2: string[];
10
+ Dasv7: string[];
11
+ Dadsv7: string[];
12
+ Dalsv7: string[];
13
+ Daldsv7: string[];
14
+ Dsv6: string[];
15
+ Ddsv6: string[];
16
+ Dlsv6: string[];
17
+ Dldsv6: string[];
18
+ Dasv6: string[];
19
+ Dadsv6: string[];
20
+ Dalsv6: string[];
21
+ Daldsv6: string[];
22
+ Dpsv6: string[];
23
+ Dpdsv6: string[];
24
+ Dplsv6: string[];
25
+ Dpldsv6: string[];
26
+ Dv5: string[];
27
+ Dsv5: string[];
28
+ Ddv5: string[];
29
+ Ddsv5: string[];
30
+ Dasv5: string[];
31
+ Dadsv5: string[];
32
+ Dpsv5: string[];
33
+ Dpdsv5: string[];
34
+ Dplsv5: string[];
35
+ Dpldsv5: string[];
36
+ Dlsv5: string[];
37
+ Dldsv5: string[];
38
+ Dnsv6: string[];
39
+ Dndsv6: string[];
40
+ Dnlsv6: string[];
41
+ Dnldsv6: string[];
42
+ Dv4: string[];
43
+ Dsv4: string[];
44
+ Dav4: string[];
45
+ Dasv4: string[];
46
+ Ddv4: string[];
47
+ Ddsv4: string[];
48
+ DCasv5: string[];
49
+ DCadsv5: string[];
50
+ DCasv6: string[];
51
+ DCadsv6: string[];
52
+ DCesv6: string[];
53
+ DCas_cc_v5: string[];
54
+ DCads_cc_v5: string[];
55
+ DCsv3: string[];
56
+ DCdsv3: string[];
57
+ DCsv: string[];
58
+ Fasv7: string[];
59
+ Fadsv7: string[];
60
+ Famsv7: string[];
61
+ Famdsv7: string[];
62
+ Falsv7: string[];
63
+ Faldsv7: string[];
64
+ Fasv6: string[];
65
+ Falsv6: string[];
66
+ Famsv6: string[];
67
+ Fsv2: string[];
68
+ FXmsv2: string[];
69
+ FXmdsv2: string[];
70
+ FX: string[];
71
+ Easv7: string[];
72
+ Eadsv7: string[];
73
+ Esv6: string[];
74
+ Edsv6: string[];
75
+ Epsv6: string[];
76
+ Epdsv6: string[];
77
+ Easv6: string[];
78
+ Eadsv6: string[];
79
+ Ev5: string[];
80
+ Esv5: string[];
81
+ Edv5: string[];
82
+ Edsv5: string[];
83
+ Easv5: string[];
84
+ Eadsv5: string[];
85
+ Ensv6: string[];
86
+ Endsv6: string[];
87
+ Epsv5: string[];
88
+ Epdsv5: string[];
89
+ Edv4: string[];
90
+ Edsv4: string[];
91
+ Eav4: string[];
92
+ Easv4: string[];
93
+ Ev4: string[];
94
+ Esv4: string[];
95
+ Ebsv6: string[];
96
+ Ebdsv6: string[];
97
+ Ebdsv5: string[];
98
+ Ebsv5: string[];
99
+ ECasv5: string[];
100
+ ECadsv5: string[];
101
+ ECasv6: string[];
102
+ ECadsv6: string[];
103
+ ECesv6: string[];
104
+ ECas_cc_v5: string[];
105
+ ECads_cc_v5: string[];
106
+ "Mdsv3 Medium Memory": string[];
107
+ "Msv3 Medium Memory": string[];
108
+ "Msv2 Medium Memory": string[];
109
+ "Mdsv2 Medium Memory": string[];
110
+ M: string[];
111
+ "Msv3 High Memory": string[];
112
+ "Mdsv3 High Memory": string[];
113
+ "Msv2 High Memory": string[];
114
+ "Mdsv3 Very High Memory": string[];
115
+ Mbsv3: string[];
116
+ Mbdsv3: string[];
117
+ Laosv4: string[];
118
+ Lasv4: string[];
119
+ Lsv4: string[];
120
+ Lsv3: string[];
121
+ Lasv3: string[];
122
+ HBv2: string[];
123
+ HBv3: string[];
124
+ HBv4: string[];
125
+ HBv5: string[];
126
+ HC: string[];
127
+ HX: string[];
128
+ };
129
+ declare const AZURE_INSTANCE_TYPES: string[];
130
+ /**
131
+ * @see https://aka.ms/flexfxversions
132
+ * @see https://learn.microsoft.com/en-us/azure/azure-functions/functions-create-first-function-terraform
133
+ */
134
+ declare const AZURE_LAMBDA_RUNTIMES: {
135
+ runtime_name: string;
136
+ runtime_verison: string;
137
+ }[];
138
+ export { AZURE_INSTANCE_TYPES, AZURE_INSTANCE_TYPES_BY_FAMILY, AZURE_LAMBDA_RUNTIMES, AZURE_REGIONS, };
@@ -0,0 +1,187 @@
1
+ import { flatten } from "lodash-es";
2
+ // prettier-ignore
3
+ const AZURE_REGIONS = ["australiaeast", "austriaeast", "belgiumcentral", "brazilsouth", "canadacentral", "centralindia", "centralus", "chilecentral", "eastasia", "eastus", "eastus2", "francecentral", "germanywestcentral", "indonesiacentral", "israelcentral", "italynorth", "japaneast", "japanwest", "koreacentral", "malaysiawest", "mexicocentral", "newzealandnorth", "northeurope", "norwayeast", "polandcentral", "qatarcentral", "southafricanorth", "southcentralus", "southeastasia", "spaincentral", "swedencentral", "switzerlandnorth", "uaenorth", "uksouth", "westeurope", "westus2", "westus3"];
4
+ /**
5
+ * @see https://learn.microsoft.com/en-us/azure/virtual-machines/sizes/overview?tabs=breakdownseries%2Cgeneralsizelist%2Ccomputesizelist%2Cmemorysizelist%2Cstoragesizelist%2Cgpusizelist%2Cfpgasizelist%2Chpcsizelist#general-purpose
6
+ */
7
+ // prettier-ignore
8
+ const AZURE_INSTANCE_TYPES_BY_FAMILY = {
9
+ "Av2": ["Standard_A1_v2", "Standard_A2_v2", "Standard_A4_v2", "Standard_A8_v2", "Standard_A2m_v2", "Standard_A4m_v2", "Standard_A8m_v2"],
10
+ "Bsv2": ["Standard_B2ts_v2", "Standard_B2ls_v2", "Standard_B2s_v2", "Standard_B4ls_v2", "Standard_B4s_v2", "Standard_B8ls_v2", "Standard_B8s_v2", "Standard_B16ls_v2", "Standard_B16s_v2", "Standard_B32ls_v2", "Standard_B32s_v2"],
11
+ "Basv2": ["Standard_B2ats_v2", "Standard_B2als_v2", "Standard_B2as_v2", "Standard_B4als_v2", "Standard_B4as_v2", "Standard_B8als_v2", "Standard_B8as_v2", "Standard_B16als_v2", "Standard_B16as_v2", "Standard_B32als_v2", "Standard_B32as_v2"],
12
+ "Bpsv2": ["Standard_B2pts_v2", "Standard_B2pls_v2", "Standard_B2ps_v2", "Standard_B4pls_v2", "Standard_B4ps_v2", "Standard_B8pls_v2", "Standard_B8ps_v2", "Standard_B16pls_v2", "Standard_B16ps_v2"],
13
+ "Dasv7": ["Standard_D2as_v7", "Standard_D4as_v7", "Standard_D8as_v7", "Standard_D16as_v7", "Standard_D32as_v7", "Standard_D48as_v7", "Standard_D64as_v7", "Standard_D96as_v7", "Standard_D128as_v7", "Standard_D160as_v7"],
14
+ "Dadsv7": ["Standard_D2ads_v7", "Standard_D4ads_v7", "Standard_D8ads_v7", "Standard_D16ads_v7", "Standard_D32ads_v7", "Standard_D48ads_v7", "Standard_D64ads_v7", "Standard_D96ads_v7", "Standard_D128ads_v7", "Standard_D160ads_v7"],
15
+ "Dalsv7": ["Standard_D2als_v7", "Standard_D4als_v7", "Standard_D8als_v7", "Standard_D16als_v7", "Standard_D32als_v7", "Standard_D48als_v7", "Standard_D64als_v7", "Standard_D96als_v7", "Standard_D128als_v7", "Standard_D160als_v7"],
16
+ "Daldsv7": ["Standard_D2alds_v7", "Standard_D4alds_v7", "Standard_D8alds_v7", "Standard_D16alds_v7", "Standard_D32alds_v7", "Standard_D48alds_v7", "Standard_D64alds_v7", "Standard_D96alds_v7", "Standard_D128alds_v7", "Standard_D160alds_v7"],
17
+ "Dsv6": ["Standard_D2s_v6", "Standard_D4s_v6", "Standard_D8s_v6", "Standard_D16s_v6", "Standard_D32s_v6", "Standard_D48s_v6", "Standard_D64s_v6", "Standard_D96s_v6", "Standard_D128s_v6", "Standard_D192s_v6"],
18
+ "Ddsv6": ["Standard_D2ds_v6", "Standard_D4ds_v6", "Standard_D8ds_v6", "Standard_D16ds_v6", "Standard_D32ds_v6", "Standard_D48ds_v6", "Standard_D64ds_v6", "Standard_D96ds_v6", "Standard_D128ds_v6", "Standard_D192ds_v6"],
19
+ "Dlsv6": ["Standard_D2ls_v6", "Standard_D4ls_v6", "Standard_D8ls_v6", "Standard_D16ls_v6", "Standard_D32ls_v6", "Standard_D48ls_v6", "Standard_D64ls_v6", "Standard_D96ls_v6", "Standard_D128ls_v6"],
20
+ "Dldsv6": ["Standard_D2lds_v6", "Standard_D4lds_v6", "Standard_D8lds_v6", "Standard_D16lds_v6", "Standard_D32lds_v6", "Standard_D48lds_v6", "Standard_D64lds_v6", "Standard_D96lds_v6", "Standard_D128lds_v6"],
21
+ "Dasv6": ["Standard_D2as_v6", "Standard_D4as_v6", "Standard_D8as_v6", "Standard_D16as_v6", "Standard_D32as_v6", "Standard_D48as_v6", "Standard_D64as_v6", "Standard_D96as_v6"],
22
+ "Dadsv6": ["Standard_D2ads_v6", "Standard_D4ads_v6", "Standard_D8ads_v6", "Standard_D16ads_v6", "Standard_D32ads_v6", "Standard_D48ads_v6", "Standard_D64ads_v6", "Standard_D96ads_v6"],
23
+ "Dalsv6": ["Standard_D2als_v6", "Standard_D4als_v6", "Standard_D8als_v6", "Standard_D16als_v6", "Standard_D32als_v6", "Standard_D48als_v6", "Standard_D64als_v6", "Standard_D96als_v6"],
24
+ "Daldsv6": ["Standard_D2alds_v6", "Standard_D4alds_v6", "Standard_D8alds_v6", "Standard_D16alds_v6", "Standard_D32alds_v6", "Standard_D48alds_v6", "Standard_D64alds_v6", "Standard_D96alds_v6"],
25
+ "Dpsv6": ["Standard_D2ps_v6", "Standard_D4ps_v6", "Standard_D8ps_v6", "Standard_D16ps_v6", "Standard_D32ps_v6", "Standard_D48ps_v6", "Standard_D64ps_v6", "Standard_D96ps_v6"],
26
+ "Dpdsv6": ["Standard_D2pds_v6", "Standard_D4pds_v6", "Standard_D8pds_v6", "Standard_D16pds_v6", "Standard_D32pds_v6", "Standard_D48pds_v6", "Standard_D64pds_v6", "Standard_D96pds_v6"],
27
+ "Dplsv6": ["Standard_D2pls_v6", "Standard_D4pls_v6", "Standard_D8pls_v6", "Standard_D16pls_v6", "Standard_D32pls_v6", "Standard_D48pls_v6", "Standard_D64pls_v6", "Standard_D96pls_v6"],
28
+ "Dpldsv6": ["Standard_D2plds_v6", "Standard_D4plds_v6", "Standard_D8plds_v6", "Standard_D16plds_v6", "Standard_D32plds_v6", "Standard_D48plds_v6", "Standard_D64plds_v6", "Standard_D96plds_v6"],
29
+ "Dv5": ["Standard_D2_v5", "Standard_D4_v5", "Standard_D8_v5", "Standard_D16_v5", "Standard_D32_v5", "Standard_D48_v5", "Standard_D64_v5", "Standard_D96_v5"],
30
+ "Dsv5": ["Standard_D2s_v5", "Standard_D4s_v5", "Standard_D8s_v5", "Standard_D16s_v5", "Standard_D32s_v5", "Standard_D48s_v5", "Standard_D64s_v5", "Standard_D96s_v5"],
31
+ "Ddv5": ["Standard_D2d_v5", "Standard_D4d_v5", "Standard_D8d_v5", "Standard_D16d_v5", "Standard_D32d_v5", "Standard_D48d_v5", "Standard_D64d_v5", "Standard_D96d_v5"],
32
+ "Ddsv5": ["Standard_D2ds_v5", "Standard_D4ds_v5", "Standard_D8ds_v5", "Standard_D16ds_v5", "Standard_D32ds_v5", "Standard_D48ds_v5", "Standard_D64ds_v5", "Standard_D96ds_v5"],
33
+ "Dasv5": ["Standard_D2as_v5", "Standard_D4as_v5", "Standard_D8as_v5", "Standard_D16as_v5", "Standard_D32as_v5", "Standard_D48as_v5", "Standard_D64as_v5", "Standard_D96as_v5"],
34
+ "Dadsv5": ["Standard_D2ads_v5", "Standard_D4ads_v5", "Standard_D8ads_v5", "Standard_D16ads_v5", "Standard_D32ads_v5", "Standard_D48ads_v5", "Standard_D64ads_v5", "Standard_D96ads_v5"],
35
+ "Dpsv5": ["Standard_D2ps_v5", "Standard_D4ps_v5", "Standard_D8ps_v5", "Standard_D16ps_v5", "Standard_D32ps_v5", "Standard_D48ps_v5", "Standard_D64ps_v5"],
36
+ "Dpdsv5": ["Standard_D2pds_v5", "Standard_D4pds_v5", "Standard_D8pds_v5", "Standard_D16pds_v5", "Standard_D32pds_v5", "Standard_D48pds_v5", "Standard_D64pds_v5"],
37
+ "Dplsv5": ["Standard_D2pls_v5", "Standard_D4pls_v5", "Standard_D8pls_v5", "Standard_D16pls_v5", "Standard_D32pls_v5", "Standard_D48pls_v5", "Standard_D64pls_v5"],
38
+ "Dpldsv5": ["Standard_D2plds_v5", "Standard_D4plds_v5", "Standard_D8plds_v5", "Standard_D16plds_v5", "Standard_D32plds_v5", "Standard_D48plds_v5", "Standard_D64plds_v5"],
39
+ "Dlsv5": ["Standard_D2ls_v5", "Standard_D4ls_v5", "Standard_D8ls_v5", "Standard_D16ls_v5", "Standard_D32ls_v5", "Standard_D48ls_v5", "Standard_D64ls_v5", "Standard_D96ls_v5"],
40
+ "Dldsv5": ["Standard_D2lds_v5", "Standard_D4lds_v5", "Standard_D8lds_v5", "Standard_D16lds_v5", "Standard_D32lds_v5", "Standard_D48lds_v5", "Standard_D64lds_v5", "Standard_D96lds_v5"],
41
+ "Dnsv6": ["Standard_D2ns_v6", "Standard_D4ns_v6", "Standard_D8ns_v6", "Standard_D16ns_v6", "Standard_D32ns_v6", "Standard_D48ns_v6", "Standard_D64ns_v6", "Standard_D96ns_v6", "Standard_D128ns_v6"],
42
+ "Dndsv6": ["Standard_D2nds_v6", "Standard_D4nds_v6", "Standard_D8nds_v6", "Standard_D16nds_v6", "Standard_D32nds_v6", "Standard_D48nds_v6", "Standard_D64nds_v6", "Standard_D96nds_v6", "Standard_D128nds_v6"],
43
+ "Dnlsv6": ["Standard_D2nls_v6", "Standard_D4nls_v6", "Standard_D8nls_v6", "Standard_D16nls_v6", "Standard_D32nls_v6", "Standard_D48nls_v6", "Standard_D64nls_v6", "Standard_D96nls_v6", "Standard_D128nls_v6"],
44
+ "Dnldsv6": ["Standard_D2nlds_v6", "Standard_D4nlds_v6", "Standard_D8nlds_v6", "Standard_D16nlds_v6", "Standard_D32nlds_v6", "Standard_D48nlds_v6", "Standard_D64nlds_v6", "Standard_D96nlds_v6", "Standard_D128nlds_v6"],
45
+ "Dv4": ["Standard_D2_v4", "Standard_D4_v4", "Standard_D8_v4", "Standard_D16_v4", "Standard_D32_v4", "Standard_D48_v4", "Standard_D64_v4"],
46
+ "Dsv4": ["Standard_D2s_v4", "Standard_D4s_v4", "Standard_D8s_v4", "Standard_D16s_v4", "Standard_D32s_v4", "Standard_D48s_v4", "Standard_D64s_v4"],
47
+ "Dav4": ["Standard_D2a_v41", "Standard_D4a_v4", "Standard_D8a_v4", "Standard_D16a_v4", "Standard_D32a_v4", "Standard_D48a_v4", "Standard_D64a_v4", "Standard_D96a_v4"],
48
+ "Dasv4": ["Standard_D2as_v4", "Standard_D4as_v4", "Standard_D8as_v4", "Standard_D16as_v4", "Standard_D32as_v4", "Standard_D48as_v4", "Standard_D64as_v4", "Standard_D96as_v4"],
49
+ "Ddv4": ["Standard_D2d_v4", "Standard_D4d_v4", "Standard_D8d_v4", "Standard_D16d_v4", "Standard_D32d_v4", "Standard_D48d_v4", "Standard_D64d_v4"],
50
+ "Ddsv4": ["Standard_D2ds_v4", "Standard_D4ds_v4", "Standard_D8ds_v4", "Standard_D16ds_v4", "Standard_D32ds_v4", "Standard_D48ds_v4", "Standard_D64ds_v4"],
51
+ "DCasv5": ["Standard_DC2as_v5", "Standard_DC4as_v5", "Standard_DC8as_v5", "Standard_DC16as_v5", "Standard_DC32as_v5", "Standard_DC48as_v5", "Standard_DC64as_v5", "Standard_DC96as_v5"],
52
+ "DCadsv5": ["Standard_DC2ads_v5", "Standard_DC4ads_v5", "Standard_DC8ads_v5", "Standard_DC16ads_v5", "Standard_DC32ads_v5", "Standard_DC48ads_v5", "Standard_DC64ads_v5", "Standard_DC96ads_v5"],
53
+ "DCasv6": ["Standard_DC2as_v6", "Standard_DC4as_v6", "Standard_DC8as_v6", "Standard_DC16as_v6", "Standard_DC32as_v6", "Standard_DC48as_v6", "Standard_DC64as_v6", "Standard_DC96as_v6"],
54
+ "DCadsv6": ["Standard_DC2ads_v6", "Standard_DC4ads_v6", "Standard_DC8ads_v6", "Standard_DC16ads_v6", "Standard_DC32ads_v6", "Standard_DC48ads_v6", "Standard_DC64ads_v6", "Standard_DC96ads_v6"],
55
+ "DCesv6": ["Standard_DC2es_v6", "Standard_DC4es_v6", "Standard_DC8es_v6", "Standard_DC16es_v6", "Standard_DC32es_v6", "Standard_DC48es_v6", "Standard_DC64es_v6", "Standard_DC96es_v6", "Standard_DC128es_v6"],
56
+ "DCas_cc_v5": ["Standard_DC4as_cc_v5", "Standard_DC8as_cc_v5", "Standard_DC16as_cc_v5", "Standard_DC32as_cc_v5", "Standard_DC48as_cc_v5", "Standard_DC64as_cc_v5", "Standard_DC96as_cc_v5"],
57
+ "DCads_cc_v5": ["Standard_DC4ads_cc_v5", "Standard_DC8ads_cc_v5", "Standard_DC16ads_cc_v5", "Standard_DC32ads_cc_v5", "Standard_DC48ads_cc_v5", "Standard_DC64ads_cc_v5", "Standard_DC96ads_cc_v5"],
58
+ "DCsv3": ["Standard_DC1s_v3", "Standard_DC2s_v3", "Standard_DC4s_v3", "Standard_DC8s_v3", "Standard_DC16s_v3", "Standard_DC24s_v3", "Standard_DC32s_v3", "Standard_DC48s_v3"],
59
+ "DCdsv3": ["Standard_DC1ds_v3", "Standard_DC2ds_v3", "Standard_DC4ds_v3", "Standard_DC8ds_v3", "Standard_DC16ds_v3", "Standard_DC24ds_v3", "Standard_DC32ds_v3", "Standard_DC48ds_v3"],
60
+ "DCsv": ["Standard_DC1s_v2", "Standard_DC2s_v2", "Standard_DC4s_v2", "Standard_DC8_v2"],
61
+ "Fasv7": ["Standard_F1as_v7", "Standard_F2as_v7", "Standard_F4as_v7", "Standard_F8as_v7", "Standard_F16as_v7", "Standard_F32as_v7", "Standard_F48as_v7", "Standard_F64as_v7", "Standard_F80as_v7"],
62
+ "Fadsv7": ["Standard_F1ads_v7", "Standard_F2ads_v7", "Standard_F4ads_v7", "Standard_F8ads_v7", "Standard_F16ads_v7", "Standard_F32ads_v7", "Standard_F48ads_v7", "Standard_F64ads_v7", "Standard_F80ads_v7"],
63
+ "Famsv7": ["Standard_F1ams_v7", "Standard_F2ams_v7", "Standard_F4ams_v7", "Standard_F8ams_v7", "Standard_F16ams_v7", "Standard_F32ams_v7", "Standard_F48ams_v7", "Standard_F64ams_v7", "Standard_F80ams_v7"],
64
+ "Famdsv7": ["Standard_F1amds_v7", "Standard_F2amds_v7", "Standard_F4amds_v7", "Standard_F8amds_v7", "Standard_F16amds_v7", "Standard_F32amds_v7", "Standard_F48amds_v7", "Standard_F64amds_v7", "Standard_F80amds_v7"],
65
+ "Falsv7": ["Standard_F1als_v7", "Standard_F2als_v7", "Standard_F4als_v7", "Standard_F8als_v7", "Standard_F16als_v7", "Standard_F32als_v7", "Standard_F48als_v7", "Standard_F64als_v7", "Standard_F80als_v7"],
66
+ "Faldsv7": ["Standard_F1alds_v7", "Standard_F2alds_v7", "Standard_F4alds_v7", "Standard_F8alds_v7", "Standard_F16alds_v7", "Standard_F32alds_v7", "Standard_F48alds_v7", "Standard_F64alds_v7", "Standard_F80alds_v7"],
67
+ "Fasv6": ["Standard_F2as_v6", "Standard_F4as_v6", "Standard_F8as_v6", "Standard_F16as_v6", "Standard_F32as_v6", "Standard_F48as_v6", "Standard_F64as_v6"],
68
+ "Falsv6": ["Standard_F2als_v6", "Standard_F4als_v6", "Standard_F8als_v6", "Standard_F16als_v6", "Standard_F32als_v6", "Standard_F48als_v6", "Standard_F64als_v6"],
69
+ "Famsv6": ["Standard_F2ams_v6", "Standard_F4ams_v6", "Standard_F8ams_v6", "Standard_F16ams_v6", "Standard_F32ams_v6", "Standard_F48ams_v6", "Standard_F64ams_v6"],
70
+ "Fsv2": ["Standard_F2s_v2", "Standard_F4s_v2", "Standard_F8s_v2", "Standard_F16s_v2", "Standard_F32s_v2", "Standard_F48s_v2", "Standard_F64s_v2", "Standard_F72s_v2"],
71
+ "FXmsv2": ["Standard_FX2ms_v2", "Standard_FX4ms_v2", "Standard_FX8ms_v2", "Standard_FX12ms_v2", "Standard_FX16ms_v2", "Standard_FX24ms_v2", "Standard_FX32ms_v2", "Standard_FX48ms_v2", "Standard_FX64ms_v2", "Standard_FX96ms_v2"],
72
+ "FXmdsv2": ["Standard_FX2mds_v2", "Standard_FX4mds_v2", "Standard_FX8mds_v2", "Standard_FX12mds_v2", "Standard_FX16mds_v2", "Standard_FX24mds_v2", "Standard_FX32mds_v2", "Standard_FX48mds_v2", "Standard_FX64mds_v2", "Standard_FX96mds_v2"],
73
+ "FX": ["Standard_FX4mds", "Standard_FX12mds", "Standard_FX24mds", "Standard_FX36mds", "Standard_FX48mds"],
74
+ "Easv7": ["Standard_E2as_v7", "Standard_E4as_v7", "Standard_E8as_v7", "Standard_E16as_v7", "Standard_E32as_v7", "Standard_E48as_v7", "Standard_E64as_v7", "Standard_E96as_v7", "Standard_E128as_v7", "Standard_E160as_v7"],
75
+ "Eadsv7": ["Standard_E2ads_v7", "Standard_E4ads_v7", "Standard_E8ads_v7", "Standard_E16ads_v7", "Standard_E32ads_v7", "Standard_E48ads_v7", "Standard_E64ads_v7", "Standard_E96ads_v7", "Standard_E128ads_v7", "Standard_E160ads_v7"],
76
+ "Esv6": ["Standard_E2s_v6", "Standard_E4s_v6", "Standard_E8s_v6", "Standard_E16s_v6", "Standard_E20s_v6", "Standard_E32s_v6", "Standard_E48s_v6", "Standard_E64s_v6", "Standard_E96s_v6", "Standard_E128s_v6", "Standard_E192is_v6"],
77
+ "Edsv6": ["Standard_E2ds_v6", "Standard_E4ds_v6", "Standard_E8ds_v6", "Standard_E16ds_v6", "Standard_E20ds_v6", "Standard_E32ds_v6", "Standard_E48ds_v6", "Standard_E64ds_v6", "Standard_E96ds_v6", "Standard_E128ds_v6", "Standard_E192ids_v6"],
78
+ "Epsv6": ["Standard_E2ps_v6", "Standard_E4ps_v6", "Standard_E8ps_v6", "Standard_E16ps_v6", "Standard_E32ps_v6", "Standard_E48ps_v6", "Standard_E64ps_v6", "Standard_E96ps_v6"],
79
+ "Epdsv6": ["Standard_E2pds_v6", "Standard_E4pds_v6", "Standard_E8pds_v6", "Standard_E16pds_v6", "Standard_E32pds_v6", "Standard_E48pds_v6", "Standard_E64pds_v6", "Standard_E96pds_v6"],
80
+ "Easv6": ["Standard_E2as_v6", "Standard_E4as_v6", "Standard_E8as_v6", "Standard_E16as_v6", "Standard_E20as_v6", "Standard_E32as_v6", "Standard_E48as_v6", "Standard_E64as_v6", "Standard_E96as_v6"],
81
+ "Eadsv6": ["Standard_E2ads_v6", "Standard_E4ads_v6", "Standard_E8ads_v6", "Standard_E16ads_v6", "Standard_E20ads_v6", "Standard_E32ads_v6", "Standard_E48ads_v6", "Standard_E64ads_v6", "Standard_E96ads_v6"],
82
+ "Ev5": ["Standard_E2_v5", "Standard_E4_v5", "Standard_E8_v5", "Standard_E16_v5", "Standard_E20_v5", "Standard_E32_v5", "Standard_E48_v5", "Standard_E64_v5", "Standard_E96_v5", "Standard_E104i_v5"],
83
+ "Esv5": ["Standard_E2s_v5", "Standard_E4s_v5", "Standard_E8s_v5", "Standard_E16s_v5", "Standard_E20s_v5", "Standard_E32s_v5", "Standard_E48s_v5", "Standard_E64s_v5", "Standard_E96s_v5", "Standard_E104is_v5"],
84
+ "Edv5": ["Standard_E2d_v5", "Standard_E4d_v5", "Standard_E8d_v5", "Standard_E16d_v5", "Standard_E20d_v5", "Standard_E32d_v5", "Standard_E48d_v5", "Standard_E64d_v5", "Standard_E96d_v5", "Standard_E104id_v52"],
85
+ "Edsv5": ["Standard_E2ds_v5", "Standard_E4ds_v5", "Standard_E8ds_v5", "Standard_E16ds_v5", "Standard_E20ds_v5", "Standard_E32ds_v5", "Standard_E48ds_v5", "Standard_E64ds_v5", "Standard_E96ds_v5", "Standard_E104ids_v5"],
86
+ "Easv5": ["Standard_E2as_v5", "Standard_E4as_v5", "Standard_E8as_v5", "Standard_E16as_v5", "Standard_E20as_v5", "Standard_E32as_v5", "Standard_E48as_v5", "Standard_E64as_v5", "Standard_E96as_v5", "Standard_E112ias_v5"],
87
+ "Eadsv5": ["Standard_E2ads_v5", "Standard_E4ads_v5", "Standard_E8ads_v5", "Standard_E16ads_v5", "Standard_E20ads_v5", "Standard_E32ads_v5", "Standard_E48ads_v5", "Standard_E64ads_v5", "Standard_E96ads_v5", "Standard_E112iads_v5"],
88
+ "Ensv6": ["Standard_E2ns_v6", "Standard_E4ns_v6", "Standard_E8ns_v6", "Standard_E16ns_v6", "Standard_E32ns_v6", "Standard_E48ns_v6", "Standard_E64ns_v6", "Standard_E96ns_v6", "Standard_E128ns_v6"],
89
+ "Endsv6": ["Standard_E2nds_v6", "Standard_E4nds_v6", "Standard_E8nds_v6", "Standard_E16nds_v6", "Standard_E32nds_v6", "Standard_E48nds_v6", "Standard_E64nds_v6", "Standard_E96nds_v6", "Standard_E128nds_v6"],
90
+ "Epsv5": ["Standard_E2ps_v5", "Standard_E4ps_v5", "Standard_E8ps_v5", "Standard_E16ps_v5", "Standard_E20ps_v5", "Standard_E32ps_v5"],
91
+ "Epdsv5": ["Standard_E2pds_v5", "Standard_E4pds_v5", "Standard_E8pds_v5", "Standard_E16pds_v5", "Standard_E20pds_v5", "Standard_E32pds_v5"],
92
+ "Edv4": ["Standard_E2d_v4", "Standard_E4d_v4", "Standard_E8d_v4", "Standard_E16d_v4", "Standard_E20d_v4", "Standard_E32d_v4", "Standard_E48d_v4", "Standard_E64d_v4"],
93
+ "Edsv4": ["Standard_E2ds_v4", "Standard_E4ds_v4", "Standard_E8ds_v4", "Standard_E16ds_v4", "Standard_E20ds_v4", "Standard_E32ds_v4", "Standard_E48ds_v4", "Standard_E64ds_v4", "Standard_E80ids_v4"],
94
+ "Eav4": ["Standard_E2a_v4", "Standard_E4a_v4", "Standard_E8a_v4", "Standard_E16a_v4", "Standard_E20a_v4", "Standard_E32a_v4", "Standard_E48a_v4", "Standard_E64a_v4", "Standard_E96a_v4"],
95
+ "Easv4": ["Standard_E2as_v4", "Standard_E4as_v4", "Standard_E8as_v4", "Standard_E16as_v4", "Standard_E20as_v4", "Standard_E32as_v4", "Standard_E48as_v4", "Standard_E64as_v4", "Standard_E96as_v4"],
96
+ "Ev4": ["Standard_E2_v4", "Standard_E4_v4", "Standard_E8_v4", "Standard_E16_v4", "Standard_E20_v4", "Standard_E32_v4", "Standard_E48_v4", "Standard_E64_v4"],
97
+ "Esv4": ["Standard_E2s_v4", "Standard_E4s_v4", "Standard_E8s_v4", "Standard_E16s_v4", "Standard_E20s_v4", "Standard_E32s_v4", "Standard_E48s_v4", "Standard_E64s_v4", "Standard_E80is_v4"],
98
+ "Ebsv6": ["Standard_E2bs_v6", "Standard_E4bs_v6", "Standard_E8bs_v6", "Standard_E16bs_v6", "Standard_E32bs_v6", "Standard_E48bs_v6", "Standard_E64bs_v6", "Standard_E96bs_v6", "Standard_E128bs_v6", "Standard_E192ibs_v6"],
99
+ "Ebdsv6": ["Standard_E2bds_v6", "Standard_E4bds_v6", "Standard_E8bds_v6", "Standard_E16bds_v6", "Standard_E32bds_v6", "Standard_E48bds_v6", "Standard_E64bds_v6", "Standard_E96bds_v6", "Standard_E128bds_v6", "Standard_E192ibds_v6"],
100
+ "Ebdsv5": ["Standard_E2bds_v5", "Standard_E4bds_v5", "Standard_E8bds_v5", "Standard_E16bds_v5", "Standard_E32bds_v5", "Standard_E48bds_v5", "Standard_E64bds_v5", "Standard_E96bds_v5", "Standard_E112ibds_v5"],
101
+ "Ebsv5": ["Standard_E2bs_v5", "Standard_E4bs_v5", "Standard_E8bs_v5", "Standard_E16bs_v5", "Standard_E32bs_v5", "Standard_E48bs_v5", "Standard_E64bs_v5", "Standard_E96bs_v5", "Standard_E112ibs_v5"],
102
+ "ECasv5": ["Standard_EC2as_v5", "Standard_EC4as_v5", "Standard_EC8as_v5", "Standard_EC16as_v5", "Standard_EC20as_v5", "Standard_EC32as_v5", "Standard_EC48as_v5", "Standard_EC64as_v5", "Standard_EC96as_v5"],
103
+ "ECadsv5": ["Standard_EC2ads_v5", "Standard_EC4ads_v5", "Standard_EC8ads_v5", "Standard_EC16ads_v5", "Standard_EC20ads_v5", "Standard_EC32ads_v5", "Standard_EC48ads_v5", "Standard_EC64ads_v5", "Standard_EC96ads_v5"],
104
+ "ECasv6": ["Standard_EC2as_v6", "Standard_EC4as_v6", "Standard_EC8as_v6", "Standard_EC16as_v6", "Standard_EC32as_v6", "Standard_EC48as_v6", "Standard_EC64as_v6", "Standard_EC96as_v6"],
105
+ "ECadsv6": ["Standard_EC2ads_v6", "Standard_EC4ads_v6", "Standard_EC8ads_v6", "Standard_EC16ads_v6", "Standard_EC32ads_v6", "Standard_EC48ads_v6", "Standard_EC64ads_v6", "Standard_EC96ads_v6"],
106
+ "ECesv6": ["Standard_EC2es_v6", "Standard_EC4es_v6", "Standard_EC8es_v6", "Standard_EC16es_v6", "Standard_EC32es_v6", "Standard_EC48es_v6", "Standard_EC64es_v6"],
107
+ "ECas_cc_v5": ["Standard_EC4as_cc_v5", "Standard_EC8as_cc_v5", "Standard_EC16as_cc_v5", "Standard_EC20as_cc_v5", "Standard_EC32as_cc_v5", "Standard_EC48as_cc_v5", "Standard_EC64as_cc_v5", "Standard_EC96as_cc_v5"],
108
+ "ECads_cc_v5": ["Standard_EC4ads_cc_v5", "Standard_EC8ads_cc_v5", "Standard_EC16ads_cc_v5", "Standard_EC20ads_cc_v5", "Standard_EC32ads_cc_v5", "Standard_EC48ads_cc_v5", "Standard_EC64ads_cc_v5", "Standard_EC96ads_cc_v5"],
109
+ "Mdsv3 Medium Memory": ["Standard_M12ds_v3", "Standard_M24ds_v3", "Standard_M48ds_1_v3", "Standard_M96ds_1_v3", "Standard_M96ds_2_v3", "Standard_M176ds_3_v3", "Standard_M176ds_4_v3"],
110
+ "Msv3 Medium Memory": ["Standard_M12s_v3", "Standard_M24s_v3", "Standard_M48s_1_v3", "Standard_M96s_1_v3", "Standard_M96s_2_v3", "Standard_M176s_3_v3", "Standard_M176s_4_v3"],
111
+ "Msv2 Medium Memory": ["Standard_M32ms_v2", "Standard_M64s_v2", "Standard_M64ms_v2", "Standard_M128s_v2", "Standard_M128ms_v2", "Standard_M192is_v2", "Standard_M192ims_v2"],
112
+ "Mdsv2 Medium Memory": ["Standard_M32dms_v2", "Standard_M64ds_v2", "Standard_M64dms_v2", "Standard_M128ds_v2", "Standard_M128dms_v2", "Standard_M192ids_v2", "Standard_M192idms_v2"],
113
+ "M": ["Standard_M8ms", "Standard_M16ms", "Standard_M32ts", "Standard_M32ls", "Standard_M32ms", "Standard_M64s", "Standard_M64ls", "Standard_M64ms", "Standard_M128s", "Standard_M128ms", "Standard_M64", "Standard_M64m", "Standard_M128", "Standard_M128m"],
114
+ "Msv3 High Memory": ["Standard_M416s_6_v3", "Standard_M416s_8_v3", "Standard_M624s_12_v3", "Standard_M832s_12_v3", "Standard_M832is_16_v3"],
115
+ "Mdsv3 High Memory": ["Standard_M416ds_6_v3", "Standard_M416ds_8_v3", "Standard_M624ds_12_v3", "Standard_M832ds_12_v3", "Standard_M832ids_16_v3"],
116
+ "Msv2 High Memory": ["Standard_M208s_v2", "Standard_M208ms_v2", "Standard_M416s_v2", "Standard_M416s_8_v2", "Standard_M416ms_v2"],
117
+ "Mdsv3 Very High Memory": ["Standard_M896ixds_32_v3", "Standard_M896ixds_24_v3", "Standard_M1792ixds_32_v3"],
118
+ "Mbsv3": ["Standard_M16bs_v3", "Standard_M32bs_v3", "Standard_M48bs_v3", "Standard_M64bs_v3", "Standard_M96bs_v3", "Standard_M128bs_v3", "Standard_M176bs_v3", "Standard_M416bs_v3"],
119
+ "Mbdsv3": ["Standard_M16bds_v3", "Standard_M32bds_v3", "Standard_M48bds_v3", "Standard_M64bds_v3", "Standard_M96bds_v3", "Standard_M128bds_v3", "Standard_M176bds_v3", "Standard_M64bds_1_v3", "Standard_M96bds_2_v3", "Standard_M128bds_3_v3", "Standard_M176bds_4_v3"],
120
+ "Laosv4": ["Standard_L2aos_v4", "Standard_L4aos_v4", "Standard_L8aos_v4", "Standard_L12aos_v4", "Standard_L16aos_v4", "Standard_L24aos_v4", "Standard_L32aos_v4"],
121
+ "Lasv4": ["Standard_L2as_v4", "Standard_L4as_v4", "Standard_L8as_v4", "Standard_L16as_v4", "Standard_L32as_v4", "Standard_L48as_v4", "Standard_L64as_v4", "Standard_L80as_v4", "Standard_L96as_v4"],
122
+ "Lsv4": ["Standard_L2s_v4", "Standard_L4s_v4", "Standard_L8s_v4", "Standard_L16s_v4", "Standard_L32s_v4", "Standard_L48s_v4", "Standard_L64s_v4", "Standard_L80s_v4", "Standard_L96s_v4"],
123
+ "Lsv3": ["Standard_L8s_v3", "Standard_L16s_v3", "Standard_L32s_v3", "Standard_L48s_v3", "Standard_L64s_v3", "Standard_L80s_v3"],
124
+ "Lasv3": ["Standard_L8as_v3", "Standard_L16as_v3", "Standard_L32as_v3", "Standard_L48as_v3", "Standard_L64as_v3", "Standard_L80as_v3"],
125
+ "HBv2": ["Standard_HB120rs_v2", "Standard_HB120-96rs_v2", "Standard_HB120-64rs_v2", "Standard_HB120-32rs_v2", "Standard_HB120-16rs_v2"],
126
+ "HBv3": ["Standard_HB120rs_v3", "Standard_HB120-96rs_v3", "Standard_HB120-64rs_v3", "Standard_HB120-32rs_v3", "Standard_HB120-16rs_v3"],
127
+ "HBv4": ["Standard_HB176rs_v4", "Standard_HB176-144rs_v4", "Standard_HB176-96rs_v4", "Standard_HB176-48rs_v4", "Standard_HB176-24rs_v4"],
128
+ "HBv5": ["Standard_HB368rs_v5", "Standard_HB368-336rs_v5", "Standard_HB368-288rs_v5", "Standard_HB368-240rs_v5", "Standard_HB368-192rs_v5", "Standard_HB368-144rs_v5", "Standard_HB368-96rs_v5", "Standard_HB368-48rs_v5"],
129
+ "HC": ["Standard_HC44rs", "Standard_HC44-16rs", "Standard_HC44-32rs"],
130
+ "HX": ["Standard_HX176rs", "Standard_HX176-144rs", "Standard_HX176-96rs", "Standard_HX176-48rs", "Standard_HX176-24rs"],
131
+ };
132
+ const AZURE_INSTANCE_TYPES = flatten(Object.values(AZURE_INSTANCE_TYPES_BY_FAMILY));
133
+ /**
134
+ * @see https://aka.ms/flexfxversions
135
+ * @see https://learn.microsoft.com/en-us/azure/azure-functions/functions-create-first-function-terraform
136
+ */
137
+ const AZURE_LAMBDA_RUNTIMES = [
138
+ {
139
+ runtime_name: "dotnet-isolated",
140
+ runtime_verison: "8",
141
+ },
142
+ {
143
+ runtime_name: "dotnet-isolated",
144
+ runtime_verison: "9",
145
+ },
146
+ {
147
+ runtime_name: "dotnet-isolated",
148
+ runtime_verison: "10",
149
+ },
150
+ {
151
+ runtime_name: "java",
152
+ runtime_verison: "11",
153
+ },
154
+ {
155
+ runtime_name: "java",
156
+ runtime_verison: "17",
157
+ },
158
+ {
159
+ runtime_name: "java",
160
+ runtime_verison: "21",
161
+ },
162
+ {
163
+ runtime_name: "node",
164
+ runtime_verison: "20",
165
+ },
166
+ {
167
+ runtime_name: "node",
168
+ runtime_verison: "22",
169
+ },
170
+ {
171
+ runtime_name: "powershell",
172
+ runtime_verison: "7.4",
173
+ },
174
+ {
175
+ runtime_name: "python",
176
+ runtime_verison: "3.10",
177
+ },
178
+ {
179
+ runtime_name: "python",
180
+ runtime_verison: "3.11",
181
+ },
182
+ {
183
+ runtime_name: "python",
184
+ runtime_verison: "3.12",
185
+ },
186
+ ];
187
+ export { AZURE_INSTANCE_TYPES, AZURE_INSTANCE_TYPES_BY_FAMILY, AZURE_LAMBDA_RUNTIMES, AZURE_REGIONS, };
@@ -2,6 +2,7 @@ import type { ObjectValues } from "../types/object-values.js";
2
2
  declare const Providers: {
3
3
  readonly AWS: "aws";
4
4
  readonly GCP: "gcp";
5
+ readonly Azure: "azure";
5
6
  };
6
7
  type Provider = ObjectValues<typeof Providers>;
7
8
  export type { Provider };
@@ -1,5 +1,6 @@
1
1
  const Providers = {
2
2
  AWS: "aws",
3
3
  GCP: "gcp",
4
+ Azure: "azure",
4
5
  };
5
6
  export { Providers };
@@ -0,0 +1,11 @@
1
+ import type { ObjectValues } from "../types/object-values.js";
2
+ /**
3
+ * Represents an abstract resource type that most providers offer, but may name differently.
4
+ */
5
+ declare const ResourceTypes: {
6
+ readonly ComputeInstance: "compute-instance";
7
+ readonly LambdaFunction: "lambda-function";
8
+ };
9
+ type ResourceType = ObjectValues<typeof ResourceTypes>;
10
+ export type { ResourceType };
11
+ export { ResourceTypes };
@@ -0,0 +1,8 @@
1
+ /**
2
+ * Represents an abstract resource type that most providers offer, but may name differently.
3
+ */
4
+ const ResourceTypes = {
5
+ ComputeInstance: "compute-instance",
6
+ LambdaFunction: "lambda-function",
7
+ };
8
+ export { ResourceTypes };
@@ -0,0 +1,9 @@
1
+ import { ProviderGenerator } from "./provider-generator.js";
2
+ declare class AwsGenerator extends ProviderGenerator {
3
+ addProvider(): void;
4
+ addComputeInstance(): this;
5
+ addLambdaFunction(): this;
6
+ private randomAmi;
7
+ private randomRole;
8
+ }
9
+ export { AwsGenerator };
@@ -0,0 +1,68 @@
1
+ import { AWS_EBS_VOLUME_TYPES, AWS_INSTANCE_TYPES, AWS_LAMBDA_RUNTIMES, AWS_REGIONS, } from "../../constants/aws.js";
2
+ import { maybe, randomEnvironmentTag, randomId, randomItem, randomMemorableSlug, randomMemorySize, randomServiceTag, unique, } from "./generator-utils.js";
3
+ import { ProviderGenerator } from "./provider-generator.js";
4
+ const AwsResourceType = {
5
+ ComputeInstance: "aws_instance",
6
+ LambdaFunction: "aws_lambda_function",
7
+ };
8
+ class AwsGenerator extends ProviderGenerator {
9
+ addProvider() {
10
+ const region = randomItem(AWS_REGIONS);
11
+ this.tfg.provider("aws", { region });
12
+ }
13
+ addComputeInstance() {
14
+ const name = randomMemorableSlug();
15
+ const environment = randomEnvironmentTag();
16
+ const service = randomServiceTag();
17
+ const ami = this.randomAmi();
18
+ const instanceType = randomItem(AWS_INSTANCE_TYPES);
19
+ const rootBlockDevice = maybe(0.5)
20
+ ? {
21
+ root_block_device: {
22
+ volume_size: randomMemorySize({
23
+ min: 1024,
24
+ max: 64 * 1024 * 1024,
25
+ step: 1024,
26
+ }),
27
+ volume_type: randomItem(AWS_EBS_VOLUME_TYPES),
28
+ },
29
+ }
30
+ : {};
31
+ this.tfg.resource(AwsResourceType.ComputeInstance, name, {
32
+ ami,
33
+ instance_type: instanceType,
34
+ ...rootBlockDevice,
35
+ tags: { name, environment, service },
36
+ });
37
+ return this;
38
+ }
39
+ addLambdaFunction() {
40
+ const name = randomMemorableSlug();
41
+ const environment = randomEnvironmentTag();
42
+ const service = randomServiceTag();
43
+ // https://docs.aws.amazon.com/lambda/latest/dg/configuration-memory.html
44
+ const memorySize = randomMemorySize({
45
+ min: 128,
46
+ max: 10240,
47
+ step: 128,
48
+ });
49
+ const ami = this.randomAmi();
50
+ const role = this.randomRole();
51
+ const runtime = randomItem(AWS_LAMBDA_RUNTIMES);
52
+ const functionName = randomItem(["run", "test", "handler"]);
53
+ const handler = `${randomItem(["exports", "index"])}.${functionName}`;
54
+ this.tfg.resource(AwsResourceType.LambdaFunction, name, {
55
+ ami,
56
+ runtime,
57
+ handler,
58
+ function_name: functionName,
59
+ memory_size: memorySize,
60
+ role,
61
+ tags: { name, environment, service },
62
+ });
63
+ return this;
64
+ }
65
+ randomAmi = unique(() => `ami-${randomId()}`);
66
+ randomRole = unique(() => `arn:aws:iam::${randomId()}:mfa/${randomMemorableSlug()}`);
67
+ }
68
+ export { AwsGenerator };
@@ -0,0 +1,7 @@
1
+ import { ProviderGenerator } from "./provider-generator.js";
2
+ declare class AzureGenerator extends ProviderGenerator {
3
+ addProvider(): void;
4
+ addComputeInstance(): this;
5
+ addLambdaFunction(): this;
6
+ }
7
+ export { AzureGenerator };