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,250 @@
1
+ require 'test/unit'
2
+ require 'stringio'
3
+ require 'json'
4
+ require 'mtncloud'
5
+
6
+ # Unit tests for the MORPH-17279 cloud-owned vSphere cluster resolver added to
7
+ # MtnCloud::Cli::InfrastructureHelper:
8
+ # find_resource_pool_cluster_by_name_or_id / _by_id / _by_name
9
+ #
10
+ # These are pure unit tests against a fake CloudResourcePoolsInterface. They
11
+ # deliberately do NOT extend MtnCloudTest::TestCase because they require no
12
+ # appliance, no remote and no authentication - they must always be runnable.
13
+ # See test/cli/affinity_helper_test.rb for the established pattern this
14
+ # follows.
15
+ #
16
+ # Bug context: --cloud CLOUD --cluster CLUSTER must resolve CLUSTER as a
17
+ # ComputeZonePool(type='Cluster') owned by CLOUD, distinct from the managed
18
+ # cluster (ComputeServerGroup) namespace resolved via ClustersInterface. A
19
+ # name lookup that traverses ambiguous, wrong-cloud or wrong-type pools must
20
+ # fail loudly instead of returning nil silently or the wrong pool.
21
+ class InfrastructureHelperClusterResolverTest < Test::Unit::TestCase
22
+
23
+ # Fake standing in for MtnCloud::CloudResourcePoolsInterface. Records every
24
+ # call so tests can assert exactly what was requested, mirroring the
25
+ # dry-run request assertions used elsewhere in this suite.
26
+ class FakeResourcePoolsInterface
27
+ attr_reader :get_calls, :list_calls
28
+
29
+ def initialize(get_result: nil, get_error: nil, list_result: nil)
30
+ @get_result = get_result
31
+ @get_error = get_error
32
+ @list_result = list_result
33
+ @get_calls = []
34
+ @list_calls = []
35
+ end
36
+
37
+ def get(cloud_id, id, params = {})
38
+ @get_calls << [cloud_id, id, params]
39
+ raise @get_error if @get_error
40
+ @get_result
41
+ end
42
+
43
+ def list(cloud_id, params = {})
44
+ @list_calls << [cloud_id, params]
45
+ @list_result
46
+ end
47
+ end
48
+
49
+ class FakeClustersInterface
50
+ def initialize(get_result: nil, get_error: nil, list_result: nil)
51
+ @get_result = get_result
52
+ @get_error = get_error
53
+ @list_result = list_result || {'clusters' => []}
54
+ end
55
+
56
+ def get(id)
57
+ raise @get_error if @get_error
58
+ @get_result
59
+ end
60
+
61
+ def list(params = {})
62
+ @list_result
63
+ end
64
+ end
65
+
66
+ # Bare host for the mixin under test.
67
+ class HelperHost
68
+ include MtnCloud::Cli::InfrastructureHelper
69
+
70
+ def initialize(fake_interface, clusters_interface=nil)
71
+ @cloud_resource_pools_interface = fake_interface
72
+ @clusters_interface = clusters_interface if clusters_interface
73
+ end
74
+ end
75
+
76
+ def fake_not_found_error
77
+ response = Object.new
78
+ def response.code; 404; end
79
+ RestClient::Exception.new(response)
80
+ end
81
+
82
+ def fake_server_error
83
+ response = Object.new
84
+ def response.code; 500; end
85
+ RestClient::Exception.new(response)
86
+ end
87
+
88
+ def cloud
89
+ {'id' => 59, 'name' => 'vCenter Cloud'}
90
+ end
91
+
92
+ # print_red_alert writes straight to $stderr (print_helper.rb) - capture it.
93
+ def capture_stderr
94
+ original = $stderr
95
+ $stderr = StringIO.new
96
+ yield
97
+ $stderr.string
98
+ ensure
99
+ $stderr = original
100
+ end
101
+
102
+ ## find_resource_pool_cluster_by_id
103
+
104
+ def test_find_by_id_returns_the_pool_when_it_is_a_cluster_in_the_cloud
105
+ fake = FakeResourcePoolsInterface.new(get_result: {
106
+ 'resourcePool' => {'id' => 501, 'name' => 'QA', 'type' => 'Cluster', 'zone' => {'id' => 59, 'name' => 'vCenter Cloud'}}
107
+ })
108
+ helper = HelperHost.new(fake)
109
+ pool = helper.find_resource_pool_cluster_by_id(cloud, 501)
110
+ assert_not_nil pool
111
+ assert_equal 501, pool['id']
112
+ assert_equal 'QA', pool['name']
113
+ # Scoped to the cloud -- the server itself enforces ownership.
114
+ assert_equal [[59, 501, {}]], fake.get_calls
115
+ end
116
+
117
+ # ZoneResourcePoolsController#show 404s when the pool's zone does not match
118
+ # the requested cloud -- this is the server-side cloud-ownership check.
119
+ def test_find_by_id_reports_not_found_on_404_without_raising
120
+ fake = FakeResourcePoolsInterface.new(get_error: fake_not_found_error)
121
+ helper = HelperHost.new(fake)
122
+ pool = nil
123
+ output = capture_stderr { pool = helper.find_resource_pool_cluster_by_id(cloud, 999) }
124
+ assert_nil pool
125
+ assert_match(/not found by id 999/i, output)
126
+ assert_match(/vCenter Cloud/, output)
127
+ end
128
+
129
+ # A non-404 failure (auth, server error, etc.) must not be swallowed as a
130
+ # not-found -- that would hide a real problem behind a wrong error message.
131
+ def test_find_by_id_reraises_non_404_errors
132
+ fake = FakeResourcePoolsInterface.new(get_error: fake_server_error)
133
+ helper = HelperHost.new(fake)
134
+ assert_raise(RestClient::Exception) { helper.find_resource_pool_cluster_by_id(cloud, 501) }
135
+ end
136
+
137
+ def test_find_by_id_rejects_a_non_cluster_resource_pool
138
+ fake = FakeResourcePoolsInterface.new(get_result: {
139
+ 'resourcePool' => {'id' => 501, 'name' => 'Folder A', 'type' => 'ResourcePool', 'zone' => {'id' => 59, 'name' => 'vCenter Cloud'}}
140
+ })
141
+ helper = HelperHost.new(fake)
142
+ pool = nil
143
+ output = capture_stderr { pool = helper.find_resource_pool_cluster_by_id(cloud, 501) }
144
+ assert_nil pool
145
+ assert_match(/not a Cluster/i, output)
146
+ assert_match(/ResourcePool/, output)
147
+ end
148
+
149
+ ## find_resource_pool_cluster_by_name
150
+
151
+ def test_find_by_name_returns_the_single_match
152
+ fake = FakeResourcePoolsInterface.new(list_result: {
153
+ 'resourcePools' => [
154
+ {'id' => 501, 'name' => 'QA', 'type' => 'Cluster'},
155
+ ]
156
+ })
157
+ helper = HelperHost.new(fake)
158
+ pool = helper.find_resource_pool_cluster_by_name(cloud, 'QA')
159
+ assert_not_nil pool
160
+ assert_equal 501, pool['id']
161
+ assert_equal [[59, {name: 'QA', type: 'Cluster'}]], fake.list_calls
162
+ end
163
+
164
+ def test_find_by_name_matches_on_display_name
165
+ fake = FakeResourcePoolsInterface.new(list_result: {
166
+ 'resourcePools' => [
167
+ {'id' => 501, 'name' => 'internal-qa-01', 'displayName' => 'QA', 'type' => 'Cluster'},
168
+ ]
169
+ })
170
+ helper = HelperHost.new(fake)
171
+ pool = helper.find_resource_pool_cluster_by_name(cloud, 'QA')
172
+ assert_not_nil pool
173
+ assert_equal 501, pool['id']
174
+ end
175
+
176
+ def test_find_by_name_reports_not_found_with_a_managed_cluster_hint
177
+ fake = FakeResourcePoolsInterface.new(list_result: {'resourcePools' => []})
178
+ helper = HelperHost.new(fake)
179
+ pool = nil
180
+ output = capture_stderr { pool = helper.find_resource_pool_cluster_by_name(cloud, 'QA') }
181
+ assert_nil pool
182
+ assert_match(/not found by name 'QA'/i, output)
183
+ assert_match(/vCenter Cloud/, output)
184
+ assert_match(/--cluster 'QA' without --cloud/, output)
185
+ end
186
+
187
+ # The cloud-scoped resource-pools endpoint returns a pool *tree*: when the
188
+ # matched pool has a parent folder, ancestor entries are backfilled into the
189
+ # result so the hierarchy renders, even though they do not match the
190
+ # name/type filter. The resolver must not misreport this as ambiguity.
191
+ def test_find_by_name_ignores_ancestor_tree_padding
192
+ fake = FakeResourcePoolsInterface.new(list_result: {
193
+ 'resourcePools' => [
194
+ {'id' => 10, 'name' => 'Datacenter Folder', 'type' => 'Folder', 'depth' => 0},
195
+ {'id' => 501, 'name' => 'QA', 'type' => 'Cluster', 'depth' => 1},
196
+ ]
197
+ })
198
+ helper = HelperHost.new(fake)
199
+ pool = helper.find_resource_pool_cluster_by_name(cloud, 'QA')
200
+ assert_not_nil pool, "the ancestor folder must not be counted as a second match"
201
+ assert_equal 501, pool['id']
202
+ end
203
+
204
+ def test_find_by_name_reports_ambiguity_with_candidates_and_requires_numeric_id
205
+ fake = FakeResourcePoolsInterface.new(list_result: {
206
+ 'resourcePools' => [
207
+ {'id' => 501, 'name' => 'QA', 'type' => 'Cluster'},
208
+ {'id' => 502, 'name' => 'QA', 'type' => 'Cluster'},
209
+ ]
210
+ })
211
+ helper = HelperHost.new(fake)
212
+ pool = nil
213
+ output = capture_stderr { pool = helper.find_resource_pool_cluster_by_name(cloud, 'QA') }
214
+ assert_nil pool
215
+ assert_match(/2 clusters found by name 'QA'/i, output)
216
+ assert_match(/numeric cluster id/i, output)
217
+ end
218
+
219
+ ## find_resource_pool_cluster_by_name_or_id dispatch
220
+
221
+ def test_find_by_name_or_id_dispatches_numeric_strings_to_by_id
222
+ fake = FakeResourcePoolsInterface.new(get_result: {
223
+ 'resourcePool' => {'id' => 501, 'name' => 'QA', 'type' => 'Cluster', 'zone' => {'id' => 59}}
224
+ })
225
+ helper = HelperHost.new(fake)
226
+ pool = helper.find_resource_pool_cluster_by_name_or_id(cloud, '501')
227
+ assert_not_nil pool
228
+ assert_equal 1, fake.get_calls.size
229
+ assert_equal 0, fake.list_calls.size
230
+ end
231
+
232
+ def test_find_by_name_or_id_dispatches_non_numeric_strings_to_by_name
233
+ fake = FakeResourcePoolsInterface.new(list_result: {
234
+ 'resourcePools' => [{'id' => 501, 'name' => 'QA', 'type' => 'Cluster'}]
235
+ })
236
+ helper = HelperHost.new(fake)
237
+ pool = helper.find_resource_pool_cluster_by_name_or_id(cloud, 'QA')
238
+ assert_not_nil pool
239
+ assert_equal 0, fake.get_calls.size
240
+ assert_equal 1, fake.list_calls.size
241
+ end
242
+
243
+ def test_managed_cluster_lookup_reraises_non_404_errors
244
+ pools = FakeResourcePoolsInterface.new
245
+ clusters = FakeClustersInterface.new(get_error: fake_server_error)
246
+ helper = HelperHost.new(pools, clusters)
247
+ assert_raise(RestClient::Exception) { helper.find_managed_cluster_by_name_or_id('8') }
248
+ end
249
+
250
+ end
@@ -0,0 +1,37 @@
1
+ require 'mtncloud_test'
2
+
3
+ # Tests for MtnCloud::Cli::Instances
4
+ class MtnCloudTest::InstancesTest < MtnCloudTest::TestCase
5
+
6
+ def test_instances_list
7
+ assert_execute %(instances list)
8
+ end
9
+
10
+ def test_instances_get
11
+ instance = client.instances.list({})['instances'][0]
12
+ if instance
13
+ assert_execute %(instances get "#{instance['id']}")
14
+ name_arg = instance['displayName'] || instance['name']
15
+ assert_execute %(instances get "#{escape_arg name_arg}")
16
+ else
17
+ puts "No instance found, unable to execute test `#{__method__}`"
18
+ end
19
+ end
20
+
21
+ # def test_instances_add
22
+ # warn "Skipped test test_instances_add() because it is not implemented"
23
+ # end
24
+
25
+ # def test_instances_update
26
+ # warn "Skipped test test_instances_update() because it is not implemented"
27
+ # end
28
+
29
+ # def test_instances_delete
30
+ # warn "Skipped test test_instances_remove() because it is not implemented"
31
+ # end
32
+
33
+ # todo: many more instance commands to add
34
+
35
+ protected
36
+
37
+ end
@@ -0,0 +1,14 @@
1
+ require 'mtncloud_test'
2
+
3
+ class MtnCloudTest::ManTest < MtnCloudTest::TestCase
4
+
5
+ def test_man
6
+ # need to use -q to avoid interactive right now...
7
+ assert_execute("man -q")
8
+ assert_execute("man -g -q")
9
+ assert_execute("man -q")
10
+ man_file_path = MtnCloud::Cli::ManCommand.man_file_path
11
+ assert(File.exist?(man_file_path), "File #{man_file_path} should have been created.")
12
+ end
13
+
14
+ end
@@ -0,0 +1,39 @@
1
+ require 'mtncloud_test'
2
+
3
+ class MtnCloudTest::MigrationsTest < MtnCloudTest::TestCase
4
+
5
+ def test_migrations_list
6
+ assert_execute %(migrations list)
7
+ assert_execute %(migrations list "apitest")
8
+ end
9
+
10
+ def test_migrations_get
11
+ # migration = client.migrations.list({})['migrations'][0]
12
+ migration = client.migrations.list({})['migrations'].find {|r| r['authority'] !~ /\A\d+\Z/}
13
+ if migration
14
+ assert_execute %(migrations get "#{migration['id']}")
15
+ # beware that duplicates may exist
16
+ name_arg = migration['name']
17
+ assert_execute %(migrations get "#{escape_arg name_arg}")
18
+ else
19
+ puts "No migration found, unable to execute test `#{__method__}`"
20
+ end
21
+ end
22
+
23
+
24
+ # todo: test all the other commands
25
+
26
+ # def test_migrations_add
27
+ # assert_execute %(migrations add "test_migration_#{random_id}" -N)
28
+ # end
29
+
30
+ # def test_migrations_update
31
+ # #skip "Test needs to be added"
32
+ # assert_execute %(migrations update "test_migration_#{random_id}" --description "neat")
33
+ # end
34
+
35
+ # def test_migrations_remove
36
+ # assert_execute %(migrations remove "test_migration_#{random_id}" -y")
37
+ # end
38
+
39
+ end
@@ -0,0 +1,65 @@
1
+ require 'mtncloud_test'
2
+
3
+ # Tests for MtnCloud::Cli::NetworkRouters
4
+ class MtnCloudTest::NetworkRoutersTest < MtnCloudTest::TestCase
5
+
6
+ def test_network_routers_list
7
+ assert_execute %(network-routers list)
8
+ end
9
+
10
+ def test_network_routers_get
11
+ # find one that does not have a duplicate name..so we can get it by name
12
+ #network_router = client.network_routers.list({})['networkRouters'][0]
13
+ network_routers = client.network_routers.list({})['networkRouters']
14
+ network_router = network_routers.find {|it| !(network_routers.find {|other| other['name'] == it['name'] }) }
15
+ if network_router
16
+ assert_execute %(network-routers get "#{network_router['id']}")
17
+ assert_execute %(network-routers get "#{escape_arg network_router['name']}")
18
+ else
19
+ puts "No network routers found, unable to execute test `#{__method__}`"
20
+ end
21
+ end
22
+
23
+ def test_network_routers_firewall_rules
24
+ network_router = client.network_routers.list({})['networkRouters'].find {|it| it['firewall'] }
25
+ if network_router
26
+ assert_execute %(network-routers firewall-rules "#{network_router['id']}")
27
+ else
28
+ puts "No network routers found with a firewall, unable to execute test `#{__method__}`"
29
+ end
30
+ end
31
+
32
+ def test_network_routers_firewall_rules_get
33
+ network_router = client.network_routers.list({})['networkRouters'].find {|it| it['firewall'] }
34
+ if network_router
35
+ # need to get by id to get the firewall rules
36
+ network_router = client.network_routers.get(network_router['id'])['networkRouter']
37
+ rules = network_router['type']['hasFirewallGroups'] ? (network_router['firewall']['ruleGroups'] || []).collect {|it| it['rules']}.flatten : network_router['firewall']['rules']
38
+ rule = rules[0]
39
+ if rule
40
+ assert_execute %(network-routers firewall-rule "#{network_router['id']}" "#{rule['id']}")
41
+ else
42
+ puts "No network router firewall rules found, unable to execute test `#{__method__}`"
43
+ end
44
+ else
45
+ puts "No network routers found with a firewall, unable to execute test `#{__method__}`"
46
+ end
47
+ end
48
+
49
+ # def test_network_routers_add
50
+ # warn "Skipped test test_network_routers_add() because it is not implemented"
51
+ # end
52
+
53
+ # def test_network_routers_update
54
+ # warn "Skipped test test_network_routers_update() because it is not implemented"
55
+ # end
56
+
57
+ # def test_network_routers_delete
58
+ # warn "Skipped test test_network_routers_remove() because it is not implemented"
59
+ # end
60
+
61
+ # todo: many more network-routers commands to add
62
+
63
+ protected
64
+
65
+ end
@@ -0,0 +1,89 @@
1
+ require 'mtncloud_test'
2
+
3
+ # Tests for MtnCloud::Cli::Remote
4
+ class MtnCloudTest::RemoteTest < MtnCloudTest::TestCase
5
+
6
+ def requires_remote
7
+ false
8
+ end
9
+
10
+ def requires_authentication
11
+ false
12
+ end
13
+
14
+ def setup
15
+ super()
16
+ @@test_remote_name ||= "test_remote_#{SecureRandom.hex(10)}"
17
+ end
18
+
19
+ def teardown
20
+ # switch back aftwards
21
+ assert_execute %(remote use "#{escape_arg @config.remote_name}")
22
+ end
23
+
24
+ def test_remote_add
25
+ assert_execute %(remote add "#{@@test_remote_name}" "#{escape_arg @config.url}" --insecure --use -N)
26
+ end
27
+
28
+ def test_remote_list
29
+ assert_execute %(remote list)
30
+ assert_execute %(remote list "#{@@test_remote_name}")
31
+ end
32
+
33
+ def test_remote_get
34
+ assert_execute %(remote get)
35
+ assert_execute %(remote get current)
36
+ assert_execute %(remote get "#{@@test_remote_name}")
37
+ assert_execute %(remote get "#{@@test_remote_name}" --offline)
38
+ end
39
+
40
+ def test_remote_current
41
+ assert_execute %(remote current)
42
+ end
43
+
44
+ def test_remote_version
45
+ assert_execute %(remote version)
46
+ #assert_execute %(remote version "#{@@test_remote_name}")
47
+ end
48
+
49
+ def test_remote_check
50
+ assert_execute %(remote check)
51
+ assert_execute %(remote check "#{@@test_remote_name}")
52
+ end
53
+
54
+ def test_remote_check_all
55
+ assert_execute %(remote check-all)
56
+ end
57
+
58
+ def test_remote_update
59
+ assert_execute %(remote update "#{@@test_remote_name}" --url "#{escape_arg @config.url}" --insecure)
60
+ #assert_execute %(remote update "#{@@test_remote_name}" --name "#{@@test_remote_name}_updated")
61
+ #assert_execute %(remote update "#{@@test_remote_name}_updated" --name "#{@@test_remote_name}")
62
+ end
63
+
64
+ def test_remote_rename
65
+ assert_execute %(remote rename "#{@@test_remote_name}" "#{@@test_remote_name}_renamed" -y)
66
+ assert_execute %(remote rename "#{@@test_remote_name}_renamed" "#{@@test_remote_name}" -y)
67
+ end
68
+
69
+ def test_remote_use
70
+ assert_error %(remote use)
71
+ assert_error %(remote use unknown_remote)
72
+ assert_execute %(remote use "#{@@test_remote_name}")
73
+ assert_execute %(remote use "#{@@test_remote_name}")
74
+ assert_execute %(remote get current)
75
+ assert_execute %(remote unuse)
76
+ assert_error %(remote get current)
77
+ assert_execute %(remote use "#{@@test_remote_name}" -q)
78
+ end
79
+
80
+ def test_remote_remove
81
+ # test remove confirmation reploy of n or no
82
+ with_input(["n", "No"]) do
83
+ assert_error %(remote remove "#{@@test_remote_name}")
84
+ assert_error %(remote remove "#{@@test_remote_name}")
85
+ end
86
+ assert_execute %(remote remove "#{@@test_remote_name}" -y)
87
+ end
88
+
89
+ end
@@ -0,0 +1,47 @@
1
+ require 'mtncloud_test'
2
+
3
+ class MtnCloudTest::RolesTest < MtnCloudTest::TestCase
4
+
5
+ def test_roles_list
6
+ assert_execute %(roles list)
7
+ assert_execute %(roles list "System Admin")
8
+ end
9
+
10
+ # def test_roles_get_system_admin
11
+ # assert_execute %(roles get "System Admin")
12
+ # assert_execute %(roles get "System Admin" --permissions)
13
+ # end
14
+
15
+ def test_roles_get
16
+ # role = client.roles.list({})['roles'][0]
17
+ role = client.roles.list({})['roles'].find {|r| r['authority'] !~ /\A\d+\Z/}
18
+ if role
19
+ assert_execute %(roles get "#{role['id']}")
20
+ name_arg = role['authority']
21
+ assert_execute %(roles get "#{escape_arg name_arg}")
22
+ assert_execute %(roles get "#{escape_arg name_arg}" --permissions)
23
+ else
24
+ puts "No role found, unable to execute test `#{__method__}`"
25
+ end
26
+ end
27
+
28
+ def test_roles_list_permissions
29
+ assert_execute %(roles list-permissions "System Admin")
30
+ end
31
+
32
+ # todo: test all the other commands
33
+
34
+ # def test_roles_add
35
+ # assert_execute %(roles add "test_role_#{random_id}" -N)
36
+ # end
37
+
38
+ # def test_roles_update
39
+ # #skip "Test needs to be added"
40
+ # assert_execute %(roles update "test_role_#{random_id}" --description "neat")
41
+ # end
42
+
43
+ # def test_roles_remove
44
+ # assert_execute %(roles remove "test_role_#{random_id}" -y")
45
+ # end
46
+
47
+ end
@@ -0,0 +1,81 @@
1
+ require 'mtncloud_test'
2
+
3
+ class MtnCloudTest::ShellTest < MtnCloudTest::TestCase
4
+
5
+ def requires_remote
6
+ false
7
+ end
8
+
9
+ def requires_authentication
10
+ false
11
+ end
12
+
13
+ # class << self
14
+ # def startup
15
+ # # one time use remote and login at beginning of testsuite, not each method
16
+ # use_remote()
17
+ # login()
18
+ # end
19
+ # end
20
+
21
+ # def test_remote_use
22
+ # # use remote needed for all except test_shell_clean() , todo: exclude paradigm that yet..
23
+ # use_remote()
24
+ # end
25
+
26
+ def test_shell
27
+ with_input "exit" do
28
+ assert_execute "shell"
29
+ end
30
+ end
31
+
32
+ def test_shell_verbose
33
+ login_if_needed()
34
+ with_input "whoami", "exit" do
35
+ assert_execute "shell -V"
36
+ end
37
+ end
38
+
39
+ def test_shell_history
40
+ with_input "history", "exit" do
41
+ assert_execute "shell"
42
+ end
43
+ end
44
+
45
+ def test_shell_sleep
46
+ with_input "echo \"It is time for a rest.\"", "sleep 0.5", "echo \"OK, let's keep testing\"", "exit" do
47
+ assert_execute "shell -V"
48
+ end
49
+ end
50
+
51
+ def test_shell_temporary
52
+ with_input "remote list", "remote current", "echo this is a temporary shell with no history", "history", "exit" do
53
+ assert_execute "shell -Z -V"
54
+ end
55
+ end
56
+
57
+ def test_shell_confirmation
58
+ with_input "access-token refresh", "I'm not sure...", "no", "exit" do
59
+ assert_execute "shell -Z -V"
60
+ end
61
+ end
62
+
63
+ # todo: fix bug where appliances are not restored after clean shell.. so remote use #{@config.remote_name}" starts failing here..
64
+ =begin
65
+ def test_shell_clean
66
+ with_input "echo this is a clean shell with no remotes or history", "remote list", "remote current", "history", "exit" do
67
+ assert_execute "shell -z"
68
+ end
69
+ with_input "echo this is another clean shell", "exit" do
70
+ assert_execute "shell --clean"
71
+ end
72
+ end
73
+
74
+ def test_shell_history_again
75
+ with_input "echo back in test shell again with our remote and history", "remote get #{@config.remote_name}", "history", "exit" do
76
+ assert_execute "shell"
77
+ end
78
+ end
79
+ =end
80
+
81
+ end