pvectl 0.2.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.
- checksums.yaml +7 -0
- data/.claude/rules/branch-before-changes.md +52 -0
- data/.claude/rules/documentation-updates.md +104 -0
- data/.claude/rules/git-workflow.md +84 -0
- data/.claude/rules/proxmox-api-docs.md +58 -0
- data/.claude/rules/rbs-signatures.md +80 -0
- data/.claude/rules/refactoring-as-design-option.md +35 -0
- data/.claude/scheduled_tasks.lock +1 -0
- data/.claude/settings.json +51 -0
- data/.mcp.json +8 -0
- data/.ruby-gemset +1 -0
- data/.ruby-version +1 -0
- data/CHANGELOG.md +138 -0
- data/CLAUDE.md +211 -0
- data/CODE_OF_CONDUCT.md +132 -0
- data/LICENSE.txt +21 -0
- data/README.md +143 -0
- data/Rakefile +8 -0
- data/docs/proxmox-api-update.sh +96 -0
- data/exe/pvectl +5 -0
- data/lib/pvectl/argv_preprocessor.rb +334 -0
- data/lib/pvectl/cli.rb +102 -0
- data/lib/pvectl/commands/apt.rb +389 -0
- data/lib/pvectl/commands/clone_container.rb +230 -0
- data/lib/pvectl/commands/clone_vm.rb +331 -0
- data/lib/pvectl/commands/cloudinit/command.rb +122 -0
- data/lib/pvectl/commands/cloudinit/dump.rb +94 -0
- data/lib/pvectl/commands/cloudinit/pending.rb +137 -0
- data/lib/pvectl/commands/cloudinit/regenerate.rb +79 -0
- data/lib/pvectl/commands/config/command.rb +65 -0
- data/lib/pvectl/commands/config/get_contexts.rb +68 -0
- data/lib/pvectl/commands/config/set_cluster.rb +103 -0
- data/lib/pvectl/commands/config/set_context.rb +136 -0
- data/lib/pvectl/commands/config/set_credentials.rb +181 -0
- data/lib/pvectl/commands/config/use_context.rb +69 -0
- data/lib/pvectl/commands/config/view.rb +67 -0
- data/lib/pvectl/commands/console.rb +93 -0
- data/lib/pvectl/commands/console_ct.rb +187 -0
- data/lib/pvectl/commands/console_vm.rb +187 -0
- data/lib/pvectl/commands/container_lifecycle_command.rb +77 -0
- data/lib/pvectl/commands/create_backup.rb +173 -0
- data/lib/pvectl/commands/create_container.rb +141 -0
- data/lib/pvectl/commands/create_resource_command.rb +244 -0
- data/lib/pvectl/commands/create_snapshot.rb +242 -0
- data/lib/pvectl/commands/create_vm.rb +267 -0
- data/lib/pvectl/commands/delete_backup.rb +139 -0
- data/lib/pvectl/commands/delete_command.rb +119 -0
- data/lib/pvectl/commands/delete_container.rb +30 -0
- data/lib/pvectl/commands/delete_snapshot.rb +248 -0
- data/lib/pvectl/commands/delete_vm.rb +127 -0
- data/lib/pvectl/commands/describe/command.rb +251 -0
- data/lib/pvectl/commands/edit_container.rb +56 -0
- data/lib/pvectl/commands/edit_dns.rb +149 -0
- data/lib/pvectl/commands/edit_hosts.rb +135 -0
- data/lib/pvectl/commands/edit_node.rb +54 -0
- data/lib/pvectl/commands/edit_resource_command.rb +180 -0
- data/lib/pvectl/commands/edit_vm.rb +154 -0
- data/lib/pvectl/commands/edit_volume.rb +189 -0
- data/lib/pvectl/commands/feature_command.rb +230 -0
- data/lib/pvectl/commands/feature_container.rb +21 -0
- data/lib/pvectl/commands/feature_vm.rb +94 -0
- data/lib/pvectl/commands/get/command.rb +360 -0
- data/lib/pvectl/commands/get/handlers/backups.rb +76 -0
- data/lib/pvectl/commands/get/handlers/capabilities.rb +107 -0
- data/lib/pvectl/commands/get/handlers/containers.rb +148 -0
- data/lib/pvectl/commands/get/handlers/disks.rb +107 -0
- data/lib/pvectl/commands/get/handlers/dns.rb +94 -0
- data/lib/pvectl/commands/get/handlers/hosts.rb +94 -0
- data/lib/pvectl/commands/get/handlers/nodes.rb +162 -0
- data/lib/pvectl/commands/get/handlers/services.rb +81 -0
- data/lib/pvectl/commands/get/handlers/snapshots.rb +97 -0
- data/lib/pvectl/commands/get/handlers/storage.rb +118 -0
- data/lib/pvectl/commands/get/handlers/subscription.rb +69 -0
- data/lib/pvectl/commands/get/handlers/tasks.rb +89 -0
- data/lib/pvectl/commands/get/handlers/templates.rb +175 -0
- data/lib/pvectl/commands/get/handlers/time.rb +118 -0
- data/lib/pvectl/commands/get/handlers/vms.rb +145 -0
- data/lib/pvectl/commands/get/handlers/volume.rb +134 -0
- data/lib/pvectl/commands/get/resource_handler.rb +63 -0
- data/lib/pvectl/commands/get/resource_registry.rb +18 -0
- data/lib/pvectl/commands/get/watch_loop.rb +129 -0
- data/lib/pvectl/commands/irreversible_command.rb +265 -0
- data/lib/pvectl/commands/logs/command.rb +275 -0
- data/lib/pvectl/commands/logs/handlers/journal.rb +46 -0
- data/lib/pvectl/commands/logs/handlers/syslog.rb +53 -0
- data/lib/pvectl/commands/logs/handlers/task_detail.rb +52 -0
- data/lib/pvectl/commands/logs/handlers/task_logs.rb +115 -0
- data/lib/pvectl/commands/logs/resource_handler.rb +46 -0
- data/lib/pvectl/commands/logs/resource_registry.rb +22 -0
- data/lib/pvectl/commands/migrate_command.rb +282 -0
- data/lib/pvectl/commands/migrate_container.rb +23 -0
- data/lib/pvectl/commands/migrate_vm.rb +122 -0
- data/lib/pvectl/commands/move_disk_command.rb +239 -0
- data/lib/pvectl/commands/move_disk_container.rb +21 -0
- data/lib/pvectl/commands/move_disk_vm.rb +127 -0
- data/lib/pvectl/commands/ping.rb +249 -0
- data/lib/pvectl/commands/pull.rb +342 -0
- data/lib/pvectl/commands/push.rb +352 -0
- data/lib/pvectl/commands/reset.rb +64 -0
- data/lib/pvectl/commands/resource_lifecycle_command.rb +277 -0
- data/lib/pvectl/commands/resource_registry.rb +73 -0
- data/lib/pvectl/commands/restart.rb +70 -0
- data/lib/pvectl/commands/restart_container.rb +18 -0
- data/lib/pvectl/commands/restore_backup.rb +236 -0
- data/lib/pvectl/commands/resume.rb +57 -0
- data/lib/pvectl/commands/rollback_snapshot.rb +228 -0
- data/lib/pvectl/commands/sendkey_vm.rb +205 -0
- data/lib/pvectl/commands/service.rb +293 -0
- data/lib/pvectl/commands/set_container.rb +50 -0
- data/lib/pvectl/commands/set_node.rb +52 -0
- data/lib/pvectl/commands/set_resource_command.rb +185 -0
- data/lib/pvectl/commands/set_vm.rb +136 -0
- data/lib/pvectl/commands/set_volume.rb +212 -0
- data/lib/pvectl/commands/shared_config_parsers.rb +126 -0
- data/lib/pvectl/commands/shared_flags.rb +155 -0
- data/lib/pvectl/commands/shutdown.rb +73 -0
- data/lib/pvectl/commands/shutdown_container.rb +18 -0
- data/lib/pvectl/commands/start.rb +79 -0
- data/lib/pvectl/commands/start_container.rb +18 -0
- data/lib/pvectl/commands/stop.rb +75 -0
- data/lib/pvectl/commands/stop_container.rb +18 -0
- data/lib/pvectl/commands/suspend.rb +64 -0
- data/lib/pvectl/commands/template_command.rb +205 -0
- data/lib/pvectl/commands/template_container.rb +27 -0
- data/lib/pvectl/commands/template_vm.rb +106 -0
- data/lib/pvectl/commands/top/command.rb +206 -0
- data/lib/pvectl/commands/top/handlers/containers.rb +61 -0
- data/lib/pvectl/commands/top/handlers/nodes.rb +61 -0
- data/lib/pvectl/commands/top/handlers/vms.rb +61 -0
- data/lib/pvectl/commands/top/resource_handler.rb +46 -0
- data/lib/pvectl/commands/top/resource_registry.rb +22 -0
- data/lib/pvectl/commands/unlink_disk_vm.rb +232 -0
- data/lib/pvectl/commands/vm_lifecycle_command.rb +77 -0
- data/lib/pvectl/commands/wakeonlan_node.rb +153 -0
- data/lib/pvectl/config/errors.rb +62 -0
- data/lib/pvectl/config/models/cluster.rb +180 -0
- data/lib/pvectl/config/models/context.rb +100 -0
- data/lib/pvectl/config/models/resolved_config.rb +171 -0
- data/lib/pvectl/config/models/user.rb +133 -0
- data/lib/pvectl/config/provider.rb +297 -0
- data/lib/pvectl/config/service.rb +300 -0
- data/lib/pvectl/config/store.rb +161 -0
- data/lib/pvectl/config/wizard.rb +309 -0
- data/lib/pvectl/config_serializer.rb +1034 -0
- data/lib/pvectl/connection/retry_handler.rb +161 -0
- data/lib/pvectl/connection.rb +157 -0
- data/lib/pvectl/console/terminal_session.rb +449 -0
- data/lib/pvectl/editor_session.rb +157 -0
- data/lib/pvectl/exit_codes.rb +43 -0
- data/lib/pvectl/formatters/base.rb +55 -0
- data/lib/pvectl/formatters/color_support.rb +90 -0
- data/lib/pvectl/formatters/json.rb +45 -0
- data/lib/pvectl/formatters/output_helper.rb +77 -0
- data/lib/pvectl/formatters/registry.rb +72 -0
- data/lib/pvectl/formatters/table.rb +235 -0
- data/lib/pvectl/formatters/wide.rb +93 -0
- data/lib/pvectl/formatters/yaml.rb +49 -0
- data/lib/pvectl/manifest_serializer.rb +142 -0
- data/lib/pvectl/models/apt_package.rb +107 -0
- data/lib/pvectl/models/backup.rb +173 -0
- data/lib/pvectl/models/base.rb +49 -0
- data/lib/pvectl/models/capability.rb +62 -0
- data/lib/pvectl/models/container.rb +205 -0
- data/lib/pvectl/models/container_operation_result.rb +27 -0
- data/lib/pvectl/models/dns_config.rb +54 -0
- data/lib/pvectl/models/hosts_file.rb +47 -0
- data/lib/pvectl/models/journal_entry.rb +16 -0
- data/lib/pvectl/models/network_interface.rb +85 -0
- data/lib/pvectl/models/node.rb +195 -0
- data/lib/pvectl/models/node_operation_result.rb +45 -0
- data/lib/pvectl/models/operation_result.rb +110 -0
- data/lib/pvectl/models/physical_disk.rb +193 -0
- data/lib/pvectl/models/service.rb +80 -0
- data/lib/pvectl/models/snapshot.rb +101 -0
- data/lib/pvectl/models/snapshot_description.rb +39 -0
- data/lib/pvectl/models/storage.rb +180 -0
- data/lib/pvectl/models/subscription.rb +87 -0
- data/lib/pvectl/models/syslog_entry.rb +17 -0
- data/lib/pvectl/models/task.rb +95 -0
- data/lib/pvectl/models/task_entry.rb +52 -0
- data/lib/pvectl/models/task_log_line.rb +17 -0
- data/lib/pvectl/models/time_config.rb +47 -0
- data/lib/pvectl/models/vm.rb +137 -0
- data/lib/pvectl/models/vm_operation_result.rb +27 -0
- data/lib/pvectl/models/volume.rb +133 -0
- data/lib/pvectl/models/volume_operation_result.rb +26 -0
- data/lib/pvectl/parsers/cloud_init_config.rb +92 -0
- data/lib/pvectl/parsers/disk_config.rb +97 -0
- data/lib/pvectl/parsers/lxc_mount_config.rb +98 -0
- data/lib/pvectl/parsers/lxc_net_config.rb +97 -0
- data/lib/pvectl/parsers/net_config.rb +95 -0
- data/lib/pvectl/parsers/smart_text.rb +42 -0
- data/lib/pvectl/plugin_loader.rb +157 -0
- data/lib/pvectl/presenters/apt_package.rb +99 -0
- data/lib/pvectl/presenters/backup.rb +128 -0
- data/lib/pvectl/presenters/base.rb +283 -0
- data/lib/pvectl/presenters/capability.rb +104 -0
- data/lib/pvectl/presenters/config/context.rb +80 -0
- data/lib/pvectl/presenters/container.rb +574 -0
- data/lib/pvectl/presenters/container_operation_result.rb +109 -0
- data/lib/pvectl/presenters/disk.rb +184 -0
- data/lib/pvectl/presenters/dns_config.rb +68 -0
- data/lib/pvectl/presenters/hosts_file.rb +61 -0
- data/lib/pvectl/presenters/journal_entry.rb +20 -0
- data/lib/pvectl/presenters/node.rb +762 -0
- data/lib/pvectl/presenters/node_operation_result.rb +50 -0
- data/lib/pvectl/presenters/operation_result.rb +61 -0
- data/lib/pvectl/presenters/service.rb +76 -0
- data/lib/pvectl/presenters/snapshot.rb +239 -0
- data/lib/pvectl/presenters/snapshot_operation_result.rb +125 -0
- data/lib/pvectl/presenters/storage.rb +329 -0
- data/lib/pvectl/presenters/subscription.rb +189 -0
- data/lib/pvectl/presenters/syslog_entry.rb +20 -0
- data/lib/pvectl/presenters/task_entry.rb +69 -0
- data/lib/pvectl/presenters/task_log_line.rb +20 -0
- data/lib/pvectl/presenters/template.rb +76 -0
- data/lib/pvectl/presenters/time_config.rb +86 -0
- data/lib/pvectl/presenters/top_container.rb +112 -0
- data/lib/pvectl/presenters/top_node.rb +115 -0
- data/lib/pvectl/presenters/top_presenter.rb +59 -0
- data/lib/pvectl/presenters/top_vm.rb +105 -0
- data/lib/pvectl/presenters/vm.rb +853 -0
- data/lib/pvectl/presenters/vm_operation_result.rb +109 -0
- data/lib/pvectl/presenters/volume.rb +136 -0
- data/lib/pvectl/presenters/volume_operation_result.rb +58 -0
- data/lib/pvectl/repositories/apt.rb +93 -0
- data/lib/pvectl/repositories/backup.rb +186 -0
- data/lib/pvectl/repositories/base.rb +110 -0
- data/lib/pvectl/repositories/capabilities.rb +96 -0
- data/lib/pvectl/repositories/container.rb +503 -0
- data/lib/pvectl/repositories/disk.rb +87 -0
- data/lib/pvectl/repositories/dns.rb +54 -0
- data/lib/pvectl/repositories/hosts.rb +63 -0
- data/lib/pvectl/repositories/journal.rb +23 -0
- data/lib/pvectl/repositories/node.rb +537 -0
- data/lib/pvectl/repositories/service.rb +139 -0
- data/lib/pvectl/repositories/snapshot.rb +133 -0
- data/lib/pvectl/repositories/storage.rb +302 -0
- data/lib/pvectl/repositories/subscription.rb +77 -0
- data/lib/pvectl/repositories/syslog.rb +25 -0
- data/lib/pvectl/repositories/task.rb +82 -0
- data/lib/pvectl/repositories/task_list.rb +30 -0
- data/lib/pvectl/repositories/task_log.rb +31 -0
- data/lib/pvectl/repositories/time_config.rb +53 -0
- data/lib/pvectl/repositories/vm.rb +616 -0
- data/lib/pvectl/repositories/volume.rb +306 -0
- data/lib/pvectl/selectors/base.rb +201 -0
- data/lib/pvectl/selectors/container.rb +116 -0
- data/lib/pvectl/selectors/disk.rb +59 -0
- data/lib/pvectl/selectors/vm.rb +116 -0
- data/lib/pvectl/selectors/volume.rb +59 -0
- data/lib/pvectl/services/backup.rb +209 -0
- data/lib/pvectl/services/clone_container.rb +260 -0
- data/lib/pvectl/services/clone_vm.rb +265 -0
- data/lib/pvectl/services/cloudinit.rb +96 -0
- data/lib/pvectl/services/console.rb +152 -0
- data/lib/pvectl/services/container_lifecycle.rb +124 -0
- data/lib/pvectl/services/create_container.rb +179 -0
- data/lib/pvectl/services/create_vm.rb +191 -0
- data/lib/pvectl/services/edit_container.rb +125 -0
- data/lib/pvectl/services/edit_dns.rb +159 -0
- data/lib/pvectl/services/edit_hosts.rb +78 -0
- data/lib/pvectl/services/edit_node.rb +147 -0
- data/lib/pvectl/services/edit_vm.rb +125 -0
- data/lib/pvectl/services/edit_volume.rb +224 -0
- data/lib/pvectl/services/get/resource_service.rb +98 -0
- data/lib/pvectl/services/move_disk.rb +132 -0
- data/lib/pvectl/services/pull_config.rb +94 -0
- data/lib/pvectl/services/push_config.rb +524 -0
- data/lib/pvectl/services/resize_volume.rb +253 -0
- data/lib/pvectl/services/resource_delete.rb +169 -0
- data/lib/pvectl/services/resource_migration.rb +170 -0
- data/lib/pvectl/services/sendkey.rb +108 -0
- data/lib/pvectl/services/service_lifecycle.rb +89 -0
- data/lib/pvectl/services/set_container.rb +128 -0
- data/lib/pvectl/services/set_node.rb +236 -0
- data/lib/pvectl/services/set_vm.rb +128 -0
- data/lib/pvectl/services/set_volume.rb +126 -0
- data/lib/pvectl/services/snapshot.rb +261 -0
- data/lib/pvectl/services/task_listing.rb +75 -0
- data/lib/pvectl/services/unlink_disk.rb +86 -0
- data/lib/pvectl/services/vm_lifecycle.rb +124 -0
- data/lib/pvectl/services/wakeonlan.rb +79 -0
- data/lib/pvectl/utils/resource_resolver.rb +80 -0
- data/lib/pvectl/version.rb +13 -0
- data/lib/pvectl/wizards/create_container.rb +105 -0
- data/lib/pvectl/wizards/create_vm.rb +98 -0
- data/lib/pvectl.rb +439 -0
- data/sig/external/gli.rbs +16 -0
- data/sig/external/proxmox_api.rbs +10 -0
- data/sig/pvectl/argv_preprocessor.rbs +53 -0
- data/sig/pvectl/cli.rbs +26 -0
- data/sig/pvectl/commands/apt.rbs +47 -0
- data/sig/pvectl/commands/clone_container.rbs +31 -0
- data/sig/pvectl/commands/clone_vm.rbs +33 -0
- data/sig/pvectl/commands/cloudinit/command.rbs +13 -0
- data/sig/pvectl/commands/cloudinit/dump.rbs +13 -0
- data/sig/pvectl/commands/cloudinit/pending.rbs +17 -0
- data/sig/pvectl/commands/cloudinit/regenerate.rbs +11 -0
- data/sig/pvectl/commands/config/command.rbs +9 -0
- data/sig/pvectl/commands/config/get_contexts.rbs +11 -0
- data/sig/pvectl/commands/config/set_cluster.rbs +11 -0
- data/sig/pvectl/commands/config/set_context.rbs +15 -0
- data/sig/pvectl/commands/config/set_credentials.rbs +15 -0
- data/sig/pvectl/commands/config/use_context.rbs +11 -0
- data/sig/pvectl/commands/config/view.rbs +11 -0
- data/sig/pvectl/commands/console.rbs +9 -0
- data/sig/pvectl/commands/console_ct.rbs +27 -0
- data/sig/pvectl/commands/console_vm.rbs +27 -0
- data/sig/pvectl/commands/container_lifecycle_command.rbs +25 -0
- data/sig/pvectl/commands/create_backup.rbs +29 -0
- data/sig/pvectl/commands/create_container.rbs +30 -0
- data/sig/pvectl/commands/create_resource_command.rbs +53 -0
- data/sig/pvectl/commands/create_snapshot.rbs +35 -0
- data/sig/pvectl/commands/create_vm.rbs +30 -0
- data/sig/pvectl/commands/delete_backup.rbs +25 -0
- data/sig/pvectl/commands/delete_command.rbs +45 -0
- data/sig/pvectl/commands/delete_container.rbs +11 -0
- data/sig/pvectl/commands/delete_snapshot.rbs +35 -0
- data/sig/pvectl/commands/delete_vm.rbs +13 -0
- data/sig/pvectl/commands/describe/command.rbs +27 -0
- data/sig/pvectl/commands/edit_container.rbs +17 -0
- data/sig/pvectl/commands/edit_dns.rbs +25 -0
- data/sig/pvectl/commands/edit_hosts.rbs +23 -0
- data/sig/pvectl/commands/edit_node.rbs +17 -0
- data/sig/pvectl/commands/edit_resource_command.rbs +35 -0
- data/sig/pvectl/commands/edit_vm.rbs +19 -0
- data/sig/pvectl/commands/edit_volume.rbs +24 -0
- data/sig/pvectl/commands/feature_command.rbs +43 -0
- data/sig/pvectl/commands/feature_container.rbs +10 -0
- data/sig/pvectl/commands/feature_vm.rbs +12 -0
- data/sig/pvectl/commands/get/command.rbs +42 -0
- data/sig/pvectl/commands/get/handlers/backups.rbs +23 -0
- data/sig/pvectl/commands/get/handlers/capabilities.rbs +29 -0
- data/sig/pvectl/commands/get/handlers/containers.rbs +35 -0
- data/sig/pvectl/commands/get/handlers/disks.rbs +27 -0
- data/sig/pvectl/commands/get/handlers/dns.rbs +25 -0
- data/sig/pvectl/commands/get/handlers/hosts.rbs +25 -0
- data/sig/pvectl/commands/get/handlers/nodes.rbs +33 -0
- data/sig/pvectl/commands/get/handlers/services.rbs +23 -0
- data/sig/pvectl/commands/get/handlers/snapshots.rbs +27 -0
- data/sig/pvectl/commands/get/handlers/storage.rbs +25 -0
- data/sig/pvectl/commands/get/handlers/subscription.rbs +25 -0
- data/sig/pvectl/commands/get/handlers/tasks.rbs +28 -0
- data/sig/pvectl/commands/get/handlers/templates.rbs +35 -0
- data/sig/pvectl/commands/get/handlers/time.rbs +29 -0
- data/sig/pvectl/commands/get/handlers/vms.rbs +35 -0
- data/sig/pvectl/commands/get/handlers/volume.rbs +27 -0
- data/sig/pvectl/commands/get/resource_handler.rbs +13 -0
- data/sig/pvectl/commands/get/resource_registry.rbs +8 -0
- data/sig/pvectl/commands/get/watch_loop.rbs +33 -0
- data/sig/pvectl/commands/irreversible_command.rbs +32 -0
- data/sig/pvectl/commands/logs/command.rbs +35 -0
- data/sig/pvectl/commands/logs/handlers/journal.rbs +21 -0
- data/sig/pvectl/commands/logs/handlers/syslog.rbs +21 -0
- data/sig/pvectl/commands/logs/handlers/task_detail.rbs +21 -0
- data/sig/pvectl/commands/logs/handlers/task_logs.rbs +35 -0
- data/sig/pvectl/commands/logs/resource_handler.rbs +11 -0
- data/sig/pvectl/commands/logs/resource_registry.rbs +8 -0
- data/sig/pvectl/commands/migrate_command.rbs +45 -0
- data/sig/pvectl/commands/migrate_container.rbs +11 -0
- data/sig/pvectl/commands/migrate_vm.rbs +13 -0
- data/sig/pvectl/commands/move_disk_command.rbs +43 -0
- data/sig/pvectl/commands/move_disk_container.rbs +11 -0
- data/sig/pvectl/commands/move_disk_vm.rbs +13 -0
- data/sig/pvectl/commands/ping.rbs +39 -0
- data/sig/pvectl/commands/pull.rbs +33 -0
- data/sig/pvectl/commands/push.rbs +32 -0
- data/sig/pvectl/commands/reset.rbs +11 -0
- data/sig/pvectl/commands/resource_lifecycle_command.rbs +55 -0
- data/sig/pvectl/commands/resource_registry.rbs +19 -0
- data/sig/pvectl/commands/restart.rbs +11 -0
- data/sig/pvectl/commands/restart_container.rbs +9 -0
- data/sig/pvectl/commands/restore_backup.rbs +27 -0
- data/sig/pvectl/commands/resume.rbs +11 -0
- data/sig/pvectl/commands/rollback_snapshot.rbs +31 -0
- data/sig/pvectl/commands/sendkey_vm.rbs +25 -0
- data/sig/pvectl/commands/service.rbs +38 -0
- data/sig/pvectl/commands/set_container.rbs +13 -0
- data/sig/pvectl/commands/set_node.rbs +13 -0
- data/sig/pvectl/commands/set_resource_command.rbs +25 -0
- data/sig/pvectl/commands/set_vm.rbs +15 -0
- data/sig/pvectl/commands/set_volume.rbs +24 -0
- data/sig/pvectl/commands/shared_config_parsers.rbs +19 -0
- data/sig/pvectl/commands/shared_flags.rbs +10 -0
- data/sig/pvectl/commands/shutdown.rbs +11 -0
- data/sig/pvectl/commands/shutdown_container.rbs +9 -0
- data/sig/pvectl/commands/start.rbs +11 -0
- data/sig/pvectl/commands/start_container.rbs +9 -0
- data/sig/pvectl/commands/stop.rbs +11 -0
- data/sig/pvectl/commands/stop_container.rbs +9 -0
- data/sig/pvectl/commands/suspend.rbs +11 -0
- data/sig/pvectl/commands/template_command.rbs +21 -0
- data/sig/pvectl/commands/template_container.rbs +10 -0
- data/sig/pvectl/commands/template_vm.rbs +12 -0
- data/sig/pvectl/commands/top/command.rbs +31 -0
- data/sig/pvectl/commands/top/handlers/containers.rbs +21 -0
- data/sig/pvectl/commands/top/handlers/nodes.rbs +21 -0
- data/sig/pvectl/commands/top/handlers/vms.rbs +21 -0
- data/sig/pvectl/commands/top/resource_handler.rbs +11 -0
- data/sig/pvectl/commands/top/resource_registry.rbs +8 -0
- data/sig/pvectl/commands/unlink_disk_vm.rbs +27 -0
- data/sig/pvectl/commands/vm_lifecycle_command.rbs +25 -0
- data/sig/pvectl/commands/wakeonlan_node.rbs +21 -0
- data/sig/pvectl/config/errors.rbs +24 -0
- data/sig/pvectl/config/models/cluster.rbs +39 -0
- data/sig/pvectl/config/models/context.rbs +23 -0
- data/sig/pvectl/config/models/resolved_config.rbs +51 -0
- data/sig/pvectl/config/models/user.rbs +31 -0
- data/sig/pvectl/config/provider.rbs +40 -0
- data/sig/pvectl/config/service.rbs +65 -0
- data/sig/pvectl/config/store.rbs +14 -0
- data/sig/pvectl/config/wizard.rbs +48 -0
- data/sig/pvectl/config_serializer.rbs +121 -0
- data/sig/pvectl/connection/retry_handler.rbs +31 -0
- data/sig/pvectl/connection.rbs +35 -0
- data/sig/pvectl/console/terminal_session.rbs +63 -0
- data/sig/pvectl/editor_session.rbs +33 -0
- data/sig/pvectl/exit_codes.rbs +19 -0
- data/sig/pvectl/formatters/base.rbs +13 -0
- data/sig/pvectl/formatters/color_support.rbs +13 -0
- data/sig/pvectl/formatters/json.rbs +7 -0
- data/sig/pvectl/formatters/output_helper.rbs +9 -0
- data/sig/pvectl/formatters/registry.rbs +13 -0
- data/sig/pvectl/formatters/table.rbs +25 -0
- data/sig/pvectl/formatters/wide.rbs +15 -0
- data/sig/pvectl/formatters/yaml.rbs +7 -0
- data/sig/pvectl/manifest_serializer.rbs +18 -0
- data/sig/pvectl/models/apt_package.rbs +26 -0
- data/sig/pvectl/models/backup.rbs +31 -0
- data/sig/pvectl/models/base.rbs +11 -0
- data/sig/pvectl/models/capability.rbs +16 -0
- data/sig/pvectl/models/container.rbs +44 -0
- data/sig/pvectl/models/container_operation_result.rbs +9 -0
- data/sig/pvectl/models/dns_config.rbs +15 -0
- data/sig/pvectl/models/hosts_file.rbs +13 -0
- data/sig/pvectl/models/journal_entry.rbs +10 -0
- data/sig/pvectl/models/network_interface.rbs +20 -0
- data/sig/pvectl/models/node.rbs +47 -0
- data/sig/pvectl/models/node_operation_result.rbs +12 -0
- data/sig/pvectl/models/operation_result.rbs +21 -0
- data/sig/pvectl/models/physical_disk.rbs +35 -0
- data/sig/pvectl/models/service.rbs +18 -0
- data/sig/pvectl/models/snapshot.rbs +21 -0
- data/sig/pvectl/models/snapshot_description.rbs +18 -0
- data/sig/pvectl/models/storage.rbs +39 -0
- data/sig/pvectl/models/subscription.rbs +24 -0
- data/sig/pvectl/models/syslog_entry.rbs +10 -0
- data/sig/pvectl/models/task.rbs +22 -0
- data/sig/pvectl/models/task_entry.rbs +24 -0
- data/sig/pvectl/models/task_log_line.rbs +10 -0
- data/sig/pvectl/models/time_config.rbs +12 -0
- data/sig/pvectl/models/vm.rbs +32 -0
- data/sig/pvectl/models/vm_operation_result.rbs +9 -0
- data/sig/pvectl/models/volume.rbs +29 -0
- data/sig/pvectl/models/volume_operation_result.rbs +9 -0
- data/sig/pvectl/parsers/cloud_init_config.rbs +15 -0
- data/sig/pvectl/parsers/disk_config.rbs +19 -0
- data/sig/pvectl/parsers/lxc_mount_config.rbs +19 -0
- data/sig/pvectl/parsers/lxc_net_config.rbs +19 -0
- data/sig/pvectl/parsers/net_config.rbs +19 -0
- data/sig/pvectl/parsers/smart_text.rbs +7 -0
- data/sig/pvectl/plugin_loader.rbs +25 -0
- data/sig/pvectl/presenters/apt_package.rbs +19 -0
- data/sig/pvectl/presenters/backup.rbs +25 -0
- data/sig/pvectl/presenters/base.rbs +41 -0
- data/sig/pvectl/presenters/capability.rbs +19 -0
- data/sig/pvectl/presenters/config/context.rbs +17 -0
- data/sig/pvectl/presenters/container.rbs +78 -0
- data/sig/pvectl/presenters/container_operation_result.rbs +19 -0
- data/sig/pvectl/presenters/disk.rbs +31 -0
- data/sig/pvectl/presenters/dns_config.rbs +13 -0
- data/sig/pvectl/presenters/hosts_file.rbs +13 -0
- data/sig/pvectl/presenters/journal_entry.rbs +11 -0
- data/sig/pvectl/presenters/node.rbs +118 -0
- data/sig/pvectl/presenters/node_operation_result.rbs +11 -0
- data/sig/pvectl/presenters/operation_result.rbs +17 -0
- data/sig/pvectl/presenters/service.rbs +15 -0
- data/sig/pvectl/presenters/snapshot.rbs +35 -0
- data/sig/pvectl/presenters/snapshot_operation_result.rbs +27 -0
- data/sig/pvectl/presenters/storage.rbs +59 -0
- data/sig/pvectl/presenters/subscription.rbs +36 -0
- data/sig/pvectl/presenters/syslog_entry.rbs +11 -0
- data/sig/pvectl/presenters/task_entry.rbs +21 -0
- data/sig/pvectl/presenters/task_log_line.rbs +11 -0
- data/sig/pvectl/presenters/template.rbs +15 -0
- data/sig/pvectl/presenters/time_config.rbs +19 -0
- data/sig/pvectl/presenters/top_container.rbs +17 -0
- data/sig/pvectl/presenters/top_node.rbs +17 -0
- data/sig/pvectl/presenters/top_presenter.rbs +13 -0
- data/sig/pvectl/presenters/top_vm.rbs +17 -0
- data/sig/pvectl/presenters/vm.rbs +91 -0
- data/sig/pvectl/presenters/vm_operation_result.rbs +19 -0
- data/sig/pvectl/presenters/volume.rbs +23 -0
- data/sig/pvectl/presenters/volume_operation_result.rbs +11 -0
- data/sig/pvectl/repositories/apt.rbs +17 -0
- data/sig/pvectl/repositories/backup.rbs +27 -0
- data/sig/pvectl/repositories/base.rbs +23 -0
- data/sig/pvectl/repositories/capabilities.rbs +20 -0
- data/sig/pvectl/repositories/container.rbs +63 -0
- data/sig/pvectl/repositories/disk.rbs +17 -0
- data/sig/pvectl/repositories/dns.rbs +13 -0
- data/sig/pvectl/repositories/hosts.rbs +13 -0
- data/sig/pvectl/repositories/journal.rbs +7 -0
- data/sig/pvectl/repositories/node.rbs +68 -0
- data/sig/pvectl/repositories/service.rbs +27 -0
- data/sig/pvectl/repositories/snapshot.rbs +19 -0
- data/sig/pvectl/repositories/storage.rbs +37 -0
- data/sig/pvectl/repositories/subscription.rbs +17 -0
- data/sig/pvectl/repositories/syslog.rbs +7 -0
- data/sig/pvectl/repositories/task.rbs +19 -0
- data/sig/pvectl/repositories/task_list.rbs +7 -0
- data/sig/pvectl/repositories/task_log.rbs +11 -0
- data/sig/pvectl/repositories/time_config.rbs +13 -0
- data/sig/pvectl/repositories/vm.rbs +85 -0
- data/sig/pvectl/repositories/volume.rbs +43 -0
- data/sig/pvectl/selectors/base.rbs +37 -0
- data/sig/pvectl/selectors/container.rbs +19 -0
- data/sig/pvectl/selectors/disk.rbs +13 -0
- data/sig/pvectl/selectors/vm.rbs +19 -0
- data/sig/pvectl/selectors/volume.rbs +13 -0
- data/sig/pvectl/services/backup.rbs +27 -0
- data/sig/pvectl/services/clone_container.rbs +35 -0
- data/sig/pvectl/services/clone_vm.rbs +35 -0
- data/sig/pvectl/services/cloudinit.rbs +19 -0
- data/sig/pvectl/services/console.rbs +23 -0
- data/sig/pvectl/services/container_lifecycle.rbs +26 -0
- data/sig/pvectl/services/create_container.rbs +64 -0
- data/sig/pvectl/services/create_vm.rbs +72 -0
- data/sig/pvectl/services/edit_container.rbs +17 -0
- data/sig/pvectl/services/edit_dns.rbs +23 -0
- data/sig/pvectl/services/edit_hosts.rbs +13 -0
- data/sig/pvectl/services/edit_node.rbs +21 -0
- data/sig/pvectl/services/edit_vm.rbs +17 -0
- data/sig/pvectl/services/edit_volume.rbs +18 -0
- data/sig/pvectl/services/get/resource_service.rbs +23 -0
- data/sig/pvectl/services/move_disk.rbs +21 -0
- data/sig/pvectl/services/pull_config.rbs +18 -0
- data/sig/pvectl/services/push_config.rbs +37 -0
- data/sig/pvectl/services/resize_volume.rbs +47 -0
- data/sig/pvectl/services/resource_delete.rbs +27 -0
- data/sig/pvectl/services/resource_migration.rbs +29 -0
- data/sig/pvectl/services/sendkey.rbs +19 -0
- data/sig/pvectl/services/service_lifecycle.rbs +17 -0
- data/sig/pvectl/services/set_container.rbs +14 -0
- data/sig/pvectl/services/set_node.rbs +23 -0
- data/sig/pvectl/services/set_vm.rbs +14 -0
- data/sig/pvectl/services/set_volume.rbs +12 -0
- data/sig/pvectl/services/snapshot.rbs +35 -0
- data/sig/pvectl/services/task_listing.rbs +13 -0
- data/sig/pvectl/services/unlink_disk.rbs +17 -0
- data/sig/pvectl/services/vm_lifecycle.rbs +26 -0
- data/sig/pvectl/services/wakeonlan.rbs +17 -0
- data/sig/pvectl/utils/resource_resolver.rbs +17 -0
- data/sig/pvectl/wizards/create_container.rbs +21 -0
- data/sig/pvectl/wizards/create_vm.rbs +21 -0
- data/sig/pvectl.rbs +9 -0
- metadata +675 -0
|
@@ -0,0 +1,155 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Pvectl
|
|
4
|
+
module Commands
|
|
5
|
+
# Shared flag definitions for command registration.
|
|
6
|
+
#
|
|
7
|
+
# Provides reusable flag groups that multiple commands share.
|
|
8
|
+
# Called during command registration to DRY up flag definitions.
|
|
9
|
+
#
|
|
10
|
+
# @example Usage in a command's register method
|
|
11
|
+
# def self.register(cli)
|
|
12
|
+
# cli.command :start do |c|
|
|
13
|
+
# SharedFlags.lifecycle(c)
|
|
14
|
+
# c.action { |g, o, a| ... }
|
|
15
|
+
# end
|
|
16
|
+
# end
|
|
17
|
+
#
|
|
18
|
+
module SharedFlags
|
|
19
|
+
# Defines the 8 flags shared by all lifecycle commands.
|
|
20
|
+
#
|
|
21
|
+
# @param command [GLI::Command] the command to add flags to
|
|
22
|
+
# @return [void]
|
|
23
|
+
def self.lifecycle(command)
|
|
24
|
+
command.desc "Timeout in seconds for sync operations"
|
|
25
|
+
command.flag [:timeout], type: Integer, arg_name: "SECONDS"
|
|
26
|
+
|
|
27
|
+
command.desc "Force async mode (return task ID immediately)"
|
|
28
|
+
command.switch [:async], negatable: false
|
|
29
|
+
|
|
30
|
+
command.desc "Force sync mode (wait for completion)"
|
|
31
|
+
command.switch [:wait], negatable: false
|
|
32
|
+
|
|
33
|
+
command.desc "Select all VMs"
|
|
34
|
+
command.switch [:all, :A], negatable: false
|
|
35
|
+
|
|
36
|
+
command.desc "Filter by node name"
|
|
37
|
+
command.flag [:node, :n], arg_name: "NODE"
|
|
38
|
+
|
|
39
|
+
command.desc "Skip confirmation prompt"
|
|
40
|
+
command.switch [:yes, :y], negatable: false
|
|
41
|
+
|
|
42
|
+
command.desc "Stop on first error (default: continue and report all)"
|
|
43
|
+
command.switch [:"fail-fast"], negatable: false
|
|
44
|
+
|
|
45
|
+
command.desc "Filter VMs by selector (e.g., status=running,tags=prod)"
|
|
46
|
+
command.flag [:l, :selector], arg_name: "SELECTOR", multiple: true
|
|
47
|
+
end
|
|
48
|
+
|
|
49
|
+
# Defines config flags shared between VM and container operations.
|
|
50
|
+
#
|
|
51
|
+
# @param command [GLI::Command] the command to add flags to
|
|
52
|
+
# @return [void]
|
|
53
|
+
def self.common_config(command)
|
|
54
|
+
command.desc "Number of CPU cores"
|
|
55
|
+
command.flag [:cores], type: Integer, arg_name: "N"
|
|
56
|
+
|
|
57
|
+
command.desc "Memory in MB"
|
|
58
|
+
command.flag [:memory], type: Integer, arg_name: "MB"
|
|
59
|
+
|
|
60
|
+
command.desc "Network config (repeatable): VM: bridge=X[,model=Y,tag=Z], CT: bridge=X[,name=Y,ip=Z]"
|
|
61
|
+
command.flag [:net], arg_name: "CONFIG", multiple: true
|
|
62
|
+
|
|
63
|
+
command.desc "Tags (comma-separated)"
|
|
64
|
+
command.flag [:tags], arg_name: "TAGS"
|
|
65
|
+
|
|
66
|
+
command.desc "Target node"
|
|
67
|
+
command.flag [:node], arg_name: "NODE"
|
|
68
|
+
|
|
69
|
+
command.desc "Start resource after operation"
|
|
70
|
+
command.switch [:start], negatable: true, default_value: nil
|
|
71
|
+
end
|
|
72
|
+
|
|
73
|
+
# Defines VM-specific config flags.
|
|
74
|
+
#
|
|
75
|
+
# @param command [GLI::Command] the command to add flags to
|
|
76
|
+
# @return [void]
|
|
77
|
+
def self.vm_config(command)
|
|
78
|
+
command.desc "Number of CPU sockets"
|
|
79
|
+
command.flag [:sockets], type: Integer, arg_name: "N"
|
|
80
|
+
|
|
81
|
+
command.desc "CPU type"
|
|
82
|
+
command.flag [:"cpu-type"], arg_name: "TYPE"
|
|
83
|
+
|
|
84
|
+
command.desc "Enable NUMA"
|
|
85
|
+
command.switch [:numa], negatable: true, default_value: nil
|
|
86
|
+
|
|
87
|
+
command.desc "Balloon memory in MB (0 to disable)"
|
|
88
|
+
command.flag [:balloon], type: Integer, arg_name: "MB"
|
|
89
|
+
|
|
90
|
+
command.desc "Disk config (repeatable)"
|
|
91
|
+
command.flag [:disk], arg_name: "CONFIG", multiple: true
|
|
92
|
+
|
|
93
|
+
command.desc "SCSI controller type"
|
|
94
|
+
command.flag [:scsihw], arg_name: "TYPE"
|
|
95
|
+
|
|
96
|
+
command.desc "CD-ROM ISO image"
|
|
97
|
+
command.flag [:cdrom], arg_name: "ISO"
|
|
98
|
+
|
|
99
|
+
command.desc "BIOS type"
|
|
100
|
+
command.flag [:bios], arg_name: "TYPE"
|
|
101
|
+
|
|
102
|
+
command.desc "Boot order"
|
|
103
|
+
command.flag [:"boot-order"], arg_name: "ORDER"
|
|
104
|
+
|
|
105
|
+
command.desc "Machine type"
|
|
106
|
+
command.flag [:machine], arg_name: "TYPE"
|
|
107
|
+
|
|
108
|
+
command.desc "EFI disk config"
|
|
109
|
+
command.flag [:efidisk], arg_name: "CONFIG"
|
|
110
|
+
|
|
111
|
+
command.desc "Cloud-init config"
|
|
112
|
+
command.flag [:"cloud-init"], arg_name: "CONFIG"
|
|
113
|
+
|
|
114
|
+
command.desc "Enable QEMU guest agent"
|
|
115
|
+
command.switch [:agent], negatable: true, default_value: nil
|
|
116
|
+
|
|
117
|
+
command.desc "OS type"
|
|
118
|
+
command.flag [:ostype], arg_name: "TYPE"
|
|
119
|
+
end
|
|
120
|
+
|
|
121
|
+
# Defines container-specific config flags.
|
|
122
|
+
#
|
|
123
|
+
# @param command [GLI::Command] the command to add flags to
|
|
124
|
+
# @return [void]
|
|
125
|
+
def self.container_config(command)
|
|
126
|
+
command.desc "Root filesystem config"
|
|
127
|
+
command.flag [:rootfs], arg_name: "CONFIG"
|
|
128
|
+
|
|
129
|
+
command.desc "Mount point config (repeatable)"
|
|
130
|
+
command.flag [:mp], arg_name: "CONFIG", multiple: true
|
|
131
|
+
|
|
132
|
+
command.desc "Swap size in MB"
|
|
133
|
+
command.flag [:swap], type: Integer, arg_name: "MB"
|
|
134
|
+
|
|
135
|
+
command.desc "Create privileged container"
|
|
136
|
+
command.switch [:privileged], negatable: true, default_value: nil
|
|
137
|
+
|
|
138
|
+
command.desc "Container features"
|
|
139
|
+
command.flag [:features], arg_name: "FEATURES"
|
|
140
|
+
|
|
141
|
+
command.desc "Root password"
|
|
142
|
+
command.flag [:password], arg_name: "PASSWORD"
|
|
143
|
+
|
|
144
|
+
command.desc "SSH public keys file"
|
|
145
|
+
command.flag [:"ssh-public-keys"], arg_name: "FILE"
|
|
146
|
+
|
|
147
|
+
command.desc "Start at boot"
|
|
148
|
+
command.switch [:onboot], negatable: true, default_value: nil
|
|
149
|
+
|
|
150
|
+
command.desc "Startup/shutdown order"
|
|
151
|
+
command.flag [:startup], arg_name: "SPEC"
|
|
152
|
+
end
|
|
153
|
+
end
|
|
154
|
+
end
|
|
155
|
+
end
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Pvectl
|
|
4
|
+
module Commands
|
|
5
|
+
# Handler for the `pvectl shutdown` command.
|
|
6
|
+
#
|
|
7
|
+
# Shuts down one or more virtual machines gracefully (ACPI).
|
|
8
|
+
#
|
|
9
|
+
# @example Shutdown a single VM
|
|
10
|
+
# pvectl shutdown vm 100
|
|
11
|
+
#
|
|
12
|
+
# @example Shutdown with sync mode
|
|
13
|
+
# pvectl shutdown vm 100 --wait
|
|
14
|
+
#
|
|
15
|
+
class Shutdown
|
|
16
|
+
include VmLifecycleCommand
|
|
17
|
+
|
|
18
|
+
# Registers the shutdown command with the CLI.
|
|
19
|
+
#
|
|
20
|
+
# @param cli [GLI::App] the CLI application object
|
|
21
|
+
# @return [void]
|
|
22
|
+
def self.register(cli)
|
|
23
|
+
cli.desc "Shutdown virtual machines or containers gracefully"
|
|
24
|
+
cli.long_desc <<~HELP
|
|
25
|
+
Gracefully shut down one or more virtual machines or containers.
|
|
26
|
+
Sends an ACPI shutdown signal to VMs or a clean shutdown to containers,
|
|
27
|
+
allowing the guest OS to shut down properly.
|
|
28
|
+
|
|
29
|
+
This is the recommended way to stop production workloads. For
|
|
30
|
+
immediate termination, use 'pvectl stop' instead.
|
|
31
|
+
|
|
32
|
+
EXAMPLES
|
|
33
|
+
Graceful shutdown of a VM:
|
|
34
|
+
$ pvectl shutdown vm 100
|
|
35
|
+
|
|
36
|
+
Shutdown with wait and timeout:
|
|
37
|
+
$ pvectl shutdown vm 100 --wait --timeout 120
|
|
38
|
+
|
|
39
|
+
Shutdown all running VMs on a node:
|
|
40
|
+
$ pvectl shutdown vm --all --node pve1 -l status=running --yes
|
|
41
|
+
|
|
42
|
+
NOTES
|
|
43
|
+
Requires QEMU Guest Agent or ACPI support in the VM for graceful
|
|
44
|
+
shutdown. If the guest doesn't respond, the shutdown may time out.
|
|
45
|
+
|
|
46
|
+
Use --timeout with --wait to set a maximum wait time.
|
|
47
|
+
|
|
48
|
+
SEE ALSO
|
|
49
|
+
pvectl help stop Hard stop (immediate, may cause data loss)
|
|
50
|
+
pvectl help restart Reboot resources
|
|
51
|
+
HELP
|
|
52
|
+
cli.arg_name "RESOURCE_TYPE [ID...]"
|
|
53
|
+
cli.command :shutdown do |c|
|
|
54
|
+
SharedFlags.lifecycle(c)
|
|
55
|
+
|
|
56
|
+
c.action do |global_options, options, args|
|
|
57
|
+
resource_type = args.shift
|
|
58
|
+
resource_ids = args
|
|
59
|
+
exit_code = case resource_type
|
|
60
|
+
when "container", "ct"
|
|
61
|
+
ShutdownContainer.execute(resource_type, resource_ids, options, global_options)
|
|
62
|
+
else
|
|
63
|
+
execute(resource_type, resource_ids, options, global_options)
|
|
64
|
+
end
|
|
65
|
+
exit exit_code if exit_code != 0
|
|
66
|
+
end
|
|
67
|
+
end
|
|
68
|
+
end
|
|
69
|
+
|
|
70
|
+
OPERATION = :shutdown
|
|
71
|
+
end
|
|
72
|
+
end
|
|
73
|
+
end
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Pvectl
|
|
4
|
+
module Commands
|
|
5
|
+
# Handler for the `pvectl shutdown container` command.
|
|
6
|
+
#
|
|
7
|
+
# Shuts down one or more LXC containers gracefully.
|
|
8
|
+
#
|
|
9
|
+
# @example Shutdown a single container
|
|
10
|
+
# pvectl shutdown container 200
|
|
11
|
+
#
|
|
12
|
+
class ShutdownContainer
|
|
13
|
+
include ContainerLifecycleCommand
|
|
14
|
+
|
|
15
|
+
OPERATION = :shutdown
|
|
16
|
+
end
|
|
17
|
+
end
|
|
18
|
+
end
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Pvectl
|
|
4
|
+
module Commands
|
|
5
|
+
# Handler for the `pvectl start` command.
|
|
6
|
+
#
|
|
7
|
+
# Starts one or more virtual machines.
|
|
8
|
+
#
|
|
9
|
+
# @example Start a single VM
|
|
10
|
+
# pvectl start vm 100
|
|
11
|
+
#
|
|
12
|
+
# @example Start with JSON output
|
|
13
|
+
# pvectl start vm 100 -o json
|
|
14
|
+
#
|
|
15
|
+
class Start
|
|
16
|
+
include VmLifecycleCommand
|
|
17
|
+
|
|
18
|
+
# Registers the start command with the CLI.
|
|
19
|
+
#
|
|
20
|
+
# @param cli [GLI::App] the CLI application object
|
|
21
|
+
# @return [void]
|
|
22
|
+
def self.register(cli)
|
|
23
|
+
cli.desc "Start virtual machines or containers"
|
|
24
|
+
cli.long_desc <<~HELP
|
|
25
|
+
Start one or more virtual machines or containers. Supports single
|
|
26
|
+
resource, multiple IDs, and batch operations with selectors.
|
|
27
|
+
|
|
28
|
+
By default, operations run asynchronously (fire-and-forget). Use
|
|
29
|
+
--wait to wait for completion, or --async to explicitly force async.
|
|
30
|
+
|
|
31
|
+
EXAMPLES
|
|
32
|
+
Start a single VM:
|
|
33
|
+
$ pvectl start vm 100
|
|
34
|
+
|
|
35
|
+
Start multiple VMs:
|
|
36
|
+
$ pvectl start vm 100 101 102
|
|
37
|
+
|
|
38
|
+
Start a container:
|
|
39
|
+
$ pvectl start ct 200
|
|
40
|
+
|
|
41
|
+
Start all stopped VMs on a node:
|
|
42
|
+
$ pvectl start vm --all -l status=stopped --node pve1
|
|
43
|
+
|
|
44
|
+
Wait for start to complete with timeout:
|
|
45
|
+
$ pvectl start vm 100 --wait --timeout 60
|
|
46
|
+
|
|
47
|
+
NOTES
|
|
48
|
+
Batch operations (--all) require --yes or interactive confirmation.
|
|
49
|
+
|
|
50
|
+
Use selectors (-l) to filter: status, name, tags, pool.
|
|
51
|
+
Multiple selectors use AND logic.
|
|
52
|
+
|
|
53
|
+
SEE ALSO
|
|
54
|
+
pvectl help stop Hard stop resources
|
|
55
|
+
pvectl help shutdown Graceful shutdown
|
|
56
|
+
pvectl help get vms List VMs and their status
|
|
57
|
+
HELP
|
|
58
|
+
cli.arg_name "RESOURCE_TYPE [ID...]"
|
|
59
|
+
cli.command :start do |c|
|
|
60
|
+
SharedFlags.lifecycle(c)
|
|
61
|
+
|
|
62
|
+
c.action do |global_options, options, args|
|
|
63
|
+
resource_type = args.shift
|
|
64
|
+
resource_ids = args
|
|
65
|
+
exit_code = case resource_type
|
|
66
|
+
when "container", "ct"
|
|
67
|
+
StartContainer.execute(resource_type, resource_ids, options, global_options)
|
|
68
|
+
else
|
|
69
|
+
execute(resource_type, resource_ids, options, global_options)
|
|
70
|
+
end
|
|
71
|
+
exit exit_code if exit_code != 0
|
|
72
|
+
end
|
|
73
|
+
end
|
|
74
|
+
end
|
|
75
|
+
|
|
76
|
+
OPERATION = :start
|
|
77
|
+
end
|
|
78
|
+
end
|
|
79
|
+
end
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Pvectl
|
|
4
|
+
module Commands
|
|
5
|
+
# Handler for the `pvectl start container` command.
|
|
6
|
+
#
|
|
7
|
+
# Starts one or more LXC containers.
|
|
8
|
+
#
|
|
9
|
+
# @example Start a single container
|
|
10
|
+
# pvectl start container 200
|
|
11
|
+
#
|
|
12
|
+
class StartContainer
|
|
13
|
+
include ContainerLifecycleCommand
|
|
14
|
+
|
|
15
|
+
OPERATION = :start
|
|
16
|
+
end
|
|
17
|
+
end
|
|
18
|
+
end
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Pvectl
|
|
4
|
+
module Commands
|
|
5
|
+
# Handler for the `pvectl stop` command.
|
|
6
|
+
#
|
|
7
|
+
# Stops one or more virtual machines (hard stop).
|
|
8
|
+
#
|
|
9
|
+
# @example Stop a single VM
|
|
10
|
+
# pvectl stop vm 100
|
|
11
|
+
#
|
|
12
|
+
# @example Stop with JSON output
|
|
13
|
+
# pvectl stop vm 100 -o json
|
|
14
|
+
#
|
|
15
|
+
class Stop
|
|
16
|
+
include VmLifecycleCommand
|
|
17
|
+
|
|
18
|
+
# Registers the stop command with the CLI.
|
|
19
|
+
#
|
|
20
|
+
# @param cli [GLI::App] the CLI application object
|
|
21
|
+
# @return [void]
|
|
22
|
+
def self.register(cli)
|
|
23
|
+
cli.desc "Stop virtual machines or containers (hard stop)"
|
|
24
|
+
cli.long_desc <<~HELP
|
|
25
|
+
Immediately stop one or more virtual machines or containers. This is
|
|
26
|
+
a hard stop (equivalent to pulling the power cord) — the guest OS is
|
|
27
|
+
NOT shut down gracefully.
|
|
28
|
+
|
|
29
|
+
For a clean shutdown, use 'pvectl shutdown' instead.
|
|
30
|
+
|
|
31
|
+
EXAMPLES
|
|
32
|
+
Hard stop a VM:
|
|
33
|
+
$ pvectl stop vm 100
|
|
34
|
+
|
|
35
|
+
Stop multiple containers:
|
|
36
|
+
$ pvectl stop ct 200 201
|
|
37
|
+
|
|
38
|
+
Stop all running VMs:
|
|
39
|
+
$ pvectl stop vm --all -l status=running --yes
|
|
40
|
+
|
|
41
|
+
Stop with sync wait:
|
|
42
|
+
$ pvectl stop vm 100 --wait --timeout 30
|
|
43
|
+
|
|
44
|
+
NOTES
|
|
45
|
+
Hard stop may cause data loss or filesystem corruption in the guest.
|
|
46
|
+
Prefer 'shutdown' for production workloads.
|
|
47
|
+
|
|
48
|
+
Batch operations (--all) require --yes or interactive confirmation.
|
|
49
|
+
|
|
50
|
+
SEE ALSO
|
|
51
|
+
pvectl help shutdown Graceful shutdown (recommended)
|
|
52
|
+
pvectl help start Start resources
|
|
53
|
+
HELP
|
|
54
|
+
cli.arg_name "RESOURCE_TYPE [ID...]"
|
|
55
|
+
cli.command :stop do |c|
|
|
56
|
+
SharedFlags.lifecycle(c)
|
|
57
|
+
|
|
58
|
+
c.action do |global_options, options, args|
|
|
59
|
+
resource_type = args.shift
|
|
60
|
+
resource_ids = args
|
|
61
|
+
exit_code = case resource_type
|
|
62
|
+
when "container", "ct"
|
|
63
|
+
StopContainer.execute(resource_type, resource_ids, options, global_options)
|
|
64
|
+
else
|
|
65
|
+
execute(resource_type, resource_ids, options, global_options)
|
|
66
|
+
end
|
|
67
|
+
exit exit_code if exit_code != 0
|
|
68
|
+
end
|
|
69
|
+
end
|
|
70
|
+
end
|
|
71
|
+
|
|
72
|
+
OPERATION = :stop
|
|
73
|
+
end
|
|
74
|
+
end
|
|
75
|
+
end
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Pvectl
|
|
4
|
+
module Commands
|
|
5
|
+
# Handler for the `pvectl stop container` command.
|
|
6
|
+
#
|
|
7
|
+
# Stops one or more LXC containers (hard stop).
|
|
8
|
+
#
|
|
9
|
+
# @example Stop a single container
|
|
10
|
+
# pvectl stop container 200
|
|
11
|
+
#
|
|
12
|
+
class StopContainer
|
|
13
|
+
include ContainerLifecycleCommand
|
|
14
|
+
|
|
15
|
+
OPERATION = :stop
|
|
16
|
+
end
|
|
17
|
+
end
|
|
18
|
+
end
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Pvectl
|
|
4
|
+
module Commands
|
|
5
|
+
# Handler for the `pvectl suspend` command.
|
|
6
|
+
#
|
|
7
|
+
# Suspends one or more virtual machines (hibernate).
|
|
8
|
+
#
|
|
9
|
+
# @example Suspend a single VM
|
|
10
|
+
# pvectl suspend vm 100
|
|
11
|
+
#
|
|
12
|
+
# @example Suspend with sync mode
|
|
13
|
+
# pvectl suspend vm 100 --wait
|
|
14
|
+
#
|
|
15
|
+
class Suspend
|
|
16
|
+
include VmLifecycleCommand
|
|
17
|
+
|
|
18
|
+
# Registers the suspend command with the CLI.
|
|
19
|
+
#
|
|
20
|
+
# @param cli [GLI::App] the CLI application object
|
|
21
|
+
# @return [void]
|
|
22
|
+
def self.register(cli)
|
|
23
|
+
cli.desc "Suspend virtual machines (hibernate)"
|
|
24
|
+
cli.long_desc <<~HELP
|
|
25
|
+
Suspend (hibernate) one or more virtual machines. Saves the VM's
|
|
26
|
+
memory state to disk and stops it. The VM can be resumed later
|
|
27
|
+
with 'pvectl resume'.
|
|
28
|
+
|
|
29
|
+
Only available for VMs. Containers do not support suspend.
|
|
30
|
+
|
|
31
|
+
EXAMPLES
|
|
32
|
+
Suspend a VM:
|
|
33
|
+
$ pvectl suspend vm 100
|
|
34
|
+
|
|
35
|
+
Suspend all running VMs on a node:
|
|
36
|
+
$ pvectl suspend vm --all --node pve1 -l status=running --yes
|
|
37
|
+
|
|
38
|
+
NOTES
|
|
39
|
+
Suspend saves the full memory state to disk, which may take time
|
|
40
|
+
for VMs with large memory allocations.
|
|
41
|
+
|
|
42
|
+
Not available for containers.
|
|
43
|
+
|
|
44
|
+
SEE ALSO
|
|
45
|
+
pvectl help resume Resume suspended VMs
|
|
46
|
+
pvectl help shutdown Graceful shutdown (no state saved)
|
|
47
|
+
HELP
|
|
48
|
+
cli.arg_name "RESOURCE_TYPE [ID...]"
|
|
49
|
+
cli.command :suspend do |c|
|
|
50
|
+
SharedFlags.lifecycle(c)
|
|
51
|
+
|
|
52
|
+
c.action do |global_options, options, args|
|
|
53
|
+
resource_type = args.shift
|
|
54
|
+
resource_ids = args
|
|
55
|
+
exit_code = execute(resource_type, resource_ids, options, global_options)
|
|
56
|
+
exit exit_code if exit_code != 0
|
|
57
|
+
end
|
|
58
|
+
end
|
|
59
|
+
end
|
|
60
|
+
|
|
61
|
+
OPERATION = :suspend
|
|
62
|
+
end
|
|
63
|
+
end
|
|
64
|
+
end
|