mtncloud-cli 1.0.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 (499) hide show
  1. checksums.yaml +7 -0
  2. data/.dockerignore +20 -0
  3. data/.github/pull_request_template.md +14 -0
  4. data/.github/workflows/ci.yml +56 -0
  5. data/.github/workflows/release.yml +46 -0
  6. data/.gitignore +25 -0
  7. data/CLAUDE.md +24 -0
  8. data/CONTRIBUTING.md +91 -0
  9. data/Dockerfile +19 -0
  10. data/Gemfile +4 -0
  11. data/LICENSE.txt +23 -0
  12. data/README.md +187 -0
  13. data/Rakefile +26 -0
  14. data/bin/mcs +3 -0
  15. data/bin/mtncloud +27 -0
  16. data/lib/mtncloud/api/account_groups_interface.rb +48 -0
  17. data/lib/mtncloud/api/account_users_interface.rb +68 -0
  18. data/lib/mtncloud/api/accounts_interface.rb +9 -0
  19. data/lib/mtncloud/api/activity_interface.rb +9 -0
  20. data/lib/mtncloud/api/affinity_groups_interface.rb +46 -0
  21. data/lib/mtncloud/api/api_client.rb +1091 -0
  22. data/lib/mtncloud/api/appliance_settings_interface.rb +49 -0
  23. data/lib/mtncloud/api/approvals_interface.rb +32 -0
  24. data/lib/mtncloud/api/apps_interface.rb +180 -0
  25. data/lib/mtncloud/api/archive_buckets_interface.rb +116 -0
  26. data/lib/mtncloud/api/archive_files_interface.rb +173 -0
  27. data/lib/mtncloud/api/audit_interface.rb +9 -0
  28. data/lib/mtncloud/api/auth_interface.rb +58 -0
  29. data/lib/mtncloud/api/backup_jobs_interface.rb +13 -0
  30. data/lib/mtncloud/api/backup_restores_interface.rb +27 -0
  31. data/lib/mtncloud/api/backup_results_interface.rb +32 -0
  32. data/lib/mtncloud/api/backup_service_types_interface.rb +9 -0
  33. data/lib/mtncloud/api/backup_services_interface.rb +9 -0
  34. data/lib/mtncloud/api/backup_settings_interface.rb +20 -0
  35. data/lib/mtncloud/api/backup_types_interface.rb +9 -0
  36. data/lib/mtncloud/api/backups_interface.rb +21 -0
  37. data/lib/mtncloud/api/billing_interface.rb +34 -0
  38. data/lib/mtncloud/api/blueprints_interface.rb +70 -0
  39. data/lib/mtncloud/api/body_io.rb +22 -0
  40. data/lib/mtncloud/api/budgets_interface.rb +48 -0
  41. data/lib/mtncloud/api/catalog_item_types_interface.rb +29 -0
  42. data/lib/mtncloud/api/certificate_types_interface.rb +14 -0
  43. data/lib/mtncloud/api/certificates_interface.rb +9 -0
  44. data/lib/mtncloud/api/clients_interface.rb +41 -0
  45. data/lib/mtncloud/api/cloud_datastores_interface.rb +48 -0
  46. data/lib/mtncloud/api/cloud_folders_interface.rb +41 -0
  47. data/lib/mtncloud/api/cloud_policies_interface.rb +41 -0
  48. data/lib/mtncloud/api/cloud_resource_pools_interface.rb +66 -0
  49. data/lib/mtncloud/api/clouds_interface.rb +217 -0
  50. data/lib/mtncloud/api/clusters_interface.rb +471 -0
  51. data/lib/mtncloud/api/containers_interface.rb +145 -0
  52. data/lib/mtncloud/api/credential_types_interface.rb +9 -0
  53. data/lib/mtncloud/api/credentials_interface.rb +9 -0
  54. data/lib/mtncloud/api/custom_instance_types_interface.rb +99 -0
  55. data/lib/mtncloud/api/cypher_interface.rb +51 -0
  56. data/lib/mtncloud/api/dashboard_interface.rb +14 -0
  57. data/lib/mtncloud/api/datastores_interface.rb +21 -0
  58. data/lib/mtncloud/api/deploy_interface.rb +44 -0
  59. data/lib/mtncloud/api/deployments_interface.rb +79 -0
  60. data/lib/mtncloud/api/distributed_workers_interface.rb +41 -0
  61. data/lib/mtncloud/api/email_templates_interface.rb +53 -0
  62. data/lib/mtncloud/api/environments_interface.rb +48 -0
  63. data/lib/mtncloud/api/execute_schedules_interface.rb +71 -0
  64. data/lib/mtncloud/api/execution_request_interface.rb +27 -0
  65. data/lib/mtncloud/api/file_copy_request_interface.rb +68 -0
  66. data/lib/mtncloud/api/forgot_password_interface.rb +17 -0
  67. data/lib/mtncloud/api/group_policies_interface.rb +41 -0
  68. data/lib/mtncloud/api/groups_interface.rb +73 -0
  69. data/lib/mtncloud/api/guidance_interface.rb +44 -0
  70. data/lib/mtncloud/api/guidance_settings_interface.rb +17 -0
  71. data/lib/mtncloud/api/health_interface.rb +100 -0
  72. data/lib/mtncloud/api/host_vm_groups_interface.rb +37 -0
  73. data/lib/mtncloud/api/hub_interface.rb +25 -0
  74. data/lib/mtncloud/api/image_builder_boot_scripts_interface.rb +41 -0
  75. data/lib/mtncloud/api/image_builder_image_builds_interface.rb +73 -0
  76. data/lib/mtncloud/api/image_builder_interface.rb +20 -0
  77. data/lib/mtncloud/api/image_builder_preseed_scripts_interface.rb +41 -0
  78. data/lib/mtncloud/api/instance_types_interface.rb +20 -0
  79. data/lib/mtncloud/api/instances_interface.rb +453 -0
  80. data/lib/mtncloud/api/integration_types_interface.rb +14 -0
  81. data/lib/mtncloud/api/integrations_interface.rb +74 -0
  82. data/lib/mtncloud/api/invoice_line_items_interface.rb +9 -0
  83. data/lib/mtncloud/api/invoices_interface.rb +28 -0
  84. data/lib/mtncloud/api/jobs_interface.rb +83 -0
  85. data/lib/mtncloud/api/key_pairs_interface.rb +57 -0
  86. data/lib/mtncloud/api/library_cluster_layouts_interface.rb +47 -0
  87. data/lib/mtncloud/api/library_cluster_packages_interface.rb +60 -0
  88. data/lib/mtncloud/api/library_container_scripts_interface.rb +43 -0
  89. data/lib/mtncloud/api/library_container_templates_interface.rb +43 -0
  90. data/lib/mtncloud/api/library_container_types_interface.rb +59 -0
  91. data/lib/mtncloud/api/library_container_upgrades_interface.rb +60 -0
  92. data/lib/mtncloud/api/library_instance_types_interface.rb +74 -0
  93. data/lib/mtncloud/api/library_layouts_interface.rb +69 -0
  94. data/lib/mtncloud/api/library_operating_systems_interface.rb +63 -0
  95. data/lib/mtncloud/api/library_spec_template_types_interface.rb +43 -0
  96. data/lib/mtncloud/api/library_spec_templates_interface.rb +43 -0
  97. data/lib/mtncloud/api/license_interface.rb +30 -0
  98. data/lib/mtncloud/api/load_balancer_monitors_interface.rb +9 -0
  99. data/lib/mtncloud/api/load_balancer_pool_nodes_interface.rb +8 -0
  100. data/lib/mtncloud/api/load_balancer_pools_interface.rb +9 -0
  101. data/lib/mtncloud/api/load_balancer_pools_secondary_interface.rb +9 -0
  102. data/lib/mtncloud/api/load_balancer_profiles_interface.rb +9 -0
  103. data/lib/mtncloud/api/load_balancer_types_interface.rb +9 -0
  104. data/lib/mtncloud/api/load_balancer_virtual_servers_interface.rb +18 -0
  105. data/lib/mtncloud/api/load_balancers_interface.rb +14 -0
  106. data/lib/mtncloud/api/log_settings_interface.rb +44 -0
  107. data/lib/mtncloud/api/logs_interface.rb +37 -0
  108. data/lib/mtncloud/api/migrations_interface.rb +49 -0
  109. data/lib/mtncloud/api/monitoring_alerts_interface.rb +39 -0
  110. data/lib/mtncloud/api/monitoring_apps_interface.rb +69 -0
  111. data/lib/mtncloud/api/monitoring_checks_interface.rb +103 -0
  112. data/lib/mtncloud/api/monitoring_contacts_interface.rb +41 -0
  113. data/lib/mtncloud/api/monitoring_groups_interface.rb +77 -0
  114. data/lib/mtncloud/api/monitoring_incidents_interface.rb +107 -0
  115. data/lib/mtncloud/api/monitoring_interface.rb +35 -0
  116. data/lib/mtncloud/api/monitoring_settings_interface.rb +21 -0
  117. data/lib/mtncloud/api/network_dhcp_relays_interface.rb +36 -0
  118. data/lib/mtncloud/api/network_dhcp_servers_interface.rb +36 -0
  119. data/lib/mtncloud/api/network_domain_records_interface.rb +41 -0
  120. data/lib/mtncloud/api/network_domains_interface.rb +41 -0
  121. data/lib/mtncloud/api/network_edge_clusters_interface.rb +26 -0
  122. data/lib/mtncloud/api/network_floating_ips_interface.rb +40 -0
  123. data/lib/mtncloud/api/network_groups_interface.rb +41 -0
  124. data/lib/mtncloud/api/network_pool_ips_interface.rb +41 -0
  125. data/lib/mtncloud/api/network_pool_server_types_interface.rb +9 -0
  126. data/lib/mtncloud/api/network_pool_servers_interface.rb +48 -0
  127. data/lib/mtncloud/api/network_pools_interface.rb +41 -0
  128. data/lib/mtncloud/api/network_proxies_interface.rb +41 -0
  129. data/lib/mtncloud/api/network_routers_interface.rb +181 -0
  130. data/lib/mtncloud/api/network_security_server_types_interface.rb +9 -0
  131. data/lib/mtncloud/api/network_security_servers_interface.rb +27 -0
  132. data/lib/mtncloud/api/network_server_groups_interface.rb +7 -0
  133. data/lib/mtncloud/api/network_server_types_interface.rb +9 -0
  134. data/lib/mtncloud/api/network_servers_interface.rb +102 -0
  135. data/lib/mtncloud/api/network_services_interface.rb +63 -0
  136. data/lib/mtncloud/api/network_static_routes_interface.rb +36 -0
  137. data/lib/mtncloud/api/network_subnets_interface.rb +42 -0
  138. data/lib/mtncloud/api/network_types_interface.rb +20 -0
  139. data/lib/mtncloud/api/networks_interface.rb +48 -0
  140. data/lib/mtncloud/api/option_type_forms_interface.rb +9 -0
  141. data/lib/mtncloud/api/option_type_lists_interface.rb +53 -0
  142. data/lib/mtncloud/api/option_types_interface.rb +41 -0
  143. data/lib/mtncloud/api/options_interface.rb +17 -0
  144. data/lib/mtncloud/api/packages_interface.rb +112 -0
  145. data/lib/mtncloud/api/ping_interface.rb +22 -0
  146. data/lib/mtncloud/api/plugins_interface.rb +22 -0
  147. data/lib/mtncloud/api/policies_interface.rb +56 -0
  148. data/lib/mtncloud/api/power_schedules_interface.rb +71 -0
  149. data/lib/mtncloud/api/price_sets_interface.rb +39 -0
  150. data/lib/mtncloud/api/prices_interface.rb +71 -0
  151. data/lib/mtncloud/api/processes_interface.rb +40 -0
  152. data/lib/mtncloud/api/projects_interface.rb +33 -0
  153. data/lib/mtncloud/api/provision_types_interface.rb +24 -0
  154. data/lib/mtncloud/api/provisioning_license_types_interface.rb +31 -0
  155. data/lib/mtncloud/api/provisioning_licenses_interface.rb +60 -0
  156. data/lib/mtncloud/api/provisioning_settings_interface.rb +26 -0
  157. data/lib/mtncloud/api/read_interface.rb +24 -0
  158. data/lib/mtncloud/api/reports_interface.rb +70 -0
  159. data/lib/mtncloud/api/resource_pool_groups_interface.rb +51 -0
  160. data/lib/mtncloud/api/rest_interface.rb +37 -0
  161. data/lib/mtncloud/api/roles_interface.rb +151 -0
  162. data/lib/mtncloud/api/scale_thresholds_interface.rb +9 -0
  163. data/lib/mtncloud/api/search_interface.rb +13 -0
  164. data/lib/mtncloud/api/secondary_read_interface.rb +25 -0
  165. data/lib/mtncloud/api/secondary_rest_interface.rb +42 -0
  166. data/lib/mtncloud/api/security_group_rules_interface.rb +35 -0
  167. data/lib/mtncloud/api/security_groups_interface.rb +56 -0
  168. data/lib/mtncloud/api/security_package_types_interface.rb +9 -0
  169. data/lib/mtncloud/api/security_packages_interface.rb +9 -0
  170. data/lib/mtncloud/api/security_scans_interface.rb +9 -0
  171. data/lib/mtncloud/api/server_devices_interface.rb +30 -0
  172. data/lib/mtncloud/api/server_types_interface.rb +20 -0
  173. data/lib/mtncloud/api/servers_interface.rb +230 -0
  174. data/lib/mtncloud/api/service_catalog_interface.rb +89 -0
  175. data/lib/mtncloud/api/service_plans_interface.rb +62 -0
  176. data/lib/mtncloud/api/setup_interface.rb +46 -0
  177. data/lib/mtncloud/api/snapshots_interface.rb +19 -0
  178. data/lib/mtncloud/api/storage_datastores_interface.rb +44 -0
  179. data/lib/mtncloud/api/storage_providers_interface.rb +151 -0
  180. data/lib/mtncloud/api/storage_server_types_interface.rb +14 -0
  181. data/lib/mtncloud/api/storage_servers_interface.rb +9 -0
  182. data/lib/mtncloud/api/storage_volume_types_interface.rb +9 -0
  183. data/lib/mtncloud/api/storage_volumes_interface.rb +24 -0
  184. data/lib/mtncloud/api/subnet_types_interface.rb +20 -0
  185. data/lib/mtncloud/api/subnets_interface.rb +41 -0
  186. data/lib/mtncloud/api/support_bundles_interface.rb +46 -0
  187. data/lib/mtncloud/api/system_types_interface.rb +13 -0
  188. data/lib/mtncloud/api/systems_interface.rb +55 -0
  189. data/lib/mtncloud/api/task_sets_interface.rb +52 -0
  190. data/lib/mtncloud/api/tasks_interface.rb +66 -0
  191. data/lib/mtncloud/api/tokens_interface.rb +39 -0
  192. data/lib/mtncloud/api/usage_interface.rb +18 -0
  193. data/lib/mtncloud/api/user_groups_interface.rb +59 -0
  194. data/lib/mtncloud/api/user_settings_interface.rb +90 -0
  195. data/lib/mtncloud/api/user_sources_interface.rb +99 -0
  196. data/lib/mtncloud/api/users_interface.rb +33 -0
  197. data/lib/mtncloud/api/vdi_allocations_interface.rb +9 -0
  198. data/lib/mtncloud/api/vdi_apps_interface.rb +9 -0
  199. data/lib/mtncloud/api/vdi_gateways_interface.rb +9 -0
  200. data/lib/mtncloud/api/vdi_interface.rb +28 -0
  201. data/lib/mtncloud/api/vdi_pools_interface.rb +19 -0
  202. data/lib/mtncloud/api/virtual_images_interface.rb +210 -0
  203. data/lib/mtncloud/api/virtual_servers_interface.rb +9 -0
  204. data/lib/mtncloud/api/virtual_switches_interface.rb +9 -0
  205. data/lib/mtncloud/api/whitelabel_settings_interface.rb +57 -0
  206. data/lib/mtncloud/api/whoami_interface.rb +13 -0
  207. data/lib/mtncloud/api/wiki_interface.rb +48 -0
  208. data/lib/mtncloud/api.rb +12 -0
  209. data/lib/mtncloud/benchmarking.rb +259 -0
  210. data/lib/mtncloud/cli/cli_command.rb +2281 -0
  211. data/lib/mtncloud/cli/cli_registry.rb +337 -0
  212. data/lib/mtncloud/cli/commands/access_token_command.rb +201 -0
  213. data/lib/mtncloud/cli/commands/account_groups_command.rb +530 -0
  214. data/lib/mtncloud/cli/commands/activity_command.rb +149 -0
  215. data/lib/mtncloud/cli/commands/affinity_groups_command.rb +554 -0
  216. data/lib/mtncloud/cli/commands/alias_command.rb +278 -0
  217. data/lib/mtncloud/cli/commands/appliance_settings_command.rb +382 -0
  218. data/lib/mtncloud/cli/commands/approvals_command.rb +236 -0
  219. data/lib/mtncloud/cli/commands/apps.rb +2549 -0
  220. data/lib/mtncloud/cli/commands/archives_command.rb +2161 -0
  221. data/lib/mtncloud/cli/commands/audit.rb +188 -0
  222. data/lib/mtncloud/cli/commands/backup_jobs_command.rb +366 -0
  223. data/lib/mtncloud/cli/commands/backup_restores_command.rb +144 -0
  224. data/lib/mtncloud/cli/commands/backup_results_command.rb +149 -0
  225. data/lib/mtncloud/cli/commands/backup_services_command.rb +44 -0
  226. data/lib/mtncloud/cli/commands/backup_settings_command.rb +184 -0
  227. data/lib/mtncloud/cli/commands/backup_types_command.rb +53 -0
  228. data/lib/mtncloud/cli/commands/backups_command.rb +674 -0
  229. data/lib/mtncloud/cli/commands/benchmark_command.rb +458 -0
  230. data/lib/mtncloud/cli/commands/blueprints_command.rb +2297 -0
  231. data/lib/mtncloud/cli/commands/boot_scripts_command.rb +379 -0
  232. data/lib/mtncloud/cli/commands/budgets_command.rb +754 -0
  233. data/lib/mtncloud/cli/commands/cat_command.rb +45 -0
  234. data/lib/mtncloud/cli/commands/catalog_item_types_command.rb +858 -0
  235. data/lib/mtncloud/cli/commands/certificates_command.rb +575 -0
  236. data/lib/mtncloud/cli/commands/change_password_command.rb +132 -0
  237. data/lib/mtncloud/cli/commands/clients_command.rb +331 -0
  238. data/lib/mtncloud/cli/commands/cloud_datastores_command.rb +543 -0
  239. data/lib/mtncloud/cli/commands/cloud_folders_command.rb +512 -0
  240. data/lib/mtncloud/cli/commands/cloud_resource_pools_command.rb +870 -0
  241. data/lib/mtncloud/cli/commands/clouds.rb +2037 -0
  242. data/lib/mtncloud/cli/commands/clouds_types.rb +140 -0
  243. data/lib/mtncloud/cli/commands/cluster_types.rb +179 -0
  244. data/lib/mtncloud/cli/commands/clusters.rb +5855 -0
  245. data/lib/mtncloud/cli/commands/coloring_command.rb +82 -0
  246. data/lib/mtncloud/cli/commands/containers_command.rb +967 -0
  247. data/lib/mtncloud/cli/commands/credential_types_command.rb +36 -0
  248. data/lib/mtncloud/cli/commands/credentials_command.rb +124 -0
  249. data/lib/mtncloud/cli/commands/curl_command.rb +168 -0
  250. data/lib/mtncloud/cli/commands/cypher_command.rb +587 -0
  251. data/lib/mtncloud/cli/commands/dashboard_command.rb +300 -0
  252. data/lib/mtncloud/cli/commands/debug_command.rb +75 -0
  253. data/lib/mtncloud/cli/commands/deploy.rb +485 -0
  254. data/lib/mtncloud/cli/commands/deployments.rb +923 -0
  255. data/lib/mtncloud/cli/commands/deploys.rb +485 -0
  256. data/lib/mtncloud/cli/commands/distributed_workers_command.rb +282 -0
  257. data/lib/mtncloud/cli/commands/echo_command.rb +61 -0
  258. data/lib/mtncloud/cli/commands/edit_profile_command.rb +57 -0
  259. data/lib/mtncloud/cli/commands/edit_rc_command.rb +77 -0
  260. data/lib/mtncloud/cli/commands/email_templates_command.rb +373 -0
  261. data/lib/mtncloud/cli/commands/environments_command.rb +401 -0
  262. data/lib/mtncloud/cli/commands/execute_schedules_command.rb +735 -0
  263. data/lib/mtncloud/cli/commands/execution_request_command.rb +333 -0
  264. data/lib/mtncloud/cli/commands/exit_command.rb +34 -0
  265. data/lib/mtncloud/cli/commands/file_copy_request_command.rb +352 -0
  266. data/lib/mtncloud/cli/commands/forgot_password.rb +133 -0
  267. data/lib/mtncloud/cli/commands/get_prompt_command.rb +36 -0
  268. data/lib/mtncloud/cli/commands/groups.rb +818 -0
  269. data/lib/mtncloud/cli/commands/guidance_command.rb +529 -0
  270. data/lib/mtncloud/cli/commands/guidance_settings.rb +148 -0
  271. data/lib/mtncloud/cli/commands/health_command.rb +1046 -0
  272. data/lib/mtncloud/cli/commands/history_command.rb +60 -0
  273. data/lib/mtncloud/cli/commands/host_vm_groups_command.rb +423 -0
  274. data/lib/mtncloud/cli/commands/hosts.rb +2986 -0
  275. data/lib/mtncloud/cli/commands/hub.rb +215 -0
  276. data/lib/mtncloud/cli/commands/image_builder_command.rb +1197 -0
  277. data/lib/mtncloud/cli/commands/instance_types.rb +163 -0
  278. data/lib/mtncloud/cli/commands/instances.rb +5813 -0
  279. data/lib/mtncloud/cli/commands/integrations_command.rb +1412 -0
  280. data/lib/mtncloud/cli/commands/invoices_command.rb +1151 -0
  281. data/lib/mtncloud/cli/commands/jobs_command.rb +998 -0
  282. data/lib/mtncloud/cli/commands/key_pairs.rb +470 -0
  283. data/lib/mtncloud/cli/commands/library_cluster_layouts_command.rb +901 -0
  284. data/lib/mtncloud/cli/commands/library_cluster_packages_command.rb +552 -0
  285. data/lib/mtncloud/cli/commands/library_container_scripts_command.rb +446 -0
  286. data/lib/mtncloud/cli/commands/library_container_templates_command.rb +526 -0
  287. data/lib/mtncloud/cli/commands/library_container_types_command.rb +698 -0
  288. data/lib/mtncloud/cli/commands/library_forms_command.rb +625 -0
  289. data/lib/mtncloud/cli/commands/library_instance_types_command.rb +668 -0
  290. data/lib/mtncloud/cli/commands/library_layouts_command.rb +849 -0
  291. data/lib/mtncloud/cli/commands/library_operating_systems_command.rb +671 -0
  292. data/lib/mtncloud/cli/commands/library_option_lists_command.rb +503 -0
  293. data/lib/mtncloud/cli/commands/library_option_types_command.rb +329 -0
  294. data/lib/mtncloud/cli/commands/library_spec_templates_command.rb +547 -0
  295. data/lib/mtncloud/cli/commands/library_upgrades_command.rb +596 -0
  296. data/lib/mtncloud/cli/commands/license.rb +475 -0
  297. data/lib/mtncloud/cli/commands/load_balancer_monitors.rb +70 -0
  298. data/lib/mtncloud/cli/commands/load_balancer_pool_nodes.rb +87 -0
  299. data/lib/mtncloud/cli/commands/load_balancer_pools.rb +129 -0
  300. data/lib/mtncloud/cli/commands/load_balancer_profiles.rb +64 -0
  301. data/lib/mtncloud/cli/commands/load_balancer_types.rb +38 -0
  302. data/lib/mtncloud/cli/commands/load_balancer_virtual_servers.rb +147 -0
  303. data/lib/mtncloud/cli/commands/load_balancers.rb +189 -0
  304. data/lib/mtncloud/cli/commands/log_level_command.rb +54 -0
  305. data/lib/mtncloud/cli/commands/log_settings_command.rb +443 -0
  306. data/lib/mtncloud/cli/commands/login.rb +148 -0
  307. data/lib/mtncloud/cli/commands/logout.rb +63 -0
  308. data/lib/mtncloud/cli/commands/logs_command.rb +140 -0
  309. data/lib/mtncloud/cli/commands/man_command.rb +409 -0
  310. data/lib/mtncloud/cli/commands/migrations.rb +453 -0
  311. data/lib/mtncloud/cli/commands/monitoring_alerts_command.rb +791 -0
  312. data/lib/mtncloud/cli/commands/monitoring_apps_command.rb +716 -0
  313. data/lib/mtncloud/cli/commands/monitoring_checks_command.rb +766 -0
  314. data/lib/mtncloud/cli/commands/monitoring_contacts_command.rb +339 -0
  315. data/lib/mtncloud/cli/commands/monitoring_groups_command.rb +674 -0
  316. data/lib/mtncloud/cli/commands/monitoring_incidents_command.rb +835 -0
  317. data/lib/mtncloud/cli/commands/monitoring_settings.rb +212 -0
  318. data/lib/mtncloud/cli/commands/network_dhcp_relays_command.rb +375 -0
  319. data/lib/mtncloud/cli/commands/network_dhcp_servers_command.rb +366 -0
  320. data/lib/mtncloud/cli/commands/network_domains_command.rb +896 -0
  321. data/lib/mtncloud/cli/commands/network_edge_clusters_command.rb +288 -0
  322. data/lib/mtncloud/cli/commands/network_firewalls_command.rb +783 -0
  323. data/lib/mtncloud/cli/commands/network_floating_ips.rb +147 -0
  324. data/lib/mtncloud/cli/commands/network_groups_command.rb +654 -0
  325. data/lib/mtncloud/cli/commands/network_pool_server_types.rb +20 -0
  326. data/lib/mtncloud/cli/commands/network_pool_servers_command.rb +318 -0
  327. data/lib/mtncloud/cli/commands/network_pools_command.rb +903 -0
  328. data/lib/mtncloud/cli/commands/network_proxies_command.rb +578 -0
  329. data/lib/mtncloud/cli/commands/network_routers_command.rb +2628 -0
  330. data/lib/mtncloud/cli/commands/network_security_server_types.rb +20 -0
  331. data/lib/mtncloud/cli/commands/network_server_groups_command.rb +222 -0
  332. data/lib/mtncloud/cli/commands/network_server_types_command.rb +20 -0
  333. data/lib/mtncloud/cli/commands/network_servers_command.rb +398 -0
  334. data/lib/mtncloud/cli/commands/network_services_command.rb +198 -0
  335. data/lib/mtncloud/cli/commands/network_static_routes_command.rb +451 -0
  336. data/lib/mtncloud/cli/commands/network_transport_zones_command.rb +412 -0
  337. data/lib/mtncloud/cli/commands/networks_command.rb +1692 -0
  338. data/lib/mtncloud/cli/commands/open_command.rb +30 -0
  339. data/lib/mtncloud/cli/commands/options.rb +231 -0
  340. data/lib/mtncloud/cli/commands/packages_command.rb +822 -0
  341. data/lib/mtncloud/cli/commands/ping.rb +242 -0
  342. data/lib/mtncloud/cli/commands/plugins.rb +214 -0
  343. data/lib/mtncloud/cli/commands/policies_command.rb +990 -0
  344. data/lib/mtncloud/cli/commands/power_schedules_command.rb +731 -0
  345. data/lib/mtncloud/cli/commands/preseed_scripts_command.rb +378 -0
  346. data/lib/mtncloud/cli/commands/price_sets_command.rb +557 -0
  347. data/lib/mtncloud/cli/commands/prices_command.rb +692 -0
  348. data/lib/mtncloud/cli/commands/processes_command.rb +469 -0
  349. data/lib/mtncloud/cli/commands/projects_command.rb +537 -0
  350. data/lib/mtncloud/cli/commands/provisioning_licenses_command.rb +509 -0
  351. data/lib/mtncloud/cli/commands/provisioning_settings_command.rb +238 -0
  352. data/lib/mtncloud/cli/commands/recent_activity_command.rb +171 -0
  353. data/lib/mtncloud/cli/commands/remote.rb +1818 -0
  354. data/lib/mtncloud/cli/commands/reports_command.rb +724 -0
  355. data/lib/mtncloud/cli/commands/resource_pool_groups_command.rb +586 -0
  356. data/lib/mtncloud/cli/commands/rm_command.rb +14 -0
  357. data/lib/mtncloud/cli/commands/roles.rb +3120 -0
  358. data/lib/mtncloud/cli/commands/scale_thresholds.rb +103 -0
  359. data/lib/mtncloud/cli/commands/search_command.rb +184 -0
  360. data/lib/mtncloud/cli/commands/security_group_rules.rb +230 -0
  361. data/lib/mtncloud/cli/commands/security_groups.rb +1294 -0
  362. data/lib/mtncloud/cli/commands/security_package_types.rb +32 -0
  363. data/lib/mtncloud/cli/commands/security_packages.rb +84 -0
  364. data/lib/mtncloud/cli/commands/security_scans.rb +107 -0
  365. data/lib/mtncloud/cli/commands/self_service_command.rb +17 -0
  366. data/lib/mtncloud/cli/commands/server_devices_command.rb +207 -0
  367. data/lib/mtncloud/cli/commands/service_catalog_command.rb +1528 -0
  368. data/lib/mtncloud/cli/commands/service_plans_command.rb +895 -0
  369. data/lib/mtncloud/cli/commands/set_prompt_command.rb +51 -0
  370. data/lib/mtncloud/cli/commands/setup.rb +423 -0
  371. data/lib/mtncloud/cli/commands/shell.rb +717 -0
  372. data/lib/mtncloud/cli/commands/sleep_command.rb +43 -0
  373. data/lib/mtncloud/cli/commands/snapshots.rb +156 -0
  374. data/lib/mtncloud/cli/commands/source_command.rb +30 -0
  375. data/lib/mtncloud/cli/commands/ssl_verification_command.rb +47 -0
  376. data/lib/mtncloud/cli/commands/storage_datastores.rb +457 -0
  377. data/lib/mtncloud/cli/commands/storage_providers_command.rb +1401 -0
  378. data/lib/mtncloud/cli/commands/storage_server_types.rb +45 -0
  379. data/lib/mtncloud/cli/commands/storage_servers.rb +116 -0
  380. data/lib/mtncloud/cli/commands/storage_volume_types.rb +45 -0
  381. data/lib/mtncloud/cli/commands/storage_volumes.rb +236 -0
  382. data/lib/mtncloud/cli/commands/subnets_command.rb +819 -0
  383. data/lib/mtncloud/cli/commands/support_bundles_command.rb +606 -0
  384. data/lib/mtncloud/cli/commands/systems.rb +1203 -0
  385. data/lib/mtncloud/cli/commands/tasks.rb +1391 -0
  386. data/lib/mtncloud/cli/commands/tee_command.rb +14 -0
  387. data/lib/mtncloud/cli/commands/tenants_command.rb +315 -0
  388. data/lib/mtncloud/cli/commands/tokens_command.rb +391 -0
  389. data/lib/mtncloud/cli/commands/update_command.rb +46 -0
  390. data/lib/mtncloud/cli/commands/usage_command.rb +203 -0
  391. data/lib/mtncloud/cli/commands/user_groups_command.rb +512 -0
  392. data/lib/mtncloud/cli/commands/user_settings_command.rb +849 -0
  393. data/lib/mtncloud/cli/commands/user_sources_command.rb +1065 -0
  394. data/lib/mtncloud/cli/commands/users.rb +897 -0
  395. data/lib/mtncloud/cli/commands/vdi_allocations_command.rb +159 -0
  396. data/lib/mtncloud/cli/commands/vdi_apps_command.rb +317 -0
  397. data/lib/mtncloud/cli/commands/vdi_command.rb +359 -0
  398. data/lib/mtncloud/cli/commands/vdi_gateways_command.rb +290 -0
  399. data/lib/mtncloud/cli/commands/vdi_pools_command.rb +574 -0
  400. data/lib/mtncloud/cli/commands/version_command.rb +38 -0
  401. data/lib/mtncloud/cli/commands/view.rb +107 -0
  402. data/lib/mtncloud/cli/commands/virtual_images.rb +1362 -0
  403. data/lib/mtncloud/cli/commands/virtual_switches_command.rb +336 -0
  404. data/lib/mtncloud/cli/commands/whitelabel_settings_command.rb +653 -0
  405. data/lib/mtncloud/cli/commands/whoami.rb +323 -0
  406. data/lib/mtncloud/cli/commands/wiki_command.rb +448 -0
  407. data/lib/mtncloud/cli/commands/workflows.rb +1022 -0
  408. data/lib/mtncloud/cli/credentials.rb +482 -0
  409. data/lib/mtncloud/cli/dot_file.rb +180 -0
  410. data/lib/mtncloud/cli/error_handler.rb +307 -0
  411. data/lib/mtncloud/cli/errors.rb +53 -0
  412. data/lib/mtncloud/cli/expression_parser.rb +153 -0
  413. data/lib/mtncloud/cli/mixins/accounts_helper.rb +484 -0
  414. data/lib/mtncloud/cli/mixins/affinity_helper.rb +118 -0
  415. data/lib/mtncloud/cli/mixins/backups_helper.rb +200 -0
  416. data/lib/mtncloud/cli/mixins/deployments_helper.rb +163 -0
  417. data/lib/mtncloud/cli/mixins/execution_request_helper.rb +50 -0
  418. data/lib/mtncloud/cli/mixins/infrastructure_helper.rb +966 -0
  419. data/lib/mtncloud/cli/mixins/jobs_helper.rb +202 -0
  420. data/lib/mtncloud/cli/mixins/library_helper.rb +539 -0
  421. data/lib/mtncloud/cli/mixins/load_balancers_helper.rb +176 -0
  422. data/lib/mtncloud/cli/mixins/logs_helper.rb +131 -0
  423. data/lib/mtncloud/cli/mixins/monitoring_helper.rb +876 -0
  424. data/lib/mtncloud/cli/mixins/networks_helper.rb +62 -0
  425. data/lib/mtncloud/cli/mixins/operations_helper.rb +41 -0
  426. data/lib/mtncloud/cli/mixins/option_source_helper.rb +254 -0
  427. data/lib/mtncloud/cli/mixins/print_helper.rb +1631 -0
  428. data/lib/mtncloud/cli/mixins/processes_helper.rb +286 -0
  429. data/lib/mtncloud/cli/mixins/prompt_helper.rb +136 -0
  430. data/lib/mtncloud/cli/mixins/provisioning_helper.rb +2963 -0
  431. data/lib/mtncloud/cli/mixins/remote_helper.rb +139 -0
  432. data/lib/mtncloud/cli/mixins/rest_command.rb +994 -0
  433. data/lib/mtncloud/cli/mixins/secondary_rest_command.rb +700 -0
  434. data/lib/mtncloud/cli/mixins/storage_servers_helper.rb +93 -0
  435. data/lib/mtncloud/cli/mixins/storage_volumes_helper.rb +76 -0
  436. data/lib/mtncloud/cli/mixins/vdi_helper.rb +246 -0
  437. data/lib/mtncloud/cli/mixins/whoami_helper.rb +73 -0
  438. data/lib/mtncloud/cli/option_parser.rb +127 -0
  439. data/lib/mtncloud/cli/option_types.rb +1622 -0
  440. data/lib/mtncloud/cli/version.rb +6 -0
  441. data/lib/mtncloud/cli.rb +105 -0
  442. data/lib/mtncloud/currency.rb +184 -0
  443. data/lib/mtncloud/ext/hash.rb +109 -0
  444. data/lib/mtncloud/ext/nil_class.rb +5 -0
  445. data/lib/mtncloud/ext/rest_client.rb +37 -0
  446. data/lib/mtncloud/ext/string.rb +66 -0
  447. data/lib/mtncloud/formatters.rb +511 -0
  448. data/lib/mtncloud/logging.rb +185 -0
  449. data/lib/mtncloud/morpkg.rb +119 -0
  450. data/lib/mtncloud/rest_client.rb +104 -0
  451. data/lib/mtncloud/routes.rb +304 -0
  452. data/lib/mtncloud/terminal.rb +528 -0
  453. data/lib/mtncloud/util.rb +29 -0
  454. data/lib/mtncloud.rb +5 -0
  455. data/mtncloud-cli.gemspec +38 -0
  456. data/test/api/affinity_groups_interface_test.rb +43 -0
  457. data/test/api/clients_interface_test.rb +23 -0
  458. data/test/api/clouds_interface_test.rb +67 -0
  459. data/test/api/containers_interface_test.rb +68 -0
  460. data/test/api/host_vm_groups_interface_test.rb +35 -0
  461. data/test/api/instances_interface_test.rb +22 -0
  462. data/test/api/network_routers_interface_test.rb +22 -0
  463. data/test/api/systems_interface_test.rb +26 -0
  464. data/test/api/whoami_interface_test.rb +14 -0
  465. data/test/branding_test.rb +160 -0
  466. data/test/cli/access_token_test.rb +36 -0
  467. data/test/cli/affinity_groups_cloud_cluster_scope_test.rb +270 -0
  468. data/test/cli/affinity_groups_cluster_scope_test.rb +171 -0
  469. data/test/cli/affinity_groups_test.rb +57 -0
  470. data/test/cli/affinity_groups_violations_scope_test.rb +141 -0
  471. data/test/cli/affinity_helper_test.rb +367 -0
  472. data/test/cli/auth_test.rb +88 -0
  473. data/test/cli/backups_test.rb +212 -0
  474. data/test/cli/cli_test.rb +48 -0
  475. data/test/cli/clients_test.rb +45 -0
  476. data/test/cli/clusters_uuid_test.rb +146 -0
  477. data/test/cli/containers_test.rb +92 -0
  478. data/test/cli/distributed_workers_test.rb +68 -0
  479. data/test/cli/help_test.rb +25 -0
  480. data/test/cli/host_vm_groups_cluster_scope_test.rb +187 -0
  481. data/test/cli/host_vm_groups_test.rb +63 -0
  482. data/test/cli/infrastructure_helper_cluster_resolver_test.rb +250 -0
  483. data/test/cli/instances_test.rb +37 -0
  484. data/test/cli/man_test.rb +14 -0
  485. data/test/cli/migrations_test.rb +39 -0
  486. data/test/cli/network_routers_test.rb +65 -0
  487. data/test/cli/remote_test.rb +89 -0
  488. data/test/cli/roles_test.rb +47 -0
  489. data/test/cli/shell_test.rb +81 -0
  490. data/test/cli/storage_volumes_test.rb +79 -0
  491. data/test/cli/systems_test.rb +206 -0
  492. data/test/cli/version_test.rb +23 -0
  493. data/test/cli/view_test.rb +55 -0
  494. data/test/cli/whoami_test.rb +17 -0
  495. data/test/mtncloud_test.rb +16 -0
  496. data/test/test_case.rb +342 -0
  497. data/test/test_config.rb +137 -0
  498. data/test/test_data_helper.rb +97 -0
  499. metadata +807 -0
