anycloud 0.0.10 → 0.0.12
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 +6 -0
- package/binaries/anycloud-darwin-arm64 +0 -0
- package/binaries/anycloud-darwin-x64 +0 -0
- package/binaries/anycloud-linux-arm64 +0 -0
- package/binaries/anycloud-linux-x64 +0 -0
- package/dist/cli/commands/config/edit.js +24 -41
- package/dist/cli/commands/config/edit.js.map +1 -1
- package/dist/cli/commands/config/new.js +11 -34
- package/dist/cli/commands/config/new.js.map +1 -1
- package/dist/cli/commands/logs.js +12 -13
- package/dist/cli/commands/logs.js.map +1 -1
- package/dist/cli/commands/run.js +120 -45
- package/dist/cli/commands/run.js.map +1 -1
- package/dist/cli/commands/status.js +45 -41
- package/dist/cli/commands/status.js.map +1 -1
- package/dist/cli/commands/terminate.js +14 -19
- package/dist/cli/commands/terminate.js.map +1 -1
- package/dist/cli/commands/update.js +11 -78
- package/dist/cli/commands/update.js.map +1 -1
- package/dist/cli/index.js +0 -4
- package/dist/cli/index.js.map +1 -1
- package/dist/cli/services/api-client.js +2 -3
- package/dist/cli/services/api-client.js.map +1 -1
- package/dist/daemon/cluster.js +1 -0
- package/dist/daemon/cluster.js.map +1 -1
- package/dist/shared/assets/clouds/aws/types-per-region.json +4769 -0
- package/dist/shared/assets/clouds/azure/types-per-region.json +29358 -0
- package/dist/shared/assets/clouds/gcp/types-per-region.json +6910 -0
- package/dist/shared/types.js +39 -3
- package/dist/shared/types.js.map +1 -1
- package/package.json +1 -1
- package/dist/cli/commands/list.js +0 -99
- package/dist/cli/commands/list.js.map +0 -1
package/dist/shared/types.js
CHANGED
|
@@ -2,9 +2,12 @@
|
|
|
2
2
|
* Shared types for anycloud CLI and conductor
|
|
3
3
|
* These types are used across the client-server boundary
|
|
4
4
|
*/
|
|
5
|
-
import
|
|
6
|
-
import
|
|
7
|
-
import
|
|
5
|
+
import AWSRegionsPerType from './assets/clouds/aws/regions-per-type.json' with { type: 'json' };
|
|
6
|
+
import GCPRegionsPerType from './assets/clouds/gcp/regions-per-type.json' with { type: 'json' };
|
|
7
|
+
import AzureRegionsPerType from './assets/clouds/azure/regions-per-type.json' with { type: 'json' };
|
|
8
|
+
import AWSTypesPerRegion from './assets/clouds/aws/types-per-region.json' with { type: 'json' };
|
|
9
|
+
import GCPTypesPerRegion from './assets/clouds/gcp/types-per-region.json' with { type: 'json' };
|
|
10
|
+
import AzureTypesPerRegion from './assets/clouds/azure/types-per-region.json' with { type: 'json' };
|
|
8
11
|
// Cloud provider enum
|
|
9
12
|
export var CloudType;
|
|
10
13
|
(function (CloudType) {
|
|
@@ -18,6 +21,15 @@ export var DeploymentType;
|
|
|
18
21
|
DeploymentType["Server"] = "server";
|
|
19
22
|
DeploymentType["Job"] = "job";
|
|
20
23
|
})(DeploymentType || (DeploymentType = {}));
|
|
24
|
+
// Deployment state enum for fast list
|
|
25
|
+
export var DeploymentState;
|
|
26
|
+
(function (DeploymentState) {
|
|
27
|
+
DeploymentState["Provisioning"] = "provisioning";
|
|
28
|
+
DeploymentState["Running"] = "running";
|
|
29
|
+
DeploymentState["Failed"] = "failed";
|
|
30
|
+
DeploymentState["Terminating"] = "terminating";
|
|
31
|
+
DeploymentState["Terminated"] = "terminated";
|
|
32
|
+
})(DeploymentState || (DeploymentState = {}));
|
|
21
33
|
// Credential classes
|
|
22
34
|
export class AWSCreds {
|
|
23
35
|
}
|
|
@@ -77,5 +89,29 @@ export class CloudConfig {
|
|
|
77
89
|
const USRegions = regionsPerType.filter((r) => r.includes('us'));
|
|
78
90
|
return USRegions.length ? USRegions[0] : regionsPerType[0];
|
|
79
91
|
}
|
|
92
|
+
static getRegions(cloudProvider) {
|
|
93
|
+
switch (cloudProvider) {
|
|
94
|
+
case CloudType.AWS:
|
|
95
|
+
return Object.keys(AWSTypesPerRegion);
|
|
96
|
+
case CloudType.GCP:
|
|
97
|
+
return Object.keys(GCPTypesPerRegion);
|
|
98
|
+
case CloudType.Azure:
|
|
99
|
+
return Object.keys(AzureTypesPerRegion);
|
|
100
|
+
default:
|
|
101
|
+
return [];
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
static getVMTypes(cloudProvider, region) {
|
|
105
|
+
switch (cloudProvider) {
|
|
106
|
+
case CloudType.AWS:
|
|
107
|
+
return AWSTypesPerRegion[region] || [];
|
|
108
|
+
case CloudType.GCP:
|
|
109
|
+
return GCPTypesPerRegion[region] || [];
|
|
110
|
+
case CloudType.Azure:
|
|
111
|
+
return AzureTypesPerRegion[region] || [];
|
|
112
|
+
default:
|
|
113
|
+
return [];
|
|
114
|
+
}
|
|
115
|
+
}
|
|
80
116
|
}
|
|
81
117
|
//# sourceMappingURL=types.js.map
|
package/dist/shared/types.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/shared/types.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/shared/types.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,99 +0,0 @@
|
|
|
1
|
-
import { Command } from 'commander';
|
|
2
|
-
import Table from 'cli-table3';
|
|
3
|
-
import chalk from 'chalk';
|
|
4
|
-
import { getGitHubToken } from '../services/auth.js';
|
|
5
|
-
import { listDeployments } from '../services/api-client.js';
|
|
6
|
-
import { resolveAllDeploymentProfiles } from '../services/config.js';
|
|
7
|
-
import { printInfo, printError, printCloudConfigsTable, createSpinner, } from '../utils/output.js';
|
|
8
|
-
import packageJson from '../../../package.json' with { type: 'json' };
|
|
9
|
-
export function createListCommand() {
|
|
10
|
-
return new Command('list')
|
|
11
|
-
.description('📋 List all deployments')
|
|
12
|
-
.addHelpText('after', `
|
|
13
|
-
Examples:
|
|
14
|
-
$ anycloud list
|
|
15
|
-
|
|
16
|
-
Output format:
|
|
17
|
-
✓ Found 3 deployment(s) | 4 total VMs | 1 spot instance
|
|
18
|
-
|
|
19
|
-
┌─────────────────────┬──────────────┬─────────┬──────┬──────┐
|
|
20
|
-
│ ID │ Config │ Status │ VMs │ Spot │
|
|
21
|
-
├─────────────────────┼──────────────┼─────────┼──────┼──────┤
|
|
22
|
-
│ abc123-def456-ghi7… │ my-app │ active │ 3 │ Yes │
|
|
23
|
-
│ xyz789-abc123-def4… │ api-service │ stopped │ 1 │ No │
|
|
24
|
-
└─────────────────────┴──────────────┴─────────┴──────┴──────┘
|
|
25
|
-
|
|
26
|
-
Cloud Configurations:
|
|
27
|
-
|
|
28
|
-
┌──────────────┬──────────┬──────────────┬────────────────┬──────────────┐
|
|
29
|
-
│ Config │ Provider │ Region │ VM Type │ Bucket │
|
|
30
|
-
├──────────────┼──────────┼──────────────┼────────────────┼──────────────┤
|
|
31
|
-
│ my-app │ aws │ us-east-1 │ t3.medium │ my-bucket │
|
|
32
|
-
│ my-app │ gcp │ us-central1 │ e2-medium │ - │
|
|
33
|
-
│ api-service │ azure │ eastus │ Standard_B2s │ data-bucket │
|
|
34
|
-
└──────────────┴──────────┴──────────────┴────────────────┴──────────────┘
|
|
35
|
-
`)
|
|
36
|
-
.action(async () => {
|
|
37
|
-
try {
|
|
38
|
-
// Get GitHub token
|
|
39
|
-
const accessToken = await getGitHubToken();
|
|
40
|
-
// Get all deployment configs with resolved credentials
|
|
41
|
-
const anycloudConfigs = await resolveAllDeploymentProfiles();
|
|
42
|
-
if (Object.keys(anycloudConfigs).length === 0) {
|
|
43
|
-
printInfo('No deployment profiles found in anycloud.json');
|
|
44
|
-
return;
|
|
45
|
-
}
|
|
46
|
-
// List all deployments
|
|
47
|
-
const spinner = createSpinner('Fetching deployments...').start();
|
|
48
|
-
const deployments = await listDeployments(anycloudConfigs, accessToken, packageJson.version);
|
|
49
|
-
if (deployments.length === 0) {
|
|
50
|
-
spinner.stop();
|
|
51
|
-
printInfo('No deployments found.');
|
|
52
|
-
return;
|
|
53
|
-
}
|
|
54
|
-
// Calculate summary statistics
|
|
55
|
-
const totalVMs = deployments.reduce((sum, deployment) => sum + deployment.size, 0);
|
|
56
|
-
const spotCount = deployments.filter((deployment) => deployment.cloudConfigs.some((config) => config.spot === true)).length;
|
|
57
|
-
// Display summary
|
|
58
|
-
spinner.succeed(`Found ${deployments.length} deployment(s) | ${totalVMs} total VMs | ${spotCount} spot instance${spotCount !== 1 ? 's' : ''}`);
|
|
59
|
-
console.log('');
|
|
60
|
-
// Create deployments table
|
|
61
|
-
const deploymentsTable = new Table({
|
|
62
|
-
head: ['ID', 'Config', 'VMs'].map((h) => chalk.cyan(h)),
|
|
63
|
-
colWidths: [30, 25, 10],
|
|
64
|
-
style: {
|
|
65
|
-
head: [],
|
|
66
|
-
border: ['dim'],
|
|
67
|
-
},
|
|
68
|
-
});
|
|
69
|
-
deployments.forEach((deployment) => {
|
|
70
|
-
const truncatedId = deployment.id.length > 28
|
|
71
|
-
? deployment.id.substring(0, 27) + '…'
|
|
72
|
-
: deployment.id;
|
|
73
|
-
deploymentsTable.push([
|
|
74
|
-
truncatedId,
|
|
75
|
-
deployment.configName,
|
|
76
|
-
deployment.size.toString(),
|
|
77
|
-
]);
|
|
78
|
-
});
|
|
79
|
-
console.log(deploymentsTable.toString());
|
|
80
|
-
console.log('');
|
|
81
|
-
// Create cloud configurations table using shared utility
|
|
82
|
-
const cloudConfigEntries = deployments.flatMap((deployment) => deployment.cloudConfigs.map((config) => ({
|
|
83
|
-
configName: deployment.configName,
|
|
84
|
-
credentialsName: '', // Not used in deployment list
|
|
85
|
-
provider: config.cloudProvider,
|
|
86
|
-
region: config.region,
|
|
87
|
-
vmType: config.vmType,
|
|
88
|
-
spot: config.spot ?? false,
|
|
89
|
-
bucketName: config.bucketName,
|
|
90
|
-
})));
|
|
91
|
-
printCloudConfigsTable(cloudConfigEntries);
|
|
92
|
-
}
|
|
93
|
-
catch (error) {
|
|
94
|
-
printError(`Failed to list deployments: ${error.message}`);
|
|
95
|
-
process.exit(1);
|
|
96
|
-
}
|
|
97
|
-
});
|
|
98
|
-
}
|
|
99
|
-
//# sourceMappingURL=list.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"list.js","sourceRoot":"","sources":["../../../src/cli/commands/list.ts"],"names":[],"mappings":"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"}
|