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,9 @@
1
+ require 'mtncloud/api/rest_interface'
2
+
3
+ class MtnCloud::VdiAppsInterface < MtnCloud::RestInterface
4
+
5
+ def base_path
6
+ "/api/vdi-apps"
7
+ end
8
+
9
+ end
@@ -0,0 +1,9 @@
1
+ require 'mtncloud/api/rest_interface'
2
+
3
+ class MtnCloud::VdiGatewaysInterface < MtnCloud::RestInterface
4
+
5
+ def base_path
6
+ "/api/vdi-gateways"
7
+ end
8
+
9
+ end
@@ -0,0 +1,28 @@
1
+ require 'mtncloud/api/api_client'
2
+
3
+ # Interface for VDI Persona that provides viewing and allocating virtual desktops (VDI pools)
4
+ class MtnCloud::VdiInterface < MtnCloud::APIClient
5
+
6
+ def base_path
7
+ "/api/vdi"
8
+ end
9
+
10
+ # def dashboard(params={})
11
+ # execute(method: :get, url: "#{base_path}/dashboard", params: params)
12
+ # end
13
+
14
+ def list(params={})
15
+ execute(method: :get, url: "#{base_path}", params: params)
16
+ end
17
+
18
+ def get(id, params={})
19
+ validate_id!(id)
20
+ execute(method: :get, url: "#{base_path}/#{id}", params: params)
21
+ end
22
+
23
+ def allocate(id, payload, params={})
24
+ validate_id!(id)
25
+ execute(method: :post, url: "#{base_path}/#{id}/allocate", params: params, payload: payload.to_json)
26
+ end
27
+
28
+ end
@@ -0,0 +1,19 @@
1
+ require 'mtncloud/api/rest_interface'
2
+
3
+ class MtnCloud::VdiPoolsInterface < MtnCloud::RestInterface
4
+
5
+ def base_path
6
+ "/api/vdi-pools"
7
+ end
8
+
9
+ # NOT json, multipart file upload
10
+ def update_logo(id, logo_file)
11
+ url = "#{base_path}/#{id}/update-logo"
12
+ headers = { :params => {}, :authorization => "Bearer #{@access_token}"}
13
+ payload = {}
14
+ payload[:logo] = logo_file
15
+ payload[:multipart] = true
16
+ execute(method: :post, url: url, headers: headers, payload: payload)
17
+ end
18
+
19
+ end
@@ -0,0 +1,210 @@
1
+ require 'mtncloud/api/api_client'
2
+ require 'http'
3
+ require 'zlib'
4
+
5
+ class MtnCloud::VirtualImagesInterface < MtnCloud::APIClient
6
+
7
+ def virtual_image_types(options={})
8
+ url = "#{@base_url}/api/virtual-image-types"
9
+ headers = { params: {}, authorization: "Bearer #{@access_token}" }
10
+ if options.is_a?(Hash)
11
+ headers[:params].merge!(options)
12
+ end
13
+ execute(method: :get, url: url, headers: headers)
14
+ end
15
+
16
+ def get(options=nil)
17
+ url = "#{@base_url}/api/virtual-images"
18
+ headers = { params: {}, authorization: "Bearer #{@access_token}" }
19
+ if options.is_a?(Hash)
20
+ headers[:params].merge!(options)
21
+ elsif options.is_a?(Numeric)
22
+ url = "#{@base_url}/api/virtual-images/#{options}"
23
+ elsif options.is_a?(String)
24
+ headers[:params]['name'] = options
25
+ end
26
+ execute(method: :get, url: url, headers: headers)
27
+ end
28
+
29
+ def list(params={})
30
+ url = "#{@base_url}/api/virtual-images"
31
+ headers = { params: params, authorization: "Bearer #{@access_token}" }
32
+ execute(method: :get, url: url, headers: headers)
33
+ end
34
+
35
+ def create(payload)
36
+ url = "#{@base_url}/api/virtual-images"
37
+ headers = { :authorization => "Bearer #{@access_token}", 'Content-Type' => 'application/json' }
38
+ execute(method: :post, url: url, headers: headers, payload: payload.to_json)
39
+ end
40
+
41
+ def update(id, payload)
42
+ url = "#{@base_url}/api/virtual-images/#{id}"
43
+ headers = { :authorization => "Bearer #{@access_token}", 'Content-Type' => 'application/json' }
44
+ execute(method: :put, url: url, headers: headers, payload: payload.to_json)
45
+ end
46
+
47
+ def convert(id, payload)
48
+ url = "#{@base_url}/api/virtual-images/#{id}/convert"
49
+ headers = { :authorization => "Bearer #{@access_token}", 'Content-Type' => 'application/json' }
50
+ execute(method: :post, url: url, headers: headers, payload: payload.to_json)
51
+ end
52
+
53
+ def destroy(id, params={})
54
+ url = "#{@base_url}/api/virtual-images/#{id}"
55
+ headers = { :authorization => "Bearer #{@access_token}", 'Content-Type' => 'application/json' }
56
+ execute(method: :delete, url: url, params: params, headers: headers)
57
+ end
58
+
59
+ # multipart file upload
60
+ # def upload(id, image_file)
61
+ # url = "#{@base_url}/api/virtual-images/#{id}/upload"
62
+ # headers = { :params => {}, :authorization => "Bearer #{@access_token}"}
63
+ # payload = {}
64
+ # payload[:file] = image_file
65
+ # payload[:multipart] = true
66
+ # execute(method: :post, url: url, headers: headers, payload: payload)
67
+ # end
68
+
69
+ # no multipart
70
+ def upload(id, image_file, filename=nil, do_gzip=false)
71
+ filename = filename || File.basename(image_file)
72
+ url = "#{@base_url}/api/virtual-images/#{id}/upload"
73
+ headers = { :params => {}, :authorization => "Bearer #{@access_token}", 'Content-Type' => 'application/octet-stream'}
74
+ headers[:params][:filename] = filename
75
+ payload = image_file
76
+ #execute(method: :post, url: url, headers: headers, payload: payload, timeout: 36000)
77
+
78
+ # Using http.rb instead of RestClient
79
+ # todo: execute() should support :driver
80
+
81
+
82
+ http_opts = {}
83
+ if MtnCloud::RestClient.ssl_verification_enabled? == false
84
+ ctx = OpenSSL::SSL::SSLContext.new
85
+ ctx.verify_mode = OpenSSL::SSL::VERIFY_NONE
86
+ http_opts[:ssl_context] = ctx
87
+ # opts[:verify_ssl] = OpenSSL::SSL::VERIFY_NONE
88
+ end
89
+
90
+ # start_time = Time.now
91
+ query_params = headers.delete(:params) || {}
92
+ file_size = image_file.size
93
+ if File.blockdev?(image_file)
94
+ file_size = `blockdev --getsz '#{File.absolute_path(image_file)}'`.strip().to_i * 512
95
+ end
96
+ if do_gzip
97
+ # http = http.use(:auto_deflate)
98
+ headers['Content-Encoding'] = 'gzip'
99
+ headers['Content-Type'] = 'application/gzip'
100
+ headers['Content-Length'] = file_size
101
+ #headers['Transfer-Encoding'] = 'Chunked'
102
+ query_params['extractedContentLength'] = file_size
103
+ if @dry_run
104
+ return {method: :post, url: url, headers: headers, params: query_params, payload: payload}
105
+ end
106
+ http = HTTP.headers(headers)
107
+ http_opts[:params] = query_params
108
+
109
+ rd, wr = IO.pipe
110
+ Thread.new {
111
+ gz = Zlib::GzipWriter.new(wr)
112
+ File.open(payload) do |fp|
113
+ while chunk = fp.read(10 * 1024 * 1024) do
114
+ gz.write chunk
115
+ end
116
+ end
117
+ gz.close
118
+ }
119
+ http_opts[:body] = MtnCloud::BodyIO.new(rd)
120
+ if Gem::Version.new(HTTP::VERSION) >= Gem::Version.new("6.0.0")
121
+ response = http.post(url, **http_opts)
122
+ else
123
+ response = http.post(url, http_opts)
124
+ end
125
+ else
126
+ if @dry_run
127
+ return {method: :post, url: url, headers: headers, params: query_params, payload: payload}
128
+ end
129
+ headers['Content-Length'] = file_size
130
+ http = HTTP.headers(headers)
131
+ http_opts[:params] = query_params
132
+ http_opts[:body] = payload
133
+ if Gem::Version.new(HTTP::VERSION) >= Gem::Version.new("6.0.0")
134
+ response = http.post(url, **http_opts)
135
+ else
136
+ response = http.post(url, http_opts)
137
+ end
138
+ end
139
+ # puts "Took #{Time.now.to_i - start_time.to_i}"
140
+ # return response
141
+ return JSON.parse(response.body.to_s)
142
+ end
143
+
144
+ def upload_by_url(id, file_url, filename=nil)
145
+ url = "#{@base_url}/api/virtual-images/#{id}/upload"
146
+ headers = { :params => {}, :authorization => "Bearer #{@access_token}", 'Content-Type' => 'application/octet-stream'}
147
+ headers[:params][:url] = file_url
148
+ headers[:params][:filename] = filename if filename
149
+ execute(method: :post, url: url, headers: headers, timeout: 172800)
150
+ end
151
+
152
+ def destroy_file(id, filename)
153
+ url = "#{@base_url}/api/virtual-images/#{id}/files"
154
+ #url = "#{@base_url}/api/virtual-images/#{id}/files/#{filename}"
155
+ headers = { params: {}, :authorization => "Bearer #{@access_token}", 'Content-Type' => 'application/json' }
156
+ headers[:params][:filename] = filename
157
+ execute(method: :delete, url: url, headers: headers)
158
+ end
159
+
160
+ def download_chunked(id, outfile, params={})
161
+ raise "#{self.class}.download_chunked() passed a blank id!" if id.to_s == ''
162
+ url = "#{@base_url}/api/virtual-images/#{id}/download"
163
+ headers = { params: params, authorization: "Bearer #{@access_token}" }
164
+ opts = {method: :get, url: url, headers: headers}
165
+ # execute(opts, {parse_json: false})
166
+ if Dir.exist?(outfile)
167
+ raise "outfile is invalid. It is the name of an existing directory: #{outfile}"
168
+ end
169
+ # if @verify_ssl == false
170
+ # opts[:verify_ssl] = OpenSSL::SSL::VERIFY_NONE
171
+ # end
172
+ if @dry_run
173
+ return opts
174
+ end
175
+ http_response = nil
176
+ File.open(outfile, 'w') {|f|
177
+ block = proc { |response|
178
+ response.read_body do |chunk|
179
+ # writing to #{outfile} ..."
180
+ f.write chunk
181
+ end
182
+ }
183
+ opts[:block_response] = block
184
+ http_response = MtnCloud::RestClient.execute(opts)
185
+ }
186
+ return http_response
187
+ end
188
+
189
+ def location_base_path(resource_id)
190
+ "/api/virtual-images/#{resource_id}/locations"
191
+ end
192
+
193
+ def list_locations(resource_id, params={}, headers={})
194
+ validate_id!(resource_id)
195
+ execute(method: :get, url: "#{location_base_path(resource_id)}", params: params, headers: headers)
196
+ end
197
+
198
+ def get_location(resource_id, id, params={}, headers={})
199
+ validate_id!(resource_id)
200
+ validate_id!(id)
201
+ execute(method: :get, url: "#{location_base_path(resource_id)}/#{id}", params: params, headers: headers)
202
+ end
203
+
204
+ def destroy_location(resource_id, id, params = {}, headers={})
205
+ validate_id!(resource_id)
206
+ validate_id!(id)
207
+ execute(method: :delete, url: "#{location_base_path(resource_id)}/#{id}", params: params, headers: headers)
208
+ end
209
+
210
+ end
@@ -0,0 +1,9 @@
1
+ require 'mtncloud/api/rest_interface'
2
+
3
+ class MtnCloud::VirtualServersInterface < MtnCloud::RestInterface
4
+
5
+ def base_path
6
+ "/api/load-balancer-virtual-servers"
7
+ end
8
+
9
+ end
@@ -0,0 +1,9 @@
1
+ require 'mtncloud/api/rest_interface'
2
+
3
+ class MtnCloud::VirtualSwitchesInterface < MtnCloud::RestInterface
4
+
5
+ def base_path
6
+ "/api/virtual-switches"
7
+ end
8
+
9
+ end
@@ -0,0 +1,57 @@
1
+ require 'mtncloud/api/api_client'
2
+
3
+ class MtnCloud::WhitelabelSettingsInterface < MtnCloud::APIClient
4
+
5
+ def base_path
6
+ "/api/whitelabel-settings"
7
+ end
8
+
9
+ def get(params={})
10
+ url = base_path
11
+ headers = { params: params, authorization: "Bearer #{@access_token}" }
12
+ execute(method: :get, url: url, headers: headers)
13
+ end
14
+
15
+ def update(payload, params={})
16
+ url = base_path
17
+ headers = { params: params, :authorization => "Bearer #{@access_token}", 'Content-Type' => 'application/json' }
18
+ execute(method: :put, url: url, headers: headers, payload: payload.to_json)
19
+ end
20
+
21
+ def update_images(payload, params={})
22
+ url = "#{base_path}/images"
23
+ headers = { params: params, :authorization => "Bearer #{@access_token}" }
24
+ payload[:multipart] = true
25
+ execute(method: :post, url: url, headers: headers, payload: payload)
26
+ end
27
+
28
+ def reset_image(image_type, params={})
29
+ url = "#{base_path}/images/#{image_type}"
30
+ headers = { params: params, :authorization => "Bearer #{@access_token}", 'Content-Type' => 'application/json' }
31
+ execute(method: :delete, url: url, headers: headers)
32
+ end
33
+
34
+ def download_image(image_type, outfile, params={})
35
+ url = "#{base_path}/images/#{image_type}"
36
+ headers = { params: params, :authorization => "Bearer #{@access_token}" }
37
+ opts = {method: :get, url: url, headers: headers, timeout: 172800}
38
+
39
+ if @dry_run
40
+ return opts
41
+ end
42
+
43
+ http_response = nil
44
+ File.open(outfile, 'w') {|f|
45
+ block = proc { |response|
46
+ response.read_body do |chunk|
47
+ # writing to #{outfile} ..."
48
+ f.write chunk
49
+ end
50
+ }
51
+ opts[:block_response] = block
52
+ http_response = MtnCloud::RestClient.execute(opts)
53
+ }
54
+ http_response
55
+ end
56
+
57
+ end
@@ -0,0 +1,13 @@
1
+ require 'mtncloud/api/api_client'
2
+
3
+ class MtnCloud::WhoamiInterface < MtnCloud::APIClient
4
+
5
+ def default_timeout
6
+ 5
7
+ end
8
+
9
+ def get(params={})
10
+ execute(method: :get, url: "/api/whoami", params: params)
11
+ end
12
+
13
+ end
@@ -0,0 +1,48 @@
1
+ require 'mtncloud/api/api_client'
2
+
3
+ class MtnCloud::WikiInterface < MtnCloud::APIClient
4
+
5
+ def get(id, params={})
6
+ raise "#{self.class}.get() passed a blank name!" if id.to_s == ''
7
+ url = "#{@base_url}/api/wiki/pages/#{id}"
8
+ headers = { params: params, authorization: "Bearer #{@access_token}" }
9
+ opts = {method: :get, url: url, headers: headers}
10
+ execute(opts)
11
+ end
12
+
13
+ def list(params={})
14
+ url = "#{@base_url}/api/wiki/pages"
15
+ headers = { params: params, authorization: "Bearer #{@access_token}" }
16
+ opts = {method: :get, url: url, headers: headers}
17
+ execute(opts)
18
+ end
19
+
20
+ def create(payload)
21
+ url = "#{@base_url}/api/wiki/pages"
22
+ headers = { :authorization => "Bearer #{@access_token}", 'Content-Type' => 'application/json' }
23
+ opts = {method: :post, url: url, headers: headers, payload: payload.to_json}
24
+ execute(opts)
25
+ end
26
+
27
+ def update(id, payload)
28
+ url = "#{@base_url}/api/wiki/pages/#{id}"
29
+ headers = { :authorization => "Bearer #{@access_token}", 'Content-Type' => 'application/json' }
30
+ opts = {method: :put, url: url, headers: headers, payload: payload.to_json}
31
+ execute(opts)
32
+ end
33
+
34
+ def destroy(id, params={})
35
+ url = "#{@base_url}/api/wiki/pages/#{id}"
36
+ headers = { params: params, authorization: "Bearer #{@access_token}" }
37
+ opts = {method: :delete, url: url, headers: headers}
38
+ execute(opts)
39
+ end
40
+
41
+ def categories(params={})
42
+ url = "#{@base_url}/api/wiki/categories"
43
+ headers = { params: params, authorization: "Bearer #{@access_token}" }
44
+ opts = {method: :get, url: url, headers: headers}
45
+ execute(opts)
46
+ end
47
+
48
+ end
@@ -0,0 +1,12 @@
1
+ require 'mtncloud/cli/version'
2
+ require 'mtncloud/cli/errors'
3
+ require 'mtncloud/rest_client'
4
+ require 'mtncloud/formatters'
5
+ #require 'mtncloud/logging'
6
+ #require 'term/ansicolor'
7
+
8
+ # load interfaces
9
+ require 'mtncloud/api/api_client.rb'
10
+ require 'mtncloud/api/rest_interface.rb'
11
+ require 'mtncloud/api/read_interface.rb'
12
+ Dir[File.dirname(__FILE__) + "/api/**/*.rb"].each {|file| require file }
@@ -0,0 +1,259 @@
1
+ require 'securerandom'
2
+ require 'mtncloud/logging'
3
+ require 'mtncloud/cli/cli_registry.rb'
4
+
5
+ # Provides global Benchmarking functionality
6
+ # This provides a store of benchmarking records which can be looked up by name.
7
+ # There is also a global enabled flag that can be used.
8
+ # There is a mixin HasBenchmarking which provides start_benchmark(), stop_benchmark() and with_benchmark()
9
+ #
10
+ module MtnCloud::Benchmarking
11
+
12
+ # a global toggle switch for benchmarking
13
+ @@enabled = false
14
+
15
+ def self.enabled?
16
+ @@enabled
17
+ end
18
+
19
+ def self.enabled
20
+ @@enabled
21
+ end
22
+
23
+ def self.enabled=(val)
24
+ @@enabled = !!val
25
+ end
26
+
27
+ # internal Array to store benchmark records for recording
28
+ # todo: garbage cleanup, roll these off to disk probably.
29
+ @@benchmark_record_list = []
30
+ def self.benchmark_record_list
31
+ @@benchmark_record_list
32
+ end
33
+
34
+ # internal Hash to lookup benchmark records by id
35
+ @@benchmark_id_store = {}
36
+ def self.benchmark_id_store
37
+ @@benchmark_id_store
38
+ end
39
+
40
+ # internal Hash to lookup benchmark records by name
41
+ @@benchmark_name_store = {}
42
+ def self.benchmark_name_store
43
+ @@benchmark_name_store
44
+ end
45
+
46
+ # start a new BenchmarkRecord
47
+ # @params opts [String or Hash] String as name like like "my routine" or with a Hash like {name: "my routine"}
48
+ # Just a String for name is fine because there are no other settings of interest at the moment.
49
+ # Optional, a test can be created without a name. A random :id will be available in the response.
50
+ # Examples:
51
+ # MtnCloud::Benchmarking.start()
52
+ # MtnCloud::Benchmarking.start("my routine")
53
+ # @returns BenchmarkRecord that looks like {id: ID, name:"my routine",start_time:Time}
54
+ def self.start(opts={})
55
+ benchmark_record = BenchmarkRecord.new(opts)
56
+ benchmark_record_list << benchmark_record
57
+ # index name and id
58
+ if benchmark_record.name
59
+ benchmark_name_store[benchmark_record.name.to_s] = benchmark_record
60
+ end
61
+ if benchmark_record.id
62
+ benchmark_id_store[benchmark_record.id.to_s] = benchmark_record
63
+ end
64
+ #benchmark_record.start() # initialize does it
65
+ return benchmark_record
66
+ end
67
+
68
+ # stop a BenchmarkRecord identified by name or options
69
+ # maybe: if opts is nil, the last record is returned
70
+ # @params opts [String or Hash] String as name like like "my routine" or with a Hash like {name: "my routine"} or {id:ID}
71
+ # @returns BenchmarkRecord that looks like {id: ID, name:"my routine",start_time:Time}
72
+ def self.stop(opts, exit_code=0, error=nil)
73
+ benchmark_record = self.lookup(opts)
74
+ if benchmark_record
75
+ benchmark_record.stop(exit_code, error)
76
+ return benchmark_record
77
+ else
78
+ return nil
79
+ end
80
+ end
81
+
82
+ # lookup a BenchmarkRecord identified by name or options, usually just name.
83
+ # @params cmd [String or Hash] Name like "my routine" or with a Hash like {id: ID}
84
+ # @returns BenchmarkRecord that looks like {id: ID, name:"my routine",start_time:Time}
85
+ def self.lookup(opts={})
86
+ benchmark_record = nil
87
+ if opts.nil? || opts.empty?
88
+ benchmark_record = nil
89
+ elsif opts.is_a?(Hash)
90
+ if opts[:id]
91
+ benchmark_record = benchmark_name_store[opts[:id].to_s]
92
+ elsif opts[:name]
93
+ benchmark_record = benchmark_id_store[opts[:name].to_s]
94
+ end
95
+ elsif opts.is_a?(String) || opts.is_a?(Symbol)
96
+ benchmark_record = benchmark_name_store[opts.to_s] || benchmark_id_store[opts.to_s]
97
+ else
98
+ MtnCloud::Logging::DarkPrinter.puts "Benchmarking lookup passed a bad lookup argument: #{opts}" if MtnCloud::Logging.debug?
99
+ end
100
+ # could to slow traversal of benchmark_record_list here..
101
+ return benchmark_record
102
+ end
103
+
104
+ # get last benchmark started. useful if the name, so `benchmark stop` can work
105
+ # use a unique name or else your record may be overwritten!
106
+ def self.last()
107
+ (@@benchmark_record_list || []).last
108
+ end
109
+
110
+ # Mixin for any class that needs benchmarking
111
+ module HasBenchmarking
112
+
113
+ # true when benchmark is currently running
114
+ # def benchmarking?
115
+ # !!@benchmark_record
116
+ # end
117
+
118
+ # def benchmark_record
119
+ # @benchmark_record
120
+ # end
121
+
122
+ def with_benchmark(opts, &block)
123
+ exit_code, err = 0, nil
124
+ begin
125
+ start_benchmark(opts)
126
+ if block_given?
127
+ result = block.call()
128
+ exit_code, err = MtnCloud::Cli::CliRegistry.parse_command_result(result)
129
+ end
130
+ rescue => ex
131
+ raise ex
132
+ exit_code = 1
133
+ err = ex.msg
134
+ ensure
135
+ stop_benchmark(exit_code, err)
136
+ end
137
+ #return result
138
+ return exit_code, err
139
+ end
140
+
141
+ def start_benchmark(opts)
142
+ @benchmark_record = BenchmarkRecord.new(opts)
143
+ return @benchmark_record
144
+ end
145
+
146
+ # finish the current benchmark and optionally print the time taken.
147
+ def stop_benchmark(exit_code=0, err=nil)
148
+ if defined?(@benchmark_record) && @benchmark_record
149
+ @benchmark_record.stop(exit_code, err)
150
+ @last_benchmark_record = @benchmark_record
151
+ @benchmark_record = nil
152
+ return @last_benchmark_record
153
+ else
154
+ return nil
155
+ end
156
+ end
157
+
158
+ end
159
+
160
+ # An internal class for modeling benchmark info on a single run.
161
+ # Examples:
162
+ # BenchmarkRecord.new()
163
+ # BenchmarkRecord.new("my routine")
164
+ # BenchmarkRecord.new({name:"my routine"})
165
+ class BenchmarkRecord
166
+
167
+ attr_reader :id, :name, :command, :start_time, :end_time, :exit_code, :error
168
+
169
+ def initialize(opts={})
170
+ # no info is fine, anonymous benchmark is cool
171
+ if opts.nil? || opts.empty?
172
+ opts = {}
173
+ end
174
+ # support String
175
+ opts = opts.is_a?(Hash) ? opts : {name: opts.to_s}
176
+ @id = opts[:id] || self.object_id
177
+ @name = opts[:name]
178
+ #@command = opts[:command]
179
+ # store the list of commands would be cool... to record adhoc scripts
180
+ # @commands = []
181
+ # @commands << @command if @command
182
+ start()
183
+ end
184
+
185
+ def start()
186
+ if !@start_time
187
+ @start_time = Time.now
188
+ end
189
+ return self
190
+ end
191
+
192
+ def stop(exit_code=0, error=nil)
193
+ if !@end_time
194
+ @end_time = Time.now
195
+ @exit_code = exit_code
196
+ @error = error
197
+ end
198
+ return self
199
+ end
200
+
201
+ def duration
202
+ if @start_time && @end_time
203
+ return @end_time - @start_time
204
+ elsif @start_time
205
+ return Time.now - @start_time
206
+ else
207
+ return 0
208
+ end
209
+ end
210
+
211
+ def msg
212
+ time_str = ""
213
+ seconds = self.duration
214
+ if seconds > 0.002
215
+ seconds = seconds.round(3)
216
+ else
217
+ #seconds = seconds.round(3)
218
+ end
219
+ duration_str = duration
220
+ if @start_time && @end_time
221
+ time_str = "#{seconds} s"
222
+ elsif @start_time
223
+ time_str = "#{seconds} s (running)"
224
+ else
225
+ time_str = "(unstarted)"
226
+ end
227
+ command_str = "#{@name}" # or "#{@name || @id}"
228
+ exit_str = "#{@exit_code}"
229
+ error_str = "#{@error}" # should inspect and format this
230
+ out = ""
231
+
232
+ # show exit only if non 0
233
+ # so it looks like:
234
+ # command time [exit: 1] [error:]
235
+ # instances list foo 0.049 seconds
236
+ # foo 0.001 seconds exit: 1
237
+ out << "#{command_str.ljust(45, ' ')}"
238
+ out << "\t"
239
+ out << "#{time_str.ljust(15, ' ')}" # maybe use the format time: 0.021s
240
+ out << "\t"
241
+ if @end_time
242
+ if @exit_code && @exit_code != 0
243
+ out << "\texit: #{exit_str.ljust(2, ' ')}"
244
+ end
245
+ if @error && @error != ""
246
+ out << "\terror: #{error_str.ljust(12, ' ')}"
247
+ end
248
+ end
249
+ #out << reset
250
+ return out
251
+ end
252
+
253
+ def to_s
254
+ msg
255
+ end
256
+
257
+ end
258
+
259
+ end