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,129 @@
1
+ require 'mtncloud/cli/cli_command'
2
+
3
+ class MtnCloud::Cli::LoadBalancerPools
4
+ include MtnCloud::Cli::CliCommand
5
+ include MtnCloud::Cli::RestCommand
6
+ include MtnCloud::Cli::SecondaryRestCommand
7
+ include MtnCloud::Cli::LoadBalancersHelper
8
+
9
+ set_command_description "View and manage load balancer pools."
10
+ set_command_name :'load-balancer-pools'
11
+
12
+ set_rest_interface_name :load_balancer_pools_secondary
13
+ set_rest_parent_name :load_balancers
14
+
15
+ register_subcommands :list, :get, :add, :update, :remove
16
+ register_interfaces :load_balancer_pools_secondary, :load_balancers, :load_balancer_types
17
+
18
+
19
+ # set_rest_interface_name :load_balancer_pools
20
+ # set_parent_rest_interface_name :load_balancers
21
+
22
+ # todo: a configurable way to load the optionTypes
23
+ # option_types = loadBalancer['poolOptionTypes']
24
+ # set_rest_has_type true
25
+ # set_rest_type :load_balancer_virtual_server_types
26
+
27
+ protected
28
+
29
+ def load_balancer_pool_list_column_definitions(options)
30
+ {
31
+ "ID" => 'id',
32
+ "Name" => 'name',
33
+ #"Load Balancer" => lambda {|it| it['loadBalancer'] ? it['loadBalancer']['name'] : '' },
34
+ "Balancer Mode" => lambda {|it| it['vipBalance'] },
35
+ "Status" => lambda {|it| format_load_balancer_pool_status(it) }
36
+ }
37
+ end
38
+
39
+ def load_balancer_pool_column_definitions(options)
40
+ {
41
+ "ID" => 'id',
42
+ "Name" => 'name',
43
+ "Load Balancer" => lambda {|it| it['loadBalancer'] ? it['loadBalancer']['name'] : '' },
44
+ "Description" => 'description',
45
+ "Balancer Mode" => lambda {|it| it['vipBalance'] },
46
+ # todo: more properties to show here
47
+ "Status" => lambda {|it| format_load_balancer_pool_status(it) },
48
+ "Created" => lambda {|it| format_local_dt(it['dateCreated']) },
49
+ "Updated" => lambda {|it| format_local_dt(it['lastUpdated']) }
50
+ }
51
+ end
52
+
53
+ def load_balancer_pool_object_key
54
+ 'loadBalancerPool'
55
+ end
56
+
57
+ def load_balancer_pool_list_key
58
+ 'loadBalancerPools'
59
+ end
60
+
61
+ def load_balancer_pool_label
62
+ 'Load Balancer Pool'
63
+ end
64
+
65
+ def load_balancer_pool_label_plural
66
+ 'Load Balancer Pools'
67
+ end
68
+
69
+ def format_load_balancer_pool_status(record, return_color=cyan)
70
+ out = ""
71
+ status_string = record['status']
72
+ if status_string.nil? || status_string.empty? || status_string == "unknown"
73
+ out << "#{white}UNKNOWN#{return_color}"
74
+ elsif status_string == 'online' || status_string == 'ok'
75
+ out << "#{green}#{status_string.upcase}#{return_color}"
76
+ elsif status_string == 'syncing'
77
+ out << "#{yellow}#{status_string.upcase}#{return_color}"
78
+ else
79
+ out << "#{red}#{status_string ? status_string.upcase : 'N/A'}#{record['statusMessage'] ? "#{return_color} - #{record['statusMessage']}" : ''}#{return_color}"
80
+ end
81
+ out
82
+ end
83
+
84
+ def load_option_types_for_load_balancer_pool(type_record, parent_record)
85
+ load_balancer = parent_record
86
+ load_balancer_type_id = load_balancer['type']['id']
87
+ load_balancer_type = find_by_id(:load_balancer_type, load_balancer_type_id)
88
+ load_balancer_type['poolOptionTypes']
89
+ end
90
+
91
+ ## using CliCommand's generic find_by methods
92
+
93
+ def find_load_balancer_pool_by_name_or_id(load_balancer_pool_id, val)
94
+ if val.to_s =~ /\A\d{1,}\Z/
95
+ return find_load_balancer_pool_by_id(load_balancer_pool_id, val)
96
+ else
97
+ return find_load_balancer_pool_by_name(load_balancer_pool_id, val)
98
+ end
99
+ end
100
+
101
+ def find_load_balancer_pool_by_id(load_balancer_pool_id, id)
102
+ begin
103
+ json_response = @load_balancer_pools_secondary_interface.get(load_balancer_pool_id, id.to_i)
104
+ return json_response[load_balancer_pool_object_key]
105
+ rescue RestClient::Exception => e
106
+ if e.response && e.response.code == 404
107
+ print_red_alert "Load Balancer Pool not found by id #{id}"
108
+ else
109
+ raise e
110
+ end
111
+ end
112
+ end
113
+
114
+ def find_load_balancer_pool_by_name(load_balancer_pool_id, name)
115
+ lbs = @load_balancer_pools_secondary_interface.list(load_balancer_pool_id, {name: name.to_s})[load_balancer_pool_list_key]
116
+ if lbs.empty?
117
+ print_red_alert "Load Balancer Pool not found by name #{name}"
118
+ return nil
119
+ elsif lbs.size > 1
120
+ print_red_alert "#{lbs.size} load balancer pools found by name #{name}"
121
+ #print_lbs_table(lbs, {color: red})
122
+ print reset,"\n\n"
123
+ return nil
124
+ else
125
+ return lbs[0]
126
+ end
127
+ end
128
+
129
+ end
@@ -0,0 +1,64 @@
1
+ require 'mtncloud/cli/cli_command'
2
+
3
+ class MtnCloud::Cli::LoadBalancerProfiles
4
+ include MtnCloud::Cli::CliCommand
5
+ include MtnCloud::Cli::RestCommand
6
+ include MtnCloud::Cli::SecondaryRestCommand
7
+ include MtnCloud::Cli::LoadBalancersHelper
8
+
9
+ set_command_description "View and manage load balancer profiles."
10
+ set_command_name :'load-balancer-profiles'
11
+ register_subcommands :list, :get, :add, :update, :remove
12
+ register_interfaces :load_balancer_profiles,
13
+ :load_balancers, :load_balancer_types
14
+
15
+ set_rest_parent_name :load_balancers
16
+
17
+ protected
18
+
19
+ def load_balancer_profile_list_column_definitions(options)
20
+ {
21
+ "ID" => 'id',
22
+ "Name" => 'name',
23
+ # "Profile Type" => lambda {|it| it['config']['profileType'] rescue '' },
24
+ "Service Type" => lambda {|it| it['serviceTypeDisplay'] || it['serviceType'] },
25
+ }
26
+ end
27
+
28
+ def load_balancer_profile_column_definitions(options)
29
+ {
30
+ "ID" => 'id',
31
+ "Name" => 'name',
32
+ "Load Balancer" => lambda {|it| it['loadBalancer'] ? it['loadBalancer']['name'] : '' },
33
+ "Description" => 'description',
34
+ # "Profile Type" => lambda {|it| it['config']['profileType'] rescue '' },
35
+ "Service Type" => lambda {|it| it['serviceTypeDisplay'] || it['serviceType'] },
36
+ "Created" => lambda {|it| format_local_dt(it['dateCreated']) },
37
+ "Updated" => lambda {|it| format_local_dt(it['lastUpdated']) }
38
+ }
39
+ end
40
+
41
+ def load_balancer_profile_object_key
42
+ 'loadBalancerProfile'
43
+ end
44
+
45
+ def load_balancer_profile_list_key
46
+ 'loadBalancerProfiles'
47
+ end
48
+
49
+ def load_balancer_profile_label
50
+ 'Load Balancer Profile'
51
+ end
52
+
53
+ def load_balancer_profile_label_plural
54
+ 'Load Balancer Profiles'
55
+ end
56
+
57
+ def load_option_types_for_load_balancer_profile(type_record, parent_record)
58
+ load_balancer = parent_record
59
+ load_balancer_type_id = load_balancer['type']['id']
60
+ load_balancer_type = find_by_id(:load_balancer_type, load_balancer_type_id)
61
+ load_balancer_type['profileOptionTypes']
62
+ end
63
+
64
+ end
@@ -0,0 +1,38 @@
1
+ require 'mtncloud/cli/cli_command'
2
+
3
+ class MtnCloud::Cli::LoadBalancerTypes
4
+ include MtnCloud::Cli::CliCommand
5
+ include MtnCloud::Cli::RestCommand
6
+ include MtnCloud::Cli::LoadBalancersHelper
7
+
8
+ set_command_name :'load-balancer-types'
9
+ register_subcommands :list, :get
10
+
11
+ # register_interfaces :load_balancer_types
12
+
13
+ protected
14
+
15
+ def load_balancer_type_list_column_definitions(options)
16
+ {
17
+ "ID" => 'id',
18
+ "Name" => 'name',
19
+ "Code" => 'code',
20
+ }
21
+ end
22
+
23
+ def load_balancer_type_column_definitions(options)
24
+ {
25
+ "ID" => 'id',
26
+ "Name" => 'name',
27
+ "Code" => 'code',
28
+ "Creatable" => lambda {|it| format_boolean(it['creatable']) },
29
+ }
30
+ end
31
+
32
+ # overridden to support name or code
33
+ def find_load_balancer_type_by_name_or_id(name)
34
+ load_balancer_type_for_name_or_id(name)
35
+ end
36
+
37
+ end
38
+
@@ -0,0 +1,147 @@
1
+ require 'mtncloud/cli/cli_command'
2
+
3
+ class MtnCloud::Cli::LoadBalancerVirtualServers
4
+ include MtnCloud::Cli::CliCommand
5
+ include MtnCloud::Cli::RestCommand
6
+ include MtnCloud::Cli::SecondaryRestCommand
7
+ include MtnCloud::Cli::LoadBalancersHelper
8
+
9
+ set_command_description "View and manage load balancer virtual servers."
10
+ set_command_name :'load-balancer-virtual-servers'
11
+ register_subcommands :list, :get, :add, :update, :remove
12
+ register_interfaces :load_balancer_virtual_servers,
13
+ :load_balancers, :load_balancer_types
14
+
15
+ set_rest_parent_name :load_balancers
16
+ set_rest_arg 'vipName'
17
+
18
+ # overridden to provide global list functionality without requiring parent argument
19
+ =begin
20
+ def list(args)
21
+ parent_id, parent_record = nil, nil
22
+ params = {}
23
+ options = {}
24
+ optparse = MtnCloud::Cli::OptionParser.new do |opts|
25
+ opts.banner = subcommand_usage("[#{rest_parent_arg}] [search]")
26
+ build_list_options(opts, options, params)
27
+ opts.footer = <<-EOT
28
+ List #{rest_label_plural.downcase}.
29
+ [#{rest_parent_arg}] is optional. This is the #{rest_parent_has_name ? 'name or id' : 'id'} of #{a_or_an(rest_parent_label)} #{rest_parent_label.downcase}.
30
+ [search] is optional. This is a search phrase to filter the results.
31
+ EOT
32
+ end
33
+ optparse.parse!(args)
34
+ parent_id = args[0]
35
+ connect(options)
36
+ if parent_id
37
+ args = args[1..-1]
38
+ parent_record = rest_parent_find_by_name_or_id(parent_id)
39
+ if parent_record.nil?
40
+ return 1, "#{rest_parent_label} not found for '#{parent_id}"
41
+ end
42
+ parent_id = parent_record['id']
43
+ end
44
+ parse_list_options!(args, options, params)
45
+ rest_interface.setopts(options)
46
+ if options[:dry_run]
47
+ print_dry_run rest_interface.dry.list(parent_id, params)
48
+ return
49
+ end
50
+ json_response = rest_interface.list(parent_id, params)
51
+ render_response(json_response, options, rest_list_key) do
52
+ records = json_response[rest_list_key]
53
+ print_h1 "#{rest_label_plural}"
54
+ if records.nil? || records.empty?
55
+ print cyan,"No #{rest_label_plural.downcase} found.",reset,"\n"
56
+ else
57
+ print as_pretty_table(records, rest_list_column_definitions(options).upcase_keys!, options)
58
+ print_results_pagination(json_response) if json_response['meta']
59
+ end
60
+ print reset,"\n"
61
+ end
62
+ return 0, nil
63
+ end
64
+ =end
65
+ protected
66
+
67
+ def parse_list_options!(args, options, params)
68
+ parse_parameter_as_resource_id!(:load_balancer, options, params)
69
+ super
70
+ end
71
+
72
+ def load_balancer_virtual_server_list_column_definitions(options)
73
+ {
74
+ "ID" => 'id',
75
+ "Name" => 'vipName',
76
+ "LB" => lambda {|it| it['loadBalancer'] ? it['loadBalancer']['name'] : '' },
77
+ # "Description" => 'description',
78
+ "Instance" => lambda {|it| it['instance'] ? it['instance']['name'] : '(Unassigned)' },
79
+ "Hostname" => lambda {|it| it['vipHostname'] },
80
+ "VIP" => lambda {|it| it['vipAddress'] },
81
+ "Protocol" => lambda {|it| it['vipProtocol'] },
82
+ "Port" => lambda {|it| it['vipPort'] },
83
+ "SSL" => lambda {|it| format_boolean(it['sslEnabled']) },
84
+ "Status" => lambda {|it| format_virtual_server_status(it) },
85
+ }
86
+ end
87
+
88
+ def load_balancer_virtual_server_column_definitions(options)
89
+ {
90
+ "ID" => 'id',
91
+ "Name" => 'vipName',
92
+ "Description" => 'description',
93
+ "LB" => lambda {|it| it['loadBalancer'] ? it['loadBalancer']['name'] : '' },
94
+ "Instance" => lambda {|it| it['instance'] ? it['instance']['name'] : '(Unassigned)' },
95
+ "Hostname" => lambda {|it| it['vipHostname'] },
96
+ "VIP" => lambda {|it| it['vipAddress'] },
97
+ "Protocol" => lambda {|it| it['vipProtocol'] },
98
+ "Port" => lambda {|it| it['vipPort'] },
99
+ "SSL" => lambda {|it| format_boolean(it['sslEnabled']) },
100
+ # todo: more properties to show here
101
+ "Status" => lambda {|it| format_virtual_server_status(it) },
102
+ "Created" => lambda {|it| format_local_dt(it['dateCreated']) },
103
+ "Updated" => lambda {|it| format_local_dt(it['lastUpdated']) }
104
+ }
105
+ end
106
+
107
+ def load_balancer_virtual_server_object_key
108
+ 'loadBalancerInstance'
109
+ end
110
+
111
+ def load_balancer_virtual_server_list_key
112
+ 'loadBalancerInstances'
113
+ end
114
+
115
+ def load_balancer_virtual_server_label
116
+ 'Virtual Server'
117
+ end
118
+
119
+ def load_balancer_virtual_server_label_plural
120
+ 'Virtual Servers'
121
+ end
122
+
123
+ def format_virtual_server_status(virtual_server, return_color=cyan)
124
+ out = ""
125
+ status_string = virtual_server['vipStatus'] || virtual_server['status']
126
+ if status_string.nil? || status_string.empty? || status_string == "unknown"
127
+ out << "#{white}UNKNOWN#{return_color}"
128
+ elsif status_string == 'online'
129
+ out << "#{green}#{status_string.upcase}#{return_color}"
130
+ elsif status_string == 'syncing'
131
+ out << "#{yellow}#{status_string.upcase}#{return_color}"
132
+ else
133
+ out << "#{red}#{status_string ? status_string.upcase : 'N/A'}#{virtual_server['statusMessage'] ? "#{return_color} - #{virtual_server['statusMessage']}" : ''}#{return_color}"
134
+ end
135
+ out
136
+ end
137
+
138
+ def load_option_types_for_load_balancer_virtual_server(type_record, parent_record)
139
+ load_balancer = parent_record
140
+ load_balancer_type_id = load_balancer['type']['id']
141
+ load_balancer_type = find_by_id(:load_balancer_type, load_balancer_type_id)
142
+ load_balancer_type['vipOptionTypes']
143
+ end
144
+
145
+ ## using CliCommand's generic find_by methods
146
+
147
+ end
@@ -0,0 +1,189 @@
1
+ require 'mtncloud/cli/cli_command'
2
+
3
+ class MtnCloud::Cli::LoadBalancers
4
+ include MtnCloud::Cli::CliCommand
5
+ include MtnCloud::Cli::RestCommand
6
+ include MtnCloud::Cli::LoadBalancersHelper
7
+ include MtnCloud::Cli::ProvisioningHelper
8
+
9
+ set_command_description "View and manage load balancers."
10
+ set_command_name :'load-balancers'
11
+ register_subcommands :list, :get, :add, :update, :remove, :refresh
12
+
13
+ # deprecated the `load-balancers types` command in 5.3.2, it moved to `load-balancer-types list`
14
+ register_subcommands :types
15
+ set_subcommands_hidden :types
16
+
17
+ # RestCommand settings
18
+ register_interfaces :load_balancers, :load_balancer_types
19
+ set_rest_has_type true
20
+ # set_rest_type :load_balancer_types
21
+ set_rest_perms_config({enabled:true, excludes:['plans', 'visibility']})
22
+
23
+ def render_response_for_get(json_response, options)
24
+ render_response(json_response, options, rest_object_key) do
25
+ record = json_response[rest_object_key]
26
+ options[:exclude_username] = record['username'].nil?
27
+ options[:exclude_owner] = record['owner'].nil?
28
+ options[:exclude_tenants] = record['tenants'].nil? || record['tenants'].empty?
29
+ options[:exclude_permissions] = record['resourcePermission'].nil?
30
+ print_h1 rest_label, [], options
31
+ print cyan
32
+ print_description_list(rest_column_definitions(options), record, options)
33
+ # show LB Ports
34
+ ports = record['ports']
35
+ if ports && ports.size > 0
36
+ print_h2 "LB Ports", options
37
+ columns = [
38
+ {"ID" => 'id'},
39
+ {"Name" => 'name'},
40
+ #{"Description" => 'description'},
41
+ {"Port" => lambda {|it| it['port'] } },
42
+ {"Protocol" => lambda {|it| it['proxyProtocol'] } },
43
+ {"SSL" => lambda {|it| it['sslEnabled'] ? "Yes (#{it['sslCert'] ? it['sslCert']['name'] : 'none'})" : "No" } },
44
+ ]
45
+ print as_pretty_table(ports, columns, options)
46
+ end
47
+ print reset,"\n"
48
+ end
49
+ end
50
+
51
+ def refresh(args)
52
+ id = args[0]
53
+ record_type = nil
54
+ record_type_id = nil
55
+ options = {}
56
+ optparse = MtnCloud::Cli::OptionParser.new do |opts|
57
+ opts.banner = subcommand_usage("[#{rest_arg}] [options]")
58
+ build_standard_update_options(opts, options)
59
+ opts.footer = <<-EOT
60
+ Refresh an existing #{rest_label.downcase}.
61
+ [#{rest_arg}] is required. This is the #{rest_has_name ? 'name or id' : 'id'} of #{a_or_an(rest_label)} #{rest_label.downcase}.
62
+ EOT
63
+ end
64
+ optparse.parse!(args)
65
+ verify_args!(args:args, optparse:optparse, count:1)
66
+ connect(options)
67
+ record = rest_find_by_name_or_id(id)
68
+ if record.nil?
69
+ return 1, "#{rest_name} not found for '#{id}'"
70
+ end
71
+ passed_options = parse_passed_options(options)
72
+ payload = {}
73
+ if options[:payload]
74
+ payload = options[:payload]
75
+ payload.deep_merge!({rest_object_key => passed_options}) unless passed_options.empty?
76
+ else
77
+ record_payload = passed_options
78
+ payload[rest_object_key] = record_payload
79
+ end
80
+ rest_interface.setopts(options)
81
+ if options[:dry_run]
82
+ print_dry_run rest_interface.dry.refresh(record['id'], payload)
83
+ return
84
+ end
85
+ json_response = rest_interface.refresh(record['id'], payload)
86
+ render_response(json_response, options, rest_object_key) do
87
+ print_green_success "Refreshing #{rest_label.downcase} #{record['name'] || record['id']}"
88
+ _get(record["id"], {}, options)
89
+ end
90
+ return 0, nil
91
+ end
92
+
93
+ # deprecated, to be removed in the future.
94
+ def types(args)
95
+ print_error yellow,"[DEPRECATED] The command `load-balancers types` is deprecated and replaced by `load-balancer-types list`.",reset,"\n"
96
+ my_terminal.execute("load-balancer-types list #{args.join(' ')}")
97
+ end
98
+
99
+ protected
100
+
101
+ # filtering for NSX-T only
102
+ def rest_list_types()
103
+ rest_type_interface.list({max:10000, creatable:true})[rest_type_list_key] # .reject {|it| it['code'] == 'nsx-t'}
104
+ end
105
+
106
+ def load_balancer_list_column_definitions(options)
107
+ {
108
+ "ID" => 'id',
109
+ "Name" => 'name',
110
+ "Type" => lambda {|it| it['type'] ? it['type']['name'] : '' },
111
+ "Cloud" => lambda {|it| it['cloud'] ? it['cloud']['name'] : '' },
112
+ "Host" => lambda {|it| it['host'] }
113
+ }
114
+ end
115
+
116
+ def load_balancer_column_definitions(options)
117
+ columns = {
118
+ "ID" => 'id',
119
+ "Name" => 'name',
120
+ "Description" => 'description',
121
+ "Type" => lambda {|it| it['type'] ? it['type']['name'] : '' },
122
+ "Cloud" => lambda {|it| it['cloud'] ? it['cloud']['name'] : '' },
123
+ "Visibility" => 'visibility',
124
+ "IP" => 'ip',
125
+ "Host" => 'host',
126
+ "Port" => 'port',
127
+ "Price" => lambda {|it| it['price'].nil? ? 'No pricing configured' : "#{format_money(it['price']['price'], it['price']['currency'])} / #{it['price']['unit'].capitalize}"},
128
+ "Provider ID" => 'externalId'
129
+ }
130
+ columns.merge!({"Username" => 'username'}) if !options[:exclude_username]
131
+ columns.merge!({"Owner" => lambda { |it| it['owner']['name'] rescue '' }}) if !options[:exclude_owner]
132
+ columns.merge!({"Tenants" => lambda { |it| it['tenants'].collect {|tenant| tenant['name']}.join(', ') rescue '' }}) if !options[:exclude_tenants]
133
+ columns.merge({
134
+ "Created" => lambda {|it| format_local_dt(it['dateCreated']) },
135
+ "Updated" => lambda {|it| format_local_dt(it['lastUpdated']) }
136
+ })
137
+ end
138
+
139
+ # overridden to work with name or code
140
+ # nope, api works with name=code now too
141
+ # def find_load_balancer_type_by_name_or_id(name)
142
+ # load_balancer_type_for_name_or_id(name)
143
+ # end
144
+
145
+ # def add_load_balancer_option_types()
146
+ # [
147
+ # {'fieldName' => 'name', 'fieldLabel' => 'Name', 'type' => 'text', 'required' => true},
148
+ # {'fieldName' => 'description', 'fieldLabel' => 'Description', 'type' => 'text', 'required' => false},
149
+ # {'fieldName' => 'enabled', 'fieldLabel' => 'Enabled', 'type' => 'checkbox', 'required' => false, 'defaultValue' => true},
150
+ # # {'fieldName' => 'type', 'fieldLabel' => 'Storage Server Type', 'type' => 'select', 'optionSource' => 'loadBalancerTypes', 'required' => true},
151
+ # ]
152
+ # end
153
+
154
+ def add_load_balancer_advanced_option_types()
155
+ [
156
+ {'fieldName' => 'visibility', 'fieldLabel' => 'Visibility', 'fieldGroup' => 'Advanced', 'type' => 'select', 'selectOptions' => [{'name' => 'Private', 'value' => 'private'},{'name' => 'Public', 'value' => 'public'}], 'required' => false, 'description' => 'Visibility', 'category' => 'permissions', 'defaultValue' => 'public'},
157
+ {'fieldName' => 'tenants', 'fieldLabel' => 'Tenants', 'fieldGroup' => 'Advanced', 'type' => 'multiSelect', 'resultValueField' => 'id', 'optionSource' => lambda { |api_client, api_params|
158
+ api_client.options.options_for_source("allTenants", {})['data']
159
+ }},
160
+ ]
161
+ end
162
+
163
+ # def update_load_balancer_option_types()
164
+ # [
165
+ # {'fieldName' => 'name', 'fieldLabel' => 'Name', 'type' => 'text'},
166
+ # {'fieldName' => 'description', 'fieldLabel' => 'Description', 'type' => 'text'},
167
+ # {'fieldName' => 'enabled', 'fieldLabel' => 'Enabled', 'type' => 'checkbox'},
168
+ # ]
169
+ # end
170
+
171
+ def update_load_balancer_advanced_option_types()
172
+ add_load_balancer_advanced_option_types()
173
+ end
174
+
175
+ def load_option_types_for_load_balancer(type_record, parent_record)
176
+ load_balancer_type = type_record
177
+ # reload it by id to get optionTypes
178
+ option_types = load_balancer_type['optionTypes']
179
+ if option_types.nil?
180
+ load_balancer_type = find_by_id(:load_balancer_type, load_balancer_type['id'])
181
+ if load_balancer_type.nil?
182
+ raise_command_error("Load balancer type not found for id '#{id}'")
183
+ end
184
+ option_types = load_balancer_type['optionTypes']
185
+ end
186
+ return option_types
187
+ end
188
+
189
+ end
@@ -0,0 +1,54 @@
1
+ require 'mtncloud/cli/cli_command'
2
+
3
+ class MtnCloud::Cli::LogLevelCommand
4
+ include MtnCloud::Cli::CliCommand
5
+ set_command_name :'log-level' # :log_level
6
+ set_command_hidden
7
+
8
+ def handle(args)
9
+ options = {}
10
+ optparse = MtnCloud::Cli::OptionParser.new do|opts|
11
+ opts.banner = "Usage: #{prog_name} #{command_name} [debug|info|0|1]"
12
+ #build_common_options(opts, options, [])
13
+ opts.on('-q','--quiet', "No Output, do not print to stdout") do
14
+ options[:quiet] = true
15
+ end
16
+ opts.on('-h', '--help', "Print this help" ) do
17
+ puts opts
18
+ exit
19
+ end
20
+ opts.footer = <<-EOT
21
+ This is intended for use in your #{prog_name} scripts.
22
+ It allows you to set the global logging level.
23
+ The only available levels right now are debug [0] and info [1].
24
+ The default is info [1].
25
+ EOT
26
+ end
27
+ optparse.parse!(args)
28
+ if args.count == 0
29
+ puts "#{MtnCloud::Logging.log_level}"
30
+ return true
31
+ end
32
+ if args.count > 1
33
+ puts optparse
34
+ return false
35
+ end
36
+ debug_was_enabled = MtnCloud::Logging.debug?
37
+ if ["debug", "0"].include?(args[0].to_s.strip.downcase)
38
+ MtnCloud::Logging.set_log_level(MtnCloud::Logging::Logger::DEBUG)
39
+ ::RestClient.log = MtnCloud::Logging.debug? ? MtnCloud::Logging::DarkPrinter.instance : nil
40
+ MtnCloud::Logging::DarkPrinter.puts "debug enabled" unless debug_was_enabled
41
+ elsif ["info", "1"].include?(args[0].to_s.strip.downcase)
42
+ MtnCloud::Logging.set_log_level(MtnCloud::Logging::Logger::INFO)
43
+ ::RestClient.log = MtnCloud::Logging.debug? ? MtnCloud::Logging::DarkPrinter.instance : nil
44
+ elsif args[0].to_i < 6
45
+ MtnCloud::Logging.set_log_level(args[0].to_i)
46
+ ::RestClient.log = MtnCloud::Logging.debug? ? MtnCloud::Logging::DarkPrinter.instance : nil
47
+ else
48
+ puts optparse
49
+ return false
50
+ end
51
+ return true
52
+ end
53
+
54
+ end