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,140 @@
1
+ require 'mtncloud/cli/cli_command'
2
+
3
+ class MtnCloud::Cli::LogsCommand
4
+ include MtnCloud::Cli::CliCommand
5
+ include MtnCloud::Cli::LogsHelper
6
+ register_subcommands :list
7
+ set_command_name :'logs'
8
+
9
+ def initialize()
10
+ # @appliance_name, @appliance_url = MtnCloud::Cli::Remote.active_appliance
11
+ end
12
+
13
+ def connect(opts)
14
+ @api_client = establish_remote_appliance_connection(opts)
15
+ @logs_interface = @api_client.logs
16
+ @servers_interface = @api_client.servers
17
+ @containers_interface = @api_client.containers
18
+ @clusters_interface = @api_client.clusters
19
+ end
20
+
21
+ def usage
22
+ "Usage: #{prog_name} #{command_name}"
23
+ end
24
+
25
+ def handle(args)
26
+ # list(args)
27
+ handle_subcommand(args)
28
+ end
29
+
30
+ def list(args)
31
+ options = {}
32
+ params = {}
33
+ optparse = MtnCloud::Cli::OptionParser.new do |opts|
34
+ opts.banner = subcommand_usage("[search]")
35
+ opts.on('--hosts HOSTS', String, "Filter logs to specific Host ID(s)") do |val|
36
+ params['servers'] = val.to_s.split(",").collect {|it| it.to_s.strip }.select {|it| it }.compact
37
+ end
38
+ opts.on('--servers HOSTS', String, "alias for --hosts") do |val|
39
+ params['servers'] = val.to_s.split(",").collect {|it| it.to_s.strip }.select {|it| it }.compact
40
+ end
41
+ opts.on('--vms HOSTS', String, "alias for --hosts") do |val|
42
+ params['servers'] = val.to_s.split(",").collect {|it| it.to_s.strip }.select {|it| it }.compact
43
+ end
44
+ opts.on('--container CONTAINER', String, "Filter logs to specific Container ID(s)") do |val|
45
+ params['containers'] = val.to_s.split(",").collect {|it| it.to_s.strip }.select {|it| it }.compact
46
+ end
47
+ # opts.on('--nodes HOST', String, "alias for --containers") do |val|
48
+ # params['containers'] = val.to_s.split(",").collect {|it| it.to_s.strip }.select {|it| it }.compact
49
+ # end
50
+ opts.on('--cluster ID', String, "Filter logs to specific Cluster ID") do |val|
51
+ params['clusters'] = val.to_s.split(",").collect {|it| it.to_s.strip }.select {|it| it }.compact
52
+ end
53
+ opts.on('--start TIMESTAMP','--start TIMESTAMP', "Start timestamp. Default is 30 days ago.") do |val|
54
+ options[:start] = parse_time(val) #.utc.iso8601
55
+ end
56
+ opts.on('--end TIMESTAMP','--end TIMESTAMP', "End timestamp. Default is now.") do |val|
57
+ options[:end] = parse_time(val) #.utc.iso8601
58
+ end
59
+ # opts.on('--interval TIME','--interval TIME', "Interval of time to include, in seconds. Default is 30 days ago.") do |val|
60
+ # options[:interval] = parse_time(val).utc.iso8601
61
+ # end
62
+ opts.on('--level VALUE', String, "Log Level. DEBUG,INFO,WARN,ERROR") do |val|
63
+ params['level'] = params['level'] ? [params['level'], val].flatten : [val]
64
+ end
65
+ opts.on('-t', '--table', "Format ouput as a table.") do
66
+ options[:table] = true
67
+ end
68
+ opts.on('-a', '--all', "Display all details: entire message." ) do
69
+ options[:details] = true
70
+ end
71
+ build_common_options(opts, options, [:list, :query, :json, :yaml, :csv, :fields, :dry_run, :remote])
72
+ opts.footer = "List logs for all hosts and containers."
73
+ end
74
+ optparse.parse!(args)
75
+ if args.count > 0
76
+ options[:phrase] = args.join(" ")
77
+ end
78
+ connect(options)
79
+ begin
80
+ params['level'] = params['level'].collect {|it| it.to_s.upcase }.join('|') if params['level'] # api works with INFO|WARN
81
+ params.merge!(parse_list_options(options))
82
+ if params['phrase']
83
+ options.delete(:phrase)
84
+ search_phrase = params.delete('phrase')
85
+ params['query'] = search_phrase
86
+ end
87
+ params['order'] = params['direction'] unless params['direction'].nil? # old api version expects order instead of direction
88
+ params['startMs'] = (options[:start].to_i * 1000) if options[:start]
89
+ params['endMs'] = (options[:end].to_i * 1000) if options[:end]
90
+ params['interval'] = options[:interval].to_s if options[:interval]
91
+ # could find_by_name_or_id for params['servers'] and params['containers']
92
+ @logs_interface.setopts(options)
93
+ if options[:dry_run]
94
+ print_dry_run @logs_interface.dry.list(params)
95
+ return
96
+ end
97
+ json_response = @logs_interface.list(params)
98
+ render_result = json_response['logs'] ? render_with_format(json_response, options, 'logs') : render_with_format(json_response, options, 'data')
99
+ return 0 if render_result
100
+
101
+ title = "Logs"
102
+ subtitles = parse_list_subtitles(options)
103
+ if options[:start]
104
+ subtitles << "Start: #{options[:start]}".strip
105
+ end
106
+ if options[:end]
107
+ subtitles << "End: #{options[:end]}".strip
108
+ end
109
+ if params['query']
110
+ subtitles << "Search: #{params['query']}".strip
111
+ end
112
+ if params['servers']
113
+ subtitles << "Servers: #{params['servers']}".strip
114
+ end
115
+ if params['containers']
116
+ subtitles << "Containers: #{params['containers']}".strip
117
+ end
118
+ if params['clusters']
119
+ subtitles << "Clusters: #{params['clusters']}".strip
120
+ end
121
+ if params['level']
122
+ subtitles << "Level: #{params['level']}"
123
+ end
124
+ print_h1 title, subtitles, options
125
+ logs = json_response['data'] || json_response['logs']
126
+ if logs.empty?
127
+ print "#{cyan}No logs found.#{reset}\n"
128
+ else
129
+ print format_log_records(logs, options)
130
+ print_results_pagination({'meta'=>{'total'=>(json_response['total']['value'] rescue json_response['total']),'size'=>logs.size,'max'=>(json_response['max'] || options[:max]),'offset'=>(json_response['offset'] || options[:offset] || 0)}})
131
+ end
132
+ print reset,"\n"
133
+ return 0
134
+ rescue RestClient::Exception => e
135
+ print_rest_exception(e, options)
136
+ exit 1
137
+ end
138
+ end
139
+
140
+ end
@@ -0,0 +1,409 @@
1
+ require 'mtncloud/cli/cli_command'
2
+
3
+ class MtnCloud::Cli::ManCommand
4
+ include MtnCloud::Cli::CliCommand
5
+ set_command_name :man
6
+ set_command_hidden
7
+
8
+ # this should be read only anyway...
9
+ @@default_editor = "less" # ENV['EDITOR']
10
+
11
+ def self.man_file_path
12
+ File.join(MtnCloud::Cli.home_directory, "CLI-Manual-#{MtnCloud::Cli::VERSION}.md")
13
+ end
14
+
15
+ def handle(args)
16
+ options = {}
17
+ regenerate = false
18
+ open_as_link = false # true please
19
+ editor = @@default_editor
20
+ #todo: windows
21
+ if !$stdin.tty?
22
+ editor = "cat"
23
+ end
24
+ # no editor for windows atm
25
+ if MtnCloud::Cli.windows?
26
+ open_as_link = true
27
+ end
28
+ optparse = MtnCloud::Cli::OptionParser.new do|opts|
29
+ opts.banner = "Usage: #{prog_name} man"
30
+ opts.on('-e','--editor EDITOR', "Specify which program to open the manual with. Default is '#{editor}'.") do |val|
31
+ editor = val
32
+ open_as_link = false
33
+ end
34
+ opts.on('-g','--generate', "Regenerate the manual file") do
35
+ regenerate = true
36
+ end
37
+ opts.on('-o','--out FILE', "Write manual file to a custom location") do |val|
38
+ options[:outfile] = val
39
+ end
40
+ opts.on('--overwrite', '--overwrite', "Overwrite output file if it already exists.") do |val|
41
+ options[:overwrite] = true
42
+ end
43
+ opts.on('-q','--quiet', "Do not open manual, for use with the -g option.") do
44
+ options[:quiet] = true
45
+ end
46
+ #build_common_options(opts, options, [:quiet])
47
+ # disable ANSI coloring
48
+ opts.on('-C','--nocolor', "Disable ANSI coloring") do
49
+ Term::ANSIColor::coloring = false
50
+ end
51
+
52
+ opts.on('-V','--debug', "Print extra output for debugging. ") do
53
+ MtnCloud::Logging.set_log_level(MtnCloud::Logging::Logger::DEBUG)
54
+ ::RestClient.log = MtnCloud::Logging.debug? ? MtnCloud::Logging::DarkPrinter.instance : nil
55
+ end
56
+ opts.on('-h', '--help', "Print this help" ) do
57
+ puts opts
58
+ exit
59
+ end
60
+ opts.footer = <<-EOT
61
+ Open the #{prog_name} manual located at #{MtnCloud::Cli::ManCommand.man_file_path}
62
+ The -g option can be used to regenerate the file.
63
+ The --out FILE option be used to write the manual file to a custom location.
64
+ EOT
65
+ end
66
+ optparse.parse!(args)
67
+ verify_args!(args:args, optparse:optparse, count:0)
68
+
69
+ fn = MtnCloud::Cli::ManCommand.man_file_path
70
+ if options[:outfile]
71
+ regenerate = true
72
+ fn = File.expand_path(options[:outfile])
73
+ if File.directory?(fn)
74
+ # if you give me a directory, could still work and use the default filename
75
+ # fn = File.join(fn, "CLI-Manual-#{MtnCloud::Cli::VERSION}.md")
76
+ # raise_command_error "outfile is invalid. It is the name of an existing directory: #{fn}"
77
+ print_error "#{red}Output file '#{fn}' is invalid.#{reset}\n"
78
+ print_error "#{red}It is the name of an existing directory.#{reset}\n"
79
+ return 1
80
+ end
81
+ if File.exist?(fn) && options[:overwrite] != true
82
+ print_error "#{red}Output file '#{fn}' already exists.#{reset}\n"
83
+ print_error "#{red}Use --overwrite to overwrite the existing file.#{reset}\n"
84
+ return 1
85
+ end
86
+ end
87
+ exit_code, err = 0, nil
88
+ if regenerate || !File.exist?(fn)
89
+ #MtnCloud::Logging::DarkPrinter.puts "generating manual #{fn} ..." if MtnCloud::Logging.debug? && !options[:quiet]
90
+ exit_code, err = generate_manual(options)
91
+ end
92
+
93
+ if options[:quiet]
94
+ return exit_code, err
95
+ end
96
+
97
+ MtnCloud::Logging::DarkPrinter.puts "opening manual file #{fn}" if MtnCloud::Logging.debug? && !options[:quiet]
98
+
99
+ if open_as_link # windows only atm
100
+ link = "file://#{fn}"
101
+ if RbConfig::CONFIG['host_os'] =~ /mswin|mingw|cygwin/
102
+ system "start #{link}"
103
+ elsif RbConfig::CONFIG['host_os'] =~ /darwin/
104
+ system "open #{link}"
105
+ elsif RbConfig::CONFIG['host_os'] =~ /linux|bsd/
106
+ system "xdg-open #{link}"
107
+ end
108
+ return 0, nil
109
+ else
110
+ if editor
111
+ if !system_command_available?(editor)
112
+ raise_command_error "The editor program '#{editor}' is not available on your system."
113
+ # puts_error "#{red}The editor program '#{editor}' is not available on your system.#{reset}"
114
+ # return 1
115
+ end
116
+ system("#{editor} #{fn}")
117
+ else
118
+ raise_command_error "Tell me how to open the manual file #{fn}. Try -e emacs or run export EDITOR=emacs"
119
+ return 1
120
+ end
121
+ end
122
+
123
+ return 0, nil
124
+ end
125
+
126
+ # determine if system command is available
127
+ # uses *nix's `which` command.
128
+ # Prevents using dangerous commands rm,mv,passwd
129
+ # todo: support for Windows and PowerShell
130
+ def system_command_available?(cmd)
131
+ has_it = false
132
+ begin
133
+ cmd = cmd.strip.gsub("'",'')
134
+ system("which '#{cmd}' > /dev/null 2>&1")
135
+ has_it = $?.success?
136
+ rescue => e
137
+ raise e
138
+ end
139
+ return has_it
140
+ end
141
+
142
+ # def self.save_manual(fn, content)
143
+ # # fn = MtnCloud::Cli::ManCommand.man_file_path
144
+ # if !Dir.exist?(File.dirname(fn))
145
+ # FileUtils.mkdir_p(File.dirname(fn))
146
+ # end
147
+ # MtnCloud::Logging::DarkPrinter.puts "saving manual to #{fn}" if MtnCloud::Logging.debug?
148
+ # File.open(fn, 'w') {|f| f.write content.to_s } #Store
149
+ # FileUtils.chmod(0600, fn)
150
+ # end
151
+
152
+ def generate_manual(options={})
153
+ # todo: use pandoc or something else to convert the CLI-Manual.md to a man page
154
+ # and install it, so the os command `man mtncloud` will work too.
155
+ fn = MtnCloud::Cli::ManCommand.man_file_path
156
+ if options[:outfile]
157
+ fn = File.expand_path(options[:outfile])
158
+ if File.exist?(fn) && options[:overwrite] != true
159
+ print_error "#{red}Output file '#{options[:outfile]}' already exists.#{reset}\n"
160
+ print_error "#{red}Use --overwrite to overwrite the existing file.#{reset}\n"
161
+ return 1, "output file already exists"
162
+ end
163
+ end
164
+ if !Dir.exist?(File.dirname(fn))
165
+ FileUtils.mkdir_p(File.dirname(fn))
166
+ end
167
+ MtnCloud::Logging::DarkPrinter.puts "generating manual #{fn}" if MtnCloud::Logging.debug? && !options[:quiet]
168
+
169
+ File.open(fn, 'w') {|f| f.write("") } # clear file
170
+ FileUtils.chmod(0600, fn)
171
+
172
+ manpage = File.new(fn, 'w')
173
+ # previous_stdout = $stdout
174
+ # previous_stdout = STDOUT
175
+ # $stdout = manpage
176
+ begin
177
+
178
+ manpage.print <<-ENDTEXT
179
+ #{prog_name} v#{MtnCloud::Cli::VERSION}
180
+
181
+ ## NAME
182
+
183
+ mtncloud - the command line interface for MTN Cloud
184
+
185
+ mcs is a short alias for mtncloud. Both commands run the same CLI.
186
+
187
+ ## SYNOPSIS
188
+
189
+ mtncloud [command] [<args>] [options]
190
+ mcs [command] [<args>] [options]
191
+
192
+ ## DESCRIPTION
193
+
194
+ MTN Cloud CLI
195
+
196
+ This is a command line interface for managing MTN Cloud.
197
+ All communication with the remote appliance is done via the MTN Cloud API.
198
+
199
+ Use the command `#{prog_name} remote add` to connect to MTN Cloud.
200
+
201
+ ## GLOBAL OPTIONS
202
+
203
+ There are several global options available.
204
+
205
+ -v, --version Print the version.
206
+ --noprofile Do not read and execute the personal initialization script .mtncloud_profile
207
+ -C, --nocolor Disable ANSI coloring
208
+ -V, --debug Print extra output for debugging.
209
+ -h, --help Print this help
210
+
211
+ ## COMMON OPTIONS
212
+
213
+ There are many common options that are supported by a most commands.
214
+
215
+ -O, --option OPTION Option value in the format -O var="value" (deprecated soon in favor of first class options)
216
+ -N, --no-prompt Skip prompts. Use default values for all optional fields.
217
+ --payload FILE Payload from a local JSON or YAML file, skip all prompting
218
+ --payload-dir DIRECTORY Payload from a local directory containing 1-N JSON or YAML files, skip all prompting
219
+ --payload-json JSON Payload JSON, skip all prompting
220
+ --payload-yaml YAML Payload YAML, skip all prompting
221
+ -j, --json JSON Output
222
+ -d, --dry-run Dry Run, print the API request instead of executing it
223
+ --curl Dry Run to output API request as a curl command.
224
+ --scrub Mask secrets in output, such as the Authorization header. For use with --curl and --dry-run.
225
+ -r, --remote REMOTE Remote name. The current remote is used by default.
226
+ --remote-url URL Remote url. This allows adhoc requests instead of using a configured remote.
227
+ -T, --token TOKEN Access token for authentication with --remote. Saved credentials are used by default.
228
+ -U, --username USERNAME Username for authentication.
229
+ -P, --password PASSWORD Password for authentication.
230
+ -I, --insecure Allow insecure HTTPS communication. i.e. bad SSL certificate.
231
+ -H, --header HEADER Additional HTTP header to include with requests.
232
+ --timeout SECONDS Timeout for api requests. Default is typically 30 seconds.
233
+ -y, --yes Auto Confirm
234
+ -q, --quiet No Output, do not print to stdout
235
+
236
+ ## COMMANDS
237
+
238
+ The mtncloud executable is divided into commands.
239
+ Each command may have 0-N sub-commands that it supports.
240
+ Commands generally map to the functionality provided in the MTN Cloud UI.
241
+
242
+ You can get help for any command by using the -h option.
243
+
244
+ The available commands and their options are documented below.
245
+ ENDTEXT
246
+
247
+
248
+ #terminal = MtnCloud::Terminal.new($stdin, manpage)
249
+ terminal = my_terminal
250
+ terminal.with_stdout(manpage) do
251
+
252
+ MtnCloud::Logging::DarkPrinter.puts "appending command help `#{prog_name} --help`" if MtnCloud::Logging.debug? && !options[:quiet]
253
+
254
+ manpage.print "\n"
255
+ manpage.print "## #{prog_name}\n"
256
+ manpage.print "\n"
257
+ manpage.print "```\n"
258
+ exit_code, err = terminal.execute("--help")
259
+ manpage.print "```\n"
260
+ manpage.print "\n"
261
+ # output help for every command (that is not hidden)
262
+ MtnCloud::Cli::CliRegistry.all.keys.sort.each do |cmd|
263
+ cmd_klass = MtnCloud::Cli::CliRegistry.instance.get(cmd)
264
+ cmd_instance = cmd_klass.new
265
+ MtnCloud::Logging::DarkPrinter.puts "appending command help `#{prog_name} #{cmd} --help`" if MtnCloud::Logging.debug? && !options[:quiet]
266
+ #help_cmd = "mtncloud #{cmd} --help"
267
+ #help_output = `#{help_cmd}`
268
+ manpage.print "\n"
269
+ manpage.print "### #{prog_name} #{cmd}\n"
270
+ manpage.print "\n"
271
+ manpage.print "```\n"
272
+ begin
273
+ cmd_instance.handle(["--help"])
274
+ rescue SystemExit => err
275
+ raise err unless err.success?
276
+ end
277
+ manpage.print "```\n"
278
+ # subcommands = cmd_klass.subcommands
279
+ subcommands = cmd_klass.visible_subcommands
280
+ if subcommands && subcommands.size > 0
281
+ subcommands.sort.each do |subcommand, subcommand_method|
282
+ MtnCloud::Logging::DarkPrinter.puts "appending command help `#{prog_name} #{cmd} #{subcommand} --help`" if MtnCloud::Logging.debug? && !options[:quiet]
283
+ manpage.print "\n"
284
+ manpage.print "#### #{prog_name} #{cmd} #{subcommand}\n"
285
+ manpage.print "\n"
286
+ manpage.print "```\n"
287
+ begin
288
+ cmd_instance.handle([subcommand, "--help"])
289
+ rescue SystemExit => err
290
+ raise err unless err.success?
291
+ end
292
+ manpage.print "```\n"
293
+ # manpage.print "\n"
294
+ end
295
+ end
296
+ manpage.print "\n"
297
+ end
298
+
299
+ manpage.print <<-ENDTEXT
300
+
301
+ ## ENVIRONMENT VARIABLES
302
+
303
+ ### MTNCLOUD_CLI_HOME
304
+
305
+ The **MTNCLOUD_CLI_HOME** variable is where mtncloud stores its configuration files.
306
+ This can be set to allow a single system user to maintain many different configurations.
307
+ If the directory does not exist, mtncloud will attempt to create it.
308
+
309
+ The default home directory is **$HOME/.mtncloud**
310
+
311
+ To see how this works, run the following:
312
+
313
+ ```shell
314
+ MTNCLOUD_CLI_HOME=~/.mtncloud_test mtncloud shell
315
+ ```
316
+
317
+ Now, in your new mtncloud shell, you can see that it is a fresh environment.
318
+ There are no remotes configured.
319
+
320
+ ```shell
321
+ mtncloud> remote list
322
+ No remote appliances configured. See the command `remote add`.
323
+ ```
324
+
325
+ You can use this to create isolated environments (sandboxes), within which to execute your mtncloud commands.
326
+
327
+ ```shell
328
+ export MTNCLOUD_CLI_HOME=~/mtncloud_test
329
+ mtncloud remote add demo https://console.cloud.mtn.ng
330
+ mtncloud instances list
331
+ ```
332
+
333
+ mtncloud saves the remote appliance information, including API access tokens,
334
+ to the CLI home directory. These files are saved with file permissions **0600**.
335
+ So, only one system user should be allowed to execute mtncloud with that home directory.
336
+ See [Configuration](#Configuration) for more information on the files mtncloud reads and writes.
337
+
338
+ ## CONFIGURATION
339
+
340
+ mtncloud reads and writes several configuration files within the $MTNCLOUD_CLI_HOME directory.
341
+
342
+ **Note:** These files are maintained by the program. It is not recommended for you to manipulate them.
343
+
344
+ ### appliances file
345
+
346
+ The `appliances` YAML file contains a list of known appliances, keyed by name.
347
+
348
+ Example:
349
+ ```yaml
350
+ :mtncloud:
351
+ :url: https://console.cloud.mtn.ng
352
+ :test:
353
+ :url: https://test.example.com
354
+ ```
355
+
356
+ ### credentials file
357
+
358
+ The `.mtncloud/credentials` YAML file contains access tokens for each known appliance.
359
+
360
+ ### groups file
361
+
362
+ The `.mtncloud/groups` YAML file contains the active group information for each known appliance.
363
+
364
+
365
+ ## Startup scripts
366
+
367
+ When mtncloud starts, it executes the commands in a couple of dot files.
368
+
369
+ These scripts are written in mtncloud commands, not bash, so they can only execute mtncloud commands and aliases.
370
+
371
+ ### .mtncloud_profile file
372
+
373
+ It looks for `$MTNCLOUD_CLI_HOME/.mtncloud_profile`, and reads and executes it (if it exists).
374
+
375
+ This may be inhibited by using the `--noprofile` option.
376
+
377
+ ### .mtncloudrc file
378
+
379
+ When started as an interactive shell with the `#{prog_name} shell` command,
380
+ mtncloud reads and executes `$MTNCLOUD_CLI_HOME/.mtncloudrc` (if it exists). This may be inhibited by using the `--norc` option.
381
+
382
+ An example startup script might look like this:
383
+
384
+ ```
385
+ # .mtncloudrc
386
+
387
+ set-prompt "%cyan%username%reset@%magenta%remote %cyanmtncloud> %reset"
388
+ version
389
+ remote current
390
+ echo "Welcome back %username"
391
+ echo
392
+
393
+ ```
394
+
395
+ ENDTEXT
396
+
397
+ end # end with_stdout(manpage)
398
+
399
+ ensure
400
+ manpage.close if manpage
401
+ # $stdout = previous_stdout if previous_stdout
402
+ # this is needed to re-establish instance with STDOUT, STDIN
403
+ #terminal = MtnCloud::Terminal.new()
404
+ end
405
+
406
+ return 0, nil
407
+ end
408
+
409
+ end