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,674 @@
1
+
2
+ require 'mtncloud/cli/cli_command'
3
+
4
+ class MtnCloud::Cli::BackupsCommand
5
+ include MtnCloud::Cli::CliCommand
6
+ include MtnCloud::Cli::BackupsHelper
7
+ include MtnCloud::Cli::ProvisioningHelper
8
+ include MtnCloud::Cli::OptionSourceHelper
9
+
10
+ set_command_description "View and manage backups"
11
+ set_command_name :'backups'
12
+ register_subcommands :list, :get, :add, :update, :remove, :execute, :restore
13
+ register_subcommands :list_jobs, :get_job, :add_job, :update_job, :remove_job, :execute_job
14
+ register_subcommands :list_results, :get_result, :remove_result
15
+ register_subcommands :list_restores, :get_restore, :remove_restore
16
+
17
+ def connect(opts)
18
+ @api_client = establish_remote_appliance_connection(opts)
19
+ @backups_interface = @api_client.backups
20
+ @backup_jobs_interface = @api_client.backup_jobs
21
+ @backup_results_interface = @api_client.backup_results
22
+ @backup_restores_interface = @api_client.backup_restores
23
+ @instances_interface = @api_client.instances
24
+ @servers_interface = @api_client.servers
25
+ @options_interface = @api_client.options
26
+ end
27
+
28
+ def handle(args)
29
+ handle_subcommand(args)
30
+ end
31
+
32
+ def list(args)
33
+ options = {}
34
+ params = {}
35
+ ref_ids = []
36
+ optparse = MtnCloud::Cli::OptionParser.new do |opts|
37
+ opts.banner = subcommand_usage("[search]")
38
+ build_standard_list_options(opts, options)
39
+ opts.footer = "List backups."
40
+ end
41
+ optparse.parse!(args)
42
+ connect(options)
43
+ # verify_args!(args:args, optparse:optparse, count:0)
44
+ if args.count > 0
45
+ options[:phrase] = args.join(" ")
46
+ end
47
+ params.merge!(parse_list_options(options))
48
+ parse_options(options, params)
49
+ execute_api(@backups_interface, :list, [], options, 'backups') do |json_response|
50
+ backups = json_response['backups']
51
+ print_h1 "Backups", parse_list_subtitles(options), options
52
+ if backups.empty?
53
+ print cyan,"No backups found.",reset,"\n"
54
+ else
55
+ print as_pretty_table(backups, backup_list_column_definitions.upcase_keys!, options)
56
+ print_results_pagination(json_response)
57
+ end
58
+ print reset,"\n"
59
+ end
60
+ return 0, nil
61
+ end
62
+
63
+ def get(args)
64
+ params = {}
65
+ options = {}
66
+ optparse = MtnCloud::Cli::OptionParser.new do |opts|
67
+ opts.banner = subcommand_usage("[backup]")
68
+ build_standard_get_options(opts, options)
69
+ opts.footer = <<-EOT
70
+ Get details about a specific backup.
71
+ [backup] is required. This is the name or id of a backup.
72
+ EOT
73
+ end
74
+ optparse.parse!(args)
75
+ verify_args!(args:args, optparse:optparse, min:1)
76
+ connect(options)
77
+ parse_options(options, params)
78
+ id_list = parse_id_list(args)
79
+ return run_command_for_each_arg(id_list) do |arg|
80
+ _get(arg, params, options)
81
+ end
82
+ end
83
+
84
+ def _get(id, params, options)
85
+ if id.to_s !~ /\A\d{1,}\Z/
86
+ record = find_by_name(:backup, id)
87
+ if record.nil?
88
+ return 1, "Backup not found for '#{id}'"
89
+ end
90
+ id = record['id']
91
+ end
92
+ options[:params] = params # parse_options(options, params)
93
+ options.delete(:payload)
94
+ execute_api(@backups_interface, :get, [id], options, 'backup') do |json_response|
95
+ backup = json_response['backup']
96
+ print_h1 "Backup Details", [], options
97
+ print cyan
98
+ columns = backup_column_definitions
99
+ columns.delete("Backup Provider") if backup['backupProvider'].nil?
100
+ columns.delete("Storage Provider") if backup['storageProvider'].nil?
101
+ columns.delete("Instance") if backup['instance'].nil?
102
+ columns.delete("Container ID") if backup['containerId'].nil?
103
+ columns.delete("Host") if backup['server'].nil?
104
+ print_description_list(columns, backup, options)
105
+ print reset,"\n"
106
+ end
107
+ end
108
+
109
+ def add(args)
110
+ options = {}
111
+ params = {}
112
+ optparse = MtnCloud::Cli::OptionParser.new do |opts|
113
+ opts.banner = subcommand_usage("[name] [options]")
114
+ opts.on('--source VALUE', String, "Backup Source: instance, host or provider") do |val|
115
+ options[:options]['source'] = val
116
+ end
117
+ opts.on('--instance VALUE', String, "Instance Name or ID") do |val|
118
+ options[:options]['source'] = 'instance'
119
+ options[:options]['instanceId'] = val
120
+ end
121
+ opts.on('--host VALUE', String, "Host Name or ID") do |val|
122
+ options[:options]['source'] = 'server'
123
+ options[:options]['serverId'] = val
124
+ end
125
+ opts.on('--server VALUE', String, "alias for --host") do |val|
126
+ options[:options]['source'] = 'server'
127
+ options[:options]['serverId'] = val
128
+ end
129
+ opts.add_hidden_option('--server')
130
+ opts.on('--name VALUE', String, "Name") do |val|
131
+ options[:options]['name'] = val
132
+ end
133
+ # build_option_type_options(opts, options, add_backup_option_types)
134
+ build_standard_add_many_options(opts, options)
135
+ opts.footer = <<-EOT
136
+ Create a new backup.
137
+ EOT
138
+ end
139
+ optparse.parse!(args)
140
+ verify_args!(args:args, optparse:optparse, min:0, max:1)
141
+ options[:options]['name'] = args[0] if args[0]
142
+ connect(options)
143
+ parse_payload(options, 'backup') do |payload|
144
+ # v_prompt = MtnCloud::Cli::OptionTypes.no_prompt(add_backup_option_types, options[:options], @api_client)
145
+ # v_prompt.deep_compact!.booleanize! # remove empty values and convert checkbox "on" and "off" to true and false
146
+ # params.deep_merge!(v_prompt)
147
+ location_type = MtnCloud::Cli::OptionTypes.prompt([{'fieldName' => 'source', 'fieldLabel' => 'Source', 'type' => 'select', 'selectOptions' => [{'name' => 'Instance', 'value' => 'instance'}, {'name' => 'Host', 'value' => 'server'}, {'name' => 'Provider', 'value' => 'provider'}], 'defaultValue' => 'instance', 'required' => true, 'description' => 'Where is the backup located?'}], options[:options], @api_client)['source']
148
+ params['locationType'] = location_type
149
+ if location_type == 'instance'
150
+ # Instance
151
+ avail_instances = @instances_interface.list({max:10000})['instances'].collect {|it| {'name' => it['name'], 'value' => it['id']}}
152
+ params['instanceId'] = MtnCloud::Cli::OptionTypes.prompt([{'fieldName' => 'instanceId', 'fieldLabel' => 'Instance', 'type' => 'select', 'selectOptions' => avail_instances, 'required' => true}], options[:options], @api_client)['instanceId']
153
+ # Name
154
+ params['name'] = MtnCloud::Cli::OptionTypes.prompt([{'fieldName' => 'name', 'fieldLabel' => 'Name', 'type' => 'text', 'required' => true, 'description' => 'Backup Name'}], options[:options], @api_client)['name']
155
+ elsif location_type == 'server'
156
+ # Server
157
+ avail_servers = @servers_interface.list({max:10000, 'vmHypervisor' => nil, 'containerHypervisor' => nil})['servers'].collect {|it| {'name' => it['name'], 'value' => it['id']}}
158
+ params['serverId'] = MtnCloud::Cli::OptionTypes.prompt([{'fieldName' => 'serverId', 'fieldLabel' => 'Host', 'type' => 'select', 'selectOptions' => avail_servers, 'required' => true}], options[:options], @api_client)['serverId']
159
+ # Name
160
+ params['name'] = MtnCloud::Cli::OptionTypes.prompt([{'fieldName' => 'name', 'fieldLabel' => 'Name', 'type' => 'text', 'required' => true, 'description' => 'Backup Name'}], options[:options], @api_client)['name']
161
+ elsif location_type == 'provider'
162
+ # todo: prompt for provider inputs
163
+ # sourceProviderId
164
+ # storageProvider
165
+ end
166
+ # POST to /create to get available option info for containers, backupTypes, backupProviderTypes, etc.
167
+ payload['backup'].deep_merge!(params)
168
+ create_results = @backups_interface.create_options(payload)
169
+
170
+ if location_type == 'instance' || location_type == 'server'
171
+ if location_type == 'instance'
172
+ # Container
173
+ avail_containers = (create_results['containers'] || []).collect {|it| {'name' => it['name'], 'value' => it['id']} }
174
+ if avail_containers.empty?
175
+ raise_command_error "No available containers found for selected instance"
176
+ else
177
+ params['containerId'] = MtnCloud::Cli::OptionTypes.prompt([{'fieldName' => 'containerId', 'fieldLabel' => 'Container', 'type' => 'select', 'selectOptions' => avail_containers, 'defaultValue' => avail_containers[0] ? avail_containers[0]['name'] : nil, 'required' => true}], options[:options], @api_client)['containerId']
178
+ end
179
+ elsif location_type == 'server'
180
+
181
+ end
182
+ # Backup Type
183
+ avail_backup_types = (create_results['backupTypes'] || []).collect {|it| {'name' => it['name'], 'value' => it['code']} }
184
+ if avail_backup_types.empty?
185
+ raise_command_error "No available backup types found"
186
+ else
187
+ params['backupType'] = MtnCloud::Cli::OptionTypes.prompt([{'fieldName' => 'backupType', 'fieldLabel' => 'Backup Type', 'type' => 'select', 'selectOptions' => avail_backup_types, 'defaultValue' => avail_backup_types[0] ? avail_backup_types[0]['name'] : nil, 'required' => true}], options[:options], @api_client)['backupType']
188
+ end
189
+
190
+ # Plugin optionTypes
191
+ plugin_option_type_inputs = @options_interface.options_for_source('backupOptionTypes', {'backupTypeCode' => params['backupType']} )['data']['optionTypes']
192
+ plugin_opt_parser = MtnCloud::Cli::OptionParser.new do |opts|
193
+ build_option_type_options(opts, options, plugin_option_type_inputs)
194
+ end
195
+
196
+ plugin_opt_parser.parse!(args)
197
+ v_prompt = MtnCloud::Cli::OptionTypes.prompt(plugin_option_type_inputs, options[:options].deep_merge({:context_map => {'domain' => 'backup'}}), @api_client)
198
+ v_prompt.deep_compact!.booleanize! # remove empty values and convert checkbox "on" and "off" to true and false
199
+ params.merge!(v_prompt.delete('backup') || {})
200
+
201
+ # Job / Schedule
202
+ params['jobAction'] = MtnCloud::Cli::OptionTypes.prompt([{'fieldName' => 'jobAction', 'fieldLabel' => 'Backup Job Type', 'type' => 'select', 'optionSource' => 'backupJobActions', 'required' => true, 'defaultValue' => 'new'}], options[:options], @api_client)['jobAction']
203
+ if params['jobAction'] == 'new'
204
+ params['jobName'] = MtnCloud::Cli::OptionTypes.prompt([{'fieldName' => 'jobName', 'fieldLabel' => 'Job Name', 'type' => 'text', 'required' => false, 'defaultValue' => nil}], options[:options], @api_client)['jobName']
205
+ elsif params['jobAction'] == 'clone'
206
+ params['jobId'] = MtnCloud::Cli::OptionTypes.prompt([{'fieldName' => 'jobId', 'fieldLabel' => 'Backup Job', 'type' => 'select', 'optionSource' => lambda { |api_client, api_params|
207
+ @backup_jobs_interface.list({max:10000})['jobs'].collect {|backup_job|
208
+ {'name' => backup_job['name'], 'value' => backup_job['id'], 'id' => backup_job['id']}
209
+ }
210
+ }, 'required' => true}], options[:options], @api_client)['jobId']
211
+ params['jobName'] = MtnCloud::Cli::OptionTypes.prompt([{'fieldName' => 'jobName', 'fieldLabel' => 'Job Name', 'type' => 'text', 'required' => false, 'defaultValue' => nil}], options[:options], @api_client)['jobName']
212
+ elsif params['jobAction'] == 'addTo'
213
+ params['jobId'] = MtnCloud::Cli::OptionTypes.prompt([{'fieldName' => 'jobId', 'fieldLabel' => 'Backup Job', 'type' => 'select', 'optionSource' => lambda { |api_client, api_params|
214
+ @backup_jobs_interface.list({max:10000})['jobs'].collect {|backup_job|
215
+ {'name' => backup_job['name'], 'value' => backup_job['id'], 'id' => backup_job['id']}
216
+ }
217
+ }, 'required' => true}], options[:options], @api_client)['jobId']
218
+ end
219
+
220
+ # new job option types
221
+ job_inputs = build_backup_job_option_types(params['jobAction'], params['backupType'], create_results)
222
+ job_opt_parser = MtnCloud::Cli::OptionParser.new do |opts|
223
+ build_option_type_options(opts, options, job_inputs)
224
+ end
225
+ job_opt_parser.parse!(args)
226
+ v_prompt = MtnCloud::Cli::OptionTypes.prompt(job_inputs, options[:options].deep_merge({:context_map => {'domain' => 'backupJob'}}), @api_client)
227
+ v_prompt.deep_compact!.booleanize! # remove empty values and convert checkbox "on" and "off" to true and false
228
+ params.deep_merge!(v_prompt)
229
+ end
230
+ payload['backup'].deep_merge!(params)
231
+ end
232
+ #options[:payload] = payload
233
+ execute_api(@backups_interface, :create, [], options, 'backup') do |json_response|
234
+ backup = json_response['backup']
235
+ print_green_success "Added backup #{backup['name']}"
236
+ _get(backup["id"], {}, options)
237
+ end
238
+ end
239
+
240
+ def update(args)
241
+ options = {}
242
+ params = {}
243
+ payload = {}
244
+ optparse = MtnCloud::Cli::OptionParser.new do |opts|
245
+ opts.banner = subcommand_usage("[backup] [options]")
246
+ # opts.on('--name NAME', String, "Name") do |val|
247
+ # options[:options]['name'] = val
248
+ # end
249
+ # opts.on('--job JOB', String, "Name or ID of the Backup Job to associate this backup with") do |val|
250
+ # options[:options]['jobId'] = val
251
+ # end
252
+ # opts.on('--enabled [on|off]', String, "Can be used to disable") do |val|
253
+ # options[:options]['enabled'] = val.to_s == 'on' || val.to_s == 'true' || val.to_s.empty?
254
+ # end
255
+ build_option_type_options(opts, options, update_backup_option_types)
256
+ build_standard_update_options(opts, options)
257
+ opts.footer = <<-EOT
258
+ Update a backup.
259
+ [backup] is required. This is the name or id of a backup.
260
+ EOT
261
+ end
262
+ optparse.parse!(args)
263
+ verify_args!(args:args, optparse:optparse, count:1)
264
+ connect(options)
265
+ backup = find_backup_by_name_or_id(args[0])
266
+ return 1 if backup.nil?
267
+ parse_payload(options, 'backup') do |payload|
268
+ # do not prompt on update
269
+ v_prompt = MtnCloud::Cli::OptionTypes.no_prompt(update_backup_option_types, options[:options], @api_client)
270
+ v_prompt.deep_compact!.booleanize! # remove empty values and convert checkbox "on" and "off" to true and false
271
+ params.deep_merge!(v_prompt)
272
+ payload.deep_merge!({'backup' => params})
273
+ if payload['backup'].empty? # || options[:no_prompt]
274
+ raise_command_error "Specify at least one option to update.\n#{optparse}"
275
+ end
276
+ end
277
+ execute_api(@backups_interface, :update, [backup['id']], options, 'backup') do |json_response|
278
+ backup = json_response['backup']
279
+ print_green_success "Updated backup #{backup['name']}"
280
+ return _get(backup["id"], {}, options)
281
+ end
282
+ end
283
+
284
+ def remove(args)
285
+ options = {}
286
+ params = {}
287
+ optparse = MtnCloud::Cli::OptionParser.new do |opts|
288
+ opts.banner = subcommand_usage("[backup] [options]")
289
+ build_standard_remove_options(opts, options)
290
+ opts.footer = <<-EOT
291
+ Delete a backup.
292
+ [backup] is required. This is the name or id of a backup.
293
+ EOT
294
+ end
295
+ optparse.parse!(args)
296
+ verify_args!(args:args, optparse:optparse, count:1)
297
+ connect(options)
298
+ backup = find_backup_by_name_or_id(args[0])
299
+ return 1 if backup.nil?
300
+ parse_options(options, params)
301
+ confirm!("Are you sure you want to delete the backup #{backup['name']}?", options)
302
+ execute_api(@backups_interface, :destroy, [backup['id']], options) do |json_response|
303
+ print_green_success "Removed backup #{backup['name']}"
304
+ end
305
+ end
306
+
307
+ def execute(args)
308
+ options = {}
309
+ params = {}
310
+ payload = {}
311
+ optparse = MtnCloud::Cli::OptionParser.new do |opts|
312
+ opts.banner = subcommand_usage("[backup] [options]")
313
+ build_standard_post_options(opts, options)
314
+ opts.footer = <<-EOT
315
+ Execute a backup to create a new backup result.
316
+ [backup] is required. This is the name or id of a backup.
317
+ EOT
318
+ end
319
+ optparse.parse!(args)
320
+ verify_args!(args:args, optparse:optparse, count:1)
321
+ connect(options)
322
+ backup = find_backup_by_name_or_id(args[0])
323
+ return 1 if backup.nil?
324
+ parse_payload(options) do |payload|
325
+ end
326
+ execute_api(@backups_interface, :execute_backup, [backup['id']], options, 'backup') do |json_response|
327
+ print_green_success "Executing backup #{backup['name']}"
328
+ # should get the result maybe, or could even support refreshing until it is complete...
329
+ # return _get(backup["id"], {}, options)
330
+ end
331
+ end
332
+
333
+ def restore(args)
334
+ options = {}
335
+ params = {}
336
+ payload = {}
337
+ optparse = MtnCloud::Cli::OptionParser.new do |opts|
338
+ opts.banner = subcommand_usage("[backup] [result] [options]")
339
+ build_standard_post_options(opts, options, [:auto_confirm])
340
+ opts.on('--result ID', String, "Backup Result ID that is being restored") do |val|
341
+ options[:options]['backupResultId'] = val
342
+ end
343
+ opts.on('--restore-instance existing|new', String, "Instance being targeted for the restore, existing to restore the current instance or new to create a new instance. The current instance is targeted by default.") do |val|
344
+ # restoreInstance=existing|new and the flag on the restore object is called 'restoreToNew'
345
+ options[:options]['restoreInstance'] = val
346
+ end
347
+ opts.footer = <<-EOT
348
+ Restore a backup, replacing the existing target with the specified backup result.
349
+ [backup] is required. This is the name or id of a backup.
350
+ --result ID is required. This is the id of a backup result being restored.
351
+ EOT
352
+ end
353
+ optparse.parse!(args)
354
+ verify_args!(args:args, optparse:optparse, max:1)
355
+ connect(options)
356
+ backup = nil
357
+ backup_result = nil
358
+ if args[0]
359
+ backup = find_backup_by_name_or_id(args[0])
360
+ return 1 if backup.nil?
361
+ else
362
+ # Prompt for backup
363
+ if backup.nil?
364
+ # Backup
365
+ available_backups = @backups_interface.list({max:10000})['backups'].collect {|it| {'name' => it['name'], 'value' => it['id']}}
366
+ backup_id = MtnCloud::Cli::OptionTypes.prompt([{'fieldName' => 'backupId', 'fieldLabel' => 'Backup', 'type' => 'select', 'selectOptions' => available_backups, 'required' => true}], options[:options], @api_client)['backupId']
367
+ backup = find_backup_by_name_or_id(backup_id)
368
+ return 1 if backup.nil?
369
+ end
370
+ end
371
+ # Prompt for backup result
372
+ if backup_result.nil?
373
+ #available_backup_results = @backup_results_interface.list({backupId: backup['id'], status: ['success', 'succeeded'], max:10000})['results'].collect {|it| {format_backup_result_option_name(it), 'value' => it['id']}}
374
+ available_backup_results = @backup_results_interface.list({backupId: backup['id'], max:10000})['results'].select {|it| it['status'].to_s.downcase == 'succeeded' || it['status'].to_s.downcase == 'success' }.collect {|it| {'name' => format_backup_result_option_name(it), 'value' => it['id']} }
375
+ params['backupResultId'] = MtnCloud::Cli::OptionTypes.prompt([{'fieldName' => 'backupResultId', 'fieldLabel' => 'Backup Result', 'type' => 'select', 'selectOptions' => available_backup_results, 'required' => true}], options[:options], @api_client)['backupResultId']
376
+ backup_result = @backup_results_interface.get(params['backupResultId'].to_i)['result']
377
+ end
378
+ parse_payload(options, 'restore') do |payload|
379
+ # Prompt for restore configuration
380
+ # todo: These options should be based on backup type
381
+ # Look at backup_type['restoreExistingEnabled'] and backup_type['restoreNewEnabled']
382
+ # Target Instance
383
+ #if backup_result['instanceId']
384
+ if backup['locationType'] == 'instance'
385
+ instance = backup['instance']
386
+ # could actually fetch the instance.., only need name and id right now though.
387
+ raise_command_error "Backup instance not found" if instance.nil?
388
+ params['restoreInstance'] = prompt_value({'fieldName' => 'restoreInstance', 'fieldLabel' => 'Restore Instance', 'type' => 'select', 'selectOptions' => [{'name' => 'Current Instance', 'value' => 'existing'}, {'name' => 'New Instance', 'value' => 'new'}], 'defaultValue' => 'existing', 'required' => true, 'description' => 'Restore the current instance or a new instance?'}, options)
389
+ restore_options = @backup_results_interface.create_options(backup_result['id'])
390
+ if params['restoreInstance'] == 'new'
391
+ # new instance
392
+ if restore_options['vmRestore']
393
+ group_id = MtnCloud::Cli::OptionTypes.prompt([{'fieldName' => 'group', 'type' => 'select', 'fieldLabel' => 'Group', 'selectOptions' => get_available_groups(), 'required' => true, 'description' => 'Select Group.'}],options[:options],@api_client,{'serverTypeId' => restore_options['servierTypeId']})['group']
394
+ name = MtnCloud::Cli::OptionTypes.prompt([{'fieldName' => 'name', 'fieldLabel' => 'Name', 'type' => 'text', 'required' => true, 'description' => 'Instance Name', 'defaultValue' => "#{backup['name']}-restore"}], options[:options], @api_client)['name']
395
+ params['groupId'] = group_id
396
+ params['name'] = name
397
+ v_prompt = MtnCloud::Cli::OptionTypes.prompt(restore_options['restoreNewOptionTypes'], options[:options], @api_client, {'zoneId' => backup_result['zoneId'], 'siteId' => group_id})
398
+ v_prompt.deep_compact!.booleanize! # remove empty values and convert checkbox "on" and "off" to true and false
399
+ params.deep_merge!(v_prompt)
400
+ else
401
+ config_map = prompt_restore_instance_config(options)
402
+ params['instanceConfig'] = config_map
403
+ end
404
+ else
405
+ # existing instance
406
+ # confirm the instance
407
+ keep_prompting = !options[:no_prompt]
408
+ while keep_prompting
409
+ instance_id = prompt_value({'fieldName' => 'instanceId', 'fieldLabel' => 'Confirm Instance ID', 'type' => 'text', 'required' => true, 'description' => "Enter the current instance ID to confirm that you wish to restore it."}, options)
410
+ if instance_id && instance_id.to_i == instance['id']
411
+ params['instanceId'] = instance_id.to_i
412
+ keep_prompting = false
413
+ elsif instance_id.to_s.downcase == instance['name'].to_s.downcase # allow matching on name too
414
+ params['instanceId'] = instance['id']
415
+ keep_prompting = false
416
+ else
417
+ print_red_alert "The value '#{instance_id}' does not match the existing instance #{instance['name']} [#{instance['id'] rescue ''}]. Please try again."
418
+ end
419
+ end
420
+ v_prompt = MtnCloud::Cli::OptionTypes.prompt(restore_options['restoreExistingOptionTypes'], options[:options], @api_client, {'zoneId' => backup_result['zoneId'], 'siteId' => group_id})
421
+ v_prompt.deep_compact!.booleanize! # remove empty values and convert checkbox "on" and "off" to true and false
422
+ params.deep_merge!(v_prompt)
423
+ end
424
+ elsif backup['locationType'] == 'server'
425
+ # prompt for server type backup restore
426
+ elsif backup['locationType'] == 'storage'
427
+ # prompt for storage type backup restore
428
+ else
429
+ print yellow, "Backup location type is unknown: #{backup['locationType']}",reset,"\n"
430
+ end
431
+
432
+ payload['restore'].deep_merge!(params)
433
+ end
434
+
435
+ if params['restoreInstance'] != 'new'
436
+ if backup['instance']
437
+ print cyan,"You have selected to restore the existing instance #{backup['instance']['name'] rescue ''} [#{backup['instance']['id'] rescue ''}] with the backup result #{format_backup_result_option_name(backup_result)} [#{backup_result['id']}]",reset,"\n"
438
+ end
439
+ if backup['sourceProviderId']
440
+ print yellow,"#{bold}WARNING!#{reset}#{yellow} Restoring a backup will overwite objects when restored to an existing object store.",reset,"\n"
441
+ else
442
+ print yellow,"#{bold}WARNING!#{reset}#{yellow} Restoring a backup will erase all data when restored to an existing instance.",reset,"\n"
443
+ end
444
+ end
445
+ confirm!("Are you sure you want to restore the backup result?", options)
446
+ execute_api(@backup_restores_interface, :create, [], options, 'restore') do |json_response|
447
+ print_green_success "Restoring backup result ID: #{backup_result['id']} Name: #{backup_result['backup']['name'] rescue ''} Date: (#{format_local_dt(backup_result['dateCreated'])}"
448
+ # should get the restore maybe, or could even support refreshing until it is complete...
449
+ # restore = json_response["restore"]
450
+ # return _get_restore(restore["id"], {}, options)
451
+ end
452
+ end
453
+
454
+ # Delegate jobs, results and restores
455
+ # to backup-jobs, backup-results and backup-restores
456
+ # which are hidden in the docs
457
+
458
+ ## Backup Jobs
459
+
460
+ def list_jobs(args)
461
+ MtnCloud::Cli::BackupJobsCommand.new.list(args)
462
+ end
463
+
464
+ def get_job(args)
465
+ MtnCloud::Cli::BackupJobsCommand.new.get(args)
466
+ end
467
+
468
+ def add_job(args)
469
+ MtnCloud::Cli::BackupJobsCommand.new.add(args)
470
+ end
471
+
472
+ def update_job(args)
473
+ MtnCloud::Cli::BackupJobsCommand.new.update(args)
474
+ end
475
+
476
+ def remove_job(args)
477
+ MtnCloud::Cli::BackupJobsCommand.new.remove(args)
478
+ end
479
+
480
+ def execute_job(args)
481
+ MtnCloud::Cli::BackupJobsCommand.new.execute(args)
482
+ end
483
+
484
+ ## Backup Results
485
+
486
+ def list_results(args)
487
+ MtnCloud::Cli::BackupResultsCommand.new.list(args)
488
+ end
489
+
490
+ def get_result(args)
491
+ MtnCloud::Cli::BackupResultsCommand.new.get(args)
492
+ end
493
+
494
+ def remove_result(args)
495
+ MtnCloud::Cli::BackupResultsCommand.new.remove(args)
496
+ end
497
+
498
+ ## Backup Restores
499
+
500
+ def list_restores(args)
501
+ MtnCloud::Cli::BackupRestoresCommand.new.list(args)
502
+ end
503
+
504
+ def get_restore(args)
505
+ MtnCloud::Cli::BackupRestoresCommand.new.get(args)
506
+ end
507
+
508
+ def remove_restore(args)
509
+ MtnCloud::Cli::BackupRestoresCommand.new.remove(args)
510
+ end
511
+
512
+ private
513
+
514
+ ## Backups
515
+ def build_backup_job_option_types(job_action, backup_type, config_opts)
516
+ # get job defaults
517
+ default_retention_count = config_opts.dig('backup', 'retentionCount') || config_opts.dig('backupSettings', 'retentionCount')
518
+ default_schedule = config_opts.dig('backup', 'scheduleTypeId') || config_opts.dig('backup', 'backupJob', 'scheduleTypeId') || config_opts.dig('backupSettings', 'defaultBackupSchedule')
519
+ default_synthetic_enabled = config_opts.dig('backup', 'backupJob', 'syntheticFullEnabled') || config_opts.dig('backupSettings', 'defaultSyntheticFullBackupsEnabled')
520
+ default_synthetic_schedule = config_opts.dig('backup', 'backupJob', 'syntheticFullSchedule') || config_opts.dig('backupSettings', 'defaultSyntheticFullBackupSchedule')
521
+ job_input_params = {jobAction: job_action, backupTypeCode: backup_type}
522
+ job_inputs = @options_interface.options_for_source('backupJobOptionTypes', job_input_params)['data']['optionTypes']
523
+ job_inputs.each do | input |
524
+ # set input defaults from global settings
525
+ input['defaultValue'] = case input['fieldName']
526
+ when "retentionCount"
527
+ default_retention_count
528
+ when "scheduleTypeId"
529
+ default_schedule
530
+ when "syntheticFullEnabled"
531
+ default_synthetic_enabled
532
+ when "syntheticFullSchedule"
533
+ default_synthetic_schedule
534
+ end
535
+ end
536
+
537
+ job_inputs
538
+ end
539
+
540
+ def backup_list_column_definitions()
541
+ {
542
+ "ID" => 'id',
543
+ "Name" => 'name',
544
+ "Type" => lambda {|it| format_backup_type_tag(it) },
545
+ "Location" => lambda {|it| format_backup_location_tag(it) },
546
+ "Schedule" => lambda {|it| it['schedule']['name'] rescue '' },
547
+ "Backup Job" => lambda {|it| it['job']['name'] rescue '' },
548
+ "Created" => lambda {|it| format_local_dt(it['dateCreated']) },
549
+ "Updated" => lambda {|it| format_local_dt(it['lastUpdated']) },
550
+ }
551
+ end
552
+
553
+ def backup_column_definitions()
554
+ {
555
+ "ID" => 'id',
556
+ "Name" => 'name',
557
+ "Backup Type" => lambda {|it| (it['backupType'] && it['backupType']['name']) ? it['backupType']['name'] : format_backup_type_tag(it) },
558
+ "Backup Provider" => lambda {|it| it['backupProvider']['name'] rescue '' },
559
+ "Storage Provider" => lambda {|it| it['storageProvider']['name'] rescue '' },
560
+ "Location Type" => lambda {|it|
561
+ if it['locationType'] == "instance"
562
+ "Instance"
563
+ elsif it['locationType'] == "server"
564
+ "Host"
565
+ elsif it['locationType'] == "storage"
566
+ "Provider"
567
+ end
568
+ },
569
+ "Instance" => lambda {|it| it['instance']['name'] rescue '' },
570
+ "Container ID" => lambda {|it| it['containerId'] rescue '' },
571
+ "Host" => lambda {|it| it['server']['name'] rescue '' },
572
+ "Schedule" => lambda {|it| it['schedule']['name'] rescue '' },
573
+ "Backup Job" => lambda {|it| it['job']['name'] rescue '' },
574
+ "Enabled" => lambda {|it| format_boolean(it['enabled']) },
575
+ "Created" => lambda {|it| format_local_dt(it['dateCreated']) },
576
+ "Updated" => lambda {|it| format_local_dt(it['lastUpdated']) },
577
+ }
578
+ end
579
+
580
+ # not used atm, this is not so simple, need to first choose select instance, host or provider
581
+ def add_backup_option_types
582
+ [
583
+ {'fieldName' => 'name', 'fieldLabel' => 'Name', 'type' => 'text', 'required' => true},
584
+ {'fieldName' => 'backupType', 'fieldLabel' => 'Backup Type', 'type' => 'select', 'optionSource' => 'backupTypes', 'required' => true},
585
+ {'fieldName' => 'jobAction', 'fieldLabel' => 'Backup Job Type', 'type' => 'select', 'optionSource' => 'backupJobActions', 'required' => true},
586
+ {'fieldName' => 'jobId', 'fieldLabel' => 'Backup Job', 'type' => 'select', 'optionSource' => lambda { |api_client, api_params|
587
+ @backup_jobs_interface.list({max:10000})['jobs'].collect {|backup_job|
588
+ {'name' => backup_job['name'], 'value' => backup_job['id'], 'id' => backup_job['id']}
589
+ }
590
+ }, 'required' => true},
591
+ ]
592
+ end
593
+
594
+ def update_backup_option_types
595
+ [
596
+ {'fieldName' => 'name', 'fieldLabel' => 'Name', 'type' => 'text'},
597
+ {'fieldName' => 'jobId', 'fieldLabel' => 'Backup Job', 'type' => 'select', 'optionSource' => lambda { |api_client, api_params|
598
+ @backup_jobs_interface.list({max:10000})['jobs'].collect {|backup_job|
599
+ {'name' => backup_job['name'], 'value' => backup_job['id'], 'id' => backup_job['id']}
600
+ }
601
+ } },
602
+ {'fieldName' => 'enabled', 'fieldLabel' => 'Enabled', 'type' => 'checkbox'},
603
+ ]
604
+ end
605
+
606
+ def format_backup_result_option_name(result)
607
+ "#{result['backup']['name']} (#{format_local_dt(result['startDate'])})"
608
+ end
609
+
610
+ # format backup type tag (manual or policy-based)
611
+ def format_backup_type_tag(backup)
612
+ # check if backup has a schdule or job associated with it
613
+ # manual backups typically dont have a schedule while policy-based do
614
+ if backup['cronExpression'] || (backup['schedule'] && backup['schedule']['id'])
615
+ "#{cyan}POLICY#{reset}"
616
+ elsif backup['job'] && backup['job']['id']
617
+ "#{cyan}POLICY#{reset}"
618
+ else
619
+ "#{yellow}MANUAL#{reset}"
620
+ end
621
+ end
622
+
623
+ # format backup location tag (local or remote)
624
+ def format_backup_location_tag(backup)
625
+ # check storage provider or backup provider indicating remote storage
626
+ if backup['storageProvider'] && backup['storageProvider']['id']
627
+ provider_label = backup['storageProvider']['type'] || backup['storageProvider']['providerType'] || backup['storageProvider']['name'] || ''
628
+ "#{green}REMOTE#{reset} (#{provider_label})"
629
+ elsif backup['backupProvider'] && backup['backupProvider']['id']
630
+ provider_label = backup['backupProvider']['type'] || backup['backupProvider']['providerType'] || backup['backupProvider']['name'] || ''
631
+ "#{green}REMOTE#{reset} (#{provider_label})"
632
+ else
633
+ "#{blue}LOCAL#{reset}"
634
+ end
635
+ end
636
+
637
+ # prompt for an instance config (vdiPool.instanceConfig)
638
+ def prompt_restore_instance_config(options)
639
+ # use config if user passed one in..
640
+ scope_context = 'instanceConfig'
641
+ scoped_instance_config = {}
642
+ if options[:options][scope_context].is_a?(Hash)
643
+ scoped_instance_config = options[:options][scope_context]
644
+ end
645
+
646
+ # now configure an instance like normal, use the config as default options with :always_prompt
647
+ instance_prompt_options = {}
648
+ # instance_prompt_options[:group] = group ? group['id'] : nil
649
+ # #instance_prompt_options[:cloud] = cloud ? cloud['name'] : nil
650
+ # instance_prompt_options[:default_cloud] = cloud ? cloud['name'] : nil
651
+ # instance_prompt_options[:environment] = selected_environment ? selected_environment['code'] : nil
652
+ # instance_prompt_options[:default_security_groups] = scoped_instance_config['securityGroups'] ? scoped_instance_config['securityGroups'] : nil
653
+
654
+ instance_prompt_options[:no_prompt] = options[:no_prompt]
655
+ #instance_prompt_options[:always_prompt] = options[:no_prompt] != true # options[:always_prompt]
656
+ instance_prompt_options[:options] = scoped_instance_config
657
+ #instance_prompt_options[:options][:always_prompt] = instance_prompt_options[:no_prompt] != true
658
+ instance_prompt_options[:options][:no_prompt] = instance_prompt_options[:no_prompt]
659
+
660
+ #instance_prompt_options[:name_required] = true
661
+ # instance_prompt_options[:instance_type_code] = instance_type_code
662
+ # todo: an effort to render more useful help eg. -O Web.0.instance.name
663
+ help_field_prefix = scope_context
664
+ instance_prompt_options[:help_field_prefix] = help_field_prefix
665
+ instance_prompt_options[:options][:help_field_prefix] = help_field_prefix
666
+ # instance_prompt_options[:locked_fields] = scoped_instance_config['lockedFields']
667
+ # instance_prompt_options[:for_app] = true
668
+ instance_prompt_options[:select_datastore] = true
669
+ instance_prompt_options[:name_required] = true
670
+ # this provisioning helper method handles all (most) of the parsing and prompting
671
+ instance_config_payload = prompt_new_instance(instance_prompt_options)
672
+ return instance_config_payload
673
+ end
674
+ end