@@ -0,0 +1,48 @@
1
+ require 'mtncloud_test'
2
+
3
+ # Tests for top level CLI functionality
4
+ class MtnCloudTest::CliTest < MtnCloudTest::TestCase
5
+
6
+ def requires_remote
7
+ false
8
+ end
9
+
10
+ def requires_authentication
11
+ false
12
+ end
13
+
14
+ def test_cli_no_arguments
15
+ assert_error("")
16
+ end
17
+
18
+ def test_cli_unknown_command
19
+ assert_error("unknown_command")
20
+ end
21
+
22
+ def test_cli_unknown_subcommand
23
+ assert_error("instances unknown_subcommand")
24
+ end
25
+
26
+ def test_cli_version_option
27
+ assert_execute("-v")
28
+ assert_execute("--version")
29
+ end
30
+
31
+ def test_cli_nocolor
32
+ assert_execute("version -C")
33
+ assert_execute("echo -C \"disable coloring with the -C option\"")
34
+ # todo: fix bug here that makes this persist for all subsequent terminal commands
35
+ # this re-enavbles it for remainder of tests
36
+ # assert_execute("coloring on?")
37
+ assert_execute("coloring off?")
38
+ assert_execute("coloring")
39
+ end
40
+
41
+ # HelpTest handles this now..
42
+ # def test_help
43
+ # assert_execute("help")
44
+ # assert_execute("-h")
45
+ # assert_execute("--help")
46
+ # end
47
+
48
+ end
@@ -0,0 +1,45 @@
1
+ require 'mtncloud_test'
2
+
3
+ class MtnCloudTest::ClientsTest < MtnCloudTest::TestCase
4
+
5
+ def test_clients_list
6
+ assert_execute %(clients list)
7
+ assert_execute %(clients list "System Admin")
8
+ end
9
+
10
+ # def test_clients_get_system_admin
11
+ # assert_execute %(clients get "System Admin")
12
+ # assert_execute %(clients get "System Admin" --permissions)
13
+ # end
14
+
15
+ def test_clients_get
16
+ record = client.clients.list({})['clients'][0]
17
+ if record
18
+ assert_execute %(clients get "#{record['id']}")
19
+ name_arg = record['clientId']
20
+ assert_execute %(clients get "#{escape_arg name_arg}")
21
+ else
22
+ puts "No client found, unable to execute test `#{__method__}`"
23
+ end
24
+ end
25
+
26
+ def test_clients_get_morph_cli
27
+ assert_execute %(clients get morph-cli)
28
+ end
29
+
30
+ # todo: test all the other commands
31
+
32
+ # def test_clients_add
33
+ # assert_execute %(clients add "test_client_#{random_id}" -N)
34
+ # end
35
+
36
+ # def test_clients_update
37
+ # #skip "Test needs to be added"
38
+ # assert_execute %(clients update "test_client_#{random_id}" --description "neat")
39
+ # end
40
+
41
+ # def test_clients_remove
42
+ # assert_execute %(clients remove "test_client_#{random_id}" -y")
43
+ # end
44
+
45
+ end
@@ -0,0 +1,146 @@
1
+ require 'test/unit'
2
+ require 'stringio'
3
+ require 'mtncloud'
4
+
5
+ # Unit tests for MORPH-15042: cluster uuid support in the clusters command.
6
+ # - clusters get UUID resolves a single cluster via the path endpoint
7
+ # (/api/clusters/{uuid}), not the name query filter.
8
+ # - clusters list --uuid UUID [--uuid UUID ...] filters by one or more uuids.
9
+ #
10
+ # These follow the established pure-unit pattern (a fake ClustersInterface
11
+ # recording calls; Test::Unit::TestCase, no appliance/auth required). See
12
+ # test/cli/affinity_groups_cluster_scope_test.rb for the pattern this mirrors.
13
+ class ClustersUuidTest < Test::Unit::TestCase
14
+ # Records every call so tests can assert exactly what the command requested.
15
+ class FakeClustersInterface
16
+ attr_reader :get_calls, :list_calls
17
+
18
+ def initialize(clusters: [], get_result: nil)
19
+ @clusters = clusters
20
+ @get_result = get_result
21
+ @get_calls = []
22
+ @list_calls = []
23
+ @dry = false
24
+ end
25
+
26
+ def setopts(_options)
27
+ self
28
+ end
29
+
30
+ def dry
31
+ @dry = true
32
+ self
33
+ end
34
+
35
+ def get(arg)
36
+ @get_calls << arg
37
+ @get_result || {'cluster' => {'id' => 42, 'name' => 'k8s-1'}}
38
+ end
39
+
40
+ def list(params = {})
41
+ @list_calls << params
42
+ return {method: :get, url: '/api/clusters', params: params} if @dry
43
+ {'clusters' => @clusters.select {|c| c['name'] == params[:name] }}
44
+ end
45
+ end
46
+
47
+ def setup
48
+ @uuid = 'a1b2c3d4-e5f6-4711-8899-0011223344ff'
49
+ end
50
+
51
+ def test_get_help_documents_multiple_cluster_identifiers
52
+ command, clusters = build_command
53
+ output = capture_stdout do
54
+ error = assert_raise(SystemExit) { command.get(['--help']) }
55
+ assert_equal 0, error.status
56
+ end
57
+ assert_match(/Usage: mtncloud clusters get \[cluster\.\.\.\]/, output)
58
+ assert_include output, 'Get details about one or more clusters.'
59
+ assert_include output, 'At least one [cluster] is required.'
60
+ assert_include output, 'Each identifier can be an id, name, or uuid.'
61
+ assert_include output, 'Supports 1-N [cluster] arguments.'
62
+ assert_empty clusters.get_calls
63
+ assert_empty clusters.list_calls
64
+ end
65
+
66
+ ## find_cluster_by_name_or_id dispatch
67
+
68
+ def test_uuid_resolves_via_path_get_not_name_list
69
+ command, clusters = build_command
70
+ cluster = command.send(:find_cluster_by_name_or_id, @uuid)
71
+ assert_equal 42, cluster['id']
72
+ # The uuid is handed to get as a String path segment, never a name list.
73
+ assert_equal [@uuid], clusters.get_calls
74
+ assert_empty clusters.list_calls
75
+ end
76
+
77
+ def test_numeric_id_still_resolves_via_path_get
78
+ command, clusters = build_command
79
+ command.send(:find_cluster_by_name_or_id, '7')
80
+ assert_equal [7], clusters.get_calls
81
+ assert_empty clusters.list_calls
82
+ end
83
+
84
+ def test_name_still_resolves_via_list_by_name
85
+ managed = {'id' => 9, 'name' => 'prod'}
86
+ command, clusters = build_command([managed])
87
+ cluster = command.send(:find_cluster_by_name_or_id, 'prod')
88
+ assert_equal 9, cluster['id']
89
+ assert_equal [{name: 'prod'}], clusters.list_calls
90
+ assert_empty clusters.get_calls
91
+ end
92
+
93
+ def test_cluster_uuid_predicate
94
+ command, = build_command
95
+ assert command.send(:cluster_uuid?, @uuid)
96
+ assert command.send(:cluster_uuid?, @uuid.upcase)
97
+ assert !command.send(:cluster_uuid?, '7')
98
+ assert !command.send(:cluster_uuid?, 'prod')
99
+ assert !command.send(:cluster_uuid?, 'a1b2c3d4-e5f6-4711-8899-0011223344')
100
+ end
101
+
102
+ ## clusters list --uuid
103
+
104
+ def test_list_with_single_uuid_carries_uuid_param
105
+ command, = build_command
106
+ output = capture_stdout { command.list(['--uuid', @uuid, '--dry-run']) }
107
+ assert_match(/#{Regexp.escape(@uuid)}/, output)
108
+ end
109
+
110
+ def test_list_with_multiple_uuids_carries_all_uuids
111
+ command, = build_command
112
+ other = 'ffeeddcc-bbaa-4998-8776-655443322110'
113
+ output = capture_stdout { command.list(['--uuid', @uuid, '--uuid', other, '--dry-run']) }
114
+ assert_match(/#{Regexp.escape(@uuid)}/, output)
115
+ assert_match(/#{Regexp.escape(other)}/, output)
116
+ end
117
+
118
+ def test_list_without_uuid_has_no_uuid_param
119
+ command, = build_command
120
+ output = capture_stdout { command.list(['--dry-run']) }
121
+ assert_no_match(/uuid/i, output)
122
+ end
123
+
124
+ private
125
+
126
+ def build_command(managed_clusters = [], get_result: nil)
127
+ clusters = FakeClustersInterface.new(clusters: managed_clusters, get_result: get_result)
128
+ command = MtnCloud::Cli::Clusters.new
129
+ command.instance_variable_set(:@clusters_interface, clusters)
130
+ command.define_singleton_method(:connect) do |_options|
131
+ @clusters_interface = clusters
132
+ end
133
+ [command, clusters]
134
+ end
135
+
136
+ def capture_stdout
137
+ terminal = MtnCloud::Terminal.instance
138
+ original = terminal.stdout
139
+ buffer = StringIO.new
140
+ terminal.set_stdout(buffer)
141
+ yield
142
+ buffer.string
143
+ ensure
144
+ terminal.set_stdout(original)
145
+ end
146
+ end
@@ -0,0 +1,92 @@
1
+ require 'mtncloud_test'
2
+ require 'test_data_helper'
3
+
4
+ # Tests for MtnCloud::Cli::Containers
5
+ class MtnCloudTest::ContainersTest < MtnCloudTest::TestCase
6
+
7
+ include MtnCloudTest::TestDataHelper
8
+
9
+ def setup()
10
+ super
11
+ #load_container_test_data()
12
+ end
13
+
14
+ def test_containers_get
15
+ id = find_first_container_id()
16
+ assert_execute %(containers get #{id})
17
+ end
18
+
19
+ # todo: need to wait and refresh status for this to work well
20
+
21
+ =begin
22
+ def test_containers_get_many
23
+ ids = find_many_container_ids().take(5)
24
+ assert_execute %(containers get #{ids.join(' ')})
25
+ end
26
+
27
+ def test_containers_stop
28
+ with_input ["n", "y"] do
29
+ assert_execute %(containers stop #{@id}), exit_code: 9
30
+ assert_execute %(containers stop #{@id})
31
+ end
32
+ end
33
+
34
+ def test_containers_start
35
+ with_input ["n", "y"] do
36
+ assert_execute %(containers start #{@id}), exit_code: 9
37
+ assert_execute %(containers start #{@id})
38
+ end
39
+ end
40
+
41
+ def test_containers_restart
42
+ with_input ["n", "y"] do
43
+ assert_execute %(containers restart #{@id}), exit_code: 9
44
+ assert_execute %(containers restart #{@id})
45
+ end
46
+ end
47
+
48
+ def test_containers_suspend
49
+ with_input ["n", "y"] do
50
+ assert_execute %(containers suspend #{@id}), exit_code: 9
51
+ assert_execute %(containers suspend #{@id})
52
+ end
53
+ end
54
+
55
+ def test_containers_eject
56
+ with_input ["n", "y"] do
57
+ assert_execute %(containers eject #{@id}), exit_code: 9
58
+ assert_execute %(containers eject #{@id})
59
+ end
60
+ end
61
+ =end
62
+
63
+ def test_containers_actions
64
+ @id = find_first_container_id()
65
+ assert_execute %(containers actions #{@id})
66
+ end
67
+
68
+ =begin
69
+ # do not run random actions for now
70
+ # def test_containers_action
71
+ # #action_code = "docker-remove-node"
72
+ # action = client.containers.available_actions(@id)['actions'].first
73
+ # assert action.is_a?(Hash), "Expected to find an action to run"
74
+ # action_code = action['code']
75
+ # assert_execute %(containers action #{@id} -a #{action_code} -y)
76
+ # end
77
+
78
+ def test_containers_import
79
+ with_input ["n", "y"] do
80
+ assert_execute %(containers import #{@id} -N), exit_code: 9
81
+ assert_execute %(containers import #{@id} -N)
82
+ end
83
+ end
84
+
85
+ def test_containers_clone_image
86
+ with_input ["n", "y"] do
87
+ assert_execute %(containers clone-image #{@id} -N), exit_code: 9
88
+ assert_execute %(containers clone-image #{@id} -N)
89
+ end
90
+ end
91
+ =end
92
+ end
@@ -0,0 +1,68 @@
1
+ require 'mtncloud_test'
2
+
3
+ # Tests for MtnCloud::Cli::DistributedWorkers
4
+ class MtnCloudTest::DistributedWorkersTest < MtnCloudTest::TestCase
5
+
6
+ def test_distributed_workers_list
7
+ assert_execute %(distributed-workers list)
8
+ end
9
+
10
+ def test_distributed_workers_crud
11
+ worker_name = "cli-test-dw-#{rand(1000000)}"
12
+ created_id = nil
13
+ begin
14
+ # add and capture output to assert the apiKey is surfaced once
15
+ add_output = capture_stdout do
16
+ assert_execute %(distributed-workers add "#{worker_name}" --description "cli test worker" --enabled -N)
17
+ end
18
+ created_id = client.distributed_workers.list({name: worker_name})['distributedWorkers'].first['id']
19
+ assert_not_nil created_id, "Expected distributed worker to be created"
20
+
21
+ api_key = client.distributed_workers.list({name: worker_name})['distributedWorkers'].first['apiKey']
22
+ assert_nil api_key, "Expected apiKey to be omitted from list responses"
23
+ assert_match(/API Key/i, add_output, "Expected add output to surface the API Key")
24
+
25
+ # appears in list
26
+ assert_match(/#{Regexp.escape(worker_name)}/, capture_stdout { assert_execute %(distributed-workers list --json) })
27
+
28
+ # get by id and by name, apiKey must not be shown
29
+ get_output = capture_stdout do
30
+ assert_execute %(distributed-workers get "#{created_id}")
31
+ assert_execute %(distributed-workers get "#{escape_arg worker_name}")
32
+ end
33
+ refute_match(/API Key/i, get_output, "Expected get output to omit the API Key")
34
+
35
+ # update the description
36
+ assert_execute %(distributed-workers update "#{created_id}" --description "updated description")
37
+ updated = client.distributed_workers.get(created_id)['distributedWorker']
38
+ assert_equal "updated description", updated['description']
39
+
40
+ # remove and confirm it is gone
41
+ assert_execute %(distributed-workers remove "#{created_id}" -y)
42
+ assert_empty client.distributed_workers.list({name: worker_name})['distributedWorkers'],
43
+ "Expected distributed worker to be removed"
44
+ created_id = nil
45
+ ensure
46
+ if created_id
47
+ begin
48
+ client.distributed_workers.destroy(created_id)
49
+ rescue => e
50
+ puts "Failed to clean up distributed worker #{created_id}: #{e.message}"
51
+ end
52
+ end
53
+ end
54
+ end
55
+
56
+ protected
57
+
58
+ def capture_stdout
59
+ original = terminal.stdout
60
+ buffer = StringIO.new
61
+ terminal.set_stdout(buffer)
62
+ yield
63
+ buffer.string
64
+ ensure
65
+ terminal.set_stdout(original)
66
+ end
67
+
68
+ end
@@ -0,0 +1,25 @@
1
+ require 'mtncloud_test'
2
+
3
+ # Tests for help command and global --help option
4
+ class MtnCloudTest::HelpTest < MtnCloudTest::TestCase
5
+
6
+ def requires_authentication
7
+ false
8
+ end
9
+
10
+ def test_help
11
+ assert_execute %(help)
12
+ assert_execute %(-h)
13
+ assert_execute %(--help)
14
+ end
15
+
16
+ def test_subcommand_help
17
+ assert_execute %(remote --help)
18
+ assert_execute %(remote -h)
19
+ assert_execute %(remote use --help)
20
+ assert_execute %(instances list --help)
21
+ assert_execute %(whoami --help)
22
+ assert_execute %(whoami -h)
23
+ end
24
+
25
+ end
@@ -0,0 +1,187 @@
1
+ require 'test/unit'
2
+ require 'stringio'
3
+ require 'mtncloud'
4
+
5
+ # Command-level offline exercise of the MORPH-17279 --cluster scope for
6
+ # HostVmGroupsCommand#list. Parallels affinity_groups_cluster_scope_test.rb:
7
+ # a bare --cluster name must resolve either to a managed cluster (POST/GET under
8
+ # /api/clusters/{id}/...) or, failing that, fall back to a cloud-owned vSphere
9
+ # cluster (ComputeZonePool type=Cluster) and scope the zone request with poolId.
10
+ # A name that matches neither must fail loudly, not exit 1 silently.
11
+ class HostVmGroupsClusterScopeTest < Test::Unit::TestCase
12
+ class FakeCloudsInterface
13
+ attr_reader :calls
14
+
15
+ def initialize(cloud)
16
+ @cloud = cloud
17
+ @calls = []
18
+ @dry = false
19
+ end
20
+
21
+ def setopts(_options)
22
+ self
23
+ end
24
+
25
+ def dry
26
+ @dry = true
27
+ self
28
+ end
29
+
30
+ def get(id, params = {})
31
+ @calls << [:get, id, params]
32
+ {'zone' => @cloud}
33
+ end
34
+
35
+ def list(params = {})
36
+ @calls << [:list, params]
37
+ {'zones' => [@cloud]}
38
+ end
39
+
40
+ def list_host_vm_groups(id, params = {})
41
+ @calls << [:list_host_vm_groups, id, params]
42
+ return {'hostVmGroups' => []} unless @dry
43
+
44
+ {method: :get, url: "/api/zones/#{id}/host-vm-groups", params: params}
45
+ end
46
+ end
47
+
48
+ class FakeResourcePoolsInterface
49
+ attr_reader :calls
50
+
51
+ def initialize(pools)
52
+ @pools = pools
53
+ @calls = []
54
+ end
55
+
56
+ def get(cloud_id, id, params = {})
57
+ @calls << [:get, cloud_id, id, params]
58
+ {'resourcePool' => @pools.find {|p| p['id'].to_i == id.to_i }}
59
+ end
60
+
61
+ def list(cloud_id, params = {})
62
+ @calls << [:list, cloud_id, params]
63
+ {'resourcePools' => @pools}
64
+ end
65
+
66
+ def list_without_cloud(params = {})
67
+ @calls << [:list_without_cloud, params]
68
+ {'resourcePools' => @pools}
69
+ end
70
+ end
71
+
72
+ class FakeClustersInterface
73
+ attr_reader :calls
74
+
75
+ def initialize(clusters = [])
76
+ @clusters = clusters
77
+ @calls = []
78
+ @dry = false
79
+ end
80
+
81
+ def setopts(_options)
82
+ self
83
+ end
84
+
85
+ def dry
86
+ @dry = true
87
+ self
88
+ end
89
+
90
+ def list(params = {})
91
+ @calls << [:list, params]
92
+ {'clusters' => @clusters.select {|cluster| cluster['name'] == params[:name]}}
93
+ end
94
+
95
+ def list_host_vm_groups(id, params = {})
96
+ @calls << [:list_host_vm_groups, id, params]
97
+ return {'hostVmGroups' => []} unless @dry
98
+
99
+ {method: :get, url: "/api/clusters/#{id}/host-vm-groups", params: params}
100
+ end
101
+ end
102
+
103
+ def setup
104
+ @cloud = {'id' => 59, 'name' => 'vCenter Cloud'}
105
+ @pool = {
106
+ 'id' => 501,
107
+ 'name' => 'QA',
108
+ 'type' => 'Cluster',
109
+ 'zone' => @cloud
110
+ }
111
+ end
112
+
113
+ def test_cluster_name_falls_back_to_unique_vsphere_cluster
114
+ command, pools, clusters = build_command
115
+
116
+ output = capture_stdout { command.list(['--cluster', 'QA', '--dry-run']) }
117
+
118
+ assert_match(%r{/api/zones/59/host-vm-groups}, output)
119
+ assert_match(/poolId=501/, output)
120
+ assert_equal [[:list, {name: 'QA'}]], clusters.calls
121
+ assert_equal [
122
+ [:list_without_cloud, {name: 'QA', type: 'Cluster', max: 1000}]
123
+ ], pools.calls
124
+ end
125
+
126
+ def test_managed_cluster_takes_precedence
127
+ managed_cluster = {'id' => 8, 'name' => 'QA'}
128
+ command, pools, clusters = build_command([managed_cluster])
129
+
130
+ output = capture_stdout { command.list(['--cluster', 'QA', '--dry-run']) }
131
+
132
+ assert_match(%r{/api/clusters/8/host-vm-groups}, output)
133
+ assert_equal [
134
+ [:list, {name: 'QA'}],
135
+ [:list_host_vm_groups, 8, {}]
136
+ ], clusters.calls
137
+ assert_empty pools.calls
138
+ end
139
+
140
+ def test_unknown_cluster_name_fails_loudly
141
+ command, _pools, _clusters = build_command([], [])
142
+
143
+ result = nil
144
+ err = capture_stderr do
145
+ capture_stdout { result = command.list(['--cluster', 'nope', '--dry-run']) }
146
+ end
147
+
148
+ assert_equal 1, (result.is_a?(Array) ? result[0] : result)
149
+ assert_match(/No managed or vSphere cluster found by name 'nope'/i, err)
150
+ end
151
+
152
+ private
153
+
154
+ def build_command(managed_clusters = [], pools = nil)
155
+ pools = [@pool] if pools.nil?
156
+ clouds = FakeCloudsInterface.new(@cloud)
157
+ pools_interface = FakeResourcePoolsInterface.new(pools)
158
+ clusters = FakeClustersInterface.new(managed_clusters)
159
+ command = MtnCloud::Cli::HostVmGroupsCommand.new
160
+ command.define_singleton_method(:connect) do |_options|
161
+ @clouds_interface = clouds
162
+ @clusters_interface = clusters
163
+ @cloud_resource_pools_interface = pools_interface
164
+ end
165
+ [command, pools_interface, clusters]
166
+ end
167
+
168
+ def capture_stdout
169
+ terminal = MtnCloud::Terminal.instance
170
+ original = terminal.stdout
171
+ buffer = StringIO.new
172
+ terminal.set_stdout(buffer)
173
+ yield
174
+ buffer.string
175
+ ensure
176
+ terminal.set_stdout(original)
177
+ end
178
+
179
+ def capture_stderr
180
+ original = $stderr
181
+ $stderr = StringIO.new
182
+ yield
183
+ $stderr.string
184
+ ensure
185
+ $stderr = original
186
+ end
187
+ end
@@ -0,0 +1,63 @@
1
+ require 'mtncloud_test'
2
+
3
+ # Tests for MtnCloud::Cli::HostVmGroupsCommand and the cloud-scoped
4
+ # host-vm-group subcommands added to MtnCloud::Cli::Clouds for MORPH-16326.
5
+ #
6
+ # Scope note: these cover only client-side behaviour -- help output and argument
7
+ # validation -- both of which resolve before any API call is made.
8
+ #
9
+ # Tests that would exercise list/get/add/update/remove against the appliance are
10
+ # deliberately omitted until the /api/host-vm-groups request and response
11
+ # contract is confirmed against the MORPH-14136 / MORPH-16074 server work.
12
+ class MtnCloudTest::HostVmGroupsTest < MtnCloudTest::TestCase
13
+
14
+ def test_host_vm_groups_help
15
+ assert_execute %(host-vm-groups --help)
16
+ assert_execute %(host-vm-groups list --help)
17
+ assert_execute %(host-vm-groups get --help)
18
+ assert_execute %(host-vm-groups add --help)
19
+ assert_execute %(host-vm-groups update --help)
20
+ assert_execute %(host-vm-groups remove --help)
21
+ end
22
+
23
+ # The cloud-scoped subcommands must be registered on the clouds command.
24
+ def test_clouds_host_vm_group_subcommands_help
25
+ assert_execute %(clouds list-host-vm-groups --help)
26
+ assert_execute %(clouds get-host-vm-group --help)
27
+ assert_execute %(clouds add-host-vm-group --help)
28
+ assert_execute %(clouds update-host-vm-group --help)
29
+ assert_execute %(clouds remove-host-vm-group --help)
30
+ end
31
+
32
+ ## Argument validation (fails during option parsing, before any request)
33
+
34
+ def test_host_vm_groups_unknown_subcommand
35
+ assert_error %(host-vm-groups nonsense-subcommand)
36
+ end
37
+
38
+ def test_host_vm_groups_get_requires_an_id
39
+ assert_error %(host-vm-groups get)
40
+ end
41
+
42
+ def test_host_vm_groups_remove_requires_an_id
43
+ assert_error %(host-vm-groups remove -y)
44
+ end
45
+
46
+ def test_clouds_list_host_vm_groups_requires_a_cloud
47
+ assert_error %(clouds list-host-vm-groups)
48
+ end
49
+
50
+ def test_clouds_get_host_vm_group_requires_both_args
51
+ assert_error %(clouds get-host-vm-group 1)
52
+ end
53
+
54
+ # No unscoped list/create route at /api/host-vm-groups.
55
+ def test_host_vm_groups_list_requires_a_scope
56
+ assert_error %(host-vm-groups list)
57
+ end
58
+
59
+ def test_host_vm_groups_add_requires_a_scope
60
+ assert_error %(host-vm-groups add --name cli-test --dry-run)
61
+ end
62
+
63
+ end