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,849 @@
1
+ require 'mtncloud/cli/cli_command'
2
+
3
+ class MtnCloud::Cli::UserSettingsCommand
4
+ include MtnCloud::Cli::CliCommand
5
+ include MtnCloud::Cli::AccountsHelper
6
+
7
+ set_command_name :'user-settings'
8
+
9
+ register_subcommands :get, :update, :'update-avatar', :'remove-avatar', :'view-avatar', :'update-desktop-background', :'remove-desktop-background', :'view-desktop-background', :'regenerate-access-token', :'clear-access-token', :'list-clients'
10
+
11
+ set_default_subcommand :get
12
+
13
+ def initialize()
14
+ # @appliance_name, @appliance_url = MtnCloud::Cli::Remote.active_appliance
15
+ end
16
+
17
+ def connect(opts)
18
+ @api_client = establish_remote_appliance_connection(opts)
19
+ @user_settings_interface = @api_client.user_settings
20
+ @accounts_interface = @api_client.accounts
21
+ @account_users_interface = @api_client.account_users
22
+ end
23
+
24
+ def handle(args)
25
+ handle_subcommand(args)
26
+ end
27
+
28
+ def get(args)
29
+ raw_args = args
30
+ options = {}
31
+ params = {}
32
+ optparse = MtnCloud::Cli::OptionParser.new do |opts|
33
+ opts.banner = subcommand_usage()
34
+ opts.on("-u", "--user USER", "User username or ID") do |val|
35
+ options[:user] = val.to_s
36
+ end
37
+ opts.on("--user-id ID", String, "User ID") do |val|
38
+ params['userId'] = val.to_s
39
+ end
40
+ #opts.add_hidden_option('--user-id')
41
+ build_common_options(opts, options, [:query, :json, :yaml, :csv, :fields, :dry_run, :remote])
42
+ opts.footer = <<-EOT
43
+ Get user settings.
44
+ Done for the current user by default, unless a user is specified with the --user option.
45
+ EOT
46
+ end
47
+ optparse.parse!(args)
48
+ connect(options)
49
+ if args.count != 0
50
+ print_error MtnCloud::Terminal.angry_prompt
51
+ puts_error "wrong number of arguments, expected 0 and got (#{args.count}) #{args.inspect}\n#{optparse}"
52
+ return 1
53
+ end
54
+
55
+ if options[:user]
56
+ user = find_user_by_username_or_id(nil, options[:user], {global:true})
57
+ return 1 if user.nil?
58
+ params['userId'] = user['id']
59
+ end
60
+ params.merge!(parse_list_options(options))
61
+ @user_settings_interface.setopts(options)
62
+ if options[:dry_run]
63
+ print_dry_run @user_settings_interface.dry.get(params)
64
+ return
65
+ end
66
+ json_response = @user_settings_interface.get(params)
67
+
68
+ render_response(json_response, options) do
69
+
70
+ user_settings = json_response['user'] || json_response['userSettings']
71
+ access_tokens = user_settings['accessTokens'] || json_response['accessTokens'] || json_response['apiAccessTokens'] || []
72
+
73
+ print_h1 "User Settings"
74
+ print cyan
75
+ description_cols = {
76
+ #"ID" => lambda {|it| it['id'] },
77
+ "ID" => lambda {|it| it['id'] },
78
+ "Username" => lambda {|it| it['username'] },
79
+ "First Name" => lambda {|it| it['firstName'] },
80
+ "Last Name" => lambda {|it| it['lastName'] },
81
+ "Email" => lambda {|it| it['email'] },
82
+ "Theme" => lambda {|it| it['activeTheme'] ? it['activeTheme'] : '' },
83
+ "Avatar" => lambda {|it| it['avatar'] ? it['avatar'].split('/').last : '' },
84
+ "Notifications" => lambda {|it| format_boolean(it['receiveNotifications']) },
85
+ "Linux Username" => lambda {|it| it['linuxUsername'] },
86
+ "Linux Password" => lambda {|it| it['linuxPassword'] },
87
+ "Linux Key Pair" => lambda {|it| it['linuxKeyPairId'] },
88
+ "Windows Username" => lambda {|it| it['windowsUsername'] },
89
+ "Windows Password" => lambda {|it| it['windowsPassword'] },
90
+ "Default Group" => lambda {|it| it['defaultGroup'] ? it['defaultGroup']['name'] : '' },
91
+ "Default Cloud" => lambda {|it| it['defaultCloud'] ? it['defaultCloud']['name'] : '' },
92
+ "Default Persona" => lambda {|it| it['defaultPersona'] ? it['defaultPersona']['name'] : '' },
93
+ "Desktop Background" => lambda {|it| it['desktopBackground'] ? it['desktopBackground'].split('/').last : '' },
94
+ "2FA Enabled" => lambda {|it| it['isUsing2FA'].nil? ? '' : format_boolean(it['isUsing2FA']) },
95
+ }
96
+ print_description_list(description_cols, user_settings)
97
+
98
+ if access_tokens && !access_tokens.empty?
99
+ print_h2 "API Access Tokens"
100
+ cols = {
101
+ "ID" => lambda {|it| it['id'] },
102
+ "CLIENT ID" => lambda {|it| it['clientId'] },
103
+ "USERNAME" => lambda {|it| it['username'] },
104
+ "ACCESS TOKEN" => lambda {|it| it['maskedAccessToken'] },
105
+ "SCOPE" => lambda {|it| it['scope'] },
106
+ "REFRESH TOKEN" => lambda {|it| it['maskedRefreshToken'] },
107
+ "ACCESS EXPIRATION" => lambda {|it| format_local_dt(it['expiration']) },
108
+ "ACCESS TTL" => lambda {|it|
109
+ if it['expiration']
110
+ expires_on = parse_time(it['expiration'])
111
+ if expires_on && expires_on < Time.now
112
+ "Expired"
113
+ else
114
+ it['expiration'] ? (format_duration(it['expiration']) rescue '') : ''
115
+ end
116
+ end
117
+ }
118
+ }
119
+ cols.delete("ID") if access_tokens[0]['id'].nil?
120
+ cols.delete("SCOPE") if access_tokens[0]['scope'].nil?
121
+ print cyan
122
+ puts as_pretty_table(access_tokens, cols)
123
+ else
124
+ #print "\n"
125
+ print cyan, "\n", "No API access tokens found", "\n\n"
126
+ end
127
+
128
+ print reset #, "\n"
129
+ end
130
+ return 0, nil
131
+ end
132
+
133
+
134
+ def update(args)
135
+ options = {}
136
+ params = {}
137
+ query_params = {}
138
+ optparse = MtnCloud::Cli::OptionParser.new do |opts|
139
+ opts.banner = subcommand_usage("[options]")
140
+ opts.on("-u", "--user USER", "User username or ID") do |val|
141
+ options[:user] = val.to_s
142
+ end
143
+ opts.on("--user-id ID", String, "User ID") do |val|
144
+ params['userId'] = val.to_s
145
+ end
146
+ #opts.add_hidden_option('--user-id')
147
+ build_option_type_options(opts, options, update_user_settings_option_types)
148
+ build_standard_update_options(opts, options)
149
+ opts.footer = <<-EOT
150
+ Update user settings.
151
+ Done for the current user by default, unless a user is specified with the --user option.
152
+ EOT
153
+ end
154
+ optparse.parse!(args)
155
+ connect(options)
156
+ if args.count != 0
157
+ print_error MtnCloud::Terminal.angry_prompt
158
+ puts_error "wrong number of arguments, expected 0 and got (#{args.count}) #{args.inspect}\n#{optparse}"
159
+ return 1
160
+ end
161
+
162
+ if options[:user]
163
+ user = find_user_by_username_or_id(nil, options[:user], {global:true})
164
+ return 1 if user.nil?
165
+ params['userId'] = user['id']
166
+ end
167
+
168
+ payload = {}
169
+ if options[:payload]
170
+ payload = options[:payload]
171
+ payload.deep_merge!({'user' => parse_passed_options(options)})
172
+ else
173
+ params.deep_merge!(parse_passed_options(options))
174
+ # do not prompt on update
175
+ v_prompt = MtnCloud::Cli::OptionTypes.no_prompt(update_user_settings_option_types, options[:options], @api_client, options[:params])
176
+ v_prompt.deep_compact!
177
+ params.deep_merge!(v_prompt)
178
+ # convert checkbox "on" and "off" to true and false
179
+ params.booleanize!
180
+ # upload requires multipart instead of json
181
+ if params['avatar']
182
+ params['avatar'] = File.new(File.expand_path(params['avatar']), 'rb')
183
+ payload[:multipart] = true
184
+ end
185
+ if params['desktopBackground']
186
+ params['desktopBackground'] = File.new(File.expand_path(params['desktopBackground']), 'rb')
187
+ payload[:multipart] = true
188
+ end
189
+ # userId goes in query string, not payload...
190
+ query_params['userId'] = params.delete('userId') if params.key?('userId')
191
+ payload.deep_merge!({'user' => params})
192
+ if payload['user'].empty? # || options[:no_prompt]
193
+ raise_command_error "Specify at least one option to update.\n#{optparse}"
194
+ end
195
+ end
196
+
197
+ @user_settings_interface.setopts(options)
198
+ if options[:dry_run]
199
+ print_dry_run @user_settings_interface.dry.update(payload, query_params)
200
+ return
201
+ end
202
+ json_response = @user_settings_interface.update(payload, query_params)
203
+ render_response(json_response, options) do
204
+ print_green_success "Updated user settings"
205
+ get_args = [] + (options[:remote] ? ["-r",options[:remote]] : []) + (query_params['userId'] ? ['--user-id', query_params['userId'].to_s] : [])
206
+ get(get_args)
207
+ end
208
+ return 0, nil
209
+
210
+ end
211
+
212
+ def update_avatar(args)
213
+ options = {}
214
+ params = {}
215
+ optparse = MtnCloud::Cli::OptionParser.new do |opts|
216
+ opts.banner = subcommand_usage("[file]")
217
+ opts.on("-u", "--user USER", "User username or ID") do |val|
218
+ options[:user] = val.to_s
219
+ end
220
+ opts.on("--user-id ID", String, "User ID") do |val|
221
+ params['userId'] = val.to_s
222
+ end
223
+ #opts.add_hidden_option('--user-id')
224
+ build_common_options(opts, options, [:json, :dry_run, :quiet, :remote])
225
+ opts.footer = <<-EOT
226
+ Update avatar profile image.
227
+ [file] is required. This is the local path of a file to upload [png|jpg|svg].
228
+ Done for the current user by default, unless a user is specified with the --user option.
229
+ EOT
230
+ end
231
+ optparse.parse!(args)
232
+ connect(options)
233
+ if args.count != 1
234
+ print_error MtnCloud::Terminal.angry_prompt
235
+ puts_error "wrong number of arguments, expected 1 and got (#{args.count}) #{args.inspect}\n#{optparse}"
236
+ return 1
237
+ end
238
+ filename = File.expand_path(args[0].to_s)
239
+ image_file = nil
240
+ if filename && File.file?(filename)
241
+ # maybe validate it's an image file? [.png|jpg|svg]
242
+ image_file = File.new(filename, 'rb')
243
+ else
244
+ # print_red_alert "File not found: #{filename}"
245
+ puts_error "#{MtnCloud::Terminal.angry_prompt}File not found: #{filename}"
246
+ return 1
247
+ end
248
+
249
+ begin
250
+ if options[:user]
251
+ user = find_user_by_username_or_id(nil, options[:user], {global:true})
252
+ return 1 if user.nil?
253
+ params['userId'] = user['id']
254
+ end
255
+ @user_settings_interface.setopts(options)
256
+ if options[:dry_run]
257
+ print_dry_run @user_settings_interface.dry.update_avatar(image_file, params)
258
+ return
259
+ end
260
+ json_response = @user_settings_interface.update_avatar(image_file, params)
261
+ if options[:quiet]
262
+ return 0
263
+ elsif options[:json]
264
+ puts as_json(json_response, options)
265
+ return 0
266
+ end
267
+
268
+ print_green_success "Updated avatar"
269
+ get_args = [] + (options[:remote] ? ["-r",options[:remote]] : []) + (params['userId'] ? ['--user-id', params['userId'].to_s] : [])
270
+ get(get_args)
271
+ return 0
272
+ rescue RestClient::Exception => e
273
+ print_rest_exception(e, options)
274
+ return 1
275
+ end
276
+ end
277
+
278
+ def remove_avatar(args)
279
+ options = {}
280
+ params = {}
281
+ optparse = MtnCloud::Cli::OptionParser.new do |opts|
282
+ opts.banner = subcommand_usage()
283
+ opts.on("-u", "--user USER", "User username or ID") do |val|
284
+ options[:user] = val.to_s
285
+ end
286
+ opts.on("--user-id ID", String, "User ID") do |val|
287
+ params['userId'] = val.to_s
288
+ end
289
+ #opts.add_hidden_option('--user-id')
290
+ build_common_options(opts, options, [:json, :dry_run, :quiet, :remote])
291
+ opts.footer = <<-EOT
292
+ Remove avatar profile image.
293
+ [file] is required. This is the local path of a file to upload [png|jpg|svg].
294
+ Done for the current user by default, unless a user is specified with the --user option.
295
+ EOT
296
+ end
297
+ optparse.parse!(args)
298
+ connect(options)
299
+ if args.count != 0
300
+ print_error MtnCloud::Terminal.angry_prompt
301
+ puts_error "wrong number of arguments, expected 0 and got (#{args.count}) #{args.inspect}\n#{optparse}"
302
+ return 1
303
+ end
304
+
305
+ begin
306
+ if options[:user]
307
+ user = find_user_by_username_or_id(nil, options[:user], {global:true})
308
+ return 1 if user.nil?
309
+ params['userId'] = user['id']
310
+ end
311
+ @user_settings_interface.setopts(options)
312
+ if options[:dry_run]
313
+ print_dry_run @user_settings_interface.dry.remove_avatar(params)
314
+ return
315
+ end
316
+ json_response = @user_settings_interface.remove_avatar(params)
317
+ if options[:quiet]
318
+ return 0
319
+ elsif options[:json]
320
+ puts as_json(json_response, options)
321
+ return 0
322
+ end
323
+
324
+ print_green_success "Removed avatar"
325
+ get_args = [] + (options[:remote] ? ["-r",options[:remote]] : []) + (params['userId'] ? ['--user-id', params['userId'].to_s] : [])
326
+ get(get_args)
327
+ return 0
328
+ rescue RestClient::Exception => e
329
+ print_rest_exception(e, options)
330
+ return 1
331
+ end
332
+ end
333
+
334
+ def view_avatar(args)
335
+ raw_args = args
336
+ options = {}
337
+ params = {}
338
+ optparse = MtnCloud::Cli::OptionParser.new do |opts|
339
+ opts.banner = subcommand_usage()
340
+ opts.on("-u", "--user USER", "User username or ID") do |val|
341
+ options[:user] = val.to_s
342
+ end
343
+ opts.on("--user-id ID", String, "User ID") do |val|
344
+ params['userId'] = val.to_s
345
+ end
346
+ #opts.add_hidden_option('--user-id')
347
+ build_common_options(opts, options, [:remote])
348
+ opts.footer = <<-EOT
349
+ View avatar profile image.
350
+ This opens the avatar image url with a web browser.
351
+ Done for the current user by default, unless a user is specified with the --user option.
352
+ EOT
353
+ end
354
+ optparse.parse!(args)
355
+ connect(options)
356
+ if args.count != 0
357
+ print_error MtnCloud::Terminal.angry_prompt
358
+ puts_error "wrong number of arguments, expected 0 and got (#{args.count}) #{args.inspect}\n#{optparse}"
359
+ return 1
360
+ end
361
+
362
+ begin
363
+ if options[:user]
364
+ user = find_user_by_username_or_id(nil, options[:user], {global:true})
365
+ return 1 if user.nil?
366
+ params['userId'] = user['id']
367
+ end
368
+ json_response = @user_settings_interface.get(params)
369
+ user_settings = json_response['user'] || json_response['userSettings']
370
+
371
+ if user_settings['avatar']
372
+ link = user_settings['avatar']
373
+ if RbConfig::CONFIG['host_os'] =~ /mswin|mingw|cygwin/
374
+ system "start #{link}"
375
+ elsif RbConfig::CONFIG['host_os'] =~ /darwin/
376
+ system "open #{link}"
377
+ elsif RbConfig::CONFIG['host_os'] =~ /linux|bsd/
378
+ system "xdg-open #{link}"
379
+ end
380
+ return 0, nil
381
+ else
382
+ print_error red,"No avatar image found.",reset,"\n"
383
+ return 1
384
+ end
385
+
386
+ rescue RestClient::Exception => e
387
+ print_rest_exception(e, options)
388
+ return 1
389
+ end
390
+ end
391
+
392
+ def update_desktop_background(args)
393
+ options = {}
394
+ params = {}
395
+ optparse = MtnCloud::Cli::OptionParser.new do |opts|
396
+ opts.banner = subcommand_usage("[file]")
397
+ opts.on("-u", "--user USER", "User username or ID") do |val|
398
+ options[:user] = val.to_s
399
+ end
400
+ opts.on("--user-id ID", String, "User ID") do |val|
401
+ params['userId'] = val.to_s
402
+ end
403
+ #opts.add_hidden_option('--user-id')
404
+ build_common_options(opts, options, [:json, :dry_run, :quiet, :remote])
405
+ opts.footer = <<-EOT
406
+ Update desktop background image used in the VDI persona.
407
+ [file] is required. This is the local path of a file to upload [png|jpg|svg].
408
+ Done for the current user by default, unless a user is specified with the --user option.
409
+ EOT
410
+ end
411
+ optparse.parse!(args)
412
+ connect(options)
413
+ if args.count != 1
414
+ print_error MtnCloud::Terminal.angry_prompt
415
+ puts_error "wrong number of arguments, expected 1 and got (#{args.count}) #{args.inspect}\n#{optparse}"
416
+ return 1
417
+ end
418
+ filename = File.expand_path(args[0].to_s)
419
+ image_file = nil
420
+ if filename && File.file?(filename)
421
+ # maybe validate it's an image file? [.png|jpg|svg]
422
+ image_file = File.new(filename, 'rb')
423
+ else
424
+ # print_red_alert "File not found: #{filename}"
425
+ puts_error "#{MtnCloud::Terminal.angry_prompt}File not found: #{filename}"
426
+ return 1
427
+ end
428
+
429
+ begin
430
+ if options[:user]
431
+ user = find_user_by_username_or_id(nil, options[:user], {global:true})
432
+ return 1 if user.nil?
433
+ params['userId'] = user['id']
434
+ end
435
+ @user_settings_interface.setopts(options)
436
+ if options[:dry_run]
437
+ print_dry_run @user_settings_interface.dry.update_desktop_background(image_file, params)
438
+ return
439
+ end
440
+ json_response = @user_settings_interface.update_desktop_background(image_file, params)
441
+ if options[:quiet]
442
+ return 0
443
+ elsif options[:json]
444
+ puts as_json(json_response, options)
445
+ return 0
446
+ end
447
+
448
+ print_green_success "Updated desktop background"
449
+ get_args = [] + (options[:remote] ? ["-r",options[:remote]] : []) + (params['userId'] ? ['--user-id', params['userId'].to_s] : [])
450
+ get(get_args)
451
+ return 0
452
+ rescue RestClient::Exception => e
453
+ print_rest_exception(e, options)
454
+ return 1
455
+ end
456
+ end
457
+
458
+ def remove_desktop_background(args)
459
+ options = {}
460
+ params = {}
461
+ optparse = MtnCloud::Cli::OptionParser.new do |opts|
462
+ opts.banner = subcommand_usage()
463
+ opts.on("-u", "--user USER", "User username or ID") do |val|
464
+ options[:user] = val.to_s
465
+ end
466
+ opts.on("--user-id ID", String, "User ID") do |val|
467
+ params['userId'] = val.to_s
468
+ end
469
+ #opts.add_hidden_option('--user-id')
470
+ build_common_options(opts, options, [:json, :dry_run, :quiet, :remote])
471
+ opts.footer = <<-EOT
472
+ Remove desktop background image.
473
+ [file] is required. This is the local path of a file to upload [png|jpg|svg].
474
+ Done for the current user by default, unless a user is specified with the --user option.
475
+ EOT
476
+ end
477
+ optparse.parse!(args)
478
+ connect(options)
479
+ if args.count != 0
480
+ print_error MtnCloud::Terminal.angry_prompt
481
+ puts_error "wrong number of arguments, expected 0 and got (#{args.count}) #{args.inspect}\n#{optparse}"
482
+ return 1
483
+ end
484
+
485
+ begin
486
+ if options[:user]
487
+ user = find_user_by_username_or_id(nil, options[:user], {global:true})
488
+ return 1 if user.nil?
489
+ params['userId'] = user['id']
490
+ end
491
+ @user_settings_interface.setopts(options)
492
+ if options[:dry_run]
493
+ print_dry_run @user_settings_interface.dry.remove_desktop_background(params)
494
+ return
495
+ end
496
+ json_response = @user_settings_interface.remove_desktop_background(params)
497
+ if options[:quiet]
498
+ return 0
499
+ elsif options[:json]
500
+ puts as_json(json_response, options)
501
+ return 0
502
+ end
503
+
504
+ print_green_success "Removed desktop background"
505
+ get_args = [] + (options[:remote] ? ["-r",options[:remote]] : []) + (params['userId'] ? ['--user-id', params['userId'].to_s] : [])
506
+ get(get_args)
507
+ return 0
508
+ rescue RestClient::Exception => e
509
+ print_rest_exception(e, options)
510
+ return 1
511
+ end
512
+ end
513
+
514
+ def view_desktop_background(args)
515
+ raw_args = args
516
+ options = {}
517
+ params = {}
518
+ optparse = MtnCloud::Cli::OptionParser.new do |opts|
519
+ opts.banner = subcommand_usage()
520
+ opts.on("-u", "--user USER", "User username or ID") do |val|
521
+ options[:user] = val.to_s
522
+ end
523
+ opts.on("--user-id ID", String, "User ID") do |val|
524
+ params['userId'] = val.to_s
525
+ end
526
+ #opts.add_hidden_option('--user-id')
527
+ build_common_options(opts, options, [:remote])
528
+ opts.footer = <<-EOT
529
+ View desktop background image.
530
+ This opens the desktop background image url with a web browser.
531
+ Done for the current user by default, unless a user is specified with the --user option.
532
+ EOT
533
+ end
534
+ optparse.parse!(args)
535
+ connect(options)
536
+ if args.count != 0
537
+ print_error MtnCloud::Terminal.angry_prompt
538
+ puts_error "wrong number of arguments, expected 0 and got (#{args.count}) #{args.inspect}\n#{optparse}"
539
+ return 1
540
+ end
541
+
542
+ begin
543
+ if options[:user]
544
+ user = find_user_by_username_or_id(nil, options[:user], {global:true})
545
+ return 1 if user.nil?
546
+ params['userId'] = user['id']
547
+ end
548
+ json_response = @user_settings_interface.get(params)
549
+ user_settings = json_response['user'] || json_response['userSettings']
550
+
551
+ if user_settings['desktopBackground']
552
+ link = user_settings['desktopBackground']
553
+ if RbConfig::CONFIG['host_os'] =~ /mswin|mingw|cygwin/
554
+ system "start #{link}"
555
+ elsif RbConfig::CONFIG['host_os'] =~ /darwin/
556
+ system "open #{link}"
557
+ elsif RbConfig::CONFIG['host_os'] =~ /linux|bsd/
558
+ system "xdg-open #{link}"
559
+ end
560
+ return 0, nil
561
+ else
562
+ print_error red,"No desktop background image found.",reset,"\n"
563
+ return 1
564
+ end
565
+
566
+ rescue RestClient::Exception => e
567
+ print_rest_exception(e, options)
568
+ return 1
569
+ end
570
+ end
571
+
572
+ def regenerate_access_token(args)
573
+ raw_args = args
574
+ options = {}
575
+ params = {}
576
+ optparse = MtnCloud::Cli::OptionParser.new do |opts|
577
+ opts.banner = subcommand_usage("[client-id]")
578
+ opts.on("-u", "--user USER", "User username or ID") do |val|
579
+ options[:user] = val.to_s
580
+ end
581
+ opts.on("--user-id ID", String, "User ID") do |val|
582
+ params['userId'] = val.to_s
583
+ end
584
+ #opts.add_hidden_option('--user-id')
585
+ opts.on("--id ID", String, "Token ID") do |val|
586
+ params['id'] = val.to_s
587
+ end
588
+ build_common_options(opts, options, [:payload, :options, :json, :dry_run, :quiet, :remote])
589
+ opts.footer = <<-EOT
590
+ Regenerate API access token for a specific client.
591
+ [client-id] is required. This is the id of an api client.
592
+ The --id [id] option can be used to clear a specific token by id.
593
+ Done for the current user by default, unless a user is specified with the --user option.
594
+ EOT
595
+ end
596
+ optparse.parse!(args)
597
+ connect(options)
598
+ if args.count != 1 && !params['id']
599
+ print_error MtnCloud::Terminal.angry_prompt
600
+ puts_error "wrong number of arguments, expected 1 and got (#{args.count}) #{args.inspect}\n#{optparse}"
601
+ return 1
602
+ end
603
+ if args[0]
604
+ params['clientId'] = args[0]
605
+ end
606
+ begin
607
+ if options[:user]
608
+ user = find_user_by_username_or_id(nil, options[:user], {global:true})
609
+ return 1 if user.nil?
610
+ params['userId'] = user['id']
611
+ end
612
+ payload = {}
613
+ @user_settings_interface.setopts(options)
614
+ if options[:dry_run]
615
+ print_dry_run @user_settings_interface.dry.regenerate_access_token(params, payload)
616
+ return
617
+ end
618
+ json_response = @user_settings_interface.regenerate_access_token(params, payload)
619
+ new_access_token = json_response['access_token'] || json_response['token']
620
+ # update credentials if regenerating cli token
621
+ if params['clientId'] == MtnCloud::APIClient::CLIENT_ID
622
+ if params['userId'].nil? # should check against current user id
623
+ if new_access_token
624
+ # this sux, need to save refresh_token too.. just save to wallet and refresh shell maybe?
625
+ login_opts = {:remote_token => new_access_token}
626
+ login_result = MtnCloud::Cli::Credentials.new(@appliance_name, @appliance_url).login(login_opts)
627
+ end
628
+ end
629
+ end
630
+ if options[:quiet]
631
+ return 0
632
+ elsif options[:json]
633
+ puts as_json(json_response, options)
634
+ return 0
635
+ end
636
+ print_green_success "Regenerated #{params['clientId']} access token: #{new_access_token}"
637
+ get_args = [] + (options[:remote] ? ["-r",options[:remote]] : []) + (params['userId'] ? ['--user-id', params['userId'].to_s] : [])
638
+ get(get_args)
639
+ return 0
640
+ rescue RestClient::Exception => e
641
+ print_rest_exception(e, options)
642
+ return 1
643
+ end
644
+ end
645
+
646
+ def clear_access_token(args)
647
+ raw_args = args
648
+ options = {}
649
+ params = {}
650
+ client_id = nil
651
+ all_clients = false
652
+ optparse = MtnCloud::Cli::OptionParser.new do |opts|
653
+ opts.banner = subcommand_usage("[client-id]")
654
+ opts.on("--all", "--all", "Clear tokens for all Client IDs instead of a specific client.") do
655
+ all_clients = true
656
+ end
657
+ # opts.on("--client-id", "Client ID. eg. morph-api, morph-cli") do |val|
658
+ # params['clientId'] = val.to_s
659
+ # end
660
+ opts.on("-u", "--user USER", "User username or ID") do |val|
661
+ options[:user] = val.to_s
662
+ end
663
+ opts.on("--user-id ID", String, "User ID") do |val|
664
+ params['userId'] = val.to_s
665
+ end
666
+ #opts.add_hidden_option('--user-id')
667
+ opts.on("--id ID", String, "Token ID") do |val|
668
+ params['id'] = val.to_s
669
+ end
670
+ build_common_options(opts, options, [:payload, :options, :json, :dry_run, :quiet, :remote])
671
+ opts.footer = <<-EOT
672
+ Clear API access token for a specific client.
673
+ [client-id] or --all is required. This is the id of an api client.
674
+ The --id [id] option can be used to clear a specific token by id.
675
+ Done for the current user by default, unless a user is specified with the --user option.
676
+ EOT
677
+ end
678
+ optparse.parse!(args)
679
+ connect(options)
680
+
681
+ if (args.count > 1 || (args.count == 0 && all_clients == false)) && !params['id']
682
+ print_error MtnCloud::Terminal.angry_prompt
683
+ puts_error "wrong number of arguments, expected 1 and got (#{args.count}) #{args.inspect}\n#{optparse}"
684
+ return 1
685
+ end
686
+ if args[0]
687
+ params['clientId'] = args[0]
688
+ end
689
+ if params['clientId'] == 'all'
690
+ params.delete('clientId')
691
+ all_clients = true
692
+ # clears all when clientId is omitted, no api parameter needed.
693
+ end
694
+ begin
695
+ if options[:user]
696
+ user = find_user_by_username_or_id(nil, options[:user], {global:true})
697
+ return 1 if user.nil?
698
+ params['userId'] = user['id']
699
+ end
700
+ payload = {}
701
+ @user_settings_interface.setopts(options)
702
+ if options[:dry_run]
703
+ print_dry_run @user_settings_interface.dry.clear_access_token(params, payload)
704
+ return
705
+ end
706
+ json_response = @user_settings_interface.clear_access_token(params, payload)
707
+ if options[:quiet]
708
+ return 0
709
+ elsif options[:json]
710
+ puts as_json(json_response, options)
711
+ return 0
712
+ end
713
+ new_access_token = json_response['token']
714
+ # update credentials if regenerating cli token
715
+ # if params['clientId'] == MtnCloud::APIClient::CLIENT_ID
716
+ # logout_result = MtnCloud::Cli::Credentials.new(@appliance_name, @appliance_url).logout
717
+ # end
718
+ success_msg = "Success"
719
+ if all_clients
720
+ success_msg = "Cleared all access tokens"
721
+ elsif params['id']
722
+ success_msg = "Cleared access token ID #{params['id']}"
723
+ else
724
+ success_msg = "Cleared access tokens for client #{params['clientId']}"
725
+ end
726
+ if params['userId']
727
+ success_msg << " (user #{params['userId']})"
728
+ end
729
+ print_green_success success_msg
730
+ if params['clientId'] == MtnCloud::APIClient::CLIENT_ID
731
+ if params['userId'].nil? # should check against current user id
732
+ print yellow,"Your current access token is no longer valid, you will need to login again.",reset,"\n"
733
+ end
734
+ end
735
+ # get_args = [] + (options[:remote] ? ["-r",options[:remote]] : []) + (params['userId'] ? ['--user-id', params['userId'].to_s] : [])
736
+ # get(get_args)
737
+ return 0
738
+ rescue RestClient::Exception => e
739
+ print_rest_exception(e, options)
740
+ return 1
741
+ end
742
+ end
743
+
744
+ def list_clients(args)
745
+ raw_args = args
746
+ options = {}
747
+ params = {}
748
+ optparse = MtnCloud::Cli::OptionParser.new do |opts|
749
+ opts.banner = subcommand_usage()
750
+ # opts.on("-u", "--user USER", "User username or ID") do |val|
751
+ # options[:user] = val.to_s
752
+ # end
753
+ # opts.on("--user-id ID", String, "User ID") do |val|
754
+ # params['userId'] = val.to_s
755
+ # end
756
+ # #opts.add_hidden_option('--user-id')
757
+ build_common_options(opts, options, [:query, :json, :yaml, :csv, :fields, :dry_run, :remote])
758
+ opts.footer = <<-EOT
759
+ List available api clients.
760
+ EOT
761
+ end
762
+ optparse.parse!(args)
763
+ connect(options)
764
+ if args.count != 0
765
+ print_error MtnCloud::Terminal.angry_prompt
766
+ puts_error "wrong number of arguments, expected 0 and got (#{args.count}) #{args.inspect}\n#{optparse}"
767
+ return 1
768
+ end
769
+
770
+ begin
771
+ # if options[:user]
772
+ # user = find_user_by_username_or_id(nil, options[:user], {global:true})
773
+ # return 1 if user.nil?
774
+ # params['userId'] = user['id']
775
+ # end
776
+ params.merge!(parse_list_options(options))
777
+ @user_settings_interface.setopts(options)
778
+ if options[:dry_run]
779
+ print_dry_run @user_settings_interface.dry.available_clients(params)
780
+ return
781
+ end
782
+ json_response = @user_settings_interface.available_clients(params)
783
+ if options[:json]
784
+ puts as_json(json_response, options, "clients")
785
+ return 0
786
+ elsif options[:yaml]
787
+ puts as_yaml(json_response, options, "clients")
788
+ return 0
789
+ elsif options[:csv]
790
+ puts records_as_csv(json_response['clients'], options)
791
+ return 0
792
+ end
793
+
794
+ clients = json_response['clients'] || json_response['apiClients']
795
+ print_h1 "API Clients"
796
+ columns = {
797
+ "CLIENT ID" => lambda {|it| it['clientId'] },
798
+ "NAME" => lambda {|it| it['name'] },
799
+ "TTL" => lambda {|it| it['accessTokenValiditySeconds'] ? "#{it['accessTokenValiditySeconds']}" : '' },
800
+ "DURATION" => lambda {|it| it['accessTokenValiditySeconds'] ? (format_duration_seconds(it['accessTokenValiditySeconds']) rescue '') : '' },
801
+ # "USABLE" => lambda {|it| format_boolean(it['usable']) }
802
+ }
803
+ print cyan
804
+ puts as_pretty_table(clients, columns)
805
+ print reset #, "\n"
806
+ return 0
807
+ rescue RestClient::Exception => e
808
+ print_rest_exception(e, options)
809
+ return 1
810
+ end
811
+ end
812
+
813
+ protected
814
+
815
+ def update_user_settings_option_types
816
+ [
817
+ # todo: rest of the available user settings!
818
+ {'switch' => 'change-username', 'fieldName' => 'username', 'fieldLabel' => 'Username', 'type' => 'text', 'description' => 'Change user credentials to use a new username'},
819
+ {'switch' => 'change-password', 'fieldName' => 'password', 'fieldLabel' => 'Password', 'type' => 'password', 'description' => 'Change user credentials to use a new password'},
820
+ {'fieldName' => 'email', 'fieldLabel' => 'Email', 'type' => 'text'},
821
+ {'fieldName' => 'firstName', 'fieldLabel' => 'First Name', 'type' => 'text'},
822
+ {'fieldName' => 'lastName', 'fieldLabel' => 'Last Name', 'type' => 'text'},
823
+ {'fieldName' => 'email', 'fieldLabel' => 'Email', 'type' => 'text'},
824
+ {'fieldName' => 'receiveNotifications', 'fieldLabel' => 'Receive Notifications', 'type' => 'checkbox'},
825
+ {'fieldName' => 'linuxUsername', 'fieldLabel' => 'Linux Username', 'type' => 'text'},
826
+ {'fieldName' => 'linuxPassword', 'fieldLabel' => 'Linux Password', 'type' => 'password'},
827
+ {'fieldName' => 'linuxKeyPairId', 'fieldLabel' => 'Linux Key Pair ID', 'type' => 'password'},
828
+ {'fieldName' => 'windowsUsername', 'fieldLabel' => 'Windows Username', 'type' => 'text'},
829
+ {'fieldName' => 'windowsPassword', 'fieldLabel' => 'Windows Password', 'type' => 'password'},
830
+ {'fieldName' => 'defaultGroup', 'fieldLabel' => 'Default Group ID', 'type' => 'text'},
831
+ {'fieldName' => 'defaultCloud', 'fieldLabel' => 'Default Cloud ID', 'type' => 'text'},
832
+ {'fieldName' => 'defaultPersona', 'fieldLabel' => 'Default Persona Name or Code or ID eg. standard, serviceCatalog or vdi', 'type' => 'text'},
833
+ {'switch' => 'change-password', 'fieldName' => 'password', 'fieldLabel' => 'Password', 'type' => 'password', 'description' => 'Change user credentials to use a new password'},
834
+ {'fieldName' => 'avatar', 'fieldLabel' => 'Avatar', 'type' => 'file', 'description' => 'Local filepath of image file to upload as user avatar'},
835
+ {'fieldName' => 'desktopBackground', 'fieldLabel' => 'Desktop Background', 'type' => 'file', 'description' => 'Local filepath of image file to upload as user desktop background'},
836
+ {'switch' => 'theme', 'fieldName' => 'activeTheme', 'fieldLabel' => 'Theme', 'type' => 'select', 'optionSource' => lambda {|api_client, api_params|
837
+ begin
838
+ api_client.options_for_source("themes", api_params)['data']
839
+ rescue => ex
840
+ MtnCloud::Logging::DarkPrinter.puts "Failed to load options for themes. Exception: (#{ex.class}) '#{ex.message}'" if MtnCloud::Logging.debug?
841
+ [{"name" => "Default", "value" => "default"}, {"name" => "Dark Mode", "value" => "darkMode"}]
842
+ end
843
+ }, 'description' => 'Active Theme to use for the UI, default or darkMode.'},
844
+ # api cannot yet modify isUsing2fa
845
+ # {'switch' => '2fa', 'fieldName' => 'isUsing2fa', 'fieldLabel' => '2FA Enabled', 'type' => 'checkbox', 'description' => 'Enable or Disable 2FA for your user.'}
846
+ ]
847
+ end
848
+
849
+ end