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.
Files changed (558) hide show
  1. checksums.yaml +7 -0
  2. data/.claude/rules/branch-before-changes.md +52 -0
  3. data/.claude/rules/documentation-updates.md +104 -0
  4. data/.claude/rules/git-workflow.md +84 -0
  5. data/.claude/rules/proxmox-api-docs.md +58 -0
  6. data/.claude/rules/rbs-signatures.md +80 -0
  7. data/.claude/rules/refactoring-as-design-option.md +35 -0
  8. data/.claude/scheduled_tasks.lock +1 -0
  9. data/.claude/settings.json +51 -0
  10. data/.mcp.json +8 -0
  11. data/.ruby-gemset +1 -0
  12. data/.ruby-version +1 -0
  13. data/CHANGELOG.md +138 -0
  14. data/CLAUDE.md +211 -0
  15. data/CODE_OF_CONDUCT.md +132 -0
  16. data/LICENSE.txt +21 -0
  17. data/README.md +143 -0
  18. data/Rakefile +8 -0
  19. data/docs/proxmox-api-update.sh +96 -0
  20. data/exe/pvectl +5 -0
  21. data/lib/pvectl/argv_preprocessor.rb +334 -0
  22. data/lib/pvectl/cli.rb +102 -0
  23. data/lib/pvectl/commands/apt.rb +389 -0
  24. data/lib/pvectl/commands/clone_container.rb +230 -0
  25. data/lib/pvectl/commands/clone_vm.rb +331 -0
  26. data/lib/pvectl/commands/cloudinit/command.rb +122 -0
  27. data/lib/pvectl/commands/cloudinit/dump.rb +94 -0
  28. data/lib/pvectl/commands/cloudinit/pending.rb +137 -0
  29. data/lib/pvectl/commands/cloudinit/regenerate.rb +79 -0
  30. data/lib/pvectl/commands/config/command.rb +65 -0
  31. data/lib/pvectl/commands/config/get_contexts.rb +68 -0
  32. data/lib/pvectl/commands/config/set_cluster.rb +103 -0
  33. data/lib/pvectl/commands/config/set_context.rb +136 -0
  34. data/lib/pvectl/commands/config/set_credentials.rb +181 -0
  35. data/lib/pvectl/commands/config/use_context.rb +69 -0
  36. data/lib/pvectl/commands/config/view.rb +67 -0
  37. data/lib/pvectl/commands/console.rb +93 -0
  38. data/lib/pvectl/commands/console_ct.rb +187 -0
  39. data/lib/pvectl/commands/console_vm.rb +187 -0
  40. data/lib/pvectl/commands/container_lifecycle_command.rb +77 -0
  41. data/lib/pvectl/commands/create_backup.rb +173 -0
  42. data/lib/pvectl/commands/create_container.rb +141 -0
  43. data/lib/pvectl/commands/create_resource_command.rb +244 -0
  44. data/lib/pvectl/commands/create_snapshot.rb +242 -0
  45. data/lib/pvectl/commands/create_vm.rb +267 -0
  46. data/lib/pvectl/commands/delete_backup.rb +139 -0
  47. data/lib/pvectl/commands/delete_command.rb +119 -0
  48. data/lib/pvectl/commands/delete_container.rb +30 -0
  49. data/lib/pvectl/commands/delete_snapshot.rb +248 -0
  50. data/lib/pvectl/commands/delete_vm.rb +127 -0
  51. data/lib/pvectl/commands/describe/command.rb +251 -0
  52. data/lib/pvectl/commands/edit_container.rb +56 -0
  53. data/lib/pvectl/commands/edit_dns.rb +149 -0
  54. data/lib/pvectl/commands/edit_hosts.rb +135 -0
  55. data/lib/pvectl/commands/edit_node.rb +54 -0
  56. data/lib/pvectl/commands/edit_resource_command.rb +180 -0
  57. data/lib/pvectl/commands/edit_vm.rb +154 -0
  58. data/lib/pvectl/commands/edit_volume.rb +189 -0
  59. data/lib/pvectl/commands/feature_command.rb +230 -0
  60. data/lib/pvectl/commands/feature_container.rb +21 -0
  61. data/lib/pvectl/commands/feature_vm.rb +94 -0
  62. data/lib/pvectl/commands/get/command.rb +360 -0
  63. data/lib/pvectl/commands/get/handlers/backups.rb +76 -0
  64. data/lib/pvectl/commands/get/handlers/capabilities.rb +107 -0
  65. data/lib/pvectl/commands/get/handlers/containers.rb +148 -0
  66. data/lib/pvectl/commands/get/handlers/disks.rb +107 -0
  67. data/lib/pvectl/commands/get/handlers/dns.rb +94 -0
  68. data/lib/pvectl/commands/get/handlers/hosts.rb +94 -0
  69. data/lib/pvectl/commands/get/handlers/nodes.rb +162 -0
  70. data/lib/pvectl/commands/get/handlers/services.rb +81 -0
  71. data/lib/pvectl/commands/get/handlers/snapshots.rb +97 -0
  72. data/lib/pvectl/commands/get/handlers/storage.rb +118 -0
  73. data/lib/pvectl/commands/get/handlers/subscription.rb +69 -0
  74. data/lib/pvectl/commands/get/handlers/tasks.rb +89 -0
  75. data/lib/pvectl/commands/get/handlers/templates.rb +175 -0
  76. data/lib/pvectl/commands/get/handlers/time.rb +118 -0
  77. data/lib/pvectl/commands/get/handlers/vms.rb +145 -0
  78. data/lib/pvectl/commands/get/handlers/volume.rb +134 -0
  79. data/lib/pvectl/commands/get/resource_handler.rb +63 -0
  80. data/lib/pvectl/commands/get/resource_registry.rb +18 -0
  81. data/lib/pvectl/commands/get/watch_loop.rb +129 -0
  82. data/lib/pvectl/commands/irreversible_command.rb +265 -0
  83. data/lib/pvectl/commands/logs/command.rb +275 -0
  84. data/lib/pvectl/commands/logs/handlers/journal.rb +46 -0
  85. data/lib/pvectl/commands/logs/handlers/syslog.rb +53 -0
  86. data/lib/pvectl/commands/logs/handlers/task_detail.rb +52 -0
  87. data/lib/pvectl/commands/logs/handlers/task_logs.rb +115 -0
  88. data/lib/pvectl/commands/logs/resource_handler.rb +46 -0
  89. data/lib/pvectl/commands/logs/resource_registry.rb +22 -0
  90. data/lib/pvectl/commands/migrate_command.rb +282 -0
  91. data/lib/pvectl/commands/migrate_container.rb +23 -0
  92. data/lib/pvectl/commands/migrate_vm.rb +122 -0
  93. data/lib/pvectl/commands/move_disk_command.rb +239 -0
  94. data/lib/pvectl/commands/move_disk_container.rb +21 -0
  95. data/lib/pvectl/commands/move_disk_vm.rb +127 -0
  96. data/lib/pvectl/commands/ping.rb +249 -0
  97. data/lib/pvectl/commands/pull.rb +342 -0
  98. data/lib/pvectl/commands/push.rb +352 -0
  99. data/lib/pvectl/commands/reset.rb +64 -0
  100. data/lib/pvectl/commands/resource_lifecycle_command.rb +277 -0
  101. data/lib/pvectl/commands/resource_registry.rb +73 -0
  102. data/lib/pvectl/commands/restart.rb +70 -0
  103. data/lib/pvectl/commands/restart_container.rb +18 -0
  104. data/lib/pvectl/commands/restore_backup.rb +236 -0
  105. data/lib/pvectl/commands/resume.rb +57 -0
  106. data/lib/pvectl/commands/rollback_snapshot.rb +228 -0
  107. data/lib/pvectl/commands/sendkey_vm.rb +205 -0
  108. data/lib/pvectl/commands/service.rb +293 -0
  109. data/lib/pvectl/commands/set_container.rb +50 -0
  110. data/lib/pvectl/commands/set_node.rb +52 -0
  111. data/lib/pvectl/commands/set_resource_command.rb +185 -0
  112. data/lib/pvectl/commands/set_vm.rb +136 -0
  113. data/lib/pvectl/commands/set_volume.rb +212 -0
  114. data/lib/pvectl/commands/shared_config_parsers.rb +126 -0
  115. data/lib/pvectl/commands/shared_flags.rb +155 -0
  116. data/lib/pvectl/commands/shutdown.rb +73 -0
  117. data/lib/pvectl/commands/shutdown_container.rb +18 -0
  118. data/lib/pvectl/commands/start.rb +79 -0
  119. data/lib/pvectl/commands/start_container.rb +18 -0
  120. data/lib/pvectl/commands/stop.rb +75 -0
  121. data/lib/pvectl/commands/stop_container.rb +18 -0
  122. data/lib/pvectl/commands/suspend.rb +64 -0
  123. data/lib/pvectl/commands/template_command.rb +205 -0
  124. data/lib/pvectl/commands/template_container.rb +27 -0
  125. data/lib/pvectl/commands/template_vm.rb +106 -0
  126. data/lib/pvectl/commands/top/command.rb +206 -0
  127. data/lib/pvectl/commands/top/handlers/containers.rb +61 -0
  128. data/lib/pvectl/commands/top/handlers/nodes.rb +61 -0
  129. data/lib/pvectl/commands/top/handlers/vms.rb +61 -0
  130. data/lib/pvectl/commands/top/resource_handler.rb +46 -0
  131. data/lib/pvectl/commands/top/resource_registry.rb +22 -0
  132. data/lib/pvectl/commands/unlink_disk_vm.rb +232 -0
  133. data/lib/pvectl/commands/vm_lifecycle_command.rb +77 -0
  134. data/lib/pvectl/commands/wakeonlan_node.rb +153 -0
  135. data/lib/pvectl/config/errors.rb +62 -0
  136. data/lib/pvectl/config/models/cluster.rb +180 -0
  137. data/lib/pvectl/config/models/context.rb +100 -0
  138. data/lib/pvectl/config/models/resolved_config.rb +171 -0
  139. data/lib/pvectl/config/models/user.rb +133 -0
  140. data/lib/pvectl/config/provider.rb +297 -0
  141. data/lib/pvectl/config/service.rb +300 -0
  142. data/lib/pvectl/config/store.rb +161 -0
  143. data/lib/pvectl/config/wizard.rb +309 -0
  144. data/lib/pvectl/config_serializer.rb +1034 -0
  145. data/lib/pvectl/connection/retry_handler.rb +161 -0
  146. data/lib/pvectl/connection.rb +157 -0
  147. data/lib/pvectl/console/terminal_session.rb +449 -0
  148. data/lib/pvectl/editor_session.rb +157 -0
  149. data/lib/pvectl/exit_codes.rb +43 -0
  150. data/lib/pvectl/formatters/base.rb +55 -0
  151. data/lib/pvectl/formatters/color_support.rb +90 -0
  152. data/lib/pvectl/formatters/json.rb +45 -0
  153. data/lib/pvectl/formatters/output_helper.rb +77 -0
  154. data/lib/pvectl/formatters/registry.rb +72 -0
  155. data/lib/pvectl/formatters/table.rb +235 -0
  156. data/lib/pvectl/formatters/wide.rb +93 -0
  157. data/lib/pvectl/formatters/yaml.rb +49 -0
  158. data/lib/pvectl/manifest_serializer.rb +142 -0
  159. data/lib/pvectl/models/apt_package.rb +107 -0
  160. data/lib/pvectl/models/backup.rb +173 -0
  161. data/lib/pvectl/models/base.rb +49 -0
  162. data/lib/pvectl/models/capability.rb +62 -0
  163. data/lib/pvectl/models/container.rb +205 -0
  164. data/lib/pvectl/models/container_operation_result.rb +27 -0
  165. data/lib/pvectl/models/dns_config.rb +54 -0
  166. data/lib/pvectl/models/hosts_file.rb +47 -0
  167. data/lib/pvectl/models/journal_entry.rb +16 -0
  168. data/lib/pvectl/models/network_interface.rb +85 -0
  169. data/lib/pvectl/models/node.rb +195 -0
  170. data/lib/pvectl/models/node_operation_result.rb +45 -0
  171. data/lib/pvectl/models/operation_result.rb +110 -0
  172. data/lib/pvectl/models/physical_disk.rb +193 -0
  173. data/lib/pvectl/models/service.rb +80 -0
  174. data/lib/pvectl/models/snapshot.rb +101 -0
  175. data/lib/pvectl/models/snapshot_description.rb +39 -0
  176. data/lib/pvectl/models/storage.rb +180 -0
  177. data/lib/pvectl/models/subscription.rb +87 -0
  178. data/lib/pvectl/models/syslog_entry.rb +17 -0
  179. data/lib/pvectl/models/task.rb +95 -0
  180. data/lib/pvectl/models/task_entry.rb +52 -0
  181. data/lib/pvectl/models/task_log_line.rb +17 -0
  182. data/lib/pvectl/models/time_config.rb +47 -0
  183. data/lib/pvectl/models/vm.rb +137 -0
  184. data/lib/pvectl/models/vm_operation_result.rb +27 -0
  185. data/lib/pvectl/models/volume.rb +133 -0
  186. data/lib/pvectl/models/volume_operation_result.rb +26 -0
  187. data/lib/pvectl/parsers/cloud_init_config.rb +92 -0
  188. data/lib/pvectl/parsers/disk_config.rb +97 -0
  189. data/lib/pvectl/parsers/lxc_mount_config.rb +98 -0
  190. data/lib/pvectl/parsers/lxc_net_config.rb +97 -0
  191. data/lib/pvectl/parsers/net_config.rb +95 -0
  192. data/lib/pvectl/parsers/smart_text.rb +42 -0
  193. data/lib/pvectl/plugin_loader.rb +157 -0
  194. data/lib/pvectl/presenters/apt_package.rb +99 -0
  195. data/lib/pvectl/presenters/backup.rb +128 -0
  196. data/lib/pvectl/presenters/base.rb +283 -0
  197. data/lib/pvectl/presenters/capability.rb +104 -0
  198. data/lib/pvectl/presenters/config/context.rb +80 -0
  199. data/lib/pvectl/presenters/container.rb +574 -0
  200. data/lib/pvectl/presenters/container_operation_result.rb +109 -0
  201. data/lib/pvectl/presenters/disk.rb +184 -0
  202. data/lib/pvectl/presenters/dns_config.rb +68 -0
  203. data/lib/pvectl/presenters/hosts_file.rb +61 -0
  204. data/lib/pvectl/presenters/journal_entry.rb +20 -0
  205. data/lib/pvectl/presenters/node.rb +762 -0
  206. data/lib/pvectl/presenters/node_operation_result.rb +50 -0
  207. data/lib/pvectl/presenters/operation_result.rb +61 -0
  208. data/lib/pvectl/presenters/service.rb +76 -0
  209. data/lib/pvectl/presenters/snapshot.rb +239 -0
  210. data/lib/pvectl/presenters/snapshot_operation_result.rb +125 -0
  211. data/lib/pvectl/presenters/storage.rb +329 -0
  212. data/lib/pvectl/presenters/subscription.rb +189 -0
  213. data/lib/pvectl/presenters/syslog_entry.rb +20 -0
  214. data/lib/pvectl/presenters/task_entry.rb +69 -0
  215. data/lib/pvectl/presenters/task_log_line.rb +20 -0
  216. data/lib/pvectl/presenters/template.rb +76 -0
  217. data/lib/pvectl/presenters/time_config.rb +86 -0
  218. data/lib/pvectl/presenters/top_container.rb +112 -0
  219. data/lib/pvectl/presenters/top_node.rb +115 -0
  220. data/lib/pvectl/presenters/top_presenter.rb +59 -0
  221. data/lib/pvectl/presenters/top_vm.rb +105 -0
  222. data/lib/pvectl/presenters/vm.rb +853 -0
  223. data/lib/pvectl/presenters/vm_operation_result.rb +109 -0
  224. data/lib/pvectl/presenters/volume.rb +136 -0
  225. data/lib/pvectl/presenters/volume_operation_result.rb +58 -0
  226. data/lib/pvectl/repositories/apt.rb +93 -0
  227. data/lib/pvectl/repositories/backup.rb +186 -0
  228. data/lib/pvectl/repositories/base.rb +110 -0
  229. data/lib/pvectl/repositories/capabilities.rb +96 -0
  230. data/lib/pvectl/repositories/container.rb +503 -0
  231. data/lib/pvectl/repositories/disk.rb +87 -0
  232. data/lib/pvectl/repositories/dns.rb +54 -0
  233. data/lib/pvectl/repositories/hosts.rb +63 -0
  234. data/lib/pvectl/repositories/journal.rb +23 -0
  235. data/lib/pvectl/repositories/node.rb +537 -0
  236. data/lib/pvectl/repositories/service.rb +139 -0
  237. data/lib/pvectl/repositories/snapshot.rb +133 -0
  238. data/lib/pvectl/repositories/storage.rb +302 -0
  239. data/lib/pvectl/repositories/subscription.rb +77 -0
  240. data/lib/pvectl/repositories/syslog.rb +25 -0
  241. data/lib/pvectl/repositories/task.rb +82 -0
  242. data/lib/pvectl/repositories/task_list.rb +30 -0
  243. data/lib/pvectl/repositories/task_log.rb +31 -0
  244. data/lib/pvectl/repositories/time_config.rb +53 -0
  245. data/lib/pvectl/repositories/vm.rb +616 -0
  246. data/lib/pvectl/repositories/volume.rb +306 -0
  247. data/lib/pvectl/selectors/base.rb +201 -0
  248. data/lib/pvectl/selectors/container.rb +116 -0
  249. data/lib/pvectl/selectors/disk.rb +59 -0
  250. data/lib/pvectl/selectors/vm.rb +116 -0
  251. data/lib/pvectl/selectors/volume.rb +59 -0
  252. data/lib/pvectl/services/backup.rb +209 -0
  253. data/lib/pvectl/services/clone_container.rb +260 -0
  254. data/lib/pvectl/services/clone_vm.rb +265 -0
  255. data/lib/pvectl/services/cloudinit.rb +96 -0
  256. data/lib/pvectl/services/console.rb +152 -0
  257. data/lib/pvectl/services/container_lifecycle.rb +124 -0
  258. data/lib/pvectl/services/create_container.rb +179 -0
  259. data/lib/pvectl/services/create_vm.rb +191 -0
  260. data/lib/pvectl/services/edit_container.rb +125 -0
  261. data/lib/pvectl/services/edit_dns.rb +159 -0
  262. data/lib/pvectl/services/edit_hosts.rb +78 -0
  263. data/lib/pvectl/services/edit_node.rb +147 -0
  264. data/lib/pvectl/services/edit_vm.rb +125 -0
  265. data/lib/pvectl/services/edit_volume.rb +224 -0
  266. data/lib/pvectl/services/get/resource_service.rb +98 -0
  267. data/lib/pvectl/services/move_disk.rb +132 -0
  268. data/lib/pvectl/services/pull_config.rb +94 -0
  269. data/lib/pvectl/services/push_config.rb +524 -0
  270. data/lib/pvectl/services/resize_volume.rb +253 -0
  271. data/lib/pvectl/services/resource_delete.rb +169 -0
  272. data/lib/pvectl/services/resource_migration.rb +170 -0
  273. data/lib/pvectl/services/sendkey.rb +108 -0
  274. data/lib/pvectl/services/service_lifecycle.rb +89 -0
  275. data/lib/pvectl/services/set_container.rb +128 -0
  276. data/lib/pvectl/services/set_node.rb +236 -0
  277. data/lib/pvectl/services/set_vm.rb +128 -0
  278. data/lib/pvectl/services/set_volume.rb +126 -0
  279. data/lib/pvectl/services/snapshot.rb +261 -0
  280. data/lib/pvectl/services/task_listing.rb +75 -0
  281. data/lib/pvectl/services/unlink_disk.rb +86 -0
  282. data/lib/pvectl/services/vm_lifecycle.rb +124 -0
  283. data/lib/pvectl/services/wakeonlan.rb +79 -0
  284. data/lib/pvectl/utils/resource_resolver.rb +80 -0
  285. data/lib/pvectl/version.rb +13 -0
  286. data/lib/pvectl/wizards/create_container.rb +105 -0
  287. data/lib/pvectl/wizards/create_vm.rb +98 -0
  288. data/lib/pvectl.rb +439 -0
  289. data/sig/external/gli.rbs +16 -0
  290. data/sig/external/proxmox_api.rbs +10 -0
  291. data/sig/pvectl/argv_preprocessor.rbs +53 -0
  292. data/sig/pvectl/cli.rbs +26 -0
  293. data/sig/pvectl/commands/apt.rbs +47 -0
  294. data/sig/pvectl/commands/clone_container.rbs +31 -0
  295. data/sig/pvectl/commands/clone_vm.rbs +33 -0
  296. data/sig/pvectl/commands/cloudinit/command.rbs +13 -0
  297. data/sig/pvectl/commands/cloudinit/dump.rbs +13 -0
  298. data/sig/pvectl/commands/cloudinit/pending.rbs +17 -0
  299. data/sig/pvectl/commands/cloudinit/regenerate.rbs +11 -0
  300. data/sig/pvectl/commands/config/command.rbs +9 -0
  301. data/sig/pvectl/commands/config/get_contexts.rbs +11 -0
  302. data/sig/pvectl/commands/config/set_cluster.rbs +11 -0
  303. data/sig/pvectl/commands/config/set_context.rbs +15 -0
  304. data/sig/pvectl/commands/config/set_credentials.rbs +15 -0
  305. data/sig/pvectl/commands/config/use_context.rbs +11 -0
  306. data/sig/pvectl/commands/config/view.rbs +11 -0
  307. data/sig/pvectl/commands/console.rbs +9 -0
  308. data/sig/pvectl/commands/console_ct.rbs +27 -0
  309. data/sig/pvectl/commands/console_vm.rbs +27 -0
  310. data/sig/pvectl/commands/container_lifecycle_command.rbs +25 -0
  311. data/sig/pvectl/commands/create_backup.rbs +29 -0
  312. data/sig/pvectl/commands/create_container.rbs +30 -0
  313. data/sig/pvectl/commands/create_resource_command.rbs +53 -0
  314. data/sig/pvectl/commands/create_snapshot.rbs +35 -0
  315. data/sig/pvectl/commands/create_vm.rbs +30 -0
  316. data/sig/pvectl/commands/delete_backup.rbs +25 -0
  317. data/sig/pvectl/commands/delete_command.rbs +45 -0
  318. data/sig/pvectl/commands/delete_container.rbs +11 -0
  319. data/sig/pvectl/commands/delete_snapshot.rbs +35 -0
  320. data/sig/pvectl/commands/delete_vm.rbs +13 -0
  321. data/sig/pvectl/commands/describe/command.rbs +27 -0
  322. data/sig/pvectl/commands/edit_container.rbs +17 -0
  323. data/sig/pvectl/commands/edit_dns.rbs +25 -0
  324. data/sig/pvectl/commands/edit_hosts.rbs +23 -0
  325. data/sig/pvectl/commands/edit_node.rbs +17 -0
  326. data/sig/pvectl/commands/edit_resource_command.rbs +35 -0
  327. data/sig/pvectl/commands/edit_vm.rbs +19 -0
  328. data/sig/pvectl/commands/edit_volume.rbs +24 -0
  329. data/sig/pvectl/commands/feature_command.rbs +43 -0
  330. data/sig/pvectl/commands/feature_container.rbs +10 -0
  331. data/sig/pvectl/commands/feature_vm.rbs +12 -0
  332. data/sig/pvectl/commands/get/command.rbs +42 -0
  333. data/sig/pvectl/commands/get/handlers/backups.rbs +23 -0
  334. data/sig/pvectl/commands/get/handlers/capabilities.rbs +29 -0
  335. data/sig/pvectl/commands/get/handlers/containers.rbs +35 -0
  336. data/sig/pvectl/commands/get/handlers/disks.rbs +27 -0
  337. data/sig/pvectl/commands/get/handlers/dns.rbs +25 -0
  338. data/sig/pvectl/commands/get/handlers/hosts.rbs +25 -0
  339. data/sig/pvectl/commands/get/handlers/nodes.rbs +33 -0
  340. data/sig/pvectl/commands/get/handlers/services.rbs +23 -0
  341. data/sig/pvectl/commands/get/handlers/snapshots.rbs +27 -0
  342. data/sig/pvectl/commands/get/handlers/storage.rbs +25 -0
  343. data/sig/pvectl/commands/get/handlers/subscription.rbs +25 -0
  344. data/sig/pvectl/commands/get/handlers/tasks.rbs +28 -0
  345. data/sig/pvectl/commands/get/handlers/templates.rbs +35 -0
  346. data/sig/pvectl/commands/get/handlers/time.rbs +29 -0
  347. data/sig/pvectl/commands/get/handlers/vms.rbs +35 -0
  348. data/sig/pvectl/commands/get/handlers/volume.rbs +27 -0
  349. data/sig/pvectl/commands/get/resource_handler.rbs +13 -0
  350. data/sig/pvectl/commands/get/resource_registry.rbs +8 -0
  351. data/sig/pvectl/commands/get/watch_loop.rbs +33 -0
  352. data/sig/pvectl/commands/irreversible_command.rbs +32 -0
  353. data/sig/pvectl/commands/logs/command.rbs +35 -0
  354. data/sig/pvectl/commands/logs/handlers/journal.rbs +21 -0
  355. data/sig/pvectl/commands/logs/handlers/syslog.rbs +21 -0
  356. data/sig/pvectl/commands/logs/handlers/task_detail.rbs +21 -0
  357. data/sig/pvectl/commands/logs/handlers/task_logs.rbs +35 -0
  358. data/sig/pvectl/commands/logs/resource_handler.rbs +11 -0
  359. data/sig/pvectl/commands/logs/resource_registry.rbs +8 -0
  360. data/sig/pvectl/commands/migrate_command.rbs +45 -0
  361. data/sig/pvectl/commands/migrate_container.rbs +11 -0
  362. data/sig/pvectl/commands/migrate_vm.rbs +13 -0
  363. data/sig/pvectl/commands/move_disk_command.rbs +43 -0
  364. data/sig/pvectl/commands/move_disk_container.rbs +11 -0
  365. data/sig/pvectl/commands/move_disk_vm.rbs +13 -0
  366. data/sig/pvectl/commands/ping.rbs +39 -0
  367. data/sig/pvectl/commands/pull.rbs +33 -0
  368. data/sig/pvectl/commands/push.rbs +32 -0
  369. data/sig/pvectl/commands/reset.rbs +11 -0
  370. data/sig/pvectl/commands/resource_lifecycle_command.rbs +55 -0
  371. data/sig/pvectl/commands/resource_registry.rbs +19 -0
  372. data/sig/pvectl/commands/restart.rbs +11 -0
  373. data/sig/pvectl/commands/restart_container.rbs +9 -0
  374. data/sig/pvectl/commands/restore_backup.rbs +27 -0
  375. data/sig/pvectl/commands/resume.rbs +11 -0
  376. data/sig/pvectl/commands/rollback_snapshot.rbs +31 -0
  377. data/sig/pvectl/commands/sendkey_vm.rbs +25 -0
  378. data/sig/pvectl/commands/service.rbs +38 -0
  379. data/sig/pvectl/commands/set_container.rbs +13 -0
  380. data/sig/pvectl/commands/set_node.rbs +13 -0
  381. data/sig/pvectl/commands/set_resource_command.rbs +25 -0
  382. data/sig/pvectl/commands/set_vm.rbs +15 -0
  383. data/sig/pvectl/commands/set_volume.rbs +24 -0
  384. data/sig/pvectl/commands/shared_config_parsers.rbs +19 -0
  385. data/sig/pvectl/commands/shared_flags.rbs +10 -0
  386. data/sig/pvectl/commands/shutdown.rbs +11 -0
  387. data/sig/pvectl/commands/shutdown_container.rbs +9 -0
  388. data/sig/pvectl/commands/start.rbs +11 -0
  389. data/sig/pvectl/commands/start_container.rbs +9 -0
  390. data/sig/pvectl/commands/stop.rbs +11 -0
  391. data/sig/pvectl/commands/stop_container.rbs +9 -0
  392. data/sig/pvectl/commands/suspend.rbs +11 -0
  393. data/sig/pvectl/commands/template_command.rbs +21 -0
  394. data/sig/pvectl/commands/template_container.rbs +10 -0
  395. data/sig/pvectl/commands/template_vm.rbs +12 -0
  396. data/sig/pvectl/commands/top/command.rbs +31 -0
  397. data/sig/pvectl/commands/top/handlers/containers.rbs +21 -0
  398. data/sig/pvectl/commands/top/handlers/nodes.rbs +21 -0
  399. data/sig/pvectl/commands/top/handlers/vms.rbs +21 -0
  400. data/sig/pvectl/commands/top/resource_handler.rbs +11 -0
  401. data/sig/pvectl/commands/top/resource_registry.rbs +8 -0
  402. data/sig/pvectl/commands/unlink_disk_vm.rbs +27 -0
  403. data/sig/pvectl/commands/vm_lifecycle_command.rbs +25 -0
  404. data/sig/pvectl/commands/wakeonlan_node.rbs +21 -0
  405. data/sig/pvectl/config/errors.rbs +24 -0
  406. data/sig/pvectl/config/models/cluster.rbs +39 -0
  407. data/sig/pvectl/config/models/context.rbs +23 -0
  408. data/sig/pvectl/config/models/resolved_config.rbs +51 -0
  409. data/sig/pvectl/config/models/user.rbs +31 -0
  410. data/sig/pvectl/config/provider.rbs +40 -0
  411. data/sig/pvectl/config/service.rbs +65 -0
  412. data/sig/pvectl/config/store.rbs +14 -0
  413. data/sig/pvectl/config/wizard.rbs +48 -0
  414. data/sig/pvectl/config_serializer.rbs +121 -0
  415. data/sig/pvectl/connection/retry_handler.rbs +31 -0
  416. data/sig/pvectl/connection.rbs +35 -0
  417. data/sig/pvectl/console/terminal_session.rbs +63 -0
  418. data/sig/pvectl/editor_session.rbs +33 -0
  419. data/sig/pvectl/exit_codes.rbs +19 -0
  420. data/sig/pvectl/formatters/base.rbs +13 -0
  421. data/sig/pvectl/formatters/color_support.rbs +13 -0
  422. data/sig/pvectl/formatters/json.rbs +7 -0
  423. data/sig/pvectl/formatters/output_helper.rbs +9 -0
  424. data/sig/pvectl/formatters/registry.rbs +13 -0
  425. data/sig/pvectl/formatters/table.rbs +25 -0
  426. data/sig/pvectl/formatters/wide.rbs +15 -0
  427. data/sig/pvectl/formatters/yaml.rbs +7 -0
  428. data/sig/pvectl/manifest_serializer.rbs +18 -0
  429. data/sig/pvectl/models/apt_package.rbs +26 -0
  430. data/sig/pvectl/models/backup.rbs +31 -0
  431. data/sig/pvectl/models/base.rbs +11 -0
  432. data/sig/pvectl/models/capability.rbs +16 -0
  433. data/sig/pvectl/models/container.rbs +44 -0
  434. data/sig/pvectl/models/container_operation_result.rbs +9 -0
  435. data/sig/pvectl/models/dns_config.rbs +15 -0
  436. data/sig/pvectl/models/hosts_file.rbs +13 -0
  437. data/sig/pvectl/models/journal_entry.rbs +10 -0
  438. data/sig/pvectl/models/network_interface.rbs +20 -0
  439. data/sig/pvectl/models/node.rbs +47 -0
  440. data/sig/pvectl/models/node_operation_result.rbs +12 -0
  441. data/sig/pvectl/models/operation_result.rbs +21 -0
  442. data/sig/pvectl/models/physical_disk.rbs +35 -0
  443. data/sig/pvectl/models/service.rbs +18 -0
  444. data/sig/pvectl/models/snapshot.rbs +21 -0
  445. data/sig/pvectl/models/snapshot_description.rbs +18 -0
  446. data/sig/pvectl/models/storage.rbs +39 -0
  447. data/sig/pvectl/models/subscription.rbs +24 -0
  448. data/sig/pvectl/models/syslog_entry.rbs +10 -0
  449. data/sig/pvectl/models/task.rbs +22 -0
  450. data/sig/pvectl/models/task_entry.rbs +24 -0
  451. data/sig/pvectl/models/task_log_line.rbs +10 -0
  452. data/sig/pvectl/models/time_config.rbs +12 -0
  453. data/sig/pvectl/models/vm.rbs +32 -0
  454. data/sig/pvectl/models/vm_operation_result.rbs +9 -0
  455. data/sig/pvectl/models/volume.rbs +29 -0
  456. data/sig/pvectl/models/volume_operation_result.rbs +9 -0
  457. data/sig/pvectl/parsers/cloud_init_config.rbs +15 -0
  458. data/sig/pvectl/parsers/disk_config.rbs +19 -0
  459. data/sig/pvectl/parsers/lxc_mount_config.rbs +19 -0
  460. data/sig/pvectl/parsers/lxc_net_config.rbs +19 -0
  461. data/sig/pvectl/parsers/net_config.rbs +19 -0
  462. data/sig/pvectl/parsers/smart_text.rbs +7 -0
  463. data/sig/pvectl/plugin_loader.rbs +25 -0
  464. data/sig/pvectl/presenters/apt_package.rbs +19 -0
  465. data/sig/pvectl/presenters/backup.rbs +25 -0
  466. data/sig/pvectl/presenters/base.rbs +41 -0
  467. data/sig/pvectl/presenters/capability.rbs +19 -0
  468. data/sig/pvectl/presenters/config/context.rbs +17 -0
  469. data/sig/pvectl/presenters/container.rbs +78 -0
  470. data/sig/pvectl/presenters/container_operation_result.rbs +19 -0
  471. data/sig/pvectl/presenters/disk.rbs +31 -0
  472. data/sig/pvectl/presenters/dns_config.rbs +13 -0
  473. data/sig/pvectl/presenters/hosts_file.rbs +13 -0
  474. data/sig/pvectl/presenters/journal_entry.rbs +11 -0
  475. data/sig/pvectl/presenters/node.rbs +118 -0
  476. data/sig/pvectl/presenters/node_operation_result.rbs +11 -0
  477. data/sig/pvectl/presenters/operation_result.rbs +17 -0
  478. data/sig/pvectl/presenters/service.rbs +15 -0
  479. data/sig/pvectl/presenters/snapshot.rbs +35 -0
  480. data/sig/pvectl/presenters/snapshot_operation_result.rbs +27 -0
  481. data/sig/pvectl/presenters/storage.rbs +59 -0
  482. data/sig/pvectl/presenters/subscription.rbs +36 -0
  483. data/sig/pvectl/presenters/syslog_entry.rbs +11 -0
  484. data/sig/pvectl/presenters/task_entry.rbs +21 -0
  485. data/sig/pvectl/presenters/task_log_line.rbs +11 -0
  486. data/sig/pvectl/presenters/template.rbs +15 -0
  487. data/sig/pvectl/presenters/time_config.rbs +19 -0
  488. data/sig/pvectl/presenters/top_container.rbs +17 -0
  489. data/sig/pvectl/presenters/top_node.rbs +17 -0
  490. data/sig/pvectl/presenters/top_presenter.rbs +13 -0
  491. data/sig/pvectl/presenters/top_vm.rbs +17 -0
  492. data/sig/pvectl/presenters/vm.rbs +91 -0
  493. data/sig/pvectl/presenters/vm_operation_result.rbs +19 -0
  494. data/sig/pvectl/presenters/volume.rbs +23 -0
  495. data/sig/pvectl/presenters/volume_operation_result.rbs +11 -0
  496. data/sig/pvectl/repositories/apt.rbs +17 -0
  497. data/sig/pvectl/repositories/backup.rbs +27 -0
  498. data/sig/pvectl/repositories/base.rbs +23 -0
  499. data/sig/pvectl/repositories/capabilities.rbs +20 -0
  500. data/sig/pvectl/repositories/container.rbs +63 -0
  501. data/sig/pvectl/repositories/disk.rbs +17 -0
  502. data/sig/pvectl/repositories/dns.rbs +13 -0
  503. data/sig/pvectl/repositories/hosts.rbs +13 -0
  504. data/sig/pvectl/repositories/journal.rbs +7 -0
  505. data/sig/pvectl/repositories/node.rbs +68 -0
  506. data/sig/pvectl/repositories/service.rbs +27 -0
  507. data/sig/pvectl/repositories/snapshot.rbs +19 -0
  508. data/sig/pvectl/repositories/storage.rbs +37 -0
  509. data/sig/pvectl/repositories/subscription.rbs +17 -0
  510. data/sig/pvectl/repositories/syslog.rbs +7 -0
  511. data/sig/pvectl/repositories/task.rbs +19 -0
  512. data/sig/pvectl/repositories/task_list.rbs +7 -0
  513. data/sig/pvectl/repositories/task_log.rbs +11 -0
  514. data/sig/pvectl/repositories/time_config.rbs +13 -0
  515. data/sig/pvectl/repositories/vm.rbs +85 -0
  516. data/sig/pvectl/repositories/volume.rbs +43 -0
  517. data/sig/pvectl/selectors/base.rbs +37 -0
  518. data/sig/pvectl/selectors/container.rbs +19 -0
  519. data/sig/pvectl/selectors/disk.rbs +13 -0
  520. data/sig/pvectl/selectors/vm.rbs +19 -0
  521. data/sig/pvectl/selectors/volume.rbs +13 -0
  522. data/sig/pvectl/services/backup.rbs +27 -0
  523. data/sig/pvectl/services/clone_container.rbs +35 -0
  524. data/sig/pvectl/services/clone_vm.rbs +35 -0
  525. data/sig/pvectl/services/cloudinit.rbs +19 -0
  526. data/sig/pvectl/services/console.rbs +23 -0
  527. data/sig/pvectl/services/container_lifecycle.rbs +26 -0
  528. data/sig/pvectl/services/create_container.rbs +64 -0
  529. data/sig/pvectl/services/create_vm.rbs +72 -0
  530. data/sig/pvectl/services/edit_container.rbs +17 -0
  531. data/sig/pvectl/services/edit_dns.rbs +23 -0
  532. data/sig/pvectl/services/edit_hosts.rbs +13 -0
  533. data/sig/pvectl/services/edit_node.rbs +21 -0
  534. data/sig/pvectl/services/edit_vm.rbs +17 -0
  535. data/sig/pvectl/services/edit_volume.rbs +18 -0
  536. data/sig/pvectl/services/get/resource_service.rbs +23 -0
  537. data/sig/pvectl/services/move_disk.rbs +21 -0
  538. data/sig/pvectl/services/pull_config.rbs +18 -0
  539. data/sig/pvectl/services/push_config.rbs +37 -0
  540. data/sig/pvectl/services/resize_volume.rbs +47 -0
  541. data/sig/pvectl/services/resource_delete.rbs +27 -0
  542. data/sig/pvectl/services/resource_migration.rbs +29 -0
  543. data/sig/pvectl/services/sendkey.rbs +19 -0
  544. data/sig/pvectl/services/service_lifecycle.rbs +17 -0
  545. data/sig/pvectl/services/set_container.rbs +14 -0
  546. data/sig/pvectl/services/set_node.rbs +23 -0
  547. data/sig/pvectl/services/set_vm.rbs +14 -0
  548. data/sig/pvectl/services/set_volume.rbs +12 -0
  549. data/sig/pvectl/services/snapshot.rbs +35 -0
  550. data/sig/pvectl/services/task_listing.rbs +13 -0
  551. data/sig/pvectl/services/unlink_disk.rbs +17 -0
  552. data/sig/pvectl/services/vm_lifecycle.rbs +26 -0
  553. data/sig/pvectl/services/wakeonlan.rbs +17 -0
  554. data/sig/pvectl/utils/resource_resolver.rbs +17 -0
  555. data/sig/pvectl/wizards/create_container.rbs +21 -0
  556. data/sig/pvectl/wizards/create_vm.rbs +21 -0
  557. data/sig/pvectl.rbs +9 -0
  558. metadata +675 -0
