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,731 @@
1
+ require 'mtncloud/cli/cli_command'
2
+
3
+ class MtnCloud::Cli::PowerSchedulesCommand
4
+ include MtnCloud::Cli::CliCommand
5
+ # include MtnCloud::Cli::ProvisioningHelper
6
+ set_command_name :'power-schedules'
7
+
8
+ register_subcommands :list, :get, :add, :update, :remove
9
+ register_subcommands :'add-instances' => :add_instances
10
+ register_subcommands :'remove-instances' => :remove_instances
11
+ register_subcommands :'add-hosts' => :add_hosts
12
+ register_subcommands :'remove-hosts' => :remove_hosts
13
+
14
+ def connect(opts)
15
+ @api_client = establish_remote_appliance_connection(opts)
16
+ @power_schedules_interface = @api_client.power_schedules
17
+ @instances_interface = @api_client.instances
18
+ @servers_interface = @api_client.servers
19
+ end
20
+
21
+ def handle(args)
22
+ handle_subcommand(args)
23
+ end
24
+
25
+ def list(args)
26
+ options = {}
27
+ params = {}
28
+ optparse = MtnCloud::Cli::OptionParser.new do |opts|
29
+ opts.banner = subcommand_usage("[search]")
30
+ build_standard_list_options(opts, options)
31
+ opts.footer = "List power schedules."
32
+ end
33
+ optparse.parse!(args)
34
+ connect(options)
35
+ if args.count > 0
36
+ options[:phrase] = args.join(" ")
37
+ end
38
+ params.merge!(parse_list_options(options))
39
+ @power_schedules_interface.setopts(options)
40
+ if options[:dry_run]
41
+ print_dry_run @power_schedules_interface.dry.list(params)
42
+ return
43
+ end
44
+ json_response = @power_schedules_interface.list(params)
45
+ render_response(json_response, options, power_schedule_list_key) do
46
+ power_schedules = json_response[power_schedule_list_key]
47
+ print_h1 "Power Schedules", parse_list_subtitles(options), options
48
+ if power_schedules.empty?
49
+ print cyan,"No power schedules found.",reset,"\n"
50
+ else
51
+ print as_pretty_table(power_schedules, power_schedule_list_column_definitions(options).upcase_keys!, options)
52
+ print_results_pagination(json_response)
53
+ end
54
+ print reset,"\n"
55
+ end
56
+ return 0, nil
57
+ end
58
+
59
+ def get(args)
60
+ params = {}
61
+ options = {}
62
+ options[:max_instances] = 10
63
+ options[:max_servers] = 10
64
+ optparse = MtnCloud::Cli::OptionParser.new do |opts|
65
+ opts.banner = subcommand_usage("[schedule]")
66
+ opts.on('--max-instances VALUE', String, "Display a limited number of instances in schedule. Default is 10") do |val|
67
+ options[:max_instances] = val.to_i
68
+ end
69
+ opts.on('--max-hosts VALUE', String, "Display a limited number of hosts in schedule. Default is 10") do |val|
70
+ options[:max_servers] = val.to_i
71
+ end
72
+ build_standard_get_options(opts, options)
73
+ end
74
+ optparse.parse!(args)
75
+ verify_args!(args:args, optparse:optparse, min:1)
76
+ connect(options)
77
+ params.merge!(parse_query_options(options))
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
+ options ||= {}
86
+ options[:max_servers] ||= 10
87
+ options[:max_instances] ||= 10
88
+
89
+ schedule = find_schedule_by_name_or_id(id)
90
+ if schedule.nil?
91
+ return 1
92
+ end
93
+ @power_schedules_interface.setopts(options)
94
+ if options[:dry_run]
95
+ print_dry_run @power_schedules_interface.dry.get(schedule['id'], params)
96
+ return
97
+ end
98
+ json_response = @power_schedules_interface.get(schedule['id'], params)
99
+ render_response(json_response, options, power_schedule_object_key) do
100
+ schedule = json_response[power_schedule_object_key]
101
+ instances = json_response['instances'] || []
102
+ servers = json_response['servers'] || []
103
+
104
+ print_h1 "Power Schedule Details"
105
+ print cyan
106
+ print_description_list(power_schedule_column_definitions(options), schedule, options)
107
+
108
+ ## Instances
109
+ if instances.size == 0
110
+ # print cyan,"No instances",reset,"\n"
111
+ else
112
+ print_h2 "Instances (#{instances.size})"
113
+ instance_rows = instances.first(options[:max_instances])
114
+ print as_pretty_table(instance_rows, [:id, :name])
115
+ print_results_pagination({'meta'=>{'total'=>instances.size,'size'=>instance_rows.size,'max'=>options[:max_servers],'offset'=>0}}, {:label => "instance in schedule", :n_label => "instances in schedule"})
116
+ end
117
+
118
+ ## Hosts
119
+ if servers.size == 0
120
+ # print cyan,"No hosts",reset,"\n"
121
+ else
122
+ options[:max_servers] ||= 10
123
+ print_h2 "Hosts (#{servers.size})"
124
+ server_rows = servers.first(options[:max_servers])
125
+ print as_pretty_table(server_rows, [:id, :name])
126
+ print_results_pagination({'meta'=>{'total'=>servers.size,'size'=>server_rows.size,'max'=>options[:max_servers],'offset'=>0}}, {:label => "host in schedule", :n_label => "hosts in schedule"})
127
+ end
128
+
129
+ print reset,"\n"
130
+ end
131
+ return 0, nil
132
+ end
133
+
134
+ def add(args)
135
+ options = {}
136
+ params = {'scheduleType' => 'power'}
137
+ optparse = MtnCloud::Cli::OptionParser.new do |opts|
138
+ opts.banner = subcommand_usage("[name]")
139
+ build_option_type_options(opts, options, add_power_schedule_option_types)
140
+ build_standard_add_options(opts, options)
141
+ opts.footer = "Create a new power schedule." + "\n" +
142
+ "[name] is required and can be passed as --name instead."
143
+ end
144
+ optparse.parse!(args)
145
+ verify_args!(args:args, optparse:optparse, min:0, max:1)
146
+ # support [name] as first argument
147
+ if args[0]
148
+ options[:options]['name'] = args[0]
149
+ end
150
+ connect(options)
151
+ begin
152
+ # construct payload
153
+ payload = {}
154
+ if options[:payload]
155
+ payload = options[:payload]
156
+ payload.deep_merge!({'schedule' => parse_passed_options(options)})
157
+ else
158
+ # merge -O options into normally parsed options
159
+ payload.deep_merge!({'schedule' => parse_passed_options(options)})
160
+ # prompt
161
+ schedule_payload = MtnCloud::Cli::OptionTypes.prompt(add_power_schedule_option_types, options[:options], @api_client, options[:params])
162
+ payload.deep_merge!({'schedule' => schedule_payload})
163
+ payload.booleanize!
164
+ end
165
+ @power_schedules_interface.setopts(options)
166
+ if options[:dry_run]
167
+ print_dry_run @power_schedules_interface.dry.create(payload)
168
+ return
169
+ end
170
+ json_response = @power_schedules_interface.create(payload)
171
+ if options[:json]
172
+ puts as_json(json_response, options)
173
+ elsif !options[:quiet]
174
+ schedule = json_response['schedule']
175
+ print_green_success "Added power schedule #{schedule['name']}"
176
+ _get(schedule['id'], {}, options)
177
+ end
178
+ return 0
179
+ rescue RestClient::Exception => e
180
+ print_rest_exception(e, options)
181
+ return 1
182
+ end
183
+ end
184
+
185
+
186
+ def update(args)
187
+ options = {}
188
+ params = {}
189
+ optparse = MtnCloud::Cli::OptionParser.new do |opts|
190
+ opts.banner = subcommand_usage("[schedule]")
191
+ build_option_type_options(opts, options, update_power_schedule_option_types)
192
+ build_standard_add_options(opts, options)
193
+ opts.footer = "Update a power schedule." + "\n" +
194
+ "[schedule] is required. This is the name or id of a power schedule."
195
+ end
196
+ optparse.parse!(args)
197
+ verify_args!(args:args, optparse:optparse, count:1)
198
+ connect(options)
199
+ begin
200
+ schedule = find_schedule_by_name_or_id(args[0])
201
+ if schedule.nil?
202
+ return 1
203
+ end
204
+ # construct payload
205
+ payload = {}
206
+ if options[:payload]
207
+ payload = options[:payload]
208
+ payload.deep_merge!({'schedule' => parse_passed_options(options)})
209
+ else
210
+ # merge -O options into normally parsed options
211
+ payload.deep_merge!({'schedule' => parse_passed_options(options)})
212
+ # prompt
213
+ schedule_payload = MtnCloud::Cli::OptionTypes.no_prompt(update_power_schedule_option_types, options[:options], @api_client, options[:params])
214
+ payload.deep_merge!({'schedule' => schedule_payload})
215
+ payload.booleanize!
216
+ end
217
+ @power_schedules_interface.setopts(options)
218
+ if options[:dry_run]
219
+ print_dry_run @power_schedules_interface.dry.update(schedule["id"], payload)
220
+ return
221
+ end
222
+ json_response = @power_schedules_interface.update(schedule["id"], payload)
223
+ if options[:json]
224
+ puts as_json(json_response, options)
225
+ elsif !options[:quiet]
226
+ print_green_success "Updated power schedule #{schedule['name']}"
227
+ _get(schedule['id'], {}, options)
228
+ end
229
+ return 0
230
+ rescue RestClient::Exception => e
231
+ print_rest_exception(e, options)
232
+ return 1
233
+ end
234
+ end
235
+
236
+ def remove(args)
237
+ options = {}
238
+ params = {}
239
+ optparse = MtnCloud::Cli::OptionParser.new do |opts|
240
+ opts.banner = subcommand_usage("[schedule]")
241
+ build_standard_remove_options(opts, options)
242
+ end
243
+ optparse.parse!(args)
244
+ verify_args!(args:args, optparse:optparse, count:1)
245
+ connect(options)
246
+
247
+ begin
248
+ schedule = find_schedule_by_name_or_id(args[0])
249
+ if schedule.nil?
250
+ return 1
251
+ end
252
+
253
+ unless options[:yes] || ::MtnCloud::Cli::OptionTypes::confirm("Are you sure you would like to delete power schedule '#{schedule['name']}'?", options)
254
+ return false
255
+ end
256
+
257
+ @power_schedules_interface.setopts(options)
258
+ if options[:dry_run]
259
+ print_dry_run @power_schedules_interface.dry.destroy(schedule["id"])
260
+ return
261
+ end
262
+
263
+ json_response = @power_schedules_interface.destroy(schedule["id"])
264
+ if options[:json]
265
+ puts as_json(json_response, options)
266
+ elsif !options[:quiet]
267
+ print_green_success "Deleted power schedule #{schedule['name']}"
268
+ end
269
+ return 0, nil
270
+ rescue RestClient::Exception => e
271
+ print_rest_exception(e, options)
272
+ return 1
273
+ end
274
+ end
275
+
276
+ def add_instances(args)
277
+ options = {}
278
+ params = {}
279
+ optparse = MtnCloud::Cli::OptionParser.new do |opts|
280
+ opts.banner = subcommand_usage("[schedule] [instance]")
281
+ build_standard_update_options(opts, options)
282
+ opts.footer = "Assign instances to a power schedule.\n" +
283
+ "[schedule] is required. This is the name or id of a power schedule.\n" +
284
+ "[instance] is required. This is the name or id of an instance. More than one can be passed."
285
+ end
286
+ optparse.parse!(args)
287
+ verify_args!(args:args, optparse:optparse, min:2)
288
+ connect(options)
289
+ begin
290
+ schedule = find_schedule_by_name_or_id(args[0])
291
+ if schedule.nil?
292
+ return 1
293
+ end
294
+
295
+ # construct payload
296
+ payload = {}
297
+ if options[:payload]
298
+ payload = options[:payload]
299
+ payload.deep_merge!(parse_passed_options(options))
300
+ else
301
+ payload.deep_merge!(parse_passed_options(options))
302
+ instance_ids = args[1..-1]
303
+ instances = []
304
+ instance_ids.each do |instance_id|
305
+ instance = find_instance_by_name_or_id(instance_id)
306
+ return 1 if instance.nil?
307
+ instances << instance
308
+ end
309
+ payload.deep_merge!({'instances' => instances.collect {|it| it['id'] } })
310
+ end
311
+ @power_schedules_interface.setopts(options)
312
+ if options[:dry_run]
313
+ print_dry_run @power_schedules_interface.dry.add_instances(schedule["id"], payload)
314
+ return 0
315
+ end
316
+ json_response = @power_schedules_interface.add_instances(schedule["id"], payload)
317
+ if options[:json]
318
+ puts as_json(json_response, options)
319
+ elsif !options[:quiet]
320
+ if instances.size == 1
321
+ print_green_success "Added #{instances[0]['name']} to power schedule #{schedule['name']}"
322
+ else
323
+ print_green_success "Added #{instances.size} instances to power schedule #{schedule['name']}"
324
+ end
325
+ _get(schedule['id'], {}, options)
326
+ end
327
+ return 0
328
+ rescue RestClient::Exception => e
329
+ print_rest_exception(e, options)
330
+ return 1
331
+ end
332
+ end
333
+
334
+ def remove_instances(args)
335
+ options = {}
336
+ params = {}
337
+ optparse = MtnCloud::Cli::OptionParser.new do |opts|
338
+ opts.banner = subcommand_usage("[schedule] [instance]")
339
+ build_standard_update_options(opts, options)
340
+ opts.footer = "Remove instances from a power schedule.\n" +
341
+ "[schedule] is required. This is the name or id of a power schedule.\n" +
342
+ "[instance] is required. This is the name or id of an instance. More than one can be passed."
343
+ end
344
+ optparse.parse!(args)
345
+ verify_args!(args:args, optparse:optparse, min:2)
346
+ connect(options)
347
+ begin
348
+ schedule = find_schedule_by_name_or_id(args[0])
349
+ if schedule.nil?
350
+ return 1
351
+ end
352
+
353
+ # construct payload
354
+ payload = {}
355
+ if options[:payload]
356
+ payload = options[:payload]
357
+ payload.deep_merge!(parse_passed_options(options))
358
+ else
359
+ payload.deep_merge!(parse_passed_options(options))
360
+ instance_ids = args[1..-1]
361
+ instances = []
362
+ instance_ids.each do |instance_id|
363
+ instance = find_instance_by_name_or_id(instance_id)
364
+ return 1 if instance.nil?
365
+ instances << instance
366
+ end
367
+ payload.deep_merge!({'instances' => instances.collect {|it| it['id'] } })
368
+ end
369
+ @power_schedules_interface.setopts(options)
370
+ if options[:dry_run]
371
+ print_dry_run @power_schedules_interface.dry.remove_instances(schedule["id"], payload)
372
+ return 0
373
+ end
374
+ json_response = @power_schedules_interface.remove_instances(schedule["id"], payload)
375
+ if options[:json]
376
+ puts as_json(json_response, options)
377
+ elsif !options[:quiet]
378
+ if instances.size == 1
379
+ print_green_success "Removed instance #{instances[0]['name']} from power schedule #{schedule['name']}"
380
+ else
381
+ print_green_success "Removed #{instances.size} instances from power schedule #{schedule['name']}"
382
+ end
383
+ _get(schedule['id'], {}, options)
384
+ end
385
+ return 0
386
+ rescue RestClient::Exception => e
387
+ print_rest_exception(e, options)
388
+ return 1
389
+ end
390
+ end
391
+
392
+ def add_hosts(args)
393
+ options = {}
394
+ params = {}
395
+ optparse = MtnCloud::Cli::OptionParser.new do |opts|
396
+ opts.banner = subcommand_usage("[schedule] [host]")
397
+ build_standard_update_options(opts, options)
398
+ opts.footer = "Assign hosts to a power schedule.\n" +
399
+ "[schedule] is required. This is the name or id of a power schedule.\n" +
400
+ "[host] is required. This is the name or id of a host. More than one can be passed."
401
+ end
402
+ optparse.parse!(args)
403
+ verify_args!(args:args, optparse:optparse, min:2)
404
+ connect(options)
405
+ begin
406
+ schedule = find_schedule_by_name_or_id(args[0])
407
+ if schedule.nil?
408
+ return 1
409
+ end
410
+
411
+ # construct payload
412
+ payload = {}
413
+ if options[:payload]
414
+ payload = options[:payload]
415
+ payload.deep_merge!(parse_passed_options(options))
416
+ else
417
+ payload.deep_merge!(parse_passed_options(options))
418
+ server_ids = args[1..-1]
419
+ servers = []
420
+ server_ids.each do |server_id|
421
+ server = find_server_by_name_or_id(server_id)
422
+ return 1 if server.nil?
423
+ servers << server
424
+ end
425
+ payload.deep_merge!({'servers' => servers.collect {|it| it['id'] } })
426
+ end
427
+ @power_schedules_interface.setopts(options)
428
+ if options[:dry_run]
429
+ print_dry_run @power_schedules_interface.dry.add_servers(schedule["id"], payload)
430
+ return 0
431
+ end
432
+ json_response = @power_schedules_interface.add_servers(schedule["id"], payload)
433
+ if options[:json]
434
+ puts as_json(json_response, options)
435
+ elsif !options[:quiet]
436
+ if servers.size == 1
437
+ print_green_success "Added host #{servers[0]['name']} to power schedule #{schedule['name']}"
438
+ else
439
+ print_green_success "Added #{servers.size} hosts to power schedule #{schedule['name']}"
440
+ end
441
+ _get(schedule['id'], {}, options)
442
+ end
443
+ return 0
444
+ rescue RestClient::Exception => e
445
+ print_rest_exception(e, options)
446
+ return 1
447
+ end
448
+ end
449
+
450
+ def remove_hosts(args)
451
+ options = {}
452
+ params = {}
453
+ optparse = MtnCloud::Cli::OptionParser.new do |opts|
454
+ opts.banner = subcommand_usage("[schedule] [host]")
455
+ build_standard_update_options(opts, options)
456
+ opts.footer = "Remove hosts from a power schedule.\n" +
457
+ "[schedule] is required. This is the name or id of a power schedule.\n" +
458
+ "[host] is required. This is the name or id of a host. More than one can be passed."
459
+ end
460
+ optparse.parse!(args)
461
+ verify_args!(args:args, optparse:optparse, min:2)
462
+ connect(options)
463
+ begin
464
+ schedule = find_schedule_by_name_or_id(args[0])
465
+ if schedule.nil?
466
+ return 1
467
+ end
468
+
469
+ # construct payload
470
+ payload = {}
471
+ if options[:payload]
472
+ payload = options[:payload]
473
+ payload.deep_merge!(parse_passed_options(options))
474
+ else
475
+ payload.deep_merge!(parse_passed_options(options))
476
+ server_ids = args[1..-1]
477
+ servers = []
478
+ server_ids.each do |server_id|
479
+ server = find_server_by_name_or_id(server_id)
480
+ return 1 if server.nil?
481
+ servers << server
482
+ end
483
+ payload.deep_merge!({'servers' => servers.collect {|it| it['id'] } })
484
+ end
485
+ @power_schedules_interface.setopts(options)
486
+ if options[:dry_run]
487
+ print_dry_run @power_schedules_interface.dry.remove_servers(schedule["id"], payload)
488
+ return 0
489
+ end
490
+ json_response = @power_schedules_interface.remove_servers(schedule["id"], payload)
491
+ if options[:json]
492
+ puts as_json(json_response, options)
493
+ elsif !options[:quiet]
494
+ if servers.size == 1
495
+ print_green_success "Removed host #{servers[0]['name']} from power schedule #{schedule['name']}"
496
+ else
497
+ print_green_success "Removed #{servers.size} hosts from power schedule #{schedule['name']}"
498
+ end
499
+ _get(schedule['id'], {}, options)
500
+ end
501
+ return 0
502
+ rescue RestClient::Exception => e
503
+ print_rest_exception(e, options)
504
+ return 1
505
+ end
506
+ end
507
+
508
+
509
+ private
510
+
511
+ def power_schedule_object_key
512
+ 'schedule'
513
+ end
514
+
515
+ def power_schedule_list_key
516
+ 'schedules'
517
+ end
518
+
519
+ def power_schedule_list_column_definitions(options)
520
+ {
521
+ "ID" => lambda {|it| it['id'] },
522
+ "Name" => lambda {|it| it['name'] },
523
+ "Description" => lambda {|it| it['description'] },
524
+ "Type" => lambda {|it| format_schedule_type(it['scheduleType']) }
525
+ }
526
+ end
527
+
528
+ def power_schedule_column_definitions(options)
529
+ {
530
+ "ID" => lambda {|it| it['id'] },
531
+ #"Account" => lambda {|it| it['owner'] ? it['owner']['name'] : '' },
532
+ "Name" => lambda {|it| it['name'] },
533
+ "Description" => lambda {|it| it['description'] },
534
+ "Type" => lambda {|it| format_schedule_type(it['scheduleType']) },
535
+ "Enabled" => lambda {|it| format_boolean it['enabled'] },
536
+ "Time Zone" => lambda {|it| it['scheduleTimezone'] || 'UTC (default)' },
537
+ "Monday" => lambda {|it| format_schedule_day(it, "monday")},
538
+ "Tuesday" => lambda {|it| format_schedule_day(it, "tuesday") },
539
+ "Wednesday" => lambda {|it| format_schedule_day(it, "wednesday") },
540
+ "Thursday" => lambda {|it| format_schedule_day(it, "thursday") },
541
+ "Friday" => lambda {|it| format_schedule_day(it, "friday") },
542
+ "Saturday" => lambda {|it| format_schedule_day(it, "saturday") },
543
+ "Sunday" => lambda {|it| format_schedule_day(it, "sunday") },
544
+ "Created" => lambda {|it| format_local_dt(it['dateCreated']) },
545
+ "Updated" => lambda {|it| format_local_dt(it['lastUpdated']) }
546
+ }
547
+ end
548
+
549
+ def add_power_schedule_option_types()
550
+ option_list = [
551
+ {'fieldName' => 'name', 'fieldLabel' => 'Name', 'type' => 'text', 'required' => true, 'description' => 'Choose a unique name for the power schedule', 'fieldGroup' => 'Options', 'displayOrder' => 1},
552
+ {'fieldName' => 'description', 'fieldLabel' => 'Description', 'type' => 'text', 'description' => 'Description', 'displayOrder' => 2},
553
+ {'fieldName' => 'visibility', 'fieldLabel' => 'Visibility', 'type' => 'select', 'selectOptions' => [{'name' => 'Private', 'value' => 'private'}, {'name' => 'Public', 'value' => 'public'}], 'defaultValue' => 'private', 'displayOrder' => 3},
554
+ {'fieldName' => 'scheduleTimezone', 'fieldLabel' => 'Time Zone', 'type' => 'select', 'optionSource' => 'timezones', 'description' => "Time Zone", 'displayOrder' => 4}, #, 'defaultValue' => Time.now.zone
555
+ {'fieldName' => 'scheduleType', 'fieldLabel' => 'Schedule Type', 'type' => 'select', 'selectOptions' => [{'name' => 'Power On', 'value' => 'power'}, {'name' => 'Power Off', 'value' => 'power off'}], 'defaultValue' => 'power', 'description' => "Type of Power Schedule 'power' or 'power off'", 'displayOrder' => 5},
556
+ {'fieldName' => 'enabled', 'fieldLabel' => 'Enabled', 'type' => 'checkbox', 'defaultValue' => true, 'description' => 'Enable the power schedule to make it available for use.', 'displayOrder' => 6},
557
+ ]
558
+ [
559
+ 'monday','tuesday','wednesday','thursday','friday','saturday','sunday'
560
+ ].each_with_index do |day, i|
561
+ option_list << {'fieldName' => "#{day}OnTime", 'fieldLabel' => "#{day.capitalize} Start", 'type' => 'text', 'placeHolder' => 'HH:MM', 'description' => "#{day.capitalize} start time in HH:MM 24-hour format", 'defaultValue' => "00:00", 'displayOrder' => 7+((i*2))}
562
+ option_list << {'fieldName' => "#{day}OffTime", 'fieldLabel' => "#{day.capitalize} End", 'type' => 'text', 'placeHolder' => 'HH:MM', 'description' => "#{day.capitalize} end time in HH:MM 24-hour format", 'defaultValue' => "24:00", 'displayOrder' => 7+((i*2)+1)}
563
+ end
564
+ return option_list
565
+ end
566
+
567
+ def update_power_schedule_option_types()
568
+ option_list = add_power_schedule_option_types
569
+ option_list.each do |option_type|
570
+ option_type.delete('required')
571
+ option_type.delete('defaultValue')
572
+ end
573
+ return option_list
574
+ end
575
+
576
+ def find_schedule_by_name_or_id(val)
577
+ if val.to_s =~ /\A\d{1,}\Z/
578
+ return find_schedule_by_id(val)
579
+ else
580
+ return find_schedule_by_name(val)
581
+ end
582
+ end
583
+
584
+ def find_schedule_by_id(id)
585
+ begin
586
+ json_response = @power_schedules_interface.get(id.to_i)
587
+ return json_response['schedule']
588
+ rescue RestClient::Exception => e
589
+ if e.response && e.response.code == 404
590
+ print_red_alert "Power Schedule not found by id #{id}"
591
+ else
592
+ raise e
593
+ end
594
+ end
595
+ end
596
+
597
+ def find_schedule_by_name(name)
598
+ schedules = @power_schedules_interface.list({name: name.to_s})['schedules']
599
+ if schedules.empty?
600
+ print_red_alert "Power Schedule not found by name #{name}"
601
+ return nil
602
+ elsif schedules.size > 1
603
+ print_red_alert "#{schedules.size} power schedules found by name #{name}"
604
+ print_schedules_table(schedules, {color: red})
605
+ print_red_alert "Try using ID instead"
606
+ print reset,"\n"
607
+ return nil
608
+ else
609
+ return schedules[0]
610
+ end
611
+ end
612
+
613
+ def print_schedules_table(schedules, opts={})
614
+ columns = [
615
+ {"ID" => lambda {|schedule| schedule['id'] } },
616
+ {"NAME" => lambda {|schedule| schedule['name'] } },
617
+ {"DESCRIPTION" => lambda {|schedule| schedule['description'] } },
618
+ {"TYPE" => lambda {|schedule| format_schedule_type(schedule['scheduleType']) } },
619
+ #{"TIMES" => lambda {|schedule| format_schedule_days_short(schedule) } },
620
+ ]
621
+ if opts[:include_fields]
622
+ columns = opts[:include_fields]
623
+ end
624
+ print as_pretty_table(schedules, columns, opts)
625
+ end
626
+
627
+ def format_schedule_type(val)
628
+ case val.to_s.downcase
629
+ when "power" then "Power On"
630
+ when "power off" then "Power Off"
631
+ else
632
+ val.to_s #.capitalize
633
+ end
634
+ end
635
+
636
+ # format day on - off times in HH:MM - HH:MM
637
+ def format_schedule_day(schedule, day)
638
+ # API used to only return On/Off but now returns OnTime/OffTime
639
+ if schedule[day + 'OnTime']
640
+ schedule[day + 'OnTime'].to_s + ' - ' + schedule[day + 'OffTime'].to_s
641
+ elsif schedule[day + 'On']
642
+ schedule_hour_to_time(schedule[day + 'On']) + ' - ' + schedule_hour_to_time(schedule[day + 'Off'])
643
+ else
644
+ "" #"bad day"
645
+ end
646
+ end
647
+
648
+ # convert the schedule on/off minute values [0-1440] to a time
649
+ # older versions used hours 0-24 instead of minutes
650
+ def schedule_hour_to_time(val)
651
+ hour = val.to_f.floor
652
+ remainder = val.to_f % 1
653
+ minute = remainder == 0 ? 0 : (60 * remainder).floor
654
+ "#{hour.to_s.rjust(2,'0')}:#{minute.to_s.rjust(2,'0')}"
655
+ end
656
+
657
+ def find_instance_by_name_or_id(val)
658
+ if val.to_s =~ /\A\d{1,}\Z/
659
+ return find_instance_by_id(val)
660
+ else
661
+ return find_instance_by_name(val)
662
+ end
663
+ end
664
+
665
+ def find_instance_by_id(id)
666
+ begin
667
+ json_response = @instances_interface.get(id.to_i)
668
+ return json_response['instance']
669
+ rescue RestClient::Exception => e
670
+ if e.response && e.response.code == 404
671
+ print_red_alert "Instance not found by id #{id}"
672
+ else
673
+ raise e
674
+ end
675
+ end
676
+ end
677
+
678
+ def find_instance_by_name(name)
679
+ instances = @instances_interface.list({name: name.to_s})['instances']
680
+ if instances.empty?
681
+ print_red_alert "Instance not found by name #{name}"
682
+ return nil
683
+ elsif instances.size > 1
684
+ print_red_alert "#{instances.size} instances found by name #{name}"
685
+ as_pretty_table(instances, [:id, :name], {color: red})
686
+ print_red_alert "Try using ID instead"
687
+ print reset,"\n"
688
+ return nil
689
+ else
690
+ return instances[0]
691
+ end
692
+ end
693
+
694
+ def find_server_by_name_or_id(val)
695
+ if val.to_s =~ /\A\d{1,}\Z/
696
+ return find_server_by_id(val)
697
+ else
698
+ return find_server_by_name(val)
699
+ end
700
+ end
701
+
702
+ def find_server_by_id(id)
703
+ begin
704
+ json_response = @servers_interface.get(id.to_i)
705
+ return json_response['server']
706
+ rescue RestClient::Exception => e
707
+ if e.response && e.response.code == 404
708
+ print_red_alert "Server not found by id #{id}"
709
+ else
710
+ raise e
711
+ end
712
+ end
713
+ end
714
+
715
+ def find_server_by_name(name)
716
+ servers = @servers_interface.list({name: name.to_s})['servers']
717
+ if servers.empty?
718
+ print_red_alert "Host not found by name #{name}"
719
+ return nil
720
+ elsif servers.size > 1
721
+ print_red_alert "#{servers.size} hosts found by name #{name}"
722
+ as_pretty_table(servers, [:id, :name], {color: red})
723
+ print_red_alert "Try using ID instead"
724
+ print reset,"\n"
725
+ return nil
726
+ else
727
+ return servers[0]
728
+ end
729
+ end
730
+
731
+ end