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,539 @@
1
+ require 'mtncloud/cli/mixins/print_helper'
2
+ require 'mtncloud/cli/option_types'
3
+ # Mixin for MtnCloud::Cli command classes
4
+ # Provides common methods for library management commands
5
+ module MtnCloud::Cli::LibraryHelper
6
+
7
+ def self.included(klass)
8
+ klass.send :include, MtnCloud::Cli::PrintHelper
9
+ end
10
+
11
+ def api_client
12
+ raise "#{self.class} has not defined @api_client" if @api_client.nil?
13
+ @api_client
14
+ end
15
+
16
+ ## Instance Types
17
+
18
+ def find_instance_type_by_name_or_id(val)
19
+ if val.to_s =~ /\A\d{1,}\Z/
20
+ return find_instance_type_by_id(val)
21
+ else
22
+ return find_instance_type_by_name(val)
23
+ end
24
+ end
25
+
26
+ def find_instance_type_by_id(id)
27
+ begin
28
+ json_response = @library_instance_types_interface.get(id.to_i)
29
+ return json_response['instanceType']
30
+ rescue RestClient::Exception => e
31
+ if e.response && e.response.code == 404
32
+ print_red_alert "Instance Type not found by id #{id}"
33
+ else
34
+ raise e
35
+ end
36
+ end
37
+ end
38
+
39
+ def find_instance_type_by_name(name)
40
+ json_response = @library_instance_types_interface.list({name: name.to_s})
41
+ instance_types = json_response['instanceTypes']
42
+ if instance_types.empty?
43
+ print_red_alert "Instance Type not found by name #{name}"
44
+ return nil
45
+ elsif instance_types.size > 1
46
+ print_red_alert "#{instance_types.size} instance types found by name #{name}"
47
+ print_instance_types_table(instance_types, {color: red})
48
+ print_red_alert "Try using ID instead"
49
+ print reset,"\n"
50
+ return nil
51
+ else
52
+ return instance_types[0]
53
+ end
54
+ end
55
+
56
+ def print_instance_types_table(instance_types, opts={})
57
+ columns = [
58
+ {"ID" => lambda {|instance_type| instance_type['id'] } },
59
+ {"NAME" => lambda {|instance_type| instance_type['name'] } },
60
+ {"CODE" => lambda {|instance_type| instance_type['code'] } },
61
+ {"TECHNOLOGY" => lambda {|instance_type| format_instance_type_technology(instance_type) } },
62
+ {"LABELS" => lambda {|instance_type| format_list(instance_type['labels'], '', 3) } },
63
+ {"CATEGORY" => lambda {|instance_type| instance_type['category'].to_s.capitalize } },
64
+ {"FEATURED" => lambda {|instance_type| format_boolean instance_type['featured'] } },
65
+ {"OWNER" => lambda {|instance_type| instance_type['account'] ? instance_type['account']['name'] : '' } },
66
+ ]
67
+ if opts[:include_fields]
68
+ columns = opts[:include_fields]
69
+ end
70
+ print as_pretty_table(instance_types, columns, opts)
71
+ end
72
+
73
+ def format_instance_type_technology(instance_type)
74
+ if instance_type
75
+ instance_type['provisionTypeCode'].to_s.capitalize
76
+ else
77
+ ""
78
+ end
79
+ end
80
+
81
+ def load_balance_protocols_dropdown
82
+ [
83
+ {'name' => 'None', 'value' => ''},
84
+ {'name' => 'HTTP', 'value' => 'HTTP'},
85
+ {'name' => 'HTTPS', 'value' => 'HTTPS'},
86
+ {'name' => 'TCP', 'value' => 'TCP'}
87
+ ]
88
+ end
89
+
90
+ # Prompts user for exposed ports array
91
+ # returns array of port objects
92
+ def prompt_exposed_ports(options={}, api_client=nil, api_params={})
93
+ #puts "Configure ports:"
94
+ no_prompt = (options[:no_prompt] || (options[:options] && options[:options][:no_prompt]))
95
+
96
+ ports = []
97
+ port_index = 0
98
+ has_another_port = options[:options] && options[:options]["exposedPort#{port_index}"]
99
+ add_another_port = has_another_port || (!no_prompt && MtnCloud::Cli::OptionTypes.confirm("Add an exposed port?"))
100
+ while add_another_port do
101
+ field_context = "exposedPort#{port_index}"
102
+
103
+ port = {}
104
+ #port['name'] ||= "Port #{port_index}"
105
+ port_label = port_index == 0 ? "Port" : "Port [#{port_index+1}]"
106
+ v_prompt = MtnCloud::Cli::OptionTypes.prompt([{'fieldContext' => field_context, 'fieldName' => 'name', 'type' => 'text', 'fieldLabel' => "#{port_label} Name", 'required' => false, 'description' => 'Choose a name for this port.', 'defaultValue' => port['name']}], options[:options])
107
+ port['name'] = v_prompt[field_context]['name']
108
+
109
+ v_prompt = MtnCloud::Cli::OptionTypes.prompt([{'fieldContext' => field_context, 'fieldName' => 'port', 'type' => 'number', 'fieldLabel' => "#{port_label} Number", 'required' => true, 'description' => 'A port number. eg. 8001', 'defaultValue' => (port['port'] ? port['port'].to_i : nil)}], options[:options])
110
+ port['port'] = v_prompt[field_context]['port']
111
+
112
+ v_prompt = MtnCloud::Cli::OptionTypes.prompt([{'fieldContext' => field_context, 'fieldName' => 'loadBalanceProtocol', 'type' => 'select', 'fieldLabel' => "#{port_label} LB", 'selectOptions' => load_balance_protocols_dropdown, 'required' => false, 'skipSingleOption' => true, 'description' => 'Choose a load balance protocol.', 'defaultValue' => port['loadBalanceProtocol']}], options[:options])
113
+ port['loadBalanceProtocol'] = v_prompt[field_context]['loadBalanceProtocol']
114
+
115
+ ports << port
116
+ port_index += 1
117
+ has_another_port = options[:options] && options[:options]["exposedPort#{port_index}"]
118
+ add_another_port = has_another_port || (!no_prompt && MtnCloud::Cli::OptionTypes.confirm("Add another exposed port?"))
119
+
120
+ end
121
+
122
+
123
+ return ports
124
+ end
125
+
126
+
127
+ ## Container Types (Node Types)
128
+
129
+ def find_container_type_by_name_or_id(layout_id, val)
130
+ if val.to_s =~ /\A\d{1,}\Z/
131
+ return find_container_type_by_id(layout_id, val)
132
+ else
133
+ return find_container_type_by_name(layout_id, val)
134
+ end
135
+ end
136
+
137
+ def find_container_type_by_id(layout_id, id)
138
+ begin
139
+ json_response = @library_container_types_interface.get(layout_id, id.to_i)
140
+ return json_response['containerType']
141
+ rescue RestClient::Exception => e
142
+ if e.response && e.response.code == 404
143
+ print_red_alert "Instance Type not found by id #{id}"
144
+ else
145
+ raise e
146
+ end
147
+ end
148
+ end
149
+
150
+ def find_container_type_by_name(layout_id, name)
151
+ container_types = @library_container_types_interface.list(layout_id, {name: name.to_s})['containerTypes']
152
+ if container_types.empty?
153
+ print_red_alert "Node Type not found by name #{name}"
154
+ return nil
155
+ elsif container_types.size > 1
156
+ print_red_alert "#{container_types.size} node types found by name #{name}"
157
+ print_container_types_table(container_types, {color: red})
158
+ print_red_alert "Try using ID instead"
159
+ print reset,"\n"
160
+ return nil
161
+ else
162
+ return container_types[0]
163
+ end
164
+ end
165
+
166
+ def print_container_types_table(container_types, opts={})
167
+ columns = [
168
+ {"ID" => lambda {|it| it['id'] } },
169
+ {"TECHNOLOGY" => lambda {|it| format_container_type_technology(it) } },
170
+ {"NAME" => lambda {|it| it['name'] } },
171
+ {"SHORT NAME" => lambda {|it| it['shortName'] } },
172
+ {"VERSION" => lambda {|it| it['containerVersion'] } },
173
+ {"LABELS" => lambda {|it| format_list(it['labels'], '', 3) } },
174
+ {"CATEGORY" => lambda {|it| it['category'] } },
175
+ {"OWNER" => lambda {|it| it['account'] ? it['account']['name'] : '' } }
176
+ ]
177
+ if opts[:include_fields]
178
+ columns = opts[:include_fields]
179
+ end
180
+ print as_pretty_table(container_types, columns, opts)
181
+ end
182
+
183
+ def format_container_type_technology(container_type)
184
+ if container_type
185
+ container_type['provisionType'] ? container_type['provisionType']['name'] : ''
186
+ else
187
+ ""
188
+ end
189
+ end
190
+
191
+ def prompt_for_container_types(params, options={}, api_client=nil, api_params={})
192
+ # container_types
193
+ container_type_list = nil
194
+ container_type_ids = nil
195
+ still_prompting = true
196
+ if params['containerTypes'].nil?
197
+ still_prompting = true
198
+ while still_prompting do
199
+ v_prompt = MtnCloud::Cli::OptionTypes.prompt([{'fieldName' => 'containerTypes', 'type' => 'text', 'fieldLabel' => 'Node Types', 'required' => false, 'description' => 'Node Types (Container Types) to include, comma separated list of names or IDs.'}], options[:options])
200
+ unless v_prompt['containerTypes'].to_s.empty?
201
+ container_type_list = v_prompt['containerTypes'].split(",").collect {|it| it.to_s.strip.empty? ? nil : it.to_s.strip }.compact.uniq
202
+ end
203
+ container_type_ids = []
204
+ bad_ids = []
205
+ if container_type_list && container_type_list.size > 0
206
+ container_type_list.each do |it|
207
+ found_container_type = nil
208
+ begin
209
+ found_container_type = find_container_type_by_name_or_id(nil, it)
210
+ rescue SystemExit => cmdexit
211
+ end
212
+ if found_container_type
213
+ container_type_ids << found_container_type['id']
214
+ else
215
+ bad_ids << it
216
+ end
217
+ end
218
+ end
219
+ still_prompting = bad_ids.empty? ? false : true
220
+ end
221
+ else
222
+ container_type_list = params['containerTypes']
223
+ still_prompting = false
224
+ container_type_ids = []
225
+ bad_ids = []
226
+ if container_type_list && container_type_list.size > 0
227
+ container_type_list.each do |it|
228
+ found_container_type = nil
229
+ begin
230
+ found_container_type = find_container_type_by_name_or_id(nil, it)
231
+ rescue SystemExit => cmdexit
232
+ end
233
+ if found_container_type
234
+ container_type_ids << found_container_type['id']
235
+ else
236
+ bad_ids << it
237
+ end
238
+ end
239
+ end
240
+ if !bad_ids.empty?
241
+ return {success:false, msg:"Node Types not found: #{bad_ids}"}
242
+ end
243
+ end
244
+ return {success:true, data: container_type_ids}
245
+ end
246
+
247
+ ## Option Types
248
+
249
+ def find_option_type_by_name_or_id(val)
250
+ if val.to_s =~ /\A\d{1,}\Z/
251
+ return find_option_type_by_id(val)
252
+ else
253
+ return find_option_type_by_name(val)
254
+ end
255
+ end
256
+
257
+ def find_option_type_by_id(id)
258
+ begin
259
+ json_response = @option_types_interface.get(id.to_i)
260
+ return json_response['optionType']
261
+ rescue RestClient::Exception => e
262
+ if e.response && e.response.code == 404
263
+ print_red_alert "Option Type not found by id #{id}"
264
+ exit 1
265
+ else
266
+ raise e
267
+ end
268
+ end
269
+ end
270
+
271
+ def find_option_type_by_name(name)
272
+ json_results = @option_types_interface.list({name: name.to_s})
273
+ if json_results['optionTypes'].empty?
274
+ print_red_alert "Option Type not found by name #{name}"
275
+ exit 1
276
+ end
277
+ option_type = json_results['optionTypes'][0]
278
+ return option_type
279
+ end
280
+
281
+ def prompt_for_option_types(params, options={}, api_client=nil, api_params={})
282
+ # option_types
283
+ option_type_list = nil
284
+ option_type_ids = nil
285
+ still_prompting = true
286
+ if params['optionTypes'].nil?
287
+ still_prompting = true
288
+ while still_prompting do
289
+ v_prompt = MtnCloud::Cli::OptionTypes.prompt([{'fieldName' => 'optionTypes', 'type' => 'text', 'fieldLabel' => 'Option Types', 'required' => false, 'description' => 'Option Types to include, comma separated list of names or IDs.'}], options[:options])
290
+ unless v_prompt['optionTypes'].to_s.empty?
291
+ option_type_list = v_prompt['optionTypes'].split(",").collect {|it| it.to_s.strip.empty? ? nil : it.to_s.strip }.compact.uniq
292
+ end
293
+ option_type_ids = []
294
+ bad_ids = []
295
+ if option_type_list && option_type_list.size > 0
296
+ option_type_list.each do |it|
297
+ found_option_type = nil
298
+ begin
299
+ found_option_type = find_option_type_by_name_or_id(it)
300
+ rescue SystemExit => cmdexit
301
+ end
302
+ if found_option_type
303
+ option_type_ids << found_option_type['id']
304
+ else
305
+ bad_ids << it
306
+ end
307
+ end
308
+ end
309
+ still_prompting = bad_ids.empty? ? false : true
310
+ end
311
+ else
312
+ option_type_list = params['optionTypes']
313
+ still_prompting = false
314
+ option_type_ids = []
315
+ bad_ids = []
316
+ if option_type_list && option_type_list.size > 0
317
+ option_type_list.each do |it|
318
+ found_option_type = nil
319
+ begin
320
+ found_option_type = find_option_type_by_name_or_id(it)
321
+ rescue SystemExit => cmdexit
322
+ end
323
+ if found_option_type
324
+ option_type_ids << found_option_type['id']
325
+ else
326
+ bad_ids << it
327
+ end
328
+ end
329
+ end
330
+ if !bad_ids.empty?
331
+ return {success:false, msg:"Option Types not found: #{bad_ids}"}
332
+ end
333
+ end
334
+ return {success:true, data: option_type_ids}
335
+ end
336
+
337
+
338
+ ## Spec Template helper methods
339
+
340
+ def find_spec_template_by_name_or_id(val)
341
+ if val.to_s =~ /\A\d{1,}\Z/
342
+ return find_spec_template_by_id(val)
343
+ else
344
+ return find_spec_template_by_name(val)
345
+ end
346
+ end
347
+
348
+ def find_spec_template_by_id(id)
349
+ begin
350
+ json_response = @spec_templates_interface.get(id.to_i)
351
+ return json_response['specTemplate']
352
+ rescue RestClient::Exception => e
353
+ if e.response && e.response.code == 404
354
+ print_red_alert "Spec Template not found by id #{id}"
355
+ else
356
+ raise e
357
+ end
358
+ end
359
+ end
360
+
361
+ def find_spec_template_by_name(name)
362
+ resource_specs = @spec_templates_interface.list({name: name.to_s})['specTemplates']
363
+ if resource_specs.empty?
364
+ print_red_alert "Spec Template not found by name #{name}"
365
+ return nil
366
+ elsif resource_specs.size > 1
367
+ print_red_alert "#{resource_specs.size} spec templates found by name #{name}"
368
+ print_resource_specs_table(resource_specs, {color: red})
369
+ print_red_alert "Try using ID instead"
370
+ print reset,"\n"
371
+ return nil
372
+ else
373
+ return resource_specs[0]
374
+ end
375
+ end
376
+
377
+ def print_resource_specs_table(resource_specs, opts={})
378
+ columns = [
379
+ {"ID" => lambda {|resource_spec| resource_spec['id'] } },
380
+ {"NAME" => lambda {|resource_spec| resource_spec['name'] } },
381
+ #{"OWNER" => lambda {|resource_spec| resource_spec['account'] ? resource_spec['account']['name'] : '' } },
382
+ ]
383
+ if opts[:include_fields]
384
+ columns = opts[:include_fields]
385
+ end
386
+ print as_pretty_table(resource_specs, columns, opts)
387
+ end
388
+
389
+ def find_spec_template_type_by_id(id)
390
+ begin
391
+ json_response = @spec_template_types_interface.get(id.to_i)
392
+ return json_response['networkType']
393
+ rescue RestClient::Exception => e
394
+ if e.response && e.response.code == 404
395
+ print_red_alert "Network Type not found by id #{id}"
396
+ return nil
397
+ else
398
+ raise e
399
+ end
400
+ end
401
+ end
402
+
403
+ # def find_spec_template_type_by_name(name)
404
+ # json_response = @spec_template_types_interface.list({name: name.to_s})
405
+ # spec_template_types = json_response['networkTypes']
406
+ # if spec_template_types.empty?
407
+ # print_red_alert "Network Type not found by name #{name}"
408
+ # return spec_template_types
409
+ # elsif spec_template_types.size > 1
410
+ # print_red_alert "#{spec_template_types.size} network types found by name #{name}"
411
+ # rows = spec_template_types.collect do |it|
412
+ # {id: it['id'], name: it['name']}
413
+ # end
414
+ # puts as_pretty_table(rows, [:id, :name], {color:red})
415
+ # return nil
416
+ # else
417
+ # return spec_template_types[0]
418
+ # end
419
+ # end
420
+
421
+ def find_spec_template_type_by_name_or_code(name)
422
+ spec_template_types = get_all_spec_template_types().select { |it| name && it['code'] == name || it['name'] == name }
423
+ if spec_template_types.empty?
424
+ print_red_alert "Spec Template Type not found by code #{name}"
425
+ return nil
426
+ elsif spec_template_types.size > 1
427
+ print_red_alert "#{spec_template_types.size} spec template types found by code #{name}"
428
+ rows = spec_template_types.collect do |it|
429
+ {id: it['id'], code: it['code'], name: it['name']}
430
+ end
431
+ print "\n"
432
+ puts as_pretty_table(rows, [:id, :code, :name], {color:red})
433
+ return nil
434
+ else
435
+ return spec_template_types[0]
436
+ end
437
+ end
438
+
439
+ def find_spec_template_type_by_name_or_code_id(val)
440
+ if val.to_s =~ /\A\d{1,}\Z/
441
+ return find_subnet_by_id(val)
442
+ else
443
+ return find_spec_template_type_by_name_or_code(val)
444
+ end
445
+ end
446
+
447
+ def get_all_spec_template_types
448
+ @all_spec_template_types ||= @spec_template_types_interface.list({max: 1000})['specTemplateTypes'] || []
449
+ end
450
+
451
+ def prompt_for_spec_templates(params, options={}, api_client=nil, api_params={})
452
+ # spec_templates
453
+ spec_template_list = nil
454
+ spec_template_ids = nil
455
+ still_prompting = true
456
+ if params['specTemplates'].nil?
457
+ still_prompting = true
458
+ while still_prompting do
459
+ v_prompt = MtnCloud::Cli::OptionTypes.prompt([{'fieldName' => 'specTemplates', 'type' => 'text', 'fieldLabel' => 'Spec Templates', 'required' => false, 'description' => 'Spec Templates to include, comma separated list of names or IDs.'}], options[:options])
460
+ unless v_prompt['specTemplates'].to_s.empty?
461
+ spec_template_list = v_prompt['specTemplates'].split(",").collect {|it| it.to_s.strip.empty? ? nil : it.to_s.strip }.compact.uniq
462
+ end
463
+ spec_template_ids = []
464
+ bad_ids = []
465
+ if spec_template_list && spec_template_list.size > 0
466
+ spec_template_list.each do |it|
467
+ found_spec_template = nil
468
+ begin
469
+ found_spec_template = find_spec_template_by_name_or_id(it)
470
+ rescue SystemExit => cmdexit
471
+ end
472
+ if found_spec_template
473
+ spec_template_ids << found_spec_template['id']
474
+ else
475
+ bad_ids << it
476
+ end
477
+ end
478
+ end
479
+ still_prompting = bad_ids.empty? ? false : true
480
+ end
481
+ else
482
+ spec_template_list = params['specTemplates']
483
+ still_prompting = false
484
+ spec_template_ids = []
485
+ bad_ids = []
486
+ if spec_template_list && spec_template_list.size > 0
487
+ spec_template_list.each do |it|
488
+ found_spec_template = nil
489
+ begin
490
+ found_spec_template = find_spec_template_by_name_or_id(it)
491
+ rescue SystemExit => cmdexit
492
+ end
493
+ if found_spec_template
494
+ spec_template_ids << found_spec_template['id']
495
+ else
496
+ bad_ids << it
497
+ end
498
+ end
499
+ end
500
+ if !bad_ids.empty?
501
+ return {success:false, msg:"Spec Templates not found: #{bad_ids}"}
502
+ end
503
+ end
504
+ return {success:true, data: spec_template_ids}
505
+ end
506
+
507
+ def find_option_type_list_by_name_or_id(val)
508
+ if val.to_s =~ /\A\d{1,}\Z/
509
+ return find_option_type_list_by_id(val)
510
+ else
511
+ return find_option_type_list_by_name(val)
512
+ end
513
+ end
514
+
515
+ def find_option_type_list_by_id(id)
516
+ begin
517
+ json_response = @option_type_lists_interface.get(id.to_i)
518
+ return json_response['optionTypeList']
519
+ rescue RestClient::Exception => e
520
+ if e.response && e.response.code == 404
521
+ print_red_alert "Option List not found by id #{id}"
522
+ exit 1
523
+ else
524
+ raise e
525
+ end
526
+ end
527
+ end
528
+
529
+ def find_option_type_list_by_name(name)
530
+ json_results = @option_type_lists_interface.list({name: name.to_s})
531
+ if json_results['optionTypeLists'].empty?
532
+ print_red_alert "Option List not found by name #{name}"
533
+ exit 1
534
+ end
535
+ option_type_list = json_results['optionTypeLists'][0]
536
+ return option_type_list
537
+ end
538
+
539
+ end