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,692 @@
1
+ require 'mtncloud/cli/cli_command'
2
+
3
+ class MtnCloud::Cli::PricesCommand
4
+ include MtnCloud::Cli::CliCommand
5
+ include MtnCloud::Cli::AccountsHelper
6
+ include MtnCloud::Cli::ProvisioningHelper
7
+ include MtnCloud::Cli::WhoamiHelper
8
+
9
+ set_command_name :'prices'
10
+
11
+ register_subcommands :list, :get, :add, :update, :deactivate
12
+ set_default_subcommand :list
13
+
14
+ def connect(opts)
15
+ @api_client = establish_remote_appliance_connection(opts)
16
+ @prices_interface = @api_client.prices
17
+ @accounts_interface = @api_client.accounts
18
+ @options_interface = @api_client.options
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
+ opts.on('-i', '--include-inactive [on|off]', String, "Can be used to enable / disable inactive filter. Default is on") do |val|
31
+ params['includeInactive'] = val.to_s == 'on' || val.to_s == 'true' || val.to_s == '1' || val.to_s == ''
32
+ end
33
+ opts.on('--platform PLATFORM', Array, "Filter by platform eg. linux, windows") do |val|
34
+ params['platform'] = val.collect {|it| it.to_s.strip.empty? ? nil : it.to_s.strip }.compact
35
+ end
36
+ opts.on('--price-unit UNIT', Array, "Filter by priceUnit eg. hour, month") do |val|
37
+ params['priceUnit'] = val.collect {|it| it.to_s.strip.empty? ? nil : it.to_s.strip }.compact
38
+ end
39
+ opts.on('--currency CURRENCY', Array, "Filter by currency eg. usd") do |val|
40
+ params['currency'] = val.collect {|it| it.to_s.strip.empty? ? nil : it.to_s.strip }.compact
41
+ end
42
+ opts.on('--price-type TYPE', String, "Filter by priceType eg. fixed,platform,software,compute,storage,datastore,memory,cores,cpu") do |val|
43
+ add_query_parameter(params, 'priceType', parse_array(val).collect {|it| get_price_type_code(it) })
44
+ end
45
+ build_common_options(opts, options, [:list, :query, :json, :yaml, :csv, :fields, :dry_run, :remote])
46
+ opts.footer = "List prices."
47
+ end
48
+ optparse.parse!(args)
49
+ #verify_args!(args:args, optparse:optparse, count:0)
50
+ connect(options)
51
+
52
+ params.merge!(parse_list_options(options))
53
+ params['phrase'] = args.join(' ') if args.count > 0 && params['phrase'].nil? # pass args as phrase, every list command should do this
54
+ load_whoami()
55
+ @prices_interface.setopts(options)
56
+ if options[:dry_run]
57
+ print_dry_run @prices_interface.dry.list(params)
58
+ return
59
+ end
60
+ json_response = @prices_interface.list(params)
61
+ prices = json_response['prices']
62
+ render_response(json_response, options, 'prices') do
63
+ title = "Prices"
64
+ subtitles = []
65
+ subtitles += parse_list_subtitles(options)
66
+ print_h1 title, subtitles
67
+ if prices.empty?
68
+ print cyan,"No prices found.",reset,"\n"
69
+ else
70
+ rows = prices.collect do |it|
71
+ {
72
+ id: (it['active'] ? cyan : yellow) + it['id'].to_s,
73
+ name: it['name'],
74
+ active: format_boolean(it['active']),
75
+ priceType: price_type_label(it['priceType']),
76
+ tenant: it['account'].nil? ? (is_master_account ? 'All Tenants' : nil) : it['account']['name'],
77
+ priceUnit: it['priceUnit'].nil? ? nil : it['priceUnit'].capitalize,
78
+ priceAdjustment: it['markupType'].nil? ? 'None' : it['markupType'].capitalize,
79
+ cost: price_prefix(it) + format_amount(it['cost'] || 0),
80
+ markup: price_markup(it),
81
+ price: price_prefix(it) + format_amount(it['markupType'] == 'custom' ? it['customPrice'] || 0 : it['price'] || 0) + cyan
82
+ }
83
+ end
84
+ columns = [
85
+ :id, :name, :active, {'PRICE TYPE' => :priceType}, :tenant, {'PRICE UNIT' => :priceUnit}, {'PRICE ADJUSTMENT' => :priceAdjustment}, :cost, :markup, :price
86
+ ]
87
+ columns.delete(:active) if !params['includeInactive']
88
+
89
+ print as_pretty_table(rows, columns, options)
90
+ print_results_pagination(json_response)
91
+ end
92
+ print reset,"\n"
93
+ end
94
+ return 0, nil
95
+ end
96
+
97
+ def get(args)
98
+ options = {}
99
+ optparse = MtnCloud::Cli::OptionParser.new do |opts|
100
+ opts.banner = subcommand_usage("[price]")
101
+ build_common_options(opts, options, [:json, :dry_run, :remote])
102
+ opts.footer = "Get details about a price.\n" +
103
+ "[price] is required. Price ID, name or code"
104
+ end
105
+ optparse.parse!(args)
106
+ if args.count != 1
107
+ raise_command_error "wrong number of arguments, expected 1 and got (#{args.count}) #{args}\n#{optparse}"
108
+ end
109
+ connect(options)
110
+ return _get(args[0], options)
111
+ end
112
+
113
+ def _get(price_id, options = {})
114
+ params = {}
115
+ begin
116
+ @prices_interface.setopts(options)
117
+
118
+ if !(price_id.to_s =~ /\A\d{1,}\Z/)
119
+ price = find_price(price_id)
120
+
121
+ if !price
122
+ print_red_alert "Price #{price_id} not found"
123
+ exit 1
124
+ end
125
+ price_id = price['id']
126
+ end
127
+
128
+ if options[:dry_run]
129
+ print_dry_run @prices_interface.dry.get(price_id)
130
+ return
131
+ end
132
+ json_response = @prices_interface.get(price_id)
133
+
134
+ render_result = render_with_format(json_response, options, 'price')
135
+ return 0 if render_result
136
+
137
+ title = "Price"
138
+ subtitles = []
139
+ subtitles += parse_list_subtitles(options)
140
+ print_h1 title, subtitles
141
+
142
+ price = json_response['price']
143
+ print cyan
144
+ description_cols = {
145
+ "ID" => lambda {|it| it['id']},
146
+ "Name" => lambda {|it| it['name']},
147
+ "Code" => lambda {|it| it['code']},
148
+ "Tenant" => lambda {|it| it['account'].nil? ? (is_master_account ? 'All Tenants' : nil) : it['account']['name']},
149
+ "Price Type" => lambda {|it| price_type_label(it['priceType'])}
150
+ }
151
+
152
+ if price['priceType'] == 'platform'
153
+ description_cols['Platform'] = lambda {|it| it['platform'].nil? ? nil : it['platform'].capitalize}
154
+ elsif price['priceType'] == 'software'
155
+ description_cols['Software'] = lambda {|it| it['software'].nil? ? nil : it['software']}
156
+ elsif price['priceType'] == 'storage'
157
+ description_cols['Volume Type'] = lambda {|it| it['volumeType'].nil? ? nil : it['volumeType']['name']}
158
+ elsif price['priceType'] == 'datastore'
159
+ description_cols['Data Store'] = lambda {|it| it['datastore'].nil? ? nil : it['datastore']['name']}
160
+ description_cols['Apply Across Clouds'] = lambda {|it| it['crossCloudApply'] == true ? 'On' : 'Off'}
161
+ end
162
+
163
+ description_cols['Price Unit'] = lambda {|it| it['priceUnit'].nil? ? nil : it['priceUnit'].capitalize}
164
+ description_cols['Incur Charges'] = lambda {|it| it['incurCharges'].nil? ? nil : (it['incurCharges'] != 'always' ? 'While ' : '') + it['incurCharges'].capitalize}
165
+ description_cols['Currency'] = lambda {|it| (it['currency'] || '').upcase}
166
+ description_cols['Cost'] = lambda {|it| price_prefix(it) + format_amount(it['cost'] || 0)}
167
+ description_cols['Price Adjustment'] = lambda {|it| it['markupType'].nil? ? 'None' : it['markupType'].capitalize}
168
+
169
+ if ['fixed', 'percent'].include?(price['markupType'])
170
+ description_cols['Markup'] = lambda {|it| price_markup(it)}
171
+ end
172
+
173
+ description_cols['Custom Price'] = lambda {|it| price_prefix(it) + format_amount(it['customPrice'] || 0)}
174
+
175
+ print_description_list(description_cols, price)
176
+ print reset,"\n"
177
+ return 0
178
+ rescue RestClient::Exception => e
179
+ print_rest_exception(e, options)
180
+ exit 1
181
+ end
182
+ end
183
+
184
+ def add(args)
185
+ options = {}
186
+ params = {}
187
+
188
+ optparse = MtnCloud::Cli::OptionParser.new do |opts|
189
+ opts.banner = subcommand_usage("[name] [code]")
190
+ opts.on("--name NAME", String, "Price name") do |val|
191
+ params['name'] = val.to_s
192
+ end
193
+ opts.on("--code CODE", String, "Price code, unique identifier") do |val|
194
+ params['code'] = val.to_s
195
+ end
196
+ opts.on("--tenant [ACCOUNT|all]", String, "Tenant account or all. Apply price to all tenants when not set.") do |val|
197
+ options[:tenant] = val
198
+ end
199
+ opts.on("--type [TYPE]", String, "Price type") do |val|
200
+ if price_types[val]
201
+ params['priceType'] = val
202
+ else
203
+ raise_command_error "Invalid price type '#{val}'. Available price types: #{price_types.keys.join(', ')}"
204
+ end
205
+ end
206
+ opts.on("--unit [UNIT]", String, "Price unit") do |val|
207
+ if price_units.include?(val)
208
+ params['priceUnit'] = val
209
+ else
210
+ raise_command_error "Invalid price unit '#{val}'. Available price units: #{price_units.join(', ')}"
211
+ end
212
+ end
213
+ opts.on("--platform [PLATFORM]", String, "Price platform [centos|debian|fedora|canonical|opensuse|redhat|suse|xen|linux|windows]. Required for platform price type") do |val|
214
+ if ['centos','debian','fedora','canonical','opensuse','redhat','suse','xen','linux', 'windows'].include?(val)
215
+ params['platform'] = val
216
+ else
217
+ raise_command_error "Invalid platform '#{val}'. Available platforms/vendors: centos, debian, fedora, canonical, opensuse, redhat, suse, xen, linux, windows"
218
+ end
219
+ end
220
+ opts.on("--software [TEXT]", String, "Price software. Required for software price type") do |val|
221
+ params['software'] = val
222
+ end
223
+ opts.on("--volume [TYPE]", String, "Volume type ID or name. Required for storage price type") do |val|
224
+ options[:volumeType] = val
225
+ end
226
+ opts.on("--datastore [DATASTORE]", String, "Datastore ID or name. Required for datastore price type") do |val|
227
+ options[:datastore] = val
228
+ end
229
+ opts.on("--cross-apply [on|off]", String, "Apply price across clouds. Applicable for datastore price type only") do |val|
230
+ options[:crossCloudApply] = val.to_s == 'on' || val.to_s == 'true' || val.to_s == '1' || val.to_s == ''
231
+ end
232
+ opts.on("--incur [WHEN]", String, "Incur charges [running|stopped|always]") do |val|
233
+ if ['running', 'stopped', 'always'].include?(val)
234
+ params['incurCharges'] = val
235
+ else
236
+ raise_command_error "Invalid incur charges '#{val}'. Available options: running, stopped, always"
237
+ end
238
+ end
239
+ opts.on("--currency [CURRENCY]", String, "Price currency") do |val|
240
+ options[:currency] = val
241
+ end
242
+ opts.on("--cost [AMOUNT]", Float, "Price cost") do |val|
243
+ params['cost'] = val
244
+ end
245
+ opts.on("--fixed-markup [AMOUNT]", Float, "Add fixed price adjustment") do |val|
246
+ params['markupType'] = 'fixed'
247
+ params['markup'] = val
248
+ end
249
+ opts.on("--percent-markup [PERCENT]", Float, "Add percent price adjustment") do |val|
250
+ params['markupType'] = 'percent'
251
+ params['markupPercent'] = val
252
+ end
253
+ opts.on("--custom-price [AMOUNT]", Float, "Set customer price directly. Can be used to override price calculation based on cost and markup") do |val|
254
+ params['markupType'] = 'custom'
255
+ params['customPrice'] = val
256
+ end
257
+ build_common_options(opts, options, [:options, :payload, :json, :dry_run, :remote, :quiet])
258
+ opts.footer = "Create price"
259
+ end
260
+ optparse.parse!(args)
261
+ connect(options)
262
+ if args.count > 2
263
+ raise_command_error "wrong number of arguments, expected 0-2 and got (#{args.count}) #{args}\n#{optparse}"
264
+ return 1
265
+ end
266
+
267
+ if options[:currency]
268
+ if avail_currencies.include?(options[:currency].upcase)
269
+ params['currency'] = options[:currency].upcase
270
+ else
271
+ raise_command_error "Unsupported currency '#{options[:currency]}'. Available currencies: #{avail_currencies.join(', ')}"
272
+ return 1
273
+ end
274
+ end
275
+
276
+ begin
277
+ payload = parse_payload(options)
278
+
279
+ if !payload
280
+ # name
281
+ params['name'] ||= args[0] || MtnCloud::Cli::OptionTypes.prompt([{'fieldName' => 'name', 'type' => 'text', 'fieldLabel' => 'Price Name', 'required' => true, 'description' => 'Price Set Name.'}],options[:options],@api_client,{}, options[:no_prompt])['name']
282
+
283
+ # code
284
+ params['code'] ||= args[1] || MtnCloud::Cli::OptionTypes.prompt([{'fieldName' => 'code', 'type' => 'text', 'fieldLabel' => 'Price Code', 'required' => true, 'defaultValue' => params['name'].gsub(/[^0-9a-z ]/i, '').gsub(' ', '.').downcase, 'description' => 'Price Set Code.'}],options[:options],@api_client,{}, options[:no_prompt])['code']
285
+
286
+ # tenant
287
+ if options[:tenant].nil?
288
+ account_id = MtnCloud::Cli::OptionTypes.prompt([{'fieldName' => 'account', 'type' => 'select', 'fieldLabel' => 'Tenant', 'required' => false, 'description' => 'Assign price to tenant', 'selectOptions' => accounts_interface.list()['accounts'].collect {|it| {'name' => it['name'], 'value' => it['id']}}}], options[:options], @api_client, {}, options[:no_prompt])['account']
289
+ if account_id
290
+ params['account'] = {'id' => account_id}
291
+ end
292
+ elsif options[:tenant] != 'all'
293
+ if account = find_account_by_name_or_id(options[:tenant])
294
+ params['account'] = {'id' => account['id']}
295
+ else
296
+ print_red_alert "Tenant #{options[:tenant]} not found"
297
+ exit 1
298
+ end
299
+ end
300
+
301
+ # type (platform, software, datastore, storage)
302
+ params['priceType'] ||= MtnCloud::Cli::OptionTypes.prompt([{'fieldName' => 'priceType', 'type' => 'select', 'fieldLabel' => 'Price Type', 'required' => true, 'description' => 'Select price type', 'selectOptions' => price_types.collect {|k,v| {'name' => v, 'value' => k}}}], options[:options], @api_client, {}, options[:no_prompt])['priceType']
303
+
304
+ # price type
305
+ prompt_for_price_type(params, options)
306
+
307
+ # unit
308
+ params['priceUnit'] ||= MtnCloud::Cli::OptionTypes.prompt(['fieldName' => 'priceUnit', 'type' => 'select', 'fieldLabel' => 'Price Unit', 'required' => true, 'description' => 'Select price unit', 'defaultValue' => 'month', 'selectOptions' => price_units.collect {|it| {'name' => it.split(' ').collect {|it| it.capitalize}.join(' '), 'value' => it}}], options[:options], @api_client, {}, options[:no_prompt])['priceUnit']
309
+
310
+ # incur
311
+ params['incurCharges'] ||= MtnCloud::Cli::OptionTypes.prompt(['fieldName' => 'incurCharges', 'type' => 'select', 'fieldLabel' => 'Incur Charges', 'required' => true, 'description' => 'Select when to incur charges', 'defaultValue' => 'running', 'selectOptions' => [{'name' => 'When Running', 'value' => 'running'}, {'name' => 'When Stopped', 'value' => 'stopped'}, {'name' => 'Always', 'value' => 'always'}]], options[:options], @api_client, {}, options[:no_prompt])['incurCharges']
312
+
313
+ # currency
314
+ params['currency'] ||= MtnCloud::Cli::OptionTypes.prompt(['fieldName' => 'currency', 'type' => 'select', 'fieldLabel' => 'Currency', 'required' => true, 'description' => 'Select when to incur charges', 'defaultValue' => 'USD', 'selectOptions' => avail_currencies.collect {|it| {'value' => it}}], options[:options], @api_client, {}, options[:no_prompt])['currency']
315
+
316
+ # cost
317
+ if params['cost'].nil?
318
+ params['cost'] = MtnCloud::Cli::OptionTypes.prompt([{'fieldName' => 'cost', 'type' => 'number', 'fieldLabel' => 'Cost', 'required' => true, 'description' => 'Price cost', 'defaultValue' => 0.0}],options[:options],@api_client,{}, options[:no_prompt])['cost']
319
+ end
320
+
321
+ # adjustment / markup type
322
+ if params['markupType'].nil?
323
+ markup_type = MtnCloud::Cli::OptionTypes.prompt([{'fieldName' => 'markupType', 'type' => 'select', 'fieldLabel' => 'Price Adjustment', 'required' => false, 'description' => 'Price Adjustment', 'selectOptions' => [{'name' => 'None', 'value' => 'none'}, {'name' => 'Fixed Markup', 'value' => 'fixed'}, {'name' => 'Percent Markup', 'value' => 'percent'}, {'name' => 'Custom Price', 'value' => 'custom'}], 'defaultValue' => 'none'}],options[:options],@api_client,{}, options[:no_prompt])['markupType']
324
+
325
+ if markup_type && markup_type != 'none'
326
+ params['markupType'] = markup_type
327
+ end
328
+ end
329
+
330
+ prompt_for_markup_type(params, options)
331
+
332
+ payload = {'price' => params}
333
+ end
334
+
335
+ @prices_interface.setopts(options)
336
+ if options[:dry_run]
337
+ print_dry_run @prices_interface.dry.create(payload)
338
+ return
339
+ end
340
+ json_response = @prices_interface.create(payload)
341
+
342
+ if options[:json]
343
+ puts as_json(json_response, options)
344
+ elsif !options[:quiet]
345
+ if json_response['success']
346
+ print_green_success "Price created"
347
+ _get(json_response['id'], options)
348
+ else
349
+ print_red_alert "Error creating price: #{json_response['msg'] || json_response['errors']}"
350
+ end
351
+ end
352
+ return 0
353
+ rescue RestClient::Exception => e
354
+ print_rest_exception(e, options)
355
+ exit 1
356
+ end
357
+ end
358
+
359
+ def update(args)
360
+ options = {}
361
+ params = {}
362
+
363
+ optparse = MtnCloud::Cli::OptionParser.new do |opts|
364
+ opts.banner = subcommand_usage("[price]")
365
+ opts.on("--name NAME", String, "Price name") do |val|
366
+ params['name'] = val.to_s
367
+ end
368
+ opts.on("--type [TYPE]", String, "Price type") do |val|
369
+ if price_types[val]
370
+ params['priceType'] = val
371
+ else
372
+ raise_command_error "Invalid price type '#{val}'. Available price types: #{price_types.keys.join(', ')}"
373
+ end
374
+ end
375
+ opts.on("--unit [UNIT]", String, "Price unit") do |val|
376
+ if price_units.include?(val)
377
+ params['priceUnit'] = val
378
+ else
379
+ raise_command_error "Invalid price unit '#{val}'. Available price units: #{price_units.join(', ')}"
380
+ end
381
+ end
382
+ opts.on("--platform [PLATFORM]", String, "Price platform [centos|debian|fedora|canonical|opensuse|redhat|suse|xen|linux|windows]. Required for platform price type") do |val|
383
+ if ['centos','debian','fedora','canonical','opensuse','redhat','suse','xen','linux', 'windows'].include?(val)
384
+ params['platform'] = val
385
+ else
386
+ raise_command_error "Invalid platform '#{val}'. Available platforms: centos, debian, fedora, canonical, opensuse, redhat, suse, xen, linux, windows"
387
+ end
388
+ end
389
+ opts.on("--software [TEXT]", String, "Price software. Required for software price type") do |val|
390
+ params['software'] = val
391
+ end
392
+ opts.on("--volume [TYPE]", String, "Volume type ID or name. Required for storage price type") do |val|
393
+ options[:volumeType] = val
394
+ end
395
+ opts.on("--datastore [DATASTORE]", String, "Datastore ID or name. Required for datastore price type") do |val|
396
+ options[:datastore] = val
397
+ end
398
+ opts.on("--cross-apply [on|off]", String, "Apply price across clouds. Applicable for datastore price type only") do |val|
399
+ options[:crossCloudApply] = val.to_s == 'on' || val.to_s == 'true' || val.to_s == '1' || val.to_s == ''
400
+ end
401
+ opts.on("--incur [WHEN]", String, "Incur charges [running|stopped|always]") do |val|
402
+ if ['running', 'stopped', 'always'].include?(val)
403
+ params['incurCharges'] = val
404
+ else
405
+ raise_command_error "Invalid incur charges '#{val}'. Available options: running, stopped, always"
406
+ end
407
+ end
408
+ opts.on("--currency [CURRENCY]", String, "Price currency") do |val|
409
+ options[:currency] = val
410
+ end
411
+ opts.on("--cost [AMOUNT]", Float, "Price cost") do |val|
412
+ params['cost'] = val
413
+ end
414
+ opts.on("--fixed-markup [AMOUNT]", Float, "Add fixed price adjustment") do |val|
415
+ params['markupType'] = 'fixed'
416
+ params['markup'] = val
417
+ end
418
+ opts.on("--percent-markup [PERCENT]", Float, "Add percent price adjustment") do |val|
419
+ params['markupType'] = 'percent'
420
+ params['markupPercent'] = val
421
+ end
422
+ opts.on("--custom-price [AMOUNT]", Float, "Set customer price directly. Can be used to override price calculation based on cost and markup") do |val|
423
+ params['markupType'] = 'custom'
424
+ params['customPrice'] = val
425
+ end
426
+ opts.on("--restart-usage [on|off]", String, "Apply price changes to usage. Default is on") do |val|
427
+ params['restartUsage'] = val.to_s == 'on' || val.to_s == 'true' || val.to_s == '1' || val.to_s == ''
428
+ end
429
+ build_common_options(opts, options, [:options, :payload, :json, :dry_run, :remote, :quiet])
430
+ opts.footer = "Update price\n[price] is required. Price ID, name or code"
431
+ end
432
+ optparse.parse!(args)
433
+ connect(options)
434
+
435
+ if args.count != 1
436
+ raise_command_error "wrong number of arguments, expected 1 and got (#{args.count}) #{args}\n#{optparse}"
437
+ return 1
438
+ end
439
+
440
+ if options[:currency]
441
+ if avail_currencies.include?(options[:currency].upcase)
442
+ params['currency'] = options[:currency].upcase
443
+ else
444
+ raise_command_error "Unsupported currency '#{options[:currency]}'. Available currencies: #{avail_currencies.join(', ')}"
445
+ return 1
446
+ end
447
+ end
448
+
449
+ begin
450
+ price = find_price(args[0])
451
+
452
+ if price.nil?
453
+ print_red_alert "Price #{args[0]} not found"
454
+ exit 1
455
+ end
456
+
457
+ payload = parse_payload(options)
458
+
459
+ if payload.nil?
460
+ # price type
461
+ prompt_for_price_type(params, options, price)
462
+
463
+ # adjustment / markup type
464
+ prompt_for_markup_type(params, options)
465
+
466
+ payload = {'price' => params}
467
+ end
468
+
469
+ if payload['price'].empty?
470
+ print_green_success "Nothing to update"
471
+ return
472
+ end
473
+
474
+ @prices_interface.setopts(options)
475
+ if options[:dry_run]
476
+ print_dry_run @prices_interface.dry.update(price['id'], payload)
477
+ return
478
+ end
479
+ json_response = @prices_interface.update(price['id'], payload)
480
+
481
+ if options[:json]
482
+ puts as_json(json_response, options)
483
+ elsif !options[:quiet]
484
+ if json_response['success']
485
+ print_green_success "Price updated"
486
+ _get(price['id'], options)
487
+ else
488
+ print_red_alert "Error updating price: #{json_response['msg'] || json_response['errors']}"
489
+ end
490
+ end
491
+ return 0
492
+ rescue RestClient::Exception => e
493
+ print_rest_exception(e, options)
494
+ exit 1
495
+ end
496
+ end
497
+
498
+ def deactivate(args)
499
+ options = {}
500
+ params = {}
501
+ optparse = MtnCloud::Cli::OptionParser.new do |opts|
502
+ opts.banner = subcommand_usage( "[price]")
503
+ build_common_options(opts, options, [:json, :dry_run, :remote])
504
+ opts.footer = "Deactivate price.\n" +
505
+ "[price] is required. Price ID, name or code"
506
+ end
507
+ optparse.parse!(args)
508
+ connect(options)
509
+ if args.count != 1
510
+ raise_command_error "wrong number of arguments, expected 1 and got (#{args.count}) #{args}\n#{optparse}"
511
+ return 1
512
+ end
513
+
514
+ begin
515
+ price = find_price(args[0])
516
+
517
+ if !price
518
+ print_red_alert "Price #{args[0]} not found"
519
+ exit 1
520
+ end
521
+
522
+ if price['active'] == false
523
+ print_green_success "Price #{price_set['name']} already deactived."
524
+ return 0
525
+ end
526
+
527
+ unless options[:yes] || ::MtnCloud::Cli::OptionTypes::confirm("Are you sure you would like to deactivate the price '#{price['name']}'?", options)
528
+ return 9, "aborted command"
529
+ end
530
+
531
+ @prices_interface.setopts(options)
532
+ if options[:dry_run]
533
+ print_dry_run @prices_interface.dry.deactivate(price['id'], params)
534
+ return
535
+ end
536
+
537
+ json_response = @prices_interface.deactivate(price['id'], params)
538
+
539
+ if options[:json]
540
+ print JSON.pretty_generate(json_response)
541
+ print "\n"
542
+ elsif !options[:quiet]
543
+ print_green_success "Price #{price['name']} deactivate"
544
+ end
545
+ return 0
546
+ rescue RestClient::Exception => e
547
+ print_rest_exception(e, options)
548
+ exit 1
549
+ end
550
+ end
551
+
552
+ private
553
+
554
+ def find_price(val)
555
+ (val.to_s =~ /\A\d{1,}\Z/) ? @prices_interface.get(val.to_i)['price'] : @prices_interface.list({'code' => val, 'name' => val})['prices'].first
556
+ end
557
+
558
+ def find_datastore(val)
559
+ (val.to_s =~ /\A\d{1,}\Z/) ? @prices_interface.get_datastore(val.to_i)['datastore'] : @prices_interface.list_datastores({'name' => val})['datastores'].first
560
+ end
561
+
562
+ def find_volume_type(val)
563
+ (val.to_s =~ /\A\d{1,}\Z/) ? @prices_interface.get_volume_type(val.to_i)['volumeType'] : @prices_interface.list_volume_types({'name' => val})['volumeTypes'].first
564
+ end
565
+
566
+ def price_prefix(price)
567
+ (['platform', 'software'].include?(price['priceType']) ? '+' : '') + currency_symbol(price['currency'])
568
+ end
569
+
570
+ def price_markup(price)
571
+ if price['markupType'] == 'fixed'
572
+ currency_symbol(price['currency']) + format_amount(price['markup'] || 0)
573
+ elsif price['markupType'] == 'percent'
574
+ (price['markupPercent'] || 0).to_s + '%'
575
+ else
576
+ 'N/A'
577
+ end
578
+ end
579
+
580
+ def price_type_label(type)
581
+ price_types[type] || type.to_s.capitalize
582
+ end
583
+
584
+ def price_types
585
+ {
586
+ 'fixed' => 'Everything',
587
+ 'compute' => 'Memory + CPU',
588
+ 'memory' => 'Memory Only',
589
+ 'cores' => 'Cores Only',
590
+ 'storage' => 'Disk Only',
591
+ 'datastore' => 'Datastore',
592
+ 'platform' => 'Platform',
593
+ 'software' => 'Software',
594
+ 'load_balancer' => 'Load Balancer',
595
+ 'load_balancer_virtual_server' => 'Load Balancer Virtual Server',
596
+ }
597
+ end
598
+
599
+ def get_price_type_code(value)
600
+ rtn = value
601
+ price_types.each do |k,v|
602
+ if value.to_s.downcase == v.downcase
603
+ rtn = k
604
+ end
605
+ end
606
+ return rtn
607
+ end
608
+
609
+ def price_units
610
+ ['minute', 'hour', 'day', 'month', 'year', 'two year', 'three year', 'four year', 'five year']
611
+ end
612
+
613
+ def format_amount(amount)
614
+ rtn = amount.to_s
615
+ if rtn.index('.').nil?
616
+ rtn += '.00'
617
+ elsif rtn.split('.')[1].length < 2
618
+ rtn = rtn + (['0'] * (2 - rtn.split('.')[1].length) * '')
619
+ end
620
+ rtn
621
+ end
622
+
623
+ def avail_currencies
624
+ if @avail_currencies.nil?
625
+ @avail_currencies = @prices_interface.list_currencies()['currencies'].collect {|it| it['value']}
626
+ end
627
+ @avail_currencies
628
+ end
629
+
630
+ def prompt_for_price_type(params, options, price={})
631
+ case params['priceType']
632
+ when 'platform'
633
+ params['platform'] ||= price['platform'] || MtnCloud::Cli::OptionTypes.prompt([{'fieldName' => 'platform', 'type' => 'select', 'fieldLabel' => 'Platform', 'required' => true, 'description' => 'Select platform for platform price type', 'selectOptions' => [ {'name' => 'CentOS', 'value' => 'centos'}, {'name' => 'Debian', 'value' => 'debian'}, {'name' => 'Fedora', 'value' => 'fedora'}, {'name' => 'Canonical', 'value' => 'canonical'}, {'name' => 'openSUSE', 'value' => 'opensuse'}, {'name' => 'Red Hat', 'value' => 'redhat'}, {'name' => 'SUSE', 'value' => 'suse'}, {'name' => 'Xen', 'value' => 'xen'}, {'name' => 'Linux', 'value' => 'linux'}, {'name' => 'Windows', 'value' => 'windows'}]}], options[:options], @api_client, {}, options[:no_prompt])['platform']
634
+ when 'software'
635
+ params['software'] ||= price['software'] || MtnCloud::Cli::OptionTypes.prompt([{'fieldName' => 'software', 'type' => 'text', 'fieldLabel' => 'Software', 'required' => true, 'description' => 'Set software for software price type'}], options[:options], @api_client,{}, options[:no_prompt])['software']
636
+ when 'datastore'
637
+ if options[:datastore]
638
+ datastore = find_datastore(options[:datastore])
639
+ if datastore
640
+ params['datastore'] = {'id' => datastore['id']}
641
+ else
642
+ print_red_alert "Datastore #{options[:datastore]} not found"
643
+ exit 1
644
+ end
645
+ else
646
+ datastore_id = MtnCloud::Cli::OptionTypes.prompt(['fieldName' => 'datastore', 'type' => 'select', 'fieldLabel' => 'Datastore', 'required' => true, 'description' => 'Select datastore for datastore price type', 'selectOptions' => @prices_interface.list_datastores['datastores'].collect {|it| {'name' => it['name'], 'value' => it['id']}}], options[:options], @api_client, {}, options[:no_prompt])['datastore']
647
+ params['datastore'] = {'id' => datastore_id}
648
+ end
649
+
650
+ if options[:crossCloudApply].nil?
651
+ if !options[:no_prompt]
652
+ params['crossCloudApply'] = price['crossCloudApply'] || MtnCloud::Cli::OptionTypes.confirm("Apply price across clouds?", {:default => false})
653
+ end
654
+ else
655
+ params['crossCloudApply'] = options[:crossCloudApply]
656
+ end
657
+ when 'storage'
658
+ if options[:volumeType]
659
+ volume_type = find_volume_type(options[:volumeType])
660
+ if volume_type
661
+ params['volumeType'] = {'id' => volume_type['id']}
662
+ else
663
+ print_red_alert "Volume type #{options[:volumeType]} not found"
664
+ exit 1
665
+ end
666
+ else
667
+ volume_type_id = (price['volumeType'] ? price['volumeType']['id'] : MtnCloud::Cli::OptionTypes.prompt(['fieldName' => 'volumeType', 'type' => 'select', 'fieldLabel' => 'Volume Type', 'required' => true, 'description' => 'Select volume type for storage price type', 'selectOptions' => @prices_interface.list_volume_types['volumeTypes'].collect {|it| {'name' => it['name'], 'value' => it['id']}}], options[:options], @api_client, {}, options[:no_prompt], true)['volumeType'])
668
+ params['volumeType'] = {'id' => volume_type_id}
669
+ end
670
+ end
671
+ end
672
+
673
+ def prompt_for_markup_type(params, options, price={})
674
+ case params['markupType']
675
+ when 'percent'
676
+ params['markupPercent'] = price['markupPercent'] if params['markupPercent'].nil?
677
+ if params['markupPercent'].nil?
678
+ params['markupPercent'] = MtnCloud::Cli::OptionTypes.prompt([{'fieldName' => 'markupPercent', 'type' => 'number', 'fieldLabel' => 'Markup Percent', 'required' => true, 'description' => 'Markup Percent'}],options[:options],@api_client,{}, options[:no_prompt])['markupPercent']
679
+ end
680
+ when 'fixed'
681
+ params['markup'] = price['markup'] if params['markup'].nil?
682
+ if params['markup'].nil?
683
+ params['markup'] = MtnCloud::Cli::OptionTypes.prompt([{'fieldName' => 'markup', 'type' => 'number', 'fieldLabel' => 'Markup Amount', 'required' => true, 'description' => 'Markup Amount'}],options[:options],@api_client,{}, options[:no_prompt])['markup']
684
+ end
685
+ when 'custom'
686
+ params['customPrice'] = price['customPrice'] if params['customPrice'].nil?
687
+ if params['customPrice'].nil?
688
+ params['customPrice'] = MtnCloud::Cli::OptionTypes.prompt([{'fieldName' => 'customPrice', 'type' => 'number', 'fieldLabel' => 'Price', 'required' => true, 'description' => 'Price'}],options[:options],@api_client,{}, options[:no_prompt])['customPrice']
689
+ end
690
+ end
691
+ end
692
+ end