@celilo/cli 0.1.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/README.md +1566 -0
- package/bin/celilo +16 -0
- package/drizzle/0000_complex_puma.sql +179 -0
- package/drizzle/0001_dizzy_wolfpack.sql +2 -0
- package/drizzle/0002_web_routes.sql +16 -0
- package/drizzle/0003_backup_storage.sql +32 -0
- package/drizzle/meta/0000_snapshot.json +1151 -0
- package/drizzle/meta/0001_snapshot.json +1167 -0
- package/drizzle/meta/0002_snapshot.json +1257 -0
- package/drizzle/meta/_journal.json +27 -0
- package/package.json +64 -0
- package/schemas/system_config.json +106 -0
- package/src/__integration__/container-services-cli.integration.test.ts +246 -0
- package/src/ansible/dependencies.test.ts +309 -0
- package/src/ansible/dependencies.ts +896 -0
- package/src/ansible/inventory.test.ts +463 -0
- package/src/ansible/inventory.ts +445 -0
- package/src/ansible/secrets.ts +222 -0
- package/src/ansible/validation.test.ts +92 -0
- package/src/ansible/validation.ts +272 -0
- package/src/api-clients/digitalocean.ts +94 -0
- package/src/api-clients/proxmox.ts +655 -0
- package/src/capabilities/logging-wrapper.test.ts +217 -0
- package/src/capabilities/lookup.test.ts +149 -0
- package/src/capabilities/lookup.ts +89 -0
- package/src/capabilities/public-web-helpers.test.ts +198 -0
- package/src/capabilities/public-web-publish.test.ts +458 -0
- package/src/capabilities/registration.test.ts +395 -0
- package/src/capabilities/registration.ts +200 -0
- package/src/capabilities/route-validation.test.ts +121 -0
- package/src/capabilities/route-validation.ts +96 -0
- package/src/capabilities/secret-ref.test.ts +313 -0
- package/src/capabilities/secret-validation.ts +157 -0
- package/src/capabilities/secrets.test.ts +750 -0
- package/src/capabilities/secrets.ts +244 -0
- package/src/capabilities/validation.test.ts +613 -0
- package/src/capabilities/validation.ts +160 -0
- package/src/capabilities/well-known.test.ts +238 -0
- package/src/capabilities/well-known.ts +222 -0
- package/src/cli/cli.test.ts +654 -0
- package/src/cli/command-registry.ts +742 -0
- package/src/cli/command-tree-parser.test.ts +180 -0
- package/src/cli/command-tree-parser.ts +193 -0
- package/src/cli/commands/backup-create.ts +137 -0
- package/src/cli/commands/backup-delete.ts +74 -0
- package/src/cli/commands/backup-import.ts +97 -0
- package/src/cli/commands/backup-list.ts +132 -0
- package/src/cli/commands/backup-name.ts +73 -0
- package/src/cli/commands/backup-prune.ts +98 -0
- package/src/cli/commands/backup-restore.ts +122 -0
- package/src/cli/commands/capability-info.ts +121 -0
- package/src/cli/commands/capability-list.ts +47 -0
- package/src/cli/commands/completion.ts +87 -0
- package/src/cli/commands/hook-run.ts +176 -0
- package/src/cli/commands/ipam.ts +607 -0
- package/src/cli/commands/machine-add.ts +235 -0
- package/src/cli/commands/machine-earmark.ts +82 -0
- package/src/cli/commands/machine-list.ts +77 -0
- package/src/cli/commands/machine-remove.ts +90 -0
- package/src/cli/commands/machine-status.ts +131 -0
- package/src/cli/commands/module-audit.ts +51 -0
- package/src/cli/commands/module-build.ts +60 -0
- package/src/cli/commands/module-config.ts +170 -0
- package/src/cli/commands/module-deploy.ts +71 -0
- package/src/cli/commands/module-generate.ts +236 -0
- package/src/cli/commands/module-health.ts +108 -0
- package/src/cli/commands/module-import.ts +80 -0
- package/src/cli/commands/module-list.ts +43 -0
- package/src/cli/commands/module-logs.ts +73 -0
- package/src/cli/commands/module-remove.ts +162 -0
- package/src/cli/commands/module-show.ts +208 -0
- package/src/cli/commands/module-status.ts +131 -0
- package/src/cli/commands/module-types.ts +189 -0
- package/src/cli/commands/module-upgrade.ts +192 -0
- package/src/cli/commands/package.ts +68 -0
- package/src/cli/commands/secret-list.ts +99 -0
- package/src/cli/commands/secret-set.ts +134 -0
- package/src/cli/commands/service-add-digitalocean.ts +133 -0
- package/src/cli/commands/service-add-proxmox.ts +342 -0
- package/src/cli/commands/service-config-get.ts +83 -0
- package/src/cli/commands/service-config-set.ts +145 -0
- package/src/cli/commands/service-list.ts +74 -0
- package/src/cli/commands/service-reconfigure.ts +230 -0
- package/src/cli/commands/service-remove.ts +103 -0
- package/src/cli/commands/service-verify.ts +240 -0
- package/src/cli/commands/status.ts +216 -0
- package/src/cli/commands/storage-add-local.ts +106 -0
- package/src/cli/commands/storage-add-s3.ts +114 -0
- package/src/cli/commands/storage-list.ts +72 -0
- package/src/cli/commands/storage-remove.ts +54 -0
- package/src/cli/commands/storage-set-default.ts +44 -0
- package/src/cli/commands/storage-verify.ts +54 -0
- package/src/cli/commands/system-config.ts +168 -0
- package/src/cli/commands/system-init.ts +314 -0
- package/src/cli/commands/system-secret-get.ts +98 -0
- package/src/cli/commands/system-secret-set.ts +76 -0
- package/src/cli/commands/system-vault-password.ts +34 -0
- package/src/cli/completion.test.ts +37 -0
- package/src/cli/completion.ts +482 -0
- package/src/cli/fuel-gauge.test.ts +208 -0
- package/src/cli/fuel-gauge.ts +405 -0
- package/src/cli/generate-zsh-completion.test.ts +95 -0
- package/src/cli/generate-zsh-completion.ts +497 -0
- package/src/cli/index.ts +1583 -0
- package/src/cli/interactive-config.test.ts +201 -0
- package/src/cli/interactive-config.ts +62 -0
- package/src/cli/parser.test.ts +227 -0
- package/src/cli/parser.ts +244 -0
- package/src/cli/prompts.test.ts +33 -0
- package/src/cli/prompts.ts +121 -0
- package/src/cli/types.ts +38 -0
- package/src/cli/validators.test.ts +235 -0
- package/src/cli/validators.ts +188 -0
- package/src/config/env.ts +41 -0
- package/src/config/paths.test.ts +172 -0
- package/src/config/paths.ts +108 -0
- package/src/db/client.ts +190 -0
- package/src/db/migrate.ts +30 -0
- package/src/db/schema.test.ts +221 -0
- package/src/db/schema.ts +434 -0
- package/src/hooks/capability-loader-firewall.test.ts +246 -0
- package/src/hooks/capability-loader.test.ts +100 -0
- package/src/hooks/capability-loader.ts +520 -0
- package/src/hooks/define-hook.test.ts +488 -0
- package/src/hooks/executor.test.ts +462 -0
- package/src/hooks/executor.ts +469 -0
- package/src/hooks/logger.test.ts +54 -0
- package/src/hooks/logger.ts +95 -0
- package/src/hooks/test-fixtures/failing-hook.ts +13 -0
- package/src/hooks/test-fixtures/no-default-hook.ts +6 -0
- package/src/hooks/test-fixtures/success-hook.ts +20 -0
- package/src/hooks/test-fixtures/unbranded-hook.ts +11 -0
- package/src/hooks/test-fixtures/void-hook.ts +13 -0
- package/src/hooks/types.ts +89 -0
- package/src/infrastructure/property-extractor.test.ts +194 -0
- package/src/infrastructure/property-extractor.ts +151 -0
- package/src/ipam/allocator.test.ts +442 -0
- package/src/ipam/allocator.ts +369 -0
- package/src/ipam/auto-allocator.test.ts +247 -0
- package/src/ipam/auto-allocator.ts +270 -0
- package/src/ipam/subnet-parser.test.ts +107 -0
- package/src/ipam/subnet-parser.ts +136 -0
- package/src/manifest/contracts/index.ts +61 -0
- package/src/manifest/contracts/v1.ts +118 -0
- package/src/manifest/json-schema-roundtrip.test.ts +99 -0
- package/src/manifest/schema.ts +367 -0
- package/src/manifest/template-validator.test.ts +231 -0
- package/src/manifest/template-validator.ts +322 -0
- package/src/manifest/validate.test.ts +1180 -0
- package/src/manifest/validate.ts +415 -0
- package/src/module/import.test.ts +355 -0
- package/src/module/import.ts +676 -0
- package/src/module/packaging/audit.ts +169 -0
- package/src/module/packaging/build.ts +228 -0
- package/src/module/packaging/checksum.ts +41 -0
- package/src/module/packaging/extract.ts +234 -0
- package/src/module/packaging/signature.ts +47 -0
- package/src/secrets/encryption.test.ts +284 -0
- package/src/secrets/encryption.ts +162 -0
- package/src/secrets/generators.test.ts +112 -0
- package/src/secrets/generators.ts +127 -0
- package/src/secrets/master-key.test.ts +159 -0
- package/src/secrets/master-key.ts +114 -0
- package/src/secrets/storage.test.ts +115 -0
- package/src/secrets/storage.ts +106 -0
- package/src/secrets/vault.test.ts +35 -0
- package/src/secrets/vault.ts +42 -0
- package/src/services/backup-create.ts +532 -0
- package/src/services/backup-metadata.ts +198 -0
- package/src/services/backup-restore.ts +229 -0
- package/src/services/backup-retention.ts +84 -0
- package/src/services/backup-storage.ts +281 -0
- package/src/services/build-stream.test.ts +122 -0
- package/src/services/build-stream.ts +201 -0
- package/src/services/config-interview.ts +694 -0
- package/src/services/container-service.test.ts +298 -0
- package/src/services/container-service.ts +401 -0
- package/src/services/cross-module-data-manager.test.ts +405 -0
- package/src/services/cross-module-data-manager.ts +412 -0
- package/src/services/deploy-ansible.ts +88 -0
- package/src/services/deploy-planner.ts +153 -0
- package/src/services/deploy-preflight.ts +274 -0
- package/src/services/deploy-ssh.ts +131 -0
- package/src/services/deploy-terraform.test.ts +55 -0
- package/src/services/deploy-terraform.ts +445 -0
- package/src/services/deploy-validation.ts +311 -0
- package/src/services/dns-auto-register.ts +211 -0
- package/src/services/health-runner.ts +184 -0
- package/src/services/infrastructure-selector.test.ts +485 -0
- package/src/services/infrastructure-selector.ts +245 -0
- package/src/services/infrastructure-variable-resolver.test.ts +751 -0
- package/src/services/infrastructure-variable-resolver.ts +234 -0
- package/src/services/machine-detector.ts +328 -0
- package/src/services/machine-pool.test.ts +405 -0
- package/src/services/machine-pool.ts +316 -0
- package/src/services/manifest-validation.ts +120 -0
- package/src/services/module-build.test.ts +290 -0
- package/src/services/module-build.ts +431 -0
- package/src/services/module-config.test.ts +237 -0
- package/src/services/module-config.ts +298 -0
- package/src/services/module-deploy.ts +862 -0
- package/src/services/module-types-drift.test.ts +73 -0
- package/src/services/module-types-generator.test.ts +288 -0
- package/src/services/module-types-generator.ts +189 -0
- package/src/services/proxmox-state-recovery.ts +140 -0
- package/src/services/schema-validation.ts +155 -0
- package/src/services/secret-schema-loader.test.ts +311 -0
- package/src/services/secret-schema-loader.ts +239 -0
- package/src/services/ssh-key-manager.test.ts +283 -0
- package/src/services/ssh-key-manager.ts +193 -0
- package/src/services/storage-providers/local.ts +105 -0
- package/src/services/storage-providers/s3.ts +182 -0
- package/src/services/storage-providers/types.ts +24 -0
- package/src/services/system-config-schema-types.ts +25 -0
- package/src/services/system-config-validator.test.ts +160 -0
- package/src/services/system-config-validator.ts +74 -0
- package/src/services/system-init.test.ts +153 -0
- package/src/services/system-init.ts +253 -0
- package/src/services/terraform-safety.ts +174 -0
- package/src/services/zone-detector.test.ts +110 -0
- package/src/services/zone-detector.ts +102 -0
- package/src/services/zone-policy.test.ts +97 -0
- package/src/services/zone-policy.ts +126 -0
- package/src/templates/generator.test.ts +645 -0
- package/src/templates/generator.ts +1119 -0
- package/src/templates/types.ts +62 -0
- package/src/test-utils/INTERACTIVE_PROMPTS.md +167 -0
- package/src/test-utils/cli-context-interactive.test.ts +152 -0
- package/src/test-utils/cli-context-server.test.ts +66 -0
- package/src/test-utils/cli-context.test.ts +273 -0
- package/src/test-utils/cli-context.ts +677 -0
- package/src/test-utils/cli-result.test.ts +282 -0
- package/src/test-utils/cli-result.ts +241 -0
- package/src/test-utils/cli.ts +55 -0
- package/src/test-utils/completion-harness.test.ts +126 -0
- package/src/test-utils/completion-harness.ts +82 -0
- package/src/test-utils/database.test.ts +182 -0
- package/src/test-utils/database.ts +126 -0
- package/src/test-utils/filesystem.test.ts +208 -0
- package/src/test-utils/filesystem.ts +142 -0
- package/src/test-utils/fixtures.test.ts +123 -0
- package/src/test-utils/fixtures.ts +160 -0
- package/src/test-utils/golden-diff.ts +197 -0
- package/src/test-utils/index.ts +77 -0
- package/src/test-utils/integration.ts +81 -0
- package/src/test-utils/module-fixtures.ts +468 -0
- package/src/test-utils/modules.test.ts +144 -0
- package/src/test-utils/modules.ts +183 -0
- package/src/test-utils/setup-test-db.ts +90 -0
- package/src/test-utils/value-extractor.test.ts +231 -0
- package/src/test-utils/value-extractor.ts +228 -0
- package/src/types/infrastructure.ts +157 -0
- package/src/utils/shell.test.ts +365 -0
- package/src/utils/shell.ts +159 -0
- package/src/validation/schemas.ts +166 -0
- package/src/variables/ansible-resolver.test.ts +142 -0
- package/src/variables/ansible-resolver.ts +69 -0
- package/src/variables/capability-self-ref.test.ts +220 -0
- package/src/variables/context.test.ts +1265 -0
- package/src/variables/context.ts +624 -0
- package/src/variables/declarative-derivation.test.ts +743 -0
- package/src/variables/declarative-derivation.ts +200 -0
- package/src/variables/parser.test.ts +231 -0
- package/src/variables/parser.ts +76 -0
- package/src/variables/resolver.test.ts +458 -0
- package/src/variables/resolver.ts +282 -0
- package/src/variables/types.ts +59 -0
|
@@ -0,0 +1,742 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Command Registry - Single Source of Truth
|
|
3
|
+
*
|
|
4
|
+
* Defines the complete CLI command tree with metadata used by:
|
|
5
|
+
* - Zsh completion generator (descriptions, args, flags)
|
|
6
|
+
* - Help text generation (future)
|
|
7
|
+
* - Completion coverage tests
|
|
8
|
+
*
|
|
9
|
+
* When adding a new command:
|
|
10
|
+
* 1. Add it to this registry
|
|
11
|
+
* 2. Add routing in index.ts
|
|
12
|
+
* 3. Run `bun run test:completion` to verify coverage
|
|
13
|
+
*/
|
|
14
|
+
|
|
15
|
+
/**
|
|
16
|
+
* Flag definition for a command
|
|
17
|
+
*/
|
|
18
|
+
export interface FlagDef {
|
|
19
|
+
name: string;
|
|
20
|
+
description: string;
|
|
21
|
+
takesValue: boolean;
|
|
22
|
+
/** Zsh completion hint: "_files", "_directories", or literal values like "dmz app secure" */
|
|
23
|
+
valueHint?: string;
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
/**
|
|
27
|
+
* Positional argument definition
|
|
28
|
+
*/
|
|
29
|
+
export interface ArgDef {
|
|
30
|
+
name: string;
|
|
31
|
+
description: string;
|
|
32
|
+
/** If true, this arg can be repeated (variadic). Uses * in zsh completions. */
|
|
33
|
+
variadic?: boolean;
|
|
34
|
+
/**
|
|
35
|
+
* Dynamic completion source:
|
|
36
|
+
* - "module_ids": query modules table
|
|
37
|
+
* - "service_ids": query container_services table
|
|
38
|
+
* - "machine_hostnames": query machines table
|
|
39
|
+
* - "capability_names": query capabilities table
|
|
40
|
+
* - "config_keys": query manifest for module-specific keys
|
|
41
|
+
* - "system_config_keys": static list of system config keys
|
|
42
|
+
* - "system_secret_keys": static list of system secret keys
|
|
43
|
+
* - "files": zsh _files
|
|
44
|
+
* - "directories": zsh _directories
|
|
45
|
+
* - undefined: no completion
|
|
46
|
+
*/
|
|
47
|
+
completion?: string;
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
/**
|
|
51
|
+
* Command node in the tree
|
|
52
|
+
*/
|
|
53
|
+
export interface CommandDef {
|
|
54
|
+
name: string;
|
|
55
|
+
description: string;
|
|
56
|
+
subcommands?: CommandDef[];
|
|
57
|
+
args?: ArgDef[];
|
|
58
|
+
flags?: FlagDef[];
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
/**
|
|
62
|
+
* Complete CLI command tree
|
|
63
|
+
*/
|
|
64
|
+
export const COMMANDS: CommandDef[] = [
|
|
65
|
+
{
|
|
66
|
+
name: 'status',
|
|
67
|
+
description: 'Show system and module status',
|
|
68
|
+
},
|
|
69
|
+
{
|
|
70
|
+
name: 'capability',
|
|
71
|
+
description: 'View registered module capabilities',
|
|
72
|
+
subcommands: [
|
|
73
|
+
{
|
|
74
|
+
name: 'list',
|
|
75
|
+
description: 'List all registered capabilities',
|
|
76
|
+
},
|
|
77
|
+
{
|
|
78
|
+
name: 'info',
|
|
79
|
+
description: 'Show detailed capability information',
|
|
80
|
+
args: [{ name: 'name', description: 'Capability name', completion: 'capability_names' }],
|
|
81
|
+
},
|
|
82
|
+
],
|
|
83
|
+
},
|
|
84
|
+
{
|
|
85
|
+
name: 'module',
|
|
86
|
+
description: 'Manage modules (import, generate, configure)',
|
|
87
|
+
subcommands: [
|
|
88
|
+
{
|
|
89
|
+
name: 'import',
|
|
90
|
+
description: 'Import module from directory or package',
|
|
91
|
+
args: [{ name: 'path', description: 'Module path', completion: 'directories' }],
|
|
92
|
+
flags: [
|
|
93
|
+
{
|
|
94
|
+
name: 'target',
|
|
95
|
+
description: 'Target directory',
|
|
96
|
+
takesValue: true,
|
|
97
|
+
valueHint: '_directories',
|
|
98
|
+
},
|
|
99
|
+
{
|
|
100
|
+
name: 'auto-generate-secrets',
|
|
101
|
+
description: 'Auto-generate capability secrets',
|
|
102
|
+
takesValue: false,
|
|
103
|
+
},
|
|
104
|
+
{
|
|
105
|
+
name: 'skip-verify',
|
|
106
|
+
description: 'Skip package signature verification',
|
|
107
|
+
takesValue: false,
|
|
108
|
+
},
|
|
109
|
+
],
|
|
110
|
+
},
|
|
111
|
+
{ name: 'list', description: 'List all installed modules' },
|
|
112
|
+
{
|
|
113
|
+
name: 'remove',
|
|
114
|
+
description: 'Remove a module and its data',
|
|
115
|
+
args: [{ name: 'id', description: 'Module ID', completion: 'module_ids' }],
|
|
116
|
+
flags: [
|
|
117
|
+
{
|
|
118
|
+
name: 'force',
|
|
119
|
+
description: 'Skip confirmation for infrastructure destruction',
|
|
120
|
+
takesValue: false,
|
|
121
|
+
},
|
|
122
|
+
],
|
|
123
|
+
},
|
|
124
|
+
{
|
|
125
|
+
name: 'update',
|
|
126
|
+
description: 'Update module code while preserving state',
|
|
127
|
+
args: [
|
|
128
|
+
{
|
|
129
|
+
name: 'path',
|
|
130
|
+
description: 'Path to updated module source',
|
|
131
|
+
completion: 'directories',
|
|
132
|
+
variadic: true,
|
|
133
|
+
},
|
|
134
|
+
],
|
|
135
|
+
flags: [
|
|
136
|
+
{
|
|
137
|
+
name: 'skip-verify',
|
|
138
|
+
description: 'Skip package signature verification',
|
|
139
|
+
takesValue: false,
|
|
140
|
+
},
|
|
141
|
+
],
|
|
142
|
+
},
|
|
143
|
+
{
|
|
144
|
+
name: 'audit',
|
|
145
|
+
description: 'Verify module integrity',
|
|
146
|
+
args: [{ name: 'id', description: 'Module ID', completion: 'module_ids' }],
|
|
147
|
+
},
|
|
148
|
+
{
|
|
149
|
+
name: 'config',
|
|
150
|
+
description: 'Get or set module configuration',
|
|
151
|
+
subcommands: [
|
|
152
|
+
{
|
|
153
|
+
name: 'set',
|
|
154
|
+
description: 'Set configuration value',
|
|
155
|
+
args: [
|
|
156
|
+
{ name: 'id', description: 'Module ID', completion: 'module_ids' },
|
|
157
|
+
{ name: 'key', description: 'Config key', completion: 'config_keys' },
|
|
158
|
+
{ name: 'value', description: 'Config value' },
|
|
159
|
+
],
|
|
160
|
+
},
|
|
161
|
+
{
|
|
162
|
+
name: 'get',
|
|
163
|
+
description: 'Get configuration value',
|
|
164
|
+
args: [
|
|
165
|
+
{ name: 'id', description: 'Module ID', completion: 'module_ids' },
|
|
166
|
+
{ name: 'key', description: 'Config key', completion: 'config_keys' },
|
|
167
|
+
],
|
|
168
|
+
},
|
|
169
|
+
],
|
|
170
|
+
},
|
|
171
|
+
{
|
|
172
|
+
name: 'secret',
|
|
173
|
+
description: 'Manage module secrets',
|
|
174
|
+
subcommands: [
|
|
175
|
+
{
|
|
176
|
+
name: 'set',
|
|
177
|
+
description: 'Set encrypted secret',
|
|
178
|
+
args: [
|
|
179
|
+
{ name: 'id', description: 'Module ID', completion: 'module_ids' },
|
|
180
|
+
{ name: 'key', description: 'Secret name' },
|
|
181
|
+
{ name: 'value', description: 'Secret value' },
|
|
182
|
+
],
|
|
183
|
+
},
|
|
184
|
+
{
|
|
185
|
+
name: 'list',
|
|
186
|
+
description: 'List module secrets',
|
|
187
|
+
args: [{ name: 'id', description: 'Module ID', completion: 'module_ids' }],
|
|
188
|
+
},
|
|
189
|
+
],
|
|
190
|
+
},
|
|
191
|
+
{
|
|
192
|
+
name: 'show-config',
|
|
193
|
+
description: 'Show all configuration including derived values',
|
|
194
|
+
args: [{ name: 'id', description: 'Module ID', completion: 'module_ids' }],
|
|
195
|
+
},
|
|
196
|
+
{
|
|
197
|
+
name: 'show-zone',
|
|
198
|
+
description: 'Show module network zone and config',
|
|
199
|
+
args: [{ name: 'id', description: 'Module ID', completion: 'module_ids' }],
|
|
200
|
+
},
|
|
201
|
+
{
|
|
202
|
+
name: 'build',
|
|
203
|
+
description: 'Execute module build scripts',
|
|
204
|
+
args: [{ name: 'id', description: 'Module ID', completion: 'module_ids' }],
|
|
205
|
+
},
|
|
206
|
+
{
|
|
207
|
+
name: 'generate',
|
|
208
|
+
description: 'Generate infrastructure code',
|
|
209
|
+
args: [{ name: 'id', description: 'Module ID', completion: 'module_ids' }],
|
|
210
|
+
flags: [
|
|
211
|
+
{
|
|
212
|
+
name: 'output',
|
|
213
|
+
description: 'Output directory',
|
|
214
|
+
takesValue: true,
|
|
215
|
+
valueHint: '_directories',
|
|
216
|
+
},
|
|
217
|
+
],
|
|
218
|
+
},
|
|
219
|
+
{
|
|
220
|
+
name: 'deploy',
|
|
221
|
+
description: 'Deploy module to infrastructure',
|
|
222
|
+
args: [{ name: 'id', description: 'Module ID', completion: 'module_ids' }],
|
|
223
|
+
flags: [
|
|
224
|
+
{
|
|
225
|
+
name: 'no-interactive',
|
|
226
|
+
description: 'Disable progress animation and stream output directly',
|
|
227
|
+
takesValue: false,
|
|
228
|
+
},
|
|
229
|
+
{ name: 'debug', description: 'Enable debug mode', takesValue: false },
|
|
230
|
+
{
|
|
231
|
+
name: 'preflight',
|
|
232
|
+
description: 'Run pre-flight validation only (no deployment)',
|
|
233
|
+
takesValue: false,
|
|
234
|
+
},
|
|
235
|
+
],
|
|
236
|
+
},
|
|
237
|
+
{
|
|
238
|
+
name: 'validate',
|
|
239
|
+
description: 'Pre-flight check: validate module is ready for deployment',
|
|
240
|
+
args: [{ name: 'id', description: 'Module ID', completion: 'module_ids' }],
|
|
241
|
+
},
|
|
242
|
+
{
|
|
243
|
+
name: 'status',
|
|
244
|
+
description: 'Show detailed module status',
|
|
245
|
+
args: [{ name: 'id', description: 'Module ID', completion: 'module_ids' }],
|
|
246
|
+
},
|
|
247
|
+
{
|
|
248
|
+
name: 'logs',
|
|
249
|
+
description: 'Show deploy logs for a module',
|
|
250
|
+
args: [{ name: 'id', description: 'Module ID', completion: 'module_ids' }],
|
|
251
|
+
flags: [
|
|
252
|
+
{ name: 'tail', description: 'Show last N lines', takesValue: true },
|
|
253
|
+
{ name: 'last', description: 'Show only the most recent deploy run', takesValue: false },
|
|
254
|
+
],
|
|
255
|
+
},
|
|
256
|
+
{
|
|
257
|
+
name: 'health',
|
|
258
|
+
description: 'Run health checks on deployed modules',
|
|
259
|
+
args: [{ name: 'id', description: 'Module ID (optional)', completion: 'module_ids' }],
|
|
260
|
+
flags: [
|
|
261
|
+
{ name: 'json', description: 'Machine-readable JSON output', takesValue: false },
|
|
262
|
+
{ name: 'debug', description: 'Show detailed check output', takesValue: false },
|
|
263
|
+
],
|
|
264
|
+
},
|
|
265
|
+
{
|
|
266
|
+
name: 'run-hook',
|
|
267
|
+
description: 'Run a module hook (e.g., retry on_install after fixing an issue)',
|
|
268
|
+
args: [
|
|
269
|
+
{ name: 'id', description: 'Module ID', completion: 'module_ids' },
|
|
270
|
+
{ name: 'hook-name', description: 'Hook name (e.g., on_install, health_check)' },
|
|
271
|
+
],
|
|
272
|
+
flags: [
|
|
273
|
+
{
|
|
274
|
+
name: 'debug',
|
|
275
|
+
description: 'Run with visible browser (Playwright hooks)',
|
|
276
|
+
takesValue: false,
|
|
277
|
+
},
|
|
278
|
+
],
|
|
279
|
+
},
|
|
280
|
+
],
|
|
281
|
+
},
|
|
282
|
+
{
|
|
283
|
+
name: 'service',
|
|
284
|
+
description: 'Manage container services (Proxmox, DigitalOcean)',
|
|
285
|
+
subcommands: [
|
|
286
|
+
{
|
|
287
|
+
name: 'add',
|
|
288
|
+
description: 'Add a new container service',
|
|
289
|
+
subcommands: [
|
|
290
|
+
{
|
|
291
|
+
name: 'proxmox',
|
|
292
|
+
description: 'Add Proxmox container service',
|
|
293
|
+
flags: [
|
|
294
|
+
{ name: 'api-url', description: 'Proxmox API URL', takesValue: true },
|
|
295
|
+
{ name: 'token-id', description: 'API token ID', takesValue: true },
|
|
296
|
+
{ name: 'token-secret', description: 'API token secret', takesValue: true },
|
|
297
|
+
{ name: 'node', description: 'Target node', takesValue: true },
|
|
298
|
+
{
|
|
299
|
+
name: 'zone',
|
|
300
|
+
description: 'Network zone',
|
|
301
|
+
takesValue: true,
|
|
302
|
+
valueHint: 'dmz app secure internal',
|
|
303
|
+
},
|
|
304
|
+
{ name: 'name', description: 'Service name', takesValue: true },
|
|
305
|
+
],
|
|
306
|
+
},
|
|
307
|
+
{
|
|
308
|
+
name: 'digitalocean',
|
|
309
|
+
description: 'Add DigitalOcean container service',
|
|
310
|
+
flags: [
|
|
311
|
+
{ name: 'api-token', description: 'DigitalOcean API token', takesValue: true },
|
|
312
|
+
{ name: 'region', description: 'Region', takesValue: true },
|
|
313
|
+
{
|
|
314
|
+
name: 'zone',
|
|
315
|
+
description: 'Network zone',
|
|
316
|
+
takesValue: true,
|
|
317
|
+
valueHint: 'dmz app secure external',
|
|
318
|
+
},
|
|
319
|
+
{ name: 'name', description: 'Service name', takesValue: true },
|
|
320
|
+
],
|
|
321
|
+
},
|
|
322
|
+
],
|
|
323
|
+
},
|
|
324
|
+
{
|
|
325
|
+
name: 'list',
|
|
326
|
+
description: 'List all container services',
|
|
327
|
+
flags: [
|
|
328
|
+
{
|
|
329
|
+
name: 'zone',
|
|
330
|
+
description: 'Filter by zone',
|
|
331
|
+
takesValue: true,
|
|
332
|
+
valueHint: 'dmz app secure internal external',
|
|
333
|
+
},
|
|
334
|
+
],
|
|
335
|
+
},
|
|
336
|
+
{
|
|
337
|
+
name: 'verify',
|
|
338
|
+
description: 'Re-verify a container service connection',
|
|
339
|
+
args: [{ name: 'service-id', description: 'Service ID', completion: 'service_ids' }],
|
|
340
|
+
},
|
|
341
|
+
{
|
|
342
|
+
name: 'remove',
|
|
343
|
+
description: 'Remove a container service',
|
|
344
|
+
args: [{ name: 'service-id', description: 'Service ID', completion: 'service_ids' }],
|
|
345
|
+
flags: [{ name: 'force', description: 'Skip confirmation', takesValue: false }],
|
|
346
|
+
},
|
|
347
|
+
{
|
|
348
|
+
name: 'reconfigure',
|
|
349
|
+
description: 'Re-run configuration interview for a service',
|
|
350
|
+
args: [{ name: 'service-id', description: 'Service ID', completion: 'service_ids' }],
|
|
351
|
+
},
|
|
352
|
+
{
|
|
353
|
+
name: 'config',
|
|
354
|
+
description: 'Get or set service configuration',
|
|
355
|
+
subcommands: [
|
|
356
|
+
{
|
|
357
|
+
name: 'get',
|
|
358
|
+
description: 'Get service configuration',
|
|
359
|
+
args: [
|
|
360
|
+
{ name: 'service-id', description: 'Service ID', completion: 'service_ids' },
|
|
361
|
+
{ name: 'key', description: 'Config key' },
|
|
362
|
+
],
|
|
363
|
+
},
|
|
364
|
+
{
|
|
365
|
+
name: 'set',
|
|
366
|
+
description: 'Set service configuration',
|
|
367
|
+
args: [
|
|
368
|
+
{ name: 'service-id', description: 'Service ID', completion: 'service_ids' },
|
|
369
|
+
{ name: 'key', description: 'Config key' },
|
|
370
|
+
{ name: 'value', description: 'Config value' },
|
|
371
|
+
],
|
|
372
|
+
},
|
|
373
|
+
],
|
|
374
|
+
},
|
|
375
|
+
],
|
|
376
|
+
},
|
|
377
|
+
{
|
|
378
|
+
name: 'machine',
|
|
379
|
+
description: 'Manage existing machines (Raspberry Pi, VPS, bare metal)',
|
|
380
|
+
subcommands: [
|
|
381
|
+
{
|
|
382
|
+
name: 'add',
|
|
383
|
+
description: 'Add an existing machine to the pool',
|
|
384
|
+
flags: [
|
|
385
|
+
{ name: 'ip', description: 'Machine IP address', takesValue: true },
|
|
386
|
+
{ name: 'ssh-user', description: 'SSH username', takesValue: true },
|
|
387
|
+
{
|
|
388
|
+
name: 'ssh-key-file',
|
|
389
|
+
description: 'SSH private key file',
|
|
390
|
+
takesValue: true,
|
|
391
|
+
valueHint: '_files',
|
|
392
|
+
},
|
|
393
|
+
{
|
|
394
|
+
name: 'zone',
|
|
395
|
+
description: 'Network zone',
|
|
396
|
+
takesValue: true,
|
|
397
|
+
valueHint: 'dmz app secure internal external',
|
|
398
|
+
},
|
|
399
|
+
{ name: 'name', description: 'Machine name', takesValue: true },
|
|
400
|
+
{
|
|
401
|
+
name: 'earmark',
|
|
402
|
+
description: 'Earmark machine for a specific module',
|
|
403
|
+
takesValue: true,
|
|
404
|
+
},
|
|
405
|
+
],
|
|
406
|
+
},
|
|
407
|
+
{
|
|
408
|
+
name: 'list',
|
|
409
|
+
description: 'List all machines',
|
|
410
|
+
flags: [
|
|
411
|
+
{
|
|
412
|
+
name: 'zone',
|
|
413
|
+
description: 'Filter by zone',
|
|
414
|
+
takesValue: true,
|
|
415
|
+
valueHint: 'dmz app secure internal external',
|
|
416
|
+
},
|
|
417
|
+
],
|
|
418
|
+
},
|
|
419
|
+
{
|
|
420
|
+
name: 'status',
|
|
421
|
+
description: 'Show machine status and assigned modules',
|
|
422
|
+
args: [
|
|
423
|
+
{ name: 'hostname', description: 'Machine hostname', completion: 'machine_hostnames' },
|
|
424
|
+
],
|
|
425
|
+
},
|
|
426
|
+
{
|
|
427
|
+
name: 'remove',
|
|
428
|
+
description: 'Remove a machine from the pool',
|
|
429
|
+
args: [
|
|
430
|
+
{ name: 'hostname', description: 'Machine hostname', completion: 'machine_hostnames' },
|
|
431
|
+
],
|
|
432
|
+
flags: [{ name: 'force', description: 'Skip confirmation', takesValue: false }],
|
|
433
|
+
},
|
|
434
|
+
{
|
|
435
|
+
name: 'earmark',
|
|
436
|
+
description: 'Earmark a machine for a specific module',
|
|
437
|
+
args: [
|
|
438
|
+
{
|
|
439
|
+
name: 'hostname',
|
|
440
|
+
description: 'Machine hostname or IP',
|
|
441
|
+
completion: 'machine_hostnames',
|
|
442
|
+
},
|
|
443
|
+
{ name: 'module-id', description: 'Module ID to earmark for', completion: 'module_ids' },
|
|
444
|
+
],
|
|
445
|
+
flags: [{ name: 'clear', description: 'Clear the earmark', takesValue: false }],
|
|
446
|
+
},
|
|
447
|
+
],
|
|
448
|
+
},
|
|
449
|
+
{
|
|
450
|
+
name: 'system',
|
|
451
|
+
description: 'System configuration and initialization',
|
|
452
|
+
subcommands: [
|
|
453
|
+
{
|
|
454
|
+
name: 'init',
|
|
455
|
+
description: 'Initialize system configuration',
|
|
456
|
+
flags: [
|
|
457
|
+
{
|
|
458
|
+
name: 'accept-defaults',
|
|
459
|
+
description: 'Use default values without prompting',
|
|
460
|
+
takesValue: false,
|
|
461
|
+
},
|
|
462
|
+
],
|
|
463
|
+
},
|
|
464
|
+
{
|
|
465
|
+
name: 'config',
|
|
466
|
+
description: 'Get or set system configuration',
|
|
467
|
+
subcommands: [
|
|
468
|
+
{
|
|
469
|
+
name: 'set',
|
|
470
|
+
description: 'Set configuration value',
|
|
471
|
+
args: [
|
|
472
|
+
{ name: 'key', description: 'Config key', completion: 'system_config_keys' },
|
|
473
|
+
{ name: 'value', description: 'Config value' },
|
|
474
|
+
],
|
|
475
|
+
},
|
|
476
|
+
{
|
|
477
|
+
name: 'get',
|
|
478
|
+
description: 'Get configuration value',
|
|
479
|
+
args: [{ name: 'key', description: 'Config key', completion: 'system_config_keys' }],
|
|
480
|
+
},
|
|
481
|
+
],
|
|
482
|
+
},
|
|
483
|
+
{
|
|
484
|
+
name: 'secret',
|
|
485
|
+
description: 'Get or set system secrets',
|
|
486
|
+
subcommands: [
|
|
487
|
+
{
|
|
488
|
+
name: 'set',
|
|
489
|
+
description: 'Set secret value',
|
|
490
|
+
args: [
|
|
491
|
+
{ name: 'key', description: 'Secret key', completion: 'system_secret_keys' },
|
|
492
|
+
{ name: 'value', description: 'Secret value' },
|
|
493
|
+
],
|
|
494
|
+
},
|
|
495
|
+
{
|
|
496
|
+
name: 'get',
|
|
497
|
+
description: 'Get secret value',
|
|
498
|
+
args: [{ name: 'key', description: 'Secret key', completion: 'system_secret_keys' }],
|
|
499
|
+
},
|
|
500
|
+
],
|
|
501
|
+
},
|
|
502
|
+
{ name: 'vault-password', description: 'Display Ansible vault password' },
|
|
503
|
+
],
|
|
504
|
+
},
|
|
505
|
+
{
|
|
506
|
+
name: 'package',
|
|
507
|
+
description: 'Create module packages (.netapp files)',
|
|
508
|
+
args: [
|
|
509
|
+
{
|
|
510
|
+
name: 'source-directory',
|
|
511
|
+
description: 'Module source directory',
|
|
512
|
+
completion: 'directories',
|
|
513
|
+
},
|
|
514
|
+
],
|
|
515
|
+
flags: [
|
|
516
|
+
{ name: 'output', description: 'Output file path', takesValue: true, valueHint: '_files' },
|
|
517
|
+
],
|
|
518
|
+
},
|
|
519
|
+
{
|
|
520
|
+
name: 'ipam',
|
|
521
|
+
description: 'IP address management (allocate, reserve, release)',
|
|
522
|
+
subcommands: [
|
|
523
|
+
{ name: 'show', description: 'Show comprehensive IPAM summary' },
|
|
524
|
+
{ name: 'list-allocations', description: 'Show all module IPAM allocations' },
|
|
525
|
+
{
|
|
526
|
+
name: 'vmid',
|
|
527
|
+
description: 'Manage VMID reservations',
|
|
528
|
+
subcommands: [
|
|
529
|
+
{
|
|
530
|
+
name: 'reserve',
|
|
531
|
+
description: 'Reserve VMID or range',
|
|
532
|
+
args: [
|
|
533
|
+
{ name: 'vmid-or-range', description: 'VMID or range (e.g., 2100 or 2100-2110)' },
|
|
534
|
+
],
|
|
535
|
+
flags: [{ name: 'reason', description: 'Reservation reason', takesValue: true }],
|
|
536
|
+
},
|
|
537
|
+
{
|
|
538
|
+
name: 'unreserve',
|
|
539
|
+
description: 'Unreserve VMID or range',
|
|
540
|
+
args: [{ name: 'vmid-or-range', description: 'VMID or range' }],
|
|
541
|
+
},
|
|
542
|
+
{ name: 'list-reservations', description: 'List all VMID reservations' },
|
|
543
|
+
],
|
|
544
|
+
},
|
|
545
|
+
{
|
|
546
|
+
name: 'ip',
|
|
547
|
+
description: 'Manage IP address exclusions',
|
|
548
|
+
subcommands: [
|
|
549
|
+
{
|
|
550
|
+
name: 'exclude',
|
|
551
|
+
description: 'Exclude IP address or range from IPAM allocation',
|
|
552
|
+
args: [{ name: 'ip-or-range', description: 'IP or range' }],
|
|
553
|
+
flags: [
|
|
554
|
+
{
|
|
555
|
+
name: 'zone',
|
|
556
|
+
description: 'Network zone (auto-detected from IP)',
|
|
557
|
+
takesValue: true,
|
|
558
|
+
valueHint: 'internal dmz app secure',
|
|
559
|
+
},
|
|
560
|
+
{ name: 'reason', description: 'Exclusion reason', takesValue: true },
|
|
561
|
+
],
|
|
562
|
+
},
|
|
563
|
+
{
|
|
564
|
+
name: 'include',
|
|
565
|
+
description: 'Remove IP exclusion (allow IPAM to allocate again)',
|
|
566
|
+
args: [{ name: 'ip-or-range', description: 'IP or range' }],
|
|
567
|
+
flags: [
|
|
568
|
+
{
|
|
569
|
+
name: 'zone',
|
|
570
|
+
description: 'Network zone (auto-detected from IP)',
|
|
571
|
+
takesValue: true,
|
|
572
|
+
valueHint: 'internal dmz app secure',
|
|
573
|
+
},
|
|
574
|
+
],
|
|
575
|
+
},
|
|
576
|
+
{ name: 'list-exclusions', description: 'List all IP exclusions' },
|
|
577
|
+
],
|
|
578
|
+
},
|
|
579
|
+
],
|
|
580
|
+
},
|
|
581
|
+
{
|
|
582
|
+
name: 'storage',
|
|
583
|
+
description: 'Manage backup storage destinations',
|
|
584
|
+
subcommands: [
|
|
585
|
+
{
|
|
586
|
+
name: 'add',
|
|
587
|
+
description: 'Add a backup storage destination',
|
|
588
|
+
subcommands: [
|
|
589
|
+
{
|
|
590
|
+
name: 'local',
|
|
591
|
+
description: 'Add local filesystem storage',
|
|
592
|
+
flags: [
|
|
593
|
+
{ name: 'path', description: 'Storage directory path', takesValue: true },
|
|
594
|
+
{ name: 'name', description: 'Storage name', takesValue: true },
|
|
595
|
+
],
|
|
596
|
+
},
|
|
597
|
+
{
|
|
598
|
+
name: 's3',
|
|
599
|
+
description: 'Add S3-compatible storage',
|
|
600
|
+
flags: [
|
|
601
|
+
{ name: 'bucket', description: 'S3 bucket name', takesValue: true },
|
|
602
|
+
{ name: 'region', description: 'AWS region', takesValue: true },
|
|
603
|
+
{
|
|
604
|
+
name: 'endpoint',
|
|
605
|
+
description: 'Custom endpoint URL (MinIO, B2)',
|
|
606
|
+
takesValue: true,
|
|
607
|
+
},
|
|
608
|
+
{ name: 'name', description: 'Storage name', takesValue: true },
|
|
609
|
+
],
|
|
610
|
+
},
|
|
611
|
+
],
|
|
612
|
+
},
|
|
613
|
+
{ name: 'list', description: 'List configured storage destinations' },
|
|
614
|
+
{
|
|
615
|
+
name: 'remove',
|
|
616
|
+
description: 'Remove a storage destination',
|
|
617
|
+
args: [{ name: 'storage-id', description: 'Storage ID', completion: 'storage_ids' }],
|
|
618
|
+
flags: [{ name: 'force', description: 'Skip confirmation', takesValue: false }],
|
|
619
|
+
},
|
|
620
|
+
{
|
|
621
|
+
name: 'verify',
|
|
622
|
+
description: 'Verify storage destination connectivity',
|
|
623
|
+
args: [{ name: 'storage-id', description: 'Storage ID', completion: 'storage_ids' }],
|
|
624
|
+
},
|
|
625
|
+
{
|
|
626
|
+
name: 'set-default',
|
|
627
|
+
description: 'Set the default storage destination',
|
|
628
|
+
args: [{ name: 'storage-id', description: 'Storage ID', completion: 'storage_ids' }],
|
|
629
|
+
},
|
|
630
|
+
],
|
|
631
|
+
},
|
|
632
|
+
{
|
|
633
|
+
name: 'backup',
|
|
634
|
+
description: 'Create and manage backups',
|
|
635
|
+
subcommands: [
|
|
636
|
+
{
|
|
637
|
+
name: 'create',
|
|
638
|
+
description: 'Create a backup',
|
|
639
|
+
args: [
|
|
640
|
+
{
|
|
641
|
+
name: 'module-id',
|
|
642
|
+
description: 'Module ID (optional, backs up all if omitted)',
|
|
643
|
+
completion: 'module_ids',
|
|
644
|
+
},
|
|
645
|
+
],
|
|
646
|
+
flags: [
|
|
647
|
+
{ name: 'force', description: 'Ignore schedule, back up now', takesValue: false },
|
|
648
|
+
{
|
|
649
|
+
name: 'now',
|
|
650
|
+
description: 'Ignore schedule, back up now (alias for --force)',
|
|
651
|
+
takesValue: false,
|
|
652
|
+
},
|
|
653
|
+
{ name: 'storage', description: 'Storage destination ID', takesValue: true },
|
|
654
|
+
{
|
|
655
|
+
name: 'no-interactive',
|
|
656
|
+
description: 'Non-interactive mode (for cron)',
|
|
657
|
+
takesValue: false,
|
|
658
|
+
},
|
|
659
|
+
],
|
|
660
|
+
},
|
|
661
|
+
{
|
|
662
|
+
name: 'list',
|
|
663
|
+
description: 'List available backups',
|
|
664
|
+
args: [
|
|
665
|
+
{
|
|
666
|
+
name: 'module-id',
|
|
667
|
+
description: 'Filter by module ID',
|
|
668
|
+
completion: 'module_ids',
|
|
669
|
+
},
|
|
670
|
+
],
|
|
671
|
+
flags: [{ name: 'limit', description: 'Number of backups to show', takesValue: true }],
|
|
672
|
+
},
|
|
673
|
+
{
|
|
674
|
+
name: 'restore',
|
|
675
|
+
description: 'Restore from a backup',
|
|
676
|
+
args: [{ name: 'backup-id', description: 'Backup ID', completion: 'backup_ids' }],
|
|
677
|
+
flags: [{ name: 'yes', description: 'Skip confirmation', takesValue: false }],
|
|
678
|
+
},
|
|
679
|
+
{
|
|
680
|
+
name: 'delete',
|
|
681
|
+
description: 'Delete a specific backup',
|
|
682
|
+
args: [{ name: 'backup-id', description: 'Backup ID', completion: 'backup_ids' }],
|
|
683
|
+
flags: [{ name: 'force', description: 'Skip confirmation', takesValue: false }],
|
|
684
|
+
},
|
|
685
|
+
{
|
|
686
|
+
name: 'name',
|
|
687
|
+
description: 'Get or set a human-readable name on a backup',
|
|
688
|
+
args: [
|
|
689
|
+
{ name: 'backup-id', description: 'Backup ID', completion: 'backup_ids' },
|
|
690
|
+
{ name: 'name', description: 'Name to assign (all remaining text)' },
|
|
691
|
+
],
|
|
692
|
+
flags: [{ name: 'clear', description: 'Remove the name', takesValue: false }],
|
|
693
|
+
},
|
|
694
|
+
{
|
|
695
|
+
name: 'prune',
|
|
696
|
+
description: 'Remove old backups according to retention policies',
|
|
697
|
+
args: [
|
|
698
|
+
{
|
|
699
|
+
name: 'module-id',
|
|
700
|
+
description: 'Module ID (optional)',
|
|
701
|
+
completion: 'module_ids',
|
|
702
|
+
},
|
|
703
|
+
],
|
|
704
|
+
flags: [{ name: 'dry-run', description: 'Show what would be deleted', takesValue: false }],
|
|
705
|
+
},
|
|
706
|
+
{
|
|
707
|
+
name: 'import',
|
|
708
|
+
description: 'Import a local file as a module backup',
|
|
709
|
+
args: [
|
|
710
|
+
{ name: 'file-path', description: 'Path to the file to import' },
|
|
711
|
+
{
|
|
712
|
+
name: 'module-id',
|
|
713
|
+
description: 'Module ID to associate the backup with',
|
|
714
|
+
completion: 'module_ids',
|
|
715
|
+
},
|
|
716
|
+
],
|
|
717
|
+
flags: [
|
|
718
|
+
{ name: 'name', description: 'Human-readable name for the backup', takesValue: true },
|
|
719
|
+
{
|
|
720
|
+
name: 'schema-version',
|
|
721
|
+
description: 'Schema version metadata',
|
|
722
|
+
takesValue: true,
|
|
723
|
+
},
|
|
724
|
+
{ name: 'storage', description: 'Storage destination ID', takesValue: true },
|
|
725
|
+
{ name: 'yes', description: 'Skip confirmation', takesValue: false },
|
|
726
|
+
],
|
|
727
|
+
},
|
|
728
|
+
],
|
|
729
|
+
},
|
|
730
|
+
{
|
|
731
|
+
name: 'completion',
|
|
732
|
+
description: 'Generate shell completion scripts',
|
|
733
|
+
subcommands: [
|
|
734
|
+
{ name: 'bash', description: 'Generate bash completion script' },
|
|
735
|
+
{ name: 'zsh', description: 'Generate zsh completion script' },
|
|
736
|
+
],
|
|
737
|
+
},
|
|
738
|
+
{
|
|
739
|
+
name: 'help',
|
|
740
|
+
description: 'Show help information',
|
|
741
|
+
},
|
|
742
|
+
];
|