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