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,819 @@
1
+ require 'mtncloud/cli/cli_command'
2
+
3
+ class MtnCloud::Cli::SubnetsCommand
4
+ include MtnCloud::Cli::CliCommand
5
+ include MtnCloud::Cli::InfrastructureHelper
6
+
7
+ set_command_name :subnets
8
+
9
+ register_subcommands :list, :get, :add, :update, :remove
10
+ # register_subcommands :'types' => :list_subnet_types
11
+ register_subcommands :'types' => :list_subnet_types
12
+ register_subcommands :'get-type' => :get_subnet_type
13
+
14
+ # set_default_subcommand :list
15
+
16
+ def initialize()
17
+ # @appliance_name, @appliance_url = MtnCloud::Cli::Remote.active_appliance
18
+ end
19
+
20
+ def connect(opts)
21
+ @api_client = establish_remote_appliance_connection(opts)
22
+ @networks_interface = @api_client.networks
23
+ @network_pools_interface = @api_client.network_pools
24
+ @network_types_interface = @api_client.network_types
25
+ @subnets_interface = @api_client.subnets
26
+ @subnet_types_interface = @api_client.subnet_types
27
+ @clouds_interface = @api_client.clouds
28
+ @options_interface = @api_client.options
29
+ end
30
+
31
+ def handle(args)
32
+ handle_subcommand(args)
33
+ end
34
+
35
+ def list(args)
36
+ options = {}
37
+ params = {}
38
+ optparse = MtnCloud::Cli::OptionParser.new do |opts|
39
+ opts.banner = subcommand_usage("")
40
+ build_common_options(opts, options, [:list, :query, :json, :yaml, :csv, :fields, :dry_run, :remote])
41
+ opts.on( '-c', '--cloud CLOUD', "Filter by Cloud" ) do |val|
42
+ options[:cloud] = val
43
+ end
44
+ opts.on( '--network NETWORK', '--network NETWORK', "Filter by Network" ) do |val|
45
+ options[:network] = val
46
+ end
47
+ opts.on('-l', '--labels LABEL', String, "Filter by labels, can match any of the values") do |val|
48
+ add_query_parameter(params, 'labels', parse_labels(val))
49
+ end
50
+ opts.on('--all-labels LABEL', String, "Filter by labels, must match all of the values") do |val|
51
+ add_query_parameter(params, 'allLabels', parse_labels(val))
52
+ end
53
+ opts.footer = "List subnets."
54
+ end
55
+ optparse.parse!(args)
56
+ if args.count > 0
57
+ options[:phrase] = args.join(" ")
58
+ end
59
+ connect(options)
60
+
61
+ params.merge!(parse_list_options(options))
62
+ network = nil
63
+ if options[:network]
64
+ network = find_network_by_name_or_id(options[:network])
65
+ if network
66
+ params['networkId'] = network['id']
67
+ else
68
+ return 1, "Network not found"
69
+ end
70
+ end
71
+ cloud = nil
72
+ if options[:cloud]
73
+ cloud = find_cloud_by_name_or_id(options[:cloud])
74
+ if cloud
75
+ params['zoneId'] = cloud['id']
76
+ else
77
+ return 1, "Cloud not found"
78
+ end
79
+ end
80
+
81
+
82
+ exit_code, err = 0, nil
83
+
84
+ @subnets_interface.setopts(options)
85
+ if options[:dry_run]
86
+ print_dry_run @subnets_interface.dry.list(params)
87
+ return exit_code, err
88
+ end
89
+ json_response = @subnets_interface.list(params)
90
+ subnets = json_response["subnets"]
91
+
92
+ render_result = render_with_format(json_response, options, 'subnets')
93
+ return exit_code, err if render_result
94
+
95
+ title = "Subnets"
96
+ subtitles = []
97
+ if network
98
+ subtitles << "Network: #{network['name']}"
99
+ end
100
+ if cloud
101
+ subtitles << "Cloud: #{cloud['name']}"
102
+ end
103
+ subtitles += parse_list_subtitles(options)
104
+ print_h1 title, subtitles
105
+
106
+ if subnets.empty?
107
+ print cyan,"No subnets found.",reset,"\n"
108
+ else
109
+ subnet_columns = {
110
+ "ID" => 'id',
111
+ "Name" => 'name',
112
+ "Labels" => lambda {|it| format_list(it['labels'], '', 3) },
113
+ #"Description" => 'description',
114
+ "Network" => lambda {|it| it['network']['name'] rescue it['network'] },
115
+ "Type" => lambda {|it| it['type']['name'] rescue it['type'] },
116
+ "Cloud" => lambda {|it| it['zone']['name'] rescue it['zone'] },
117
+ "CIDR" => lambda {|it| it['cidr'] },
118
+ "DHCP" => lambda {|it| format_boolean(it['dhcpServer']) },
119
+ "Active" => lambda {|it| format_boolean(it['active']) },
120
+ "Visibility" => lambda {|it| it['visibility'].to_s.capitalize },
121
+ "Tenants" => lambda {|it| it['tenants'] ? it['tenants'].collect {|it| it['name'] }.uniq.join(', ') : '' },
122
+ }
123
+ print cyan
124
+ print as_pretty_table(subnets, subnet_columns)
125
+ print_results_pagination(json_response, {:label => "subnet", :n_label => "subnets"})
126
+ end
127
+ print reset,"\n"
128
+ return exit_code, err
129
+
130
+ end
131
+
132
+ def get(args)
133
+ options = {}
134
+ optparse = MtnCloud::Cli::OptionParser.new do |opts|
135
+ opts.banner = subcommand_usage("[subnet]")
136
+ build_common_options(opts, options, [:json, :yaml, :csv, :fields, :dry_run, :remote])
137
+ opts.footer = "Get details about a subnet." + "\n" +
138
+ "[subnet] is required. This is the name or id of a subnet."
139
+ end
140
+ optparse.parse!(args)
141
+ if args.count != 1
142
+ raise_command_error "wrong number of arguments, expected 1 and got (#{args.count}) #{args}\n#{optparse}"
143
+ end
144
+ connect(options)
145
+ exit_code, err = 0, nil
146
+ begin
147
+ subnet_id = nil
148
+ if args[0].to_s =~ /\A\d{1,}\Z/
149
+ subnet_id = args[0].to_i
150
+ else
151
+ subnet = find_subnet_by_name(args[0])
152
+ return 1, "Security Group not found" if subnet.nil?
153
+ subnet_id = subnet['id']
154
+ end
155
+ @subnets_interface.setopts(options)
156
+ if options[:dry_run]
157
+ print_dry_run @subnets_interface.dry.get(subnet_id)
158
+ return exit_code, err
159
+ end
160
+ json_response = @subnets_interface.get(subnet_id)
161
+ render_result = render_with_format(json_response, options, 'subnet')
162
+ return exit_code, err if render_result
163
+
164
+ subnet = json_response['subnet']
165
+ if options[:json]
166
+ puts as_json(json_response, options, "subnet")
167
+ return 0
168
+ elsif options[:yaml]
169
+ puts as_yaml(json_response, options, "subnet")
170
+ return 0
171
+ elsif options[:csv]
172
+ puts records_as_csv([subnet], options)
173
+ return 0
174
+ end
175
+ print_h1 "Subnet Details", [], options
176
+ print cyan
177
+ description_cols = {
178
+ "ID" => 'id',
179
+ "Name" => 'name',
180
+ "Labels" => lambda {|it| format_list(it['labels']) },
181
+ "Description" => 'description',
182
+ "Type" => lambda {|it| it['type'] ? it['type']['name'] : '' },
183
+ "Network" => lambda {|it| subnet['network']['name'] rescue subnet['network'] },
184
+ "Cloud" => lambda {|it| subnet['zone']['name'] rescue subnet['zone'] },
185
+ "CIDR" => 'cidr',
186
+ "Gateway" => 'gateway',
187
+ "Netmask" => 'netmask',
188
+ "Subnet" => 'subnetAddress',
189
+ "Primary DNS" => 'dnsPrimary',
190
+ "Secondary DNS" => 'dnsSecondary',
191
+ "Pool" => lambda {|it| it['pool'] ? it['pool']['name'] : '' },
192
+ "DHCP" => lambda {|it| format_boolean it['dhcpServer'] },
193
+ "Allow IP Override" => lambda {|it| it['allowStaticOverride'] ? 'Yes' : 'No' },
194
+ "Active" => lambda {|it| format_boolean(it['active']) },
195
+ "Visibility" => lambda {|it| it['visibility'].to_s.capitalize },
196
+ "Tenants" => lambda {|it| it['tenants'] ? it['tenants'].collect {|it| it['name'] }.uniq.join(', ') : '' },
197
+ }
198
+ print_description_list(description_cols, subnet)
199
+
200
+ if subnet['resourcePermission'].nil?
201
+ print "\n", "No group access found", "\n"
202
+ else
203
+ print_h2 "Group Access"
204
+ rows = []
205
+ if subnet['resourcePermission']['all']
206
+ rows.push({"name" => 'All'})
207
+ end
208
+ if subnet['resourcePermission']['sites']
209
+ subnet['resourcePermission']['sites'].each do |site|
210
+ rows.push(site)
211
+ end
212
+ end
213
+ rows = rows.collect do |site|
214
+ {group: site['name'], default: site['default'] ? 'Yes' : ''}
215
+ end
216
+ columns = [:group, :default]
217
+ print cyan
218
+ print as_pretty_table(rows, columns)
219
+ end
220
+
221
+ print reset,"\n"
222
+ return 0
223
+ rescue RestClient::Exception => e
224
+ print_rest_exception(e, options)
225
+ return 1
226
+ end
227
+ end
228
+
229
+ def add(args)
230
+ options = {}
231
+ network_id = nil
232
+ subnet_type_id = nil
233
+ tenants = nil
234
+ group_access_all = nil
235
+ group_access_list = nil
236
+ group_defaults_list = nil
237
+ optparse = MtnCloud::Cli::OptionParser.new do |opts|
238
+ opts.banner = subcommand_usage("[name] --network NETWORK")
239
+ opts.on('--network NETWORK', String, "Network name or ID that this subnet will be a part of.") do |val|
240
+ network_id = val
241
+ end
242
+ opts.on('-t', '--type ID', "Subnet Type Name or ID") do |val|
243
+ subnet_type_id = val
244
+ end
245
+ opts.on('--name VALUE', String, "Name for this subnet") do |val|
246
+ options[:options]['name'] = val
247
+ # fill in silly names that vary by type
248
+ options[:options].deep_merge!({'config' => {'subnetName' => val}})
249
+ end
250
+ opts.on('-l', '--labels [LIST]', String, "Labels") do |val|
251
+ options[:options]['labels'] = parse_labels(val)
252
+ end
253
+ opts.on('--cidr VALUE', String, "Name for this subnet") do |val|
254
+ options[:options]['cidr'] = val
255
+ # fill in silly names that vary by type
256
+ options[:options].deep_merge!({'config' => {'subnetCidr' => val}})
257
+ end
258
+ opts.on('--group-access-all [on|off]', String, "Toggle Access for all groups.") do |val|
259
+ group_access_all = val.to_s == 'on' || val.to_s == 'true' || val.to_s == ''
260
+ end
261
+ opts.on('--group-access LIST', Array, "Group Access, comma separated list of group IDs.") do |list|
262
+ if list.size == 1 && list[0] == 'null' # hacky way to clear it
263
+ group_access_list = []
264
+ else
265
+ group_access_list = list.collect {|it| it.to_s.strip.empty? ? nil : it.to_s.strip }.compact.uniq
266
+ end
267
+ end
268
+ opts.on('--group-defaults LIST', Array, "Group Default Selection, comma separated list of group IDs") do |list|
269
+ if list.size == 1 && list[0] == 'null' # hacky way to clear it
270
+ group_defaults_list = []
271
+ else
272
+ group_defaults_list = list.collect {|it| it.to_s.strip.empty? ? nil : it.to_s.strip }.compact.uniq
273
+ end
274
+ end
275
+ opts.on('--tenants LIST', Array, "Tenant Access, comma separated list of account IDs") do |list|
276
+ if list.size == 1 && list[0] == 'null' # hacky way to clear it
277
+ options['tenants'] = []
278
+ else
279
+ options['tenants'] = list.collect {|it| it.to_s.strip.empty? ? nil : it.to_s.strip }.compact.uniq
280
+ end
281
+ end
282
+ opts.on('--accounts LIST', Array, "alias for --tenants") do |list|
283
+ if list.size == 1 && list[0] == 'null' # hacky way to clear it
284
+ options['tenants'] = []
285
+ else
286
+ options['tenants'] = list.collect {|it| it.to_s.strip.empty? ? nil : it.to_s.strip }.compact.uniq
287
+ end
288
+ end
289
+ opts.on('--visibility [private|public]', String, "Visibility") do |val|
290
+ options['visibility'] = val
291
+ end
292
+ opts.on('--active [on|off]', String, "Can be used to disable a subnet") do |val|
293
+ options['active'] = val.to_s == 'on' || val.to_s == 'true'
294
+ end
295
+ opts.on('--pool ID', String, "Network Pool") do |val|
296
+ options['pool'] = val.to_i
297
+ end
298
+ opts.on('--dhcp-server [on|off]', String, "DHCP Server") do |val|
299
+ options['dhcpServer'] = val.to_s == 'on' || val.to_s == 'true' || val.to_s == ''
300
+ end
301
+ opts.on('--can-assign-pool [on|off]', String, "DHCP Server") do |val|
302
+ options['canAssignPool'] = val.to_s == 'on' || val.to_s == 'true' || val.to_s == ''
303
+ end
304
+ build_common_options(opts, options, [:options, :payload, :json, :dry_run, :remote])
305
+ opts.footer = "Create a new subnet." + "\n" +
306
+ "--network is required. This is the name or id of a network." #+ "\n" +
307
+ #"[name] is required and can be passed as --name instead."
308
+ end
309
+ optparse.parse!(args)
310
+ # if args.count < 1 || args.count > 2
311
+ if args.count > 1
312
+ raise_command_error "wrong number of arguments, expected 0-1 and got (#{args.count}) #{args}\n#{optparse}"
313
+ end
314
+ if args[0]
315
+ options[:options]['name'] = args[1]
316
+ options[:options].deep_merge!({'config' => {'subnetName' => args[0]}})
317
+ end
318
+ connect(options)
319
+ begin
320
+ passed_options = (options[:options] || {}).reject {|k,v| k.is_a?(Symbol) }
321
+ payload = nil
322
+
323
+ # Network
324
+ prompt_results = prompt_for_network(network_id, options)
325
+ if prompt_results[:success]
326
+ network = prompt_results[:network]
327
+ else
328
+ return 1, "Network prompt failed."
329
+ end
330
+
331
+ if options[:payload]
332
+ payload = options[:payload]
333
+ payload.deep_merge!({'subnet' => passed_options}) unless passed_options.empty?
334
+
335
+ else
336
+ payload = {'subnet' => {}}
337
+ payload.deep_merge!({'subnet' => passed_options}) unless passed_options.empty?
338
+
339
+ # Name
340
+ # v_prompt = MtnCloud::Cli::OptionTypes.prompt([{'fieldName' => 'name', 'fieldLabel' => 'Name', 'type' => 'text', 'required' => true, 'description' => 'Name for this subnet.'}], options[:options])
341
+ # payload['subnet']['name'] = v_prompt['name']
342
+
343
+ # Subnet Type
344
+ if !subnet_type_id
345
+ v_prompt = MtnCloud::Cli::OptionTypes.prompt([{'fieldName' => 'type', 'fieldLabel' => 'Subnet Type', 'type' => 'select', 'optionSource' => 'subnetTypes', 'required' => true, 'description' => 'Choose a subnet type.'}], options[:options], @api_client, {networkId: network['id']})
346
+ subnet_type_id = v_prompt['type']
347
+ end
348
+ subnet_type = find_subnet_type_by_name_or_id(subnet_type_id)
349
+ return 1 if subnet_type.nil?
350
+ if subnet_type['creatable'] == false
351
+ raise_command_error "Subnet Type cannot be created: #{subnet_type['name']}"
352
+ end
353
+ payload['subnet']['type'] = {'id' => subnet_type['id'] }
354
+ #payload['subnet']['type'] = {'code' => subnet_type['code'] }
355
+
356
+ subnet_type_option_types = subnet_type['optionTypes']
357
+ if subnet_type_option_types && subnet_type_option_types.size > 0
358
+ # prompt for option types
359
+ subnet_type_params = MtnCloud::Cli::OptionTypes.prompt(subnet_type_option_types,options[:options],@api_client, {networkId: network['id'], zoneId: network['zone']['id']})
360
+ if subnet_type_params['subnet']
361
+ payload['subnet'].deep_merge!(subnet_type_params['subnet'])
362
+ end
363
+ if subnet_type_params['config']
364
+ payload['subnet']['config'] ||= {}
365
+ payload['subnet']['config'].deep_merge!(subnet_type_params['config'])
366
+ end
367
+ else
368
+ # DEFAULT INPUTS
369
+
370
+ # CIDR
371
+ # if options['cidr']
372
+ # payload['subnet']['cidr'] = options['cidr']
373
+ # else
374
+ # v_prompt = MtnCloud::Cli::OptionTypes.prompt([{'fieldName' => 'cidr', 'fieldLabel' => 'CIDR', 'type' => 'text', 'required' => false, 'description' => ''}], options)
375
+ # payload['subnet']['cidr'] = v_prompt['cidr']
376
+ # end
377
+
378
+ end
379
+
380
+ # CIDR
381
+ if options['cidr']
382
+ payload['subnet']['cidr'] = options['cidr']
383
+ elsif !subnet_type['code'].include? 'azure'
384
+ v_prompt = MtnCloud::Cli::OptionTypes.prompt([{'fieldName' => 'cidr', 'fieldLabel' => 'CIDR', 'type' => 'text', 'required' => true, 'description' => ''}], options)
385
+ payload['subnet']['cidr'] = v_prompt['cidr']
386
+ end
387
+
388
+ # DHCP
389
+ if options['dhcpServer']
390
+ payload['subnet']['dhcpServer'] = options['dhcpServer']
391
+ elsif subnet_type['dhcpServerEditable'] && payload['subnet']['dhcpServer'].nil? && !options[:no_prompt]
392
+ payload['subnet']['dhcpServer'] = MtnCloud::Cli::OptionTypes.confirm("DHCP Server?", {:default=>false})
393
+ end
394
+
395
+ # Allow IP Override
396
+ if options['allowStaticOverride']
397
+ payload['subnet']['allowStaticOverride']
398
+ elsif !options[:no_prompt]
399
+ payload['subnet']['allowStaticOverride'] = MtnCloud::Cli::OptionTypes.confirm("Allow IP Override?", {:default=>false})
400
+ end
401
+
402
+ # IP Pool
403
+ if options['pool']
404
+ payload['subnet']['pool'] = {'id' => options['pool']}
405
+ elsif subnet_type['canAssignPool'] && !options[:no_prompt]
406
+ network_pool_id = MtnCloud::Cli::OptionTypes.prompt([{'fieldName' => "pool", 'type' => 'select', 'fieldLabel' => "Network Pool", 'selectOptions' => list_network_pool_options(), 'required' => false, 'description' => 'Select Network Pool'}], options[:options], @api_client, {zoneId: network['zone']['id']}, options[:no_prompt])["pool"]
407
+ payload['subnet']['pool'] = {'id' => network_pool_id} if network_pool_id
408
+ end
409
+
410
+ # Group Access
411
+ # Group Access (default is All)
412
+ if group_access_all.nil?
413
+ if payload['resourcePermissions'].nil?
414
+ payload['resourcePermissions'] ||= {}
415
+ payload['resourcePermissions']['all'] = true
416
+ end
417
+ else
418
+ payload['resourcePermissions'] ||= {}
419
+ payload['resourcePermissions']['all'] = group_access_all
420
+ end
421
+ if group_access_list != nil
422
+ payload['resourcePermissions'] ||= {}
423
+ payload['resourcePermissions']['sites'] = group_access_list.collect do |site_id|
424
+ site = {"id" => site_id.to_i}
425
+ if group_defaults_list && group_defaults_list.include?(site_id)
426
+ site["default"] = true
427
+ end
428
+ site
429
+ end
430
+ end
431
+
432
+ # Tenants
433
+ if options['tenants']
434
+ payload['tenantPermissions'] = {}
435
+ payload['tenantPermissions']['accounts'] = options['tenants']
436
+ end
437
+
438
+ # Active
439
+ if options['active'] != nil
440
+ payload['subnet']['active'] = options['active']
441
+ end
442
+
443
+ # Visibility
444
+ if options['visibility'] != nil
445
+ payload['subnet']['visibility'] = options['visibility']
446
+ end
447
+
448
+ end
449
+
450
+ @subnets_interface.setopts(options)
451
+ if options[:dry_run]
452
+ print_dry_run @subnets_interface.dry.create(network['id'], payload)
453
+ return
454
+ end
455
+
456
+ json_response = @subnets_interface.create(network['id'], payload)
457
+ if options[:json]
458
+ puts as_json(json_response, options)
459
+ elsif !options[:quiet]
460
+ subnet = json_response['subnet']
461
+ print_green_success "Added subnet #{subnet['name']}"
462
+ get_args = [subnet['id']] + (options[:remote] ? ["-r",options[:remote]] : [])
463
+ get(get_args)
464
+ end
465
+ return 0
466
+ rescue RestClient::Exception => e
467
+ print_rest_exception(e, options)
468
+ return 1
469
+ end
470
+ end
471
+
472
+ def update(args)
473
+ options = {}
474
+ tenants = nil
475
+ group_access_all = nil
476
+ group_access_list = nil
477
+ group_defaults_list = nil
478
+ optparse = MtnCloud::Cli::OptionParser.new do |opts|
479
+ opts.banner = subcommand_usage("[subnet]")
480
+ opts.on('-l', '--labels [LIST]', String, "Labels") do |val|
481
+ options[:options]['labels'] = parse_labels(val)
482
+ end
483
+ opts.on('--group-access-all [on|off]', String, "Toggle Access for all groups.") do |val|
484
+ group_access_all = val.to_s == 'on' || val.to_s == 'true' || val.to_s == ''
485
+ end
486
+ opts.on('--group-access LIST', Array, "Group Access, comma separated list of group IDs.") do |list|
487
+ if list.size == 1 && list[0] == 'null' # hacky way to clear it
488
+ group_access_list = []
489
+ else
490
+ group_access_list = list.collect {|it| it.to_s.strip.empty? ? nil : it.to_s.strip }.compact.uniq
491
+ end
492
+ end
493
+ opts.on('--group-defaults LIST', Array, "Group Default Selection, comma separated list of group IDs") do |list|
494
+ if list.size == 1 && list[0] == 'null' # hacky way to clear it
495
+ group_defaults_list = []
496
+ else
497
+ group_defaults_list = list.collect {|it| it.to_s.strip.empty? ? nil : it.to_s.strip }.compact.uniq
498
+ end
499
+ end
500
+ opts.on('--tenants LIST', Array, "Tenant Access, comma separated list of account IDs") do |list|
501
+ if list.size == 1 && list[0] == 'null' # hacky way to clear it
502
+ options['tenants'] = []
503
+ else
504
+ options['tenants'] = list.collect {|it| it.to_s.strip.empty? ? nil : it.to_s.strip }.compact.uniq
505
+ end
506
+ end
507
+ opts.on('--accounts LIST', Array, "alias for --tenants") do |list|
508
+ if list.size == 1 && list[0] == 'null' # hacky way to clear it
509
+ options['tenants'] = []
510
+ else
511
+ options['tenants'] = list.collect {|it| it.to_s.strip.empty? ? nil : it.to_s.strip }.compact.uniq
512
+ end
513
+ end
514
+ opts.on('--visibility [private|public]', String, "Visibility") do |val|
515
+ options['visibility'] = val
516
+ end
517
+ opts.on('--active [on|off]', String, "Can be used to disable a subnet") do |val|
518
+ options['active'] = val.to_s == 'on' || val.to_s == 'true'
519
+ end
520
+ opts.on('--pool ID', String, "Network Pool") do |val|
521
+ options['pool'] = val.to_i
522
+ end
523
+ opts.on('--dhcp-server [on|off]', String, "DHCP Server") do |val|
524
+ options['dhcpServer'] = val.to_s == 'on' || val.to_s == 'true' || val.to_s == ''
525
+ end
526
+ opts.on('--can-assign-pool [on|off]', String, "DHCP Server") do |val|
527
+ options['canAssignPool'] = val.to_s == 'on' || val.to_s == 'true' || val.to_s == ''
528
+ end
529
+ build_common_options(opts, options, [:options, :payload, :json, :dry_run, :remote])
530
+ opts.footer = "Update a subnet." + "\n" +
531
+ "[subnet] is required. This is the name or id of a subnet."
532
+ end
533
+ optparse.parse!(args)
534
+ if args.count != 1
535
+ raise_command_error "wrong number of arguments, expected 1 and got (#{args.count}) #{args}\n#{optparse}"
536
+ end
537
+ connect(options)
538
+ begin
539
+ # network = find_network_by_name_or_id(args[0])
540
+ # return 1 if network.nil?
541
+
542
+ subnet = find_subnet_by_name_or_id(args[0])
543
+ return 1 if subnet.nil?
544
+
545
+ # merge -O options into normally parsed options
546
+ options.deep_merge!(options[:options].reject {|k,v| k.is_a?(Symbol) }) if options[:options]
547
+
548
+ # construct payload
549
+ payload = nil
550
+ if options[:payload]
551
+ payload = options[:payload]
552
+ else
553
+ # prompt for network options
554
+ payload = {
555
+ 'subnet' => {
556
+ }
557
+ }
558
+
559
+ # allow arbitrary -O options
560
+ payload['subnet'].deep_merge!(options[:options].reject {|k,v| k.is_a?(Symbol) }) if options[:options]
561
+
562
+ # Group Access
563
+ if group_access_all != nil
564
+ payload['resourcePermissions'] ||= {}
565
+ payload['resourcePermissions']['all'] = group_access_all
566
+ end
567
+ if group_access_list != nil
568
+ payload['resourcePermissions'] ||= {}
569
+ payload['resourcePermissions']['sites'] = group_access_list.collect do |site_id|
570
+ site = {"id" => site_id.to_i}
571
+ if group_defaults_list && group_defaults_list.include?(site_id)
572
+ site["default"] = true
573
+ end
574
+ site
575
+ end
576
+ end
577
+
578
+ # Tenants
579
+ if options['tenants']
580
+ payload['tenantPermissions'] = {}
581
+ payload['tenantPermissions']['accounts'] = options['tenants']
582
+ end
583
+
584
+ # Active
585
+ if options['active'] != nil
586
+ payload['subnet']['active'] = options['active']
587
+ end
588
+
589
+ # Visibility
590
+ if options['visibility'] != nil
591
+ payload['subnet']['visibility'] = options['visibility']
592
+ end
593
+
594
+ # DHCP
595
+ if options['dhcpServer'] != nil
596
+ payload['subnet']['dhcpServer'] = options['dhcpServer']
597
+ end
598
+
599
+ # Allow IP Override
600
+ if options['allowStaticOverride'] != nil
601
+ payload['subnet']['allowStaticOverride']
602
+ end
603
+
604
+ # IP Pool
605
+ if options['pool'] != nil
606
+ payload['subnet']['pool'] = {'id' => options['pool']}
607
+ end
608
+
609
+ end
610
+
611
+ @subnets_interface.setopts(options)
612
+ if options[:dry_run]
613
+ print_dry_run @subnets_interface.dry.update(subnet['id'], payload)
614
+ return
615
+ end
616
+ json_response = @subnets_interface.update(subnet['id'], payload)
617
+ if options[:json]
618
+ puts as_json(json_response, options)
619
+ elsif !options[:quiet]
620
+ subnet = json_response['subnet']
621
+ print_green_success "Updated subnet #{subnet['name']}"
622
+ get_args = [subnet['id']] + (options[:remote] ? ["-r",options[:remote]] : [])
623
+ get(get_args)
624
+ end
625
+ return 0
626
+ rescue RestClient::Exception => e
627
+ print_rest_exception(e, options)
628
+ return 1
629
+ end
630
+ end
631
+
632
+ def remove(args)
633
+ options = {}
634
+ optparse = MtnCloud::Cli::OptionParser.new do |opts|
635
+ opts.banner = subcommand_usage("[subnet]")
636
+ build_common_options(opts, options, [:auto_confirm, :json, :dry_run, :remote])
637
+ opts.footer = "Delete a subnet." + "\n" +
638
+ "[subnet] is required. This is the name or id of a subnet."
639
+ end
640
+ optparse.parse!(args)
641
+ if args.count != 1
642
+ raise_command_error "wrong number of arguments, expected 1 and got (#{args.count}) #{args}\n#{optparse}"
643
+ end
644
+ connect(options)
645
+ begin
646
+ subnet = find_subnet_by_name_or_id(args[0])
647
+ return 1 if subnet.nil?
648
+
649
+ subnet_type = find_subnet_type_by_name_or_id(subnet['type']['id'])
650
+ return 1 if subnet_type.nil?
651
+ if subnet_type['deletable'] == false
652
+ raise_command_error "Subnet Type cannot be deleted: #{subnet_type['name']}"
653
+ end
654
+
655
+ unless options[:yes] || MtnCloud::Cli::OptionTypes.confirm("Are you sure you want to delete the subnet: #{subnet['name']}?")
656
+ return 9, "aborted command"
657
+ end
658
+ @subnets_interface.setopts(options)
659
+ if options[:dry_run]
660
+ print_dry_run @subnets_interface.dry.destroy(subnet['id'])
661
+ return 0
662
+ end
663
+ json_response = @subnets_interface.destroy(subnet['id'])
664
+ if options[:json]
665
+ puts as_json(json_response, options)
666
+ else
667
+ print_green_success "Removed subnet #{subnet['name']}"
668
+ end
669
+ return 0
670
+ rescue RestClient::Exception => e
671
+ print_rest_exception(e, options)
672
+ return 1
673
+ end
674
+ end
675
+
676
+ def get_subnet_type(args)
677
+ options = {}
678
+ optparse = MtnCloud::Cli::OptionParser.new do |opts|
679
+ opts.banner = subcommand_usage("[type]")
680
+ build_common_options(opts, options, [:list, :query, :json, :yaml, :csv, :fields, :dry_run, :remote])
681
+ opts.footer = "Get details about a subnet type.\n" +
682
+ "[type] is required. This is the id or name of a subnet type."
683
+ end
684
+ optparse.parse!(args)
685
+ connect(options)
686
+ begin
687
+ params = {}
688
+ @subnet_types_interface.setopts(options)
689
+ if options[:dry_run]
690
+ if args[0].to_s =~ /\A\d{1,}\Z/
691
+ print_dry_run @subnet_types_interface.dry.get(args[0].to_i)
692
+ else
693
+ print_dry_run @subnet_types_interface.dry.list({name:args[0]})
694
+ end
695
+ return
696
+ end
697
+
698
+ subnet_type = find_subnet_type_by_name_or_id(args[0])
699
+ return 1 if subnet_type.nil?
700
+ json_response = {'subnetType' => subnet_type} # skip redundant request
701
+ # json_response = @networks_interface.get(subnet_type['id'])
702
+
703
+ render_result = render_with_format(json_response, options, 'subnetType')
704
+ return 0 if render_result
705
+
706
+ subnet_type = json_response['subnetType']
707
+
708
+ title = "Subnet Type"
709
+
710
+ print_h1 "Subnet Type", [], options
711
+
712
+ print cyan
713
+ description_cols = {
714
+ "ID" => 'id',
715
+ "Name" => 'name',
716
+ "Code" => 'name',
717
+ "Description" => 'description',
718
+ "Createable" => lambda {|it| format_boolean(it['creatable']) },
719
+ "Deletable" => lambda {|it| format_boolean(it['deleteable']) },
720
+ }
721
+ print_description_list(description_cols, subnet_type)
722
+
723
+
724
+
725
+ option_types = subnet_type['optionTypes'] || []
726
+ option_types = option_types.sort {|x,y| x['displayOrder'] <=> y['displayOrder'] }
727
+ if !option_types.empty?
728
+ print_h2 "Config Option Types", [], options
729
+ option_type_cols = {
730
+ "Name" => lambda {|it| it['fieldContext'].to_s != '' ? "#{it['fieldContext']}.#{it['fieldName']}" : it['fieldName'] },
731
+ "Label" => lambda {|it| it['fieldLabel'] },
732
+ "Type" => lambda {|it| it['type'] },
733
+ }
734
+ print cyan
735
+ print as_pretty_table(option_types, option_type_cols)
736
+ end
737
+
738
+ print reset,"\n"
739
+ return 0
740
+ rescue RestClient::Exception => e
741
+ print_rest_exception(e, options)
742
+ exit 1
743
+ end
744
+ end
745
+
746
+ def list_subnet_types(args)
747
+ options = {}
748
+ optparse = MtnCloud::Cli::OptionParser.new do |opts|
749
+ opts.banner = subcommand_usage()
750
+ opts.on( '-c', '--cloud CLOUD', "Cloud Name or ID" ) do |val|
751
+ options[:cloud] = val
752
+ end
753
+ build_common_options(opts, options, [:list, :query, :json, :yaml, :csv, :fields, :dry_run, :remote])
754
+ opts.footer = "List subnet types."
755
+ end
756
+ optparse.parse!(args)
757
+ connect(options)
758
+ begin
759
+ params = {}
760
+ params.merge!(parse_list_options(options))
761
+ if options[:cloud]
762
+ #return network_types_for_cloud(options[:cloud], options)
763
+ zone = find_zone_by_name_or_id(nil, options[:cloud])
764
+ #params["zoneTypeId"] = zone['zoneTypeId']
765
+ params["zoneId"] = zone['id']
766
+ params["creatable"] = true
767
+ end
768
+ @subnet_types_interface.setopts(options)
769
+ if options[:dry_run]
770
+ print_dry_run @subnet_types_interface.dry.list(params)
771
+ return
772
+ end
773
+ json_response = @subnet_types_interface.list(params)
774
+
775
+ render_result = render_with_format(json_response, options, 'subnetTypes')
776
+ return 0 if render_result
777
+
778
+ subnet_types = json_response['subnetTypes']
779
+
780
+ title = "Subnet Types"
781
+ subtitles = []
782
+ subtitles += parse_list_subtitles(options)
783
+ if options[:cloud]
784
+ subtitles << "Cloud: #{options[:cloud]}"
785
+ end
786
+ print_h1 title, subtitles
787
+ if subnet_types.empty?
788
+ print cyan,"No subnet types found.",reset,"\n"
789
+ else
790
+ rows = subnet_types.collect do |subnet_type|
791
+ {
792
+ id: subnet_type['id'],
793
+ code: subnet_type['code'],
794
+ name: subnet_type['name']
795
+ }
796
+ end
797
+ columns = [:id, :name, :code]
798
+ print cyan
799
+ print as_pretty_table(rows, columns, options)
800
+ print reset
801
+ print_results_pagination(json_response)
802
+ end
803
+ print reset,"\n"
804
+ return 0
805
+
806
+ rescue RestClient::Exception => e
807
+ print_rest_exception(e, options)
808
+ exit 1
809
+ end
810
+ end
811
+
812
+ private
813
+
814
+ def list_network_pool_options()
815
+ @network_pools_interface.list['networkPools'].collect do |np|
816
+ {'name' => np['name'], 'value' => np['id']}
817
+ end
818
+ end
819
+ end