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,870 @@
1
+ require 'mtncloud/cli/cli_command'
2
+
3
+ class MtnCloud::Cli::CloudResourcePoolsCommand
4
+ include MtnCloud::Cli::CliCommand
5
+ include MtnCloud::Cli::InfrastructureHelper
6
+ include MtnCloud::Cli::OptionSourceHelper
7
+
8
+ #set_command_name :'cloud-resource-pools'
9
+ set_command_name :'resource-pools'
10
+
11
+ register_subcommands :list, :get, :add, :update, :remove
12
+
13
+ def initialize()
14
+ # @appliance_name, @appliance_url = MtnCloud::Cli::Remote.active_appliance
15
+ end
16
+
17
+ def connect(opts)
18
+ @api_client = establish_remote_appliance_connection(opts)
19
+ @cloud_resource_pools_interface = @api_client.cloud_resource_pools
20
+ @clouds_interface = @api_client.clouds
21
+ @options_interface = @api_client.options
22
+ end
23
+
24
+ def handle(args)
25
+ handle_subcommand(args)
26
+ end
27
+
28
+ def list(args)
29
+ cloud_id = nil
30
+ options = {}
31
+ params = {}
32
+ optparse = MtnCloud::Cli::OptionParser.new do |opts|
33
+ opts.banner = subcommand_usage("[cloud]")
34
+ opts.on( '-c', '--cloud CLOUD', "Cloud Name or ID" ) do |val|
35
+ cloud_id = val
36
+ end
37
+ opts.add_hidden_option('-c') # prefer args[0] for [cloud]
38
+ opts.on( '-s', '--search PHRASE', "Search by Name and/or Display Name" ) do |phrase|
39
+ options[:phrase] = phrase
40
+ end
41
+ build_common_options(opts, options, [:list, :json, :yaml, :csv, :fields, :dry_run, :remote], ['search'])
42
+ opts.footer = "List resource pools for a cloud." + "\n" +
43
+ "[cloud] is required. This is the name or id of the cloud."
44
+ end
45
+ optparse.parse!(args)
46
+ if args.count == 1
47
+ cloud_id = args[0]
48
+ elsif args.count == 0 && cloud_id
49
+ # support -c
50
+ else
51
+ raise_command_error "wrong number of arguments, expected 1 and got (#{args.count}) #{args.join(' ')}\n#{optparse}"
52
+ end
53
+ connect(options)
54
+ begin
55
+ # load cloud
56
+ if cloud_id.nil?
57
+ puts_error "#{MtnCloud::Terminal.angry_prompt}missing required option: [cloud]\n#{optparse}"
58
+ return 1
59
+ end
60
+ cloud = find_cloud_by_name_or_id(cloud_id)
61
+ return 1 if cloud.nil?
62
+
63
+ params.merge!(parse_list_options(options))
64
+ @cloud_resource_pools_interface.setopts(options)
65
+ if options[:dry_run]
66
+ print_dry_run @cloud_resource_pools_interface.dry.list(cloud['id'], params)
67
+ return
68
+ end
69
+ json_response = @cloud_resource_pools_interface.list(cloud['id'], params)
70
+ resource_pools = json_response["resourcePools"]
71
+ if options[:json]
72
+ puts as_json(json_response, options, "resourcePools")
73
+ return 0
74
+ elsif options[:yaml]
75
+ puts as_yaml(json_response, options, "resourcePools")
76
+ return 0
77
+ elsif options[:csv]
78
+ puts records_as_csv(resource_pools, options)
79
+ return 0
80
+ end
81
+ title = "Resource Pools - Cloud: #{cloud['name']}"
82
+ subtitles = []
83
+ subtitles += parse_list_subtitles(options)
84
+ print_h1 title, subtitles
85
+ if resource_pools.empty?
86
+ print cyan,"No resource pools found.",reset,"\n"
87
+ else
88
+ rows = resource_pools.collect {|resource_pool|
89
+ formatted_name = (resource_pool['depth'] && resource_pool['depth'] > 0) ? ((' ' * resource_pool['depth'].to_i) + resource_pool['name'].to_s) : resource_pool['name'].to_s
90
+ row = {
91
+ id: resource_pool['id'],
92
+ # name: resource_pool['name'],
93
+ name: formatted_name,
94
+ type: resource_pool['type'].to_s.capitalize,
95
+ description: resource_pool['description'],
96
+ active: format_boolean(resource_pool['active']),
97
+ inventory: format_boolean(resource_pool['inventory']),
98
+ status: resource_pool['status'].to_s.upcase,
99
+ visibility: resource_pool['visibility'].to_s.capitalize,
100
+ default: format_boolean(resource_pool['defaultPool']),
101
+ tenants: resource_pool['tenants'] ? resource_pool['tenants'].collect {|it| it['name'] }.uniq.join(', ') : ''
102
+ # owner: resource_pool['owner'] ? resource_pool['owner']['name'] : ''
103
+ }
104
+ row
105
+ }
106
+ columns = [:id, :name, :description, :active,:inventory, :default, :visibility, :tenants]
107
+ if options[:include_fields]
108
+ columns = options[:include_fields]
109
+ end
110
+ print cyan
111
+ print as_pretty_table(rows, columns, options)
112
+ print reset
113
+ print_results_pagination(json_response)
114
+ end
115
+ print reset,"\n"
116
+ return 0
117
+ rescue RestClient::Exception => e
118
+ print_rest_exception(e, options)
119
+ exit 1
120
+ end
121
+ end
122
+
123
+ def get(args)
124
+ resource_pool_id = nil
125
+ cloud_id = nil
126
+ options = {}
127
+ optparse = MtnCloud::Cli::OptionParser.new do |opts|
128
+ opts.banner = subcommand_usage("[cloud] [pool]")
129
+ opts.on( '-c', '--cloud CLOUD', "Cloud Name or ID" ) do |val|
130
+ cloud_id = val
131
+ end
132
+ opts.add_hidden_option('-c') # prefer args[0] for [cloud]
133
+ build_common_options(opts, options, [:json, :yaml, :csv, :fields, :dry_run, :remote])
134
+ opts.footer = "Get details about a resource pool." + "\n" +
135
+ "[cloud] is required. This is the name or id of the cloud." + "\n"
136
+ "[pool] is required. This is the name or id of a resource pool."
137
+ end
138
+ optparse.parse!(args)
139
+ if args.count == 2
140
+ cloud_id = args[0]
141
+ resource_pool_id = args[1]
142
+ elsif args.count == 1 && cloud_id
143
+ resource_pool_id = args[0]
144
+ else
145
+ raise_command_error "wrong number of arguments, expected 2 and got (#{args.count}) #{args.join(' ')}\n#{optparse}"
146
+ end
147
+ connect(options)
148
+ begin
149
+ # load cloud
150
+ if cloud_id.nil?
151
+ puts_error "#{MtnCloud::Terminal.angry_prompt}missing required option: [cloud]\n#{optparse}"
152
+ return 1
153
+ end
154
+ cloud = find_cloud_by_name_or_id(cloud_id)
155
+ return 1 if cloud.nil?
156
+ @cloud_resource_pools_interface.setopts(options)
157
+ if options[:dry_run]
158
+ if args[0].to_s =~ /\A\d{1,}\Z/
159
+ print_dry_run @cloud_resource_pools_interface.dry.get(cloud['id'], resource_pool_id.to_i)
160
+ else
161
+ print_dry_run @cloud_resource_pools_interface.dry.list(cloud['id'], {name:resource_pool_id})
162
+ end
163
+ return
164
+ end
165
+ resource_pool = find_resource_pool_by_name_or_id(cloud['id'], resource_pool_id)
166
+ return 1 if resource_pool.nil?
167
+ json_response = {'resourcePool' => resource_pool} # skip redundant request
168
+ # json_response = @resource_pools_interface.get(resource_pool['id'])
169
+ resource_pool = json_response['resourcePool']
170
+ if options[:json]
171
+ puts as_json(json_response, options, "resourcePool")
172
+ return 0
173
+ elsif options[:yaml]
174
+ puts as_yaml(json_response, options, "resourcePool")
175
+ return 0
176
+ elsif options[:csv]
177
+ puts records_as_csv([resource_pool], options)
178
+ return 0
179
+ end
180
+
181
+ print_h1 "Resource Pool Details"
182
+ print cyan
183
+ description_cols = {
184
+ "ID" => 'id',
185
+ "Name" => 'name',
186
+ "Display Name" => 'displayName',
187
+ "Description" => 'description',
188
+ #"Type" => lambda {|it| it['type'].to_s.capitalize },
189
+ "Cloud" => lambda {|it| it['zone'] ? it['zone']['name'] : '' },
190
+ "Active" => lambda {|it| format_boolean(it['active']) },
191
+ "Inventory" => lambda {|it| format_boolean(it['inventory']) },
192
+ "Default" => lambda {|it| format_boolean(it['defaultPool']) },
193
+ "Visibility" => lambda {|it| it['visibility'].to_s.capitalize },
194
+ "Status" => lambda {|it| it['status'].to_s.capitalize },
195
+ "Tenants" => lambda {|it| it['tenants'] ? it['tenants'].collect {|it| it['name'] }.uniq.join(', ') : '' }
196
+ }
197
+
198
+ if cloud['zoneType']['code'] == 'openstack'
199
+ role = resource_pool['config']['roleId'] ? load_option_source_data('openstackRoles', {zoneId: cloud['id']}).find {|it| it['value'] == resource_pool['config']['roleId']} : nil
200
+ description_cols['Role'] = lambda {|it| role ? role['name'] : ''}
201
+ end
202
+
203
+ print_description_list(description_cols, resource_pool)
204
+
205
+ if resource_pool['resourcePermission'].nil?
206
+ #print "\n", "No group access found", "\n"
207
+ else
208
+ print_h2 "Group Access"
209
+ rows = []
210
+ if resource_pool['resourcePermission']['all']
211
+ rows.push({"name" => 'All'})
212
+ end
213
+ if resource_pool['resourcePermission']['sites']
214
+ resource_pool['resourcePermission']['sites'].each do |site|
215
+ rows.push(site)
216
+ end
217
+ end
218
+ group_columns = {
219
+ "GROUP" => 'name',
220
+ "DEFAULT" => lambda {|it| it['default'].nil? ? '' : format_boolean(it['default']) }
221
+ }
222
+ print cyan
223
+ print as_pretty_table(rows, group_columns)
224
+ end
225
+
226
+ if resource_pool['resourcePermission'] && resource_pool['resourcePermission']['plans'] && resource_pool['resourcePermission']['plans'].size > 0
227
+ print_h2 "Service Plan Access"
228
+ rows = []
229
+ if resource_pool['resourcePermission']['allPlans']
230
+ rows.push({"name" => 'All'})
231
+ end
232
+ if resource_pool['resourcePermission']['plans']
233
+ resource_pool['resourcePermission']['plans'].each do |plan|
234
+ rows.push(plan)
235
+ end
236
+ end
237
+ # rows = rows.collect do |site|
238
+ # {plan: site['name'], default: site['default'] ? 'Yes' : ''}
239
+ # #{group: site['name']}
240
+ # end
241
+ plan_columns = {
242
+ "PLAN" => 'name',
243
+ "DEFAULT" => lambda {|it| it['default'].nil? ? '' : format_boolean(it['default']) }
244
+ }
245
+ print cyan
246
+ print as_pretty_table(rows, plan_columns)
247
+ end
248
+
249
+ if resource_pool['tenants'].nil? || resource_pool['tenants'].empty?
250
+ #print "\n", "No tenant permissions found", "\n"
251
+ else
252
+ print_h2 "Tenant Permissions"
253
+ rows = []
254
+ rows = resource_pool['tenants'] || []
255
+ tenant_columns = {
256
+ "TENANT" => 'name',
257
+ "DEFAULT" => lambda {|it| format_boolean(it['defaultTarget']) },
258
+ "IMAGE TARGET" => lambda {|it| format_boolean(it['defaultStore']) }
259
+ }
260
+ print cyan
261
+ print as_pretty_table(rows, tenant_columns)
262
+ end
263
+
264
+ print reset,"\n"
265
+ return 0
266
+ rescue RestClient::Exception => e
267
+ print_rest_exception(e, options)
268
+ return 1
269
+ end
270
+ end
271
+
272
+ def add(args)
273
+ options = {}
274
+ cloud_id = nil
275
+ tenants = nil
276
+ group_access_all = nil
277
+ group_access_list = nil
278
+ group_defaults_list = nil
279
+ plan_access_all = nil
280
+ plan_access_list = nil
281
+ plan_defaults_list = nil
282
+ optparse = MtnCloud::Cli::OptionParser.new do |opts|
283
+ opts.banner = subcommand_usage("[cloud] [pool] [options]")
284
+ opts.on( '-c', '--cloud CLOUD', "Cloud Name or ID" ) do |val|
285
+ cloud_id = val
286
+ end
287
+ opts.add_hidden_option('-c') # prefer args[0] for [cloud]
288
+ opts.on( '--name VALUE', String, "Name" ) do |val|
289
+ options['name'] = val
290
+ end
291
+ opts.on('--group-access-all [on|off]', String, "Toggle Access for all groups.") do |val|
292
+ group_access_all = val.to_s == 'on' || val.to_s == 'true' || val.to_s == ''
293
+ end
294
+ opts.on('--group-access LIST', Array, "Group Access, comma separated list of group IDs.") do |list|
295
+ if list.size == 1 && list[0] == 'null' # hacky way to clear it
296
+ group_access_list = []
297
+ else
298
+ group_access_list = list.collect {|it| it.to_s.strip.empty? ? nil : it.to_s.strip }.compact.uniq
299
+ end
300
+ end
301
+ opts.on('--group-defaults LIST', Array, "Group Default Selection, comma separated list of group IDs") do |list|
302
+ if list.size == 1 && list[0] == 'null' # hacky way to clear it
303
+ group_defaults_list = []
304
+ else
305
+ group_defaults_list = list.collect {|it| it.to_s.strip.empty? ? nil : it.to_s.strip }.compact.uniq
306
+ end
307
+ end
308
+ opts.on('--plan-access-all [on|off]', String, "Toggle Access for all plans.") do |val|
309
+ plan_access_all = val.to_s == 'on' || val.to_s == 'true' || val.to_s == ''
310
+ end
311
+ opts.on('--plan-access LIST', Array, "Plan Access, comma separated list of plan IDs.") do |list|
312
+ if list.size == 1 && list[0] == 'null' # hacky way to clear it
313
+ plan_access_list = []
314
+ else
315
+ plan_access_list = list.collect {|it| it.to_s.strip.empty? ? nil : it.to_s.strip }.compact.uniq
316
+ end
317
+ end
318
+ opts.on('--plan-defaults LIST', Array, "Plan Default Selection, comma separated list of plan IDs") do |list|
319
+ if list.size == 1 && list[0] == 'null' # hacky way to clear it
320
+ plan_defaults_list = []
321
+ else
322
+ plan_defaults_list = list.collect {|it| it.to_s.strip.empty? ? nil : it.to_s.strip }.compact.uniq
323
+ end
324
+ end
325
+ opts.on('--tenants LIST', Array, "Tenant Access, comma separated list of account IDs") do |list|
326
+ if list.size == 1 && list[0] == 'null' # hacky way to clear it
327
+ options['tenants'] = []
328
+ else
329
+ options['tenants'] = list.collect {|it| it.to_s.strip.empty? ? nil : it.to_s.strip }.compact.uniq
330
+ end
331
+ end
332
+ opts.on('--visibility [private|public]', String, "Visibility") do |val|
333
+ options['visibility'] = val
334
+ end
335
+ opts.on('--active [on|off]', String, "Can be used to disable a resource pool") do |val|
336
+ options['active'] = val.to_s == 'on' || val.to_s == 'true' || val.to_s == ''
337
+ end
338
+ opts.on('--inventory [on|off]', String, "Enable or disable inventory sync for resource pool during cloud refresh") do |val|
339
+ options['inventory'] = val.to_s == 'on' || val.to_s == 'true' || val.to_s == ''
340
+ end
341
+ opts.on('--default-pool [on|off]', String, "Set resource pool as the default") do |val|
342
+ options['defaultPool'] = val.to_s == 'on' || val.to_s == 'true' || val.to_s == ''
343
+ end
344
+ opts.on("--description [TEXT]", String, "Description") do |val|
345
+ options['description'] = val.to_s
346
+ end
347
+ opts.on( '--role ROLE', String, "Role Name or ID (applicable to select resource pools)" ) do |val|
348
+ options[:role] = val
349
+ end
350
+ build_standard_add_options(opts, options)
351
+ opts.footer = "Add a resource pool." + "\n" +
352
+ "[cloud] is required. This is the name or id of the cloud."
353
+ end
354
+ optparse.parse!(args)
355
+ if args.count == 2
356
+ cloud_id = args[0]
357
+ options['name'] = args[1]
358
+ elsif args.count == 1 # && cloud_id
359
+ if cloud_id
360
+ options['name'] = args[0]
361
+ else
362
+ cloud_id = args[0]
363
+ end
364
+ else
365
+ raise_command_error "wrong number of arguments, expected 1-2 and got (#{args.count}) #{args.join(' ')}\n#{optparse}"
366
+ end
367
+
368
+ connect(options)
369
+
370
+ # load cloud
371
+ if cloud_id.nil?
372
+ puts_error "#{MtnCloud::Terminal.angry_prompt}missing required option: [cloud]\n#{optparse}"
373
+ return 1
374
+ end
375
+ cloud = find_cloud_by_name_or_id(cloud_id)
376
+ return 1 if cloud.nil?
377
+
378
+ # merge -O options into normally parsed options
379
+ options.deep_merge!(options[:options].reject {|k,v| k.is_a?(Symbol) }) if options[:options]
380
+
381
+ # construct payload
382
+ payload = nil
383
+ if options[:payload]
384
+ payload = options[:payload]
385
+ else
386
+ # prompt for resource pool options
387
+ payload = {
388
+ 'resourcePool' => {
389
+ }
390
+ }
391
+
392
+ # allow arbitrary -O options
393
+ payload['resourcePool'].deep_merge!(options[:options].reject {|k,v| k.is_a?(Symbol) }) if options[:options]
394
+
395
+ # Name
396
+ if options['name']
397
+ payload['resourcePool']['name'] = options['name']
398
+ else
399
+ v_prompt = MtnCloud::Cli::OptionTypes.prompt([{'fieldName' => 'name', 'fieldLabel' => 'Name', 'type' => 'text', 'required' => true, 'description' => 'Name'}], options)
400
+ payload['resourcePool']['name'] = v_prompt['name']
401
+ end
402
+
403
+ # Group Access
404
+ if group_access_all != nil
405
+ payload['resourcePermissions'] ||= {}
406
+ payload['resourcePermissions']['all'] = group_access_all
407
+ else
408
+ # default to all
409
+ if payload['resourcePermissions'].nil? || payload['resourcePermissions']['all'].nil?
410
+ payload['resourcePermissions'] ||= {}
411
+ payload['resourcePermissions']['all'] = true
412
+ end
413
+ end
414
+ if group_access_list != nil
415
+ payload['resourcePermissions'] ||= {}
416
+ payload['resourcePermissions']['sites'] = group_access_list.collect do |site_id|
417
+ site = {"id" => site_id.to_i}
418
+ if group_defaults_list && group_defaults_list.include?(site_id)
419
+ site["default"] = true
420
+ end
421
+ site
422
+ end
423
+ end
424
+
425
+ # Service Plan Access
426
+ if plan_access_all != nil
427
+ payload['resourcePermissions'] ||= {}
428
+ payload['resourcePermissions']['allPlans'] = plan_access_all
429
+ else
430
+ # default to all
431
+ if payload['resourcePermissions'].nil? || payload['resourcePermissions']['allPlans'].nil?
432
+ payload['resourcePermissions'] ||= {}
433
+ payload['resourcePermissions']['allPlans'] = true
434
+ end
435
+ end
436
+ if plan_access_list != nil
437
+ payload['resourcePermissions'] ||= {}
438
+ payload['resourcePermissions']['plans'] = plan_access_list.collect do |site_id|
439
+ site = {"id" => site_id.to_i}
440
+ if plan_defaults_list && plan_defaults_list.include?(site_id)
441
+ site["default"] = true
442
+ end
443
+ site
444
+ end
445
+ end
446
+
447
+ # Tenants
448
+ if options['tenants']
449
+ payload['tenantPermissions'] = {}
450
+ payload['tenantPermissions']['accounts'] = options['tenants']
451
+ end
452
+
453
+ # Active
454
+ if options['active'] != nil
455
+ payload['resourcePool']['active'] = options['active']
456
+ else
457
+ payload['resourcePool']['active'] = true
458
+ end
459
+
460
+ #inventory
461
+ if options['inventory'] != nil
462
+ payload['resourcePool']['inventory'] = options['inventory']
463
+ end
464
+
465
+ # Default
466
+ if options['defaultPool'] != nil
467
+ payload['resourcePool']['defaultPool'] = options['defaultPool']
468
+ end
469
+
470
+ # Visibility
471
+ if options['visibility'] != nil
472
+ payload['resourcePool']['visibility'] = options['visibility']
473
+ else
474
+ payload['resourcePool']['visibility'] = 'private'
475
+ end
476
+
477
+
478
+ # Config options depend on type (until api returns these as optionTypes)
479
+ zone_type = cloud['zoneType'] ? cloud['zoneType']['code'] : ''
480
+ if zone_type == 'amazon'
481
+ payload['resourcePool']['config'] ||= {}
482
+ # CIDR
483
+ v_prompt = MtnCloud::Cli::OptionTypes.prompt([{'fieldContext' => 'config', 'fieldName' => 'cidrBlock', 'fieldLabel' => 'CIDR', 'type' => 'text', 'required' => true, 'description' => 'Provide the base CIDR Block to use for this VPC (must be between a /16 and /28 Block)'}], options)
484
+ payload['resourcePool']['config']['cidrBlock'] = v_prompt['config']['cidrBlock']
485
+ # Tenancy
486
+ v_prompt = MtnCloud::Cli::OptionTypes.prompt([{'fieldContext' => 'config', 'fieldName' => 'tenancy', 'fieldLabel' => 'Tenancy', 'type' => 'select', 'selectOptions' => [{'name' => 'Default', 'value' => 'default'}, {'name' => 'Dedicated', 'value' => 'dedicated'}], 'defaultValue' => 'default'}], options)
487
+ payload['resourcePool']['config']['tenancy'] = v_prompt['config']['tenancy']
488
+
489
+ elsif zone_type == 'azure'
490
+ # no options
491
+ elsif zone_type == 'cloudFoundry' || zone_type == 'bluemixCloudFoundry'
492
+
493
+ elsif zone_type == 'openstack'
494
+ payload['resourcePool']['config'] ||= {}
495
+ # Description
496
+ v_prompt = MtnCloud::Cli::OptionTypes.prompt([{'fieldName' => 'description', 'fieldLabel' => 'Description', 'type' => 'text'}], options)
497
+ payload['resourcePool']['description'] = v_prompt['description']
498
+ # Role
499
+ role_options = load_option_source_data('openstackRoles', {zoneId: cloud['id']})
500
+ if role = options[:role] ? role_options.find {|it| [it['name'], it['value']].include?(options[:role])} : nil
501
+ payload['resourcePool']['config']['roleId'] = role['value']
502
+ else
503
+ v_prompt = MtnCloud::Cli::OptionTypes.prompt([{'fieldContext' => 'config', 'fieldName' => 'roleId', 'fieldLabel' => 'Role', 'type' => 'select', 'selectOptions' => role_options, 'required' => true}], options, @api_client,{zoneId: cloud['id']})
504
+ payload['resourcePool']['config']['roleId'] = v_prompt['config']['roleId']
505
+ end
506
+ elsif zone_type == 'standard'
507
+ # no options
508
+ else
509
+ #raise_command_error "Cloud type '#{zone_type}' does not allow creating resource pools"
510
+ end
511
+ end
512
+
513
+ @cloud_resource_pools_interface.setopts(options)
514
+ if options[:dry_run]
515
+ print_dry_run @cloud_resource_pools_interface.dry.create(cloud['id'], payload)
516
+ return
517
+ end
518
+ json_response = @cloud_resource_pools_interface.create(cloud['id'], payload)
519
+ render_response(json_response, options, 'resourcePool') do
520
+ resource_pool = json_response['resourcePool']
521
+ print_green_success "Created resource pool #{resource_pool['name']}"
522
+ get([cloud['id'].to_s, resource_pool['id'].to_s])
523
+ end
524
+ return 0, nil
525
+ end
526
+
527
+ def update(args)
528
+ options = {}
529
+ cloud_id = nil
530
+ resource_pool_id = nil
531
+ tenants = nil
532
+ group_access_all = nil
533
+ group_access_list = nil
534
+ group_defaults_list = nil
535
+ plan_access_all = nil
536
+ plan_access_list = nil
537
+ plan_defaults_list = nil
538
+ optparse = MtnCloud::Cli::OptionParser.new do |opts|
539
+ opts.banner = subcommand_usage("[cloud] [pool] [options]")
540
+ opts.on( '-c', '--cloud CLOUD', "Cloud Name or ID" ) do |val|
541
+ cloud_id = val
542
+ end
543
+ opts.add_hidden_option('-c') # prefer args[0] for [cloud]
544
+ opts.on('--group-access-all [on|off]', String, "Toggle Access for all groups.") do |val|
545
+ group_access_all = val.to_s == 'on' || val.to_s == 'true' || val.to_s == ''
546
+ end
547
+ opts.on('--group-access LIST', Array, "Group Access, comma separated list of group IDs.") do |list|
548
+ if list.size == 1 && list[0] == 'null' # hacky way to clear it
549
+ group_access_list = []
550
+ else
551
+ group_access_list = list.collect {|it| it.to_s.strip.empty? ? nil : it.to_s.strip }.compact.uniq
552
+ end
553
+ end
554
+ opts.on('--group-defaults LIST', Array, "Group Default Selection, comma separated list of group IDs") do |list|
555
+ if list.size == 1 && list[0] == 'null' # hacky way to clear it
556
+ group_defaults_list = []
557
+ else
558
+ group_defaults_list = list.collect {|it| it.to_s.strip.empty? ? nil : it.to_s.strip }.compact.uniq
559
+ end
560
+ end
561
+ opts.on('--plan-access-all [on|off]', String, "Toggle Access for all plans.") do |val|
562
+ plan_access_all = val.to_s == 'on' || val.to_s == 'true' || val.to_s == ''
563
+ end
564
+ opts.on('--plan-access LIST', Array, "Plan Access, comma separated list of plan IDs.") do |list|
565
+ if list.size == 1 && list[0] == 'null' # hacky way to clear it
566
+ plan_access_list = []
567
+ else
568
+ plan_access_list = list.collect {|it| it.to_s.strip.empty? ? nil : it.to_s.strip }.compact.uniq
569
+ end
570
+ end
571
+ opts.on('--plan-defaults LIST', Array, "Plan Default Selection, comma separated list of plan IDs") do |list|
572
+ if list.size == 1 && list[0] == 'null' # hacky way to clear it
573
+ plan_defaults_list = []
574
+ else
575
+ plan_defaults_list = list.collect {|it| it.to_s.strip.empty? ? nil : it.to_s.strip }.compact.uniq
576
+ end
577
+ end
578
+ opts.on('--tenants LIST', Array, "Tenant Access, comma separated list of account IDs") do |list|
579
+ if list.size == 1 && list[0] == 'null' # hacky way to clear it
580
+ options['tenants'] = []
581
+ else
582
+ options['tenants'] = list.collect {|it| it.to_s.strip.empty? ? nil : it.to_s.strip }.compact.uniq
583
+ end
584
+ end
585
+ opts.on('--visibility [private|public]', String, "Visibility") do |val|
586
+ options['visibility'] = val
587
+ end
588
+ opts.on('--active [on|off]', String, "Can be used to disable a resource pool") do |val|
589
+ options['active'] = val.to_s == 'on' || val.to_s == 'true' || val.to_s == ''
590
+ end
591
+ opts.on('--inventory [on|off]', String, "Enable or disable inventory sync for resource pool during cloud refresh") do |val|
592
+ options['inventory'] = val.to_s == 'on' || val.to_s == 'true' || val.to_s == ''
593
+ end
594
+ opts.on('--default-pool [on|off]', String, "Set resource pool as the default") do |val|
595
+ options['defaultPool'] = val.to_s == 'on' || val.to_s == 'true' || val.to_s == ''
596
+ end
597
+ opts.on("--description [TEXT]", String, "Description") do |val|
598
+ options['description'] = val.to_s
599
+ end
600
+ opts.on("--display-name [TEXT]", String, "Display Name") do |val|
601
+ options['displayName'] = val.to_s
602
+ end
603
+ opts.on( '--role ROLE', String, "Role Name or ID (applicable to select resource pools)" ) do |val|
604
+ options['role'] = val
605
+ end
606
+ build_common_options(opts, options, [:options, :payload, :json, :dry_run, :remote])
607
+ opts.footer = "Update a resource pool." + "\n" +
608
+ "[cloud] is required. This is the name or id of the cloud." + "\n"
609
+ "[pool] is required. This is the name or id of a resource pool."
610
+ end
611
+ optparse.parse!(args)
612
+ if args.count == 2
613
+ cloud_id = args[0]
614
+ resource_pool_id = args[1]
615
+ elsif args.count == 1 && cloud_id
616
+ resource_pool_id = args[0]
617
+ else
618
+ raise_command_error "wrong number of arguments, expected 2 and got (#{args.count}) #{args.join(' ')}\n#{optparse}"
619
+ end
620
+
621
+ connect(options)
622
+ puts "options #{options}"
623
+
624
+ begin
625
+ # load cloud
626
+ if cloud_id.nil?
627
+ puts_error "#{MtnCloud::Terminal.angry_prompt}missing required option: [cloud]\n#{optparse}"
628
+ return 1
629
+ end
630
+ cloud = find_cloud_by_name_or_id(cloud_id)
631
+ return 1 if cloud.nil?
632
+
633
+ resource_pool = find_resource_pool_by_name_or_id(cloud['id'], resource_pool_id)
634
+ return 1 if resource_pool.nil?
635
+
636
+ # merge -O options into normally parsed options
637
+ options.deep_merge!(options[:options].reject {|k,v| k.is_a?(Symbol) }) if options[:options]
638
+
639
+ # construct payload
640
+ payload = nil
641
+ if options[:payload]
642
+ payload = options[:payload]
643
+ else
644
+ # prompt for resource pool options
645
+ payload = {
646
+ 'resourcePool' => {
647
+ }
648
+ }
649
+
650
+ # allow arbitrary -O options
651
+ payload['resourcePool'].deep_merge!(options[:options].reject {|k,v| k.is_a?(Symbol) }) if options[:options]
652
+
653
+
654
+ # Group Access
655
+ if group_access_all != nil
656
+ payload['resourcePermissions'] ||= {}
657
+ payload['resourcePermissions']['all'] = group_access_all
658
+ end
659
+ if group_access_list != nil
660
+ payload['resourcePermissions'] ||= {}
661
+ payload['resourcePermissions']['sites'] = group_access_list.collect do |site_id|
662
+ site = {"id" => site_id.to_i}
663
+ if group_defaults_list && group_defaults_list.include?(site_id)
664
+ site["default"] = true
665
+ end
666
+ site
667
+ end
668
+ end
669
+
670
+ # Service Plan Access
671
+ if plan_access_all != nil
672
+ payload['resourcePermissions'] ||= {}
673
+ payload['resourcePermissions']['allPlans'] = plan_access_all
674
+ end
675
+ if plan_access_list != nil
676
+ payload['resourcePermissions'] ||= {}
677
+ payload['resourcePermissions']['plans'] = plan_access_list.collect do |site_id|
678
+ site = {"id" => site_id.to_i}
679
+ if plan_defaults_list && plan_defaults_list.include?(site_id)
680
+ site["default"] = true
681
+ end
682
+ site
683
+ end
684
+ end
685
+
686
+ # Tenants
687
+ if options['tenants']
688
+ payload['tenantPermissions'] = {}
689
+ payload['tenantPermissions']['accounts'] = options['tenants']
690
+ end
691
+
692
+ # Active
693
+ if options['active'] != nil
694
+ payload['resourcePool']['active'] = options['active']
695
+ end
696
+
697
+ #inventory
698
+ if options['inventory'] != nil
699
+ payload['resourcePool']['inventory'] = options['inventory']
700
+ end
701
+
702
+ # Default
703
+ if options['defaultPool'] != nil
704
+ payload['resourcePool']['defaultPool'] = options['defaultPool']
705
+ end
706
+
707
+ # Visibility
708
+ if options['visibility'] != nil
709
+ payload['resourcePool']['visibility'] = options['visibility']
710
+ end
711
+
712
+ # Description
713
+ if options['description'] != nil
714
+ payload['resourcePool']['description'] = options['description']
715
+ end
716
+
717
+ # Display Name
718
+ if options['displayName'] != nil
719
+ payload['resourcePool']['displayName'] = options['displayName']
720
+ end
721
+
722
+ # Role
723
+ if options['role'] != nil
724
+ role_options = load_option_source_data('openstackRoles', {zoneId: cloud['id']})
725
+ if role = role_options.find {|it| [it['name'], it['value']].include?(options['role'])}
726
+ payload['resourcePool']['config'] ||= {}
727
+ payload['resourcePool']['config']['roleId'] = role['value']
728
+ end
729
+ end
730
+
731
+ if payload['resourcePool'].empty? && payload['resourcePermissions'].nil? && payload['tenantPermissions'].nil?
732
+ raise_command_error "Specify at least one option to update.\n#{optparse}"
733
+ end
734
+
735
+ end
736
+ @cloud_resource_pools_interface.setopts(options)
737
+ if options[:dry_run]
738
+ print_dry_run @cloud_resource_pools_interface.dry.update(cloud['id'], resource_pool["id"], payload)
739
+ return
740
+ end
741
+ json_response = @cloud_resource_pools_interface.update(cloud['id'], resource_pool["id"], payload)
742
+ render_response(json_response, options, 'resourcePool') do
743
+ resource_pool = json_response['resourcePool']
744
+ print_green_success "Updated resource pool #{resource_pool['name']}"
745
+ get([cloud['id'].to_s, resource_pool['id'].to_s])
746
+ end
747
+ return 0, nil
748
+ rescue RestClient::Exception => e
749
+ print_rest_exception(e, options)
750
+ return 1
751
+ end
752
+ end
753
+
754
+ def remove(args)
755
+ cloud_id = nil
756
+ resource_pool_id = nil
757
+ options = {}
758
+ params = {}
759
+ optparse = MtnCloud::Cli::OptionParser.new do |opts|
760
+ opts.banner = subcommand_usage("[cloud] [pool]")
761
+ build_common_options(opts, options, [:auto_confirm, :json, :dry_run, :remote])
762
+ opts.footer = "Delete a resource pool." + "\n" +
763
+ "[cloud] is required. This is the name or id of the cloud." + "\n"
764
+ "[pool] is required. This is the name or id of a resource pool."
765
+ end
766
+ optparse.parse!(args)
767
+
768
+ if args.count == 2
769
+ cloud_id = args[0]
770
+ resource_pool_id = args[1]
771
+ elsif args.count == 1 && cloud_id
772
+ resource_pool_id = args[0]
773
+ else
774
+ raise_command_error "wrong number of arguments, expected 2 and got (#{args.count}) #{args.join(' ')}\n#{optparse}"
775
+ end
776
+
777
+ connect(options)
778
+ begin
779
+ # load cloud
780
+ if cloud_id.nil?
781
+ puts_error "#{MtnCloud::Terminal.angry_prompt}missing required option: [cloud]\n#{optparse}"
782
+ return 1
783
+ end
784
+ cloud = find_cloud_by_name_or_id(cloud_id)
785
+ return 1 if cloud.nil?
786
+
787
+ resource_pool = find_resource_pool_by_name_or_id(cloud['id'], resource_pool_id)
788
+ return 1 if resource_pool.nil?
789
+
790
+ zone_type = cloud['zoneType'] ? cloud['zoneType']['code'] : ''
791
+ if zone_type == ['amazon','azure','cloudFoundry','bluemixCloudFoundry','standard'].include?(zone_type)
792
+ else
793
+ #raise_command_error "Cloud type '#{zone_type}' does not allow deleting resource pools"
794
+ end
795
+
796
+ unless options[:yes] || MtnCloud::Cli::OptionTypes.confirm("Are you sure you want to delete the resource pool: #{resource_pool['name']}?")
797
+ return 9, "aborted command"
798
+ end
799
+ @cloud_resource_pools_interface.setopts(options)
800
+ if options[:dry_run]
801
+ print_dry_run @cloud_resource_pools_interface.dry.destroy(cloud['id'], resource_pool["id"], params)
802
+ return
803
+ end
804
+ json_response = @cloud_resource_pools_interface.destroy(cloud['id'], resource_pool["id"], params)
805
+ if options[:json]
806
+ puts as_json(json_response, options)
807
+ else
808
+ print_green_success "Removed resource pool #{resource_pool['name']}"
809
+ end
810
+ return 0
811
+ rescue RestClient::Exception => e
812
+ print_rest_exception(e, options)
813
+ return 1
814
+ end
815
+ end
816
+
817
+ private
818
+
819
+
820
+ def find_resource_pool_by_name_or_id(cloud_id, val)
821
+ if val.to_s =~ /\A\d{1,}\Z/
822
+ return find_resource_pool_by_id(cloud_id, val)
823
+ else
824
+ return find_resource_pool_by_name(cloud_id, val)
825
+ end
826
+ end
827
+
828
+ def find_resource_pool_by_id(cloud_id, id)
829
+ begin
830
+ json_response = @cloud_resource_pools_interface.get(cloud_id, id.to_i)
831
+ return json_response['resourcePool']
832
+ rescue RestClient::Exception => e
833
+ if e.response && e.response.code == 404
834
+ print_red_alert "Resource Pool not found by id #{id}"
835
+ return nil
836
+ else
837
+ raise e
838
+ end
839
+ end
840
+ end
841
+
842
+ def find_resource_pool_by_name(cloud_id, name)
843
+ json_response = @cloud_resource_pools_interface.list(cloud_id, {name: name.to_s})
844
+ resource_pools = json_response['resourcePools']
845
+ if resource_pools.empty?
846
+ print_red_alert "Resource Pool not found by name #{name}"
847
+ return nil
848
+ elsif resource_pools.size > 1
849
+ matching_resource_pools = resource_pools.select { |it| name && (it['name'] == name || it['externalId'] == name) }
850
+ if matching_resource_pools.size == 1
851
+ return matching_resource_pools[0]
852
+ end
853
+ print_red_alert "#{resource_pools.size} resource pools found by name #{name}"
854
+ rows = resource_pools.collect do |it|
855
+ {id: it['id'], name: it['name']}
856
+ end
857
+ print "\n"
858
+ puts as_pretty_table(rows, [:id, :name], {color:red})
859
+ return nil
860
+ else
861
+ resource_pool = resource_pools[0]
862
+ # merge in tenants map
863
+ if json_response['tenants'] && json_response['tenants'][resource_pool['id']]
864
+ resource_pool['tenants'] = json_response['tenants'][resource_pool['id']]
865
+ end
866
+ return resource_pool
867
+ end
868
+ end
869
+
870
+ end