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,528 @@
1
+ #require 'mtncloud/cli' #todo: remove circular require...
2
+ require 'mtncloud/benchmarking'
3
+ require 'mtncloud/logging'
4
+ require 'mtncloud/rest_client'
5
+ require 'mtncloud/cli/cli_registry'
6
+ require 'mtncloud/cli/dot_file'
7
+ require 'mtncloud/cli/error_handler'
8
+ require 'mtncloud/cli/expression_parser'
9
+ require 'mtncloud/cli/option_parser'
10
+ require 'mtncloud/cli/version'
11
+ require 'term/ansicolor'
12
+
13
+ module MtnCloud
14
+
15
+ # Terminal is a class for executing mtncloud commands
16
+ # The default IO is STDIN, STDOUT, STDERR
17
+ # The default home directory is $HOME/.mtncloud
18
+ #
19
+ # ==== Example Usage
20
+ #
21
+ # require 'mtncloud/terminal'
22
+ #
23
+ # # Write output to STDOUT is the default behavior
24
+ #
25
+ # terminal = MtnCloud::Terminal.new
26
+ # exit_code, err = terminal.execute("instances list -m 10")
27
+ # assert exit_code == 0
28
+ # assert err == nil
29
+ #
30
+ # # Write command output to a file instead
31
+ # terminal = MtnCloud::Terminal.new(stdout: File.new("mtncloud-terminal.log", "w+"))
32
+ # terminal.execute("version")
33
+ # terminal.execute("instances list")
34
+ # terminal.execute("apps list")
35
+ #
36
+ # # Overwrite file with output of a command
37
+ # terminal = MtnCloud::Terminal.new(stdout: File.new("instance23.json", "w"))
38
+ # terminal.execute("instances get 23 --json")
39
+ # puts "Instance 23 Details: ", File.read("instance23.json")
40
+ #
41
+ class Terminal
42
+ include MtnCloud::Benchmarking::HasBenchmarking
43
+ # todo: this can be combined with Cli::Shell
44
+
45
+ class Blackhole # < File
46
+
47
+ def initialize(*args)
48
+ # we shouldn't actually need a File tho.. but Readline wants one
49
+ # File.open(MtnCloud::Cli.windows? ? 'NUL:' : '/dev/null', 'w')
50
+ end
51
+
52
+ def accrete_data(*mgs)
53
+ # Singularity.push(*msgs)
54
+ return nil
55
+ end
56
+ alias :print :accrete_data
57
+ alias :puts :accrete_data
58
+ alias :'<<' :accrete_data
59
+ alias :write :accrete_data
60
+ alias :write :accrete_data
61
+ # alias :gets :do_nothing
62
+ end
63
+
64
+ # DEFAULT_TERMINAL_WIDTH = 80
65
+
66
+ def self.default_color
67
+ Term::ANSIColor.cyan
68
+ end
69
+
70
+ def self.prompt
71
+ if !defined?(@prompt) || @prompt.nil?
72
+ if ENV['MTNCLOUD_PS1']
73
+ @prompt = ENV['MTNCLOUD_PS1'].dup
74
+ else
75
+ #ENV['MTNCLOUD_PS1'] = "#{Term::ANSIColor.cyan}mtncloud>#{Term::ANSIColor.reset} "
76
+ @prompt = "#{Term::ANSIColor.cyan}#{MtnCloud::Cli.prog_name}>#{Term::ANSIColor.reset} "
77
+ end
78
+ end
79
+ @prompt
80
+ end
81
+
82
+ def self.prompt=(v)
83
+ @prompt = v
84
+ end
85
+
86
+ def self.angry_prompt
87
+ "#{Term::ANSIColor.red}#{MtnCloud::Cli.prog_name}:#{Term::ANSIColor.reset} "
88
+ end
89
+
90
+ def self.custom_prompt
91
+ #export MTNCLOUD_PS1='\[\e[1;32m\]\u@\h:\w${text}$\[\e[m\] '
92
+ end
93
+
94
+ # def self.benchmarking=(v)
95
+ # @benchmarking = !!v
96
+ # end
97
+
98
+ # the global MtnCloud::Terminal instance
99
+ # This should go away, but it needed for now...
100
+ def self.instance
101
+ @morphterm ||= self.new({})
102
+ end
103
+
104
+ # hack alert! This should go away, but is needed for now...
105
+ def self.new(*args)
106
+ obj = super(*args)
107
+ @morphterm = obj
108
+ obj
109
+ end
110
+
111
+ attr_accessor :prompt #, :angry_prompt
112
+ attr_accessor :benchmarking
113
+ attr_reader :stdin, :stdout, :stderr, :home_directory
114
+
115
+
116
+ # Create a new instance of MtnCloud::Terminal
117
+ # @param stdin [IO] Default is STDIN
118
+ # @param stdout [IO] Default is STDOUT
119
+ # @param stderr [IO] Default is STDERR
120
+ # @param [IO] stderr
121
+ # @stderr = stderr
122
+ def initialize(stdin=$stdin,stdout=$stdout, stderr=$stderr, homedir=nil)
123
+ attrs = {}
124
+ if stdin.is_a?(Hash)
125
+ attrs = stdin.clone()
126
+ stdin = attrs[:stdin] || $stdin
127
+ stdout = attrs[:stdout] || $stdout
128
+ stderr = attrs[:stderr] || $stderr
129
+ homedir = attrs[:homedir] || attrs[:home] || attrs[:home_directory]
130
+ end
131
+ # establish IO
132
+ # @stdin, @stdout, @stderr = stdin, stdout, stderr
133
+ set_stdin(stdin)
134
+ set_stdout(stdout)
135
+ set_stderr(stderr)
136
+
137
+ # establish home directory
138
+ use_homedir = homedir || ENV['MTNCLOUD_CLI_HOME'] || File.join(Dir.home, ".mtncloud")
139
+ set_home_directory(use_homedir)
140
+
141
+ # use colors by default
142
+ set_coloring($stdout.isatty) #rescue nil
143
+ # Term::ANSIColor::coloring = STDOUT.isatty
144
+ # @coloring = Term::ANSIColor::coloring?
145
+
146
+ # startup script
147
+ if File.exist? MtnCloud::Cli::DotFile.mtncloud_profile_filename
148
+ @profile_dot_file = MtnCloud::Cli::DotFile.new(MtnCloud::Cli::DotFile.mtncloud_profile_filename)
149
+ else
150
+ @profile_dot_file = nil
151
+ end
152
+
153
+ # the string to prompt for input with
154
+ @prompt ||= MtnCloud::Terminal.prompt
155
+ @angry_prompt ||= MtnCloud::Terminal.angry_prompt
156
+ end
157
+
158
+ def to_s
159
+ "<##{self.class}:#{self.object_id.to_s(8)} @stdin=#{@stdin} @stdout=#{@base_url} @stderr=#{@stderr} @home=#{@home_directory} @prompt=#{@prompt} >"
160
+ end
161
+
162
+ def inspect
163
+ to_s
164
+ end
165
+
166
+ # execute .mtncloud_profile startup script
167
+ def execute_profile_script(rerun=false)
168
+ if @profile_dot_file
169
+ if rerun || !@profile_dot_file_has_run
170
+ @profile_dot_file_has_run = true
171
+ return @profile_dot_file.execute() # todo: pass io in here
172
+ else
173
+ return false # already run
174
+ end
175
+ else
176
+ return nil
177
+ end
178
+ end
179
+
180
+ def set_stdin(io)
181
+ # if io.nil? || io == 'blackhole' || io == '/dev/null'
182
+ # @stdout = MtnCloud::Terminal::Blackhole.new
183
+ # else
184
+ # @stdout = io
185
+ # end
186
+ @stdin = io
187
+ end
188
+
189
+ def set_stdout(io)
190
+ if io.nil? || io == 'blackhole' || io == '/dev/null'
191
+ @stdout = MtnCloud::Terminal::Blackhole.new
192
+ else
193
+ @stdout = io
194
+ end
195
+ @stdout
196
+ end
197
+
198
+ def set_stderr(io)
199
+ if io.nil? || io == 'blackhole' || io == '/dev/null'
200
+ @stderr = MtnCloud::Terminal::Blackhole.new
201
+ else
202
+ @stderr = io
203
+ end
204
+ @stderr
205
+ end
206
+
207
+ def with_pipes(opts, &block)
208
+ originals = {} #{stdout: stdout, stderr: stderr, stdin: stdin}
209
+ if opts[:stdout]
210
+ originals[:stdout] = stdout
211
+ set_stdout(opts[:stdout])
212
+ end
213
+ if opts[:stderr]
214
+ originals[:stderr] = stderr
215
+ set_stderr(opts[:stderr])
216
+ end
217
+ if opts[:stdin]
218
+ originals[:stdin] = stdin
219
+ set_stdin(opts[:stdin])
220
+ end
221
+ begin
222
+ yield
223
+ ensure
224
+ set_stdout(originals[:stdout]) if originals[:stdout]
225
+ set_stderr(originals[:stderr]) if originals[:stderr]
226
+ set_stdin(originals[:stdin]) if originals[:stdin]
227
+ end
228
+ end
229
+
230
+ def with_stdout(io, &block)
231
+ with_pipes(stdout:io, &block)
232
+ end
233
+
234
+ def with_stderr(io, &block)
235
+ with_pipes(stderr:io, &block)
236
+ end
237
+
238
+ def with_stdout_and_stderr(io, &block)
239
+ with_pipes(stdout:io, stderr:io, &block)
240
+ end
241
+
242
+ def with_stdin(io, &block)
243
+ with_pipes(stdin:io, &block)
244
+ end
245
+
246
+ def home_directory=(homedir)
247
+ set_home_directory(homedir)
248
+ end
249
+
250
+ def set_home_directory(homedir)
251
+ full_homedir = File.expand_path(homedir)
252
+ # if !Dir.exist?(full_homedir)
253
+ # print_red_alert "Directory not found: #{full_homedir}"
254
+ # exit 1
255
+ # end
256
+ @home_directory = full_homedir
257
+
258
+ # todo: deprecate this
259
+ MtnCloud::Cli.home_directory = full_homedir
260
+
261
+ @home_directory
262
+ end
263
+
264
+ # def coloring=(v)
265
+ # set_coloring(enabled)
266
+ # end
267
+
268
+ def set_coloring(enabled)
269
+ @coloring = !!enabled
270
+ Term::ANSIColor::coloring = @coloring
271
+ coloring?
272
+ end
273
+
274
+ def coloring?
275
+ @coloring == true
276
+ end
277
+
278
+ # alias :'coloring=' :set_coloring
279
+
280
+ def usage
281
+ out = "Usage: #{MtnCloud::Cli.prog_name} [command] [options]\n"
282
+ # just for printing help. todo: start using this. maybe in class Cli::MainCommand
283
+ # maybe OptionParser's recover() instance method will do the trick
284
+ optparse = MtnCloud::Cli::OptionParser.new do|opts|
285
+ opts.banner = "Options:" # hack alert
286
+ opts.on('-e','--exec EXPRESSION', "Execute the command(s) expression. This is an alternative to passing [command] [options]") do |val|
287
+ @execute_mode = true
288
+ @execute_mode_command = val
289
+ end
290
+ opts.on('--noprofile','--noprofile', "Do not read and execute the personal initialization script .mtncloud_profile") do
291
+ @noprofile = true
292
+ end
293
+ # todo: make these work
294
+ # opts.on('--home','--home', "MTN Cloud client home directory, where configuration files are located. The default is MTNCLOUD_CLI_HOME or HOME/.mtncloud") do |val|
295
+ # @use_home_directory = val
296
+ # set_home_directory(@use_home_directory)
297
+ # # that it? all done...
298
+ # end
299
+ # opts.on('-Z','--temporary', "Temporary shell. Use a temporary shell with the current remote configuration, credentials and commands loaded. Configuration changes and command history will not be saved.") do
300
+ # @noprofile = true
301
+ # @temporary_shell_mode = true
302
+ # end
303
+ # opts.on('-z','--clean', "Clean shell. Use a temporary shell without any remote configuration, credentials or command history loaded.") do
304
+ # @noprofile = true
305
+ # @temporary_shell_mode = true
306
+ # @clean_shell_mode = true
307
+ # end
308
+ opts.on('-C','--nocolor', "Disable ANSI coloring") do
309
+ @coloring = false
310
+ Term::ANSIColor::coloring = false
311
+ end
312
+ opts.on('-B','--benchmark', "Print benchmark time after the command is finished.") do
313
+ @benchmarking = true
314
+ #MtnCloud::Benchmarking.enabled = true
315
+ end
316
+ opts.on('-V','--debug', "Print extra output for debugging.") do |json|
317
+ @terminal_log_level = MtnCloud::Logging::Logger::DEBUG
318
+ MtnCloud::Logging.set_log_level(MtnCloud::Logging::Logger::DEBUG)
319
+ # if !options[:quiet]
320
+ ::RestClient.log = MtnCloud::Logging.debug? ? MtnCloud::Logging::DarkPrinter.instance : nil
321
+ end
322
+ opts.on('-v','--version', "Print the version.") do
323
+ @stdout.puts MtnCloud::Cli::VERSION
324
+ # exit
325
+ end
326
+ opts.on( '-h', '--help', "Print this help" ) do
327
+ @stdout.puts opts
328
+ # exit
329
+ end
330
+ end
331
+ out << "Commands:\n"
332
+ sorted_commands = MtnCloud::Cli::CliRegistry.all.values.sort { |x,y| x.command_name.to_s <=> y.command_name.to_s }
333
+ sorted_commands.each {|cmd|
334
+ # JD: not ready to show description yet, gotta finish filling in every command first
335
+ # maybe change 'View and manage' to something more concise like 'Manage'
336
+ # out << "\t#{cmd.command_name.to_s.ljust(28, ' ')} #{cmd.command_description}\n"
337
+ out << "\t#{cmd.command_name.to_s}\n"
338
+ }
339
+ # out << "Options:\n"
340
+ out << optparse.to_s
341
+ out << "\n"
342
+ out << "For more information, run `#{MtnCloud::Cli.prog_name} man`."
343
+ out << "\n"
344
+ out
345
+ end
346
+
347
+ def prompt
348
+ @prompt # ||= MtnCloud::Terminal.default_prompt
349
+ end
350
+
351
+ def prompt=(str)
352
+ @prompt = str
353
+ end
354
+
355
+ def angry_prompt
356
+ @angry_prompt ||= MtnCloud::Terminal.angry_prompt
357
+ end
358
+
359
+ # protected
360
+
361
+ def execute(input)
362
+ exit_code = 0
363
+ err = nil
364
+ args = nil
365
+ if input.is_a? String
366
+ args = Shellwords.shellsplit(input)
367
+ elsif input.is_a?(Array)
368
+ args = input.dup
369
+ else
370
+ raise "terminal execute() expects a String to be split or an Array of String arguments and instead got (#{args.class}) #{args}"
371
+ end
372
+
373
+ # include Term::ANSIColor # tempting
374
+
375
+ # short circuit version switch
376
+ if args.length == 1
377
+ if args[0] == '-v' || args[0] == '--version'
378
+ @stdout.puts MtnCloud::Cli::VERSION
379
+ return 0, nil
380
+ end
381
+ end
382
+
383
+ # looking for global help?
384
+ if args.length == 1
385
+ if args[0] == '-h' || args[0] == '--help' || args[0] == 'help'
386
+ @stdout.puts usage
387
+ return 0, nil
388
+ end
389
+ end
390
+
391
+ # process global options
392
+
393
+ # raise log level right away
394
+ if args.find {|it| it == '-V' || it == '--debug'}
395
+ @terminal_log_level = MtnCloud::Logging::Logger::DEBUG
396
+ MtnCloud::Logging.set_log_level(MtnCloud::Logging::Logger::DEBUG)
397
+ ::RestClient.log = MtnCloud::Logging.debug? ? MtnCloud::Logging::DarkPrinter.instance : nil
398
+ end
399
+
400
+ # start benchmark right away?
401
+ # if args.find {|it| it == '-B' || it == '--benchmark'}
402
+ # #start_benchmark(args.join(' '))
403
+ # @benchmarking = true
404
+ # end
405
+
406
+ # ok, execute the command (or alias)
407
+ result = nil
408
+ begin
409
+
410
+ # todo: no, this needs to be supported as --home for every darn command..
411
+ # add it to CliCommand build_common_options()
412
+ # use custom home directory from --home
413
+ # todo: this should happen in initialize..
414
+ # @use_home_directory
415
+ # need to get index, and delete both the switch and the arg after it
416
+ homedir = false
417
+ home_switch_index = args.index {|it| it == '--home' }
418
+ if args.find {|it| it == '--home' }
419
+ deleted_option = args.delete_at(home_switch_index)
420
+ home_dir = args.delete_at(home_switch_index)
421
+ @use_home_directory = home_dir
422
+ #puts "Setting home directory to #{@use_home_directory}"
423
+ set_home_directory(@use_home_directory)
424
+ # re-initialize some variables
425
+ # startup script
426
+ if File.exist? MtnCloud::Cli::DotFile.mtncloud_profile_filename
427
+ @profile_dot_file = MtnCloud::Cli::DotFile.new(MtnCloud::Cli::DotFile.mtncloud_profile_filename)
428
+ else
429
+ @profile_dot_file = nil
430
+ end
431
+ end
432
+
433
+ # execute startup script .mtncloud_profile unless --noprofile is passed
434
+ # todo: this should happen in initialize..
435
+ noprofile = false
436
+ if args.find {|it| it == '--noprofile' }
437
+ noprofile = true
438
+ args.delete_if {|it| it == '--noprofile' }
439
+ end
440
+
441
+
442
+ if @profile_dot_file && !@profile_dot_file_has_run
443
+ if !noprofile && File.exist?(@profile_dot_file.filename)
444
+ execute_profile_script()
445
+ end
446
+ end
447
+
448
+ # execute startup script .mtncloud_profile unless --noprofile is passed
449
+ # todo: this should happen in initialize..
450
+ @execute_mode = false
451
+ @execute_mode_command = nil
452
+ args.size.times do |i|
453
+ if args[i] == '-e' || args[i] == '--exec'
454
+ @execute_mode = true
455
+ # delete switch and value (command)
456
+ deleted_option = args.delete_at(i)
457
+ @execute_mode_command = args.delete_at(i)
458
+ if @execute_mode_command.nil?
459
+ raise ::OptionParser::MissingArgument.new(deleted_option)
460
+ #@stderr.puts "#{@angry_prompt}missing argument: #{deleted_option}."
461
+ #@stderr.puts "No command given, here's some help:"
462
+ #@stderr.print usage
463
+ return 1
464
+ end
465
+ break
466
+ end
467
+ end
468
+
469
+ if @execute_mode_command
470
+ # execute a single command and exit
471
+ result = MtnCloud::Cli::CliRegistry.exec_expression(@execute_mode_command)
472
+ @execute_mode_command = nil
473
+ else
474
+ # not enough arguments?
475
+ if args.count == 0
476
+ @stderr.puts "#{@angry_prompt}[command] argument is required."
477
+ #@stderr.puts "No command given, here's some help:"
478
+ @stderr.print usage
479
+ return 1, nil # CommandError.new("morpheus requires a command")
480
+ end
481
+
482
+ cmd_name, *cmd_args = args
483
+
484
+ formatted_cmd = args.collect {|arg| arg.include?(' ') ? "\"#{arg}\"" : "#{arg}" }.join(" ")
485
+
486
+ # unknown command?
487
+ # all commands should be registered commands or aliases
488
+ # ahh, but it could support expressions (), use -e for that ..
489
+ # if !(MtnCloud::Cli::CliRegistry.has_command?(cmd_name) || MtnCloud::Cli::CliRegistry.has_alias?(cmd_name))
490
+ # @stderr.puts "#{@angry_prompt}'#{cmd_name}' is not recognized"
491
+ # #@stderr.puts usage
492
+ # return 127, nil
493
+ # end
494
+
495
+ if (defined?(@benchmarking) && @benchmarking) || args.include?('-B') || args.include?('--benchmark')
496
+ benchmark_name = "#{MtnCloud::Cli.prog_name} #{formatted_cmd}"
497
+ benchmark_name.sub!(' -B', '')
498
+ benchmark_name.sub!(' --benchmark', '')
499
+ #benchmark_name << " -B"
500
+ start_benchmark(benchmark_name)
501
+ end
502
+ # shell is a Singleton command class
503
+ if args[0] == "shell"
504
+ require 'mtncloud/cli/commands/shell'
505
+ result = MtnCloud::Cli::Shell.instance.handle(args[1..-1])
506
+ else
507
+ #result = MtnCloud::Cli::CliRegistry.exec_expression(formatted_cmd)
508
+ result = MtnCloud::Cli::CliRegistry.exec(args[0], args[1..-1])
509
+ end
510
+ end
511
+ exit_code, err = MtnCloud::Cli::CliRegistry.parse_command_result(result)
512
+ rescue => e
513
+ exit_code, err = MtnCloud::Cli::ErrorHandler.new(@stderr).handle_error(e)
514
+ ensure
515
+ # should always try to stop it
516
+ # if @benchmarking
517
+ benchmark_record = stop_benchmark(exit_code, err)
518
+ MtnCloud::Logging::DarkPrinter.puts(Term::ANSIColor.cyan + Term::ANSIColor.dark + benchmark_record.msg) if benchmark_record
519
+ # end
520
+ end
521
+
522
+ return exit_code, err
523
+
524
+ end
525
+
526
+ end
527
+ end
528
+
@@ -0,0 +1,29 @@
1
+ # Provides global utility methods
2
+ # Such as opening a web browser to a url
3
+ #
4
+ module MtnCloud::Util
5
+
6
+ def self.open_url_command(url)
7
+ cmd = nil
8
+ if RbConfig::CONFIG['host_os'] =~ /mswin|mingw|cygwin/
9
+ cmd = "start #{url}"
10
+ elsif RbConfig::CONFIG['host_os'] =~ /darwin/
11
+ cmd = "open #{url}"
12
+ elsif RbConfig::CONFIG['host_os'] =~ /linux|bsd/
13
+ cmd = "xdg-open #{url}"
14
+ else
15
+ raise "open_url_command cannot determine host OS"
16
+ end
17
+ return cmd
18
+ end
19
+
20
+ def self.open_url(url)
21
+ cmd = open_url_command(url)
22
+ result = system(cmd)
23
+ if result
24
+ return 0, nil
25
+ else
26
+ return $?.exitstatus, "system command '#{cmd}' exited non-zero"
27
+ end
28
+ end
29
+ end
data/lib/mtncloud.rb ADDED
@@ -0,0 +1,5 @@
1
+ # This provides the command: require 'mtncloud'
2
+ # This is really the same as just mtncloud/cli right now.
3
+ # require 'mtncloud/api'
4
+
5
+ require 'mtncloud/cli'
@@ -0,0 +1,38 @@
1
+ # coding: utf-8
2
+ lib = File.expand_path('../lib', __FILE__)
3
+ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
+ require 'mtncloud/cli/version'
5
+
6
+ Gem::Specification.new do |spec|
7
+ spec.name = "mtncloud-cli"
8
+ spec.version = MtnCloud::Cli::VERSION
9
+ spec.authors = ["Joshua Ukpozi", "Joseph Henry", "MTN Cloud"]
10
+ spec.summary = "Provides CLI Interface to MTN Cloud"
11
+ spec.description = "Cloud application management & orchestration CLI for MTN Cloud. Easily manage and orchestrate VMs on private or public infrastructure and containerized architectures."
12
+ spec.license = "MIT"
13
+
14
+ spec.files = `git ls-files -z`.split("\x0")
15
+
16
+ spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
17
+ spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
18
+ spec.require_paths = ["lib"]
19
+
20
+ spec.required_ruby_version = '>= 2.5.1' # according to http.rb doc
21
+ spec.add_dependency "tins", '~> 1.43.0'
22
+ spec.add_dependency "public_suffix", "4.0.7" # https://github.com/weppos/publicsuffix-ruby/blob/main/CHANGELOG.md
23
+ spec.add_dependency "ffi", "1.15.5" # Fix for mismatched deps: https://github.com/ffi/ffi/issues/1103
24
+ spec.add_development_dependency "bundler", ">= 2.2"
25
+ spec.add_development_dependency "rake"
26
+ spec.add_dependency 'term-ansicolor', '~> 1.3.0'
27
+ spec.add_dependency "rest-client", "2.0.2"
28
+ spec.add_dependency 'multipart-post'
29
+ spec.add_dependency "filesize"
30
+ spec.add_dependency 'mime-types'
31
+ spec.add_dependency "http", "5.3.1"
32
+ spec.add_dependency "rubyzip", '~> 2.3.2'
33
+ spec.add_dependency "test-unit"
34
+ # No longer part of Ruby's default libraries as of Ruby 4.0
35
+ spec.add_dependency "readline"
36
+ spec.add_dependency "logger"
37
+ spec.add_dependency "ostruct"
38
+ end
@@ -0,0 +1,43 @@
1
+ require 'test/unit'
2
+ $LOAD_PATH.unshift(File.expand_path('../../lib', __dir__))
3
+ require 'mtncloud/api/affinity_groups_interface'
4
+
5
+ class AffinityGroupsInterfaceTest < Test::Unit::TestCase
6
+
7
+ def setup
8
+ @affinity_groups_interface = MtnCloud::AffinityGroupsInterface.new(access_token: 'token', url: 'https://example.test', verify_ssl: false)
9
+ end
10
+
11
+ def test_get_builds_bearer_authorization_header
12
+ request = @affinity_groups_interface.dry.get(123, details: true)
13
+ assert_equal :get, request[:method]
14
+ assert_equal 'https://example.test/api/affinity-groups/123', request[:url]
15
+ assert_equal({details: true}, request[:headers][:params])
16
+ assert_equal 'Bearer token', request[:headers][:authorization]
17
+ end
18
+
19
+ def test_update_builds_bearer_authorization_header
20
+ request = @affinity_groups_interface.dry.update(123, {name: 'rule-a'})
21
+ assert_equal :put, request[:method]
22
+ assert_equal 'https://example.test/api/affinity-groups/123', request[:url]
23
+ assert_equal({name: 'rule-a'}.to_json, request[:payload])
24
+ assert_equal 'Bearer token', request[:headers][:authorization]
25
+ end
26
+
27
+ def test_destroy_builds_bearer_authorization_header
28
+ request = @affinity_groups_interface.dry.destroy(123, force: true)
29
+ assert_equal :delete, request[:method]
30
+ assert_equal 'https://example.test/api/affinity-groups/123', request[:url]
31
+ assert_equal({force: true}, request[:headers][:params])
32
+ assert_equal 'Bearer token', request[:headers][:authorization]
33
+ end
34
+
35
+ def test_violations_builds_bearer_authorization_header
36
+ request = @affinity_groups_interface.dry.violations(scope: 'cloud')
37
+ assert_equal :get, request[:method]
38
+ assert_equal 'https://example.test/api/affinity-groups/violations', request[:url]
39
+ assert_equal({scope: 'cloud'}, request[:headers][:params])
40
+ assert_equal 'Bearer token', request[:headers][:authorization]
41
+ end
42
+
43
+ end
@@ -0,0 +1,23 @@
1
+ require 'mtncloud_test'
2
+
3
+ # Tests for MtnCloud::InstancesInterface
4
+ class MtnCloudTest::ClientsInterfaceTest < MtnCloudTest::TestCase
5
+
6
+ def test_clients_interface
7
+ @clients_interface = client.clients
8
+ response = @clients_interface.list()
9
+ records = response['clients']
10
+ assert records.is_a?(Array)
11
+ if !records.empty?
12
+ response = @clients_interface.get(records[0]['id'])
13
+ record = response['client']
14
+ assert record.is_a?(Hash)
15
+ assert_equal record['id'], records[0]['id']
16
+ assert_equal record['clientId'], records[0]['clientId']
17
+ else
18
+ #puts "No clients found in this environment"
19
+ end
20
+ #todo: create and delete
21
+ end
22
+
23
+ end