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,278 @@
1
+ require 'mtncloud/cli/cli_command'
2
+
3
+ # This command allows the creation of an alias
4
+ # these aliases are stored in the $MTNCLOUD_CLI_HOME/.mtncloudrc
5
+ # See MtnCloud::Cli::DotFile
6
+ #
7
+ class MtnCloud::Cli::AliasCommand
8
+ include MtnCloud::Cli::CliCommand
9
+ set_command_name :alias
10
+ set_command_description "Aliases for commands"
11
+ register_subcommands :add, :export, :remove, :list
12
+ #set_default_subcommand :add
13
+
14
+ def initialize()
15
+ end
16
+
17
+ def handle(args)
18
+ if args.empty?
19
+ list(args)
20
+ #add(args)
21
+ elsif self.class.has_subcommand?(args[0])
22
+ handle_subcommand(args)
23
+ elsif (args.count == 1) && (args[0] == '-h' || args[0] == '--help')
24
+ handle_subcommand(args)
25
+ elsif (args.count == 1) || (args.count == 2 && args.include?('-e'))
26
+ add(args)
27
+ else
28
+ handle_subcommand(args)
29
+ #list([])
30
+ end
31
+ end
32
+
33
+ def add(args)
34
+ options = {}
35
+ do_export = false
36
+ optparse = MtnCloud::Cli::OptionParser.new do|opts|
37
+ opts.banner = subcommand_usage("[name]='[command]'")
38
+ #build_common_options(opts, options, [])
39
+ opts.on( '-e', '--export', "Export this alias to your .mtncloud_profile for future use" ) do
40
+ do_export = true
41
+ end
42
+ opts.on('-h', '--help', "Print this help" ) do
43
+ puts opts
44
+ exit
45
+ end
46
+ formatted_commands_map = " " + subcommands.sort.collect {|cmd| "\t#{cmd}" }.join("\n")
47
+ opts.footer = <<-EOT
48
+ Define a new alias.
49
+ [name] is required. This is the alias name. It should be one word.
50
+ [command] is required. This is the full command wrapped in quotes.
51
+ Aliases can be exported for future use with the -e option.
52
+ The `alias add` command can be invoked with `alias [name]=[command]`
53
+
54
+ Examples:
55
+ alias cloud=clouds
56
+ alias ij='instances get -j'
57
+ alias new-hosts='hosts list -S id -D'
58
+ EOT
59
+
60
+ end
61
+ optparse.parse!(args)
62
+ verify_args!(args:args, optparse:optparse, min: 1)
63
+
64
+ # make this super forgiving.. my name = command -j -O value=woot
65
+ # the old way, as one argument "name='command'"
66
+ # no spaces.. name="command -j -O value=woot"
67
+ if (args.count == 1)
68
+ alias_definition = args[0]
69
+ elsif (args.count == 2)
70
+ alias_definition = "#{args[0]}='#{args[1]}'"
71
+ else
72
+ # meh, never gets here now anyway..
73
+ # alias_definition = args.join(' ')
74
+ args_alias_str = ""
75
+ alias_parts = args.join(' ').split('=')
76
+ left_side = alias_parts[0]
77
+ right_side = alias_parts[1..-1].join(' ')
78
+ args_alias_str = ""
79
+ alias_definition = "#{left_side}='#{right_side}'"
80
+ end
81
+
82
+
83
+ begin
84
+ alias_name, command_string = MtnCloud::Cli::CliRegistry.parse_alias_definition(alias_definition)
85
+ if alias_name.empty? || command_string.empty?
86
+ print_red_alert "invalid alias syntax: #{alias_definition}"
87
+ return false
88
+ end
89
+ MtnCloud::Cli::CliRegistry.instance.add_alias(alias_name, command_string)
90
+ #print "registered alias #{alias_name}", "\n"
91
+ if do_export
92
+ # puts "exporting alias '#{alias_name}' now..."
93
+ mtncloud_profile = MtnCloud::Cli::DotFile.new(MtnCloud::Cli::DotFile.mtncloud_profile_filename)
94
+ mtncloud_profile.export_aliases({(alias_name) => command_string})
95
+ end
96
+ rescue MtnCloud::Cli::CliRegistry::BadAlias => err
97
+ print_red_alert "#{err.message}"
98
+ return false
99
+ rescue => err
100
+ # raise err
101
+ print_red_alert "#{err.message}"
102
+ return false
103
+ end
104
+
105
+ if MtnCloud::Cli::Shell.has_instance?
106
+ MtnCloud::Cli::Shell.instance.recalculate_auto_complete_commands()
107
+ end
108
+
109
+ end
110
+
111
+ def export(args)
112
+ options = {}
113
+ do_export = false
114
+ optparse = MtnCloud::Cli::OptionParser.new do|opts|
115
+ opts.banner = subcommand_usage("[alias] [alias2] [alias3]")
116
+ build_common_options(opts, options, [])
117
+ opts.footer = "Export an alias, saving it to your .mtncloud_profile for future use"
118
+ end
119
+ optparse.parse!(args)
120
+ verify_args!(args:args, optparse:optparse, min: 1)
121
+ alias_names = args
122
+ alias_names.each do |arg|
123
+ if !MtnCloud::Cli::CliRegistry.has_alias?(arg)
124
+ print_red_alert "alias not found by name '#{arg}'"
125
+ return false
126
+ end
127
+ end
128
+ alias_definitions = {}
129
+ alias_names.each do |alias_name|
130
+ alias_definitions[alias_name] = MtnCloud::Cli::CliRegistry.instance.get_alias(alias_name)
131
+ end
132
+ mtncloud_profile = MtnCloud::Cli::DotFile.new(MtnCloud::Cli::DotFile.mtncloud_profile_filename)
133
+ mtncloud_profile.export_aliases(alias_definitions)
134
+
135
+ # MtnCloud::Cli::Shell.instance.recalculate_auto_complete_commands() if MtnCloud::Cli::Shell.instance
136
+
137
+ end
138
+
139
+ def remove(args)
140
+ options = {}
141
+ optparse = MtnCloud::Cli::OptionParser.new do|opts|
142
+ opts.banner = subcommand_usage("[alias1] [alias2]")
143
+ build_common_options(opts, options, [])
144
+ opts.footer = "This is how you remove alias definitions from your .mtncloud_profile" + "\n"
145
+ "Pass one or more alias names to remove."
146
+ end
147
+ optparse.parse!(args)
148
+ if args.count < 1
149
+ puts optparse
150
+ exit 1
151
+ end
152
+ alias_names = args
153
+ alias_names.each do |arg|
154
+ if !MtnCloud::Cli::CliRegistry.has_alias?(arg)
155
+ print_red_alert "alias not found by name '#{arg}'"
156
+ return false
157
+ end
158
+ end
159
+ mtncloud_profile = MtnCloud::Cli::DotFile.new(MtnCloud::Cli::DotFile.mtncloud_profile_filename)
160
+ mtncloud_profile.remove_aliases(alias_names)
161
+
162
+ # unregister them
163
+ alias_names.each do |alias_name|
164
+ MtnCloud::Cli::CliRegistry.instance.remove_alias(alias_name)
165
+ end
166
+
167
+ # if args.count == 1
168
+ # puts "removed alias '#{alias_names[0]}'"
169
+ # else
170
+ # puts "removed aliases '#{alias_names.join(', ')}'"
171
+ # end
172
+
173
+ MtnCloud::Cli::Shell.instance.recalculate_auto_complete_commands() if MtnCloud::Cli::Shell.instance
174
+
175
+ end
176
+
177
+ def list(args)
178
+ options = {format:'table', sort:'name'}
179
+ do_export = false
180
+ optparse = MtnCloud::Cli::OptionParser.new do|opts|
181
+ opts.banner = subcommand_usage()
182
+ opts.on( '-f', '--format FORMAT', "The format for the output: export, json, list, table (default)." ) do |val|
183
+ options[:format] = val
184
+ end
185
+ opts.on( '-e', '--export', "Include the '-e' switch after each alias in the output. This implies --format export." ) do
186
+ options[:format] = 'export'
187
+ do_export = true
188
+ end
189
+ build_common_options(opts, options, [:list, :json])
190
+ opts.footer = <<-EOT
191
+ Print list of defined aliases.
192
+ Use the --format option to vary output.
193
+ The `alias list` command can be abbreviated as just `alias`.
194
+ EOT
195
+ end
196
+ optparse.parse!(args)
197
+
198
+ my_aliases = MtnCloud::Cli::CliRegistry.all_aliases.collect {|k,v|
199
+ {name: k, command: v}
200
+ }
201
+
202
+ # todo: generic support :list options on a local Array
203
+ if options[:phrase]
204
+ # my_aliases = my_aliases.grep(/^#{Regexp.escape(options[:phrase])}/)
205
+ match_regex = /#{Regexp.escape(options[:phrase])}/
206
+ my_aliases = my_aliases.select {|it|
207
+ it[:name].to_s =~ match_regex || it[:command].to_s =~ match_regex
208
+ }
209
+ end
210
+
211
+ options[:sort] ||= 'name'
212
+ options[:direction] ||= 'asc'
213
+
214
+ if options[:sort]
215
+ if options[:sort].to_s == 'name' || options[:sort].to_s == 'alias'
216
+ my_aliases = my_aliases.sort {|x,y| x[:name].to_s.downcase <=> y[:name].to_s.downcase }
217
+ elsif options[:sort].to_s == 'command' || options[:sort].to_s == 'command_string'
218
+ # just relies on the order they were registered in, heh...
219
+ my_aliases = my_aliases.sort {|x,y| x[:command].to_s.downcase <=> y[:command].to_s.downcase }
220
+ else
221
+ # a-z is the default, and the best
222
+ end
223
+ end
224
+
225
+ if options[:direction] == 'desc'
226
+ my_aliases = my_aliases.reverse
227
+ end
228
+ if options[:offset]
229
+ my_aliases = my_aliases.slice(options[:offset].to_i, my_aliases.size)
230
+ end
231
+ if options[:max]
232
+ my_aliases = my_aliases.first(options[:max].to_i)
233
+ end
234
+ num_aliases = my_aliases.size
235
+ out = ""
236
+ if options[:json]
237
+ options[:format] = 'json'
238
+ end
239
+ if options[:format] == 'json' || options[:json]
240
+ alias_json = {}
241
+ my_aliases.each do |it|
242
+ alias_json[it[:name]] = it[:command]
243
+ end
244
+ out << JSON.pretty_generate({aliases: alias_json})
245
+ out << "\n"
246
+ elsif options[:format] == 'export' || options[:format] == 'e' || options[:format] == 'config'
247
+ # out << "# mtncloud aliases for #{`whoami`}\n" # windows!
248
+ #out << "# mtncloud aliases\n"
249
+ my_aliases.each do |it|
250
+ out << "alias #{it[:name]}='#{it[:command]}'"
251
+ if do_export
252
+ out << " -e"
253
+ end
254
+ out << "\n"
255
+ end
256
+ elsif options[:format] == 'list'
257
+ my_aliases.each do |it|
258
+ out << "#{cyan}#{it[:name]}#{reset}='#{it[:command]}'"
259
+ out << "\n"
260
+ end
261
+ out << reset
262
+ else
263
+ # table (default)
264
+ alias_columns = {
265
+ "ALIAS" => lambda {|it| it[:name] },
266
+ "COMMAND" => lambda {|it| it[:command] }
267
+ }
268
+ out << "\n"
269
+ out << cyan
270
+ out << as_pretty_table(my_aliases, alias_columns, {:border_style => :thin}.merge(options))
271
+ out << format_results_pagination({'size' => my_aliases.size, 'total' => my_aliases.size.to_i})
272
+ out << reset
273
+ out << "\n"
274
+ end
275
+ print out
276
+ end
277
+
278
+ end
@@ -0,0 +1,382 @@
1
+ require 'mtncloud/cli/cli_command'
2
+
3
+ class MtnCloud::Cli::ApplianceSettingsCommand
4
+ include MtnCloud::Cli::CliCommand
5
+ include MtnCloud::Cli::AccountsHelper
6
+
7
+ set_command_name :'appliance-settings'
8
+
9
+ register_subcommands :get, :update, :toggle_maintenance, :'reindex'
10
+
11
+ set_default_subcommand :get
12
+
13
+ def connect(opts)
14
+ @api_client = establish_remote_appliance_connection(opts)
15
+ @appliance_settings_interface = @api_client.appliance_settings
16
+ @roles_interface = @api_client.roles
17
+ end
18
+
19
+ def handle(args)
20
+ handle_subcommand(args)
21
+ end
22
+
23
+ def get(args)
24
+ options = {}
25
+ optparse = MtnCloud::Cli::OptionParser.new do |opts|
26
+ opts.banner = subcommand_usage()
27
+ build_common_options(opts, options, [:query, :json, :yaml, :csv, :fields, :dry_run, :remote])
28
+ opts.footer = "Get appliance settings."
29
+ end
30
+ optparse.parse!(args)
31
+ connect(options)
32
+ if args.count != 0
33
+ raise_command_error "wrong number of arguments, expected 0 and got (#{args.count}) #{args}\n#{optparse}"
34
+ return 1
35
+ end
36
+
37
+ begin
38
+ @appliance_settings_interface.setopts(options)
39
+
40
+ if options[:dry_run]
41
+ print_dry_run @appliance_settings_interface.dry.get()
42
+ return
43
+ end
44
+ json_response = @appliance_settings_interface.get()
45
+ if options[:json]
46
+ puts as_json(json_response, options, "applianceSettings")
47
+ return 0
48
+ elsif options[:yaml]
49
+ puts as_yaml(json_response, options, "applianceSettings")
50
+ return 0
51
+ elsif options[:csv]
52
+ puts records_as_csv([json_response['applianceSettings']], options)
53
+ return 0
54
+ end
55
+
56
+ appliance_settings = json_response['applianceSettings']
57
+
58
+ print_h1 "Appliance Settings"
59
+ print cyan
60
+ description_cols = {
61
+ "Appliance URL" => lambda {|it| it['applianceUrl'] },
62
+ "Internal Appliance URL (PXE)" => lambda {|it| it['internalApplianceUrl'] },
63
+ "API Allowed Origins" => lambda {|it| it['apiAllowedOrigins'] },
64
+ # Tenant Management Settings
65
+ "Registration Enabled" => lambda {|it| format_boolean(it['registrationEnabled']) },
66
+ "Default Tenant Role" => lambda {|it| it['defaultRoleId'] },
67
+ "Default User Role" => lambda {|it| it['defaultUserRoleId'] },
68
+ "Docker Privileged Mode" => lambda {|it| format_boolean(it['dockerPrivilegedMode']) },
69
+ # User Management Settings
70
+ "Expire Password After" => lambda {|it| format_days(it['expirePwdDays']) },
71
+ "Disable User After Attempts" => lambda {|it| it['disableAfterAttempts'] == 0 ? 'Disabled' : it['disableAfterAttempts']},
72
+ "Disable User if Inactive For" => lambda {|it| format_days(it['disableAfterDaysInactive']) },
73
+ "Send warning email before deactivating" => lambda {|it| format_days(it['warnUserDaysBefore']) },
74
+ # Email Settings
75
+ "SMTP From Address" => lambda {|it| it['smtpMailFrom'] },
76
+ "SMTP Server" => lambda {|it| it['smtpServer'] },
77
+ "SMTP Port" => lambda {|it| it['smtpPort'] },
78
+ "SMTP SSL Enabled" => lambda {|it| format_boolean(it['smtpSSL']) },
79
+ "SMTP TLS Encryption" => lambda {|it| format_boolean(it['smtpTLS']) },
80
+ "SMTP User" => lambda {|it| it['smtpUser'] },
81
+ "SMTP Password" => lambda {|it| it['smtpPassword'] },
82
+ # Proxy Settings
83
+ "Proxy Host" => lambda {|it| it['proxyHost'] },
84
+ "Proxy Port" => lambda {|it| it['proxyPort'] },
85
+ "Proxy User" => lambda {|it| it['proxyUser'] },
86
+ "Proxy Password" => lambda {|it| it['proxyPassword'] },
87
+ "Proxy Domain" => lambda {|it| it['proxyDomain'] },
88
+ "Proxy Workstation" => lambda {|it| it['proxyWorkstation'] },
89
+ # Currency Settings
90
+ "Currency Provider" => lambda {|it| it['currencyProvider'] },
91
+ "Currency Provider API Key" => lambda {|it| it['currencyKey'] },
92
+ # Retention Settings
93
+ "Stats Retainment Period" => lambda {|it| it['statsRetainmentPeriod'] ? it['statsRetainmentPeriod'].to_s + ' days' : '' },
94
+ }
95
+ print_description_list(description_cols, appliance_settings)
96
+
97
+ enabled_zone_types = appliance_settings['enabledZoneTypes']
98
+
99
+ if enabled_zone_types.nil? || enabled_zone_types.empty?
100
+ print_h2 "Enabled Clouds"
101
+ print cyan
102
+ print yellow "No Clouds Enabled"
103
+ else
104
+ print_h2 "Enabled Clouds"
105
+ print cyan
106
+ print enabled_zone_types.collect {|it| it['name']}.join(', ')
107
+ end
108
+ print reset, "\n"
109
+ return 0
110
+ rescue RestClient::Exception => e
111
+ print_rest_exception(e, options)
112
+ return 1
113
+ end
114
+ end
115
+
116
+ def update(args)
117
+ options = {}
118
+ params = {}
119
+
120
+ optparse = MtnCloud::Cli::OptionParser.new do |opts|
121
+ opts.banner = opts.banner = subcommand_usage()
122
+ opts.on("--appliance-url STRING", String, "Appliance URL") do |val|
123
+ params['applianceUrl'] = val == 'null' ? nil : val
124
+ end
125
+ opts.on("--internal-appliance-url STRING", String, "Internal appliance URL (PXE)") do |val|
126
+ params['internalApplianceUrl'] = val == 'null' ? nil : val
127
+ end
128
+ opts.on("--api-allowed-origins STRING", String, "API allowed origins") do |val|
129
+ params['corsAllowed'] = val == 'null' ? nil : val
130
+ end
131
+ opts.on("--registration-enabled [on|off]", ['on','off'], "Tenant registration enabled") do |val|
132
+ params['registrationEnabled'] = val.to_s == 'on' || val.to_s == 'true' || val.to_s == '1' || val.to_s == ''
133
+ end
134
+ opts.on("--default-tenant-role ROLE", String, "Default tenant role authority or ID") do |val|
135
+ if val == 'null'
136
+ params['defaultRoleId'] = nil
137
+ else
138
+ options[:defaultTenantRole] = val
139
+ end
140
+ end
141
+ opts.on("--default-user-role ROLE", String, "Default user role authority or ID") do |val|
142
+ if val == 'null'
143
+ params['defaultUserRoleId'] = nil
144
+ else
145
+ options[:defaultUserRole] = val
146
+ end
147
+ end
148
+ opts.on("--docker-privileged-mode [on|off]", ['on','off'], "Docker privileged mode") do |val|
149
+ params['dockerPrivilegedMode'] = val.to_s == 'on' || val.to_s == 'true' || val.to_s == '1' || val.to_s == ''
150
+ end
151
+ opts.on("--expire-pwd-days NUMBER", Integer, "Expire password after specified days. Set to 0 to disable this feature") do |val|
152
+ params['expirePwdDays'] = val.to_i
153
+ end
154
+ opts.on("--disable-after-attempts NUMBER", Integer, "Disable user after attempts. Set to 0 to disable this feature") do |val|
155
+ params['disableAfterAttempts'] = val.to_i
156
+ end
157
+ opts.on("--disable-after-days-inactive NUMBER", Integer, "Disable user if inactive for specified days. Set to 0 to disable this feature") do |val|
158
+ params['disableAfterDaysInactive'] = val.to_i
159
+ end
160
+ opts.on("--warn-user-days-before NUMBER", Integer, "Send warning email before deactivating. Set to 0 to disable this feature") do |val|
161
+ params['warnUserDaysBefore'] = val.to_i
162
+ end
163
+ opts.on("--smtp-from-email STRING", String, "From email address") do |val|
164
+ params['smtpMailFrom'] = val == 'null' ? nil : val
165
+ end
166
+ opts.on("--smtp-server STRING", String, "SMTP server / host") do |val|
167
+ params['smtpServer'] = val == 'null' ? nil : val
168
+ end
169
+ opts.on("--smtp-port NUMBER", String, "SMTP port") do |val|
170
+ params['smtpPort'] = val == 'null' ? nil : val.to_i
171
+ end
172
+ opts.on("--smtp-ssl [on|off]", ['on','off'], "Use SSL for SMTP connections") do |val|
173
+ params['smtpSSL'] = val.to_s == 'on' || val.to_s == 'true' || val.to_s == '1' || val.to_s == ''
174
+ end
175
+ opts.on("--smtp-tls [on|off]", ['on','off'], "Use TLS for SMTP connections") do |val|
176
+ params['smtpTLS'] = val.to_s == 'on' || val.to_s == 'true' || val.to_s == '1' || val.to_s == ''
177
+ end
178
+ opts.on("--smtp-user STRING", String, "SMTP user") do |val|
179
+ params['smtpUser'] = val == 'null' ? nil : val
180
+ end
181
+ opts.on("--smtp-password STRING", String, "SMTP password") do |val|
182
+ params['smtpPassword'] = val == 'null' ? nil : val
183
+ end
184
+ opts.on("--proxy-host STRING", String, "Proxy host") do |val|
185
+ params['proxyHost'] = val == 'null' ? nil : val
186
+ end
187
+ opts.on("--proxy-port NUMBER", String, "Proxy port") do |val|
188
+ params['proxyPort'] = val == 'null' ? nil : val.to_i
189
+ end
190
+ opts.on("--proxy-user STRING", String, "Proxy user") do |val|
191
+ params['proxyUser'] = val == 'null' ? nil : val
192
+ end
193
+ opts.on("--proxy-password STRING", String, "Proxy password") do |val|
194
+ params['proxyPassword'] = val == 'null' ? nil : val
195
+ end
196
+ opts.on("--proxy-domain STRING", String, "Proxy domain") do |val|
197
+ params['proxyDomain'] = val == 'null' ? nil : val
198
+ end
199
+ opts.on("--proxy-workstation STRING", String, "Proxy workstation") do |val|
200
+ params['proxyWorkstation'] = val == 'null' ? nil : val
201
+ end
202
+ opts.on("--currency-provider STRING", String, "Currency provider") do |val|
203
+ params['currencyProvider'] = val == 'null' ? nil : val
204
+ end
205
+ opts.on("--currency-key STRING", String, "Currency provider API key") do |val|
206
+ params['currencyKey'] = val == 'null' ? nil : val
207
+ end
208
+ opts.on("--enable-all-clouds", "Set all cloud types enabled status on, can be used in conjunction with --disable-clouds") do
209
+ params['enableAllZoneTypes'] = true
210
+ end
211
+ opts.on("--enable-clouds LIST", Array, "List of cloud types to set enabled status on, each item can be either name or ID") do |list|
212
+ options[:enableZoneTypes] = list
213
+ end
214
+ opts.on("--disable-clouds LIST", Array, "List of cloud types to set enabled status off, each item can be either name or ID") do |list|
215
+ options[:disableZoneTypes] = list
216
+ end
217
+ opts.on("--disable-all-clouds", "Set all cloud types enabled status off, can be used in conjunction with --enable-clouds options") do
218
+ params['disableAllZoneTypes'] = true
219
+ end
220
+ opts.on("--stats-retainment-period DAYS", Integer, "Stats retainment period. The number of days stats should be available. Can be 30, 60, or 90.") do |val|
221
+ params['statsRetainmentPeriod'] = val.to_i
222
+ end
223
+ opts.on("--cloud-sync-interval-seconds SECONDS", Integer, "Cloud sync interval in seconds") do |val|
224
+ params['cloudSyncIntervalSeconds'] = val.to_i
225
+ end
226
+ opts.on("--cluster-sync-interval-seconds SECONDS", Integer, "Cluster sync interval in seconds") do |val|
227
+ params['clusterSyncIntervalSeconds'] = val.to_i
228
+ end
229
+ opts.on("--usage-retainment-period DAYS", Integer, "Retainment period for usage records") do |val|
230
+ params['usageRetainmentPeriod'] = val.to_i
231
+ end
232
+ opts.on("--invoice-retainment-period DAYS", Integer, "Retainment period for invoice records") do |val|
233
+ params['invoiceRetainmentPeriod'] = val.to_i
234
+ end
235
+ opts.on("--max-option-list-size NUMBER", Integer, "Max option list size (x10^3)") do |val|
236
+ params['maxOptionListSize'] = val.to_i
237
+ end
238
+ opts.on("--default-locale STRING", String, "Default locale for the appliance") do |val|
239
+ params['defaultLocale'] = val == 'null' ? nil : val
240
+ end
241
+
242
+ build_common_options(opts, options, [:json, :payload, :dry_run, :quiet, :remote])
243
+ end
244
+
245
+ optparse.parse!(args)
246
+ connect(options)
247
+ if args.count != 0
248
+ raise_command_error "wrong number of arguments, expected 0 and got (#{args.count}) #{args}\n#{optparse}"
249
+ return 1
250
+ end
251
+
252
+ begin
253
+ parse_payload(options) do |payload|
254
+ available_zone_types = @appliance_settings_interface.cloud_types['zoneTypes']
255
+
256
+ if options[:enableZoneTypes]
257
+ params['enableZoneTypes'] = options[:enableZoneTypes].collect do |zone_type_id|
258
+ zone_type = available_zone_types.find { |it| it['id'] == zone_type_id || it['id'].to_s == zone_type_id || it['name'] == zone_type_id }
259
+ if zone_type.nil?
260
+ print_red_alert "Cloud type #{zone_type_id} not found"
261
+ exit 1
262
+ end
263
+ zone_type['id']
264
+ end
265
+ end
266
+ if options[:disableZoneTypes]
267
+ params['disableZoneTypes'] = options[:disableZoneTypes].collect do |zone_type_id|
268
+ zone_type = available_zone_types.find { |it| it['id'] == zone_type_id || it['id'].to_s == zone_type_id || it['name'] == zone_type_id }
269
+ if zone_type.nil?
270
+ print_red_alert "Cloud type #{zone_type_id} not found"
271
+ exit 1
272
+ end
273
+ zone_type['id']
274
+ end
275
+ end
276
+
277
+ if options[:defaultTenantRole]
278
+ role = find_role_by_name_or_id(nil, options[:defaultTenantRole])
279
+ if role.nil?
280
+ exit 1
281
+ end
282
+ params['defaultRoleId'] = role['id']
283
+ end
284
+
285
+ if options[:defaultUserRole]
286
+ role = find_role_by_name_or_id(nil, options[:defaultUserRole])
287
+ if role.nil?
288
+ print_red_alert "Default user role #{options[:defaultUserRole]} not found"
289
+ exit 1
290
+ end
291
+ params['defaultUserRoleId'] = role['id']
292
+ end
293
+
294
+ if params['currencyProvider']
295
+ currency_providers = @api_client.options.options_for_source('currencyProviders')['data']
296
+ currency_provider = currency_providers.find {|it| it['name'] == params['currencyProvider'] || it['value'] == params['currencyProvider']}
297
+
298
+ if currency_provider.nil?
299
+ print_red_alert "Invalid currency provider #{params['currencyProvider']}, valid options: #{currency_providers.collect {|it| it['value']}.join('|')}"
300
+ exit 1
301
+ end
302
+ end
303
+ payload['applianceSettings'] = params
304
+ end
305
+ execute_api(@appliance_settings_interface, :update, nil, options, "applianceSettings") do |json_response|
306
+ if json_response['success']
307
+ print_green_success "Updated appliance settings"
308
+ get([] + (options[:remote] ? ["-r",options[:remote]] : []))
309
+ else
310
+ #todo: API should return 400 on error and then this is not needed
311
+ #print_red_alert "Error updating appliance settings"
312
+ print_rest_errors(json_response)
313
+ [1, "Error updating appliance settings"]
314
+ end
315
+ end
316
+ rescue RestClient::Exception => e
317
+ print_rest_exception(e, options)
318
+ exit 1
319
+ end
320
+ end
321
+
322
+ def toggle_maintenance(args)
323
+ params = {}
324
+ options = {}
325
+ optparse = MtnCloud::Cli::OptionParser.new do |opts|
326
+ opts.banner = opts.banner = subcommand_usage()
327
+ opts.on("--enabled [on|off]", String, "Enabled (on) or Disabled (off)") do |val|
328
+ params['enabled'] = val.to_s == 'on' || val.to_s == 'true' || val.to_s == '1' || val.to_s == ''
329
+ end
330
+ build_standard_update_options(opts, options, [:auto_confirm], [:payload, :options])
331
+ opts.footer = "Toggle maintenance mode."
332
+ end
333
+ optparse.parse!(args)
334
+ connect(options)
335
+ verify_args!(args:args, optparse:optparse, count:0)
336
+ if params['enabled'].nil?
337
+ confirm!("Are you sure you would like to toggle maintenance mode?", options)
338
+ else
339
+ confirm!("Are you sure you would like to toggle maintenance mode: #{params['enabled'] ? 'on' : 'off'}?", options)
340
+ end
341
+ @appliance_settings_interface.setopts(options)
342
+ if options[:dry_run]
343
+ print_dry_run @appliance_settings_interface.dry.maintenance(params)
344
+ return
345
+ end
346
+ json_response = @appliance_settings_interface.maintenance(params)
347
+ render_response(json_response, options) do
348
+ print_green_success "Toggled maintenance mode: '#{params['enabled'] ? 'on' : 'off'}'"
349
+ end
350
+ return 0, nil
351
+ end
352
+
353
+ def reindex(args)
354
+ params = {}
355
+ options = {}
356
+ optparse = MtnCloud::Cli::OptionParser.new do |opts|
357
+ opts.banner = opts.banner = subcommand_usage()
358
+ build_standard_update_options(opts, options, [:auto_confirm], [:payload, :options])
359
+ opts.footer = "Reindex all search data."
360
+ end
361
+ optparse.parse!(args)
362
+ connect(options)
363
+ verify_args!(args:args, optparse:optparse, count:0)
364
+ confirm!("Are you sure you would like reindex all search data?", options)
365
+ @appliance_settings_interface.setopts(options)
366
+ if options[:dry_run]
367
+ print_dry_run @appliance_settings_interface.dry.reindex(params)
368
+ return
369
+ end
370
+ json_response = @appliance_settings_interface.reindex(params)
371
+ render_response(json_response, options) do
372
+ print_green_success "Reindexing all search data..."
373
+ end
374
+ return 0, nil
375
+ end
376
+
377
+ private
378
+
379
+ def format_days(days)
380
+ days ? (days == 0 ? 'Disabled' : days + ' Days') : ''
381
+ end
382
+ end