@@ -0,0 +1,31 @@
1
+ module Pvectl
2
+ module Config
3
+ module Models
4
+ class User
5
+ SECRET_MASK: String
6
+
7
+ attr_reader name: String
8
+ attr_reader token_id: String?
9
+ attr_reader token_secret: String?
10
+ attr_reader username: String?
11
+ attr_reader password: String?
12
+
13
+ def initialize: (
14
+ name: String,
15
+ ?token_id: String?,
16
+ ?token_secret: String?,
17
+ ?username: String?,
18
+ ?password: String?
19
+ ) -> void
20
+
21
+ def token_auth?: () -> bool
22
+ def password_auth?: () -> bool
23
+ def valid?: () -> bool
24
+
25
+ def self.from_hash: (Hash[String, untyped]) -> User
26
+
27
+ def to_hash: (?mask_secrets: bool) -> Hash[String, untyped]
28
+ end
29
+ end
30
+ end
31
+ end
@@ -0,0 +1,40 @@
1
+ module Pvectl
2
+ module Config
3
+ class Provider
4
+ ENV_VARS: Hash[String, Symbol]
5
+ INTEGER_VARS: Array[Symbol]
6
+ BOOLEAN_VARS: Array[Symbol]
7
+
8
+ def file_exists?: (String path) -> bool
9
+ def insecure_permissions?: (String path) -> bool
10
+ def load_file: (String path) -> Hash[String, untyped]
11
+ def load_env: () -> Hash[Symbol, untyped]
12
+ def resolve_context_name: (cli_options: Hash[Symbol, untyped], ?file_config: Hash[String, untyped]) -> String?
13
+
14
+ def resolve: (
15
+ config_path: String,
16
+ cli_options: Hash[Symbol, untyped],
17
+ ?cluster_override: String?
18
+ ) -> Models::ResolvedConfig
19
+
20
+ private
21
+
22
+ def parse_env_value: (Symbol key, String value) -> untyped
23
+ def parse_boolean_env: (String value) -> bool
24
+ def parse_integer_env: (Symbol key, String value) -> Integer
25
+ def find_context: (Hash[String, untyped] config, String name) -> Models::Context
26
+ def find_cluster: (Hash[String, untyped] config, String name) -> Models::Cluster
27
+ def find_user: (Hash[String, untyped] config, String name) -> Models::User
28
+
29
+ def build_resolved_config: (
30
+ context: Models::Context,
31
+ cluster: Models::Cluster,
32
+ user: Models::User,
33
+ env_config: Hash[Symbol, untyped],
34
+ cli_options: Hash[Symbol, untyped]
35
+ ) -> Models::ResolvedConfig
36
+
37
+ def resolve_auth: (Models::User user, Hash[Symbol, untyped] env_config) -> [Symbol, String?, String?, String?, String?]
38
+ end
39
+ end
40
+ end
@@ -0,0 +1,65 @@
1
+ module Pvectl
2
+ module Config
3
+ class Service
4
+ DEFAULT_CONFIG_PATH: String
5
+
6
+ attr_reader config_path: String
7
+ attr_reader raw_config: Hash[String, untyped]
8
+ attr_reader current_context_name: String
9
+
10
+ def initialize: (?provider: Provider?, ?store: Store?, ?wizard: Wizard?) -> void
11
+
12
+ def load: (?Hash[Symbol, untyped] cli_options) -> Service
13
+ def current_config: () -> Models::ResolvedConfig
14
+
15
+ def contexts: () -> Array[Models::Context]
16
+ def context: (String name) -> Models::Context?
17
+
18
+ def use_context: (String context_name) -> void
19
+
20
+ def set_context: (
21
+ name: String,
22
+ cluster: String,
23
+ user: String,
24
+ ?default_node: String?
25
+ ) -> Models::Context
26
+
27
+ def clusters: () -> Array[Models::Cluster]
28
+ def cluster: (String name) -> Models::Cluster?
29
+
30
+ def set_cluster: (
31
+ name: String,
32
+ server: String,
33
+ ?verify_ssl: bool,
34
+ ?certificate_authority: String?
35
+ ) -> Models::Cluster
36
+
37
+ def users: () -> Array[Models::User]
38
+ def user: (String name) -> Models::User?
39
+
40
+ def set_credentials: (
41
+ name: String,
42
+ ?token_id: String?,
43
+ ?token_secret: String?,
44
+ ?username: String?,
45
+ ?password: String?
46
+ ) -> Models::User
47
+
48
+ def masked_config: () -> Hash[String, untyped]
49
+ def save: () -> void
50
+
51
+ private
52
+
53
+ @provider: Provider
54
+ @store: Store
55
+ @wizard: Wizard?
56
+ @loaded: bool
57
+ @resolved_config: Models::ResolvedConfig?
58
+
59
+ def resolve_config_path: (Hash[Symbol, untyped] cli_options) -> String
60
+ def warn_insecure_permissions: () -> void
61
+ def refresh_raw_config: () -> void
62
+ def deep_copy: (untyped obj) -> untyped
63
+ end
64
+ end
65
+ end
@@ -0,0 +1,14 @@
1
+ module Pvectl
2
+ module Config
3
+ class Store
4
+ SECURE_MODE: Integer
5
+ SECURE_DIR_MODE: Integer
6
+
7
+ def save: (String path, Hash[String, untyped] config) -> void
8
+ def update_current_context: (String path, String context_name) -> void
9
+ def upsert_context: (String path, Models::Context context) -> void
10
+ def upsert_cluster: (String path, Models::Cluster cluster) -> void
11
+ def upsert_user: (String path, Models::User user) -> void
12
+ end
13
+ end
14
+ end
@@ -0,0 +1,48 @@
1
+ module Pvectl
2
+ module Config
3
+ class Wizard
4
+ def self.available?: () -> bool
5
+
6
+ def initialize: (?prompt: untyped?) -> void
7
+
8
+ def run: () -> Hash[String, untyped]
9
+
10
+ private
11
+
12
+ attr_reader prompt: untyped
13
+
14
+ def create_default_prompt: () -> untyped
15
+ def prompt_server: () -> String
16
+ def prompt_ssl: () -> bool
17
+ def prompt_auth_type: () -> Symbol
18
+ def prompt_credentials: (Symbol auth_type) -> Hash[Symbol, String]
19
+ def prompt_context_name: () -> String
20
+
21
+ def build_config: (
22
+ server: String,
23
+ verify_ssl: bool,
24
+ auth_type: Symbol,
25
+ credentials: Hash[Symbol, String],
26
+ context_name: String
27
+ ) -> Hash[String, untyped]
28
+
29
+ def build_user_config: (String name, Symbol auth_type, Hash[Symbol, String] credentials) -> Hash[String, untyped]
30
+ def valid_server_url?: (String url) -> bool
31
+ def valid_token_id?: (String token_id) -> bool
32
+ end
33
+
34
+ class SimplePrompt
35
+ def ask: (String question, ?default: untyped, ?required: bool, ?convert: Symbol?, **untyped) -> untyped
36
+ def yes?: (String question, **untyped) -> bool
37
+ def select: (String question, Array[untyped] choices, **untyped) -> untyped
38
+ def mask: (String question, **untyped) -> String?
39
+ def ok: (untyped message) -> void
40
+ def warn: (untyped message) -> void
41
+ def error: (untyped message) -> void
42
+
43
+ private
44
+
45
+ def convert_value: (untyped value, Symbol? type) -> untyped
46
+ end
47
+ end
48
+ end
@@ -0,0 +1,121 @@
1
+ module Pvectl
2
+ module ConfigSerializer
3
+ VM_SECTIONS: Hash[Symbol, Hash[Symbol, Array[Symbol] | Array[Regexp] | Hash[Symbol, Hash[Symbol, Array[Symbol] | Array[Regexp]]]]]
4
+
5
+ CONTAINER_SECTIONS: Hash[Symbol, Hash[Symbol, Array[Symbol] | Array[Regexp] | Hash[Symbol, Hash[Symbol, Array[Symbol] | Array[Regexp]]]]]
6
+
7
+ YAML_SPECIAL_CHARS: Array[String]
8
+
9
+ AGENT_DEFAULTS: Hash[Symbol, String]
10
+
11
+ VM_DEFAULTS: Hash[Symbol, String]
12
+
13
+ VM_BOOLEAN_KEYS: Array[Symbol]
14
+
15
+ CT_BOOLEAN_KEYS: Array[Symbol]
16
+
17
+ HOTPLUG_CAPABILITIES: Array[Symbol]
18
+
19
+ AGENT_BOOLEAN_SUBKEYS: Array[Symbol]
20
+
21
+ NET_BOOLEAN_SUBKEYS: Array[Symbol]
22
+
23
+ DISK_BOOLEAN_SUBKEYS: Array[Symbol]
24
+
25
+ VM_COMPLEX_KEYS: Hash[Symbol, Hash[Symbol, Regexp | Symbol]]
26
+
27
+ CT_COMPLEX_KEYS: Hash[Symbol, Hash[Symbol, Regexp | Symbol]]
28
+
29
+ def self.to_yaml: (Hash[Symbol, untyped] flat_config, type: Symbol, ?resource: Hash[Symbol, untyped]) -> String
30
+
31
+ def self.from_yaml: (String yaml_string, type: Symbol) -> Hash[Symbol, untyped]
32
+
33
+ def self.validate: (String yaml_string, type: Symbol) -> Array[String]
34
+
35
+ def self.readonly_violations: (Hash[Symbol, untyped] original_flat, Hash[Symbol, untyped] edited_flat, type: Symbol) -> Array[String]
36
+
37
+ def self.diff: (Hash[Symbol, untyped] original, Hash[Symbol, untyped] edited) -> Hash[Symbol, Hash[Symbol, untyped] | Array[Symbol]]
38
+
39
+ def self.format_diff: (Hash[Symbol, untyped] diff_hash) -> String
40
+
41
+ def self.to_nested: (Hash[Symbol, untyped] flat_config, type: Symbol) -> Hash[Symbol, Hash[Symbol, untyped]]
42
+
43
+ def self.from_nested: (Hash[Symbol, untyped] nested, type: Symbol) -> Hash[Symbol, untyped]
44
+
45
+ def self.complete_from_api: (Hash[Symbol, untyped] manifest_flat, Hash[Symbol, untyped] api_flat, type: Symbol) -> Hash[Symbol, untyped]
46
+
47
+ private
48
+
49
+ def self.sections_for: (Symbol type) -> Hash[Symbol, untyped]
50
+
51
+ def self.header_comment: (Symbol type, Hash[Symbol, untyped] resource) -> String
52
+
53
+ def self.keys_for_section: (Hash[Symbol, untyped] config, Hash[Symbol, Array[Symbol] | Array[Regexp]] section_def) -> Array[Symbol]
54
+
55
+ def self.key_in_section?: (Symbol key, Hash[Symbol, Array[Symbol] | Array[Regexp]] section_def) -> bool
56
+
57
+ def self.readonly_key?: (Symbol key, Hash[Symbol, Array[Symbol] | Array[Regexp]] section_def) -> bool
58
+
59
+ def self.collect_readonly_keys: (Array[Symbol] keys, Hash[Symbol, untyped] sections) -> Array[Symbol]
60
+
61
+ def self.format_yaml_value: (untyped value) -> String
62
+
63
+ def self.needs_quoting?: (String value) -> bool
64
+
65
+ def self.strip_comments: (String yaml_string) -> String
66
+
67
+ def self.wrapper_section?: (Hash[Symbol, untyped] section_def) -> bool
68
+
69
+ def self.inject_defaults: (Hash[Symbol, untyped] flat_config, Symbol type) -> Hash[Symbol, untyped]
70
+
71
+ def self.to_boolean: (untyped value) -> (bool | untyped)
72
+
73
+ def self.from_boolean: (untyped value) -> (Integer | untyped)
74
+
75
+ def self.boolean_keys_for: (Symbol type) -> Array[Symbol]
76
+
77
+ def self.render_leaf_section: (Array[String] lines, Symbol section_name, Hash[Symbol, Array[Symbol] | Array[Regexp]] section_def, Hash[Symbol, untyped] flat_config) -> void
78
+
79
+ def self.render_wrapper_section: (Array[String] lines, Symbol wrapper_name, Hash[Symbol, untyped] wrapper_def, Hash[Symbol, untyped] flat_config) -> void
80
+
81
+ def self.validate_wrapper_section: (Array[String] errors, String wrapper_name, Hash[Symbol, untyped] wrapper_def, Hash[String, untyped] wrapper_values) -> void
82
+
83
+ def self.each_leaf_section: (Hash[Symbol, untyped] sections) -> Array[Hash[Symbol, Array[Symbol] | Array[Regexp]]]
84
+
85
+ def self.flatten_sections: (Hash[String, untyped] parsed) -> Hash[Symbol, untyped]
86
+
87
+ def self.complex_keys_for: (Symbol type) -> Hash[Symbol, Hash[Symbol, Regexp | Symbol]]
88
+
89
+ def self.find_complex_key: (Symbol key, Symbol type) -> Hash[Symbol, Regexp | Symbol]?
90
+
91
+ def self.build_nested_section: (Hash[Symbol, untyped] flat_config, Hash[Symbol, Array[Symbol] | Array[Regexp]] section_def, Symbol type) -> Hash[Symbol, untyped]
92
+
93
+ def self.flatten_nested_section: (Hash[Symbol, untyped] section_hash, Symbol type, Hash[Symbol, untyped] result) -> void
94
+
95
+ def self.parse_vm_net_value: (String string) -> Hash[Symbol, untyped]
96
+
97
+ def self.serialize_vm_net_value: (Hash[Symbol, untyped] hash) -> String
98
+
99
+ def self.normalize_cloudinit_volume: (untyped parsed) -> untyped
100
+
101
+ def self.parse_disk_value: (String string) -> Hash[Symbol, untyped]
102
+
103
+ def self.serialize_disk_value: (Hash[Symbol, untyped] hash) -> String
104
+
105
+ def self.parse_kv_value: (String string, ?default_key: Symbol?) -> Hash[Symbol, String?]
106
+
107
+ def self.serialize_kv_value: (Hash[Symbol, String] hash) -> String
108
+
109
+ def self.parse_agent_value: (String string) -> Hash[Symbol, untyped]
110
+
111
+ def self.serialize_agent_value: (Hash[Symbol, untyped] hash) -> String
112
+
113
+ def self.parse_boot_value: (String string) -> Hash[Symbol, String | Array[String]]
114
+
115
+ def self.serialize_boot_value: (Hash[Symbol, String | Array[String]] hash) -> String
116
+
117
+ def self.parse_hotplug_value: (String string) -> Hash[Symbol, bool]
118
+
119
+ def self.serialize_hotplug_value: (Hash[Symbol, bool] hash) -> String
120
+ end
121
+ end
@@ -0,0 +1,31 @@
1
+ module Pvectl
2
+ class Connection
3
+ class RetryHandler
4
+ RETRYABLE_EXCEPTIONS: Array[singleton(StandardError)]
5
+
6
+ READ_METHODS: Array[Symbol]
7
+
8
+ attr_reader max_retries: Integer
9
+
10
+ attr_reader base_delay: Numeric
11
+
12
+ attr_reader max_delay: Numeric
13
+
14
+ attr_reader retry_writes: bool
15
+
16
+ attr_reader logger: untyped
17
+
18
+ def initialize: (max_retries: Integer, base_delay: Numeric, max_delay: Numeric, ?retry_writes: bool, ?logger: untyped) -> void
19
+
20
+ def with_retry: [T] (?method: Symbol) { () -> T } -> T
21
+
22
+ private
23
+
24
+ def should_retry?: (Symbol method, Integer attempts) -> bool
25
+
26
+ def calculate_delay: (Integer attempt) -> Numeric
27
+
28
+ def log_retry: (Integer attempt, Numeric delay, Exception error) -> void
29
+ end
30
+ end
31
+ end
@@ -0,0 +1,35 @@
1
+ module Pvectl
2
+ class Connection
3
+ attr_reader config: untyped
4
+
5
+ attr_reader retry_handler: untyped
6
+
7
+ def initialize: (untyped config, ?logger: untyped?) -> void
8
+
9
+ def client: () -> untyped
10
+
11
+ def verify!: () -> void
12
+
13
+ def version: () -> Hash[String, untyped]
14
+
15
+ private
16
+
17
+ @config: untyped
18
+
19
+ @client: untyped?
20
+
21
+ @logger: untyped?
22
+
23
+ @retry_handler: untyped
24
+
25
+ def with_timeout: [T] () { () -> T } -> T
26
+
27
+ def create_client: () -> untyped
28
+
29
+ def extract_host: () -> String
30
+
31
+ def build_client_options: () -> Hash[Symbol, untyped]
32
+
33
+ def parse_username: (String full_username) -> [String, String]
34
+ end
35
+ end
@@ -0,0 +1,63 @@
1
+ module Pvectl
2
+ module Console
3
+ class TerminalSession
4
+ CTRL_CLOSE_BRACKET: String
5
+
6
+ PING_INTERVAL: Integer
7
+
8
+ READ_CHUNK_SIZE: Integer
9
+
10
+ def initialize: (url: String, cookie: String, user: String, ticket: String, verify_ssl: bool) -> void
11
+
12
+ def run: () -> void
13
+
14
+ private
15
+
16
+ def encode_input: (String data) -> String
17
+
18
+ def encode_resize: (Integer cols, Integer rows) -> String
19
+
20
+ def encode_ping: () -> String
21
+
22
+ def disconnect_key?: (String byte) -> bool
23
+
24
+ def handshake_message: () -> String
25
+
26
+ def open_socket: (URI::Generic uri) -> (TCPSocket | OpenSSL::SSL::SSLSocket)
27
+
28
+ def wrap_ssl: (TCPSocket tcp, String hostname) -> OpenSSL::SSL::SSLSocket
29
+
30
+ def create_driver: (URI::Generic uri, TCPSocket | OpenSSL::SSL::SSLSocket socket) -> untyped
31
+
32
+ def build_referer: (URI::Generic uri) -> String
33
+
34
+ def read_from_socket: (TCPSocket | OpenSSL::SSL::SSLSocket socket, timeout: Numeric) -> String?
35
+
36
+ def perform_websocket_handshake: (untyped driver, TCPSocket | OpenSSL::SSL::SSLSocket socket) -> void
37
+
38
+ def run_io_loop: (untyped driver, TCPSocket | OpenSSL::SSL::SSLSocket socket) -> void
39
+
40
+ def handle_stdin: (untyped driver) -> void
41
+
42
+ def handle_socket: (untyped driver, TCPSocket | OpenSSL::SSL::SSLSocket socket) -> void
43
+
44
+ def enable_raw_terminal: () -> void
45
+
46
+ def restore_terminal: () -> void
47
+
48
+ def send_initial_resize: (untyped driver) -> void
49
+
50
+ def trap_resize: (untyped driver) -> void
51
+
52
+ def detect_terminal_size: () -> [Integer, Integer]
53
+
54
+ class SocketAdapter
55
+ attr_reader url: String
56
+
57
+ def initialize: (String url, TCPSocket | OpenSSL::SSL::SSLSocket socket) -> void
58
+
59
+ def write: (String data) -> Integer
60
+ end
61
+ end
62
+ end
63
+ end
@@ -0,0 +1,33 @@
1
+ module Pvectl
2
+ class EditorSession
3
+ ERROR_SEPARATOR: String
4
+
5
+ def initialize: (?editor: _Callable?, ?validator: _Callable?) -> void
6
+
7
+ def edit: (String original_content) -> String?
8
+
9
+ private
10
+
11
+ @editor: _Callable
12
+
13
+ @validator: _Callable?
14
+
15
+ interface _Callable
16
+ def call: (untyped) -> untyped
17
+ end
18
+
19
+ def edit_loop: (String path, String original_content) -> String?
20
+
21
+ def cancelled?: (String content, String original_content) -> bool
22
+
23
+ def inject_errors: (String path, String content, Array[String] errors) -> void
24
+
25
+ def strip_error_block: (String content) -> String
26
+
27
+ def build_error_block: (Array[String] errors) -> String
28
+
29
+ def system_editor: (String path) -> void
30
+
31
+ def default_editor: () -> String?
32
+ end
33
+ end
@@ -0,0 +1,19 @@
1
+ module Pvectl
2
+ module ExitCodes
3
+ SUCCESS: Integer
4
+
5
+ GENERAL_ERROR: Integer
6
+
7
+ USAGE_ERROR: Integer
8
+
9
+ CONFIG_ERROR: Integer
10
+
11
+ CONNECTION_ERROR: Integer
12
+
13
+ NOT_FOUND: Integer
14
+
15
+ PERMISSION_DENIED: Integer
16
+
17
+ INTERRUPTED: Integer
18
+ end
19
+ end
@@ -0,0 +1,13 @@
1
+ module Pvectl
2
+ module Formatters
3
+ class Base
4
+ def format: (untyped data, untyped presenter, ?color_enabled: bool, **untyped context) -> String
5
+
6
+ public
7
+
8
+ def collection?: (untyped data) -> bool
9
+
10
+ def normalize_nil: (untyped value, ?String nil_placeholder) -> untyped
11
+ end
12
+ end
13
+ end
@@ -0,0 +1,13 @@
1
+ module Pvectl
2
+ module Formatters
3
+ module ColorSupport
4
+ STATUS_COLORS: Hash[String, Symbol]
5
+
6
+ def self.enabled?: (?explicit_flag: bool?) -> bool
7
+
8
+ def self.pastel: (?explicit_flag: bool?) -> untyped
9
+
10
+ def self.colorize_status: (String? status, untyped pastel_instance) -> String
11
+ end
12
+ end
13
+ end
@@ -0,0 +1,7 @@
1
+ module Pvectl
2
+ module Formatters
3
+ class Json < Base
4
+ def format: (untyped data, untyped presenter, ?color_enabled: bool, ?describe: bool, **untyped context) -> String
5
+ end
6
+ end
7
+ end
@@ -0,0 +1,9 @@
1
+ module Pvectl
2
+ module Formatters
3
+ module OutputHelper
4
+ def self.print: (data: untyped, presenter: untyped, ?format: String, ?color_flag: bool?, ?describe: bool, **untyped context) -> void
5
+
6
+ def self.render: (data: untyped, presenter: untyped, ?format: String, ?color_flag: bool?, ?describe: bool, **untyped context) -> String
7
+ end
8
+ end
9
+ end
@@ -0,0 +1,13 @@
1
+ module Pvectl
2
+ module Formatters
3
+ class Registry
4
+ FORMATS: Hash[String, singleton(Base)]
5
+
6
+ def self.for: (String | Symbol format_name) -> Base
7
+
8
+ def self.available_formats: () -> Array[String]
9
+
10
+ def self.supported?: (String | Symbol format_name) -> bool
11
+ end
12
+ end
13
+ end
@@ -0,0 +1,25 @@
1
+ module Pvectl
2
+ module Formatters
3
+ class Table < Base
4
+ def format: (untyped data, untyped presenter, ?color_enabled: bool, ?describe: bool, **untyped context) -> String
5
+
6
+ private
7
+
8
+ def format_table: (untyped data, untyped presenter, untyped pastel, **untyped context) -> String
9
+
10
+ def format_describe: (untyped model, untyped presenter, untyped pastel) -> String
11
+
12
+ def colorize_row: (Array[untyped] row, Array[String] headers, untyped pastel) -> Array[untyped]
13
+
14
+ def format_describe_hash: (Hash[untyped, untyped]? hash, untyped pastel, ?indent: Integer) -> String
15
+
16
+ def format_describe_table: (Array[Hash[untyped, untyped]] array, ?indent: Integer) -> String
17
+
18
+ def format_describe_value: (untyped value, String key, untyped pastel) -> String
19
+
20
+ def humanize_key: (String | Symbol key) -> String
21
+
22
+ def render_table: (Array[String] headers, Array[Array[untyped]] rows) -> String
23
+ end
24
+ end
25
+ end
@@ -0,0 +1,15 @@
1
+ module Pvectl
2
+ module Formatters
3
+ class Wide < Base
4
+ def format: (untyped data, untyped presenter, ?color_enabled: bool, ?describe: bool, **untyped context) -> String
5
+
6
+ private
7
+
8
+ def format_wide_table: (untyped data, untyped presenter, bool color_enabled, **untyped context) -> String
9
+
10
+ def colorize_row: (Array[untyped] row, Array[String] headers, untyped pastel) -> Array[untyped]
11
+
12
+ def render_table: (Array[String] headers, Array[Array[untyped]] rows) -> String
13
+ end
14
+ end
15
+ end
@@ -0,0 +1,7 @@
1
+ module Pvectl
2
+ module Formatters
3
+ class Yaml < Base
4
+ def format: (untyped data, untyped presenter, ?color_enabled: bool, ?describe: bool, **untyped context) -> String
5
+ end
6
+ end
7
+ end
@@ -0,0 +1,18 @@
1
+ module Pvectl
2
+ module ManifestSerializer
3
+ API_VERSION: String
4
+ KINDS: Hash[Symbol, String]
5
+ KINDS_REVERSE: Hash[String, Symbol]
6
+
7
+ def self.to_yaml: (Hash[Symbol, untyped] nested_config, type: Symbol, metadata: Hash[Symbol, untyped]) -> String
8
+ def self.from_yaml: (String yaml_string) -> Hash[Symbol, untyped]
9
+ def self.validate: (String yaml_string) -> Array[String]
10
+
11
+ private
12
+
13
+ def self.build_metadata: (Hash[Symbol, untyped] metadata) -> Hash[String, untyped]
14
+ def self.stringify_keys_deep: (Hash[Symbol, untyped] hash) -> Hash[String, untyped]
15
+ def self.symbolize_metadata: (Hash[String, untyped] hash) -> Hash[Symbol, untyped]
16
+ def self.symbolize_keys_deep: (Hash[String, untyped] hash) -> Hash[Symbol, untyped]
17
+ end
18
+ end
@@ -0,0 +1,26 @@
1
+ module Pvectl
2
+ module Models
3
+ class AptPackage < Base
4
+ attr_reader package: String?
5
+ attr_reader title: String?
6
+ attr_reader version: String?
7
+ attr_reader old_version: String?
8
+ attr_reader origin: String?
9
+ attr_reader section: String?
10
+ attr_reader priority: String?
11
+ attr_reader arch: String?
12
+ attr_reader description: String?
13
+ attr_reader notify_status: String?
14
+ attr_reader current_state: String?
15
+ attr_reader manager_version: String?
16
+ attr_reader running_kernel: String?
17
+ attr_reader node: String?
18
+
19
+ def initialize: (?Hash[Symbol, untyped] attrs) -> void
20
+
21
+ def upgrade?: () -> bool
22
+
23
+ def installed_state: () -> String
24
+ end
25
+ end
26
+ end