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,849 @@
1
+ require 'mtncloud/cli/cli_command'
2
+
3
+ class MtnCloud::Cli::LibraryLayoutsCommand
4
+ include MtnCloud::Cli::CliCommand
5
+ include MtnCloud::Cli::ProvisioningHelper
6
+ # make sure LibraryHelper is loaded after ProvisioningHelper because it overwrites some methods like find_instance_type_by_name
7
+ # ProvisioningHelper is needed just for permissions (resourcePermissions)
8
+ include MtnCloud::Cli::LibraryHelper
9
+
10
+ set_command_name :'library-layouts'
11
+
12
+ register_subcommands :list, :get, :add, :update, :remove, :update_permissions
13
+
14
+ def initialize()
15
+ # @appliance_name, @appliance_url = MtnCloud::Cli::Remote.active_appliance
16
+ end
17
+
18
+ def connect(opts)
19
+ @api_client = establish_remote_appliance_connection(opts)
20
+ @library_layouts_interface = @api_client.library_layouts
21
+ @library_instance_types_interface = @api_client.library_instance_types
22
+ @library_container_types_interface = @api_client.library_container_types
23
+ @spec_templates_interface = @api_client.library_spec_templates
24
+ @spec_template_types_interface = @api_client.library_spec_template_types
25
+ @provision_types_interface = @api_client.provision_types
26
+ @option_types_interface = @api_client.option_types
27
+ @option_type_lists_interface = @api_client.option_type_lists
28
+ end
29
+
30
+ def handle(args)
31
+ handle_subcommand(args)
32
+ end
33
+
34
+
35
+ def list(args)
36
+ options = {}
37
+ params = {}
38
+ instance_type = nil
39
+ instance_type_id = nil
40
+ optparse = MtnCloud::Cli::OptionParser.new do |opts|
41
+ opts.banner = subcommand_usage()
42
+ opts.on('--instance-type ID', String, "Filter by Instance Type") do |val|
43
+ instance_type_id = val
44
+ end
45
+ opts.on('--category VALUE', String, "Filter by category") do |val|
46
+ params['category'] = val
47
+ end
48
+ opts.on('--code VALUE', String, "Filter by code") do |val|
49
+ params['code'] = val
50
+ end
51
+ opts.on('--technology VALUE', String, "Filter by technology") do |val|
52
+ params['provisionType'] = val
53
+ end
54
+ opts.on('-l', '--labels LABEL', String, "Filter by labels, can match any of the values") do |val|
55
+ add_query_parameter(params, 'labels', parse_labels(val))
56
+ end
57
+ opts.on('--all-labels LABEL', String, "Filter by labels, must match all of the values") do |val|
58
+ add_query_parameter(params, 'allLabels', parse_labels(val))
59
+ end
60
+ build_common_options(opts, options, [:list, :query, :json, :yaml, :csv, :fields, :dry_run, :remote])
61
+ opts.footer = "List layouts."
62
+ end
63
+ optparse.parse!(args)
64
+ # verify_args!(args:args, optparse:optparse, count:0)
65
+ if args.count > 0
66
+ options[:phrase] = args.join(" ")
67
+ end
68
+ connect(options)
69
+ begin
70
+ # construct payload
71
+ if instance_type_id
72
+ instance_type = find_instance_type_by_name_or_id(instance_type_id)
73
+ return 1 if instance_type.nil?
74
+ instance_type_id = instance_type['id']
75
+ end
76
+
77
+ params.merge!(parse_list_options(options))
78
+ @library_layouts_interface.setopts(options)
79
+ if options[:dry_run]
80
+ print_dry_run @library_layouts_interface.dry.list(instance_type_id, params)
81
+ return
82
+ end
83
+
84
+ json_response = @library_layouts_interface.list(instance_type_id, params)
85
+ if options[:json]
86
+ puts as_json(json_response, options, "instanceTypeLayouts")
87
+ return 0
88
+ elsif options[:csv]
89
+ puts records_as_csv(json_response['instanceTypeLayouts'], options)
90
+ return 0
91
+ elsif options[:yaml]
92
+ puts as_yaml(json_response, options, "instanceTypeLayouts")
93
+ return 0
94
+ end
95
+ layouts = json_response['instanceTypeLayouts']
96
+ title = "Library - Layouts"
97
+ subtitles = []
98
+ if instance_type
99
+ subtitles << "Instance Type: #{instance_type['name']}".strip
100
+ end
101
+ subtitles += parse_list_subtitles(options)
102
+ print_h1 title, subtitles
103
+ if layouts.empty?
104
+ print cyan,"No layouts found.",reset,"\n"
105
+ else
106
+ print_layouts_table(layouts, options)
107
+ print_results_pagination(json_response, {:label => "layout", :n_label => "layouts"})
108
+ # print_results_pagination(json_response)
109
+ end
110
+ print reset,"\n"
111
+ rescue RestClient::Exception => e
112
+ print_rest_exception(e, options)
113
+ return 1
114
+ end
115
+ end
116
+
117
+ def get(args)
118
+ options = {}
119
+ optparse = MtnCloud::Cli::OptionParser.new do |opts|
120
+ opts.banner = subcommand_usage("[layout]")
121
+ # opts.on( nil, '--permissions', "Display permissions" ) do
122
+ # options[:show_perms] = true
123
+ # end
124
+ build_standard_get_options(opts, options)
125
+ opts.footer = <<-EOT
126
+ Get details about a layout.
127
+ [layout] is required. This is the name or id of a layout.
128
+ EOT
129
+ end
130
+ verify_args!(args:args, optparse:optparse, min:1)
131
+ optparse.parse!(args)
132
+ connect(options)
133
+ id_list = parse_id_list(args)
134
+ return run_command_for_each_arg(id_list) do |arg|
135
+ _get(arg, options)
136
+ end
137
+ end
138
+
139
+ def _get(id, options)
140
+ exit_code, err = 0, nil
141
+ instance_type_id = nil
142
+ params = {}
143
+ params.merge!(parse_query_options(options))
144
+ @library_layouts_interface.setopts(options)
145
+ if options[:dry_run]
146
+ if id.to_s =~ /\A\d{1,}\Z/
147
+ print_dry_run @library_layouts_interface.dry.get(instance_type_id, id.to_i, params)
148
+ else
149
+ print_dry_run @library_layouts_interface.dry.list(instance_type_id, params.merge({name:id}))
150
+ end
151
+ return
152
+ end
153
+ layout = find_layout_by_name_or_id(instance_type_id, id)
154
+ if layout.nil?
155
+ return 1
156
+ end
157
+ # skip redundant request
158
+ #json_response = @library_layouts_interface.get(instance_type_id, layout['id'])
159
+ json_response = {'instanceTypeLayout' => layout}
160
+ #layout = json_response['instanceTypeLayout']
161
+ if options[:json]
162
+ puts as_json(json_response, options, "instanceTypeLayout")
163
+ return 0
164
+ elsif options[:yaml]
165
+ puts as_yaml(json_response, options, "instanceTypeLayout")
166
+ return 0
167
+ elsif options[:csv]
168
+ puts records_as_csv([json_response['instanceTypeLayout']], options)
169
+ return 0
170
+ end
171
+
172
+ print_h1 "Layout Details"
173
+ print cyan
174
+ description_cols = {
175
+ "ID" => lambda {|it| it['id'] },
176
+ "Name" => lambda {|it| it['name'] },
177
+ "Instance Type" => lambda {|it| it['instanceType']['name'] rescue '' },
178
+ #"Code" => lambda {|it| it['code'] },
179
+ "Version" => lambda {|it| it['instanceVersion'] },
180
+ "Description" => lambda {|it| it['description'] },
181
+ "Technology" => lambda {|it| format_layout_technology(it) },
182
+ "Labels" => lambda {|it| format_list(it['labels'], '') },
183
+ "Min Memory" => lambda {|it|
184
+ if it['memoryRequirement'].to_i != 0
185
+ (it['memoryRequirement'].to_i / (1024*1024)).to_s + " MB"
186
+ else
187
+ ""
188
+ end
189
+ },
190
+ "Workflow" => lambda {|it|
191
+ if it['taskSets']
192
+ it['taskSets'][0]['name'] rescue ""
193
+ else
194
+ ""
195
+ end
196
+ },
197
+ "Tfvar Secret" => lambda {|it| it['tfvarSecret'] },
198
+ # "Category" => lambda {|it| it['category'].to_s.capitalize },
199
+ # # "Logo" => lambda {|it| it['logo'].to_s },
200
+ # "Visiblity" => lambda {|it| it['visibility'].to_s.capitalize },
201
+ # "Environment Prefix" => lambda {|it| it['environmentPrefix'] },
202
+ # "Enable Settings" => lambda {|it| format_boolean it['hasSettings'] },
203
+ # "Enable Scaling" => lambda {|it| format_boolean it['hasAutoScale'] },
204
+ # "Supports Deployments" => lambda {|it| format_boolean it['hasDeployment'] },
205
+ # "Featured" => lambda {|it| format_boolean it['featured'] },
206
+ # "Owner" => lambda {|it| it['account'] ? it['account']['name'] : '' },
207
+ # "Active" => lambda {|it| format_boolean it['active'] },
208
+ # "Created" => lambda {|it| format_local_dt(it['dateCreated']) },
209
+ # "Updated" => lambda {|it| format_local_dt(it['lastUpdated']) }
210
+ }
211
+ description_cols.delete("Tfvar Secret") if !(layout['provisionType'] && layout['provisionType']['code'] == 'terraform')
212
+ print_description_list(description_cols, layout)
213
+
214
+ price_sets = layout['priceSets']
215
+ if price_sets && price_sets.size > 0
216
+ print_h2 "Price Sets"
217
+ price_set_columns = [
218
+ {"ID" => lambda {|it| it['id'] } },
219
+ {"NAME" => lambda {|it| it['name'] } },
220
+ {"PRICE UNIT" => lambda {|it| it['priceUnit'] } },
221
+ ]
222
+ print as_pretty_table(price_sets, price_set_columns)
223
+ else
224
+ # print cyan,"No price sets found for this instance type.","\n",reset
225
+ end
226
+
227
+ layout_evars = layout['environmentVariables']
228
+ if layout_evars && layout_evars.size > 0
229
+ print_h2 "Environment Variables"
230
+ evar_columns = [
231
+ {"NAME" => lambda {|it| it['name'] } },
232
+ {"VALUE" => lambda {|it| it['defaultValue'] } },
233
+ {"TYPE" => lambda {|it| it['valueType'].to_s.capitalize } },
234
+ {"EXPORT" => lambda {|it| format_boolean it['export'] } },
235
+ {"MASKED" => lambda {|it| format_boolean it['masked'] } },
236
+ ]
237
+ print as_pretty_table(layout_evars, evar_columns)
238
+ else
239
+ # print yellow,"No environment variables found for this instance type.","\n",reset
240
+ end
241
+
242
+ layout_option_types = layout['optionTypes']
243
+ if layout_option_types && layout_option_types.size > 0
244
+ print_h2 "Option Types"
245
+ columns = [
246
+ {"ID" => lambda {|it| it['id'] } },
247
+ {"NAME" => lambda {|it| it['name'] } },
248
+ {"TYPE" => lambda {|it| it['type'] } },
249
+ {"FIELD NAME" => lambda {|it| it['fieldName'] } },
250
+ {"FIELD LABEL" => lambda {|it| it['fieldLabel'] } },
251
+ {"DEFAULT" => lambda {|it| it['defaultValue'] } },
252
+ {"REQUIRED" => lambda {|it| format_boolean it['required'] } },
253
+ ]
254
+ print as_pretty_table(layout_option_types, columns)
255
+ else
256
+ # print yellow,"No option types found for this layout.","\n",reset
257
+ end
258
+
259
+ layout_node_types = layout['containerTypes']
260
+ if layout_node_types && layout_node_types.size > 0
261
+ print_h2 "Node Types"
262
+ # match UI sorting [version desc, name asc]
263
+ # or use something simpler like one of these
264
+ layout_node_types = layout_node_types.sort { |a,b| a['name'] <=> b['name'] }
265
+ # layout_node_types = layout_node_types.sort { |a,b| a['sortOrder'] <=> b['sortOrder'] }
266
+ node_type_columns = [
267
+ {"ID" => lambda {|it| it['id'] } },
268
+ {"NAME" => lambda {|it| it['name'] } },
269
+ {"SHORT NAME" => lambda {|it| it['shortName'] } },
270
+ {"VERSION" => lambda {|it| it['containerVersion'] } },
271
+ {"TECHNOLOGY" => lambda {|it| it['provisionType'] ? it['provisionType']['name'] : '' } },
272
+ {"CATEGORY" => lambda {|it| it['category'] } },
273
+ ]
274
+ print as_pretty_table(layout_node_types, node_type_columns)
275
+ else
276
+ # print yellow,"No node types for this layout.","\n",reset
277
+ end
278
+
279
+ layout_spec_templates = layout['specTemplates']
280
+ if layout_spec_templates && layout_spec_templates.size > 0
281
+ print_h2 "Spec Templates"
282
+ layout_spec_templates = layout_spec_templates.sort { |a,b| a['name'] <=> b['name'] }
283
+ spec_template_columns = [
284
+ {"ID" => lambda {|it| it['id'] } },
285
+ {"NAME" => lambda {|it| it['name'] } },
286
+ {"TYPE" => lambda {|it| it['type']['name'] rescue '' } }
287
+ ]
288
+ print as_pretty_table(layout_spec_templates, spec_template_columns)
289
+ else
290
+ # print yellow,"No spec templates for this layout.","\n",reset
291
+ end
292
+
293
+
294
+ if options[:show_perms] || (layout['permissions'] && !layout['permissions'].empty?)
295
+ print_permissions(layout['permissions'], layout_permission_excludes)
296
+ print reset
297
+ else
298
+ print reset,"\n"
299
+ end
300
+ return exit_code, err
301
+ end
302
+
303
+ def add(args)
304
+ options = {}
305
+ params = {}
306
+ instance_type_id = nil
307
+ evars = nil
308
+ optparse = MtnCloud::Cli::OptionParser.new do|opts|
309
+ opts.banner = subcommand_usage("[instance-type]")
310
+ opts.on('--instance-type ID', String, "Instance Type") do |val|
311
+ instance_type_id = val
312
+ end
313
+ opts.on('--name VALUE', String, "Name for this layout") do |val|
314
+ params['name'] = val
315
+ end
316
+ opts.on('-l', '--labels [LIST]', String, "Labels") do |val|
317
+ params['labels'] = parse_labels(val)
318
+ end
319
+ opts.on('--version VALUE', String, "Version") do |val|
320
+ params['instanceVersion'] = val
321
+ end
322
+ opts.on('--description VALUE', String, "Description") do |val|
323
+ params['description'] = val
324
+ end
325
+ opts.on("--creatable [on|off]", ['on','off'], "Creatable") do |val|
326
+ params['creatable'] = (val.to_s != 'false' && val.to_s != 'off')
327
+ end
328
+ opts.on('--technology CODE', String, "Technology") do |val|
329
+ params['provisionTypeCode'] = val
330
+ end
331
+ opts.on('--min-memory VALUE', String, "Minimum Memory (MB)") do |val|
332
+ params['memoryRequirement'] = val
333
+ end
334
+ opts.on("--auto-scale [on|off]", ['on','off'], "Enable Scaling (Horizontal)") do |val|
335
+ params['hasAutoScale'] = (val.to_s != 'false' && val.to_s != 'off')
336
+ end
337
+ opts.on("--convert-to-managed [on|off]", ['on','off'], "Supports Convert To Managed") do |val|
338
+ params['supportsConvertToManaged'] = (val.to_s != 'false' && val.to_s != 'off')
339
+ end
340
+ opts.on('--workflow ID', String, "Workflow") do |val|
341
+ params['taskSetId'] = val.to_i
342
+ end
343
+ opts.on('--option-types [x,y,z]', Array, "List of Option Type IDs") do |list|
344
+ if list.nil?
345
+ params['optionTypes'] = []
346
+ else
347
+ params['optionTypes'] = list.collect {|it| it.to_s.strip.empty? ? nil : it.to_s.strip }.compact.uniq
348
+ end
349
+ end
350
+ opts.on('--node-types [x,y,z]', Array, "List of Node Type IDs") do |list|
351
+ if list.nil?
352
+ params['containerTypes'] = []
353
+ else
354
+ params['containerTypes'] = list.collect {|it| it.to_s.strip.empty? ? nil : it.to_s.strip }.compact.uniq
355
+ end
356
+ end
357
+ opts.on('--spec-templates [x,y,z]', Array, "List of Spec Templates to include in this layout, comma separated list of names or IDs.") do |list|
358
+ if list.nil?
359
+ params['specTemplates'] = []
360
+ else
361
+ params['specTemplates'] = list.collect {|it| it.to_s.strip.empty? ? nil : it.to_s.strip }.compact.uniq
362
+ end
363
+ end
364
+ opts.on('--tfvar-secret VALUE', String, "Tfvar Secret name, eg. 'tfvars/dev-key'") do |val|
365
+ params['tfvarSecret'] = val == 'null' ? nil : val
366
+ end
367
+ opts.on('--price-sets [LIST]', Array, 'Price set(s), comma separated list of price set IDs') do |list|
368
+ params['priceSets'] = list.collect {|it| it.to_s.strip.empty? || !it.to_i ? nil : it.to_s.strip}.compact.uniq.collect {|it| {'id' => it.to_i}}
369
+ end
370
+ add_perms_options(opts, options, layout_permission_excludes)
371
+ build_standard_add_options(opts, options)
372
+ opts.footer = <<-EOT
373
+ Create a new layout.
374
+ [instance-type] is required and can be passed as --instance-type instead.
375
+ EOT
376
+ end
377
+ optparse.parse!(args)
378
+ if args.count > 1
379
+ raise_command_error "wrong number of arguments, expected 0-1 and got (#{args.count}) #{args}\n#{optparse}"
380
+ end
381
+ if args[0]
382
+ #params["name"] = args[0]
383
+ instance_type_id = args[0]
384
+ end
385
+ if instance_type_id.nil?
386
+ instance_type_id = args[0]
387
+ end
388
+ if !instance_type_id
389
+ puts optparse
390
+ return 1
391
+ end
392
+ connect(options)
393
+ begin
394
+ instance_type = find_instance_type_by_name_or_id(instance_type_id)
395
+ exit 1 if instance_type.nil?
396
+ instance_type_id = instance_type['id']
397
+
398
+ # construct payload
399
+ payload = nil
400
+ if options[:payload]
401
+ payload = options[:payload]
402
+ else
403
+ params.deep_merge!(options[:options].reject {|k,v| k.is_a?(Symbol) }) if options[:options]
404
+
405
+ if !params['name']
406
+ v_prompt = MtnCloud::Cli::OptionTypes.prompt([{'fieldName' => 'name', 'type' => 'text', 'fieldLabel' => 'Name', 'required' => true}], options[:options])
407
+ params['name'] = v_prompt['name']
408
+ end
409
+ if !params['instanceVersion']
410
+ v_prompt = MtnCloud::Cli::OptionTypes.prompt([{'fieldName' => 'instanceVersion', 'type' => 'text', 'fieldLabel' => 'Version', 'required' => true}], options[:options])
411
+ params['instanceVersion'] = v_prompt['instanceVersion']
412
+ end
413
+ if !params['description']
414
+ v_prompt = MtnCloud::Cli::OptionTypes.prompt([{'fieldName' => 'description', 'type' => 'text', 'fieldLabel' => 'Description', 'required' => false}], options[:options])
415
+ params['description'] = v_prompt['description'] if v_prompt['description']
416
+ end
417
+ if params['creatable'].nil?
418
+ v_prompt = MtnCloud::Cli::OptionTypes.prompt([{'fieldName' => 'creatable', 'type' => 'checkbox', 'fieldLabel' => 'Creatable', 'defaultValue' => 'on'}], options[:options])
419
+ params['creatable'] = ['true','on'].include?(v_prompt['creatable'].to_s) if v_prompt['creatable'] != nil
420
+ end
421
+
422
+ provision_types = @provision_types_interface.list({customSupported: true})['provisionTypes']
423
+ if provision_types.empty?
424
+ print_red_alert "No available provision types found!"
425
+ exit 1
426
+ end
427
+ provision_type_options = provision_types.collect {|it| { 'name' => it['name'], 'value' => it['code']} }
428
+
429
+ if !params['provisionTypeCode']
430
+ v_prompt = MtnCloud::Cli::OptionTypes.prompt([{'fieldName' => 'provisionTypeCode', 'type' => 'select', 'selectOptions' => provision_type_options, 'fieldLabel' => 'Technology', 'required' => true, 'description' => 'The type of container technology.'}], options[:options])
431
+ params['provisionTypeCode'] = v_prompt['provisionTypeCode']
432
+ else
433
+
434
+ end
435
+ provision_type = provision_types.find {|it| it['code'] == params['provisionTypeCode'] }
436
+
437
+ if !params['memoryRequirement']
438
+ v_prompt = MtnCloud::Cli::OptionTypes.prompt([{'fieldName' => 'memoryRequirement', 'type' => 'text', 'fieldLabel' => 'Min Memory (MB)', 'required' => false, 'description' => 'This will override any memory requirement set on the virtual image'}], options[:options])
439
+ params['memoryRequirement'] = v_prompt['memoryRequirement'] if v_prompt['memoryRequirement']
440
+ end
441
+ if params['hasAutoScale'].nil?
442
+ v_prompt = MtnCloud::Cli::OptionTypes.prompt([{'fieldName' => 'hasAutoScale', 'type' => 'checkbox', 'fieldLabel' => 'Enable Scaling (Horizontal)'}], options[:options])
443
+ params['hasAutoScale'] = ['true','on'].include?(v_prompt['hasAutoScale'].to_s) if v_prompt['hasAutoScale'] != nil
444
+ end
445
+ if params['supportsConvertToManaged'].nil?
446
+ v_prompt = MtnCloud::Cli::OptionTypes.prompt([{'fieldName' => 'supportsConvertToManaged', 'type' => 'checkbox', 'fieldLabel' => 'Supports Convert To Managed'}], options[:options])
447
+ params['supportsConvertToManaged'] = ['true','on'].include?(v_prompt['supportsConvertToManaged'].to_s) if v_prompt['supportsConvertToManaged'] != nil
448
+ end
449
+ if !params['taskSetId']
450
+ v_prompt = MtnCloud::Cli::OptionTypes.prompt([{'fieldName' => 'taskSetId', 'type' => 'text', 'fieldLabel' => 'Workflow ID', 'required' => false, 'description' => 'Worflow ID'}], options[:options])
451
+ params['taskSetId'] = v_prompt['taskSetId'].to_i if v_prompt['taskSetId']
452
+ end
453
+
454
+ # ENVIRONMENT VARIABLES
455
+ if evars
456
+
457
+ else
458
+ # prompt
459
+ end
460
+
461
+ # OPTION TYPES
462
+ prompt_results = prompt_for_option_types(params, options, @api_client)
463
+ if prompt_results[:success]
464
+ params['optionTypes'] = prompt_results[:data] unless prompt_results[:data].nil?
465
+ else
466
+ return 1
467
+ end
468
+
469
+ # NODE TYPES
470
+ prompt_results = prompt_for_container_types(params, options, @api_client)
471
+ if prompt_results[:success]
472
+ params['containerTypes'] = prompt_results[:data] unless prompt_results[:data].nil?
473
+ else
474
+ return 1
475
+ end
476
+
477
+ # SPEC TEMPLATES
478
+ prompt_results = prompt_for_spec_templates(params, options, @api_client)
479
+ if prompt_results[:success]
480
+ params['specTemplates'] = prompt_results[:data] unless prompt_results[:data].nil?
481
+ else
482
+ return 1
483
+ end
484
+
485
+ # TFVAR SECRET
486
+ if !params['tfvarSecret']
487
+ if provision_type && provision_type['code'] == 'terraform'
488
+ v_prompt = MtnCloud::Cli::OptionTypes.prompt([{'fieldName' => 'tfvarSecret', 'type' => 'select', 'optionSource' => 'tfvarSecrets', 'fieldLabel' => 'Tfvar Secret', 'required' => false}], options[:options], @api_client)
489
+ params['tfvarSecret'] = v_prompt['tfvarSecret'] if v_prompt['tfvarSecret']
490
+ end
491
+ end
492
+
493
+ payload = {'instanceTypeLayout' => params}
494
+
495
+ # Resource Permissions (Groups only for layouts)
496
+ perms = prompt_permissions(options.merge({}), layout_permission_excludes)
497
+ perms_payload = {}
498
+ perms_payload['resourcePermissions'] = perms['resourcePermissions'] if !perms['resourcePermissions'].empty?
499
+ #perms_payload['tenantPermissions'] = perms['tenantPermissions'] if !perms['tenantPermissions'].nil?
500
+
501
+ payload['instanceTypeLayout']['permissions'] = perms_payload
502
+ payload['instanceTypeLayout']['visibility'] = perms['resourcePool']['visibility'] if !perms['resourcePool'].nil? && !perms['resourcePool']['visibility'].nil?
503
+
504
+ end
505
+ @library_layouts_interface.setopts(options)
506
+ if options[:dry_run]
507
+ print_dry_run @library_layouts_interface.dry.create(instance_type_id, payload)
508
+ return
509
+ end
510
+
511
+ json_response = @library_layouts_interface.create(instance_type_id, payload)
512
+
513
+ if options[:json]
514
+ print JSON.pretty_generate(json_response), "\n"
515
+ return
516
+ end
517
+
518
+ print_green_success "Added layout #{params['name']}"
519
+
520
+ #get([json_response['instanceTypeLayout']['id']])
521
+
522
+ rescue RestClient::Exception => e
523
+ print_rest_exception(e, options)
524
+ exit 1
525
+ end
526
+ end
527
+
528
+ def update(args)
529
+ options = {}
530
+ params = {}
531
+ instance_type_id = nil
532
+ evars = nil
533
+ optparse = MtnCloud::Cli::OptionParser.new do|opts|
534
+ opts.banner = subcommand_usage("[layout] [options]")
535
+ opts.on('--name VALUE', String, "Name for this layout") do |val|
536
+ params['name'] = val
537
+ end
538
+ opts.on('-l', '--labels [LIST]', String, "Labels") do |val|
539
+ params['labels'] = parse_labels(val)
540
+ end
541
+ opts.on('--version VALUE', String, "Version") do |val|
542
+ params['instanceVersion'] = val
543
+ end
544
+ opts.on('--description VALUE', String, "Description") do |val|
545
+ params['description'] = val
546
+ end
547
+ opts.on("--creatable [on|off]", ['on','off'], "Creatable") do |val|
548
+ params['creatable'] = (val.to_s != 'false' && val.to_s != 'off')
549
+ end
550
+ opts.on('--technology CODE', String, "Technology") do |val|
551
+ params['provisionTypeCode'] = val
552
+ end
553
+ opts.on('--min-memory VALUE', String, "Minimum Memory (MB)") do |val|
554
+ params['memoryRequirement'] = val
555
+ end
556
+ opts.on("--auto-scale [on|off]", ['on','off'], "Enable Scaling (Horizontal)") do |val|
557
+ params['hasAutoScale'] = (val.to_s != 'false' && val.to_s != 'off')
558
+ end
559
+ opts.on("--convert-to-managed [on|off]", ['on','off'], "Supports Convert To Managed") do |val|
560
+ params['supportsConvertToManaged'] = (val.to_s != 'false' && val.to_s != 'off')
561
+ end
562
+ opts.on('--workflow ID', String, "Workflow") do |val|
563
+ params['taskSetId'] = val.to_i
564
+ end
565
+ opts.on('--option-types [x,y,z]', Array, "List of Option Type IDs") do |list|
566
+ if list.nil?
567
+ params['optionTypes'] = []
568
+ else
569
+ params['optionTypes'] = list.collect {|it| it.to_s.strip.empty? ? nil : it.to_s.strip }.compact.uniq
570
+ end
571
+ end
572
+ opts.on('--node-types [x,y,z]', Array, "List of Node Type IDs") do |list|
573
+ if list.nil?
574
+ params['containerTypes'] = []
575
+ else
576
+ params['containerTypes'] = list.collect {|it| it.to_s.strip.empty? ? nil : it.to_s.strip }.compact.uniq
577
+ end
578
+ end
579
+ opts.on('--spec-templates [x,y,z]', Array, "List of Spec Templates to include in this layout, comma separated list of names or IDs.") do |list|
580
+ if list.nil?
581
+ params['specTemplates'] = []
582
+ else
583
+ params['specTemplates'] = list.collect {|it| it.to_s.strip.empty? ? nil : it.to_s.strip }.compact.uniq
584
+ end
585
+ end
586
+ opts.on('--tfvar-secret VALUE', String, "Tfvar Secret name, eg. 'tfvars/dev-key'") do |val|
587
+ params['tfvarSecret'] = val == 'null' ? nil : val
588
+ end
589
+ opts.on('--price-sets [LIST]', Array, 'Price set(s), comma separated list of price set IDs') do |list|
590
+ params['priceSets'] = list.collect {|it| it.to_s.strip.empty? || !it.to_i ? nil : it.to_s.strip}.compact.uniq.collect {|it| {'id' => it.to_i}}
591
+ end
592
+ add_perms_options(opts, options, layout_permission_excludes)
593
+ build_standard_update_options(opts, options)
594
+ opts.footer = <<-EOT
595
+ Update a layout.
596
+ [layout] is required. This is the name or id of a layout.
597
+ EOT
598
+ end
599
+ optparse.parse!(args)
600
+ verify_args!(args:args, optparse:optparse, count:1)
601
+ connect(options)
602
+ exit_code, err = 0, nil
603
+
604
+ layout = find_layout_by_name_or_id(nil, args[0])
605
+ exit 1 if layout.nil?
606
+ payload = nil
607
+ if options[:payload]
608
+ payload = options[:payload]
609
+ else
610
+ params.deep_merge!(options[:options].reject {|k,v| k.is_a?(Symbol) }) if options[:options]
611
+
612
+ # ENVIRONMENT VARIABLES
613
+ if evars
614
+
615
+ else
616
+ # prompt
617
+ end
618
+
619
+ # OPTION TYPES
620
+ if params['optionTypes']
621
+ prompt_results = prompt_for_option_types(params, options, @api_client)
622
+ if prompt_results[:success]
623
+ params['optionTypes'] = prompt_results[:data] unless prompt_results[:data].nil?
624
+ else
625
+ return 1
626
+ end
627
+ end
628
+
629
+ # NODE TYPES
630
+ if params['containerTypes']
631
+ prompt_results = prompt_for_container_types(params, options, @api_client)
632
+ if prompt_results[:success]
633
+ params['containerTypes'] = prompt_results[:data] unless prompt_results[:data].nil?
634
+ else
635
+ return 1
636
+ end
637
+ end
638
+
639
+ # SPEC TEMPLATES
640
+ if params['specTemplates']
641
+ prompt_results = prompt_for_spec_templates(params, options, @api_client)
642
+ if prompt_results[:success]
643
+ params['specTemplates'] = prompt_results[:data] unless prompt_results[:data].nil?
644
+ else
645
+ return 1
646
+ end
647
+ end
648
+
649
+ # perms
650
+ if options[:groupAccessAll] != nil || options[:groupAccessList]
651
+ perms = prompt_permissions(options.merge({no_prompt:true}), layout_permission_excludes)
652
+ perms_payload = {}
653
+ perms_payload['resourcePermissions'] = perms['resourcePermissions'] if !perms['resourcePermissions'].empty?
654
+ params.deep_merge!({'permissions' => perms_payload}) if !perms_payload.empty?
655
+ end
656
+
657
+ params['visibility'] = options[:visibility] if !options[:visibility].nil?
658
+
659
+ if params.empty?
660
+ raise_command_error "Specify at least one option to update.\n#{optparse}"
661
+ end
662
+
663
+ payload = {'instanceTypeLayout' => params}
664
+
665
+ end
666
+ @library_layouts_interface.setopts(options)
667
+ if options[:dry_run]
668
+ print_dry_run @library_layouts_interface.dry.update(nil, layout['id'], payload)
669
+ return
670
+ end
671
+
672
+ json_response = @library_layouts_interface.update(nil, layout['id'], payload)
673
+
674
+ if options[:json]
675
+ print JSON.pretty_generate(json_response), "\n"
676
+ return
677
+ end
678
+
679
+ print_green_success "Updated layout #{params['name'] || layout['name']}"
680
+ #list([])
681
+ return exit_code, err
682
+ end
683
+
684
+ def update_permissions(args)
685
+ options = {}
686
+ optparse = MtnCloud::Cli::OptionParser.new do |opts|
687
+ opts.banner = subcommand_usage( "[layout]")
688
+ add_perms_options(opts, options, layout_permission_excludes)
689
+ build_standard_update_options(opts, options)
690
+ opts.footer = <<-EOT
691
+ Update layout permissions.
692
+ [layout] is required. This is the name or id of a layout.
693
+ EOT
694
+ end
695
+ optparse.parse!(args)
696
+ verify_args!(args:args, optparse:optparse, count:1)
697
+ connect(options)
698
+ exit_code, err = 0, nil
699
+ # if !is_master_account
700
+ # print_red_alert "Permissions only available for master tenant"
701
+ # return 1
702
+ # end
703
+ layout = find_layout_by_name_or_id(nil, args[0])
704
+ return 1, "layout not found for #{args[0]}" if layout.nil?
705
+ payload = {}
706
+ if options[:payload]
707
+ payload = options[:payload]
708
+ payload.deep_merge!(parse_passed_options(options))
709
+ else
710
+ payload.deep_merge!(parse_passed_options(options))
711
+
712
+ perms = prompt_permissions(options.merge({}), layout_permission_excludes)
713
+ perms_payload = {}
714
+ perms_payload['resourcePermissions'] = perms['resourcePermissions'] if !perms['resourcePermissions'].empty?
715
+ payload.deep_merge!({'permissions' => perms_payload}) if !perms_payload.empty?
716
+ end
717
+
718
+ @library_layouts_interface.setopts(options)
719
+ if options[:dry_run]
720
+ print_dry_run @library_layouts_interface.dry.update_permissions(layout['id'], payload)
721
+ return
722
+ end
723
+ json_response = @library_layouts_interface.update_permissions(layout['id'], payload)
724
+ render_response(json_response, options, 'instanceTypeLayout') do
725
+ # note: this api does not return 400 when it fails?
726
+ if json_response['success']
727
+ print_green_success "Updated layout permissions"
728
+ else
729
+ print_rest_errors(json_response, options)
730
+ exit_code, err = 3, (json_response['msg'] || "api did not return success:true")
731
+ end
732
+ end
733
+ return exit_code, err
734
+ end
735
+
736
+ def remove(args)
737
+ options = {}
738
+ optparse = MtnCloud::Cli::OptionParser.new do|opts|
739
+ opts.banner = subcommand_usage("[name]")
740
+ build_common_options(opts, options, [:auto_confirm, :json, :dry_run, :remote])
741
+ opts.footer = "Delete a layout."
742
+ end
743
+ optparse.parse!(args)
744
+ if args.count < 1
745
+ puts optparse
746
+ exit 1
747
+ end
748
+ connect(options)
749
+
750
+ begin
751
+ layout = find_layout_by_name_or_id(nil, args[0])
752
+ exit 1 if layout.nil?
753
+
754
+ unless MtnCloud::Cli::OptionTypes.confirm("Are you sure you want to delete the instance type #{layout['name']}?", options)
755
+ exit
756
+ end
757
+ @library_layouts_interface.setopts(options)
758
+ if options[:dry_run]
759
+ print_dry_run @library_layouts_interface.dry.destroy(nil, layout['id'])
760
+ return
761
+ end
762
+ json_response = @library_layouts_interface.destroy(nil, layout['id'])
763
+
764
+ if options[:json]
765
+ print JSON.pretty_generate(json_response), "\n"
766
+ return
767
+ end
768
+
769
+ print_green_success "Removed layout #{layout['name']}"
770
+ #list([])
771
+ rescue RestClient::Exception => e
772
+ print_rest_exception(e, options)
773
+ exit 1
774
+ end
775
+ end
776
+
777
+ private
778
+
779
+ def find_layout_by_name_or_id(instance_type_id, val, params={})
780
+ if val.to_s =~ /\A\d{1,}\Z/
781
+ return find_layout_by_id(instance_type_id, val, params)
782
+ else
783
+ return find_layout_by_name(instance_type_id, val, params)
784
+ end
785
+ end
786
+
787
+ def find_layout_by_id(instance_type_id, id, params={})
788
+ begin
789
+ json_response = @library_layouts_interface.get(instance_type_id, id.to_i, params)
790
+ return json_response['instanceTypeLayout']
791
+ rescue RestClient::Exception => e
792
+ if e.response && e.response.code == 404
793
+ print_rest_exception(e)
794
+ #print_red_alert "Layout not found by id #{id}"
795
+ else
796
+ raise e
797
+ end
798
+ end
799
+ end
800
+
801
+ def find_layout_by_name(instance_type_id, name, params={})
802
+ layouts = @library_layouts_interface.list(instance_type_id, params.merge({name: name.to_s}))['instanceTypeLayouts']
803
+ if layouts.empty?
804
+ print_red_alert "Layout not found by name #{name}"
805
+ return nil
806
+ elsif layouts.size > 1
807
+ print_red_alert "#{layouts.size} layouts found by name #{name}"
808
+ print_layouts_table(layouts, {color: red})
809
+ print_red_alert "Try using ID instead"
810
+ print reset,"\n"
811
+ return nil
812
+ else
813
+ return layouts[0]
814
+ end
815
+ end
816
+
817
+ def print_layouts_table(layouts, opts={})
818
+ columns = [
819
+ {"ID" => lambda {|layout| layout['id'] } },
820
+ {"INSTANCE TYPE" => lambda {|layout| layout['instanceType'] ? layout['instanceType']['name'] : '' } },
821
+ {"NAME" => lambda {|layout| layout['name'] } },
822
+ {"VERSION" => lambda {|layout| layout['instanceVersion'] } },
823
+ {"TECHNOLOGY" => lambda {|layout| format_layout_technology(layout) } },
824
+ {"DESCRIPTION" => lambda {|layout| layout['description'] } },
825
+ {"LABELS" => lambda {|layout| format_list(layout['labels'], '', 3) } },
826
+ {"OWNER" => lambda {|layout| layout['account'] ? layout['account']['name'] : '' } }
827
+ ]
828
+ if opts[:include_fields]
829
+ columns = opts[:include_fields]
830
+ end
831
+ print as_pretty_table(layouts, columns, opts)
832
+ end
833
+
834
+ def format_layout_technology(layout)
835
+ if layout
836
+ layout['provisionType'] ? layout['provisionType']['name'] : ''
837
+ else
838
+ ""
839
+ end
840
+ end
841
+
842
+ def format_instance_type_phase(val)
843
+ val.to_s # .capitalize
844
+ end
845
+
846
+ def layout_permission_excludes
847
+ ['plans', 'groupDefaults', 'visibility', 'tenants']
848
+ end
849
+ end