anycloud 0.0.3 → 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/dist/cli/commands/daemon/index.js +3 -3
- package/dist/cli/commands/daemon/index.js.map +1 -1
- package/dist/cli/commands/job.js +17 -17
- package/dist/cli/commands/job.js.map +1 -1
- package/dist/cli/commands/list.js +10 -9
- package/dist/cli/commands/list.js.map +1 -1
- package/dist/cli/commands/logs.js +6 -5
- package/dist/cli/commands/logs.js.map +1 -1
- package/dist/cli/commands/terminate.js +50 -5
- package/dist/cli/commands/terminate.js.map +1 -1
- package/dist/cli/commands/upgrade.js +4 -4
- package/dist/cli/commands/upgrade.js.map +1 -1
- package/dist/cli/services/api-client.js +27 -47
- package/dist/cli/services/api-client.js.map +1 -1
- package/dist/cli/services/non-interactive.js +3 -3
- package/dist/cli/services/non-interactive.js.map +1 -1
- package/dist/daemon/cluster.js +11 -11
- package/dist/daemon/cluster.js.map +1 -1
- package/dist/daemon/docker.js +5 -5
- package/dist/daemon/docker.js.map +1 -1
- package/dist/daemon/server.js +13 -13
- package/dist/daemon/server.js.map +1 -1
- package/dist/shared/assets/clouds/azure/regions-per-type.json +21584 -1117
- package/package.json +8 -6
- package/dist/cli/commands/daemon/start.js +0 -32
- package/dist/cli/commands/daemon/start.js.map +0 -1
|
@@ -4,10 +4,10 @@ import { log } from '../../../daemon/logger.js';
|
|
|
4
4
|
export function createDaemonCommand() {
|
|
5
5
|
return new Command('daemon')
|
|
6
6
|
.description('Start the AnyCloud daemon (runs on VMs)')
|
|
7
|
-
.argument('<
|
|
7
|
+
.argument('<secret>', 'Deployment secret for authentication')
|
|
8
8
|
.argument('<conductor-url>', 'URL of the conductor to connect to')
|
|
9
9
|
.requiredOption('--type <type>', 'Deployment type: app or job')
|
|
10
|
-
.action(async (
|
|
10
|
+
.action(async (secret, conductorUrl, options) => {
|
|
11
11
|
try {
|
|
12
12
|
// Validate deployment type
|
|
13
13
|
if (options.type !== 'app' && options.type !== 'job') {
|
|
@@ -19,7 +19,7 @@ export function createDaemonCommand() {
|
|
|
19
19
|
deploymentType,
|
|
20
20
|
nodeVersion: process.version,
|
|
21
21
|
});
|
|
22
|
-
await startServer(
|
|
22
|
+
await startServer(secret, conductorUrl);
|
|
23
23
|
log.info('Daemon started successfully');
|
|
24
24
|
}
|
|
25
25
|
catch (error) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/cli/commands/daemon/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,WAAW,EAAE,MAAM,2BAA2B,CAAC;AACxD,OAAO,EAAE,GAAG,EAAE,MAAM,2BAA2B,CAAC;AAGhD,MAAM,UAAU,mBAAmB;IACjC,OAAO,IAAI,OAAO,CAAC,QAAQ,CAAC;SACzB,WAAW,CAAC,yCAAyC,CAAC;SACtD,QAAQ,CAAC,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/cli/commands/daemon/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,WAAW,EAAE,MAAM,2BAA2B,CAAC;AACxD,OAAO,EAAE,GAAG,EAAE,MAAM,2BAA2B,CAAC;AAGhD,MAAM,UAAU,mBAAmB;IACjC,OAAO,IAAI,OAAO,CAAC,QAAQ,CAAC;SACzB,WAAW,CAAC,yCAAyC,CAAC;SACtD,QAAQ,CAAC,UAAU,EAAE,sCAAsC,CAAC;SAC5D,QAAQ,CAAC,iBAAiB,EAAE,oCAAoC,CAAC;SACjE,cAAc,CAAC,eAAe,EAAE,6BAA6B,CAAC;SAC9D,MAAM,CACL,KAAK,EACH,MAAc,EACd,YAAoB,EACpB,OAAyB,EACzB,EAAE;QACF,IAAI,CAAC;YACH,2BAA2B;YAC3B,IAAI,OAAO,CAAC,IAAI,KAAK,KAAK,IAAI,OAAO,CAAC,IAAI,KAAK,KAAK,EAAE,CAAC;gBACrD,GAAG,CAAC,KAAK,CAAC,wDAAwD,CAAC,CAAC;gBACpE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YAClB,CAAC;YAED,MAAM,cAAc,GAAG,OAAO,CAAC,IAA2B,CAAC;YAE3D,GAAG,CAAC,IAAI,CAAC,0BAA0B,EAAE;gBACnC,cAAc;gBACd,WAAW,EAAE,OAAO,CAAC,OAAO;aAC7B,CAAC,CAAC;YAEH,MAAM,WAAW,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC;YAExC,GAAG,CAAC,IAAI,CAAC,6BAA6B,CAAC,CAAC;QAC1C,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,GAAG,CAAC,KAAK,CAAC,wBAAwB,EAAE,KAAK,CAAC,CAAC;YAC3C,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;IACH,CAAC,CACF,CAAC;AACN,CAAC"}
|
package/dist/cli/commands/job.js
CHANGED
|
@@ -4,29 +4,29 @@ import { getGitHubToken } from '../services/auth.js';
|
|
|
4
4
|
import { resolveDeploymentProfile, loadDeploymentProfiles, } from '../services/config.js';
|
|
5
5
|
import { createDeployment } from '../services/api-client.js';
|
|
6
6
|
import { printInfo, printError, createSpinner } from '../utils/output.js';
|
|
7
|
-
import { isNonInteractive,
|
|
7
|
+
import { isNonInteractive, getConfigFromEnv, } from '../services/non-interactive.js';
|
|
8
8
|
export function createJobCommand() {
|
|
9
9
|
return new Command('job')
|
|
10
10
|
.description('Create a new job deployment')
|
|
11
11
|
.argument('<image>', 'Container image (e.g., alpine:latest, ghcr.io/user/job:latest)')
|
|
12
|
-
.option('--
|
|
12
|
+
.option('--config <name>', 'Config name from anycloud.json')
|
|
13
13
|
.requiredOption('--name <name>', 'Job name')
|
|
14
14
|
.action(async (image, options) => {
|
|
15
15
|
try {
|
|
16
16
|
printInfo(`Creating job deployment for image: ${image}`);
|
|
17
|
-
// Determine
|
|
18
|
-
let
|
|
17
|
+
// Determine config name
|
|
18
|
+
let configName = options.config;
|
|
19
19
|
// Check for environment variable in non-interactive mode
|
|
20
|
-
if (!
|
|
21
|
-
|
|
22
|
-
if (!
|
|
23
|
-
printError('Non-interactive mode:
|
|
24
|
-
' Provide --
|
|
20
|
+
if (!configName && isNonInteractive()) {
|
|
21
|
+
configName = getConfigFromEnv();
|
|
22
|
+
if (!configName) {
|
|
23
|
+
printError('Non-interactive mode: Config name required.\n' +
|
|
24
|
+
' Provide --config flag or set ANYCLOUD_CONFIG environment variable.');
|
|
25
25
|
process.exit(1);
|
|
26
26
|
}
|
|
27
27
|
}
|
|
28
|
-
// If --
|
|
29
|
-
if (!
|
|
28
|
+
// If --config not provided and not in non-interactive mode, prompt for config selection
|
|
29
|
+
if (!configName) {
|
|
30
30
|
const profiles = await loadDeploymentProfiles();
|
|
31
31
|
const profileNames = Object.keys(profiles);
|
|
32
32
|
if (profileNames.length === 0) {
|
|
@@ -37,7 +37,7 @@ export function createJobCommand() {
|
|
|
37
37
|
const selection = await prompts({
|
|
38
38
|
type: 'select',
|
|
39
39
|
name: 'profile',
|
|
40
|
-
message: 'Select
|
|
40
|
+
message: 'Select config:',
|
|
41
41
|
choices: profileNames.map((name) => ({
|
|
42
42
|
title: name,
|
|
43
43
|
value: name,
|
|
@@ -47,19 +47,19 @@ export function createJobCommand() {
|
|
|
47
47
|
if (!selection.profile) {
|
|
48
48
|
process.exit(0); // User cancelled
|
|
49
49
|
}
|
|
50
|
-
|
|
50
|
+
configName = selection.profile;
|
|
51
51
|
}
|
|
52
|
-
printInfo(`Using
|
|
52
|
+
printInfo(`Using config: ${configName}`);
|
|
53
53
|
// Get GitHub token
|
|
54
54
|
const accessToken = await getGitHubToken();
|
|
55
55
|
// Resolve deployment profile and credentials
|
|
56
|
-
const
|
|
56
|
+
const cloudConfigs = await resolveDeploymentProfile(configName);
|
|
57
57
|
// Create deployment with hardcoded 'job' type
|
|
58
58
|
const spinner = createSpinner('Creating job deployment...').start();
|
|
59
|
-
const response = await createDeployment(image,
|
|
59
|
+
const response = await createDeployment(image, cloudConfigs, accessToken, configName, 'job', options.name);
|
|
60
60
|
spinner.succeed('Job deployment created!');
|
|
61
61
|
console.log('');
|
|
62
|
-
printInfo(`
|
|
62
|
+
printInfo(`ID: ${response.id}`);
|
|
63
63
|
console.log('');
|
|
64
64
|
}
|
|
65
65
|
catch (error) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"job.js","sourceRoot":"","sources":["../../../src/cli/commands/job.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,OAAO,MAAM,SAAS,CAAC;AAC9B,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AACrD,OAAO,EACL,wBAAwB,EACxB,sBAAsB,GACvB,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EAAE,gBAAgB,EAAE,MAAM,2BAA2B,CAAC;AAC7D,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAC1E,OAAO,EACL,gBAAgB,EAChB,
|
|
1
|
+
{"version":3,"file":"job.js","sourceRoot":"","sources":["../../../src/cli/commands/job.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,8 +1,9 @@
|
|
|
1
1
|
import { Command } from 'commander';
|
|
2
2
|
import { getGitHubToken } from '../services/auth.js';
|
|
3
|
-
import {
|
|
3
|
+
import { listDeployments } from '../services/api-client.js';
|
|
4
4
|
import { resolveAllDeploymentProfiles } from '../services/config.js';
|
|
5
5
|
import { printSuccess, printInfo, printError } from '../utils/output.js';
|
|
6
|
+
import packageJson from '../../../package.json' with { type: 'json' };
|
|
6
7
|
export function createListCommand() {
|
|
7
8
|
return new Command('list')
|
|
8
9
|
.description('List all deployments across all profiles')
|
|
@@ -11,13 +12,13 @@ export function createListCommand() {
|
|
|
11
12
|
// Get GitHub token
|
|
12
13
|
const accessToken = await getGitHubToken();
|
|
13
14
|
// Get all deployment configs with resolved credentials
|
|
14
|
-
const
|
|
15
|
-
if (Object.keys(
|
|
15
|
+
const anycloudConfigs = await resolveAllDeploymentProfiles();
|
|
16
|
+
if (Object.keys(anycloudConfigs).length === 0) {
|
|
16
17
|
printInfo('No deployment profiles found in anycloud.json');
|
|
17
18
|
return;
|
|
18
19
|
}
|
|
19
|
-
//
|
|
20
|
-
const deployments = await
|
|
20
|
+
// List all deployments
|
|
21
|
+
const deployments = await listDeployments(anycloudConfigs, accessToken, packageJson.version);
|
|
21
22
|
if (deployments.length === 0) {
|
|
22
23
|
printInfo('No deployments found.');
|
|
23
24
|
return;
|
|
@@ -26,12 +27,12 @@ export function createListCommand() {
|
|
|
26
27
|
console.log('');
|
|
27
28
|
// Display deployments in a simple table format
|
|
28
29
|
deployments.forEach((deployment, index) => {
|
|
29
|
-
console.log(`${index + 1}.
|
|
30
|
-
printInfo(` URL: ${deployment.url}`);
|
|
31
|
-
printInfo(`
|
|
30
|
+
console.log(`${index + 1}. ID: ${deployment.id}`);
|
|
31
|
+
// printInfo(` URL: ${deployment.url}`);
|
|
32
|
+
printInfo(` Config Name: ${deployment.configName}`);
|
|
32
33
|
printInfo(` Status: ${deployment.status}`);
|
|
33
34
|
printInfo(` Size: ${deployment.size} VM(s)`);
|
|
34
|
-
printInfo(
|
|
35
|
+
printInfo(`${deployment.cloudConfigs.length} Cloud Config(s)`);
|
|
35
36
|
deployment.cloudConfigs.forEach((config, i) => {
|
|
36
37
|
printInfo(` ${i + 1}. ${config.cloudProvider} - ${config.region || 'default region'} (${config.vmType || 'default VM'})`);
|
|
37
38
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"list.js","sourceRoot":"","sources":["../../../src/cli/commands/list.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AACrD,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"list.js","sourceRoot":"","sources":["../../../src/cli/commands/list.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AACrD,OAAO,EAAE,eAAe,EAAE,MAAM,2BAA2B,CAAC;AAC5D,OAAO,EAAE,4BAA4B,EAAE,MAAM,uBAAuB,CAAC;AACrE,OAAO,EAAE,YAAY,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AACzE,OAAO,WAAW,MAAM,uBAAuB,CAAC,OAAO,IAAI,EAAE,MAAM,EAAE,CAAC;AAEtE,MAAM,UAAU,iBAAiB;IAC/B,OAAO,IAAI,OAAO,CAAC,MAAM,CAAC;SACvB,WAAW,CAAC,0CAA0C,CAAC;SACvD,MAAM,CAAC,KAAK,IAAI,EAAE;QACjB,IAAI,CAAC;YACH,mBAAmB;YACnB,MAAM,WAAW,GAAG,MAAM,cAAc,EAAE,CAAC;YAE3C,uDAAuD;YACvD,MAAM,eAAe,GAAG,MAAM,4BAA4B,EAAE,CAAC;YAE7D,IAAI,MAAM,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBAC9C,SAAS,CAAC,+CAA+C,CAAC,CAAC;gBAC3D,OAAO;YACT,CAAC;YAED,uBAAuB;YACvB,MAAM,WAAW,GAAG,MAAM,eAAe,CACvC,eAAe,EACf,WAAW,EACX,WAAW,CAAC,OAAO,CACpB,CAAC;YAEF,IAAI,WAAW,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBAC7B,SAAS,CAAC,uBAAuB,CAAC,CAAC;gBACnC,OAAO;YACT,CAAC;YAED,YAAY,CAAC,SAAS,WAAW,CAAC,MAAM,iBAAiB,CAAC,CAAC;YAC3D,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;YAEhB,+CAA+C;YAC/C,WAAW,CAAC,OAAO,CAAC,CAAC,UAAU,EAAE,KAAK,EAAE,EAAE;gBACxC,OAAO,CAAC,GAAG,CAAC,GAAG,KAAK,GAAG,CAAC,SAAS,UAAU,CAAC,EAAE,EAAE,CAAC,CAAC;gBAClD,oDAAoD;gBACpD,SAAS,CAAC,qBAAqB,UAAU,CAAC,UAAU,EAAE,CAAC,CAAC;gBACxD,SAAS,CAAC,qBAAqB,UAAU,CAAC,MAAM,EAAE,CAAC,CAAC;gBACpD,SAAS,CAAC,qBAAqB,UAAU,CAAC,IAAI,QAAQ,CAAC,CAAC;gBACxD,SAAS,CAAC,GAAG,UAAU,CAAC,YAAY,CAAC,MAAM,kBAAkB,CAAC,CAAC;gBAC/D,UAAU,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;oBAC5C,SAAS,CACP,SAAS,CAAC,GAAG,CAAC,KAAK,MAAM,CAAC,aAAa,MAAM,MAAM,CAAC,MAAM,IAAI,gBAAgB,KAAK,MAAM,CAAC,MAAM,IAAI,YAAY,GAAG,CACpH,CAAC;gBACJ,CAAC,CAAC,CAAC;gBACH,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;YAClB,CAAC,CAAC,CAAC;QACL,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,UAAU,CAAC,+BAAgC,KAAe,CAAC,OAAO,EAAE,CAAC,CAAC;YACtE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;IACH,CAAC,CAAC,CAAC;AACP,CAAC"}
|
|
@@ -2,21 +2,22 @@ import { Command } from 'commander';
|
|
|
2
2
|
import { getGitHubToken } from '../services/auth.js';
|
|
3
3
|
import { getDeploymentLogs } from '../services/api-client.js';
|
|
4
4
|
import { printInfo, printError } from '../utils/output.js';
|
|
5
|
+
import packageJson from '../../../package.json' with { type: 'json' };
|
|
5
6
|
export function createLogsCommand() {
|
|
6
7
|
return new Command('logs')
|
|
7
8
|
.description('Get deployment logs')
|
|
8
|
-
.argument('<
|
|
9
|
-
.action(async (
|
|
9
|
+
.argument('<id>', 'Deployment ID')
|
|
10
|
+
.action(async (id) => {
|
|
10
11
|
try {
|
|
11
|
-
printInfo(`Fetching logs for
|
|
12
|
+
printInfo(`Fetching logs for: ${id}`);
|
|
12
13
|
// Get GitHub token
|
|
13
14
|
const accessToken = await getGitHubToken();
|
|
14
15
|
// Get logs
|
|
15
|
-
const response = await getDeploymentLogs(
|
|
16
|
+
const response = await getDeploymentLogs(id, accessToken, packageJson.version);
|
|
16
17
|
console.log('');
|
|
17
18
|
console.log('Logs:');
|
|
18
19
|
console.log('─────────────────────────────────────────────────────');
|
|
19
|
-
console.log(response.
|
|
20
|
+
console.log(response.message);
|
|
20
21
|
console.log('─────────────────────────────────────────────────────');
|
|
21
22
|
console.log('');
|
|
22
23
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"logs.js","sourceRoot":"","sources":["../../../src/cli/commands/logs.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AACrD,OAAO,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAC;AAC9D,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;
|
|
1
|
+
{"version":3,"file":"logs.js","sourceRoot":"","sources":["../../../src/cli/commands/logs.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AACrD,OAAO,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAC;AAC9D,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAC3D,OAAO,WAAW,MAAM,uBAAuB,CAAC,OAAO,IAAI,EAAE,MAAM,EAAE,CAAC;AAEtE,MAAM,UAAU,iBAAiB;IAC/B,OAAO,IAAI,OAAO,CAAC,MAAM,CAAC;SACvB,WAAW,CAAC,qBAAqB,CAAC;SAClC,QAAQ,CAAC,MAAM,EAAE,eAAe,CAAC;SACjC,MAAM,CAAC,KAAK,EAAE,EAAU,EAAE,EAAE;QAC3B,IAAI,CAAC;YACH,SAAS,CAAC,sBAAsB,EAAE,EAAE,CAAC,CAAC;YAEtC,mBAAmB;YACnB,MAAM,WAAW,GAAG,MAAM,cAAc,EAAE,CAAC;YAE3C,WAAW;YACX,MAAM,QAAQ,GAAG,MAAM,iBAAiB,CACtC,EAAE,EACF,WAAW,EACX,WAAW,CAAC,OAAO,CACpB,CAAC;YAEF,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;YAChB,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;YACrB,OAAO,CAAC,GAAG,CAAC,uDAAuD,CAAC,CAAC;YACrE,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;YAC9B,OAAO,CAAC,GAAG,CAAC,uDAAuD,CAAC,CAAC;YACrE,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAClB,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,UAAU,CAAC,yBAA0B,KAAe,CAAC,OAAO,EAAE,CAAC,CAAC;YAChE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;IACH,CAAC,CAAC,CAAC;AACP,CAAC"}
|
|
@@ -1,16 +1,61 @@
|
|
|
1
1
|
import { Command } from 'commander';
|
|
2
|
+
import prompts from 'prompts';
|
|
2
3
|
import { terminateDeployment } from '../services/api-client.js';
|
|
4
|
+
import { getGitHubToken } from '../services/auth.js';
|
|
5
|
+
import { resolveDeploymentProfile, loadDeploymentProfiles, } from '../services/config.js';
|
|
3
6
|
import { printSuccess, printInfo, printError } from '../utils/output.js';
|
|
7
|
+
import { isNonInteractive, getConfigFromEnv, } from '../services/non-interactive.js';
|
|
8
|
+
import packageJson from '../../../package.json' with { type: 'json' };
|
|
4
9
|
export function createTerminateCommand() {
|
|
5
10
|
return new Command('terminate')
|
|
6
11
|
.description('Terminate a deployment')
|
|
7
|
-
.argument('<
|
|
8
|
-
.
|
|
9
|
-
.action(async (
|
|
12
|
+
.argument('<id>', 'Deployment ID')
|
|
13
|
+
.option('--config <name>', 'Config name from anycloud.json')
|
|
14
|
+
.action(async (id, options) => {
|
|
10
15
|
try {
|
|
11
|
-
printInfo(`Terminating
|
|
16
|
+
printInfo(`Terminating: ${id}`);
|
|
17
|
+
// Determine config name
|
|
18
|
+
let configName = options.config;
|
|
19
|
+
// Check for environment variable in non-interactive mode
|
|
20
|
+
if (!configName && isNonInteractive()) {
|
|
21
|
+
configName = getConfigFromEnv();
|
|
22
|
+
if (!configName) {
|
|
23
|
+
printError('Non-interactive mode: Config name required.\n' +
|
|
24
|
+
' Provide --config flag or set ANYCLOUD_CONFIG environment variable.');
|
|
25
|
+
process.exit(1);
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
// If --config not provided and not in non-interactive mode, prompt for config selection
|
|
29
|
+
if (!configName) {
|
|
30
|
+
const profiles = await loadDeploymentProfiles();
|
|
31
|
+
const profileNames = Object.keys(profiles);
|
|
32
|
+
if (profileNames.length === 0) {
|
|
33
|
+
printError('No deployment profiles found in anycloud.json');
|
|
34
|
+
printInfo('Please create anycloud.json with deployment profiles.');
|
|
35
|
+
process.exit(1);
|
|
36
|
+
}
|
|
37
|
+
const selection = await prompts({
|
|
38
|
+
type: 'select',
|
|
39
|
+
name: 'profile',
|
|
40
|
+
message: 'Select config:',
|
|
41
|
+
choices: profileNames.map((name) => ({
|
|
42
|
+
title: name,
|
|
43
|
+
value: name,
|
|
44
|
+
description: `${profiles[name].length} config(s)`,
|
|
45
|
+
})),
|
|
46
|
+
});
|
|
47
|
+
if (!selection.profile) {
|
|
48
|
+
process.exit(0); // User cancelled
|
|
49
|
+
}
|
|
50
|
+
configName = selection.profile;
|
|
51
|
+
}
|
|
52
|
+
printInfo(`Using config: ${configName}`);
|
|
53
|
+
// Get GitHub token
|
|
54
|
+
const accessToken = await getGitHubToken();
|
|
55
|
+
// Resolve deployment profile and credentials
|
|
56
|
+
const cloudConfigs = await resolveDeploymentProfile(configName);
|
|
12
57
|
// Terminate deployment
|
|
13
|
-
const response = await terminateDeployment(
|
|
58
|
+
const response = await terminateDeployment(id, cloudConfigs, accessToken, configName, packageJson.version);
|
|
14
59
|
printSuccess('Deployment terminated successfully!');
|
|
15
60
|
if (response.message) {
|
|
16
61
|
printInfo(response.message);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"terminate.js","sourceRoot":"","sources":["../../../src/cli/commands/terminate.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,mBAAmB,EAAE,MAAM,2BAA2B,CAAC;AAChE,OAAO,EAAE,YAAY,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;
|
|
1
|
+
{"version":3,"file":"terminate.js","sourceRoot":"","sources":["../../../src/cli/commands/terminate.ts"],"names":[],"mappings":"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"}
|
|
@@ -4,15 +4,15 @@ import { printSuccess, printInfo, printError } from '../utils/output.js';
|
|
|
4
4
|
export function createUpgradeCommand() {
|
|
5
5
|
return new Command('upgrade')
|
|
6
6
|
.description('Upgrade a deployment to a new container image')
|
|
7
|
-
.argument('<
|
|
7
|
+
.argument('<id>', 'Deployment ID')
|
|
8
8
|
.argument('<image>', 'New container image (e.g., nginx:latest, ghcr.io/user/repo:v2)')
|
|
9
9
|
.argument('<conductorToken>', 'Conductor token for the deployment')
|
|
10
|
-
.action(async (
|
|
10
|
+
.action(async (id, image, conductorToken) => {
|
|
11
11
|
try {
|
|
12
|
-
printInfo(`Upgrading
|
|
12
|
+
printInfo(`Upgrading: ${id}`);
|
|
13
13
|
printInfo(`New image: ${image}`);
|
|
14
14
|
// Upgrade deployment
|
|
15
|
-
const response = await upgradeDeployment(
|
|
15
|
+
const response = await upgradeDeployment(id, image, conductorToken);
|
|
16
16
|
printSuccess('Deployment upgraded successfully!');
|
|
17
17
|
if (response.message) {
|
|
18
18
|
printInfo(response.message);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"upgrade.js","sourceRoot":"","sources":["../../../src/cli/commands/upgrade.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAC;AAC9D,OAAO,EAAE,YAAY,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAEzE,MAAM,UAAU,oBAAoB;IAClC,OAAO,IAAI,OAAO,CAAC,SAAS,CAAC;SAC1B,WAAW,CAAC,+CAA+C,CAAC;SAC5D,QAAQ,CAAC,
|
|
1
|
+
{"version":3,"file":"upgrade.js","sourceRoot":"","sources":["../../../src/cli/commands/upgrade.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAC;AAC9D,OAAO,EAAE,YAAY,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAEzE,MAAM,UAAU,oBAAoB;IAClC,OAAO,IAAI,OAAO,CAAC,SAAS,CAAC;SAC1B,WAAW,CAAC,+CAA+C,CAAC;SAC5D,QAAQ,CAAC,MAAM,EAAE,eAAe,CAAC;SACjC,QAAQ,CACP,SAAS,EACT,gEAAgE,CACjE;SACA,QAAQ,CAAC,kBAAkB,EAAE,oCAAoC,CAAC;SAClE,MAAM,CAAC,KAAK,EAAE,EAAU,EAAE,KAAa,EAAE,cAAsB,EAAE,EAAE;QAClE,IAAI,CAAC;YACH,SAAS,CAAC,cAAc,EAAE,EAAE,CAAC,CAAC;YAC9B,SAAS,CAAC,cAAc,KAAK,EAAE,CAAC,CAAC;YAEjC,qBAAqB;YACrB,MAAM,QAAQ,GAAG,MAAM,iBAAiB,CAAC,EAAE,EAAE,KAAK,EAAE,cAAc,CAAC,CAAC;YAEpE,YAAY,CAAC,mCAAmC,CAAC,CAAC;YAClD,IAAI,QAAQ,CAAC,OAAO,EAAE,CAAC;gBACrB,SAAS,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;YAC9B,CAAC;YACD,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAClB,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,UAAU,CAAC,iCAAkC,KAAe,CAAC,OAAO,EAAE,CAAC,CAAC;YACxE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;IACH,CAAC,CAAC,CAAC;AACP,CAAC"}
|
|
@@ -4,63 +4,43 @@ import { exitWithError } from '../utils/output.js';
|
|
|
4
4
|
* Create a new deployment
|
|
5
5
|
* POST /v1/new
|
|
6
6
|
*/
|
|
7
|
-
export async function createDeployment(image,
|
|
7
|
+
export async function createDeployment(image, cloudConfigs, accessToken, configName, deploymentType, id) {
|
|
8
8
|
const payload = {
|
|
9
9
|
image,
|
|
10
|
-
|
|
11
|
-
|
|
10
|
+
anycloudConfigs: { [configName]: cloudConfigs },
|
|
11
|
+
configName,
|
|
12
12
|
accessToken,
|
|
13
|
-
|
|
13
|
+
id,
|
|
14
14
|
deploymentType,
|
|
15
15
|
};
|
|
16
|
-
const
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
'Content-Type': 'application/json',
|
|
22
|
-
},
|
|
23
|
-
body: JSON.stringify(payload),
|
|
24
|
-
});
|
|
25
|
-
if (!response.ok) {
|
|
26
|
-
const errorText = await response.text();
|
|
27
|
-
exitWithError(`API request failed: ${errorText || `HTTP ${response.status}`}`);
|
|
28
|
-
}
|
|
29
|
-
// Server returns plain text clusterId
|
|
30
|
-
const clusterId = await response.text();
|
|
31
|
-
return {
|
|
32
|
-
clusterId,
|
|
33
|
-
message: `Deployment created successfully`,
|
|
34
|
-
};
|
|
35
|
-
}
|
|
36
|
-
catch (error) {
|
|
37
|
-
if (error instanceof Error && error.message.includes('fetch')) {
|
|
38
|
-
exitWithError(`Failed to connect to AnyCloud API at ${CONDUCTOR_URL}\n`);
|
|
39
|
-
}
|
|
40
|
-
throw error;
|
|
41
|
-
}
|
|
16
|
+
const response = await apiRequest('/v1/new', 'POST', payload);
|
|
17
|
+
return {
|
|
18
|
+
id: response.id,
|
|
19
|
+
message: `Deployment created successfully`,
|
|
20
|
+
};
|
|
42
21
|
}
|
|
43
22
|
/**
|
|
44
|
-
*
|
|
45
|
-
* POST /v1/
|
|
23
|
+
* List deployments for a specific deployment config
|
|
24
|
+
* POST /v1/list
|
|
46
25
|
*/
|
|
47
|
-
export async function
|
|
26
|
+
export async function listDeployments(anycloudConfigs, accessToken, daemonVersion, status = true) {
|
|
48
27
|
const payload = {
|
|
49
|
-
|
|
28
|
+
anycloudConfigs,
|
|
50
29
|
accessToken,
|
|
51
30
|
daemonVersion,
|
|
52
31
|
status,
|
|
53
32
|
};
|
|
54
|
-
return await apiRequest('/v1/
|
|
33
|
+
return await apiRequest('/v1/list', 'POST', payload);
|
|
55
34
|
}
|
|
56
35
|
/**
|
|
57
36
|
* Get deployment logs
|
|
58
37
|
* POST /v1/logs
|
|
59
38
|
*/
|
|
60
|
-
export async function getDeploymentLogs(
|
|
39
|
+
export async function getDeploymentLogs(id, accessToken, daemonVersion) {
|
|
61
40
|
const payload = {
|
|
62
|
-
|
|
41
|
+
id,
|
|
63
42
|
accessToken,
|
|
43
|
+
daemonVersion,
|
|
64
44
|
};
|
|
65
45
|
return await apiRequest('/v1/logs', 'POST', payload);
|
|
66
46
|
}
|
|
@@ -68,16 +48,22 @@ export async function getDeploymentLogs(clusterId, accessToken) {
|
|
|
68
48
|
* Terminate a deployment
|
|
69
49
|
* POST /v1/terminate
|
|
70
50
|
*/
|
|
71
|
-
export async function terminateDeployment(
|
|
72
|
-
const payload = {
|
|
51
|
+
export async function terminateDeployment(id, cloudConfigs, accessToken, configName, daemonVersion) {
|
|
52
|
+
const payload = {
|
|
53
|
+
id,
|
|
54
|
+
anycloudConfigs: { [configName]: cloudConfigs },
|
|
55
|
+
configName,
|
|
56
|
+
accessToken,
|
|
57
|
+
daemonVersion,
|
|
58
|
+
};
|
|
73
59
|
return await apiRequest('/v1/terminate', 'POST', payload);
|
|
74
60
|
}
|
|
75
61
|
/**
|
|
76
62
|
* Upgrade a deployment to a new image
|
|
77
63
|
* POST /v1/upgrade
|
|
78
64
|
*/
|
|
79
|
-
export async function upgradeDeployment(
|
|
80
|
-
const payload = {
|
|
65
|
+
export async function upgradeDeployment(id, image, conductorToken) {
|
|
66
|
+
const payload = { id, image, conductorToken };
|
|
81
67
|
return await apiRequest('/v1/upgrade', 'POST', payload);
|
|
82
68
|
}
|
|
83
69
|
/**
|
|
@@ -109,10 +95,4 @@ async function apiRequest(endpoint, method, body) {
|
|
|
109
95
|
throw error;
|
|
110
96
|
}
|
|
111
97
|
}
|
|
112
|
-
/**
|
|
113
|
-
* Generate a unique app ID for new deployments
|
|
114
|
-
*/
|
|
115
|
-
function generateAppId() {
|
|
116
|
-
return `app-${Date.now()}-${Math.random().toString(36).substring(2, 9)}`;
|
|
117
|
-
}
|
|
118
98
|
//# sourceMappingURL=api-client.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"api-client.js","sourceRoot":"","sources":["../../../src/cli/services/api-client.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAC7C,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;
|
|
1
|
+
{"version":3,"file":"api-client.js","sourceRoot":"","sources":["../../../src/cli/services/api-client.ts"],"names":[],"mappings":"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"}
|
|
@@ -95,10 +95,10 @@ function getGCPCredentialsFromEnv() {
|
|
|
95
95
|
};
|
|
96
96
|
}
|
|
97
97
|
/**
|
|
98
|
-
* Get
|
|
98
|
+
* Get config name from environment variable
|
|
99
99
|
*/
|
|
100
|
-
export function
|
|
101
|
-
return getEnvOptional('
|
|
100
|
+
export function getConfigFromEnv() {
|
|
101
|
+
return getEnvOptional('ANYCLOUD_CONFIG');
|
|
102
102
|
}
|
|
103
103
|
/**
|
|
104
104
|
* Get credentials name from environment variable
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"non-interactive.js","sourceRoot":"","sources":["../../../src/cli/services/non-interactive.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"non-interactive.js","sourceRoot":"","sources":["../../../src/cli/services/non-interactive.ts"],"names":[],"mappings":"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"}
|
package/dist/daemon/cluster.js
CHANGED
|
@@ -8,27 +8,27 @@ import { MetricsCollector } from './metrics.js';
|
|
|
8
8
|
import { log } from './logger.js';
|
|
9
9
|
const ACK_INTERVAL = 4 * 60 * 1000; // 4 minutes
|
|
10
10
|
const METRICS_INTERVAL = 60 * 1000; // 1 minute
|
|
11
|
-
export class
|
|
12
|
-
constructor(
|
|
11
|
+
export class Coordinator {
|
|
12
|
+
constructor(deploymentSecret, conductorUrl) {
|
|
13
13
|
this.daemonProps = null;
|
|
14
14
|
this.clusterInfo = null;
|
|
15
15
|
this.privateIp = null;
|
|
16
16
|
this.publicIp = null;
|
|
17
17
|
this.ackInterval = null;
|
|
18
18
|
this.metricsInterval = null;
|
|
19
|
-
this.
|
|
19
|
+
this.deploymentSecret = deploymentSecret;
|
|
20
20
|
this.metricsCollector = new MetricsCollector();
|
|
21
21
|
this.conductorUrl = conductorUrl;
|
|
22
22
|
}
|
|
23
23
|
/**
|
|
24
|
-
* Start
|
|
24
|
+
* Start deployment coordination
|
|
25
25
|
*/
|
|
26
26
|
async start(props) {
|
|
27
27
|
this.daemonProps = props;
|
|
28
28
|
// Get this VM's IP addresses
|
|
29
29
|
await this.discoverOwnIps();
|
|
30
30
|
log.info('Cluster coordinator started', {
|
|
31
|
-
|
|
31
|
+
id: props.id,
|
|
32
32
|
privateIp: this.privateIp,
|
|
33
33
|
publicIp: this.publicIp,
|
|
34
34
|
});
|
|
@@ -79,8 +79,8 @@ export class ClusterCoordinator {
|
|
|
79
79
|
try {
|
|
80
80
|
await axios.post(`${this.conductorUrl}/v1/ack`, {
|
|
81
81
|
conductorToken: this.daemonProps.conductorToken,
|
|
82
|
-
|
|
83
|
-
|
|
82
|
+
id: this.daemonProps.id,
|
|
83
|
+
deploymentSecret: this.deploymentSecret,
|
|
84
84
|
});
|
|
85
85
|
log.debug('Ack sent successfully');
|
|
86
86
|
}
|
|
@@ -97,7 +97,7 @@ export class ClusterCoordinator {
|
|
|
97
97
|
try {
|
|
98
98
|
// Collect metrics
|
|
99
99
|
await this.metricsCollector.collect();
|
|
100
|
-
// Discover
|
|
100
|
+
// Discover deployment VMs from DNS
|
|
101
101
|
await this.discoverClusterVMs();
|
|
102
102
|
// If we're the leader, check if we need to scale
|
|
103
103
|
if (this.isLeader()) {
|
|
@@ -110,7 +110,7 @@ export class ClusterCoordinator {
|
|
|
110
110
|
}, METRICS_INTERVAL);
|
|
111
111
|
}
|
|
112
112
|
/**
|
|
113
|
-
* Discover all VMs in the
|
|
113
|
+
* Discover all VMs in the deployment via DNS TXT records
|
|
114
114
|
*/
|
|
115
115
|
async discoverClusterVMs() {
|
|
116
116
|
if (!this.daemonProps)
|
|
@@ -183,7 +183,7 @@ export class ClusterCoordinator {
|
|
|
183
183
|
log.info('Triggering scale operation', { scalingFactor });
|
|
184
184
|
try {
|
|
185
185
|
await axios.post(`${this.conductorUrl}/v1/scale`, {
|
|
186
|
-
|
|
186
|
+
id: this.daemonProps.id,
|
|
187
187
|
conductorToken: this.daemonProps.conductorToken,
|
|
188
188
|
clusterFactor: scalingFactor,
|
|
189
189
|
image: this.daemonProps.image,
|
|
@@ -195,7 +195,7 @@ export class ClusterCoordinator {
|
|
|
195
195
|
}
|
|
196
196
|
}
|
|
197
197
|
/**
|
|
198
|
-
* Stop
|
|
198
|
+
* Stop deployment coordination
|
|
199
199
|
*/
|
|
200
200
|
stop() {
|
|
201
201
|
if (this.ackInterval) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cluster.js","sourceRoot":"","sources":["../../src/daemon/cluster.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,QAAQ,IAAI,GAAG,EAAE,MAAM,KAAK,CAAC;AACtC,OAAO,MAAM,MAAM,QAAQ,CAAC;AAE5B,OAAO,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC;AAChD,OAAO,EAAE,GAAG,EAAE,MAAM,aAAa,CAAC;AAElC,MAAM,YAAY,GAAG,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,CAAC,YAAY;AAChD,MAAM,gBAAgB,GAAG,EAAE,GAAG,IAAI,CAAC,CAAC,WAAW;AAE/C,MAAM,OAAO,
|
|
1
|
+
{"version":3,"file":"cluster.js","sourceRoot":"","sources":["../../src/daemon/cluster.ts"],"names":[],"mappings":"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"}
|