terrafaker 0.0.0 → 0.0.4
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/README.md +24 -14
- package/dist/commands/generate/file.js +11 -9
- package/dist/commands/generate/repo.js +7 -3
- package/dist/constants/azure.js +187 -0
- package/dist/enums/providers.js +1 -0
- package/dist/enums/resource-types.js +8 -0
- package/dist/utilities/generators/aws-generator.js +68 -0
- package/dist/utilities/generators/azure-generator.js +45 -0
- package/dist/utilities/generators/file-generator.js +13 -0
- package/dist/utilities/generators/gcp-generator.js +53 -0
- package/dist/utilities/generators/generator-utils.js +8 -33
- package/dist/utilities/generators/provider-generator-factory.js +18 -0
- package/dist/utilities/generators/provider-generator.js +35 -0
- package/dist/utilities/generators/repo-generator.js +31 -0
- package/dist/utilities/string-utils.js +2 -1
- package/oclif.manifest.json +5 -3
- package/package.json +13 -14
- package/dist/commands/generate/file.d.ts +0 -13
- package/dist/commands/generate/index.d.ts +0 -7
- package/dist/commands/generate/repo.d.ts +0 -18
- package/dist/commands/gh/clone-repos.d.ts +0 -10
- package/dist/commands/gh/delete-repos.d.ts +0 -9
- package/dist/commands/gh/index.d.ts +0 -7
- package/dist/commands/util/format-psv.d.ts +0 -10
- package/dist/commands/util/format-tsv.d.ts +0 -13
- package/dist/commands/util/index.d.ts +0 -7
- package/dist/constants/aws.d.ts +0 -192
- package/dist/constants/gcp.d.ts +0 -88
- package/dist/constants/tags.d.ts +0 -5
- package/dist/enums/help-messages.d.ts +0 -4
- package/dist/enums/providers.d.ts +0 -8
- package/dist/index.d.ts +0 -1
- package/dist/types/object-values.d.ts +0 -2
- package/dist/utilities/base-command.d.ts +0 -5
- package/dist/utilities/flags.d.ts +0 -5
- package/dist/utilities/generators/aws-generators.d.ts +0 -4
- package/dist/utilities/generators/aws-generators.js +0 -80
- package/dist/utilities/generators/gcp-generators.d.ts +0 -4
- package/dist/utilities/generators/gcp-generators.js +0 -69
- package/dist/utilities/generators/generator-utils.d.ts +0 -80
- package/dist/utilities/github.d.ts +0 -8
- package/dist/utilities/string-utils.d.ts +0 -5
package/README.md
CHANGED
|
@@ -6,9 +6,11 @@ CLI for easily generating fake terraform files and repos
|
|
|
6
6
|
[](https://npmjs.org/package/terrafaker)
|
|
7
7
|
[](https://npmjs.org/package/terrafaker)
|
|
8
8
|
|
|
9
|
-
##
|
|
9
|
+
## Goals
|
|
10
10
|
|
|
11
|
-
|
|
11
|
+
The primary goal of this tool is to quickly generate seed data for testing out platforms that use infrastructure-as-code, like [Infracost](https://www.infracost.io/). The data used to generate the infrastructure configurations is based on public cloud provider docs, but there is no guarantee that the configurations are valid. For example, only some Azure VMs support _accelerators_ or GPU add-ons, but this tool does not encode any of that logic.
|
|
12
|
+
|
|
13
|
+
Obviously, you shouldn't use this tool to try to generate real production infrastructure.
|
|
12
14
|
|
|
13
15
|
## Features
|
|
14
16
|
|
|
@@ -19,12 +21,20 @@ This tool mostly exists to quickly seed data for testing out platforms that rely
|
|
|
19
21
|
### Supported providers and resources
|
|
20
22
|
|
|
21
23
|
- AWS
|
|
22
|
-
-
|
|
23
|
-
-
|
|
24
|
+
- Compute instances
|
|
25
|
+
- Functions
|
|
24
26
|
- GCP
|
|
25
27
|
- Compute instances
|
|
26
28
|
- Functions
|
|
27
|
-
-
|
|
29
|
+
- Azure
|
|
30
|
+
- Compute instances
|
|
31
|
+
- Functions
|
|
32
|
+
|
|
33
|
+
## Issues
|
|
34
|
+
|
|
35
|
+
If you find a bug, feel free to [open up an issue](https://github.com/brandongregoryscott/terrafaker/issues/new) and try to describe it in detail with reproduction steps if possible.
|
|
36
|
+
|
|
37
|
+
If you would like to see a feature, and it isn't [already documented](https://github.com/brandongregoryscott/terrafaker/issues?q=is%3Aissue+is%3Aopen+label%3Aenhancement), feel free to open up a new issue and describe the desired behavior.
|
|
28
38
|
|
|
29
39
|
<!-- prettier-ignore-start -->
|
|
30
40
|
<!-- toc -->
|
|
@@ -41,7 +51,7 @@ $ npm install -g terrafaker
|
|
|
41
51
|
$ terrafaker COMMAND
|
|
42
52
|
running command...
|
|
43
53
|
$ terrafaker (--version)
|
|
44
|
-
terrafaker/0.0.
|
|
54
|
+
terrafaker/0.0.4 darwin-arm64 node-v24.8.0
|
|
45
55
|
$ terrafaker --help [COMMAND]
|
|
46
56
|
USAGE
|
|
47
57
|
$ terrafaker COMMAND
|
|
@@ -64,21 +74,21 @@ Generates a terraform file.
|
|
|
64
74
|
|
|
65
75
|
```
|
|
66
76
|
USAGE
|
|
67
|
-
$ terrafaker generate file [--name <value>] [--provider aws|gcp] [--resource-count <value>] [-f] [-q]
|
|
77
|
+
$ terrafaker generate file [--name <value>] [--provider aws|gcp|azure] [--resource-count <value>] [-f] [-q]
|
|
68
78
|
|
|
69
79
|
FLAGS
|
|
70
80
|
-f, --[no-]format Format the output terraform files. Requires `terraform` to be in your $PATH.
|
|
71
81
|
-q, --quiet Suppress the logging output.
|
|
72
82
|
--name=<value> Name for the generated file, which must end in .tf
|
|
73
83
|
--provider=<option> Cloud provider to generate resources for
|
|
74
|
-
<options: aws|gcp>
|
|
84
|
+
<options: aws|gcp|azure>
|
|
75
85
|
--resource-count=<value> [default: 3] Number of resources per file to generate
|
|
76
86
|
|
|
77
87
|
DESCRIPTION
|
|
78
88
|
Generates a terraform file.
|
|
79
89
|
```
|
|
80
90
|
|
|
81
|
-
_See code: [src/commands/generate/file.ts](https://github.com/brandongregoryscott/terrafaker/blob/v0.0.
|
|
91
|
+
_See code: [src/commands/generate/file.ts](https://github.com/brandongregoryscott/terrafaker/blob/v0.0.4/src/commands/generate/file.ts)_
|
|
82
92
|
|
|
83
93
|
## `terrafaker generate repo`
|
|
84
94
|
|
|
@@ -87,7 +97,7 @@ Generates repo(s) with multiple terraform files.
|
|
|
87
97
|
```
|
|
88
98
|
USAGE
|
|
89
99
|
$ terrafaker generate repo [--directory <value>] [--count <value>] [--file-count <value>] [--resource-count
|
|
90
|
-
<value>] [--prefix <value>] [--provider aws|gcp] [-f] [--create-remote] [--public] [-q]
|
|
100
|
+
<value>] [--prefix <value>] [--provider aws|gcp|azure] [-f] [--create-remote] [--public] [-q]
|
|
91
101
|
|
|
92
102
|
FLAGS
|
|
93
103
|
-f, --[no-]format Format the output terraform files. Requires `terraform` to be in your $PATH.
|
|
@@ -99,7 +109,7 @@ FLAGS
|
|
|
99
109
|
--file-count=<value> [default: 3] Number of files per repo to generate
|
|
100
110
|
--prefix=<value> [default: tf_] Prefix for repo names, useful for quickly identifying generated content
|
|
101
111
|
--provider=<option> Cloud provider to generate resources for
|
|
102
|
-
<options: aws|gcp>
|
|
112
|
+
<options: aws|gcp|azure>
|
|
103
113
|
--public Whether the remote repo(s) created are public.
|
|
104
114
|
--resource-count=<value> [default: 3] Number of resources per file to generate
|
|
105
115
|
|
|
@@ -107,7 +117,7 @@ DESCRIPTION
|
|
|
107
117
|
Generates repo(s) with multiple terraform files.
|
|
108
118
|
```
|
|
109
119
|
|
|
110
|
-
_See code: [src/commands/generate/repo.ts](https://github.com/brandongregoryscott/terrafaker/blob/v0.0.
|
|
120
|
+
_See code: [src/commands/generate/repo.ts](https://github.com/brandongregoryscott/terrafaker/blob/v0.0.4/src/commands/generate/repo.ts)_
|
|
111
121
|
|
|
112
122
|
## `terrafaker gh clone-repos`
|
|
113
123
|
|
|
@@ -126,7 +136,7 @@ DESCRIPTION
|
|
|
126
136
|
`gh` CLI to be installed. To install, run `brew install gh`.
|
|
127
137
|
```
|
|
128
138
|
|
|
129
|
-
_See code: [src/commands/gh/clone-repos.ts](https://github.com/brandongregoryscott/terrafaker/blob/v0.0.
|
|
139
|
+
_See code: [src/commands/gh/clone-repos.ts](https://github.com/brandongregoryscott/terrafaker/blob/v0.0.4/src/commands/gh/clone-repos.ts)_
|
|
130
140
|
|
|
131
141
|
## `terrafaker gh delete-repos`
|
|
132
142
|
|
|
@@ -146,7 +156,7 @@ DESCRIPTION
|
|
|
146
156
|
If the deletion fails, you may need to refresh your CLI permissions with `gh auth refresh -s delete_repo`
|
|
147
157
|
```
|
|
148
158
|
|
|
149
|
-
_See code: [src/commands/gh/delete-repos.ts](https://github.com/brandongregoryscott/terrafaker/blob/v0.0.
|
|
159
|
+
_See code: [src/commands/gh/delete-repos.ts](https://github.com/brandongregoryscott/terrafaker/blob/v0.0.4/src/commands/gh/delete-repos.ts)_
|
|
150
160
|
|
|
151
161
|
## `terrafaker help [COMMAND]`
|
|
152
162
|
|
|
@@ -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 {
|
|
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
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
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 ${
|
|
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
|
|
46
|
+
const { name, path } = await RepoGenerator.generate({
|
|
46
47
|
directory,
|
|
47
48
|
fileCount,
|
|
48
49
|
format,
|
|
49
50
|
prefix,
|
|
50
|
-
provider
|
|
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,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_version: "8",
|
|
141
|
+
},
|
|
142
|
+
{
|
|
143
|
+
runtime_name: "dotnet-isolated",
|
|
144
|
+
runtime_version: "9",
|
|
145
|
+
},
|
|
146
|
+
{
|
|
147
|
+
runtime_name: "dotnet-isolated",
|
|
148
|
+
runtime_version: "10",
|
|
149
|
+
},
|
|
150
|
+
{
|
|
151
|
+
runtime_name: "java",
|
|
152
|
+
runtime_version: "11",
|
|
153
|
+
},
|
|
154
|
+
{
|
|
155
|
+
runtime_name: "java",
|
|
156
|
+
runtime_version: "17",
|
|
157
|
+
},
|
|
158
|
+
{
|
|
159
|
+
runtime_name: "java",
|
|
160
|
+
runtime_version: "21",
|
|
161
|
+
},
|
|
162
|
+
{
|
|
163
|
+
runtime_name: "node",
|
|
164
|
+
runtime_version: "20",
|
|
165
|
+
},
|
|
166
|
+
{
|
|
167
|
+
runtime_name: "node",
|
|
168
|
+
runtime_version: "22",
|
|
169
|
+
},
|
|
170
|
+
{
|
|
171
|
+
runtime_name: "powershell",
|
|
172
|
+
runtime_version: "7.4",
|
|
173
|
+
},
|
|
174
|
+
{
|
|
175
|
+
runtime_name: "python",
|
|
176
|
+
runtime_version: "3.10",
|
|
177
|
+
},
|
|
178
|
+
{
|
|
179
|
+
runtime_name: "python",
|
|
180
|
+
runtime_version: "3.11",
|
|
181
|
+
},
|
|
182
|
+
{
|
|
183
|
+
runtime_name: "python",
|
|
184
|
+
runtime_version: "3.12",
|
|
185
|
+
},
|
|
186
|
+
];
|
|
187
|
+
export { AZURE_INSTANCE_TYPES, AZURE_INSTANCE_TYPES_BY_FAMILY, AZURE_LAMBDA_RUNTIMES, AZURE_REGIONS, };
|
package/dist/enums/providers.js
CHANGED
|
@@ -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,45 @@
|
|
|
1
|
+
import { AZURE_INSTANCE_TYPES, AZURE_LAMBDA_RUNTIMES, AZURE_REGIONS, } from "../../constants/azure.js";
|
|
2
|
+
import { randomEnvironmentTag, randomItem, randomMemorableSlug, randomMemorySize, randomServiceTag, } from "./generator-utils.js";
|
|
3
|
+
import { ProviderGenerator } from "./provider-generator.js";
|
|
4
|
+
const AzureResourceType = {
|
|
5
|
+
ComputeInstance: "azurerm_linux_virtual_machine",
|
|
6
|
+
LambdaFunction: "azurerm_linux_function_app",
|
|
7
|
+
};
|
|
8
|
+
class AzureGenerator extends ProviderGenerator {
|
|
9
|
+
addProvider() {
|
|
10
|
+
const region = randomItem(AZURE_REGIONS);
|
|
11
|
+
this.tfg.provider("azurerm", { region });
|
|
12
|
+
}
|
|
13
|
+
addComputeInstance() {
|
|
14
|
+
const name = randomMemorableSlug();
|
|
15
|
+
const environment = randomEnvironmentTag();
|
|
16
|
+
const service = randomServiceTag();
|
|
17
|
+
const instanceType = randomItem(AZURE_INSTANCE_TYPES);
|
|
18
|
+
this.tfg.resource(AzureResourceType.ComputeInstance, name, {
|
|
19
|
+
size: instanceType,
|
|
20
|
+
tags: { name, environment, service },
|
|
21
|
+
});
|
|
22
|
+
return this;
|
|
23
|
+
}
|
|
24
|
+
addLambdaFunction() {
|
|
25
|
+
const name = randomMemorableSlug();
|
|
26
|
+
const environment = randomEnvironmentTag();
|
|
27
|
+
const service = randomServiceTag();
|
|
28
|
+
const runtime = randomItem(AZURE_LAMBDA_RUNTIMES);
|
|
29
|
+
// There's a lot of different configurations listed, so just guessing here.
|
|
30
|
+
// https://learn.microsoft.com/en-us/azure/azure-functions/functions-scale
|
|
31
|
+
const instanceMemoryInMb = randomMemorySize({
|
|
32
|
+
min: 128,
|
|
33
|
+
max: 4 * 1024,
|
|
34
|
+
step: 128,
|
|
35
|
+
});
|
|
36
|
+
this.tfg.resource(AzureResourceType.LambdaFunction, name, {
|
|
37
|
+
...runtime,
|
|
38
|
+
name,
|
|
39
|
+
instance_memory_in_mb: instanceMemoryInMb,
|
|
40
|
+
labels: { name, environment, service },
|
|
41
|
+
});
|
|
42
|
+
return this;
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
export { AzureGenerator };
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { randomProvider } from "./generator-utils.js";
|
|
2
|
+
import { ProviderGeneratorFactory } from "./provider-generator-factory.js";
|
|
3
|
+
class FileGenerator {
|
|
4
|
+
static generate(options) {
|
|
5
|
+
const { provider = randomProvider(), resourceCount = 3, fileName, directory, format, } = options;
|
|
6
|
+
const generator = ProviderGeneratorFactory.get(provider);
|
|
7
|
+
for (let i = 0; i < resourceCount; i++) {
|
|
8
|
+
generator.addRandomResource();
|
|
9
|
+
}
|
|
10
|
+
generator.writeToFile({ fileName, directory, format });
|
|
11
|
+
}
|
|
12
|
+
}
|
|
13
|
+
export { FileGenerator };
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
import { GCP_GPU_MACHINE_TYPES, GCP_INSTANCE_TYPES, GCP_LAMBDA_RUNTIMES, GCP_REGIONS, } from "../../constants/gcp.js";
|
|
2
|
+
import { maybe, randomEnvironmentTag, randomInt, randomItem, randomMemorableSlug, randomMemorySize, randomServiceTag, } from "./generator-utils.js";
|
|
3
|
+
import { ProviderGenerator } from "./provider-generator.js";
|
|
4
|
+
const GcpResourceType = {
|
|
5
|
+
ComputeInstance: "google_compute_instance",
|
|
6
|
+
LambdaFunction: "google_cloudfunctions_function",
|
|
7
|
+
};
|
|
8
|
+
class GcpGenerator extends ProviderGenerator {
|
|
9
|
+
addProvider() {
|
|
10
|
+
const region = randomItem(GCP_REGIONS);
|
|
11
|
+
this.tfg.provider("google", { region });
|
|
12
|
+
}
|
|
13
|
+
addComputeInstance() {
|
|
14
|
+
const name = randomMemorableSlug();
|
|
15
|
+
const environment = randomEnvironmentTag();
|
|
16
|
+
const service = randomServiceTag();
|
|
17
|
+
const machineType = randomItem(GCP_INSTANCE_TYPES);
|
|
18
|
+
const guestAccelerator = maybe(0.5)
|
|
19
|
+
? {
|
|
20
|
+
guest_accelerator: {
|
|
21
|
+
type: randomItem(GCP_GPU_MACHINE_TYPES),
|
|
22
|
+
count: randomInt({ min: 1, max: 4 }),
|
|
23
|
+
},
|
|
24
|
+
}
|
|
25
|
+
: {};
|
|
26
|
+
this.tfg.resource(GcpResourceType.ComputeInstance, name, {
|
|
27
|
+
machine_type: machineType,
|
|
28
|
+
...guestAccelerator,
|
|
29
|
+
labels: { name, environment, service },
|
|
30
|
+
});
|
|
31
|
+
return this;
|
|
32
|
+
}
|
|
33
|
+
addLambdaFunction() {
|
|
34
|
+
const name = randomMemorableSlug();
|
|
35
|
+
const environment = randomEnvironmentTag();
|
|
36
|
+
const service = randomServiceTag();
|
|
37
|
+
const runtime = randomItem(GCP_LAMBDA_RUNTIMES);
|
|
38
|
+
// @see https://docs.cloud.google.com/run/docs/configuring/services/memory-limits
|
|
39
|
+
const availableMemoryMb = randomMemorySize({
|
|
40
|
+
min: 128,
|
|
41
|
+
max: 32 * 1024,
|
|
42
|
+
step: 128,
|
|
43
|
+
});
|
|
44
|
+
this.tfg.resource(GcpResourceType.LambdaFunction, name, {
|
|
45
|
+
runtime,
|
|
46
|
+
name,
|
|
47
|
+
available_memory_mb: availableMemoryMb,
|
|
48
|
+
labels: { name, environment, service },
|
|
49
|
+
});
|
|
50
|
+
return this;
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
export { GcpGenerator };
|