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,896 @@
1
+ require 'mtncloud/cli/cli_command'
2
+
3
+ class MtnCloud::Cli::NetworkDomainsCommand
4
+ include MtnCloud::Cli::CliCommand
5
+ include MtnCloud::Cli::InfrastructureHelper
6
+
7
+ set_command_name :'network-domains'
8
+
9
+ register_subcommands :list, :get, :add, :update, :remove
10
+ register_subcommands :list_records, :get_record, :add_record, :remove_record
11
+
12
+ # set_default_subcommand :list
13
+
14
+ def initialize()
15
+ # @appliance_name, @appliance_url = MtnCloud::Cli::Remote.active_appliance
16
+ end
17
+
18
+ def connect(opts)
19
+ @api_client = establish_remote_appliance_connection(opts)
20
+ @network_domains_interface = @api_client.network_domains
21
+ @network_domain_records_interface = @api_client.network_domain_records
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 domains."
37
+ end
38
+ optparse.parse!(args)
39
+ connect(options)
40
+ begin
41
+ params.merge!(parse_list_options(options))
42
+ @network_domains_interface.setopts(options)
43
+ if options[:dry_run]
44
+ print_dry_run @network_domains_interface.dry.list(params)
45
+ return
46
+ end
47
+ json_response = @network_domains_interface.list(params)
48
+ network_domains = json_response["networkDomains"]
49
+ if options[:json]
50
+ puts as_json(json_response, options, "networkDomains")
51
+ return 0
52
+ elsif options[:yaml]
53
+ puts as_yaml(json_response, options, "networkDomains")
54
+ return 0
55
+ elsif options[:csv]
56
+ puts records_as_csv(network_domains, options)
57
+ return 0
58
+ end
59
+ title = "Network Domains"
60
+ subtitles = []
61
+ subtitles += parse_list_subtitles(options)
62
+ print_h1 title, subtitles
63
+ if network_domains.empty?
64
+ print cyan,"No network domains found.",reset,"\n"
65
+ else
66
+ rows = network_domains.collect {|network_domain|
67
+ row = {
68
+ id: network_domain['id'],
69
+ name: network_domain['name'],
70
+ description: network_domain['description'],
71
+ source: network_domain['refType'] ? "#{network_domain['refType']} #{network_domain['id']}" : '', # showReferenceName(refType, refId)
72
+ domainController: network_domain['domainController'] ? 'Yes' : 'No',
73
+ visibility: network_domain['visibility'].to_s.capitalize,
74
+ tenant: network_domain['account'] ? network_domain['account']['name'] : '',
75
+ owner: network_domain['owner'] ? network_domain['owner']['name'] : '',
76
+ }
77
+ row
78
+ }
79
+ columns = [:id, :name, :description, {:domainController => {:display_name => "DOMAIN CONTROLLER"} }, :visibility, :tenant]
80
+ if options[:include_fields]
81
+ columns = options[:include_fields]
82
+ rows = network_domains
83
+ end
84
+ print cyan
85
+ print as_pretty_table(rows, columns, options)
86
+ print reset
87
+ print_results_pagination(json_response, {:label => "network domain", :n_label => "network domains"})
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-domain]")
101
+ build_common_options(opts, options, [:json, :yaml, :csv, :fields, :dry_run, :remote])
102
+ opts.footer = "Get details about a network domain." + "\n" +
103
+ "[network-domain] is required. This is the name or id of a network domain."
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-domain]\n#{optparse}"
109
+ return 1
110
+ end
111
+ connect(options)
112
+ begin
113
+ @network_domains_interface.setopts(options)
114
+ if options[:dry_run]
115
+ if args[0].to_s =~ /\A\d{1,}\Z/
116
+ print_dry_run @network_domains_interface.dry.get(args[0].to_i)
117
+ else
118
+ print_dry_run @network_domains_interface.dry.list({name:args[0]})
119
+ end
120
+ return
121
+ end
122
+ network_domain = find_network_domain_by_name_or_id(args[0])
123
+ return 1 if network_domain.nil?
124
+ json_response = {'networkDomain' => network_domain} # skip redundant request
125
+ # json_response = @network_domains_interface.get(network_domain['id'])
126
+ network_domain = json_response['networkDomain']
127
+
128
+ if options[:json]
129
+ puts as_json(json_response, options, 'networkDomain')
130
+ return 0
131
+ elsif options[:yaml]
132
+ puts as_yaml(json_response, options, 'networkDomain')
133
+ return 0
134
+ elsif options[:csv]
135
+ puts records_as_csv([network_domain], options)
136
+ return 0
137
+ end
138
+ print_h1 "Network Domain Details"
139
+ print cyan
140
+ description_cols = {
141
+ "ID" => 'id',
142
+ "Name" => lambda {|it| it['name'] },
143
+ "Description" => lambda {|it| it['description'] },
144
+ # "Source" => lambda {|it| it['refSource'] }, showReferenceName(refType, refId)
145
+ "Domain Controller" => lambda {|it| it['domainController'] ? 'Yes' : 'No' },
146
+ "Public Zone" => lambda {|it| it['publicZone'] ? 'Yes' : 'No' },
147
+ "Domain Username" => lambda {|it| it['domainUsername'] },
148
+ "Domain Password" => lambda {|it| it['domainPassword'] },
149
+ "DC Server" => lambda {|it| it['dcServer'] },
150
+ "OU Path" => lambda {|it| it['ouPath'] },
151
+ "Visibility" => lambda {|it| it['visibility'].to_s.capitalize },
152
+ "Tenant" => lambda {|it| it['account'] ? it['account']['name'] : '' },
153
+ }
154
+ print_description_list(description_cols, network_domain)
155
+
156
+ # print_h2 "Domain Records"
157
+ # print cyan
158
+ # if network_domain['records']
159
+ # network_domain['records'].each do |r|
160
+ # puts " * #{r['name']}\t#{r['fqdn']}\t#{r['type']}\t#{r['ttl']}"
161
+ # end
162
+ # end
163
+ print reset,"\n"
164
+ return 0
165
+ rescue RestClient::Exception => e
166
+ print_rest_exception(e, options)
167
+ return 1
168
+ end
169
+ end
170
+
171
+ def add(args)
172
+ options = {}
173
+ ip_range_list = nil
174
+ optparse = MtnCloud::Cli::OptionParser.new do |opts|
175
+ opts.banner = subcommand_usage()
176
+ opts.on('--name VALUE', String, "Name for this network domain") do |val|
177
+ options['name'] = val
178
+ end
179
+ opts.on('--description VALUE', String, "Description for this network domain") do |val|
180
+ options['description'] = val
181
+ end
182
+ opts.on('--public-zone [on|off]', String, "Public Zone") do |val|
183
+ options['publicZone'] = val.to_s == 'on' || val.to_s == 'true'
184
+ end
185
+ opts.on('--domain-controller [on|off]', String, "Join Domain Controller") do |val|
186
+ options['domainController'] = val.to_s == 'on' || val.to_s == 'true'
187
+ end
188
+ opts.on('--domain-username VALUE', String, "Domain Username") do |val|
189
+ options['domainUsername'] = val
190
+ end
191
+ opts.on('--domain-password VALUE', String, "Domain Password") do |val|
192
+ options['domainPassword'] = val
193
+ end
194
+ opts.on('--dc-server VALUE', String, "DC Server") do |val|
195
+ options['dcServer'] = val
196
+ end
197
+ opts.on('--ou-path VALUE', String, "OU Path") do |val|
198
+ options['ouPath'] = val
199
+ end
200
+ opts.on('--visibility [private|public]', String, "Visibility") do |val|
201
+ options['visibility'] = val
202
+ end
203
+ opts.on('--tenant ID', String, "Tenant Account ID") do |val|
204
+ options['tenant'] = val
205
+ end
206
+ build_common_options(opts, options, [:options, :payload, :json, :dry_run, :quiet, :remote])
207
+ opts.footer = "Create a new network domain." + "\n" +
208
+ "[name] is required and can be passed as --name instead."
209
+ end
210
+ optparse.parse!(args)
211
+ if args.count > 1
212
+ print_error MtnCloud::Terminal.angry_prompt
213
+ puts_error "wrong number of arguments, expected 0-1 and got #{args.count}\n#{optparse}"
214
+ return 1
215
+ end
216
+ connect(options)
217
+ begin
218
+ # merge -O options into normally parsed options
219
+ options.deep_merge!(options[:options].reject {|k,v| k.is_a?(Symbol) }) if options[:options]
220
+
221
+ # support [name] as first argument
222
+ if args[0]
223
+ options['name'] = args[0]
224
+ end
225
+
226
+ # construct payload
227
+ payload = nil
228
+ if options[:payload]
229
+ payload = options[:payload]
230
+ else
231
+ # prompt for network options
232
+ payload = {
233
+ 'networkDomain' => {
234
+ # 'config' => {}
235
+ }
236
+ }
237
+
238
+ # allow arbitrary -O options
239
+ payload['networkDomain'].deep_merge!(options[:options].reject {|k,v| k.is_a?(Symbol) }) if options[:options]
240
+
241
+ # Name
242
+ if options['name']
243
+ payload['networkDomain']['name'] = options['name']
244
+ else
245
+ v_prompt = MtnCloud::Cli::OptionTypes.prompt([{'fieldName' => 'name', 'fieldLabel' => 'Name', 'type' => 'text', 'required' => true, 'description' => 'Name for this network domain.'}], options)
246
+ payload['networkDomain']['name'] = v_prompt['name']
247
+ end
248
+
249
+ # Description
250
+ if options['description']
251
+ payload['networkDomain']['description'] = options['description']
252
+ else
253
+ v_prompt = MtnCloud::Cli::OptionTypes.prompt([{'fieldName' => 'description', 'fieldLabel' => 'Description', 'type' => 'text', 'required' => false, 'description' => 'Description for this network domain.'}], options)
254
+ payload['networkDomain']['description'] = v_prompt['description']
255
+ end
256
+
257
+ # Public Zone
258
+ if options['publicZone'] != nil
259
+ payload['networkDomain']['publicZone'] = options['publicZone']
260
+ else
261
+ v_prompt = MtnCloud::Cli::OptionTypes.prompt([{'fieldName' => 'publicZone', 'fieldLabel' => 'Public Zone', 'type' => 'checkbox', 'required' => false, 'description' => ''}], options)
262
+ payload['networkDomain']['publicZone'] = (v_prompt['publicZone'].to_s == 'on') unless v_prompt['publicZone'].nil?
263
+ end
264
+
265
+ # Domain Controller
266
+ join_domain_controller = false
267
+ if options['domainController'] != nil
268
+ payload['networkDomain']['domainController'] = options['domainController']
269
+ else
270
+ v_prompt = MtnCloud::Cli::OptionTypes.prompt([{'fieldName' => 'domainController', 'fieldLabel' => 'Join Domain Controller', 'type' => 'checkbox', 'required' => false, 'description' => ''}], options)
271
+ payload['networkDomain']['domainController'] = (v_prompt['domainController'].to_s == 'on') unless v_prompt['domainController'].nil?
272
+ end
273
+ join_domain_controller = !!payload['networkDomain']['domainController']
274
+
275
+ # Domain Username
276
+ if options['domainUsername'] != nil
277
+ payload['networkDomain']['domainUsername'] = options['domainUsername']
278
+ elsif join_domain_controller
279
+ v_prompt = MtnCloud::Cli::OptionTypes.prompt([{'fieldName' => 'domainUsername', 'fieldLabel' => 'Domain Username', 'type' => 'text', 'required' => false, 'description' => ''}], options)
280
+ payload['networkDomain']['domainUsername'] = v_prompt['domainUsername'] unless v_prompt['domainUsername'].nil?
281
+ end
282
+
283
+ # Domain Password
284
+ if options['domainPassword'] != nil
285
+ payload['networkDomain']['domainPassword'] = options['domainPassword']
286
+ elsif join_domain_controller
287
+ v_prompt = MtnCloud::Cli::OptionTypes.prompt([{'fieldName' => 'domainPassword', 'fieldLabel' => 'Domain Password', 'type' => 'password', 'required' => false, 'description' => ''}], options)
288
+ payload['networkDomain']['domainPassword'] = v_prompt['domainPassword'] unless v_prompt['domainPassword'].nil?
289
+ end
290
+
291
+ # DC Server
292
+ if options['dcServer'] != nil
293
+ payload['networkDomain']['dcServer'] = options['dcServer']
294
+ elsif join_domain_controller
295
+ v_prompt = MtnCloud::Cli::OptionTypes.prompt([{'fieldName' => 'dcServer', 'fieldLabel' => 'DC Server', 'type' => 'text', 'required' => false, 'description' => ''}], options)
296
+ payload['networkDomain']['dcServer'] = v_prompt['dcServer'] unless v_prompt['dcServer'].nil?
297
+ end
298
+
299
+ # OU Path
300
+ if options['ouPath'] != nil
301
+ payload['networkDomain']['ouPath'] = options['ouPath']
302
+ elsif join_domain_controller
303
+ v_prompt = MtnCloud::Cli::OptionTypes.prompt([{'fieldName' => 'ouPath', 'fieldLabel' => 'OU Path', 'type' => 'text', 'required' => false, 'description' => ''}], options)
304
+ payload['networkDomain']['ouPath'] = v_prompt['ouPath'] unless v_prompt['ouPath'].nil?
305
+ end
306
+
307
+ # Visibility
308
+ if options['visibility']
309
+ payload['networkDomain']['visibility'] = options['visibility'].to_s.downcase
310
+ else
311
+ v_prompt = MtnCloud::Cli::OptionTypes.prompt([{'fieldName' => 'visibility', 'fieldLabel' => 'Visibility', 'type' => 'select', 'selectOptions' => [{'name' => 'Private', 'value' => 'private'},{'name' => 'Public', 'value' => 'public'}], 'required' => false, 'description' => 'Visibility', 'defaultValue' => 'private'}], options)
312
+ payload['networkDomain']['visibility'] = v_prompt['visibility'].to_s.downcase
313
+ end
314
+
315
+ # Tenant
316
+ if options['tenant']
317
+ payload['networkDomain']['account'] = {'id' => options['tenant'].to_i}
318
+ else
319
+ begin
320
+ available_accounts = @api_client.accounts.list({max:10000})['accounts'].collect {|it| {'name' => it['name'], 'value' => it['id'], 'id' => it['id']}}
321
+ account_prompt = MtnCloud::Cli::OptionTypes.prompt([{'fieldName' => 'tenant', 'fieldLabel' => 'Tenant', 'type' => 'select', 'selectOptions' => available_accounts, 'required' => false, 'description' => 'Tenant'}], options)
322
+ if account_prompt['tenant']
323
+ payload['networkDomain']['account'] = {'id' => account_prompt['tenant']}
324
+ end
325
+ rescue
326
+ puts "failed to load list of available tenants: #{ex.message}"
327
+ end
328
+ end
329
+
330
+ end
331
+
332
+ @network_domains_interface.setopts(options)
333
+ if options[:dry_run]
334
+ print_dry_run @network_domains_interface.dry.create(payload)
335
+ return
336
+ end
337
+ json_response = @network_domains_interface.create(payload)
338
+ if options[:json]
339
+ print JSON.pretty_generate(json_response)
340
+ print "\n"
341
+ elsif !options[:quiet]
342
+ network_domain = json_response['networkDomain']
343
+ print_green_success "Added network domain #{network_domain['name']}"
344
+ get([network_domain['id']])
345
+ end
346
+ return 0
347
+ rescue RestClient::Exception => e
348
+ print_rest_exception(e, options)
349
+ exit 1
350
+ end
351
+ end
352
+
353
+ def update(args)
354
+ options = {}
355
+ ip_range_list = nil
356
+ optparse = MtnCloud::Cli::OptionParser.new do |opts|
357
+ opts.banner = subcommand_usage("[network-domain] [options]")
358
+ opts.on('--name VALUE', String, "Name for this network domain") do |val|
359
+ options['name'] = val
360
+ end
361
+ opts.on('--type VALUE', String, "Type of network domain") do |val|
362
+ options['description'] = val
363
+ end
364
+ opts.on('--ip-ranges LIST', Array, "IP Ranges, comma separated list IP ranges in the format start-end.") do |list|
365
+ if list.size == 1 && list[0] == 'null' # hacky way to clear it
366
+ ip_range_list = []
367
+ else
368
+ ip_range_list = list.collect {|it| it.to_s.strip.empty? ? nil : it.to_s.strip }.compact.uniq
369
+ ip_range_list = ip_range_list.collect {|it|
370
+ range_parts = it.split("-")
371
+ {startAddress: range_parts[0].to_s.strip, endAddress: range_parts[1].to_s.strip}
372
+ }
373
+ end
374
+ end
375
+ build_common_options(opts, options, [:options, :payload, :json, :dry_run, :remote])
376
+ opts.footer = "Update a network domain." + "\n" +
377
+ "[network-domain] is required. This is the id of a network domain."
378
+ end
379
+ optparse.parse!(args)
380
+ if args.count != 1
381
+ print_error MtnCloud::Terminal.angry_prompt
382
+ puts_error "wrong number of arguments, expected 1 and got #{args.count}\n#{optparse}"
383
+ return 1
384
+ end
385
+ connect(options)
386
+
387
+ begin
388
+ network_domain = find_network_domain_by_name_or_id(args[0])
389
+ return 1 if network_domain.nil?
390
+
391
+ # merge -O options into normally parsed options
392
+ options.deep_merge!(options[:options].reject {|k,v| k.is_a?(Symbol) }) if options[:options]
393
+
394
+ # construct payload
395
+ payload = nil
396
+ if options[:payload]
397
+ payload = options[:payload]
398
+ else
399
+ # prompt for network options
400
+ payload = {
401
+ 'networkDomain' => {
402
+ }
403
+ }
404
+
405
+ # allow arbitrary -O options
406
+ payload['networkDomain'].deep_merge!(options[:options].reject {|k,v| k.is_a?(Symbol) }) if options[:options]
407
+
408
+ # Name
409
+ if options['name']
410
+ payload['networkDomain']['name'] = options['name']
411
+ else
412
+ # v_prompt = MtnCloud::Cli::OptionTypes.prompt([{'fieldName' => 'name', 'fieldLabel' => 'Name', 'type' => 'text', 'required' => true, 'description' => 'Name for this network domain.'}], options)
413
+ # payload['networkDomain']['name'] = v_prompt['name']
414
+ end
415
+
416
+ # Network Domain Type
417
+ # network_type_id = nil
418
+ # v_prompt = MtnCloud::Cli::OptionTypes.prompt([{'fieldName' => 'type', 'fieldLabel' => 'Domain Type', 'type' => 'select', 'optionSource' => 'networkDomainTypes', 'required' => true, 'description' => 'Choose a network domain type.'}], options, @api_client, {})
419
+ # network_type_id = v_prompt['type']
420
+ # if network_type_id.nil? || network_type_id.to_s.empty?
421
+ # print_red_alert "Domain Type not found by id '#{options['type']}'"
422
+ # return 1
423
+ # end
424
+ # payload['networkDomain']['type'] = {'id' => network_type_id.to_i }
425
+ if options['type']
426
+ payload['networkDomain']['type'] = {'id' => options['type'].to_i }
427
+ end
428
+
429
+ # IP Ranges
430
+ if ip_range_list
431
+ ip_range_list = ip_range_list.collect {|range|
432
+ # ugh, need to allow changing an existing range by id too
433
+ if network_domain['ipRanges']
434
+ existing_range = network_domain['ipRanges'].find {|r|
435
+ range[:startAddress] == r['startAddress'] && range[:endAddress] == r['endAddress']
436
+ }
437
+ if existing_range
438
+ range[:id] = existing_range['id']
439
+ end
440
+ end
441
+ range
442
+ }
443
+ payload['networkDomain']['ipRanges'] = ip_range_list
444
+ else
445
+ # v_prompt = MtnCloud::Cli::OptionTypes.prompt([{'fieldName' => 'ipRanges', 'fieldLabel' => 'IP Ranges', 'type' => 'text', 'required' => true, 'description' => 'IP Ranges in the domain, comma separated list of ranges in the format start-end.'}], options)
446
+ # payload['networkDomain']['ipRanges'] = v_prompt['ipRanges'].to_s.split(",").collect {|it| it.to_s.strip.empty? ? nil : it.to_s.strip }.compact.uniq.collect {|it|
447
+ # it
448
+ # }
449
+ end
450
+
451
+ end
452
+ @network_domains_interface.setopts(options)
453
+ if options[:dry_run]
454
+ print_dry_run @network_domains_interface.dry.update(network_domain["id"], payload)
455
+ return
456
+ end
457
+ json_response = @network_domains_interface.update(network_domain["id"], payload)
458
+ if options[:json]
459
+ puts as_json(json_response)
460
+ else
461
+ network_domain = json_response['networkDomain']
462
+ print_green_success "Updated network domain #{network_domain['name']}"
463
+ get([network_domain['id']])
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 remove(args)
473
+ options = {}
474
+ optparse = MtnCloud::Cli::OptionParser.new do |opts|
475
+ opts.banner = subcommand_usage("[network-domain]")
476
+ build_common_options(opts, options, [:account, :auto_confirm, :json, :dry_run, :remote])
477
+ opts.footer = "Delete a network domain." + "\n" +
478
+ "[network-domain] is required. This is the name or id of a network domain."
479
+ end
480
+ optparse.parse!(args)
481
+
482
+ if args.count < 1
483
+ print_error MtnCloud::Terminal.angry_prompt
484
+ puts_error "#{command_name} missing argument: [network-domain]\n#{optparse}"
485
+ return 1
486
+ end
487
+
488
+ connect(options)
489
+ begin
490
+ network_domain = find_network_domain_by_name_or_id(args[0])
491
+ return 1 if network_domain.nil?
492
+
493
+ unless options[:yes] || MtnCloud::Cli::OptionTypes.confirm("Are you sure you want to delete the network domain: #{network_domain['name']}?")
494
+ return 9, "aborted command"
495
+ end
496
+ @network_domains_interface.setopts(options)
497
+ if options[:dry_run]
498
+ print_dry_run @network_domains_interface.dry.destroy(network_domain['id'])
499
+ return 0
500
+ end
501
+ json_response = @network_domains_interface.destroy(network_domain['id'])
502
+ if options[:json]
503
+ print JSON.pretty_generate(json_response)
504
+ print "\n"
505
+ else
506
+ print_green_success "Removed network domain #{network_domain['name']}"
507
+ # list([])
508
+ end
509
+ return 0
510
+ rescue RestClient::Exception => e
511
+ print_rest_exception(e, options)
512
+ return 1
513
+ end
514
+ end
515
+
516
+ def list_records(args)
517
+ options = {}
518
+ params = {}
519
+ optparse = MtnCloud::Cli::OptionParser.new do |opts|
520
+ opts.banner = subcommand_usage("[network-domain]")
521
+ build_common_options(opts, options, [:list, :json, :yaml, :csv, :fields, :json, :dry_run, :remote])
522
+ opts.footer = "List network domain records.\n" +
523
+ "[network-domain] is required. This is the name or id of a network domain."
524
+ end
525
+ optparse.parse!(args)
526
+ connect(options)
527
+ if args.count != 1
528
+ raise_command_error "wrong number of arguments, expected 1 and got (#{args.count}) #{args}\n#{optparse}"
529
+ end
530
+ begin
531
+ network_domain = find_network_domain_by_name_or_id(args[0])
532
+ return 1 if network_domain.nil?
533
+ network_domain_id = network_domain['id']
534
+
535
+ params.merge!(parse_list_options(options))
536
+ @network_domain_records_interface.setopts(options)
537
+ if options[:dry_run]
538
+ print_dry_run @network_domain_records_interface.dry.list(network_domain_id, params)
539
+ return
540
+ end
541
+ json_response = @network_domain_records_interface.list(network_domain_id, params)
542
+ network_domain_records = json_response["networkDomainRecords"]
543
+ if options[:json]
544
+ puts as_json(json_response, options, "networkDomainRecords")
545
+ return 0
546
+ elsif options[:yaml]
547
+ puts as_yaml(json_response, options, "networkDomainRecords")
548
+ return 0
549
+ elsif options[:csv]
550
+ puts records_as_csv(network_domain_records, options)
551
+ return 0
552
+ end
553
+ title = "Network Domain Records"
554
+ subtitles = []
555
+ subtitles += parse_list_subtitles(options)
556
+ print_h1 title, subtitles
557
+ if network_domain_records.empty?
558
+ print cyan,"No network domain records found.",reset,"\n"
559
+ else
560
+ columns = [
561
+ {"ID" => lambda {|it| it['id'] } },
562
+ {"NAME" => lambda {|it| it['name'] } },
563
+ #{"FQDN" => lambda {|it| it['fqdn'] } },
564
+ {"TYPE" => lambda {|it| it['type'] } },
565
+ # {"CONTENT" => lambda {|it| it['content'] } },
566
+ {"CONTENT" => lambda {|it| it['content'].to_s.split.join(",") } },
567
+ # {"COMMENT" => lambda {|it| it['comment'] } },
568
+ #{"CREATED BY" => lambda {|it| it['createdBy'] ? it['createdBy']['username'] : '' } },
569
+ #{"CREATED" => lambda {|it| format_local_dt(it['dateCreated']) } },
570
+ #{"UPDATED" => lambda {|it| format_local_dt(it['lastUpdated']) } },
571
+ ]
572
+ if options[:include_fields]
573
+ columns = options[:include_fields]
574
+ end
575
+ print as_pretty_table(network_domain_records, columns, options)
576
+ print_results_pagination(json_response)
577
+ end
578
+ print reset,"\n"
579
+ return 0
580
+ rescue RestClient::Exception => e
581
+ print_rest_exception(e, options)
582
+ exit 1
583
+ end
584
+ end
585
+
586
+ def get_record(args)
587
+ options = {}
588
+ params = {}
589
+ optparse = MtnCloud::Cli::OptionParser.new do |opts|
590
+ opts.banner = subcommand_usage("[network-domain] [record]")
591
+ build_common_options(opts, options, [:query, :json, :yaml, :csv, :fields, :dry_run, :remote])
592
+ opts.footer = "Get details about a network domain record.\n" +
593
+ "[network-domain] is required. This is the name or id of a network domain.\n" +
594
+ "[record] is required. This is the name or id of a network domain record."
595
+ end
596
+ optparse.parse!(args)
597
+ connect(options)
598
+ if args.count != 2
599
+ raise_command_error "wrong number of arguments, expected 2 and got (#{args.count}) #{args}\n#{optparse}"
600
+ end
601
+ begin
602
+ network_domain = find_network_domain_by_name_or_id(args[0])
603
+ return 1 if network_domain.nil?
604
+ network_domain_id = network_domain['id']
605
+
606
+ params.merge!(parse_list_options(options))
607
+ @network_domain_records_interface.setopts(options)
608
+ if options[:dry_run]
609
+ if args[1].to_s =~ /\A\d{1,}\Z/
610
+ print_dry_run @network_domain_records_interface.dry.get(network_domain_id, args[1].to_i)
611
+ else
612
+ print_dry_run @network_domain_records_interface.dry.list(network_domain_id, {name:args[1]})
613
+ end
614
+ return
615
+ end
616
+ network_domain_record = find_network_domain_record_by_name_or_id(network_domain_id, args[1])
617
+ return 1 if network_domain_record.nil?
618
+ json_response = {'networkDomainRecord' => network_domain_record} # skip redundant request
619
+ # json_response = @network_domain_records_interface.get(network_domain_id, args[1])
620
+ #network_domain_record = json_response['networkDomainRecord']
621
+ if options[:json]
622
+ puts as_json(json_response, options, "networkDomainRecord")
623
+ return 0
624
+ elsif options[:yaml]
625
+ puts as_yaml(json_response, options, "networkDomainRecord")
626
+ return 0
627
+ elsif options[:csv]
628
+ puts records_as_csv([network_domain_record], options)
629
+ return 0
630
+ end
631
+ print_h1 "Network Domain Record Details"
632
+ print cyan
633
+ description_cols = {
634
+ "ID" => 'id',
635
+ "Name" => lambda {|it| it['name'] },
636
+ "FQDN" => lambda {|it| it['fqdn'] },
637
+ "Type" => lambda {|it| it['type'] },
638
+ "Content" => lambda {|it| it['content'] },
639
+ "Comment" => lambda {|it| it['Comment'] },
640
+ "TTL" => lambda {|it| it['ttl'] },
641
+ "Domain" => lambda {|it| network_domain['name'] },
642
+ "Source" => lambda {|it| it['source'] },
643
+ "Created By" => lambda {|it| it['createdBy'] ? it['createdBy']['username'] : '' },
644
+ #"Created" => lambda {|it| format_local_dt(it['dateCreated']) },
645
+ #"Updated" => lambda {|it| format_local_dt(it['lastUpdated']) },
646
+ #"Status" => lambda {|it| it['statusMessage'].to_s.empty? ? it['status'] : "#{it['status']} - #{it['statusMessage']}" },
647
+ }
648
+ print_description_list(description_cols, network_domain_record)
649
+
650
+ print reset,"\n"
651
+ return 0
652
+ rescue RestClient::Exception => e
653
+ print_rest_exception(e, options)
654
+ exit 1
655
+ end
656
+ end
657
+
658
+ def add_record(args)
659
+ options = {}
660
+ params = {}
661
+ optparse = MtnCloud::Cli::OptionParser.new do |opts|
662
+ opts.banner = subcommand_usage("[network-domain] [record]")
663
+ opts.on('--name VALUE', String, "Name") do |val|
664
+ options[:options]['name'] = val
665
+ end
666
+ opts.on('--type VALUE', String, "Domain Record Type. Default is 'A'") do |val|
667
+ options[:options]['type'] = val
668
+ end
669
+ # opts.on('--fqdn VALUE', String, "FQDN") do |val|
670
+ # options[:options]['hostname'] = val
671
+ # end
672
+ opts.on('--content VALUE', String, "Content") do |val|
673
+ options[:options]['content'] = val
674
+ end
675
+ opts.on('--comment VALUE', String, "Comment") do |val|
676
+ options[:options]['comment'] = val
677
+ end
678
+ opts.on('--ttl SECONDS', String, "TTL in seconds. Default is 86400.") do |val|
679
+ options[:options]['ttl'] = val
680
+ end
681
+ build_common_options(opts, options, [:options, :payload, :json, :dry_run, :quiet, :remote])
682
+ opts.footer = "Create a new network domain record." + "\n" +
683
+ "[network-domain] is required. This is the name or id of a network domain.\n" +
684
+ "[record] is required. This is the name of the domain record and can be passed as --name instead."
685
+ end
686
+ optparse.parse!(args)
687
+ if args.count < 1 || args.count > 2
688
+ raise_command_error "wrong number of arguments, expected 1-2 and got (#{args.count}) #{args}\n#{optparse}"
689
+ end
690
+ connect(options)
691
+ begin
692
+ network_domain = find_network_domain_by_name_or_id(args[0])
693
+ return 1 if network_domain.nil?
694
+ network_domain_id = network_domain['id']
695
+
696
+ # support [name] as first argument
697
+ if args[1]
698
+ options[:options]['name'] = args[1]
699
+ end
700
+
701
+ # construct payload
702
+ payload = nil
703
+ if options[:payload]
704
+ payload = options[:payload]
705
+ else
706
+ # prompt for network options
707
+ payload = {
708
+ 'networkDomainRecord' => {
709
+ #'networkDomain' => {'id' => network_domain['id']}
710
+ }
711
+ }
712
+
713
+ # allow arbitrary -O options
714
+ payload['networkDomainRecord'].deep_merge!(options[:options].reject {|k,v| k.is_a?(Symbol) }) if options[:options]
715
+
716
+ # Name
717
+ v_prompt = MtnCloud::Cli::OptionTypes.prompt([{'fieldName' => 'name', 'fieldLabel' => 'Name', 'type' => 'text', 'required' => true, 'description' => 'Name of this domain record.'}], options[:options])
718
+ payload['networkDomainRecord']['name'] = v_prompt['name'] unless v_prompt['name'].to_s.empty?
719
+
720
+ # Type
721
+ v_prompt = MtnCloud::Cli::OptionTypes.prompt([{'fieldName' => 'type', 'fieldLabel' => 'Type', 'type' => 'select', 'required' => true, 'optionSource' => 'dnsRecordType', 'description' => 'Type for this domain record.', 'defaultValue' => 'A'}], options[:options], @api_client)
722
+ payload['networkDomainRecord']['type'] = v_prompt['type'] unless v_prompt['type'].to_s.empty?
723
+
724
+ # Content
725
+ v_prompt = MtnCloud::Cli::OptionTypes.prompt([{'fieldName' => 'content', 'fieldLabel' => 'Content', 'type' => 'textarea', 'required' => true, 'description' => 'Content for this domain record.'}], options[:options])
726
+ payload['networkDomainRecord']['content'] = v_prompt['content'] unless v_prompt['content'].to_s.empty?
727
+
728
+ # TTL
729
+ if options[:options]['ttl'] == 'null'
730
+ payload['networkDomainRecord']['ttl'] = nil
731
+ else
732
+ v_prompt = MtnCloud::Cli::OptionTypes.prompt([{'fieldName' => 'ttl', 'fieldLabel' => 'TTL', 'type' => 'text', 'required' => false, 'description' => 'TTL in seconds for this domain record. Default is 86400.'}], options[:options])
733
+ payload['networkDomainRecord']['ttl'] = v_prompt['ttl'].to_i unless v_prompt['ttl'].to_s.empty?
734
+ end
735
+
736
+ # Comment
737
+ # v_prompt = MtnCloud::Cli::OptionTypes.prompt([{'fieldName' => 'comment', 'fieldLabel' => 'Comment', 'type' => 'text', 'required' => true, 'description' => 'Comment for this domain record.'}], options[:options])
738
+ # payload['networkDomainRecord']['comment'] = v_prompt['comment'] unless v_prompt['comment'].to_s.empty?
739
+
740
+ end
741
+
742
+ @network_domain_records_interface.setopts(options)
743
+ if options[:dry_run]
744
+ print_dry_run @network_domain_records_interface.dry.create(network_domain_id, payload)
745
+ return
746
+ end
747
+ json_response = @network_domain_records_interface.create(network_domain_id, payload)
748
+ if options[:json]
749
+ print JSON.pretty_generate(json_response)
750
+ print "\n"
751
+ elsif !options[:quiet]
752
+ network_domain_record = json_response['networkDomainRecord']
753
+ print_green_success "Added network domain record #{network_domain_record['name']}"
754
+ get_record([network_domain['id'], network_domain_record['id']])
755
+ end
756
+ return 0
757
+ rescue RestClient::Exception => e
758
+ print_rest_exception(e, options)
759
+ exit 1
760
+ end
761
+ end
762
+
763
+ def remove_record(args)
764
+ options = {}
765
+ optparse = MtnCloud::Cli::OptionParser.new do |opts|
766
+ opts.banner = subcommand_usage("[network-domain] [record]")
767
+ build_common_options(opts, options, [:account, :auto_confirm, :json, :dry_run, :remote])
768
+ opts.footer = "Delete a network domain record." + "\n" +
769
+ "[network-domain] is required. This is the name or id of a network domain.\n" +
770
+ "[record] is required. This is the name or id of a network domain record."
771
+ end
772
+ optparse.parse!(args)
773
+ if args.count != 2
774
+ raise_command_error "wrong number of arguments, expected 2 and got (#{args.count}) #{args}\n#{optparse}"
775
+ end
776
+ connect(options)
777
+ begin
778
+ network_domain = find_network_domain_by_name_or_id(args[0])
779
+ return 1 if network_domain.nil?
780
+ network_domain_id = network_domain['id']
781
+
782
+ network_domain_record = find_network_domain_record_by_name_or_id(network_domain_id, args[1])
783
+ return 1 if network_domain_record.nil?
784
+
785
+ unless options[:yes] || MtnCloud::Cli::OptionTypes.confirm("Are you sure you want to delete the networkd domain record: #{network_domain_record['name']}?")
786
+ return 9, "aborted command"
787
+ end
788
+ @network_domain_records_interface.setopts(options)
789
+ if options[:dry_run]
790
+ print_dry_run @network_domain_records_interface.dry.destroy(network_domain['id'], network_domain_record['id'])
791
+ return 0
792
+ end
793
+ json_response = @network_domain_records_interface.destroy(network_domain['id'], network_domain_record['id'])
794
+ if options[:json]
795
+ print JSON.pretty_generate(json_response)
796
+ print "\n"
797
+ else
798
+ print_green_success "Removed network domain record #{network_domain_record['name']}"
799
+ # list([])
800
+ end
801
+ return 0
802
+ rescue RestClient::Exception => e
803
+ print_rest_exception(e, options)
804
+ return 1
805
+ end
806
+ end
807
+
808
+ private
809
+
810
+
811
+ def find_network_domain_by_name_or_id(val)
812
+ if val.to_s =~ /\A\d{1,}\Z/
813
+ return find_network_domain_by_id(val)
814
+ else
815
+ return find_network_domain_by_name(val)
816
+ end
817
+ end
818
+
819
+ def find_network_domain_by_id(id)
820
+ begin
821
+ json_response = @network_domains_interface.get(id.to_i)
822
+ return json_response['networkDomain']
823
+ rescue RestClient::Exception => e
824
+ if e.response && e.response.code == 404
825
+ print_red_alert "Network Domain not found by id #{id}"
826
+ return nil
827
+ else
828
+ raise e
829
+ end
830
+ end
831
+ end
832
+
833
+ def find_network_domain_by_name(name)
834
+ json_response = @network_domains_interface.list({name: name.to_s})
835
+ network_domains = json_response['networkDomains']
836
+ if network_domains.empty?
837
+ print_red_alert "Network Domain not found by name #{name}"
838
+ return nil
839
+ elsif network_domains.size > 1
840
+ print_red_alert "#{network_domains.size} network domains found by name #{name}"
841
+ # print_networks_table(networks, {color: red})
842
+ rows = network_domains.collect do |network_domain|
843
+ {id: network_domain['id'], name: network_domain['name']}
844
+ end
845
+ puts as_pretty_table(rows, [:id, :name], {color:red})
846
+ return nil
847
+ else
848
+ return network_domains[0]
849
+ end
850
+ end
851
+
852
+ def find_network_domain_record_by_name_or_id(network_domain_id, val)
853
+ if val.to_s =~ /\A\d{1,}\Z/
854
+ return find_network_domain_record_by_id(network_domain_id, val)
855
+ else
856
+ return find_network_domain_record_by_name(network_domain_id, val)
857
+ end
858
+ end
859
+
860
+ def find_network_domain_record_by_id(network_domain_id, id)
861
+ begin
862
+ json_response = @network_domain_records_interface.get(network_domain_id, id.to_i)
863
+ return json_response['networkDomainRecord']
864
+ rescue RestClient::Exception => e
865
+ if e.response && e.response.code == 404
866
+ print_red_alert "Network Domain Record not found by id #{id}"
867
+ return nil
868
+ else
869
+ raise e
870
+ end
871
+ end
872
+ end
873
+
874
+ def find_network_domain_record_by_name(network_domain_id, name)
875
+ json_response = @network_domain_records_interface.list(network_domain_id, {name: name.to_s})
876
+ network_domain_records = json_response['networkDomainRecords']
877
+ if network_domain_records.empty?
878
+ print_red_alert "Network Domain Record not found by name #{name}"
879
+ return nil
880
+ elsif network_domain_records.size > 1
881
+ print_red_alert "#{network_domain_records.size} network domain records found by name #{name}"
882
+ columns = [
883
+ {"ID" => lambda {|it| it['id'] } },
884
+ {"NAME" => lambda {|it| it['name'] } },
885
+ #{"FQDN" => lambda {|it| it['fqdn'] } },
886
+ {"TYPE" => lambda {|it| it['type'] } },
887
+ {"CONTENT" => lambda {|it| it['content'] } }
888
+ ]
889
+ puts as_pretty_table(network_domain_records, columns, {color:red})
890
+ return nil
891
+ else
892
+ return network_domain_records[0]
893
+ end
894
+ end
895
+
896
+ end