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,654 @@
1
+ require 'mtncloud/cli/cli_command'
2
+
3
+ class MtnCloud::Cli::NetworkGroupsCommand
4
+ include MtnCloud::Cli::CliCommand
5
+ include MtnCloud::Cli::InfrastructureHelper
6
+
7
+ set_command_name :'network-groups'
8
+
9
+ register_subcommands :list, :get, :add, :update, :remove
10
+
11
+ # set_default_subcommand :list
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
+ @network_groups_interface = @api_client.network_groups
20
+ @networks_interface = @api_client.networks
21
+ @subnets_interface = @api_client.subnets
22
+ @clouds_interface = @api_client.clouds
23
+ @options_interface = @api_client.options
24
+ end
25
+
26
+ def handle(args)
27
+ handle_subcommand(args)
28
+ end
29
+
30
+ def list(args)
31
+ options = {}
32
+ params = {}
33
+ optparse = MtnCloud::Cli::OptionParser.new do |opts|
34
+ opts.banner = subcommand_usage()
35
+ build_common_options(opts, options, [:list, :json, :yaml, :csv, :fields, :json, :dry_run, :remote])
36
+ opts.footer = "List network groups."
37
+ end
38
+ optparse.parse!(args)
39
+ connect(options)
40
+ begin
41
+ params.merge!(parse_list_options(options))
42
+ @network_groups_interface.setopts(options)
43
+ if options[:dry_run]
44
+ print_dry_run @network_groups_interface.dry.list(params)
45
+ return
46
+ end
47
+ json_response = @network_groups_interface.list(params)
48
+ network_groups = json_response["networkGroups"]
49
+ if options[:json]
50
+ puts as_json(json_response, options, "networkGroups")
51
+ return 0
52
+ elsif options[:yaml]
53
+ puts as_yaml(json_response, options, "networkGroups")
54
+ return 0
55
+ elsif options[:csv]
56
+ puts records_as_csv(network_groups, options)
57
+ return 0
58
+ end
59
+ title = "Network Groups"
60
+ subtitles = []
61
+ subtitles += parse_list_subtitles(options)
62
+ print_h1 title, subtitles
63
+ if network_groups.empty?
64
+ print cyan,"No network groups found.",reset,"\n"
65
+ else
66
+ rows = network_groups.collect {|network_group|
67
+ row = {
68
+ id: network_group['id'],
69
+ name: network_group['name'],
70
+ description: network_group['description'],
71
+ # networks: network_group['networks'] ? network_group['networks'].collect {|it| it['name'] }.uniq.join(', ') : '',
72
+ networks: network_group['networks'] ? network_group['networks'].size : 0,
73
+ subnets: network_group['subnets'] ? network_group['subnets'].size : 0,
74
+ active: format_boolean(network_group['active']),
75
+ visibility: network_group['visibility'].to_s.capitalize,
76
+ tenants: network_group['tenants'] ? network_group['tenants'].collect {|it| it['name'] }.uniq.join(', ') : ''
77
+ }
78
+ row
79
+ }
80
+ columns = [:id, :name, :description, :networks, :subnets, :active, :visibility, :tenants]
81
+ if options[:include_fields]
82
+ columns = options[:include_fields]
83
+ end
84
+ print cyan
85
+ print as_pretty_table(rows, columns, options)
86
+ print reset
87
+ print_results_pagination(json_response, {:label => "network group", :n_label => "network groups"})
88
+ end
89
+ print reset,"\n"
90
+ return 0
91
+ rescue RestClient::Exception => e
92
+ print_rest_exception(e, options)
93
+ exit 1
94
+ end
95
+ end
96
+
97
+ def get(args)
98
+ options = {}
99
+ optparse = MtnCloud::Cli::OptionParser.new do |opts|
100
+ opts.banner = subcommand_usage("[network-group]")
101
+ build_common_options(opts, options, [:json, :yaml, :csv, :fields, :dry_run, :remote])
102
+ opts.footer = "Get details about a network group." + "\n" +
103
+ "[network-group] is required. This is the name or id of a network group."
104
+ end
105
+ optparse.parse!(args)
106
+ if args.count != 1
107
+ print_error MtnCloud::Terminal.angry_prompt
108
+ puts_error "#{command_name} missing argument: [network-group]\n#{optparse}"
109
+ return 1
110
+ end
111
+ connect(options)
112
+ exit_code, err = 0, nil
113
+ begin
114
+ network_group_id = nil
115
+ if args[0].to_s =~ /\A\d{1,}\Z/
116
+ network_group_id = args[0].to_i
117
+ else
118
+ network_group = find_network_group_by_name(args[0])
119
+ return 1, "Network Group not found" if network_group.nil?
120
+ network_group_id = network_group['id']
121
+ end
122
+ @network_groups_interface.setopts(options)
123
+ if options[:dry_run]
124
+ print_dry_run @network_groups_interface.dry.get(network_group_id)
125
+ return exit_code, err
126
+ end
127
+ json_response = @network_groups_interface.get(network_group_id)
128
+ render_result = render_with_format(json_response, options, 'networkGroup')
129
+ return exit_code, err if render_result
130
+
131
+ network_group = json_response['networkGroup']
132
+ networks = json_response['networks'] # || network_group['networks']
133
+ subnets = json_response['subnets'] # || network_group['subnets']
134
+
135
+ print_h1 "Network Group Details"
136
+ print cyan
137
+ description_cols = {
138
+ "ID" => 'id',
139
+ "Name" => 'name',
140
+ "Description" => 'description',
141
+ "Networks" => lambda {|it| it['networks'].size rescue 'n/a' },
142
+ "Subnets" => lambda {|it| it['subnets'].size rescue 'n/a' },
143
+ "Active" => lambda {|it| it['active'].to_s.capitalize },
144
+ "Visibility" => lambda {|it| it['visibility'].to_s.capitalize },
145
+ "Tenants" => lambda {|it| it['tenants'] ? it['tenants'].collect {|it| it['name'] }.uniq.join(', ') : '' },
146
+ }
147
+ print_description_list(description_cols, network_group)
148
+
149
+ if networks.empty?
150
+ # print cyan,"No networks found.",reset,"\n"
151
+ else
152
+ print_h2 "Networks"
153
+ subnet_columns = {
154
+ "ID" => 'id',
155
+ "Name" => 'name',
156
+ #"Description" => 'description',
157
+ "Type" => lambda {|it| it['type']['name'] rescue it['type'] },
158
+ "CIDR" => lambda {|it| it['cidr'] },
159
+ "Active" => lambda {|it| it['active'].to_s.capitalize },
160
+ "Visibility" => lambda {|it| it['visibility'].to_s.capitalize },
161
+ "Tenants" => lambda {|it| it['tenants'] ? it['tenants'].collect {|it| it['name'] }.uniq.join(', ') : '' },
162
+ }
163
+ print cyan
164
+ print as_pretty_table(networks, subnet_columns)
165
+ print reset,"\n"
166
+ end
167
+
168
+ if subnets.empty?
169
+ # print cyan,"No subnets found.",reset,"\n"
170
+ else
171
+ print_h2 "Subnets"
172
+ subnet_columns = {
173
+ "ID" => 'id',
174
+ "Name" => 'name',
175
+ #"Description" => 'description',
176
+ "Type" => lambda {|it| it['type']['name'] rescue it['type'] },
177
+ "CIDR" => lambda {|it| it['cidr'] },
178
+ "Active" => lambda {|it| it['active'].to_s.capitalize },
179
+ "Visibility" => lambda {|it| it['visibility'].to_s.capitalize },
180
+ "Tenants" => lambda {|it| it['tenants'] ? it['tenants'].collect {|it| it['name'] }.uniq.join(', ') : '' },
181
+ }
182
+ print cyan
183
+ print as_pretty_table(subnets, subnet_columns)
184
+ print reset,"\n"
185
+ end
186
+
187
+ if network_group['resourcePermission'].nil?
188
+ print "\n", "No group access found", "\n"
189
+ else
190
+ print_h2 "Group Access"
191
+ rows = []
192
+ if network_group['resourcePermission']['all']
193
+ rows.push({"name" => 'All'})
194
+ end
195
+ if network_group['resourcePermission']['sites']
196
+ network_group['resourcePermission']['sites'].each do |site|
197
+ rows.push(site)
198
+ end
199
+ end
200
+ rows = rows.collect do |site|
201
+ {group: site['name'], default: site['default'] ? 'Yes' : ''}
202
+ end
203
+ columns = [:group, :default]
204
+ print cyan
205
+ print as_pretty_table(rows, columns)
206
+ print reset,"\n"
207
+ end
208
+
209
+ return 0
210
+ rescue RestClient::Exception => e
211
+ print_rest_exception(e, options)
212
+ return 1
213
+ end
214
+ end
215
+
216
+ def add(args)
217
+ options = {}
218
+ tenants = nil
219
+ group_access_all = nil
220
+ group_access_list = nil
221
+ group_defaults_list = nil
222
+ optparse = MtnCloud::Cli::OptionParser.new do |opts|
223
+ opts.banner = subcommand_usage("--networks [id,id,id]")
224
+ opts.on('--name VALUE', String, "Name for this network group") do |val|
225
+ options['name'] = val
226
+ end
227
+ opts.on('--description VALUE', String, "Description of network group") do |val|
228
+ options['description'] = val
229
+ end
230
+ opts.on('--networks LIST', Array, "Networks in the group, comma separated list of network names or IDs") do |list|
231
+ if list.size == 1 && ('[]' == list[0]) # clear array
232
+ options['networks'] = []
233
+ else
234
+ options['networks'] = list.collect {|it| it.to_s.strip.empty? ? nil : it.to_s.strip }.compact.uniq
235
+ end
236
+ end
237
+ opts.on('--subnets LIST', Array, "Subnets, comma separated list of names or IDs.") do |list|
238
+ if list.size == 1 && ('[]' == list[0]) # clear array
239
+ options['subnets'] = []
240
+ else
241
+ options['subnets'] = list.collect {|it| it.to_s.strip.empty? ? nil : it.to_s.strip }.compact.uniq
242
+ end
243
+ end
244
+ opts.on('--group-access-all [on|off]', String, "Toggle Access for all groups.") do |val|
245
+ group_access_all = val.to_s == 'on' || val.to_s == 'true' || val.to_s == ''
246
+ end
247
+ opts.on('--group-access LIST', Array, "Group Access, comma separated list of group IDs.") do |list|
248
+ if list.size == 1 && list[0] == 'null' # hacky way to clear it
249
+ group_access_list = []
250
+ else
251
+ group_access_list = list.collect {|it| it.to_s.strip.empty? ? nil : it.to_s.strip }.compact.uniq
252
+ end
253
+ end
254
+ opts.on('--group-defaults LIST', Array, "Group Default Selection, comma separated list of group IDs") do |list|
255
+ if list.size == 1 && list[0] == 'null' # hacky way to clear it
256
+ group_defaults_list = []
257
+ else
258
+ group_defaults_list = list.collect {|it| it.to_s.strip.empty? ? nil : it.to_s.strip }.compact.uniq
259
+ end
260
+ end
261
+ opts.on('--tenants LIST', Array, "Tenant Access, comma separated list of account IDs") do |list|
262
+ if list.size == 1 && list[0] == 'null' # hacky way to clear it
263
+ options['tenants'] = []
264
+ else
265
+ options['tenants'] = list.collect {|it| it.to_s.strip.empty? ? nil : it.to_s.strip }.compact.uniq
266
+ end
267
+ end
268
+ opts.on('--accounts LIST', Array, "alias for --tenants") do |list|
269
+ if list.size == 1 && list[0] == 'null' # hacky way to clear it
270
+ options['tenants'] = []
271
+ else
272
+ options['tenants'] = list.collect {|it| it.to_s.strip.empty? ? nil : it.to_s.strip }.compact.uniq
273
+ end
274
+ end
275
+ opts.on('--visibility [private|public]', String, "Visibility") do |val|
276
+ options['visibility'] = val
277
+ end
278
+ opts.on('--active [on|off]', String, "Can be used to disable a network group") do |val|
279
+ options['active'] = val.to_s == 'on' || val.to_s == 'true'
280
+ end
281
+ build_common_options(opts, options, [:options, :payload, :json, :dry_run, :quiet, :remote])
282
+ opts.footer = "Create a new network group." + "\n" +
283
+ "[name] is required and can be passed as --name instead."
284
+ end
285
+ optparse.parse!(args)
286
+ if args.count > 1
287
+ print_error MtnCloud::Terminal.angry_prompt
288
+ puts_error "wrong number of arguments, expected 0-1 and got #{args.count}\n#{optparse}"
289
+ return 1
290
+ end
291
+ connect(options)
292
+ begin
293
+ # merge -O options into normally parsed options
294
+ options.deep_merge!(options[:options].reject {|k,v| k.is_a?(Symbol) }) if options[:options]
295
+
296
+ # support [name] as first argument
297
+ if args[0]
298
+ options['name'] = args[0]
299
+ end
300
+
301
+ # construct payload
302
+ payload = nil
303
+ if options[:payload]
304
+ payload = options[:payload]
305
+ else
306
+ # prompt for network options
307
+ payload = {
308
+ 'networkGroup' => {
309
+ # 'config' => {}
310
+ }
311
+ }
312
+
313
+ # allow arbitrary -O options
314
+ payload['networkGroup'].deep_merge!(options[:options].reject {|k,v| k.is_a?(Symbol) }) if options[:options]
315
+
316
+ # Name
317
+ if options['name']
318
+ payload['networkGroup']['name'] = options['name']
319
+ else
320
+ v_prompt = MtnCloud::Cli::OptionTypes.prompt([{'fieldName' => 'name', 'fieldLabel' => 'Name', 'type' => 'text', 'required' => true, 'description' => 'Name for this network group.'}], options)
321
+ payload['networkGroup']['name'] = v_prompt['name']
322
+ end
323
+
324
+ # Description
325
+ if options['description']
326
+ payload['networkGroup']['description'] = options['description']
327
+ else
328
+ v_prompt = MtnCloud::Cli::OptionTypes.prompt([{'fieldName' => 'description', 'fieldLabel' => 'Description', 'type' => 'text', 'required' => false, 'description' => 'Description of network group.'}], options)
329
+ payload['networkGroup']['description'] = v_prompt['description']
330
+ end
331
+
332
+ # Networks
333
+ # if options['networks']
334
+ # payload['networkGroup']['networks'] = options['networks'].collect {|it| {id: it} }
335
+ # else
336
+ # v_prompt = MtnCloud::Cli::OptionTypes.prompt([{'fieldName' => 'networks', 'fieldLabel' => 'Networks', 'type' => 'text', 'required' => true, 'description' => 'Networks in the group, comma separated list of network IDs.'}], options)
337
+ # payload['networkGroup']['networks'] = v_prompt['networks'].to_s.split(",").collect {|it| it.to_s.strip.empty? ? nil : it.to_s.strip }.compact.uniq.collect {|it| {id: it} }
338
+ # end
339
+
340
+ # Networks
341
+ prompt_results = prompt_for_networks(options, options, @api_client)
342
+ if prompt_results[:success]
343
+ payload['networkGroup']['networks'] = prompt_results[:data] unless prompt_results[:data].nil?
344
+ else
345
+ return 1, "Networks prompt failed."
346
+ end
347
+
348
+ # Subnets
349
+ prompt_results = prompt_for_subnets(options, options, @api_client)
350
+ if prompt_results[:success]
351
+ payload['networkGroup']['subnets'] = prompt_results[:data] unless prompt_results[:data].nil?
352
+ else
353
+ return 1, "Subnets prompt failed."
354
+ end
355
+
356
+
357
+ # Group Access
358
+ if group_access_all != nil
359
+ payload['resourcePermissions'] ||= {}
360
+ payload['resourcePermissions']['all'] = group_access_all
361
+ end
362
+ if group_access_list != nil
363
+ payload['resourcePermissions'] ||= {}
364
+ payload['resourcePermissions']['sites'] = group_access_list.collect do |site_id|
365
+ site = {"id" => site_id.to_i}
366
+ if group_defaults_list && group_defaults_list.include?(site_id)
367
+ site["default"] = true
368
+ end
369
+ site
370
+ end
371
+ end
372
+
373
+ # Tenants
374
+ if options['tenants']
375
+ payload['tenantPermissions'] = {}
376
+ payload['tenantPermissions']['accounts'] = options['tenants']
377
+ end
378
+
379
+ # Visibility
380
+ if options['visibility'] != nil
381
+ payload['networkGroup']['visibility'] = options['visibility']
382
+ end
383
+
384
+ # Active
385
+ if options['active'] != nil
386
+ payload['networkGroup']['active'] = options['active']
387
+ end
388
+
389
+ end
390
+
391
+ @network_groups_interface.setopts(options)
392
+ if options[:dry_run]
393
+ print_dry_run @network_groups_interface.dry.create(payload)
394
+ return
395
+ end
396
+ json_response = @network_groups_interface.create(payload)
397
+ if options[:json]
398
+ print JSON.pretty_generate(json_response)
399
+ print "\n"
400
+ elsif !options[:quiet]
401
+ network_group = json_response['networkGroup']
402
+ print_green_success "Added network group #{network_group['name']}"
403
+ get([network_group['id']])
404
+ end
405
+ return 0
406
+ rescue RestClient::Exception => e
407
+ print_rest_exception(e, options)
408
+ exit 1
409
+ end
410
+ end
411
+
412
+ def update(args)
413
+ options = {}
414
+ tenants = nil
415
+ group_access_all = nil
416
+ group_access_list = nil
417
+ group_defaults_list = nil
418
+ optparse = MtnCloud::Cli::OptionParser.new do |opts|
419
+ opts.banner = subcommand_usage("[network-group] [options]")
420
+ opts.on('--name VALUE', String, "Name for this network group") do |val|
421
+ options['name'] = val
422
+ end
423
+ opts.on('--description VALUE', String, "Description of network group") do |val|
424
+ options['description'] = val
425
+ end
426
+ opts.on('--networks LIST', Array, "Networks in the group, comma separated list of network IDs") do |list|
427
+ if list.size == 1 && list[0] == 'null' # hacky way to clear it
428
+ options['networks'] = []
429
+ else
430
+ options['networks'] = list.collect {|it| it.to_s.strip.empty? ? nil : it.to_s.strip }.compact.uniq
431
+ end
432
+ end
433
+ opts.on('--subnets LIST', Array, "Subnets, comma separated list of names or IDs.") do |list|
434
+ if list.size == 1 && ('[]' == list[0]) # clear array
435
+ options['subnets'] = []
436
+ else
437
+ options['subnets'] = list.collect {|it| it.to_s.strip.empty? ? nil : it.to_s.strip }.compact.uniq
438
+ end
439
+ end
440
+ opts.on('--group-access-all [on|off]', String, "Toggle Access for all groups.") do |val|
441
+ group_access_all = val.to_s == 'on' || val.to_s == 'true' || val.to_s == ''
442
+ end
443
+ opts.on('--group-access LIST', Array, "Group Access, comma separated list of group IDs.") do |list|
444
+ if list.size == 1 && list[0] == 'null' # hacky way to clear it
445
+ group_access_list = []
446
+ else
447
+ group_access_list = list.collect {|it| it.to_s.strip.empty? ? nil : it.to_s.strip }.compact.uniq
448
+ end
449
+ end
450
+ opts.on('--group-defaults LIST', Array, "Group Default Selection, comma separated list of group IDs") do |list|
451
+ if list.size == 1 && list[0] == 'null' # hacky way to clear it
452
+ group_defaults_list = []
453
+ else
454
+ group_defaults_list = list.collect {|it| it.to_s.strip.empty? ? nil : it.to_s.strip }.compact.uniq
455
+ end
456
+ end
457
+ opts.on('--tenants LIST', Array, "Tenant Access, comma separated list of account IDs") do |list|
458
+ if list.size == 1 && list[0] == 'null' # hacky way to clear it
459
+ options['tenants'] = []
460
+ else
461
+ options['tenants'] = list.collect {|it| it.to_s.strip.empty? ? nil : it.to_s.strip }.compact.uniq
462
+ end
463
+ end
464
+ opts.on('--accounts LIST', Array, "alias for --tenants") do |list|
465
+ if list.size == 1 && list[0] == 'null' # hacky way to clear it
466
+ options['tenants'] = []
467
+ else
468
+ options['tenants'] = list.collect {|it| it.to_s.strip.empty? ? nil : it.to_s.strip }.compact.uniq
469
+ end
470
+ end
471
+ opts.on('--visibility [private|public]', String, "Visibility") do |val|
472
+ options['visibility'] = val
473
+ end
474
+ opts.on('--active [on|off]', String, "Can be used to disable a network group") do |val|
475
+ options['active'] = val.to_s == 'on' || val.to_s == 'true'
476
+ end
477
+ build_common_options(opts, options, [:options, :payload, :json, :dry_run, :remote])
478
+ opts.footer = "Update a network group." + "\n" +
479
+ "[network-group] is required. This is the id of a network group."
480
+ end
481
+ optparse.parse!(args)
482
+ if args.count != 1
483
+ print_error MtnCloud::Terminal.angry_prompt
484
+ puts_error "wrong number of arguments, expected 1 and got #{args.count}\n#{optparse}"
485
+ return 1
486
+ end
487
+ connect(options)
488
+
489
+ begin
490
+ network_group = find_network_group_by_name_or_id(args[0])
491
+ return 1 if network_group.nil?
492
+
493
+ # merge -O options into normally parsed options
494
+ options.deep_merge!(options[:options].reject {|k,v| k.is_a?(Symbol) }) if options[:options]
495
+
496
+ # construct payload
497
+ payload = nil
498
+ if options[:payload]
499
+ payload = options[:payload]
500
+ else
501
+ # prompt for network options
502
+ payload = {
503
+ 'networkGroup' => {
504
+ }
505
+ }
506
+
507
+ # allow arbitrary -O options
508
+ payload['networkGroup'].deep_merge!(options[:options].reject {|k,v| k.is_a?(Symbol) }) if options[:options]
509
+
510
+ # Name
511
+ if options['name']
512
+ payload['networkGroup']['name'] = options['name']
513
+ else
514
+ # v_prompt = MtnCloud::Cli::OptionTypes.prompt([{'fieldName' => 'name', 'fieldLabel' => 'Name', 'type' => 'text', 'required' => true, 'description' => 'Name for this network group.'}], options)
515
+ # payload['networkGroup']['name'] = v_prompt['name']
516
+ end
517
+
518
+ # Description
519
+ if options['description']
520
+ payload['networkGroup']['description'] = options['description']
521
+ else
522
+ # v_prompt = MtnCloud::Cli::OptionTypes.prompt([{'fieldName' => 'description', 'fieldLabel' => 'Description', 'type' => 'text', 'required' => false, 'description' => 'Description of network group.'}], options)
523
+ # payload['networkGroup']['description'] = v_prompt['description']
524
+ end
525
+
526
+ # Networks
527
+ if options['networks']
528
+ prompt_results = prompt_for_networks(options, options, @api_client)
529
+ if prompt_results[:success]
530
+ payload['networkGroup']['networks'] = prompt_results[:data] unless prompt_results[:data].nil?
531
+ else
532
+ return 1, "Networks prompt failed."
533
+ end
534
+ end
535
+
536
+ # Subnets
537
+ if options['subnets']
538
+ prompt_results = prompt_for_subnets(options, options, @api_client)
539
+ if prompt_results[:success]
540
+ payload['networkGroup']['subnets'] = prompt_results[:data] unless prompt_results[:data].nil?
541
+ else
542
+ return 1, "Subnets prompt failed."
543
+ end
544
+ end
545
+
546
+ # Group Access
547
+ if group_access_all != nil
548
+ payload['resourcePermissions'] ||= {}
549
+ payload['resourcePermissions']['all'] = group_access_all
550
+ end
551
+ if group_access_list != nil
552
+ payload['resourcePermissions'] ||= {}
553
+ payload['resourcePermissions']['sites'] = group_access_list.collect do |site_id|
554
+ site = {"id" => site_id.to_i}
555
+ if group_defaults_list && group_defaults_list.include?(site_id)
556
+ site["default"] = true
557
+ end
558
+ site
559
+ end
560
+ end
561
+
562
+ # Tenants
563
+ if options['tenants']
564
+ payload['tenantPermissions'] = {}
565
+ payload['tenantPermissions']['accounts'] = options['tenants']
566
+ end
567
+
568
+ # Visibility
569
+ if options['visibility'] != nil
570
+ payload['networkGroup']['visibility'] = options['visibility']
571
+ end
572
+
573
+ # Active
574
+ if options['active'] != nil
575
+ payload['networkGroup']['active'] = options['active']
576
+ end
577
+
578
+ # pre 4.2.1, would error with data not found unless you pass something in here
579
+ # so pass foo=bar so you can update just resourcePermissions
580
+ if payload['networkGroup'] && payload['networkGroup'].empty? && payload['resourcePermissions']
581
+ payload['networkGroup']['foo'] = 'bar'
582
+ end
583
+
584
+ end
585
+ @network_groups_interface.setopts(options)
586
+ if options[:dry_run]
587
+ print_dry_run @network_groups_interface.dry.update(network_group["id"], payload)
588
+ return
589
+ end
590
+ json_response = @network_groups_interface.update(network_group["id"], payload)
591
+ if options[:json]
592
+ puts as_json(json_response)
593
+ else
594
+ network_group = json_response['networkGroup']
595
+ print_green_success "Updated network group #{network_group['name']}"
596
+ get([network_group['id']])
597
+ end
598
+ return 0
599
+ rescue RestClient::Exception => e
600
+ print_rest_exception(e, options)
601
+ return 1
602
+ end
603
+ end
604
+
605
+ def remove(args)
606
+ options = {}
607
+ optparse = MtnCloud::Cli::OptionParser.new do |opts|
608
+ opts.banner = subcommand_usage("[network-group]")
609
+ build_common_options(opts, options, [:account, :auto_confirm, :json, :dry_run, :remote])
610
+ opts.footer = "Delete a network group." + "\n" +
611
+ "[network-group] is required. This is the name or id of a network group."
612
+ end
613
+ optparse.parse!(args)
614
+
615
+ if args.count < 1
616
+ print_error MtnCloud::Terminal.angry_prompt
617
+ puts_error "#{command_name} missing argument: [network-group]\n#{optparse}"
618
+ return 1
619
+ end
620
+
621
+ connect(options)
622
+ begin
623
+ network_group = find_network_group_by_name_or_id(args[0])
624
+ return 1 if network_group.nil?
625
+
626
+ unless options[:yes] || MtnCloud::Cli::OptionTypes.confirm("Are you sure you want to delete the network group: #{network_group['name']}?")
627
+ return 9, "aborted command"
628
+ end
629
+ @network_groups_interface.setopts(options)
630
+ if options[:dry_run]
631
+ print_dry_run @network_groups_interface.dry.destroy(network_group['id'])
632
+ return 0
633
+ end
634
+ json_response = @network_groups_interface.destroy(network_group['id'])
635
+ if options[:json]
636
+ print JSON.pretty_generate(json_response)
637
+ print "\n"
638
+ else
639
+ print_green_success "Removed network group #{network_group['name']}"
640
+ # list([])
641
+ end
642
+ return 0
643
+ rescue RestClient::Exception => e
644
+ print_rest_exception(e, options)
645
+ return 1
646
+ end
647
+ end
648
+
649
+ private
650
+
651
+
652
+
653
+
654
+ end
@@ -0,0 +1,20 @@
1
+ require 'mtncloud/cli/cli_command'
2
+
3
+ class MtnCloud::Cli::NetworkPoolServerTypes
4
+ include MtnCloud::Cli::CliCommand
5
+ include MtnCloud::Cli::RestCommand
6
+ include MtnCloud::Cli::InfrastructureHelper
7
+
8
+ set_command_description "View network pool server types"
9
+ set_command_name :'network-pool-server-types'
10
+ register_subcommands :list, :get
11
+
12
+ # hidden in favor of get-type and list-types
13
+ set_command_hidden
14
+
15
+ # register_interfaces :network_pool_server_types
16
+
17
+ protected
18
+
19
+ end
20
+