@capsulos/cli 0.1.2 → 0.3.0

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.js CHANGED
@@ -5,6 +5,8 @@
5
5
  // ls <template> capsules of a template
6
6
  // shell <id> attach your terminal to a capsule
7
7
  // forward <id> <port> http://localhost:<port> → that port inside the capsule
8
+ // pause <id> / resume <id> freeze and wake a capsule
9
+ // snapshot <id> <name> save a capsule as a new template (Docker only today)
8
10
  // kill <id> terminate a capsule
9
11
  // `--docker` on run/ls/shell/kill uses the local Docker provider instead of Lambda.
10
12
  import { parseArgs } from 'node:util';
@@ -22,10 +24,13 @@ function usage() {
22
24
  capsulos init [--region us-east-1] [--profile p] [--s3-bucket b ...] [--egress-connector arn]
23
25
  capsulos template build <name> --context <dir> [--dockerfile f] [--capsulod bin | --daemon-src dir] [--memory 512]
24
26
  [--capabilities default|all] [--tag k=v ...] [--profile p]
25
- capsulos run <template> [--docker | --profile p]
27
+ capsulos run <template> [--no-internet [--allow host]...] [--docker | --profile p]
26
28
  capsulos ls <template> [--docker | --profile p]
27
29
  capsulos shell <id> [--cmd /bin/bash] [--docker | --profile p]
28
30
  capsulos forward <id> <port> [--local-port p] [--docker | --profile p]
31
+ capsulos pause <id> [--docker | --profile p]
32
+ capsulos resume <id> [--docker | --profile p]
33
+ capsulos snapshot <id> <name> [--docker]
29
34
  capsulos kill <id> [--docker | --profile p]`);
30
35
  process.exit(2);
31
36
  }
@@ -43,6 +48,7 @@ function lambdaProvider(profile) {
43
48
  credentials: credentialsFor(profile),
44
49
  executionRoleArn: cfg.executionRoleArn,
45
50
  ...(cfg.egressConnectorArn ? { egressConnectorArn: cfg.egressConnectorArn } : {}),
51
+ ...(cfg.denyEgressConnectorArn ? { denyEgressConnectorArn: cfg.denyEgressConnectorArn } : {}),
46
52
  });
47
53
  }
48
54
  export async function main(argv = process.argv.slice(2)) {
@@ -113,11 +119,15 @@ export async function main(argv = process.argv.slice(2)) {
113
119
  const [template, ...args] = rest;
114
120
  if (!template)
115
121
  usage();
116
- const { values } = parseArgs({ args, options: providerFlags });
122
+ const { values } = parseArgs({
123
+ args,
124
+ options: { ...providerFlags, 'no-internet': { type: 'boolean' }, allow: { type: 'string', multiple: true } },
125
+ });
117
126
  const t0 = Date.now();
118
127
  const capsule = await Capsule.create(provider(values), {
119
128
  template,
120
129
  idle: { suspendAfterSeconds: 600, destroyAfterSeconds: 4 * 3600 },
130
+ ...(values['no-internet'] ? { network: { internet: 'deny', allow: values.allow ?? [] } } : {}),
121
131
  });
122
132
  log(`capsule ready in ${Date.now() - t0}ms`);
123
133
  console.log(capsule.id);
@@ -155,6 +165,31 @@ export async function main(argv = process.argv.slice(2)) {
155
165
  await new Promise((resolve) => process.once('SIGINT', resolve));
156
166
  return;
157
167
  }
168
+ case 'pause':
169
+ case 'resume': {
170
+ const [id, ...args] = rest;
171
+ if (!id)
172
+ usage();
173
+ const { values } = parseArgs({ args, options: providerFlags });
174
+ const capsule = await Capsule.connect(provider(values), id);
175
+ const t0 = Date.now();
176
+ if (cmd === 'pause')
177
+ await capsule.pause();
178
+ else
179
+ await capsule.resume();
180
+ log(`${cmd}d ${id} in ${Date.now() - t0}ms`);
181
+ return;
182
+ }
183
+ case 'snapshot': {
184
+ const [id, name, ...args] = rest;
185
+ if (!id || !name)
186
+ usage();
187
+ const { values } = parseArgs({ args, options: providerFlags });
188
+ const res = await (await Capsule.connect(provider(values), id)).snapshot(name);
189
+ log(`saved ${id} as template ${res.template} (${res.provider})`);
190
+ console.log(res.template);
191
+ return;
192
+ }
158
193
  case 'kill': {
159
194
  const [id, ...args] = rest;
160
195
  if (!id)
package/dist/cli.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
package/dist/config.d.ts CHANGED
@@ -11,6 +11,8 @@ export interface CapsulosConfig {
11
11
  executionRoleArn: string;
12
12
  /** Optional egress connector (e.g. a VPC connector with a deny-all security group). */
13
13
  egressConnectorArn?: string;
14
+ /** Optional egress connector for `--no-internet` capsules (deny-all security group). */
15
+ denyEgressConnectorArn?: string;
14
16
  /** Default OS capabilities for `template build` ('default' | 'all'); the flag wins. */
15
17
  capabilities?: 'default' | 'all';
16
18
  /** Default tags for the images `template build` creates; the flags win. */
@@ -1 +1 @@
1
- {"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA,0EAA0E;AAC1E,2EAA2E;AAC3E,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AACtD,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,qBAAqB,EAAE,MAAM,+BAA+B,CAAC;AAsBtE,MAAM,CAAC,MAAM,WAAW,GAAG,eAAe,CAAC;AAE3C,MAAM,UAAU,UAAU,CAAC,GAAG,GAAG,OAAO,CAAC,GAAG,EAAE;IAC5C,OAAO,OAAO,CAAC,GAAG,EAAE,WAAW,CAAC,CAAC;AACnC,CAAC;AAED,MAAM,UAAU,UAAU,CAAC,GAAG,GAAG,OAAO,CAAC,GAAG,EAAE;IAC5C,IAAI,CAAC;QACH,OAAO,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC,CAAmB,CAAC;IAC7E,CAAC;IAAC,MAAM,CAAC;QACP,MAAM,IAAI,KAAK,CAAC,GAAG,WAAW,iBAAiB,GAAG,gCAAgC,CAAC,CAAC;IACtF,CAAC;AACH,CAAC;AAED,MAAM,UAAU,UAAU,CAAC,GAAmB,EAAE,GAAG,GAAG,OAAO,CAAC,GAAG,EAAE;IACjE,MAAM,CAAC,GAAG,UAAU,CAAC,GAAG,CAAC,CAAC;IAC1B,aAAa,CAAC,CAAC,EAAE,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC;IACtD,OAAO,CAAC,CAAC;AACX,CAAC;AAED,6EAA6E;AAC7E,MAAM,UAAU,cAAc,CAAC,OAAgB;IAC7C,IAAI,OAAO,CAAC,GAAG,CAAC,iBAAiB,IAAI,CAAC,OAAO;QAAE,OAAO,qBAAqB,EAAE,CAAC;IAC9E,OAAO,qBAAqB,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC;AAC5C,CAAC"}
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA,0EAA0E;AAC1E,2EAA2E;AAC3E,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AACtD,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,qBAAqB,EAAE,MAAM,+BAA+B,CAAC;AAwBtE,MAAM,CAAC,MAAM,WAAW,GAAG,eAAe,CAAC;AAE3C,MAAM,UAAU,UAAU,CAAC,GAAG,GAAG,OAAO,CAAC,GAAG,EAAE;IAC5C,OAAO,OAAO,CAAC,GAAG,EAAE,WAAW,CAAC,CAAC;AACnC,CAAC;AAED,MAAM,UAAU,UAAU,CAAC,GAAG,GAAG,OAAO,CAAC,GAAG,EAAE;IAC5C,IAAI,CAAC;QACH,OAAO,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC,CAAmB,CAAC;IAC7E,CAAC;IAAC,MAAM,CAAC;QACP,MAAM,IAAI,KAAK,CAAC,GAAG,WAAW,iBAAiB,GAAG,gCAAgC,CAAC,CAAC;IACtF,CAAC;AACH,CAAC;AAED,MAAM,UAAU,UAAU,CAAC,GAAmB,EAAE,GAAG,GAAG,OAAO,CAAC,GAAG,EAAE;IACjE,MAAM,CAAC,GAAG,UAAU,CAAC,GAAG,CAAC,CAAC;IAC1B,aAAa,CAAC,CAAC,EAAE,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC;IACtD,OAAO,CAAC,CAAC;AACX,CAAC;AAED,6EAA6E;AAC7E,MAAM,UAAU,cAAc,CAAC,OAAgB;IAC7C,IAAI,OAAO,CAAC,GAAG,CAAC,iBAAiB,IAAI,CAAC,OAAO;QAAE,OAAO,qBAAqB,EAAE,CAAC;IAC9E,OAAO,qBAAqB,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC;AAC5C,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@capsulos/cli",
3
- "version": "0.1.2",
3
+ "version": "0.3.0",
4
4
  "description": "capsulos command line: set up your AWS account, build templates, list and kill capsules.",
5
5
  "license": "Apache-2.0",
6
6
  "keywords": [
@@ -52,9 +52,9 @@
52
52
  "@aws-sdk/client-s3": "^3.1158.0",
53
53
  "@aws-sdk/client-sts": "^3.1158.0",
54
54
  "@aws-sdk/credential-providers": "^3.1158.0",
55
- "@capsulos/provider-docker": "0.1.2",
56
- "@capsulos/provider-lambda": "0.1.2",
57
- "@capsulos/sdk": "0.1.2"
55
+ "@capsulos/provider-docker": "0.3.0",
56
+ "@capsulos/provider-lambda": "0.3.0",
57
+ "@capsulos/sdk": "0.3.0"
58
58
  },
59
59
  "devDependencies": {
60
60
  "@types/node": "^22.20.1",
package/src/cli.ts CHANGED
@@ -5,6 +5,8 @@
5
5
  // ls <template> capsules of a template
6
6
  // shell <id> attach your terminal to a capsule
7
7
  // forward <id> <port> http://localhost:<port> → that port inside the capsule
8
+ // pause <id> / resume <id> freeze and wake a capsule
9
+ // snapshot <id> <name> save a capsule as a new template (Docker only today)
8
10
  // kill <id> terminate a capsule
9
11
  // `--docker` on run/ls/shell/kill uses the local Docker provider instead of Lambda.
10
12
  import { parseArgs } from 'node:util';
@@ -24,10 +26,13 @@ function usage(): never {
24
26
  capsulos init [--region us-east-1] [--profile p] [--s3-bucket b ...] [--egress-connector arn]
25
27
  capsulos template build <name> --context <dir> [--dockerfile f] [--capsulod bin | --daemon-src dir] [--memory 512]
26
28
  [--capabilities default|all] [--tag k=v ...] [--profile p]
27
- capsulos run <template> [--docker | --profile p]
29
+ capsulos run <template> [--no-internet [--allow host]...] [--docker | --profile p]
28
30
  capsulos ls <template> [--docker | --profile p]
29
31
  capsulos shell <id> [--cmd /bin/bash] [--docker | --profile p]
30
32
  capsulos forward <id> <port> [--local-port p] [--docker | --profile p]
33
+ capsulos pause <id> [--docker | --profile p]
34
+ capsulos resume <id> [--docker | --profile p]
35
+ capsulos snapshot <id> <name> [--docker]
31
36
  capsulos kill <id> [--docker | --profile p]`);
