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,698 @@
1
+ require 'mtncloud/cli/cli_command'
2
+
3
+ class MtnCloud::Cli::LibraryContainerTypesCommand
4
+ include MtnCloud::Cli::CliCommand
5
+ include MtnCloud::Cli::LibraryHelper
6
+
7
+ set_command_name :'library-node-types'
8
+
9
+ register_subcommands :list, :get, :add, :update, :remove
10
+
11
+ def initialize()
12
+ # @appliance_name, @appliance_url = MtnCloud::Cli::Remote.active_appliance
13
+ end
14
+
15
+ def connect(opts)
16
+ @api_client = establish_remote_appliance_connection(opts)
17
+ @library_container_types_interface = @api_client.library_container_types
18
+ @library_layouts_interface = @api_client.library_layouts
19
+ #@library_instance_types_interface = @api_client.library_instance_types
20
+ @provision_types_interface = @api_client.provision_types
21
+ @option_types_interface = @api_client.option_types
22
+ #@option_type_lists_interface = @api_client.option_type_lists
23
+ end
24
+
25
+ def handle(args)
26
+ handle_subcommand(args)
27
+ end
28
+
29
+ def list(args)
30
+ options = {}
31
+ params = {}
32
+ layout_id = nil
33
+ optparse = MtnCloud::Cli::OptionParser.new do |opts|
34
+ opts.banner = subcommand_usage()
35
+ opts.on('--layout ID', String, "Filter by Layout") do |val|
36
+ layout_id = val
37
+ end
38
+ opts.on('--technology VALUE', String, "Filter by technology") do |val|
39
+ params['provisionType'] = val
40
+ end
41
+ opts.on('--category VALUE', String, "Filter by category") do |val|
42
+ params['category'] = val
43
+ end
44
+ opts.on('-l', '--labels LABEL', String, "Filter by labels, can match any of the values") do |val|
45
+ add_query_parameter(params, 'labels', parse_labels(val))
46
+ end
47
+ opts.on('--all-labels LABEL', String, "Filter by labels, must match all of the values") do |val|
48
+ add_query_parameter(params, 'allLabels', parse_labels(val))
49
+ end
50
+ build_common_options(opts, options, [:list, :query, :json, :yaml, :csv, :fields, :dry_run, :remote])
51
+ opts.footer = "List node types."
52
+ end
53
+ optparse.parse!(args)
54
+ # verify_args!(args:args, optparse:optparse, count:0)
55
+ if args.count > 0
56
+ options[:phrase] = args.join(" ")
57
+ end
58
+ connect(options)
59
+ begin
60
+ # construct payload
61
+ params.merge!(parse_list_options(options))
62
+ @library_container_types_interface.setopts(options)
63
+ if options[:dry_run]
64
+ print_dry_run @library_container_types_interface.dry.list(layout_id, params)
65
+ return
66
+ end
67
+ # do it
68
+ json_response = @library_container_types_interface.list(layout_id, params)
69
+ # print and/or return result
70
+ # return 0 if options[:quiet]
71
+ if options[:json]
72
+ puts as_json(json_response, options, "containerTypes")
73
+ return 0
74
+ elsif options[:csv]
75
+ puts records_as_csv(json_response['containerTypes'], options)
76
+ return 0
77
+ elsif options[:yaml]
78
+ puts as_yaml(json_response, options, "containerTypes")
79
+ return 0
80
+ end
81
+ container_types = json_response['containerTypes']
82
+ title = "Library - Node Types"
83
+ subtitles = []
84
+ if layout_id
85
+ subtitles << "Layout: #{layout_id}".strip
86
+ end
87
+ subtitles += parse_list_subtitles(options)
88
+ print_h1 title, subtitles
89
+ if container_types.empty?
90
+ print cyan,"No node types found.",reset,"\n"
91
+ else
92
+ print_container_types_table(container_types, options)
93
+ print_results_pagination(json_response, {:label => "node type", :n_label => "node types"})
94
+ end
95
+ print reset,"\n"
96
+ rescue RestClient::Exception => e
97
+ print_rest_exception(e, options)
98
+ return 1
99
+ end
100
+ end
101
+
102
+ def get(args)
103
+ options = {}
104
+ optparse = MtnCloud::Cli::OptionParser.new do |opts|
105
+ opts.banner = subcommand_usage("[name]")
106
+ build_common_options(opts, options, [:json, :yaml, :csv, :fields, :dry_run, :remote])
107
+ opts.footer = "Display node type details." + "\n" +
108
+ "[name] is required. This is the name or id of a node type."
109
+ end
110
+ optparse.parse!(args)
111
+ if args.count < 1
112
+ puts optparse
113
+ return 1
114
+ end
115
+ connect(options)
116
+ id_list = parse_id_list(args)
117
+ return run_command_for_each_arg(id_list) do |arg|
118
+ _get(arg, options)
119
+ end
120
+ end
121
+
122
+ def _get(id, options)
123
+ layout_id = nil
124
+ begin
125
+ @library_container_types_interface.setopts(options)
126
+ if options[:dry_run]
127
+ if id.to_s =~ /\A\d{1,}\Z/
128
+ print_dry_run @library_container_types_interface.dry.get(layout_id, id.to_i)
129
+ else
130
+ print_dry_run @library_container_types_interface.dry.list(layout_id, {name:id})
131
+ end
132
+ return
133
+ end
134
+ container_type = find_container_type_by_name_or_id(layout_id, id)
135
+ if container_type.nil?
136
+ return 1
137
+ end
138
+ # skip redundant request
139
+ #json_response = @library_container_types_interface.get(layout_id, container_type['id'])
140
+ json_response = {'containerType' => container_type}
141
+ #container_type = json_response['containerType']
142
+ if options[:json]
143
+ puts as_json(json_response, options, "containerType")
144
+ return 0
145
+ elsif options[:yaml]
146
+ puts as_yaml(json_response, options, "containerType")
147
+ return 0
148
+ elsif options[:csv]
149
+ puts records_as_csv([json_response['containerType']], options)
150
+ return 0
151
+ end
152
+
153
+ print_h1 "Node Type Details"
154
+ print cyan
155
+ description_cols = {
156
+ "ID" => lambda {|it| it['id'] },
157
+ "Name" => lambda {|it| it['name'] },
158
+ "Short Name" => lambda {|it| it['shortName'] },
159
+ "Version" => lambda {|it| it['containerVersion'] },
160
+ "Labels" => lambda {|it| format_list(it['labels'], '', 3) },
161
+ "Technology" => lambda {|it| format_container_type_technology(it) },
162
+ "Category" => lambda {|it| it['category'] },
163
+ "Virtual Image" => lambda {|it|
164
+ it['virtualImage'] ? it['virtualImage']['name'] : ''
165
+ },
166
+ "OsType" => lambda {|it|
167
+ it['osType'] ? it['osType']['name'] : ''
168
+ },
169
+ # "Category" => lambda {|it| it['category'].to_s.capitalize },
170
+ # # "Logo" => lambda {|it| it['logo'].to_s },
171
+ # "Visiblity" => lambda {|it| it['visibility'].to_s.capitalize },
172
+ # "Environment Prefix" => lambda {|it| it['environmentPrefix'] },
173
+ # "Enable Settings" => lambda {|it| format_boolean it['hasSettings'] },
174
+ # "Enable Scaling" => lambda {|it| format_boolean it['hasAutoScale'] },
175
+ # "Supports Deployments" => lambda {|it| format_boolean it['hasDeployment'] },
176
+ # "Featured" => lambda {|it| format_boolean it['featured'] },
177
+ # "Owner" => lambda {|it| it['account'] ? it['account']['name'] : '' },
178
+ # "Active" => lambda {|it| format_boolean it['active'] },
179
+ # "Created" => lambda {|it| format_local_dt(it['dateCreated']) },
180
+ # "Updated" => lambda {|it| format_local_dt(it['lastUpdated']) }
181
+ }
182
+ print_description_list(description_cols, container_type)
183
+
184
+
185
+ evars = container_type['environmentVariables']
186
+ if evars && evars.size > 0
187
+ print_h2 "Environment Variables"
188
+ evar_columns = [
189
+ {"NAME" => lambda {|it| it['name'] } },
190
+ {"VALUE" => lambda {|it| it['defaultValue'] } },
191
+ {"TYPE" => lambda {|it| it['valueType'].to_s.capitalize } },
192
+ {"EXPORT" => lambda {|it| format_boolean it['export'] } },
193
+ {"MASKED" => lambda {|it| format_boolean it['masked'] } },
194
+ ]
195
+ print as_pretty_table(evars, evar_columns)
196
+ else
197
+ # print cyan,"No environment variables found for this node type.","\n",reset
198
+ end
199
+
200
+ exposed_ports = container_type['containerPorts']
201
+ if exposed_ports && exposed_ports.size > 0
202
+ print_h2 "Exposed Ports"
203
+ columns = [
204
+ #{"ID" => lambda {|it| it['id'] } },
205
+ {"NAME" => lambda {|it| it['name'] } },
206
+ {"PORT" => lambda {|it| it['port'] } },
207
+ {"LB PROTOCOL" => lambda {|it| it['loadBalanceProtocol'] } },
208
+ ]
209
+ print as_pretty_table(exposed_ports, columns)
210
+ else
211
+ # print cyan,"No exposed ports found for this node type.","\n",reset
212
+ end
213
+
214
+ container_scripts = container_type['containerScripts'] || container_type['scripts']
215
+ if container_scripts && container_scripts.size > 0
216
+ print_h2 "Scripts"
217
+ columns = [
218
+ {"ID" => lambda {|it| it['id'] } },
219
+ {"NAME" => lambda {|it| it['name'] } }
220
+ ]
221
+ print as_pretty_table(container_scripts, columns)
222
+ else
223
+ # print cyan,"No scripts found for this node type.","\n",reset
224
+ end
225
+
226
+ container_file_templates = container_type['containerTemplates'] || container_type['templates']
227
+ if container_file_templates && container_file_templates.size > 0
228
+ print_h2 "File Templates"
229
+ columns = [
230
+ {"ID" => lambda {|it| it['id'] } },
231
+ {"NAME" => lambda {|it| it['name'] } }
232
+ ]
233
+ print as_pretty_table(container_file_templates, columns)
234
+ else
235
+ # print cyan,"No scripts found for this node type.","\n",reset
236
+ end
237
+
238
+ print reset,"\n"
239
+
240
+ rescue RestClient::Exception => e
241
+ print_rest_exception(e, options)
242
+ return 1
243
+ end
244
+ end
245
+
246
+ def add(args)
247
+ options = {}
248
+ params = {}
249
+ layout = nil
250
+ layout_id = nil
251
+ script_ids = nil
252
+ file_template_ids = nil
253
+ evars = nil
254
+ optparse = MtnCloud::Cli::OptionParser.new do|opts|
255
+ opts.banner = subcommand_usage()
256
+ opts.on('--name VALUE', String, "Name for this node type") do |val|
257
+ params['name'] = val
258
+ end
259
+ opts.on('-l', '--labels [LIST]', String, "Labels") do |val|
260
+ params['labels'] = parse_labels(val)
261
+ end
262
+ opts.on('--shortName VALUE', String, "Short Name") do |val|
263
+ params['shortName'] = val
264
+ end
265
+ opts.on('--version VALUE', String, "Version") do |val|
266
+ params['containerVersion'] = val
267
+ end
268
+ opts.on('--technology CODE', String, "Technology. This is the provision type code.") do |val|
269
+ params['provisionTypeCode'] = val
270
+ end
271
+ opts.on('--evars-json JSON', String, 'Environment variables JSON: {"name":"Foo", "value":"Bar", "masked":true, "export":true}' ) do |val|
272
+ begin
273
+ evars = JSON.parse(val.to_s)
274
+ evars = evars.kind_of?(Array) ? evars : [evars]
275
+ rescue JSON::ParserError => e
276
+ print_red_alert "Unable to parse evars JSON"
277
+ exit 1
278
+ end
279
+ end
280
+ opts.on('-e', '--evars LIST', Array, "Environment variables list. Comma delimited list of name=value pairs") do |val|
281
+ evars = val.collect do |nv|
282
+ parts = nv.split('=')
283
+ {'name' => parts[0].strip, 'value' => (parts.count > 1 ? parts[1].strip : '')}
284
+ end
285
+ end
286
+ opts.on('--ports NAME=PORT,NAME=PORT', String, "List of exposed port definitions in the format NAME=PORT|PROTOCOL, Example: \"WEB=80|HTTP,SECURE=443|HTTPS\"") do |val|
287
+ params['containerPorts'] ||= []
288
+ parsed_ports = val.split(",").each do |value_pair|
289
+ k,v = value_pair.strip.split("=")
290
+ value_array = v.split("|")
291
+ port_name = k.to_s.strip
292
+ port_number = value_array[0].to_s.strip.to_i
293
+ exposed_port = {'name' => port_name,'port' => port_number }
294
+ if value_array[1]
295
+ exposed_port['loadBalanceProtocol'] = value_array[1].strip
296
+ end
297
+ if exposed_port['name'].to_s.empty? || !exposed_port['port'] || exposed_port['port'].to_i <= 0
298
+ raise_command_error "Invalid exposed port definition: '#{value_pair}'. Expected format is 'NAME=PORT'", args, optparse
299
+ end
300
+ params['containerPorts'] << exposed_port
301
+ end
302
+ # options[:options]['containerPorts'] = params['containerPorts']
303
+ end
304
+ opts.on('--scripts x,y,z', Array, "List of Script IDs") do |val|
305
+ script_ids = val #.collect {|it| it.to_i }
306
+ end
307
+ opts.on('--file-templates x,y,z', Array, "List of File Template IDs") do |val|
308
+ file_template_ids = val #.collect {|it| it.to_i }
309
+ end
310
+ #build_option_type_options(opts, options, add_layout_option_types())
311
+ build_common_options(opts, options, [:options, :payload, :json, :dry_run, :remote])
312
+ opts.footer = "Create a node type." + "\n" +
313
+ "[name] is required and can be passed as --name instead."
314
+ "Technology --technology is required. Additional options vary by type."
315
+ end
316
+ optparse.parse!(args)
317
+ connect(options)
318
+ if args.count > 1
319
+ print_error MtnCloud::Terminal.angry_prompt
320
+ puts_error "wrong number of arguments, expected 0-1 and got (#{args.count}) #{args.inspect}\n#{optparse}"
321
+ return 1
322
+ end
323
+ if args[0]
324
+ params['name'] = args[0]
325
+ end
326
+ begin
327
+ # construct payload
328
+ if layout_id
329
+ layout = find_layout_by_name_or_id(instance_type_id)
330
+ return 1 if layout.nil?
331
+ layout_id = layout['id']
332
+ end
333
+ payload = nil
334
+ if options[:payload]
335
+ payload = options[:payload]
336
+ else
337
+ payload = {}
338
+ # support the old -O OPTION switch
339
+ payload.deep_merge!(options[:options].reject {|k,v| k.is_a?(Symbol) }) if options[:options]
340
+ # prompt for options
341
+ prompt_params = params.merge(:no_prompt=>options[:no_prompt]) # usually of options[:options]
342
+ if !params['name']
343
+ v_prompt = MtnCloud::Cli::OptionTypes.prompt([{'fieldName' => 'name', 'type' => 'text', 'fieldLabel' => 'Name', 'required' => true}], prompt_params)
344
+ params['name'] = v_prompt['name']
345
+ end
346
+ if !params['shortName']
347
+ v_prompt = MtnCloud::Cli::OptionTypes.prompt([{'fieldName' => 'shortName', 'type' => 'text', 'fieldLabel' => 'Short Name', 'required' => true, 'description' => 'The short name is a lowercase name with no spaces used for display in your container list.'}], prompt_params)
348
+ params['shortName'] = v_prompt['shortName']
349
+ end
350
+ if !params['containerVersion']
351
+ v_prompt = MtnCloud::Cli::OptionTypes.prompt([{'fieldName' => 'containerVersion', 'type' => 'text', 'fieldLabel' => 'Version', 'required' => true}], prompt_params)
352
+ params['containerVersion'] = v_prompt['containerVersion']
353
+ end
354
+
355
+ # prompt for all the ProvisionType.customOptionTypes
356
+ # err, these optionTypes have the fieldContext
357
+ # so merge them at the root level of the request.
358
+
359
+ provision_types = @provision_types_interface.list({customSupported: true})['provisionTypes']
360
+ if provision_types.empty?
361
+ print_red_alert "No available provision types found!"
362
+ return 1
363
+ end
364
+ provision_type_options = provision_types.collect {|it| { 'name' => it['name'], 'value' => it['code']} }
365
+ provision_type = nil
366
+ if !params['provisionTypeCode']
367
+ v_prompt = MtnCloud::Cli::OptionTypes.prompt([{'fieldName' => 'provisionTypeCode', 'type' => 'select', 'selectOptions' => provision_type_options, 'fieldLabel' => 'Technology', 'required' => true, 'description' => 'The type of container technology.'}], prompt_params)
368
+ params['provisionTypeCode'] = v_prompt['provisionTypeCode']
369
+ end
370
+ provision_type = provision_types.find {|it| it['code'] == params['provisionTypeCode'] }
371
+ if provision_type.nil?
372
+ print_red_alert "Provision Type not found by code '#{params['provisionTypeCode']}'!"
373
+ return 1
374
+ end
375
+
376
+ # prompt custom options for the selected provision type
377
+ provision_type_custom_option_types = provision_type['customOptionTypes']
378
+ provision_type_v_prompt = nil
379
+ if (!provision_type_custom_option_types || provision_type_custom_option_types.empty?)
380
+ # print yellow,"Sorry, no options were found for provision type #{provision_type['name']}.","\n",reset
381
+ # return 1
382
+ else
383
+
384
+ field_group_name = provision_type_custom_option_types.first['fieldGroup'] || "#{provision_type['name']} Options"
385
+ field_group_name = "#{provision_type['name']} Options"
386
+ # print "\n"
387
+ puts field_group_name
388
+ puts "==============="
389
+ provision_type_v_prompt = MtnCloud::Cli::OptionTypes.prompt(provision_type_custom_option_types,options[:options],@api_client, {provisionTypeCode: params['provisionTypeCode']})
390
+ end
391
+
392
+ # payload.deep_merge!(provision_type_v_prompt)
393
+
394
+ # PORTS
395
+ # if !params['containerPorts']
396
+ # v_prompt = MtnCloud::Cli::OptionTypes.prompt([{'fieldName' => 'containerPorts', 'type' => 'exposedPorts', 'fieldLabel' => 'Exposed Ports', 'description' => 'The exposed ports in the format NAME=PORT,NAME=PORT for example HTTP=80,HTTPS=443'}], prompt_params)
397
+ # params['containerPorts'] = v_prompt['containerPorts']
398
+ # end
399
+
400
+ # ENVIRONMENT VARIABLES
401
+ if evars
402
+ # bug before 5.4.10/5.5.2 requires this to be passed at the root of the request instead of under containerType.
403
+ # params['environmentVariables'] = evars
404
+ payload['environmentVariables'] = evars
405
+ else
406
+ # prompt
407
+ # parsed_evars = parse_environment_variables
408
+ end
409
+
410
+ # SCRIPTS
411
+ if script_ids
412
+ params['scripts'] = script_ids.collect {|it| it.to_i }
413
+ else
414
+ # prompt
415
+ end
416
+
417
+ # FILE TEMPLATES
418
+ if file_template_ids
419
+ params['templates'] = file_template_ids.collect {|it| it.to_i }
420
+ else
421
+ # prompt
422
+ end
423
+
424
+
425
+ # payload = {'containerType' => params}
426
+ payload['containerType'] ||= {}
427
+ payload['containerType'].deep_merge!(params)
428
+ if provision_type_v_prompt
429
+ payload.deep_merge!(provision_type_v_prompt)
430
+ end
431
+
432
+ end
433
+ # avoid API bug in 3.6.3
434
+ if payload['containerType']
435
+ payload['containerType']['config'] ||= {}
436
+ end
437
+ @library_container_types_interface.setopts(options)
438
+ if options[:dry_run]
439
+ print_dry_run @library_container_types_interface.dry.create(layout_id, payload)
440
+ return
441
+ end
442
+
443
+ json_response = @library_container_types_interface.create(layout_id, payload)
444
+
445
+ if options[:json]
446
+ print JSON.pretty_generate(json_response), "\n"
447
+ return
448
+ end
449
+ container_type = json_response['containerType']
450
+ print_green_success "Added Node Type #{container_type['name']}"
451
+ get([json_response['containerType']['id']])
452
+ rescue RestClient::Exception => e
453
+ print_rest_exception(e, options)
454
+ exit 1
455
+ end
456
+ end
457
+
458
+ def update(args)
459
+ options = {}
460
+ params = {}
461
+ layout = nil
462
+ layout_id = nil
463
+ script_ids = nil
464
+ file_template_ids = nil
465
+ evars = nil
466
+ optparse = MtnCloud::Cli::OptionParser.new do|opts|
467
+ opts.banner = subcommand_usage("[name] [options]")
468
+ opts.on('--name VALUE', String, "Name for this layout") do |val|
469
+ params['name'] = val
470
+ end
471
+ opts.on('-l', '--labels [LIST]', String, "Labels") do |val|
472
+ params['labels'] = parse_labels(val)
473
+ end
474
+ opts.on('--shortName VALUE', String, "Short Name") do |val|
475
+ params['shortName'] = val
476
+ end
477
+ opts.on('--version VALUE', String, "Version") do |val|
478
+ params['containerVersion'] = val
479
+ end
480
+ opts.on('--osType VALUE', Integer, "OsType") do |val|
481
+ params['osTypeId'] = val
482
+ end
483
+ # opts.on('--technology CODE', String, "Technology") do |val|
484
+ # params['provisionTypeCode'] = val
485
+ # end
486
+ opts.on('--evars-json JSON', String, 'Environment variables JSON: {"name":"Foo", "value":"Bar", "masked":true, "export":true}' ) do |val|
487
+ begin
488
+ evars = JSON.parse(val.to_s)
489
+ evars = evars.kind_of?(Array) ? evars : [evars]
490
+ rescue JSON::ParserError => e
491
+ print_red_alert "Unable to parse evars JSON"
492
+ exit 1
493
+ end
494
+ end
495
+ opts.on('-e', '--evars LIST', Array, "Environment variables list. Comma delimited list of name=value pairs") do |val|
496
+ evars = val.collect do |nv|
497
+ parts = nv.split('=')
498
+ {'name' => parts[0].strip, 'value' => (parts.count > 1 ? parts[1].strip : '')}
499
+ end
500
+ end
501
+ opts.on('--ports NAME=PORT,NAME=PORT', String, "List of exposed port definitions in the format NAME=PORT|PROTOCOL, Example: \"WEB=80|HTTP,SECURE=443|HTTPS\"") do |val|
502
+ params['containerPorts'] ||= []
503
+ parsed_ports = val.split(",").each do |value_pair|
504
+ k,v = value_pair.strip.split("=")
505
+ value_array = v.split("|")
506
+ port_name = k.to_s.strip
507
+ port_number = value_array[0].to_s.strip.to_i
508
+ exposed_port = {'name' => port_name,'port' => port_number }
509
+ if value_array[1]
510
+ exposed_port['loadBalanceProtocol'] = value_array[1].strip
511
+ end
512
+ if exposed_port['name'].to_s.empty? || !exposed_port['port'] || exposed_port['port'].to_i <= 0
513
+ raise_command_error "Invalid exposed port definition: '#{value_pair}'. Expected format is 'NAME=PORT'", args, optparse
514
+ end
515
+ params['containerPorts'] << exposed_port
516
+ end
517
+ # options[:options]['containerPorts'] = params['containerPorts']
518
+ end
519
+ opts.on('--scripts x,y,z', Array, "List of Script IDs") do |val|
520
+ script_ids = val #.collect {|it| it.to_i }
521
+ end
522
+ opts.on('--file-templates x,y,z', Array, "List of File Template IDs") do |val|
523
+ file_template_ids = val #.collect {|it| it.to_i }
524
+ end
525
+ #build_option_type_options(opts, options, update_layout_option_types())
526
+ build_common_options(opts, options, [:options, :json, :dry_run, :remote])
527
+ opts.footer = "Update a node type."
528
+ end
529
+ optparse.parse!(args)
530
+ if args.count < 1
531
+ puts optparse
532
+ exit 1
533
+ end
534
+ connect(options)
535
+ begin
536
+ container_type = find_container_type_by_name_or_id(layout_id, args[0])
537
+ if container_type.nil?
538
+ return 1
539
+ end
540
+ # construct payload
541
+ passed_options = options[:options] ? options[:options].reject {|k,v| k.is_a?(Symbol) } : {}
542
+ payload = nil
543
+ if options[:payload]
544
+ payload = options[:payload]
545
+ payload.deep_merge!({'containerType' => passed_options}) unless passed_options.empty?
546
+ else
547
+ payload = {'containerType' => {} }
548
+ # option_types = update_layout_option_types(instance_type)
549
+ # params = MtnCloud::Cli::OptionTypes.prompt(option_types, options[:options], @api_client, options[:params])
550
+ payload.deep_merge!({'containerType' => passed_options}) unless passed_options.empty?
551
+
552
+ # PORTS
553
+ # if !params['containerPorts']
554
+ # v_prompt = MtnCloud::Cli::OptionTypes.prompt([{'fieldName' => 'containerPorts', 'type' => 'exposedPorts', 'fieldLabel' => 'Exposed Ports', 'description' => 'The exposed ports in the format NAME=PORT,NAME=PORT for example HTTP=80,HTTPS=443'}], prompt_params)
555
+ # params['containerPorts'] = v_prompt['containerPorts']
556
+ # end
557
+
558
+ # ENVIRONMENT VARIABLES
559
+ if evars
560
+ # bug before 5.4.10/5.5.2 requires this to be passed at the root of the request instead of under containerType.
561
+ # params['environmentVariables'] = evars
562
+ payload['environmentVariables'] = evars
563
+ else
564
+ # prompt
565
+ end
566
+
567
+ # SCRIPTS
568
+ if script_ids
569
+ params['scripts'] = script_ids.collect {|it| it.to_i }
570
+ else
571
+ # prompt
572
+ end
573
+
574
+ # FILE TEMPLATES
575
+ if file_template_ids
576
+ params['templates'] = file_template_ids.collect {|it| it.to_i }
577
+ else
578
+ # prompt
579
+ end
580
+
581
+ if params.empty? && passed_options.empty? && evars.nil?
582
+ raise_command_error "Specify at least one option to update.\n#{optparse}"
583
+ end
584
+
585
+ # payload = {'containerType' => params}
586
+ payload['containerType'] ||= {}
587
+ payload['containerType'].deep_merge!(params)
588
+
589
+ end
590
+ @library_container_types_interface.setopts(options)
591
+ if options[:dry_run]
592
+ print_dry_run @library_container_types_interface.dry.update(layout_id, container_type['id'], payload)
593
+ return
594
+ end
595
+
596
+ json_response = @library_container_types_interface.update(layout_id, container_type['id'], payload)
597
+ if options[:json]
598
+ print JSON.pretty_generate(json_response), "\n"
599
+ return
600
+ end
601
+ container_type = json_response['containerType']
602
+ print_green_success "Updated Node Type #{container_type['name']}"
603
+ get([container_type['id']])
604
+ rescue RestClient::Exception => e
605
+ print_rest_exception(e, options)
606
+ exit 1
607
+ end
608
+ end
609
+
610
+ def remove(args)
611
+ layout_id = nil
612
+ options = {}
613
+ optparse = MtnCloud::Cli::OptionParser.new do|opts|
614
+ opts.banner = subcommand_usage("[name]")
615
+ build_common_options(opts, options, [:auto_confirm, :json, :dry_run, :remote])
616
+ opts.footer = "Delete a node type."
617
+ end
618
+ optparse.parse!(args)
619
+ if args.count < 1
620
+ puts optparse
621
+ exit 1
622
+ end
623
+ connect(options)
624
+
625
+ begin
626
+ container_type = find_container_type_by_name_or_id(layout_id, args[0])
627
+ if container_type.nil?
628
+ return 1
629
+ end
630
+
631
+ unless MtnCloud::Cli::OptionTypes.confirm("Are you sure you want to delete the node type #{container_type['name']}?", options)
632
+ exit
633
+ end
634
+ @library_container_types_interface.setopts(options)
635
+ if options[:dry_run]
636
+ print_dry_run @library_container_types_interface.dry.destroy(nil, container_type['id'])
637
+ return
638
+ end
639
+ json_response = @library_container_types_interface.destroy(nil, container_type['id'])
640
+
641
+ if options[:json]
642
+ print JSON.pretty_generate(json_response), "\n"
643
+ return
644
+ end
645
+
646
+ print_green_success "Removed Node Type #{container_type['name']}"
647
+ #list([])
648
+ rescue RestClient::Exception => e
649
+ print_rest_exception(e, options)
650
+ exit 1
651
+ end
652
+ end
653
+
654
+ private
655
+
656
+ ## finders are in LibraryHelper
657
+
658
+ ## these layout methods should be consolidated as well
659
+
660
+ def find_layout_by_name_or_id(instance_type_id, val)
661
+ if val.to_s =~ /\A\d{1,}\Z/
662
+ return find_layout_by_id(instance_type_id, val)
663
+ else
664
+ return find_layout_by_name(instance_type_id, val)
665
+ end
666
+ end
667
+
668
+ def find_layout_by_id(instance_type_id, id)
669
+ begin
670
+ json_response = @library_layouts_interface.get(instance_type_id, id.to_i)
671
+ return json_response['instanceTypeLayout']
672
+ rescue RestClient::Exception => e
673
+ if e.response && e.response.code == 404
674
+ print_red_alert "Instance Type not found by id #{id}"
675
+ else
676
+ raise e
677
+ end
678
+ end
679
+ end
680
+
681
+ def find_layout_by_name(instance_type_id, name)
682
+ layouts = @library_layouts_interface.list(instance_type_id, {name: name.to_s})['instanceTypeLayouts']
683
+ if layouts.empty?
684
+ print_red_alert "Layout not found by name #{name}"
685
+ return nil
686
+ elsif layouts.size > 1
687
+ print_red_alert "#{layouts.size} layouts found by name #{name}"
688
+ print_layouts_table(layouts, {color: red})
689
+ print_red_alert "Try using ID instead"
690
+ print reset,"\n"
691
+ return nil
692
+ else
693
+ return layouts[0]
694
+ end
695
+ end
696
+
697
+
698
+ end