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,835 @@
1
+ require 'mtncloud/cli/cli_command'
2
+
3
+ class MtnCloud::Cli::MonitoringIncidentsCommand
4
+ include MtnCloud::Cli::CliCommand
5
+ include MtnCloud::Cli::MonitoringHelper
6
+
7
+ set_command_name :'monitor-incidents'
8
+ register_subcommands :list, :stats, :get, :history, :notifications, :update, :close, :reopen, :mute, :unmute, :add
9
+ register_subcommands :'mute-all' => :mute_all
10
+ register_subcommands :'unmute-all' => :unmute_all
11
+
12
+ def connect(opts)
13
+ @api_client = establish_remote_appliance_connection(opts)
14
+ @monitoring_interface = @api_client.monitoring
15
+ @monitoring_incidents_interface = @api_client.monitoring.incidents
16
+ end
17
+
18
+ def handle(args)
19
+ handle_subcommand(args)
20
+ end
21
+
22
+ def list(args)
23
+ options = {}
24
+ params = {}
25
+ optparse = MtnCloud::Cli::OptionParser.new do |opts|
26
+ opts.banner = subcommand_usage()
27
+ opts.on('--status LIST', Array, "Filter by status. open, closed") do |list|
28
+ params['status'] = list
29
+ end
30
+ opts.on('--severity LIST', Array, "Filter by severity. critical, warning, info") do |list|
31
+ params['severity'] = list
32
+ end
33
+ build_common_options(opts, options, [:list, :query, :last_updated, :json, :yaml, :csv, :fields, :dry_run, :remote])
34
+ end
35
+ optparse.parse!(args)
36
+ connect(options)
37
+ begin
38
+ params.merge!(parse_list_options(options))
39
+ @monitoring_incidents_interface.setopts(options)
40
+ if options[:dry_run]
41
+ print_dry_run @monitoring_incidents_interface.dry.list(params)
42
+ return
43
+ end
44
+ json_response = @monitoring_incidents_interface.list(params)
45
+ if options[:json]
46
+ puts as_json(json_response, options, "incidents")
47
+ return 0
48
+ elsif options[:csv]
49
+ puts records_as_csv(json_response['incidents'], options)
50
+ return 0
51
+ elsif options[:yaml]
52
+ puts as_yaml(json_response, options, "incidents")
53
+ return 0
54
+ end
55
+ incidents = json_response['incidents']
56
+ title = "Monitoring Incidents"
57
+ subtitles = []
58
+ subtitles += parse_list_subtitles(options)
59
+ print_h1 title, subtitles
60
+ if incidents.empty?
61
+ print cyan,"No incidents found.",reset,"\n"
62
+ else
63
+ print_incidents_table(incidents, options)
64
+ print_results_pagination(json_response, {:label => "incident", :n_label => "incidents"})
65
+ end
66
+ print reset,"\n"
67
+ rescue RestClient::Exception => e
68
+ print_rest_exception(e, options)
69
+ exit 1
70
+ end
71
+ end
72
+
73
+ # this show date range counts and current open incidents
74
+ # it should be perhaps called 'summary' or 'dashboard'
75
+ # it is not stats about a particular incident
76
+ def stats(args)
77
+ options = {}
78
+ optparse = MtnCloud::Cli::OptionParser.new do |opts|
79
+ opts.banner = subcommand_usage()
80
+ #opts.on('-j','--json', "JSON Output") do
81
+ opts.on( '-m', '--max MAX', "Max open incidents to display. Default is 25" ) do |max|
82
+ if max.to_s == 'all'
83
+ options[:max] = 10000 # 'all'
84
+ else
85
+ options[:max] = max.to_i
86
+ end
87
+ end
88
+ opts.on( '-o', '--offset OFFSET', "Offset open incidents results for pagination." ) do |offset|
89
+ options[:offset] = offset.to_i.abs
90
+ end
91
+ build_common_options(opts, options, [:list, :json, :yaml, :csv, :fields, :dry_run, :remote])
92
+ end
93
+ optparse.parse!(args)
94
+ connect(options)
95
+ begin
96
+ params = {}
97
+ params.merge!(parse_list_options(options))
98
+ @monitoring_incidents_interface.setopts(options)
99
+ if options[:dry_run]
100
+ print_dry_run @monitoring_incidents_interface.dry.stats(params)
101
+ return
102
+ end
103
+ json_response = @monitoring_incidents_interface.stats(params)
104
+ if options[:json]
105
+ puts as_json(json_response, options, "openIncidents")
106
+ return 0
107
+ elsif options[:csv]
108
+ puts records_as_csv(json_response['openIncidents'], options)
109
+ return 0
110
+ elsif options[:yaml]
111
+ puts as_yaml(json_response, options, "openIncidents")
112
+ return 0
113
+ end
114
+
115
+ open_incidents = json_response['openIncidents']
116
+ open_incidents_count = json_response['openIncidentCount']
117
+ stats = json_response['incidentStats']
118
+
119
+ print_h1 "Incidents: Stats"
120
+ print cyan
121
+
122
+ # print_h2 "Counts"
123
+ # print_description_list({
124
+ # "Today" => 'today',
125
+ # "Week" => 'week',
126
+ # "Month" => 'month',
127
+ # }, stats)
128
+
129
+ if stats
130
+ print justify_string("Today: #{stats['today']}", 20)
131
+ print justify_string("Week: #{stats['week']}", 20)
132
+ print justify_string("Month: #{stats['month']}", 20)
133
+ print "\n"
134
+ else
135
+ puts "No stats"
136
+ end
137
+
138
+ if !open_incidents || open_incidents.size() == 0
139
+ print bold,green,"0 open incidents",reset,"\n"
140
+ else
141
+ if open_incidents.size() == 1
142
+ #print bold,yellow,"#{open_incidents.size()} open incident",reset,"\n"
143
+ print_h2 "#{open_incidents.size()} open incident"
144
+ else
145
+ #print bold,yellow,"#{open_incidents.size()} open incidents",reset,"\n"
146
+ print_h2 "#{open_incidents.size()} open incidents"
147
+ end
148
+ options[:max] ||= 20
149
+
150
+ print_incidents_table(open_incidents)
151
+ if open_incidents.size > 0
152
+ print_results_pagination(size: open_incidents.size, total: open_incidents_count, offset: options[:offset])
153
+ end
154
+ end
155
+ print reset,"\n"
156
+ rescue RestClient::Exception => e
157
+ print_rest_exception(e, options)
158
+ exit 1
159
+ end
160
+ end
161
+
162
+ def add(args)
163
+ options = {}
164
+ params = {}
165
+ optparse = MtnCloud::Cli::OptionParser.new do |opts|
166
+ opts.banner = subcommand_usage("[id]")
167
+ opts.on("-c", "--comment STRING", String, "Comment on this incident. Updates summary field.") do |val|
168
+ params['comment'] = val == 'null' ? nil : val
169
+ end
170
+ opts.on("--resolution STRING", String, "Description of the resolution to this incident") do |val|
171
+ params['resolution'] = val == 'null' ? nil : val
172
+ end
173
+ opts.on("--status STATUS", String, "Set status (open or closed)") do |val|
174
+ params['status'] = val
175
+ end
176
+ opts.on("--severity STATUS", String, "Set severity (critical, warning or info)") do |val|
177
+ params['severity'] = val
178
+ end
179
+ opts.on("--name STRING", String, "Set display name (subject)") do |val|
180
+ params['name'] = val == 'null' ? nil : val
181
+ end
182
+ opts.on("--startDate TIME", String, "Set start time") do |val|
183
+ begin
184
+ params['startDate'] = parse_time(val).utc.iso8601
185
+ rescue => e
186
+ raise OptionParser::InvalidArgument.new "Failed to parse --startDate '#{val}'. Error: #{e}"
187
+ end
188
+ end
189
+ opts.on("--endDate TIME", String, "Set end time") do |val|
190
+ begin
191
+ params['endDate'] = parse_time(val).utc.iso8601
192
+ rescue => e
193
+ raise OptionParser::InvalidArgument.new "Failed to parse --endDate '#{val}'. Error: #{e}"
194
+ end
195
+ end
196
+ opts.on("--inUptime BOOL", String, "Set 'In Availability'") do |val|
197
+ params['inUptime'] = ['true','on'].include?(val.to_s.strip)
198
+ end
199
+ build_common_options(opts, options, [:json, :dry_run, :quiet, :remote])
200
+ end
201
+
202
+ optparse.parse!(args)
203
+ connect(options)
204
+
205
+ begin
206
+ params['name'] = params['name'] || 'No subject'
207
+ params['startDate'] = params['startDate'] || Time.now.utc.iso8601
208
+ payload = { 'incident' => params }
209
+
210
+ @monitoring_incidents_interface.setopts(options)
211
+ if options[:dry_run]
212
+ print_dry_run @monitoring_incidents_interface.dry.create(payload)
213
+ return
214
+ end
215
+
216
+ json_response = @monitoring_incidents_interface.create(payload)
217
+
218
+ if options[:json]
219
+ puts as_json(json_response, options)
220
+ elsif !options[:quiet]
221
+ print_green_success "Created incident #{json_response['incident']['id']}"
222
+ _get(json_response['incident']['id'], options)
223
+ end
224
+
225
+ rescue RestClient::Exception => e
226
+ print_rest_exception(e, options)
227
+ exit 1
228
+ end
229
+ end
230
+
231
+ def get(args)
232
+ options = {}
233
+ optparse = MtnCloud::Cli::OptionParser.new do |opts|
234
+ opts.banner = subcommand_usage("[id list]")
235
+ opts.on(nil,'--history', "Display Incident History") do |val|
236
+ options[:show_history] = true
237
+ end
238
+ opts.on(nil,'--notifications', "Display Incident Notifications") do |val|
239
+ options[:show_notifications] = true
240
+ end
241
+ opts.on('-a','--all', "Display All Details (History, Notifications)") do
242
+ options[:show_history] = true
243
+ options[:show_notifications] = true
244
+ end
245
+ build_common_options(opts, options, [:json, :yaml, :csv, :fields, :query, :dry_run, :remote])
246
+ end
247
+ optparse.parse!(args)
248
+ if args.count < 1
249
+ puts optparse
250
+ exit 1
251
+ end
252
+ connect(options)
253
+ id_list = parse_id_list(args)
254
+ return run_command_for_each_arg(id_list) do |arg|
255
+ _get(arg, options)
256
+ end
257
+ end
258
+
259
+ def _get(id, options)
260
+
261
+ begin
262
+ incident = find_incident_by_id(id)
263
+ @monitoring_incidents_interface.setopts(options)
264
+ if options[:dry_run]
265
+ print_dry_run @monitoring_incidents_interface.dry.get(incident['id'])
266
+ return
267
+ end
268
+ json_response = @monitoring_incidents_interface.get(incident['id'])
269
+ incident = json_response['incident']
270
+
271
+ if options[:json]
272
+ puts as_json(json_response, options, "incident")
273
+ return 0
274
+ elsif options[:csv]
275
+ puts records_as_csv([json_response['incident']], options)
276
+ return 0
277
+ elsif options[:yaml]
278
+ puts as_yaml(json_response, options, "incident")
279
+ return 0
280
+ end
281
+
282
+ print_h1 "Incident Details"
283
+ print cyan
284
+ description_cols = {
285
+ "ID" => 'id',
286
+ "Severity" => lambda {|it| format_severity(it['severity']) },
287
+ "Name" => lambda {|it| it['displayName'] || it['name'] || 'No Subject' },
288
+ "Start" => lambda {|it| format_local_dt(it['startDate']) },
289
+ "End" => lambda {|it| format_local_dt(it['endDate']) },
290
+ "Duration" => lambda {|it| format_duration(it['startDate'], it['endDate']) },
291
+ "Status" => lambda {|it| format_monitoring_issue_status(it) },
292
+ "Muted" => lambda {|it| it['inUptime'] ? 'No' : 'Yes' },
293
+ "Visibility" => 'visibility',
294
+ "Last Check" => lambda {|it| format_local_dt(it['lastCheckTime']) },
295
+ "Last Error" => lambda {|it| it['lastError'] },
296
+ "Comment" => 'comment',
297
+ "Resolution" => 'resolution'
298
+ }
299
+ # description_cols.delete("End") if incident['endDate'].nil?
300
+ description_cols.delete("Comment") if incident['comment'].empty?
301
+ description_cols.delete("Resolution") if incident['resolution'].empty?
302
+ # description_cols.delete("Last Check") if incident['lastCheckTime'].empty?
303
+ # description_cols.delete("Last Error") if incident['lastError'].empty?
304
+ print_description_list(description_cols, incident)
305
+ # puts as_vertical_table(incident, description_cols)
306
+ ## Issues
307
+
308
+ issues = json_response["issues"]
309
+ if issues && !issues.empty?
310
+ print_h2 "Issues"
311
+ print_incident_issues_table(issues, options)
312
+ else
313
+ print "\n"
314
+ puts "No checks involved in this incident"
315
+ end
316
+
317
+ ## History (MonitorIncidentEvent)
318
+ if options[:show_history]
319
+ # history_items = json_response["history"]
320
+ # gotta go get it
321
+ history_json_response = @monitoring_incidents_interface.history(incident["id"], {})
322
+ history_items = history_json_response["history"] || history_json_response["events"] || history_json_response["issues"]
323
+ issues = history_items
324
+ if history_items && !history_items.empty?
325
+ print_h2 "History"
326
+ print_incident_history_table(history_items, options)
327
+ print_results_pagination(history_json_response, {:label => "event", :n_label => "events"})
328
+ else
329
+ print "\n"
330
+ puts "No history found for this incident"
331
+ end
332
+ end
333
+
334
+ ## Members (MonitorIncidentNotifyEvent)
335
+ if options[:show_notifications]
336
+ # history_items = json_response["history"]
337
+ # gotta go get it
338
+ notifications_json_response = @monitoring_incidents_interface.notifications(incident["id"], {max: 10})
339
+ notification_items = notifications_json_response["notifications"]
340
+ if notification_items && !notification_items.empty?
341
+ print_h2 "Notifications"
342
+ print_incident_notifications_table(notification_items, options)
343
+ print_results_pagination(notifications_json_response, {:label => "notification", :n_label => "notifications"})
344
+ else
345
+ print "\n"
346
+ puts "Nobody has been notified about this incident."
347
+ end
348
+ end
349
+
350
+ print reset,"\n"
351
+
352
+ rescue RestClient::Exception => e
353
+ print_rest_exception(e, options)
354
+ exit 1
355
+ end
356
+ end
357
+
358
+ def history(args)
359
+ options = {}
360
+ params = {}
361
+ optparse = MtnCloud::Cli::OptionParser.new do |opts|
362
+ opts.banner = subcommand_usage("[id] [options]")
363
+ opts.on('--severity LIST', Array, "Filter by severity. critical, warning, info") do |list|
364
+ params['severity'] = list
365
+ end
366
+ build_common_options(opts, options, [:list, :last_updated, :json, :csv, :yaml, :fields, :json, :dry_run, :remote])
367
+ end
368
+ optparse.parse!(args)
369
+ if args.count < 1
370
+ puts optparse
371
+ exit 1
372
+ end
373
+ connect(options)
374
+ begin
375
+ incident = find_incident_by_id(args[0])
376
+ return 1 if incident.nil?
377
+
378
+ params.merge!(parse_list_options(options))
379
+ @monitoring_incidents_interface.setopts(options)
380
+ if options[:dry_run]
381
+ print_dry_run @monitoring_incidents_interface.dry.history(incident['id'], params)
382
+ return
383
+ end
384
+
385
+ json_response = @monitoring_incidents_interface.history(incident['id'], params)
386
+ if options[:json]
387
+ puts as_json(json_response, options, "history")
388
+ return 0
389
+ elsif options[:csv]
390
+ puts records_as_csv(json_response['history'], options)
391
+ return 0
392
+ elsif options[:yaml]
393
+ puts as_yaml(json_response, options, "history")
394
+ return 0
395
+ end
396
+ history_items = json_response['history']
397
+ title = "Incident History: #{incident['id']}: #{incident['displayName'] || incident['name']}"
398
+ subtitles = []
399
+ subtitles += parse_list_subtitles(options)
400
+ print_h1 title, subtitles
401
+ if history_items.empty?
402
+ print cyan,"No history found.",reset,"\n"
403
+ else
404
+ print_incident_history_table(history_items, options)
405
+ print_results_pagination(json_response, {:label => "event", :n_label => "events"})
406
+ end
407
+ print reset,"\n"
408
+ rescue RestClient::Exception => e
409
+ print_rest_exception(e, options)
410
+ exit 1
411
+ end
412
+ end
413
+
414
+ def notifications(args)
415
+ options = {}
416
+ optparse = MtnCloud::Cli::OptionParser.new do |opts|
417
+ opts.banner = subcommand_usage("[id] [options]")
418
+ build_common_options(opts, options, [:list, :json, :csv, :yaml, :fields, :json, :dry_run, :remote])
419
+ end
420
+ optparse.parse!(args)
421
+ if args.count < 1
422
+ puts optparse
423
+ exit 1
424
+ end
425
+ connect(options)
426
+ begin
427
+ incident = find_incident_by_id(args[0])
428
+ # return false if incident.nil?
429
+ params = {}
430
+ params.merge!(parse_list_options(options))
431
+ @monitoring_incidents_interface.setopts(options)
432
+ if options[:dry_run]
433
+ print_dry_run @monitoring_incidents_interface.dry.notifications(incident['id'], params)
434
+ return
435
+ end
436
+
437
+ json_response = @monitoring_incidents_interface.notifications(incident['id'], params)
438
+ if options[:json]
439
+ puts as_json(json_response, options, "notifications")
440
+ return 0
441
+ elsif options[:csv]
442
+ puts records_as_csv(json_response['notifications'], options)
443
+ return 0
444
+ elsif options[:yaml]
445
+ puts as_yaml(json_response, options, "notifications")
446
+ return 0
447
+ end
448
+ notification_items = json_response['notifications']
449
+ title = "Incident Notifications [#{incident['id']}] #{incident['displayName'] || incident['name']}"
450
+ subtitles = []
451
+ subtitles += parse_list_subtitles(options)
452
+ print_h1 title, subtitles
453
+ if notification_items.empty?
454
+ print cyan,"No notifications found.",reset,"\n"
455
+ else
456
+ print_incident_notifications_table(notification_items, options)
457
+ print_results_pagination(json_response, {:label => "notification", :n_label => "notifications"})
458
+ end
459
+ print reset,"\n"
460
+ rescue RestClient::Exception => e
461
+ print_rest_exception(e, options)
462
+ exit 1
463
+ end
464
+ end
465
+
466
+ def update(args)
467
+ options = {}
468
+ params = {}
469
+ optparse = MtnCloud::Cli::OptionParser.new do |opts|
470
+ opts.banner = subcommand_usage("[id]")
471
+ opts.on("-c", "--comment STRING", String, "Comment on this incident. Updates summary field.") do |val|
472
+ params['comment'] = val == 'null' ? nil : val
473
+ end
474
+ opts.on("--resolution STRING", String, "Description of the resolution to this incident") do |val|
475
+ params['resolution'] = val == 'null' ? nil : val
476
+ end
477
+ opts.on("--status STATUS", String, "Set status (open or closed)") do |val|
478
+ params['status'] = val
479
+ end
480
+ opts.on("--severity STATUS", String, "Set severity (critical, warning or info)") do |val|
481
+ params['severity'] = val
482
+ end
483
+ opts.on("--name STRING", String, "Set display name (subject)") do |val|
484
+ params['name'] = val == 'null' ? nil : val
485
+ end
486
+ opts.on("--startDate TIME", String, "Set start time") do |val|
487
+ begin
488
+ params['startDate'] = parse_time(val).utc.iso8601
489
+ rescue => e
490
+ raise OptionParser::InvalidArgument.new "Failed to parse --startDate '#{val}'. Error: #{e}"
491
+ end
492
+ end
493
+ opts.on("--endDate TIME", String, "Set end time") do |val|
494
+ begin
495
+ params['endDate'] = parse_time(val).utc.iso8601
496
+ rescue => e
497
+ raise OptionParser::InvalidArgument.new "Failed to parse --endDate '#{val}'. Error: #{e}"
498
+ end
499
+ end
500
+ opts.on("--inUptime BOOL", String, "Set 'In Availability'") do |val|
501
+ params['inUptime'] = ['true','on'].include?(val.to_s.strip)
502
+ end
503
+ build_common_options(opts, options, [:json, :dry_run, :quiet, :remote])
504
+ end
505
+ optparse.parse!(args)
506
+ if args.count < 1
507
+ puts optparse
508
+ exit 1
509
+ end
510
+ connect(options)
511
+
512
+ begin
513
+ incident = find_incident_by_id(args[0])
514
+
515
+ if params['status'] == 'closed'
516
+ unless options[:yes] || ::MtnCloud::Cli::OptionTypes::confirm("Are you sure you would like to close the incident '#{incident['id']}'?", options)
517
+ return false
518
+ end
519
+ end
520
+
521
+ if params.empty?
522
+ print_red_alert "Specify at least one option to update"
523
+ puts optparse
524
+ exit 1
525
+ end
526
+
527
+ payload = {
528
+ 'incident' => {id: incident["id"]}
529
+ }
530
+ payload['incident'].merge!(params)
531
+ @monitoring_incidents_interface.setopts(options)
532
+ if options[:dry_run]
533
+ print_dry_run @monitoring_incidents_interface.dry.update(incident["id"], payload)
534
+ return
535
+ end
536
+
537
+ json_response = @monitoring_incidents_interface.update(incident["id"], payload)
538
+ if options[:json]
539
+ puts as_json(json_response, options)
540
+ elsif !options[:quiet]
541
+ print_green_success "Updated incident #{incident['id']}"
542
+ _get(incident['id'], options)
543
+ end
544
+
545
+ rescue RestClient::Exception => e
546
+ print_rest_exception(e, options)
547
+ exit 1
548
+ end
549
+ end
550
+
551
+
552
+ def mute(args)
553
+ options = {}
554
+ params = {}
555
+ optparse = MtnCloud::Cli::OptionParser.new do |opts|
556
+ opts.banner = subcommand_usage("[id]")
557
+ opts.on(nil, "--disable", "Disable mute state instead, the same as unmute") do
558
+ params['muted'] = false
559
+ params['enabled'] = false
560
+ end
561
+ build_common_options(opts, options, [:options, :payload, :json, :dry_run, :quiet, :remote])
562
+ opts.footer = "Mute an incident." + "\n" +
563
+ "[id] is required. This is the id of an incident."
564
+ end
565
+ optparse.parse!(args)
566
+ if args.count != 1
567
+ puts optparse
568
+ return 1
569
+ end
570
+ connect(options)
571
+ begin
572
+ incident = find_incident_by_id(args[0])
573
+ # construct payload
574
+ payload = nil
575
+ if options[:payload]
576
+ payload = options[:payload]
577
+ else
578
+ payload = params
579
+ end
580
+ @monitoring_incidents_interface.setopts(options)
581
+ if options[:dry_run]
582
+ print_dry_run @monitoring_incidents_interface.dry.mute(incident["id"], payload)
583
+ return 0
584
+ end
585
+ json_response = @monitoring_incidents_interface.mute(incident["id"], payload)
586
+ if options[:json]
587
+ puts as_json(json_response, options)
588
+ elsif !options[:quiet]
589
+ if params['muted'] != false
590
+ print_green_success "Muted incident #{incident['id']}"
591
+ else
592
+ print_green_success "Unmuted incident #{incident['id']}"
593
+ end
594
+ _get(incident['id'], options)
595
+ end
596
+ return 0
597
+ rescue RestClient::Exception => e
598
+ print_rest_exception(e, options)
599
+ exit 1
600
+ end
601
+ end
602
+
603
+ def unmute(args)
604
+ options = {}
605
+ params = {'muted' => false, 'enabled' => false} # enabled was used pre 3.6.5
606
+ optparse = MtnCloud::Cli::OptionParser.new do |opts|
607
+ opts.banner = subcommand_usage("[id]")
608
+ build_common_options(opts, options, [:payload, :json, :dry_run, :quiet, :remote])
609
+ opts.footer = "Unmute an incident." + "\n" +
610
+ "[id] is required. This is the id of an incident."
611
+ end
612
+ optparse.parse!(args)
613
+ if args.count != 1
614
+ puts optparse
615
+ return 1
616
+ end
617
+ connect(options)
618
+
619
+ begin
620
+ incident = find_incident_by_id(args[0])
621
+ # construct payload
622
+ payload = nil
623
+ if options[:payload]
624
+ payload = options[:payload]
625
+ else
626
+ payload = params
627
+ end
628
+ @monitoring_incidents_interface.setopts(options)
629
+ if options[:dry_run]
630
+ print_dry_run @monitoring_incidents_interface.dry.mute(incident["id"], payload)
631
+ return 0
632
+ end
633
+ json_response = @monitoring_incidents_interface.mute(incident["id"], payload)
634
+ if options[:json]
635
+ puts as_json(json_response, options)
636
+ elsif !options[:quiet]
637
+ print_green_success "Unmuted incident #{incident['id']}"
638
+ _get(incident['id'], options)
639
+ end
640
+ return 0
641
+ rescue RestClient::Exception => e
642
+ print_rest_exception(e, options)
643
+ exit 1
644
+ end
645
+ end
646
+
647
+ def mute_all(args)
648
+ options = {}
649
+ params = {}
650
+ optparse = MtnCloud::Cli::OptionParser.new do |opts|
651
+ opts.banner = subcommand_usage()
652
+ opts.on(nil, "--disable", "Disable mute state instead, the same as unmute-all") do
653
+ params['muted'] = false
654
+ params['enabled'] = false
655
+ end
656
+ build_common_options(opts, options, [:options, :payload, :json, :dry_run, :quiet, :remote])
657
+ opts.footer = "Mute all open incidents."
658
+ end
659
+ optparse.parse!(args)
660
+ if args.count != 0
661
+ puts optparse
662
+ return 1
663
+ end
664
+ connect(options)
665
+ begin
666
+ # construct payload
667
+ payload = nil
668
+ if options[:payload]
669
+ payload = options[:payload]
670
+ else
671
+ payload = params
672
+ end
673
+ @monitoring_incidents_interface.setopts(options)
674
+ if options[:dry_run]
675
+ print_dry_run @monitoring_incidents_interface.dry.mute_all(payload)
676
+ return 0
677
+ end
678
+ json_response = @monitoring_incidents_interface.mute_all(payload)
679
+ if options[:json]
680
+ puts as_json(json_response, options)
681
+ elsif !options[:quiet]
682
+ num_updated = json_response['updated']
683
+ if params['muted'] != false
684
+ print_green_success "Muted #{num_updated} open incidents"
685
+ else
686
+ print_green_success "Unmuted #{num_updated} open incidents"
687
+ end
688
+ end
689
+ return 0
690
+ rescue RestClient::Exception => e
691
+ print_rest_exception(e, options)
692
+ exit 1
693
+ end
694
+ end
695
+
696
+ def unmute_all(args)
697
+ options = {}
698
+ params = {'muted' => false, 'enabled' => false}
699
+ optparse = MtnCloud::Cli::OptionParser.new do |opts|
700
+ opts.banner = subcommand_usage()
701
+ build_common_options(opts, options, [:payload, :json, :dry_run, :quiet, :remote])
702
+ opts.footer = "Unmute all open incidents."
703
+ end
704
+ optparse.parse!(args)
705
+ if args.count != 0
706
+ puts optparse
707
+ return 1
708
+ end
709
+ connect(options)
710
+
711
+ begin
712
+ # construct payload
713
+ payload = nil
714
+ if options[:payload]
715
+ payload = options[:payload]
716
+ else
717
+ payload = params
718
+ end
719
+ @monitoring_incidents_interface.setopts(options)
720
+ if options[:dry_run]
721
+ print_dry_run @monitoring_incidents_interface.dry.mute_all(payload)
722
+ return 0
723
+ end
724
+ json_response = @monitoring_incidents_interface.mute_all(payload)
725
+ if options[:json]
726
+ puts as_json(json_response, options)
727
+ elsif !options[:quiet]
728
+ num_updated = json_response['updated']
729
+ print_green_success "Unmuted #{num_updated} open incidents"
730
+ end
731
+ return 0
732
+ rescue RestClient::Exception => e
733
+ print_rest_exception(e, options)
734
+ exit 1
735
+ end
736
+ end
737
+
738
+ def close(args)
739
+ options = {}
740
+ optparse = MtnCloud::Cli::OptionParser.new do |opts|
741
+ opts.banner = subcommand_usage("[id list]")
742
+ build_common_options(opts, options, [:auto_confirm, :quiet, :json, :dry_run, :remote])
743
+ end
744
+ optparse.parse!(args)
745
+ if args.count < 1
746
+ puts optparse
747
+ exit 1
748
+ end
749
+ connect(options)
750
+ id_list = parse_id_list(args)
751
+ unless options[:yes] || ::MtnCloud::Cli::OptionTypes::confirm("Are you sure you would like to close #{id_list.size == 1 ? 'incident' : 'incidents'} #{anded_list(id_list)}?", options)
752
+ exit 1
753
+ end
754
+ return run_command_for_each_arg(id_list) do |arg|
755
+ _close(arg, options)
756
+ end
757
+ end
758
+
759
+ def _close(id, options)
760
+
761
+ begin
762
+ incident = find_incident_by_id(id)
763
+ already_closed = incident['status'] == 'closed'
764
+ @monitoring_incidents_interface.setopts(options)
765
+ if options[:dry_run]
766
+ print_dry_run @monitoring_incidents_interface.dry.close(incident['id'])
767
+ return
768
+ end
769
+ json_response = @monitoring_incidents_interface.close(incident['id'])
770
+ if options[:json]
771
+ print JSON.pretty_generate(json_response)
772
+ print "\n"
773
+ elsif !options[:quiet]
774
+ print_green_success json_response["msg"] || "Incident #{incident['id']} is now closed"
775
+ # _get(incident['id'] options)
776
+ end
777
+ rescue RestClient::Exception => e
778
+ print_rest_exception(e, options)
779
+ exit 1
780
+ end
781
+ end
782
+
783
+ def reopen(args)
784
+ options = {}
785
+ optparse = MtnCloud::Cli::OptionParser.new do |opts|
786
+ opts.banner = subcommand_usage("[id list]")
787
+ build_common_options(opts, options, [:auto_confirm, :quiet, :json, :dry_run, :remote])
788
+ end
789
+ optparse.parse!(args)
790
+ if args.count < 1
791
+ puts optparse
792
+ exit 1
793
+ end
794
+ connect(options)
795
+ id_list = parse_id_list(args)
796
+ unless options[:yes] || ::MtnCloud::Cli::OptionTypes::confirm("Are you sure you would like to reopen #{id_list.size == 1 ? 'incident' : 'incidents'} #{anded_list(id_list)}?", options)
797
+ exit 1
798
+ end
799
+ return run_command_for_each_arg(id_list) do |arg|
800
+ _reopen(arg, options)
801
+ end
802
+ end
803
+
804
+ def _reopen(id, options)
805
+
806
+ begin
807
+ incident = find_incident_by_id(id)
808
+ already_open = incident['status'] == 'open'
809
+ if already_open
810
+ print bold,yellow,"Incident #{incident['id']} is already open",reset,"\n"
811
+ return false
812
+ end
813
+ @monitoring_incidents_interface.setopts(options)
814
+ if options[:dry_run]
815
+ print_dry_run @monitoring_incidents_interface.dry.reopen(incident['id'])
816
+ return
817
+ end
818
+ json_response = @monitoring_incidents_interface.reopen(incident['id'])
819
+ if options[:json]
820
+ print JSON.pretty_generate(json_response)
821
+ print "\n"
822
+ elsif !options[:quiet]
823
+ print_green_success json_response["msg"] || "Incident #{incident['id']} is now open"
824
+ # _get(incident['id'] options)
825
+ end
826
+ rescue RestClient::Exception => e
827
+ print_rest_exception(e, options)
828
+ exit 1
829
+ end
830
+ end
831
+
832
+ private
833
+
834
+
835
+ end