@performance-agent/mcp-server 1.0.1 → 1.0.6
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.
Potentially problematic release.
This version of @performance-agent/mcp-server might be problematic. Click here for more details.
- package/README.md +400 -25
- package/dist/index.d.ts +14 -4
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +783 -47
- package/dist/index.js.map +1 -1
- package/dist/prompts/jmx_prompt.txt +262 -0
- package/dist/prompts/prompts/jmx_prompt.txt +262 -0
- package/dist/tools/azure-infra/config-parser.d.ts +14 -0
- package/dist/tools/azure-infra/config-parser.d.ts.map +1 -0
- package/dist/tools/azure-infra/config-parser.js +361 -0
- package/dist/tools/azure-infra/config-parser.js.map +1 -0
- package/dist/tools/azure-infra/index.d.ts +52 -0
- package/dist/tools/azure-infra/index.d.ts.map +1 -0
- package/dist/tools/azure-infra/index.js +448 -0
- package/dist/tools/azure-infra/index.js.map +1 -0
- package/dist/tools/azure-infra/terraform-generator.d.ts +19 -0
- package/dist/tools/azure-infra/terraform-generator.d.ts.map +1 -0
- package/dist/tools/azure-infra/terraform-generator.js +458 -0
- package/dist/tools/azure-infra/terraform-generator.js.map +1 -0
- package/dist/tools/azure-infra/types.d.ts +123 -0
- package/dist/tools/azure-infra/types.d.ts.map +1 -0
- package/dist/tools/azure-infra/types.js +95 -0
- package/dist/tools/azure-infra/types.js.map +1 -0
- package/dist/tools/cloud-executor/index.d.ts +78 -0
- package/dist/tools/cloud-executor/index.d.ts.map +1 -0
- package/dist/tools/cloud-executor/index.js +528 -0
- package/dist/tools/cloud-executor/index.js.map +1 -0
- package/dist/tools/cloud-executor/result-analyzer.d.ts +65 -0
- package/dist/tools/cloud-executor/result-analyzer.d.ts.map +1 -0
- package/dist/tools/cloud-executor/result-analyzer.js +367 -0
- package/dist/tools/cloud-executor/result-analyzer.js.map +1 -0
- package/dist/tools/cloud-executor/vm-metrics.d.ts +87 -0
- package/dist/tools/cloud-executor/vm-metrics.d.ts.map +1 -0
- package/dist/tools/cloud-executor/vm-metrics.js +506 -0
- package/dist/tools/cloud-executor/vm-metrics.js.map +1 -0
- package/dist/tools/jmx-generator/index.d.ts +20 -0
- package/dist/tools/jmx-generator/index.d.ts.map +1 -0
- package/dist/tools/jmx-generator/index.js +115 -0
- package/dist/tools/jmx-generator/index.js.map +1 -0
- package/dist/tools/jmx-generator/sanitizer.d.ts +19 -0
- package/dist/tools/jmx-generator/sanitizer.d.ts.map +1 -0
- package/dist/tools/jmx-generator/sanitizer.js +166 -0
- package/dist/tools/jmx-generator/sanitizer.js.map +1 -0
- package/package.json +5 -2
- package/scripts/copy-prompts.js +46 -0
|
@@ -0,0 +1,448 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Azure Infrastructure Provisioning Tool
|
|
3
|
+
* Main entry point for VM provisioning via MCP
|
|
4
|
+
*/
|
|
5
|
+
import { execSync, spawn } from 'child_process';
|
|
6
|
+
import { VM_SIZE_PRESETS, } from './types.js';
|
|
7
|
+
import { parseVMDescription, resolveVMConfig } from './config-parser.js';
|
|
8
|
+
import { saveTerraformConfig, } from './terraform-generator.js';
|
|
9
|
+
/**
|
|
10
|
+
* Execute command and capture output with progress tracking
|
|
11
|
+
*/
|
|
12
|
+
function executeCommand(command, args, cwd) {
|
|
13
|
+
return new Promise((resolve) => {
|
|
14
|
+
const proc = spawn(command, args, {
|
|
15
|
+
cwd,
|
|
16
|
+
shell: true,
|
|
17
|
+
env: { ...process.env, TF_IN_AUTOMATION: 'true' },
|
|
18
|
+
});
|
|
19
|
+
let stdout = '';
|
|
20
|
+
let stderr = '';
|
|
21
|
+
proc.stdout.on('data', (data) => {
|
|
22
|
+
const text = data.toString();
|
|
23
|
+
stdout += text;
|
|
24
|
+
// Log progress to stderr for MCP visibility
|
|
25
|
+
console.error(`[terraform] ${text.trim()}`);
|
|
26
|
+
});
|
|
27
|
+
proc.stderr.on('data', (data) => {
|
|
28
|
+
const text = data.toString();
|
|
29
|
+
stderr += text;
|
|
30
|
+
console.error(`[terraform] ${text.trim()}`);
|
|
31
|
+
});
|
|
32
|
+
proc.on('close', (code) => {
|
|
33
|
+
if (code === 0) {
|
|
34
|
+
resolve({ success: true, output: stdout });
|
|
35
|
+
}
|
|
36
|
+
else {
|
|
37
|
+
resolve({ success: false, output: stdout, error: stderr || stdout });
|
|
38
|
+
}
|
|
39
|
+
});
|
|
40
|
+
proc.on('error', (err) => {
|
|
41
|
+
resolve({ success: false, output: '', error: err.message });
|
|
42
|
+
});
|
|
43
|
+
});
|
|
44
|
+
}
|
|
45
|
+
/**
|
|
46
|
+
* List all Azure subscriptions the user has access to
|
|
47
|
+
*/
|
|
48
|
+
export async function listAzureSubscriptions() {
|
|
49
|
+
try {
|
|
50
|
+
// Check if logged in
|
|
51
|
+
try {
|
|
52
|
+
execSync('az account show', { stdio: 'pipe' });
|
|
53
|
+
}
|
|
54
|
+
catch {
|
|
55
|
+
return {
|
|
56
|
+
success: false,
|
|
57
|
+
error: 'Not logged into Azure CLI. Please run: az login',
|
|
58
|
+
};
|
|
59
|
+
}
|
|
60
|
+
// Get all subscriptions
|
|
61
|
+
const subsJson = execSync('az account list --output json', {
|
|
62
|
+
encoding: 'utf-8',
|
|
63
|
+
stdio: ['pipe', 'pipe', 'pipe'],
|
|
64
|
+
});
|
|
65
|
+
const subscriptions = JSON.parse(subsJson).map((sub) => ({
|
|
66
|
+
id: sub.id,
|
|
67
|
+
name: sub.name,
|
|
68
|
+
state: sub.state,
|
|
69
|
+
isDefault: sub.isDefault,
|
|
70
|
+
tenantId: sub.tenantId,
|
|
71
|
+
}));
|
|
72
|
+
const currentSubscription = subscriptions.find((s) => s.isDefault);
|
|
73
|
+
return {
|
|
74
|
+
success: true,
|
|
75
|
+
subscriptions,
|
|
76
|
+
currentSubscription,
|
|
77
|
+
};
|
|
78
|
+
}
|
|
79
|
+
catch (error) {
|
|
80
|
+
return {
|
|
81
|
+
success: false,
|
|
82
|
+
error: `Failed to list subscriptions: ${error.message}`,
|
|
83
|
+
};
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
/**
|
|
87
|
+
* Set the active Azure subscription
|
|
88
|
+
*/
|
|
89
|
+
export async function setAzureSubscription(subscriptionId) {
|
|
90
|
+
try {
|
|
91
|
+
execSync(`az account set --subscription "${subscriptionId}"`, { stdio: 'pipe' });
|
|
92
|
+
return {
|
|
93
|
+
success: true,
|
|
94
|
+
message: `Switched to subscription: ${subscriptionId}`,
|
|
95
|
+
};
|
|
96
|
+
}
|
|
97
|
+
catch (error) {
|
|
98
|
+
return {
|
|
99
|
+
success: false,
|
|
100
|
+
error: `Failed to set subscription: ${error.message}`,
|
|
101
|
+
};
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
/**
|
|
105
|
+
* List resource groups in the current subscription
|
|
106
|
+
*/
|
|
107
|
+
export async function listResourceGroups(subscriptionId) {
|
|
108
|
+
try {
|
|
109
|
+
let cmd = 'az group list --output json';
|
|
110
|
+
if (subscriptionId) {
|
|
111
|
+
cmd += ` --subscription "${subscriptionId}"`;
|
|
112
|
+
}
|
|
113
|
+
const rgsJson = execSync(cmd, {
|
|
114
|
+
encoding: 'utf-8',
|
|
115
|
+
stdio: ['pipe', 'pipe', 'pipe'],
|
|
116
|
+
});
|
|
117
|
+
const resourceGroups = JSON.parse(rgsJson).map((rg) => ({
|
|
118
|
+
name: rg.name,
|
|
119
|
+
location: rg.location,
|
|
120
|
+
provisioningState: rg.properties?.provisioningState || 'Unknown',
|
|
121
|
+
tags: rg.tags || {},
|
|
122
|
+
}));
|
|
123
|
+
return {
|
|
124
|
+
success: true,
|
|
125
|
+
resourceGroups,
|
|
126
|
+
};
|
|
127
|
+
}
|
|
128
|
+
catch (error) {
|
|
129
|
+
return {
|
|
130
|
+
success: false,
|
|
131
|
+
error: `Failed to list resource groups: ${error.message}`,
|
|
132
|
+
};
|
|
133
|
+
}
|
|
134
|
+
}
|
|
135
|
+
/**
|
|
136
|
+
* Main function to provision Azure VM
|
|
137
|
+
*/
|
|
138
|
+
export async function provisionAzureVM(args) {
|
|
139
|
+
// Parse configuration from description or use provided config
|
|
140
|
+
let configInput;
|
|
141
|
+
if (args.description) {
|
|
142
|
+
configInput = parseVMDescription(args.description);
|
|
143
|
+
// Merge with any explicit config provided
|
|
144
|
+
if (args.config) {
|
|
145
|
+
configInput = { ...configInput, ...args.config };
|
|
146
|
+
}
|
|
147
|
+
}
|
|
148
|
+
else if (args.config) {
|
|
149
|
+
configInput = args.config;
|
|
150
|
+
}
|
|
151
|
+
else {
|
|
152
|
+
throw new Error('Either description or config must be provided');
|
|
153
|
+
}
|
|
154
|
+
// Resolve full configuration with defaults
|
|
155
|
+
const vmConfig = resolveVMConfig(configInput);
|
|
156
|
+
// Determine output path
|
|
157
|
+
const outputPath = args.outputPath || process.cwd();
|
|
158
|
+
// Handle based on provisioning method
|
|
159
|
+
const method = args.method || 'dry-run';
|
|
160
|
+
switch (method) {
|
|
161
|
+
case 'dry-run':
|
|
162
|
+
return handleDryRun(vmConfig, outputPath, args.generateTerraform ?? true);
|
|
163
|
+
case 'terraform':
|
|
164
|
+
return handleTerraformProvisioning(vmConfig, outputPath);
|
|
165
|
+
case 'azure-cli':
|
|
166
|
+
return handleAzureCLIProvisioning(vmConfig, outputPath);
|
|
167
|
+
default:
|
|
168
|
+
throw new Error(`Unknown provisioning method: ${method}`);
|
|
169
|
+
}
|
|
170
|
+
}
|
|
171
|
+
/**
|
|
172
|
+
* Dry run - generates configuration without provisioning
|
|
173
|
+
*/
|
|
174
|
+
async function handleDryRun(config, outputPath, generateTerraform) {
|
|
175
|
+
const result = {
|
|
176
|
+
success: true,
|
|
177
|
+
vmName: config.name,
|
|
178
|
+
resourceGroup: config.resourceGroup,
|
|
179
|
+
region: config.region,
|
|
180
|
+
vmSize: config.vmSize,
|
|
181
|
+
provisioningState: 'DryRun',
|
|
182
|
+
azurePortalUrl: `https://portal.azure.com/#create/Microsoft.VirtualMachine`,
|
|
183
|
+
estimatedCost: estimateVMCost(config.vmSize),
|
|
184
|
+
message: 'Dry run completed. Configuration generated but not applied.',
|
|
185
|
+
};
|
|
186
|
+
if (generateTerraform) {
|
|
187
|
+
const terraformDir = await saveTerraformConfig(config, outputPath);
|
|
188
|
+
result.terraformGenerated = true;
|
|
189
|
+
result.terraformPath = terraformDir;
|
|
190
|
+
result.message = `Dry run completed. Terraform files generated at: ${terraformDir}`;
|
|
191
|
+
}
|
|
192
|
+
return result;
|
|
193
|
+
}
|
|
194
|
+
/**
|
|
195
|
+
* Provision VM using Terraform with progress tracking
|
|
196
|
+
*/
|
|
197
|
+
async function handleTerraformProvisioning(config, outputPath) {
|
|
198
|
+
const steps = [];
|
|
199
|
+
// Step 1: Check if Terraform is installed
|
|
200
|
+
console.error('🔍 Step 1/5: Checking prerequisites...');
|
|
201
|
+
steps.push('✅ Checking prerequisites');
|
|
202
|
+
try {
|
|
203
|
+
execSync('terraform version', { stdio: 'pipe' });
|
|
204
|
+
console.error(' ✓ Terraform is installed');
|
|
205
|
+
}
|
|
206
|
+
catch {
|
|
207
|
+
return {
|
|
208
|
+
success: false,
|
|
209
|
+
vmName: config.name,
|
|
210
|
+
resourceGroup: config.resourceGroup,
|
|
211
|
+
region: config.region,
|
|
212
|
+
vmSize: config.vmSize,
|
|
213
|
+
provisioningState: 'Failed',
|
|
214
|
+
message: '❌ Terraform is not installed. Please install it from https://terraform.io/downloads',
|
|
215
|
+
steps,
|
|
216
|
+
};
|
|
217
|
+
}
|
|
218
|
+
// Check if Azure CLI is logged in
|
|
219
|
+
try {
|
|
220
|
+
const accountInfo = execSync('az account show --output json', { stdio: 'pipe', encoding: 'utf-8' });
|
|
221
|
+
const account = JSON.parse(accountInfo);
|
|
222
|
+
console.error(` ✓ Azure CLI logged in (Subscription: ${account.name})`);
|
|
223
|
+
}
|
|
224
|
+
catch {
|
|
225
|
+
return {
|
|
226
|
+
success: false,
|
|
227
|
+
vmName: config.name,
|
|
228
|
+
resourceGroup: config.resourceGroup,
|
|
229
|
+
region: config.region,
|
|
230
|
+
vmSize: config.vmSize,
|
|
231
|
+
provisioningState: 'Failed',
|
|
232
|
+
message: '❌ Azure CLI is not logged in. Please run: az login',
|
|
233
|
+
steps,
|
|
234
|
+
};
|
|
235
|
+
}
|
|
236
|
+
// Step 2: Generate and save Terraform configuration
|
|
237
|
+
console.error('📁 Step 2/5: Generating Terraform configuration...');
|
|
238
|
+
steps.push('✅ Generating Terraform configuration');
|
|
239
|
+
const terraformDir = await saveTerraformConfig(config, outputPath);
|
|
240
|
+
console.error(` ✓ Configuration saved to: ${terraformDir}`);
|
|
241
|
+
// Step 3: Initialize Terraform
|
|
242
|
+
console.error('🔧 Step 3/5: Initializing Terraform...');
|
|
243
|
+
steps.push('⏳ Initializing Terraform');
|
|
244
|
+
const initResult = await executeCommand('terraform', ['init', '-no-color'], terraformDir);
|
|
245
|
+
if (!initResult.success) {
|
|
246
|
+
steps[steps.length - 1] = '❌ Terraform init failed';
|
|
247
|
+
return {
|
|
248
|
+
success: false,
|
|
249
|
+
vmName: config.name,
|
|
250
|
+
resourceGroup: config.resourceGroup,
|
|
251
|
+
region: config.region,
|
|
252
|
+
vmSize: config.vmSize,
|
|
253
|
+
provisioningState: 'Failed',
|
|
254
|
+
terraformGenerated: true,
|
|
255
|
+
terraformPath: terraformDir,
|
|
256
|
+
message: `❌ Terraform init failed:\n${initResult.error}`,
|
|
257
|
+
steps,
|
|
258
|
+
};
|
|
259
|
+
}
|
|
260
|
+
steps[steps.length - 1] = '✅ Terraform initialized';
|
|
261
|
+
console.error(' ✓ Terraform initialized successfully');
|
|
262
|
+
// Step 4: Apply Terraform configuration
|
|
263
|
+
console.error('🚀 Step 4/5: Provisioning Azure VM (this may take 2-5 minutes)...');
|
|
264
|
+
steps.push('⏳ Provisioning Azure VM');
|
|
265
|
+
const applyResult = await executeCommand('terraform', ['apply', '-auto-approve', '-no-color'], terraformDir);
|
|
266
|
+
if (!applyResult.success) {
|
|
267
|
+
steps[steps.length - 1] = '❌ VM provisioning failed';
|
|
268
|
+
// Parse common errors for user-friendly messages
|
|
269
|
+
let errorMessage = applyResult.error || applyResult.output;
|
|
270
|
+
let suggestion = '';
|
|
271
|
+
if (errorMessage.includes('AuthorizationFailed')) {
|
|
272
|
+
suggestion = '\n💡 Suggestion: Check your Azure subscription permissions.';
|
|
273
|
+
}
|
|
274
|
+
else if (errorMessage.includes('QuotaExceeded')) {
|
|
275
|
+
suggestion = '\n💡 Suggestion: You have exceeded your VM quota. Try a different region or VM size.';
|
|
276
|
+
}
|
|
277
|
+
else if (errorMessage.includes('InvalidResourceName')) {
|
|
278
|
+
suggestion = '\n💡 Suggestion: The VM name contains invalid characters. Use only alphanumeric and hyphens.';
|
|
279
|
+
}
|
|
280
|
+
return {
|
|
281
|
+
success: false,
|
|
282
|
+
vmName: config.name,
|
|
283
|
+
resourceGroup: config.resourceGroup,
|
|
284
|
+
region: config.region,
|
|
285
|
+
vmSize: config.vmSize,
|
|
286
|
+
provisioningState: 'Failed',
|
|
287
|
+
terraformGenerated: true,
|
|
288
|
+
terraformPath: terraformDir,
|
|
289
|
+
message: `❌ VM provisioning failed:\n${errorMessage}${suggestion}`,
|
|
290
|
+
steps,
|
|
291
|
+
};
|
|
292
|
+
}
|
|
293
|
+
steps[steps.length - 1] = '✅ Azure VM provisioned';
|
|
294
|
+
console.error(' ✓ VM provisioned successfully');
|
|
295
|
+
// Step 5: Get outputs
|
|
296
|
+
console.error('📊 Step 5/5: Retrieving VM details...');
|
|
297
|
+
steps.push('⏳ Retrieving VM details');
|
|
298
|
+
let publicIP = '';
|
|
299
|
+
let sshCommand = '';
|
|
300
|
+
let portalUrl = '';
|
|
301
|
+
try {
|
|
302
|
+
const outputResult = await executeCommand('terraform', ['output', '-json'], terraformDir);
|
|
303
|
+
if (outputResult.success) {
|
|
304
|
+
const outputs = JSON.parse(outputResult.output);
|
|
305
|
+
publicIP = outputs.public_ip_address?.value || '';
|
|
306
|
+
sshCommand = outputs.ssh_command?.value || '';
|
|
307
|
+
portalUrl = outputs.azure_portal_url?.value || '';
|
|
308
|
+
}
|
|
309
|
+
}
|
|
310
|
+
catch (e) {
|
|
311
|
+
console.error(' ⚠ Could not parse Terraform outputs, continuing...');
|
|
312
|
+
}
|
|
313
|
+
steps[steps.length - 1] = '✅ VM details retrieved';
|
|
314
|
+
console.error(' ✓ VM details retrieved');
|
|
315
|
+
return {
|
|
316
|
+
success: true,
|
|
317
|
+
vmName: config.name,
|
|
318
|
+
resourceGroup: config.resourceGroup,
|
|
319
|
+
region: config.region,
|
|
320
|
+
publicIP,
|
|
321
|
+
vmSize: config.vmSize,
|
|
322
|
+
provisioningState: 'Succeeded',
|
|
323
|
+
sshCommand,
|
|
324
|
+
azurePortalUrl: portalUrl || `https://portal.azure.com/#resource/subscriptions//resourceGroups/${config.resourceGroup}/providers/Microsoft.Compute/virtualMachines/${config.name}`,
|
|
325
|
+
terraformGenerated: true,
|
|
326
|
+
terraformPath: terraformDir,
|
|
327
|
+
estimatedCost: estimateVMCost(config.vmSize),
|
|
328
|
+
message: `🎉 VM ${config.name} provisioned successfully!`,
|
|
329
|
+
steps,
|
|
330
|
+
};
|
|
331
|
+
}
|
|
332
|
+
/**
|
|
333
|
+
* Provision VM using Azure CLI
|
|
334
|
+
*/
|
|
335
|
+
async function handleAzureCLIProvisioning(config, outputPath) {
|
|
336
|
+
// Check if Azure CLI is installed and logged in
|
|
337
|
+
try {
|
|
338
|
+
execSync('az account show', { stdio: 'pipe' });
|
|
339
|
+
}
|
|
340
|
+
catch {
|
|
341
|
+
throw new Error('Azure CLI is not logged in. Please run: az login');
|
|
342
|
+
}
|
|
343
|
+
const isWindows = config.imageReference.publisher === 'MicrosoftWindowsServer';
|
|
344
|
+
const image = `${config.imageReference.publisher}:${config.imageReference.offer}:${config.imageReference.sku}:${config.imageReference.version}`;
|
|
345
|
+
try {
|
|
346
|
+
// Create resource group
|
|
347
|
+
console.error(`Creating resource group ${config.resourceGroup}...`);
|
|
348
|
+
execSync(`az group create --name ${config.resourceGroup} --location ${config.region}`, { stdio: 'inherit' });
|
|
349
|
+
// Create VM
|
|
350
|
+
console.error(`Creating VM ${config.name}...`);
|
|
351
|
+
const vmCreateCmd = [
|
|
352
|
+
'az vm create',
|
|
353
|
+
`--resource-group ${config.resourceGroup}`,
|
|
354
|
+
`--name ${config.name}`,
|
|
355
|
+
`--image "${image}"`,
|
|
356
|
+
`--size ${config.vmSize}`,
|
|
357
|
+
`--admin-username ${config.adminUsername}`,
|
|
358
|
+
isWindows ? '' : '--generate-ssh-keys',
|
|
359
|
+
`--os-disk-size-gb ${config.osDisk.sizeGB}`,
|
|
360
|
+
`--storage-sku ${config.osDisk.storageAccountType}`,
|
|
361
|
+
config.networkConfig.publicIP ? '' : '--public-ip-address ""',
|
|
362
|
+
config.priority === 'Spot' ? '--priority Spot --eviction-policy Deallocate --max-price -1' : '',
|
|
363
|
+
'--output json',
|
|
364
|
+
]
|
|
365
|
+
.filter(Boolean)
|
|
366
|
+
.join(' ');
|
|
367
|
+
const vmResult = execSync(vmCreateCmd, { encoding: 'utf-8' });
|
|
368
|
+
const vmInfo = JSON.parse(vmResult);
|
|
369
|
+
// Configure NSG rules
|
|
370
|
+
console.error('Configuring network security rules...');
|
|
371
|
+
for (let i = 0; i < config.networkConfig.openPorts.length; i++) {
|
|
372
|
+
const port = config.networkConfig.openPorts[i];
|
|
373
|
+
execSync(`az vm open-port --resource-group ${config.resourceGroup} --name ${config.name} --port ${port} --priority ${100 + i * 10}`, { stdio: 'inherit' });
|
|
374
|
+
}
|
|
375
|
+
return {
|
|
376
|
+
success: true,
|
|
377
|
+
vmName: config.name,
|
|
378
|
+
resourceGroup: config.resourceGroup,
|
|
379
|
+
region: config.region,
|
|
380
|
+
publicIP: vmInfo.publicIpAddress,
|
|
381
|
+
privateIP: vmInfo.privateIpAddress,
|
|
382
|
+
vmSize: config.vmSize,
|
|
383
|
+
provisioningState: 'Succeeded',
|
|
384
|
+
sshCommand: vmInfo.publicIpAddress
|
|
385
|
+
? `ssh ${config.adminUsername}@${vmInfo.publicIpAddress}`
|
|
386
|
+
: undefined,
|
|
387
|
+
azurePortalUrl: `https://portal.azure.com/#@/resource${vmInfo.id}`,
|
|
388
|
+
estimatedCost: estimateVMCost(config.vmSize),
|
|
389
|
+
message: `VM ${config.name} provisioned successfully using Azure CLI!`,
|
|
390
|
+
};
|
|
391
|
+
}
|
|
392
|
+
catch (error) {
|
|
393
|
+
throw new Error(`Azure CLI provisioning failed: ${error.message}`);
|
|
394
|
+
}
|
|
395
|
+
}
|
|
396
|
+
/**
|
|
397
|
+
* Estimate VM cost based on size
|
|
398
|
+
*/
|
|
399
|
+
function estimateVMCost(vmSize) {
|
|
400
|
+
// Approximate pricing (actual prices vary by region and may change)
|
|
401
|
+
const pricing = {
|
|
402
|
+
'Standard_B1ms': 0.021,
|
|
403
|
+
'Standard_B2s': 0.042,
|
|
404
|
+
'Standard_D2s_v3': 0.096,
|
|
405
|
+
'Standard_D4s_v3': 0.192,
|
|
406
|
+
'Standard_D8s_v3': 0.384,
|
|
407
|
+
'Standard_E4s_v3': 0.252,
|
|
408
|
+
'Standard_F4s_v2': 0.169,
|
|
409
|
+
'Standard_NC6s_v3': 3.06,
|
|
410
|
+
};
|
|
411
|
+
const hourlyRate = pricing[vmSize] || 0.10; // Default estimate
|
|
412
|
+
return {
|
|
413
|
+
hourly: hourlyRate,
|
|
414
|
+
monthly: Math.round(hourlyRate * 730 * 100) / 100, // ~730 hours per month
|
|
415
|
+
currency: 'USD',
|
|
416
|
+
};
|
|
417
|
+
}
|
|
418
|
+
/**
|
|
419
|
+
* Get available VM size presets
|
|
420
|
+
*/
|
|
421
|
+
export function getVMSizePresets() {
|
|
422
|
+
return VM_SIZE_PRESETS;
|
|
423
|
+
}
|
|
424
|
+
/**
|
|
425
|
+
* Validate Azure CLI and Terraform availability
|
|
426
|
+
*/
|
|
427
|
+
export function checkPrerequisites() {
|
|
428
|
+
let azureCli = false;
|
|
429
|
+
let azureLoggedIn = false;
|
|
430
|
+
let terraform = false;
|
|
431
|
+
try {
|
|
432
|
+
execSync('az version', { stdio: 'pipe' });
|
|
433
|
+
azureCli = true;
|
|
434
|
+
try {
|
|
435
|
+
execSync('az account show', { stdio: 'pipe' });
|
|
436
|
+
azureLoggedIn = true;
|
|
437
|
+
}
|
|
438
|
+
catch { }
|
|
439
|
+
}
|
|
440
|
+
catch { }
|
|
441
|
+
try {
|
|
442
|
+
execSync('terraform version', { stdio: 'pipe' });
|
|
443
|
+
terraform = true;
|
|
444
|
+
}
|
|
445
|
+
catch { }
|
|
446
|
+
return { azureCli, azureLoggedIn, terraform };
|
|
447
|
+
}
|
|
448
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/tools/azure-infra/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Terraform Generator for Azure VMs
|
|
3
|
+
* Generates Terraform configuration files for VM provisioning
|
|
4
|
+
*/
|
|
5
|
+
import { VMConfig } from './types.js';
|
|
6
|
+
/**
|
|
7
|
+
* Generate complete Terraform configuration for a VM
|
|
8
|
+
*/
|
|
9
|
+
export declare function generateTerraformConfig(config: VMConfig): string;
|
|
10
|
+
/**
|
|
11
|
+
* Generate Azure CLI commands as an alternative
|
|
12
|
+
*/
|
|
13
|
+
export declare function generateAzureCLICommands(config: VMConfig): string;
|
|
14
|
+
export declare const PERF_OUTPUT_DIR = ".perf-output";
|
|
15
|
+
/**
|
|
16
|
+
* Save Terraform configuration to a file
|
|
17
|
+
*/
|
|
18
|
+
export declare function saveTerraformConfig(config: VMConfig, outputDir: string): Promise<string>;
|
|
19
|
+
//# sourceMappingURL=terraform-generator.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"terraform-generator.d.ts","sourceRoot":"","sources":["../../../src/tools/azure-infra/terraform-generator.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAItC;;GAEG;AACH,wBAAgB,uBAAuB,CAAC,MAAM,EAAE,QAAQ,GAAG,MAAM,CAmNhE;AA2FD;;GAEG;AACH,wBAAgB,wBAAwB,CAAC,MAAM,EAAE,QAAQ,GAAG,MAAM,CAwFjE;AAGD,eAAO,MAAM,eAAe,iBAAiB,CAAC;AAE9C;;GAEG;AACH,wBAAsB,mBAAmB,CACvC,MAAM,EAAE,QAAQ,EAChB,SAAS,EAAE,MAAM,GAChB,OAAO,CAAC,MAAM,CAAC,CAsEjB"}
|