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,766 @@
1
+ require 'mtncloud/cli/cli_command'
2
+
3
+ class MtnCloud::Cli::MonitoringChecksCommand
4
+ include MtnCloud::Cli::CliCommand
5
+ include MtnCloud::Cli::MonitoringHelper
6
+
7
+ set_command_name :'monitor-checks'
8
+ register_subcommands :list, :get, :add, :update, :remove
9
+ register_subcommands :mute, :unmute, :history #, :statistics
10
+ register_subcommands :'mute-all' => :mute_all
11
+ register_subcommands :'unmute-all' => :unmute_all
12
+ register_subcommands :'list-types' => :list_types
13
+
14
+ def connect(opts)
15
+ @api_client = establish_remote_appliance_connection(opts)
16
+ @monitoring_interface = @api_client.monitoring
17
+ @monitoring_checks_interface = @api_client.monitoring.checks
18
+ end
19
+
20
+ def handle(args)
21
+ handle_subcommand(args)
22
+ end
23
+
24
+ def list(args)
25
+ options = {}
26
+ params = {}
27
+ optparse = MtnCloud::Cli::OptionParser.new do |opts|
28
+ opts.banner = subcommand_usage()
29
+ # todo: api to load type id by name
30
+ opts.on('-t', '--type TYPE', String, "Filter by Check Type") do |val|
31
+ options[:type] ||= []
32
+ options[:type] << val
33
+ end
34
+ opts.on('--status VALUE', Array, "Filter by status. error,healthy,warning,muted") do |val|
35
+ params['status'] = val
36
+ end
37
+ build_common_options(opts, options, [:list, :query, :last_updated, :json, :yaml, :csv, :fields, :json, :dry_run, :remote])
38
+ end
39
+ optparse.parse!(args)
40
+ connect(options)
41
+ begin
42
+ params.merge!(parse_list_options(options))
43
+ if options[:type]
44
+ # API works with type code or name
45
+ params['type'] = options[:type]
46
+ end
47
+ @monitoring_checks_interface.setopts(options)
48
+ if options[:dry_run]
49
+ print_dry_run @monitoring_checks_interface.dry.list(params)
50
+ return
51
+ end
52
+ json_response = @monitoring_checks_interface.list(params)
53
+ if options[:json]
54
+ puts as_json(json_response, options, "checks")
55
+ return 0
56
+ elsif options[:yaml]
57
+ puts as_yaml(json_response, options, "checks")
58
+ return 0
59
+ elsif options[:csv]
60
+ puts records_as_csv(json_response['checks'], options)
61
+ return 0
62
+ end
63
+ checks = json_response['checks']
64
+ title = "Monitoring Checks"
65
+ subtitles = []
66
+ if options[:type]
67
+ subtitles << "Type: #{options[:type].join(',')}"
68
+ end
69
+ subtitles += parse_list_subtitles(options)
70
+ print_h1 title, subtitles, options
71
+ if checks.empty?
72
+ print cyan,"No checks found.",reset,"\n"
73
+ else
74
+ print_checks_table(checks, options)
75
+ print_results_pagination(json_response, {:label => "check", :n_label => "checks"})
76
+ end
77
+ print reset,"\n"
78
+ rescue RestClient::Exception => e
79
+ print_rest_exception(e, options)
80
+ exit 1
81
+ end
82
+ end
83
+
84
+ def get(args)
85
+ options = {}
86
+ optparse = MtnCloud::Cli::OptionParser.new do |opts|
87
+ opts.banner = subcommand_usage("[id list]")
88
+ opts.on(nil,'--history', "Display Check History") do |val|
89
+ options[:show_history] = true
90
+ end
91
+ # opts.on(nil,'--statistics', "Display Statistics") do |val|
92
+ # options[:show_statistics] = true
93
+ # end
94
+ opts.on('-a','--all', "Display All Details (History, Notifications)") do
95
+ options[:show_history] = true
96
+ options[:show_notifications] = true
97
+ options[:show_statistics] = true
98
+ end
99
+ build_common_options(opts, options, [:json, :csv, :fields, :dry_run, :remote])
100
+ end
101
+ optparse.parse!(args)
102
+ if args.count < 1
103
+ puts optparse
104
+ exit 1
105
+ end
106
+ connect(options)
107
+ id_list = parse_id_list(args)
108
+ return run_command_for_each_arg(id_list) do |arg|
109
+ _get(arg, options)
110
+ end
111
+ end
112
+
113
+ def _get(id, options)
114
+
115
+ begin
116
+ check = find_check_by_name_or_id(id)
117
+ @monitoring_checks_interface.setopts(options)
118
+ if options[:dry_run]
119
+ print_dry_run @monitoring_checks_interface.dry.get(check['id'])
120
+ return
121
+ end
122
+
123
+ # get by ID to sideload associated checks
124
+ json_response = @monitoring_checks_interface.get(check['id'])
125
+ check = json_response['check']
126
+
127
+ if options[:json]
128
+ puts as_json(json_response, options, 'check')
129
+ return 0
130
+ elsif options[:yaml]
131
+ puts as_yaml(json_response, options, 'check')
132
+ return 0
133
+ elsif options[:csv]
134
+ puts records_as_csv([json_response['check']], options)
135
+ return 0
136
+ end
137
+
138
+ print_h1 "Check Details"
139
+ print cyan
140
+ description_cols = {
141
+ "ID" => lambda {|it| it['id'] },
142
+ "Status" => lambda {|it| format_monitoring_check_status(it, true) },
143
+ "Name" => lambda {|it| it['name'] },
144
+ "Time" => lambda {|it| it['lastRunDate'] ? format_local_dt(it['lastRunDate']) : "N/A" },
145
+ "Availability" => lambda {|it| it['availability'] ? "#{it['availability'].to_f.round(3).to_s}%" : "N/A"},
146
+ "Response Time" => lambda {|it| it['lastTimer'] ? "#{it['lastTimer']}ms" : "N/A" },
147
+ "Last Metric" => lambda {|it|
148
+ if it['lastMetric']
149
+ metric_name = it['checkType'] ? it['checkType']['metricName'] : nil
150
+ if metric_name
151
+ "#{it['lastMetric']} #{metric_name}"
152
+ else
153
+ "#{it['lastMetric']}"
154
+ end
155
+ else
156
+ "N/A"
157
+ end
158
+ },
159
+ "Type" => lambda {|it| format_monitoring_check_type(it) },
160
+ "API Key" => lambda {|it| it['apiKey'] },
161
+ "Created By" => lambda {|it| it['createdBy'] ? it['createdBy']['username'] : "System" },
162
+ "Date Created" => lambda {|it| format_local_dt(it['dateCreated']) },
163
+ "Last Updated" => lambda {|it| format_local_dt(it['lastUpdated']) },
164
+ # "Last Error" => lambda {|it| format_local_dt(it['lastErrorDate']) },
165
+ }
166
+ description_cols.delete("API Key") if !['pushCheck'].include?(check['checkType']['code']) || check['apiKey'].nil?
167
+ print_description_list(description_cols, check)
168
+
169
+ # Last Error
170
+ # if check['lastCheckStatus'] == 'error' && check['lastError']
171
+ # print_h2 "Last Error at #{format_local_dt(check['lastErrorDate'])}"
172
+ # print red,"#{check['lastError']}",reset,"\n"
173
+ # end
174
+
175
+ ## Chart Stats
176
+
177
+
178
+ ## Activity
179
+
180
+ ## Groups
181
+
182
+ check_groups = json_response["groups"]
183
+ if check_groups && !check_groups.empty?
184
+ print_h2 "Check Groups"
185
+ print as_pretty_table(check_groups, [:id, :name], options)
186
+ #print_check_groups_table(check_groups, options)
187
+ else
188
+ # print "\n"
189
+ # puts "This check is not in any check groups."
190
+ end
191
+
192
+ apps = json_response["apps"]
193
+ if apps && apps.empty?
194
+ print_h2 "Apps"
195
+ print as_pretty_table(apps, [:id, :name], options)
196
+ else
197
+ # print "\n"
198
+ # puts "This check is not in any monitoring apps."
199
+ end
200
+
201
+ ## Open Incidents
202
+
203
+ open_incidents = json_response["openIncidents"]
204
+
205
+ if open_incidents && !open_incidents.empty?
206
+ print_h2 "Open Incidents"
207
+ print_incidents_table(open_incidents)
208
+ # print_results_pagination(size: open_incidents.size, total: open_incidents.size)
209
+ else
210
+ print "\n", cyan
211
+ puts "No open incidents for this monitoring app"
212
+ end
213
+
214
+ ## History
215
+ if options[:show_history]
216
+ # history_items = json_response["history"]
217
+ # gotta go get it
218
+ history_json_response = @monitoring_checks_interface.history(check["id"], {})
219
+ history_items = history_json_response["history"] || history_json_response["events"] || history_json_response["issues"]
220
+ issues = history_items
221
+ if history_items && !history_items.empty?
222
+ print_h2 "History"
223
+ print_check_history_table(history_items, options)
224
+ print_results_pagination(history_json_response, {:label => "event", :n_label => "events"})
225
+ else
226
+ print "\n"
227
+ puts "No history found for this check"
228
+ end
229
+ end
230
+
231
+ ## Statistics (Hash)
232
+ if options[:show_statistics]
233
+ # todo....
234
+ end
235
+
236
+ print reset,"\n"
237
+
238
+ rescue RestClient::Exception => e
239
+ print_rest_exception(e, options)
240
+ exit 1
241
+ end
242
+ end
243
+
244
+ def history(args)
245
+ options = {}
246
+ params = {}
247
+ optparse = MtnCloud::Cli::OptionParser.new do |opts|
248
+ opts.banner = subcommand_usage("[name] [options]")
249
+ # opts.on('--status LIST', Array, "Filter by status. open, closed") do |list|
250
+ # params['status'] = list
251
+ # end
252
+ opts.on('--severity LIST', Array, "Filter by severity. critical, warning, info") do |list|
253
+ params['severity'] = list
254
+ end
255
+ build_common_options(opts, options, [:list, :last_updated, :json, :yaml, :csv, :fields, :json, :dry_run, :remote])
256
+ end
257
+ optparse.parse!(args)
258
+ if args.count < 1
259
+ puts optparse
260
+ exit 1
261
+ end
262
+ connect(options)
263
+ begin
264
+ check = find_check_by_name_or_id(args[0])
265
+ # return false if check.nil?
266
+
267
+ [:phrase, :offset, :max, :sort, :direction, :lastUpdated].each do |k|
268
+ params[k] = options[k] unless options[k].nil?
269
+ end
270
+ # JD: lastUpdated 500ing, checks don't have that property ? =o Fix it!
271
+ @monitoring_checks_interface.setopts(options)
272
+ if options[:dry_run]
273
+ print_dry_run @monitoring_checks_interface.dry.history(check['id'], params)
274
+ return
275
+ end
276
+
277
+ json_response = @monitoring_checks_interface.history(check['id'], params)
278
+ if options[:json]
279
+ puts as_json(json_response, options, "history")
280
+ return 0
281
+ elsif options[:yaml]
282
+ puts as_yaml(json_response, options, "history")
283
+ return 0
284
+ end
285
+ if options[:csv]
286
+ puts records_as_csv(json_response['history'], options)
287
+ return 0
288
+ end
289
+ history_items = json_response['history']
290
+ title = "Check History: #{check['name']}"
291
+ subtitles = []
292
+ if params[:phrase]
293
+ subtitles << "Search: #{params[:phrase]}".strip
294
+ end
295
+ print_h1 title, subtitles
296
+ if history_items.empty?
297
+ print cyan,"No history found.",reset,"\n"
298
+ else
299
+ print_check_history_table(history_items, options)
300
+ print_results_pagination(json_response, {:label => "event", :n_label => "events"})
301
+ end
302
+ print reset,"\n"
303
+ rescue RestClient::Exception => e
304
+ print_rest_exception(e, options)
305
+ exit 1
306
+ end
307
+ end
308
+
309
+ def add(args)
310
+ options = {:skip_booleanize => true}
311
+ params = {'inUptime' => true, 'severity' => 'critical'}
312
+ check_type_code = nil
313
+ check_type = nil
314
+ optparse = MtnCloud::Cli::OptionParser.new do |opts|
315
+ opts.banner = subcommand_usage("[name] -t CODE")
316
+ opts.on('-t', '--type CODE', "Check Type Code") do |val|
317
+ check_type_code = val
318
+ end
319
+ opts.on('--name VALUE', String, "Name") do |val|
320
+ params['name'] = val
321
+ end
322
+ opts.on('--description VALUE', String, "Description") do |val|
323
+ params['description'] = val
324
+ end
325
+ opts.on('--checkInterval MILLIS', String, "Check Interval. Value is in milliseconds. Default varies by type.") do |val|
326
+ params['checkInterval'] = val.to_i # * 1000
327
+ end
328
+ opts.on('--severity VALUE', String, "Max Severity. Determines the maximum severity level this check can incur on an incident when failing. Default is critical") do |val|
329
+ params['severity'] = val
330
+ end
331
+ opts.on('--inUptime [on|off]', String, "Affects Availability. Default is on.") do |val|
332
+ params['inUptime'] = val.nil? || val.to_s == 'on' || val.to_s == 'true'
333
+ end
334
+ opts.on('-c', '--config JSON', "Config settings as JSON") do |val|
335
+ begin
336
+ params['config'] = JSON.parse(val.to_s)
337
+ rescue => ex
338
+ raise ::OptionParser::InvalidOption.new("Failed to parse --config as JSON. Error: #{ex.message}")
339
+ end
340
+ end
341
+ build_common_options(opts, options, [:options, :payload, :json, :dry_run, :quiet, :remote])
342
+ opts.footer = "List monitoring checks."
343
+ end
344
+ optparse.parse!(args)
345
+ if args.count > 1
346
+ print_error MtnCloud::Terminal.angry_prompt
347
+ puts_error "wrong number of arguments, expected 0-1 and got #{args.count}\n#{optparse}"
348
+ return 1
349
+ end
350
+ if args[0]
351
+ params['name'] = args[0]
352
+ end
353
+ connect(options)
354
+ begin
355
+ # construct payload
356
+ payload = nil
357
+ if options[:payload]
358
+ payload = options[:payload]
359
+ else
360
+ params.deep_merge!(options[:options].reject {|k,v| k.is_a?(Symbol) }) if options[:options]
361
+ # merge in arbitrary option values
362
+ if params['name'].nil?
363
+ v_prompt = MtnCloud::Cli::OptionTypes.prompt([{'fieldName' => 'name', 'type' => 'text', 'fieldLabel' => 'Name', 'required' => true, 'description' => 'The name of this check.'}], options[:options])
364
+ params['name'] = v_prompt['name']
365
+ end
366
+
367
+ # Check Type
368
+ # rescue pre 3.6.5 error with maxResults.toLong()
369
+ available_check_types = []
370
+ begin
371
+ available_check_types = @monitoring_checks_interface.list_check_types({max:1000})['checkTypes']
372
+ rescue RestClient::Exception => e
373
+ available_check_types = @monitoring_checks_interface.list_check_types({})['checkTypes']
374
+ end
375
+ if available_check_types && available_check_types.size > 0
376
+ options[:options]['type'] = check_type_code if check_type_code
377
+ check_types_dropdown = available_check_types.collect {|it| {'name' => it['name'], 'value' => it['code']} }
378
+ v_prompt = MtnCloud::Cli::OptionTypes.prompt([{'fieldName' => 'type', 'type' => 'select', 'selectOptions' => check_types_dropdown, 'fieldLabel' => 'Check Type', 'required' => true, 'description' => 'The check type code.'}], options[:options])
379
+ check_type_code = v_prompt['type']
380
+ end
381
+ if check_type_code
382
+ params['checkType'] = {'code' => check_type_code}
383
+ end
384
+
385
+ # todo: load check type optionTypes and prompt accordingly..
386
+
387
+ # include arbitrary -O options
388
+ extra_passed_options = options[:options].reject {|k,v| k.is_a?(Symbol) || ['type'].include?(k)}
389
+ params.deep_merge!(extra_passed_options)
390
+
391
+ payload = {'check' => params}
392
+ end
393
+ @monitoring_checks_interface.setopts(options)
394
+ if options[:dry_run]
395
+ print_dry_run @monitoring_checks_interface.dry.create(payload)
396
+ return
397
+ end
398
+ json_response = @monitoring_checks_interface.create(payload)
399
+ if options[:json]
400
+ puts as_json(json_response, options)
401
+ elsif !options[:quiet]
402
+ check = json_response['check']
403
+ print_green_success "Added check #{check['name']}"
404
+ _get(check['id'], options)
405
+ end
406
+ return 0
407
+ rescue RestClient::Exception => e
408
+ print_rest_exception(e, options)
409
+ exit 1
410
+ end
411
+ end
412
+
413
+ def update(args)
414
+ options = {:skip_booleanize => true}
415
+ params = {}
416
+ optparse = MtnCloud::Cli::OptionParser.new do |opts|
417
+ opts.banner = subcommand_usage("[name]")
418
+ opts.on('--name VALUE', String, "Name") do |val|
419
+ params['name'] = val
420
+ end
421
+ opts.on('--description VALUE', String, "Description") do |val|
422
+ params['description'] = val
423
+ end
424
+ opts.on('--checkInterval VALUE', String, "Check Interval. Value is in milliseconds.") do |val|
425
+ params['checkInterval'] = val.to_i # * 1000
426
+ end
427
+ opts.on('--severity VALUE', String, "Max Severity. Determines the maximum severity level this check can incur on an incident when failing. Default is critical") do |val|
428
+ params['severity'] = val
429
+ end
430
+ opts.on('--inUptime [on|off]', String, "Affects Availability. Default is on.") do |val|
431
+ params['inUptime'] = val.nil? || val.to_s == 'on' || val.to_s == 'true'
432
+ end
433
+ build_common_options(opts, options, [:options, :payload, :json, :dry_run, :quiet, :remote])
434
+ opts.footer = "Update a monitoring check." + "\n" +
435
+ "[name] is required. This is the name or id of a check." + "\n" +
436
+ "The available options vary by type."
437
+ end
438
+ optparse.parse!(args)
439
+ if args.count != 1
440
+ print_error MtnCloud::Terminal.angry_prompt
441
+ puts_error "wrong number of arguments, expected 1 and got #{args.count}\n#{optparse}"
442
+ return 1
443
+ end
444
+ connect(options)
445
+ begin
446
+ check = find_check_by_name_or_id(args[0])
447
+ # construct payload
448
+ payload = nil
449
+ if options[:payload]
450
+ payload = options[:payload]
451
+ else
452
+ # merge -O options into normally parsed options
453
+ params.deep_merge!(options[:options].reject {|k,v| k.is_a?(Symbol) }) if options[:options]
454
+ if params['checks']
455
+ params['checks'] = params['checks'].collect {|it| it.to_i }
456
+ end
457
+ # todo: prompt?
458
+ payload = {'check' => params}
459
+ end
460
+ @monitoring_checks_interface.setopts(options)
461
+ if options[:dry_run]
462
+ print_dry_run @monitoring_checks_interface.dry.update(check["id"], payload)
463
+ return
464
+ end
465
+ json_response = @monitoring_checks_interface.update(check["id"], payload)
466
+ if options[:json]
467
+ puts as_json(json_response, options)
468
+ elsif !options[:quiet]
469
+ print_green_success "Updated check #{check['name']}"
470
+ _get(check['id'], options)
471
+ end
472
+ return 0
473
+ rescue RestClient::Exception => e
474
+ print_rest_exception(e, options)
475
+ exit 1
476
+ end
477
+ end
478
+
479
+
480
+ def mute(args)
481
+ options = {}
482
+ params = {}
483
+ optparse = MtnCloud::Cli::OptionParser.new do |opts|
484
+ opts.banner = subcommand_usage("[name]")
485
+ opts.on(nil, "--disable", "Disable mute state instead, the same as unmute") do
486
+ params['enabled'] = false
487
+ params['muted'] = false
488
+ end
489
+ build_common_options(opts, options, [:options, :payload, :json, :dry_run, :quiet, :remote])
490
+ opts.footer = "Mute a check. This prevents it from creating new incidents." + "\n" +
491
+ "[name] is required. This is the name or id of a check."
492
+ end
493
+ optparse.parse!(args)
494
+ if args.count != 1
495
+ puts optparse
496
+ return 1
497
+ end
498
+ connect(options)
499
+ begin
500
+ check = find_check_by_name_or_id(args[0])
501
+ # construct payload
502
+ payload = nil
503
+ if options[:payload]
504
+ payload = options[:payload]
505
+ else
506
+ payload = params
507
+ end
508
+ @monitoring_checks_interface.setopts(options)
509
+ if options[:dry_run]
510
+ print_dry_run @monitoring_checks_interface.dry.mute(check["id"], payload)
511
+ return 0
512
+ end
513
+ json_response = @monitoring_checks_interface.mute(check["id"], payload)
514
+ if options[:json]
515
+ puts as_json(json_response, options)
516
+ elsif !options[:quiet]
517
+ if params['muted'] != false
518
+ print_green_success "Muted check #{check['name']}"
519
+ else
520
+ print_green_success "Unmuted check #{check['name']}"
521
+ end
522
+ _get(check['id'], options)
523
+ end
524
+ return 0
525
+ rescue RestClient::Exception => e
526
+ print_rest_exception(e, options)
527
+ exit 1
528
+ end
529
+ end
530
+
531
+ def unmute(args)
532
+ options = {}
533
+ params = {'enabled' => false}
534
+ optparse = MtnCloud::Cli::OptionParser.new do |opts|
535
+ opts.banner = subcommand_usage("[name]")
536
+ build_common_options(opts, options, [:payload, :json, :dry_run, :quiet, :remote])
537
+ opts.footer = "Unmute a check." + "\n" +
538
+ "[name] is required. This is the name or id of a check."
539
+ end
540
+ optparse.parse!(args)
541
+ if args.count != 1
542
+ puts optparse
543
+ return 1
544
+ end
545
+ connect(options)
546
+
547
+ begin
548
+ check = find_check_by_name_or_id(args[0])
549
+ # construct payload
550
+ payload = nil
551
+ if options[:payload]
552
+ payload = options[:payload]
553
+ else
554
+ payload = params
555
+ end
556
+ @monitoring_checks_interface.setopts(options)
557
+ if options[:dry_run]
558
+ print_dry_run @monitoring_checks_interface.dry.mute(check["id"], payload)
559
+ return 0
560
+ end
561
+ json_response = @monitoring_checks_interface.mute(check["id"], payload)
562
+ if options[:json]
563
+ puts as_json(json_response, options)
564
+ elsif !options[:quiet]
565
+ print_green_success "Unmuted check #{check['name']}"
566
+ _get(check['id'], options)
567
+ end
568
+ return 0
569
+ rescue RestClient::Exception => e
570
+ print_rest_exception(e, options)
571
+ exit 1
572
+ end
573
+ end
574
+
575
+ def mute_all(args)
576
+ options = {}
577
+ params = {}
578
+ optparse = MtnCloud::Cli::OptionParser.new do |opts|
579
+ opts.banner = subcommand_usage()
580
+ opts.on(nil, "--disable", "Disable mute state instead, the same as unmute-all") do
581
+ params['muted'] = false
582
+ params['enabled'] = false
583
+ end
584
+ build_common_options(opts, options, [:options, :payload, :json, :dry_run, :quiet, :remote])
585
+ opts.footer = "Mute all checks. This prevents the creation new incidents."
586
+ end
587
+ optparse.parse!(args)
588
+ if args.count != 0
589
+ puts optparse
590
+ return 1
591
+ end
592
+ connect(options)
593
+ begin
594
+ # construct payload
595
+ payload = nil
596
+ if options[:payload]
597
+ payload = options[:payload]
598
+ else
599
+ payload = params
600
+ end
601
+ @monitoring_checks_interface.setopts(options)
602
+ if options[:dry_run]
603
+ print_dry_run @monitoring_checks_interface.dry.mute_all(payload)
604
+ return 0
605
+ end
606
+ json_response = @monitoring_checks_interface.mute_all(payload)
607
+ if options[:json]
608
+ puts as_json(json_response, options)
609
+ elsif !options[:quiet]
610
+ num_updated = json_response['updated']
611
+ if params['muted'] != false
612
+ print_green_success "Muted #{num_updated} checks"
613
+ else
614
+ print_green_success "Unmuted #{num_updated} checks"
615
+ end
616
+ end
617
+ return 0
618
+ rescue RestClient::Exception => e
619
+ print_rest_exception(e, options)
620
+ exit 1
621
+ end
622
+ end
623
+
624
+ def unmute_all(args)
625
+ options = {}
626
+ params = {'muted' => false, 'enabled' => false}
627
+ optparse = MtnCloud::Cli::OptionParser.new do |opts|
628
+ opts.banner = subcommand_usage()
629
+ build_common_options(opts, options, [:payload, :json, :dry_run, :quiet, :remote])
630
+ opts.footer = "Unmute all checks."
631
+ end
632
+ optparse.parse!(args)
633
+ if args.count != 0
634
+ puts optparse
635
+ return 1
636
+ end
637
+ connect(options)
638
+
639
+ begin
640
+ # construct payload
641
+ payload = nil
642
+ if options[:payload]
643
+ payload = options[:payload]
644
+ else
645
+ payload = params
646
+ end
647
+ @monitoring_checks_interface.setopts(options)
648
+ if options[:dry_run]
649
+ print_dry_run @monitoring_checks_interface.dry.mute_all(payload)
650
+ return 0
651
+ end
652
+ json_response = @monitoring_checks_interface.mute_all(payload)
653
+ if options[:json]
654
+ puts as_json(json_response, options)
655
+ elsif !options[:quiet]
656
+ num_updated = json_response['updated']
657
+ print_green_success "Unmuted #{num_updated} checks"
658
+ end
659
+ return 0
660
+ rescue RestClient::Exception => e
661
+ print_rest_exception(e, options)
662
+ exit 1
663
+ end
664
+ end
665
+
666
+ def remove(args)
667
+ options = {}
668
+ params = {}
669
+ optparse = MtnCloud::Cli::OptionParser.new do |opts|
670
+ opts.banner = subcommand_usage("[name]")
671
+ build_common_options(opts, options, [:auto_confirm, :json, :dry_run, :quiet, :remote])
672
+ end
673
+ optparse.parse!(args)
674
+ if args.count != 1
675
+ puts optparse
676
+ return 127
677
+ end
678
+ connect(options)
679
+
680
+ begin
681
+ check = find_check_by_name_or_id(args[0])
682
+
683
+ unless options[:yes] || ::MtnCloud::Cli::OptionTypes::confirm("Are you sure you would like to delete check '#{check['name']}'?", options)
684
+ return false
685
+ end
686
+ @monitoring_checks_interface.setopts(options)
687
+ if options[:dry_run]
688
+ print_dry_run @monitoring_checks_interface.dry.destroy(check["id"])
689
+ return
690
+ end
691
+
692
+ json_response = @monitoring_checks_interface.destroy(check["id"])
693
+ if options[:json]
694
+ puts as_json(json_response, options)
695
+ elsif !options[:quiet]
696
+ print_green_success "Deleted check #{check['id']}"
697
+ end
698
+ return 0, nil
699
+ rescue RestClient::Exception => e
700
+ print_rest_exception(e, options)
701
+ return 1
702
+ end
703
+ end
704
+
705
+ def list_types(args)
706
+ options = {}
707
+ params = {}
708
+ optparse = MtnCloud::Cli::OptionParser.new do |opts|
709
+ opts.banner = subcommand_usage()
710
+ build_common_options(opts, options, [:list, :json, :yaml, :csv, :fields, :dry_run, :remote])
711
+ opts.footer = "List monitoring check types."
712
+ end
713
+ optparse.parse!(args)
714
+ connect(options)
715
+ begin
716
+ [:phrase, :offset, :max, :sort, :direction].each do |k|
717
+ params[k] = options[k] unless options[k].nil?
718
+ end
719
+ @monitoring_checks_interface.setopts(options)
720
+ if options[:dry_run]
721
+ print_dry_run @monitoring_checks_interface.dry.list_check_types(params)
722
+ return
723
+ end
724
+
725
+ json_response = @monitoring_checks_interface.list_check_types(params)
726
+ if options[:json]
727
+ puts as_json(json_response, options, "checkTypes")
728
+ return 0
729
+ elsif options[:yaml]
730
+ puts as_yaml(json_response, options, "checkTypes")
731
+ return 0
732
+ elsif options[:csv]
733
+ puts records_as_csv(json_response["checkTypes"], options)
734
+ return 0
735
+ end
736
+ check_types = json_response['checkTypes']
737
+ title = "Check Types"
738
+ subtitles = []
739
+ if params[:phrase]
740
+ subtitles << "Search: #{params[:phrase]}".strip
741
+ end
742
+ print_h1 title, subtitles
743
+ if check_types.empty?
744
+ print cyan,"No check types found.",reset,"\n"
745
+ else
746
+ # columns = [:code, :name]
747
+ columns = [
748
+ # {"ID" => lambda {|check_type| check_type['id'] } },
749
+ {"NAME" => lambda {|check_type| check_type['name'] } },
750
+ {"CODE" => lambda {|check_type| check_type['code'] } },
751
+ {"METRIC" => lambda {|check_type| check_type['metricName'] } },
752
+ {"DEFAULT INTERVAL" => lambda {|check_type| check_type['defaultInterval'] ? format_human_duration(check_type['defaultInterval'].to_i / 1000) : '' } }
753
+ ]
754
+ print as_pretty_table(check_types, columns, options)
755
+ print_results_pagination(json_response, {:label => "type", :n_label => "types"})
756
+ end
757
+ print reset,"\n"
758
+ rescue RestClient::Exception => e
759
+ print_rest_exception(e, options)
760
+ exit 1
761
+ end
762
+ end
763
+
764
+ private
765
+
766
+ end