32
37
  process.exit(2);
33
38
  }
@@ -47,6 +52,7 @@ function lambdaProvider(profile?: string): LambdaProvider {
47
52
  credentials: credentialsFor(profile),
48
53
  executionRoleArn: cfg.executionRoleArn,
49
54
  ...(cfg.egressConnectorArn ? { egressConnectorArn: cfg.egressConnectorArn } : {}),
55
+ ...(cfg.denyEgressConnectorArn ? { denyEgressConnectorArn: cfg.denyEgressConnectorArn } : {}),
50
56
  });
51
57
  }
52
58
 
@@ -114,11 +120,15 @@ export async function main(argv = process.argv.slice(2)): Promise<void> {
114
120
  case 'run': {
115
121
  const [template, ...args] = rest;
116
122
  if (!template) usage();
117
- const { values } = parseArgs({ args, options: providerFlags });
123
+ const { values } = parseArgs({
124
+ args,
125
+ options: { ...providerFlags, 'no-internet': { type: 'boolean' }, allow: { type: 'string', multiple: true } },
126
+ });
118
127
  const t0 = Date.now();
119
128
  const capsule = await Capsule.create(provider(values), {
120
129
  template,
121
130
  idle: { suspendAfterSeconds: 600, destroyAfterSeconds: 4 * 3600 },
131
+ ...(values['no-internet'] ? { network: { internet: 'deny', allow: values.allow ?? [] } } : {}),
122
132
  });
123
133
  log(`capsule ready in ${Date.now() - t0}ms`);
124
134
  console.log(capsule.id);
@@ -152,6 +162,27 @@ export async function main(argv = process.argv.slice(2)): Promise<void> {
152
162
  await new Promise<void>((resolve) => process.once('SIGINT', resolve));
153
163
  return;
154
164
  }
165
+ case 'pause':
166
+ case 'resume': {
167
+ const [id, ...args] = rest;
168
+ if (!id) usage();
169
+ const { values } = parseArgs({ args, options: providerFlags });
170
+ const capsule = await Capsule.connect(provider(values), id);
171
+ const t0 = Date.now();
172
+ if (cmd === 'pause') await capsule.pause();
173
+ else await capsule.resume();
174
+ log(`${cmd}d ${id} in ${Date.now() - t0}ms`);
175
+ return;
176
+ }
177
+ case 'snapshot': {
178
+ const [id, name, ...args] = rest;
179
+ if (!id || !name) usage();
180
+ const { values } = parseArgs({ args, options: providerFlags });
181
+ const res = await (await Capsule.connect(provider(values), id)).snapshot(name);
182
+ log(`saved ${id} as template ${res.template} (${res.provider})`);
183
+ console.log(res.template);
184
+ return;
185
+ }
155
186
  case 'kill': {
156
187
  const [id, ...args] = rest;
157
188
  if (!id) usage();
package/src/config.ts CHANGED
@@ -18,6 +18,8 @@ export interface CapsulosConfig {
18
18
  executionRoleArn: string;
19
19
  /** Optional egress connector (e.g. a VPC connector with a deny-all security group). */
20
20
  egressConnectorArn?: string;
21
+ /** Optional egress connector for `--no-internet` capsules (deny-all security group). */
22
+ denyEgressConnectorArn?: string;
21
23
  /** Default OS capabilities for `template build` ('default' | 'all'); the flag wins. */
22
24
  capabilities?: 'default' | 'all';
23
25
  /** Default tags for the images `template build` creates; the flags win. */