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.
- checksums.yaml +7 -0
- data/.dockerignore +20 -0
- data/.github/pull_request_template.md +14 -0
- data/.github/workflows/ci.yml +56 -0
- data/.github/workflows/release.yml +46 -0
- data/.gitignore +25 -0
- data/CLAUDE.md +24 -0
- data/CONTRIBUTING.md +91 -0
- data/Dockerfile +19 -0
- data/Gemfile +4 -0
- data/LICENSE.txt +23 -0
- data/README.md +187 -0
- data/Rakefile +26 -0
- data/bin/mcs +3 -0
- data/bin/mtncloud +27 -0
- data/lib/mtncloud/api/account_groups_interface.rb +48 -0
- data/lib/mtncloud/api/account_users_interface.rb +68 -0
- data/lib/mtncloud/api/accounts_interface.rb +9 -0
- data/lib/mtncloud/api/activity_interface.rb +9 -0
- data/lib/mtncloud/api/affinity_groups_interface.rb +46 -0
- data/lib/mtncloud/api/api_client.rb +1091 -0
- data/lib/mtncloud/api/appliance_settings_interface.rb +49 -0
- data/lib/mtncloud/api/approvals_interface.rb +32 -0
- data/lib/mtncloud/api/apps_interface.rb +180 -0
- data/lib/mtncloud/api/archive_buckets_interface.rb +116 -0
- data/lib/mtncloud/api/archive_files_interface.rb +173 -0
- data/lib/mtncloud/api/audit_interface.rb +9 -0
- data/lib/mtncloud/api/auth_interface.rb +58 -0
- data/lib/mtncloud/api/backup_jobs_interface.rb +13 -0
- data/lib/mtncloud/api/backup_restores_interface.rb +27 -0
- data/lib/mtncloud/api/backup_results_interface.rb +32 -0
- data/lib/mtncloud/api/backup_service_types_interface.rb +9 -0
- data/lib/mtncloud/api/backup_services_interface.rb +9 -0
- data/lib/mtncloud/api/backup_settings_interface.rb +20 -0
- data/lib/mtncloud/api/backup_types_interface.rb +9 -0
- data/lib/mtncloud/api/backups_interface.rb +21 -0
- data/lib/mtncloud/api/billing_interface.rb +34 -0
- data/lib/mtncloud/api/blueprints_interface.rb +70 -0
- data/lib/mtncloud/api/body_io.rb +22 -0
- data/lib/mtncloud/api/budgets_interface.rb +48 -0
- data/lib/mtncloud/api/catalog_item_types_interface.rb +29 -0
- data/lib/mtncloud/api/certificate_types_interface.rb +14 -0
- data/lib/mtncloud/api/certificates_interface.rb +9 -0
- data/lib/mtncloud/api/clients_interface.rb +41 -0
- data/lib/mtncloud/api/cloud_datastores_interface.rb +48 -0
- data/lib/mtncloud/api/cloud_folders_interface.rb +41 -0
- data/lib/mtncloud/api/cloud_policies_interface.rb +41 -0
- data/lib/mtncloud/api/cloud_resource_pools_interface.rb +66 -0
- data/lib/mtncloud/api/clouds_interface.rb +217 -0
- data/lib/mtncloud/api/clusters_interface.rb +471 -0
- data/lib/mtncloud/api/containers_interface.rb +145 -0
- data/lib/mtncloud/api/credential_types_interface.rb +9 -0
- data/lib/mtncloud/api/credentials_interface.rb +9 -0
- data/lib/mtncloud/api/custom_instance_types_interface.rb +99 -0
- data/lib/mtncloud/api/cypher_interface.rb +51 -0
- data/lib/mtncloud/api/dashboard_interface.rb +14 -0
- data/lib/mtncloud/api/datastores_interface.rb +21 -0
- data/lib/mtncloud/api/deploy_interface.rb +44 -0
- data/lib/mtncloud/api/deployments_interface.rb +79 -0
- data/lib/mtncloud/api/distributed_workers_interface.rb +41 -0
- data/lib/mtncloud/api/email_templates_interface.rb +53 -0
- data/lib/mtncloud/api/environments_interface.rb +48 -0
- data/lib/mtncloud/api/execute_schedules_interface.rb +71 -0
- data/lib/mtncloud/api/execution_request_interface.rb +27 -0
- data/lib/mtncloud/api/file_copy_request_interface.rb +68 -0
- data/lib/mtncloud/api/forgot_password_interface.rb +17 -0
- data/lib/mtncloud/api/group_policies_interface.rb +41 -0
- data/lib/mtncloud/api/groups_interface.rb +73 -0
- data/lib/mtncloud/api/guidance_interface.rb +44 -0
- data/lib/mtncloud/api/guidance_settings_interface.rb +17 -0
- data/lib/mtncloud/api/health_interface.rb +100 -0
- data/lib/mtncloud/api/host_vm_groups_interface.rb +37 -0
- data/lib/mtncloud/api/hub_interface.rb +25 -0
- data/lib/mtncloud/api/image_builder_boot_scripts_interface.rb +41 -0
- data/lib/mtncloud/api/image_builder_image_builds_interface.rb +73 -0
- data/lib/mtncloud/api/image_builder_interface.rb +20 -0
- data/lib/mtncloud/api/image_builder_preseed_scripts_interface.rb +41 -0
- data/lib/mtncloud/api/instance_types_interface.rb +20 -0
- data/lib/mtncloud/api/instances_interface.rb +453 -0
- data/lib/mtncloud/api/integration_types_interface.rb +14 -0
- data/lib/mtncloud/api/integrations_interface.rb +74 -0
- data/lib/mtncloud/api/invoice_line_items_interface.rb +9 -0
- data/lib/mtncloud/api/invoices_interface.rb +28 -0
- data/lib/mtncloud/api/jobs_interface.rb +83 -0
- data/lib/mtncloud/api/key_pairs_interface.rb +57 -0
- data/lib/mtncloud/api/library_cluster_layouts_interface.rb +47 -0
- data/lib/mtncloud/api/library_cluster_packages_interface.rb +60 -0
- data/lib/mtncloud/api/library_container_scripts_interface.rb +43 -0
- data/lib/mtncloud/api/library_container_templates_interface.rb +43 -0
- data/lib/mtncloud/api/library_container_types_interface.rb +59 -0
- data/lib/mtncloud/api/library_container_upgrades_interface.rb +60 -0
- data/lib/mtncloud/api/library_instance_types_interface.rb +74 -0
- data/lib/mtncloud/api/library_layouts_interface.rb +69 -0
- data/lib/mtncloud/api/library_operating_systems_interface.rb +63 -0
- data/lib/mtncloud/api/library_spec_template_types_interface.rb +43 -0
- data/lib/mtncloud/api/library_spec_templates_interface.rb +43 -0
- data/lib/mtncloud/api/license_interface.rb +30 -0
- data/lib/mtncloud/api/load_balancer_monitors_interface.rb +9 -0
- data/lib/mtncloud/api/load_balancer_pool_nodes_interface.rb +8 -0
- data/lib/mtncloud/api/load_balancer_pools_interface.rb +9 -0
- data/lib/mtncloud/api/load_balancer_pools_secondary_interface.rb +9 -0
- data/lib/mtncloud/api/load_balancer_profiles_interface.rb +9 -0
- data/lib/mtncloud/api/load_balancer_types_interface.rb +9 -0
- data/lib/mtncloud/api/load_balancer_virtual_servers_interface.rb +18 -0
- data/lib/mtncloud/api/load_balancers_interface.rb +14 -0
- data/lib/mtncloud/api/log_settings_interface.rb +44 -0
- data/lib/mtncloud/api/logs_interface.rb +37 -0
- data/lib/mtncloud/api/migrations_interface.rb +49 -0
- data/lib/mtncloud/api/monitoring_alerts_interface.rb +39 -0
- data/lib/mtncloud/api/monitoring_apps_interface.rb +69 -0
- data/lib/mtncloud/api/monitoring_checks_interface.rb +103 -0
- data/lib/mtncloud/api/monitoring_contacts_interface.rb +41 -0
- data/lib/mtncloud/api/monitoring_groups_interface.rb +77 -0
- data/lib/mtncloud/api/monitoring_incidents_interface.rb +107 -0
- data/lib/mtncloud/api/monitoring_interface.rb +35 -0
- data/lib/mtncloud/api/monitoring_settings_interface.rb +21 -0
- data/lib/mtncloud/api/network_dhcp_relays_interface.rb +36 -0
- data/lib/mtncloud/api/network_dhcp_servers_interface.rb +36 -0
- data/lib/mtncloud/api/network_domain_records_interface.rb +41 -0
- data/lib/mtncloud/api/network_domains_interface.rb +41 -0
- data/lib/mtncloud/api/network_edge_clusters_interface.rb +26 -0
- data/lib/mtncloud/api/network_floating_ips_interface.rb +40 -0
- data/lib/mtncloud/api/network_groups_interface.rb +41 -0
- data/lib/mtncloud/api/network_pool_ips_interface.rb +41 -0
- data/lib/mtncloud/api/network_pool_server_types_interface.rb +9 -0
- data/lib/mtncloud/api/network_pool_servers_interface.rb +48 -0
- data/lib/mtncloud/api/network_pools_interface.rb +41 -0
- data/lib/mtncloud/api/network_proxies_interface.rb +41 -0
- data/lib/mtncloud/api/network_routers_interface.rb +181 -0
- data/lib/mtncloud/api/network_security_server_types_interface.rb +9 -0
- data/lib/mtncloud/api/network_security_servers_interface.rb +27 -0
- data/lib/mtncloud/api/network_server_groups_interface.rb +7 -0
- data/lib/mtncloud/api/network_server_types_interface.rb +9 -0
- data/lib/mtncloud/api/network_servers_interface.rb +102 -0
- data/lib/mtncloud/api/network_services_interface.rb +63 -0
- data/lib/mtncloud/api/network_static_routes_interface.rb +36 -0
- data/lib/mtncloud/api/network_subnets_interface.rb +42 -0
- data/lib/mtncloud/api/network_types_interface.rb +20 -0
- data/lib/mtncloud/api/networks_interface.rb +48 -0
- data/lib/mtncloud/api/option_type_forms_interface.rb +9 -0
- data/lib/mtncloud/api/option_type_lists_interface.rb +53 -0
- data/lib/mtncloud/api/option_types_interface.rb +41 -0
- data/lib/mtncloud/api/options_interface.rb +17 -0
- data/lib/mtncloud/api/packages_interface.rb +112 -0
- data/lib/mtncloud/api/ping_interface.rb +22 -0
- data/lib/mtncloud/api/plugins_interface.rb +22 -0
- data/lib/mtncloud/api/policies_interface.rb +56 -0
- data/lib/mtncloud/api/power_schedules_interface.rb +71 -0
- data/lib/mtncloud/api/price_sets_interface.rb +39 -0
- data/lib/mtncloud/api/prices_interface.rb +71 -0
- data/lib/mtncloud/api/processes_interface.rb +40 -0
- data/lib/mtncloud/api/projects_interface.rb +33 -0
- data/lib/mtncloud/api/provision_types_interface.rb +24 -0
- data/lib/mtncloud/api/provisioning_license_types_interface.rb +31 -0
- data/lib/mtncloud/api/provisioning_licenses_interface.rb +60 -0
- data/lib/mtncloud/api/provisioning_settings_interface.rb +26 -0
- data/lib/mtncloud/api/read_interface.rb +24 -0
- data/lib/mtncloud/api/reports_interface.rb +70 -0
- data/lib/mtncloud/api/resource_pool_groups_interface.rb +51 -0
- data/lib/mtncloud/api/rest_interface.rb +37 -0
- data/lib/mtncloud/api/roles_interface.rb +151 -0
- data/lib/mtncloud/api/scale_thresholds_interface.rb +9 -0
- data/lib/mtncloud/api/search_interface.rb +13 -0
- data/lib/mtncloud/api/secondary_read_interface.rb +25 -0
- data/lib/mtncloud/api/secondary_rest_interface.rb +42 -0
- data/lib/mtncloud/api/security_group_rules_interface.rb +35 -0
- data/lib/mtncloud/api/security_groups_interface.rb +56 -0
- data/lib/mtncloud/api/security_package_types_interface.rb +9 -0
- data/lib/mtncloud/api/security_packages_interface.rb +9 -0
- data/lib/mtncloud/api/security_scans_interface.rb +9 -0
- data/lib/mtncloud/api/server_devices_interface.rb +30 -0
- data/lib/mtncloud/api/server_types_interface.rb +20 -0
- data/lib/mtncloud/api/servers_interface.rb +230 -0
- data/lib/mtncloud/api/service_catalog_interface.rb +89 -0
- data/lib/mtncloud/api/service_plans_interface.rb +62 -0
- data/lib/mtncloud/api/setup_interface.rb +46 -0
- data/lib/mtncloud/api/snapshots_interface.rb +19 -0
- data/lib/mtncloud/api/storage_datastores_interface.rb +44 -0
- data/lib/mtncloud/api/storage_providers_interface.rb +151 -0
- data/lib/mtncloud/api/storage_server_types_interface.rb +14 -0
- data/lib/mtncloud/api/storage_servers_interface.rb +9 -0
- data/lib/mtncloud/api/storage_volume_types_interface.rb +9 -0
- data/lib/mtncloud/api/storage_volumes_interface.rb +24 -0
- data/lib/mtncloud/api/subnet_types_interface.rb +20 -0
- data/lib/mtncloud/api/subnets_interface.rb +41 -0
- data/lib/mtncloud/api/support_bundles_interface.rb +46 -0
- data/lib/mtncloud/api/system_types_interface.rb +13 -0
- data/lib/mtncloud/api/systems_interface.rb +55 -0
- data/lib/mtncloud/api/task_sets_interface.rb +52 -0
- data/lib/mtncloud/api/tasks_interface.rb +66 -0
- data/lib/mtncloud/api/tokens_interface.rb +39 -0
- data/lib/mtncloud/api/usage_interface.rb +18 -0
- data/lib/mtncloud/api/user_groups_interface.rb +59 -0
- data/lib/mtncloud/api/user_settings_interface.rb +90 -0
- data/lib/mtncloud/api/user_sources_interface.rb +99 -0
- data/lib/mtncloud/api/users_interface.rb +33 -0
- data/lib/mtncloud/api/vdi_allocations_interface.rb +9 -0
- data/lib/mtncloud/api/vdi_apps_interface.rb +9 -0
- data/lib/mtncloud/api/vdi_gateways_interface.rb +9 -0
- data/lib/mtncloud/api/vdi_interface.rb +28 -0
- data/lib/mtncloud/api/vdi_pools_interface.rb +19 -0
- data/lib/mtncloud/api/virtual_images_interface.rb +210 -0
- data/lib/mtncloud/api/virtual_servers_interface.rb +9 -0
- data/lib/mtncloud/api/virtual_switches_interface.rb +9 -0
- data/lib/mtncloud/api/whitelabel_settings_interface.rb +57 -0
- data/lib/mtncloud/api/whoami_interface.rb +13 -0
- data/lib/mtncloud/api/wiki_interface.rb +48 -0
- data/lib/mtncloud/api.rb +12 -0
- data/lib/mtncloud/benchmarking.rb +259 -0
- data/lib/mtncloud/cli/cli_command.rb +2281 -0
- data/lib/mtncloud/cli/cli_registry.rb +337 -0
- data/lib/mtncloud/cli/commands/access_token_command.rb +201 -0
- data/lib/mtncloud/cli/commands/account_groups_command.rb +530 -0
- data/lib/mtncloud/cli/commands/activity_command.rb +149 -0
- data/lib/mtncloud/cli/commands/affinity_groups_command.rb +554 -0
- data/lib/mtncloud/cli/commands/alias_command.rb +278 -0
- data/lib/mtncloud/cli/commands/appliance_settings_command.rb +382 -0
- data/lib/mtncloud/cli/commands/approvals_command.rb +236 -0
- data/lib/mtncloud/cli/commands/apps.rb +2549 -0
- data/lib/mtncloud/cli/commands/archives_command.rb +2161 -0
- data/lib/mtncloud/cli/commands/audit.rb +188 -0
- data/lib/mtncloud/cli/commands/backup_jobs_command.rb +366 -0
- data/lib/mtncloud/cli/commands/backup_restores_command.rb +144 -0
- data/lib/mtncloud/cli/commands/backup_results_command.rb +149 -0
- data/lib/mtncloud/cli/commands/backup_services_command.rb +44 -0
- data/lib/mtncloud/cli/commands/backup_settings_command.rb +184 -0
- data/lib/mtncloud/cli/commands/backup_types_command.rb +53 -0
- data/lib/mtncloud/cli/commands/backups_command.rb +674 -0
- data/lib/mtncloud/cli/commands/benchmark_command.rb +458 -0
- data/lib/mtncloud/cli/commands/blueprints_command.rb +2297 -0
- data/lib/mtncloud/cli/commands/boot_scripts_command.rb +379 -0
- data/lib/mtncloud/cli/commands/budgets_command.rb +754 -0
- data/lib/mtncloud/cli/commands/cat_command.rb +45 -0
- data/lib/mtncloud/cli/commands/catalog_item_types_command.rb +858 -0
- data/lib/mtncloud/cli/commands/certificates_command.rb +575 -0
- data/lib/mtncloud/cli/commands/change_password_command.rb +132 -0
- data/lib/mtncloud/cli/commands/clients_command.rb +331 -0
- data/lib/mtncloud/cli/commands/cloud_datastores_command.rb +543 -0
- data/lib/mtncloud/cli/commands/cloud_folders_command.rb +512 -0
- data/lib/mtncloud/cli/commands/cloud_resource_pools_command.rb +870 -0
- data/lib/mtncloud/cli/commands/clouds.rb +2037 -0
- data/lib/mtncloud/cli/commands/clouds_types.rb +140 -0
- data/lib/mtncloud/cli/commands/cluster_types.rb +179 -0
- data/lib/mtncloud/cli/commands/clusters.rb +5855 -0
- data/lib/mtncloud/cli/commands/coloring_command.rb +82 -0
- data/lib/mtncloud/cli/commands/containers_command.rb +967 -0
- data/lib/mtncloud/cli/commands/credential_types_command.rb +36 -0
- data/lib/mtncloud/cli/commands/credentials_command.rb +124 -0
- data/lib/mtncloud/cli/commands/curl_command.rb +168 -0
- data/lib/mtncloud/cli/commands/cypher_command.rb +587 -0
- data/lib/mtncloud/cli/commands/dashboard_command.rb +300 -0
- data/lib/mtncloud/cli/commands/debug_command.rb +75 -0
- data/lib/mtncloud/cli/commands/deploy.rb +485 -0
- data/lib/mtncloud/cli/commands/deployments.rb +923 -0
- data/lib/mtncloud/cli/commands/deploys.rb +485 -0
- data/lib/mtncloud/cli/commands/distributed_workers_command.rb +282 -0
- data/lib/mtncloud/cli/commands/echo_command.rb +61 -0
- data/lib/mtncloud/cli/commands/edit_profile_command.rb +57 -0
- data/lib/mtncloud/cli/commands/edit_rc_command.rb +77 -0
- data/lib/mtncloud/cli/commands/email_templates_command.rb +373 -0
- data/lib/mtncloud/cli/commands/environments_command.rb +401 -0
- data/lib/mtncloud/cli/commands/execute_schedules_command.rb +735 -0
- data/lib/mtncloud/cli/commands/execution_request_command.rb +333 -0
- data/lib/mtncloud/cli/commands/exit_command.rb +34 -0
- data/lib/mtncloud/cli/commands/file_copy_request_command.rb +352 -0
- data/lib/mtncloud/cli/commands/forgot_password.rb +133 -0
- data/lib/mtncloud/cli/commands/get_prompt_command.rb +36 -0
- data/lib/mtncloud/cli/commands/groups.rb +818 -0
- data/lib/mtncloud/cli/commands/guidance_command.rb +529 -0
- data/lib/mtncloud/cli/commands/guidance_settings.rb +148 -0
- data/lib/mtncloud/cli/commands/health_command.rb +1046 -0
- data/lib/mtncloud/cli/commands/history_command.rb +60 -0
- data/lib/mtncloud/cli/commands/host_vm_groups_command.rb +423 -0
- data/lib/mtncloud/cli/commands/hosts.rb +2986 -0
- data/lib/mtncloud/cli/commands/hub.rb +215 -0
- data/lib/mtncloud/cli/commands/image_builder_command.rb +1197 -0
- data/lib/mtncloud/cli/commands/instance_types.rb +163 -0
- data/lib/mtncloud/cli/commands/instances.rb +5813 -0
- data/lib/mtncloud/cli/commands/integrations_command.rb +1412 -0
- data/lib/mtncloud/cli/commands/invoices_command.rb +1151 -0
- data/lib/mtncloud/cli/commands/jobs_command.rb +998 -0
- data/lib/mtncloud/cli/commands/key_pairs.rb +470 -0
- data/lib/mtncloud/cli/commands/library_cluster_layouts_command.rb +901 -0
- data/lib/mtncloud/cli/commands/library_cluster_packages_command.rb +552 -0
- data/lib/mtncloud/cli/commands/library_container_scripts_command.rb +446 -0
- data/lib/mtncloud/cli/commands/library_container_templates_command.rb +526 -0
- data/lib/mtncloud/cli/commands/library_container_types_command.rb +698 -0
- data/lib/mtncloud/cli/commands/library_forms_command.rb +625 -0
- data/lib/mtncloud/cli/commands/library_instance_types_command.rb +668 -0
- data/lib/mtncloud/cli/commands/library_layouts_command.rb +849 -0
- data/lib/mtncloud/cli/commands/library_operating_systems_command.rb +671 -0
- data/lib/mtncloud/cli/commands/library_option_lists_command.rb +503 -0
- data/lib/mtncloud/cli/commands/library_option_types_command.rb +329 -0
- data/lib/mtncloud/cli/commands/library_spec_templates_command.rb +547 -0
- data/lib/mtncloud/cli/commands/library_upgrades_command.rb +596 -0
- data/lib/mtncloud/cli/commands/license.rb +475 -0
- data/lib/mtncloud/cli/commands/load_balancer_monitors.rb +70 -0
- data/lib/mtncloud/cli/commands/load_balancer_pool_nodes.rb +87 -0
- data/lib/mtncloud/cli/commands/load_balancer_pools.rb +129 -0
- data/lib/mtncloud/cli/commands/load_balancer_profiles.rb +64 -0
- data/lib/mtncloud/cli/commands/load_balancer_types.rb +38 -0
- data/lib/mtncloud/cli/commands/load_balancer_virtual_servers.rb +147 -0
- data/lib/mtncloud/cli/commands/load_balancers.rb +189 -0
- data/lib/mtncloud/cli/commands/log_level_command.rb +54 -0
- data/lib/mtncloud/cli/commands/log_settings_command.rb +443 -0
- data/lib/mtncloud/cli/commands/login.rb +148 -0
- data/lib/mtncloud/cli/commands/logout.rb +63 -0
- data/lib/mtncloud/cli/commands/logs_command.rb +140 -0
- data/lib/mtncloud/cli/commands/man_command.rb +409 -0
- data/lib/mtncloud/cli/commands/migrations.rb +453 -0
- data/lib/mtncloud/cli/commands/monitoring_alerts_command.rb +791 -0
- data/lib/mtncloud/cli/commands/monitoring_apps_command.rb +716 -0
- data/lib/mtncloud/cli/commands/monitoring_checks_command.rb +766 -0
- data/lib/mtncloud/cli/commands/monitoring_contacts_command.rb +339 -0
- data/lib/mtncloud/cli/commands/monitoring_groups_command.rb +674 -0
- data/lib/mtncloud/cli/commands/monitoring_incidents_command.rb +835 -0
- data/lib/mtncloud/cli/commands/monitoring_settings.rb +212 -0
- data/lib/mtncloud/cli/commands/network_dhcp_relays_command.rb +375 -0
- data/lib/mtncloud/cli/commands/network_dhcp_servers_command.rb +366 -0
- data/lib/mtncloud/cli/commands/network_domains_command.rb +896 -0
- data/lib/mtncloud/cli/commands/network_edge_clusters_command.rb +288 -0
- data/lib/mtncloud/cli/commands/network_firewalls_command.rb +783 -0
- data/lib/mtncloud/cli/commands/network_floating_ips.rb +147 -0
- data/lib/mtncloud/cli/commands/network_groups_command.rb +654 -0
- data/lib/mtncloud/cli/commands/network_pool_server_types.rb +20 -0
- data/lib/mtncloud/cli/commands/network_pool_servers_command.rb +318 -0
- data/lib/mtncloud/cli/commands/network_pools_command.rb +903 -0
- data/lib/mtncloud/cli/commands/network_proxies_command.rb +578 -0
- data/lib/mtncloud/cli/commands/network_routers_command.rb +2628 -0
- data/lib/mtncloud/cli/commands/network_security_server_types.rb +20 -0
- data/lib/mtncloud/cli/commands/network_server_groups_command.rb +222 -0
- data/lib/mtncloud/cli/commands/network_server_types_command.rb +20 -0
- data/lib/mtncloud/cli/commands/network_servers_command.rb +398 -0
- data/lib/mtncloud/cli/commands/network_services_command.rb +198 -0
- data/lib/mtncloud/cli/commands/network_static_routes_command.rb +451 -0
- data/lib/mtncloud/cli/commands/network_transport_zones_command.rb +412 -0
- data/lib/mtncloud/cli/commands/networks_command.rb +1692 -0
- data/lib/mtncloud/cli/commands/open_command.rb +30 -0
- data/lib/mtncloud/cli/commands/options.rb +231 -0
- data/lib/mtncloud/cli/commands/packages_command.rb +822 -0
- data/lib/mtncloud/cli/commands/ping.rb +242 -0
- data/lib/mtncloud/cli/commands/plugins.rb +214 -0
- data/lib/mtncloud/cli/commands/policies_command.rb +990 -0
- data/lib/mtncloud/cli/commands/power_schedules_command.rb +731 -0
- data/lib/mtncloud/cli/commands/preseed_scripts_command.rb +378 -0
- data/lib/mtncloud/cli/commands/price_sets_command.rb +557 -0
- data/lib/mtncloud/cli/commands/prices_command.rb +692 -0
- data/lib/mtncloud/cli/commands/processes_command.rb +469 -0
- data/lib/mtncloud/cli/commands/projects_command.rb +537 -0
- data/lib/mtncloud/cli/commands/provisioning_licenses_command.rb +509 -0
- data/lib/mtncloud/cli/commands/provisioning_settings_command.rb +238 -0
- data/lib/mtncloud/cli/commands/recent_activity_command.rb +171 -0
- data/lib/mtncloud/cli/commands/remote.rb +1818 -0
- data/lib/mtncloud/cli/commands/reports_command.rb +724 -0
- data/lib/mtncloud/cli/commands/resource_pool_groups_command.rb +586 -0
- data/lib/mtncloud/cli/commands/rm_command.rb +14 -0
- data/lib/mtncloud/cli/commands/roles.rb +3120 -0
- data/lib/mtncloud/cli/commands/scale_thresholds.rb +103 -0
- data/lib/mtncloud/cli/commands/search_command.rb +184 -0
- data/lib/mtncloud/cli/commands/security_group_rules.rb +230 -0
- data/lib/mtncloud/cli/commands/security_groups.rb +1294 -0
- data/lib/mtncloud/cli/commands/security_package_types.rb +32 -0
- data/lib/mtncloud/cli/commands/security_packages.rb +84 -0
- data/lib/mtncloud/cli/commands/security_scans.rb +107 -0
- data/lib/mtncloud/cli/commands/self_service_command.rb +17 -0
- data/lib/mtncloud/cli/commands/server_devices_command.rb +207 -0
- data/lib/mtncloud/cli/commands/service_catalog_command.rb +1528 -0
- data/lib/mtncloud/cli/commands/service_plans_command.rb +895 -0
- data/lib/mtncloud/cli/commands/set_prompt_command.rb +51 -0
- data/lib/mtncloud/cli/commands/setup.rb +423 -0
- data/lib/mtncloud/cli/commands/shell.rb +717 -0
- data/lib/mtncloud/cli/commands/sleep_command.rb +43 -0
- data/lib/mtncloud/cli/commands/snapshots.rb +156 -0
- data/lib/mtncloud/cli/commands/source_command.rb +30 -0
- data/lib/mtncloud/cli/commands/ssl_verification_command.rb +47 -0
- data/lib/mtncloud/cli/commands/storage_datastores.rb +457 -0
- data/lib/mtncloud/cli/commands/storage_providers_command.rb +1401 -0
- data/lib/mtncloud/cli/commands/storage_server_types.rb +45 -0
- data/lib/mtncloud/cli/commands/storage_servers.rb +116 -0
- data/lib/mtncloud/cli/commands/storage_volume_types.rb +45 -0
- data/lib/mtncloud/cli/commands/storage_volumes.rb +236 -0
- data/lib/mtncloud/cli/commands/subnets_command.rb +819 -0
- data/lib/mtncloud/cli/commands/support_bundles_command.rb +606 -0
- data/lib/mtncloud/cli/commands/systems.rb +1203 -0
- data/lib/mtncloud/cli/commands/tasks.rb +1391 -0
- data/lib/mtncloud/cli/commands/tee_command.rb +14 -0
- data/lib/mtncloud/cli/commands/tenants_command.rb +315 -0
- data/lib/mtncloud/cli/commands/tokens_command.rb +391 -0
- data/lib/mtncloud/cli/commands/update_command.rb +46 -0
- data/lib/mtncloud/cli/commands/usage_command.rb +203 -0
- data/lib/mtncloud/cli/commands/user_groups_command.rb +512 -0
- data/lib/mtncloud/cli/commands/user_settings_command.rb +849 -0
- data/lib/mtncloud/cli/commands/user_sources_command.rb +1065 -0
- data/lib/mtncloud/cli/commands/users.rb +897 -0
- data/lib/mtncloud/cli/commands/vdi_allocations_command.rb +159 -0
- data/lib/mtncloud/cli/commands/vdi_apps_command.rb +317 -0
- data/lib/mtncloud/cli/commands/vdi_command.rb +359 -0
- data/lib/mtncloud/cli/commands/vdi_gateways_command.rb +290 -0
- data/lib/mtncloud/cli/commands/vdi_pools_command.rb +574 -0
- data/lib/mtncloud/cli/commands/version_command.rb +38 -0
- data/lib/mtncloud/cli/commands/view.rb +107 -0
- data/lib/mtncloud/cli/commands/virtual_images.rb +1362 -0
- data/lib/mtncloud/cli/commands/virtual_switches_command.rb +336 -0
- data/lib/mtncloud/cli/commands/whitelabel_settings_command.rb +653 -0
- data/lib/mtncloud/cli/commands/whoami.rb +323 -0
- data/lib/mtncloud/cli/commands/wiki_command.rb +448 -0
- data/lib/mtncloud/cli/commands/workflows.rb +1022 -0
- data/lib/mtncloud/cli/credentials.rb +482 -0
- data/lib/mtncloud/cli/dot_file.rb +180 -0
- data/lib/mtncloud/cli/error_handler.rb +307 -0
- data/lib/mtncloud/cli/errors.rb +53 -0
- data/lib/mtncloud/cli/expression_parser.rb +153 -0
- data/lib/mtncloud/cli/mixins/accounts_helper.rb +484 -0
- data/lib/mtncloud/cli/mixins/affinity_helper.rb +118 -0
- data/lib/mtncloud/cli/mixins/backups_helper.rb +200 -0
- data/lib/mtncloud/cli/mixins/deployments_helper.rb +163 -0
- data/lib/mtncloud/cli/mixins/execution_request_helper.rb +50 -0
- data/lib/mtncloud/cli/mixins/infrastructure_helper.rb +966 -0
- data/lib/mtncloud/cli/mixins/jobs_helper.rb +202 -0
- data/lib/mtncloud/cli/mixins/library_helper.rb +539 -0
- data/lib/mtncloud/cli/mixins/load_balancers_helper.rb +176 -0
- data/lib/mtncloud/cli/mixins/logs_helper.rb +131 -0
- data/lib/mtncloud/cli/mixins/monitoring_helper.rb +876 -0
- data/lib/mtncloud/cli/mixins/networks_helper.rb +62 -0
- data/lib/mtncloud/cli/mixins/operations_helper.rb +41 -0
- data/lib/mtncloud/cli/mixins/option_source_helper.rb +254 -0
- data/lib/mtncloud/cli/mixins/print_helper.rb +1631 -0
- data/lib/mtncloud/cli/mixins/processes_helper.rb +286 -0
- data/lib/mtncloud/cli/mixins/prompt_helper.rb +136 -0
- data/lib/mtncloud/cli/mixins/provisioning_helper.rb +2963 -0
- data/lib/mtncloud/cli/mixins/remote_helper.rb +139 -0
- data/lib/mtncloud/cli/mixins/rest_command.rb +994 -0
- data/lib/mtncloud/cli/mixins/secondary_rest_command.rb +700 -0
- data/lib/mtncloud/cli/mixins/storage_servers_helper.rb +93 -0
- data/lib/mtncloud/cli/mixins/storage_volumes_helper.rb +76 -0
- data/lib/mtncloud/cli/mixins/vdi_helper.rb +246 -0
- data/lib/mtncloud/cli/mixins/whoami_helper.rb +73 -0
- data/lib/mtncloud/cli/option_parser.rb +127 -0
- data/lib/mtncloud/cli/option_types.rb +1622 -0
- data/lib/mtncloud/cli/version.rb +6 -0
- data/lib/mtncloud/cli.rb +105 -0
- data/lib/mtncloud/currency.rb +184 -0
- data/lib/mtncloud/ext/hash.rb +109 -0
- data/lib/mtncloud/ext/nil_class.rb +5 -0
- data/lib/mtncloud/ext/rest_client.rb +37 -0
- data/lib/mtncloud/ext/string.rb +66 -0
- data/lib/mtncloud/formatters.rb +511 -0
- data/lib/mtncloud/logging.rb +185 -0
- data/lib/mtncloud/morpkg.rb +119 -0
- data/lib/mtncloud/rest_client.rb +104 -0
- data/lib/mtncloud/routes.rb +304 -0
- data/lib/mtncloud/terminal.rb +528 -0
- data/lib/mtncloud/util.rb +29 -0
- data/lib/mtncloud.rb +5 -0
- data/mtncloud-cli.gemspec +38 -0
- data/test/api/affinity_groups_interface_test.rb +43 -0
- data/test/api/clients_interface_test.rb +23 -0
- data/test/api/clouds_interface_test.rb +67 -0
- data/test/api/containers_interface_test.rb +68 -0
- data/test/api/host_vm_groups_interface_test.rb +35 -0
- data/test/api/instances_interface_test.rb +22 -0
- data/test/api/network_routers_interface_test.rb +22 -0
- data/test/api/systems_interface_test.rb +26 -0
- data/test/api/whoami_interface_test.rb +14 -0
- data/test/branding_test.rb +160 -0
- data/test/cli/access_token_test.rb +36 -0
- data/test/cli/affinity_groups_cloud_cluster_scope_test.rb +270 -0
- data/test/cli/affinity_groups_cluster_scope_test.rb +171 -0
- data/test/cli/affinity_groups_test.rb +57 -0
- data/test/cli/affinity_groups_violations_scope_test.rb +141 -0
- data/test/cli/affinity_helper_test.rb +367 -0
- data/test/cli/auth_test.rb +88 -0
- data/test/cli/backups_test.rb +212 -0
- data/test/cli/cli_test.rb +48 -0
- data/test/cli/clients_test.rb +45 -0
- data/test/cli/clusters_uuid_test.rb +146 -0
- data/test/cli/containers_test.rb +92 -0
- data/test/cli/distributed_workers_test.rb +68 -0
- data/test/cli/help_test.rb +25 -0
- data/test/cli/host_vm_groups_cluster_scope_test.rb +187 -0
- data/test/cli/host_vm_groups_test.rb +63 -0
- data/test/cli/infrastructure_helper_cluster_resolver_test.rb +250 -0
- data/test/cli/instances_test.rb +37 -0
- data/test/cli/man_test.rb +14 -0
- data/test/cli/migrations_test.rb +39 -0
- data/test/cli/network_routers_test.rb +65 -0
- data/test/cli/remote_test.rb +89 -0
- data/test/cli/roles_test.rb +47 -0
- data/test/cli/shell_test.rb +81 -0
- data/test/cli/storage_volumes_test.rb +79 -0
- data/test/cli/systems_test.rb +206 -0
- data/test/cli/version_test.rb +23 -0
- data/test/cli/view_test.rb +55 -0
- data/test/cli/whoami_test.rb +17 -0
- data/test/mtncloud_test.rb +16 -0
- data/test/test_case.rb +342 -0
- data/test/test_config.rb +137 -0
- data/test/test_data_helper.rb +97 -0
- metadata +807 -0
|
@@ -0,0 +1,250 @@
|
|
|
1
|
+
require 'test/unit'
|
|
2
|
+
require 'stringio'
|
|
3
|
+
require 'json'
|
|
4
|
+
require 'mtncloud'
|
|
5
|
+
|
|
6
|
+
# Unit tests for the MORPH-17279 cloud-owned vSphere cluster resolver added to
|
|
7
|
+
# MtnCloud::Cli::InfrastructureHelper:
|
|
8
|
+
# find_resource_pool_cluster_by_name_or_id / _by_id / _by_name
|
|
9
|
+
#
|
|
10
|
+
# These are pure unit tests against a fake CloudResourcePoolsInterface. They
|
|
11
|
+
# deliberately do NOT extend MtnCloudTest::TestCase because they require no
|
|
12
|
+
# appliance, no remote and no authentication - they must always be runnable.
|
|
13
|
+
# See test/cli/affinity_helper_test.rb for the established pattern this
|
|
14
|
+
# follows.
|
|
15
|
+
#
|
|
16
|
+
# Bug context: --cloud CLOUD --cluster CLUSTER must resolve CLUSTER as a
|
|
17
|
+
# ComputeZonePool(type='Cluster') owned by CLOUD, distinct from the managed
|
|
18
|
+
# cluster (ComputeServerGroup) namespace resolved via ClustersInterface. A
|
|
19
|
+
# name lookup that traverses ambiguous, wrong-cloud or wrong-type pools must
|
|
20
|
+
# fail loudly instead of returning nil silently or the wrong pool.
|
|
21
|
+
class InfrastructureHelperClusterResolverTest < Test::Unit::TestCase
|
|
22
|
+
|
|
23
|
+
# Fake standing in for MtnCloud::CloudResourcePoolsInterface. Records every
|
|
24
|
+
# call so tests can assert exactly what was requested, mirroring the
|
|
25
|
+
# dry-run request assertions used elsewhere in this suite.
|
|
26
|
+
class FakeResourcePoolsInterface
|
|
27
|
+
attr_reader :get_calls, :list_calls
|
|
28
|
+
|
|
29
|
+
def initialize(get_result: nil, get_error: nil, list_result: nil)
|
|
30
|
+
@get_result = get_result
|
|
31
|
+
@get_error = get_error
|
|
32
|
+
@list_result = list_result
|
|
33
|
+
@get_calls = []
|
|
34
|
+
@list_calls = []
|
|
35
|
+
end
|
|
36
|
+
|
|
37
|
+
def get(cloud_id, id, params = {})
|
|
38
|
+
@get_calls << [cloud_id, id, params]
|
|
39
|
+
raise @get_error if @get_error
|
|
40
|
+
@get_result
|
|
41
|
+
end
|
|
42
|
+
|
|
43
|
+
def list(cloud_id, params = {})
|
|
44
|
+
@list_calls << [cloud_id, params]
|
|
45
|
+
@list_result
|
|
46
|
+
end
|
|
47
|
+
end
|
|
48
|
+
|
|
49
|
+
class FakeClustersInterface
|
|
50
|
+
def initialize(get_result: nil, get_error: nil, list_result: nil)
|
|
51
|
+
@get_result = get_result
|
|
52
|
+
@get_error = get_error
|
|
53
|
+
@list_result = list_result || {'clusters' => []}
|
|
54
|
+
end
|
|
55
|
+
|
|
56
|
+
def get(id)
|
|
57
|
+
raise @get_error if @get_error
|
|
58
|
+
@get_result
|
|
59
|
+
end
|
|
60
|
+
|
|
61
|
+
def list(params = {})
|
|
62
|
+
@list_result
|
|
63
|
+
end
|
|
64
|
+
end
|
|
65
|
+
|
|
66
|
+
# Bare host for the mixin under test.
|
|
67
|
+
class HelperHost
|
|
68
|
+
include MtnCloud::Cli::InfrastructureHelper
|
|
69
|
+
|
|
70
|
+
def initialize(fake_interface, clusters_interface=nil)
|
|
71
|
+
@cloud_resource_pools_interface = fake_interface
|
|
72
|
+
@clusters_interface = clusters_interface if clusters_interface
|
|
73
|
+
end
|
|
74
|
+
end
|
|
75
|
+
|
|
76
|
+
def fake_not_found_error
|
|
77
|
+
response = Object.new
|
|
78
|
+
def response.code; 404; end
|
|
79
|
+
RestClient::Exception.new(response)
|
|
80
|
+
end
|
|
81
|
+
|
|
82
|
+
def fake_server_error
|
|
83
|
+
response = Object.new
|
|
84
|
+
def response.code; 500; end
|
|
85
|
+
RestClient::Exception.new(response)
|
|
86
|
+
end
|
|
87
|
+
|
|
88
|
+
def cloud
|
|
89
|
+
{'id' => 59, 'name' => 'vCenter Cloud'}
|
|
90
|
+
end
|
|
91
|
+
|
|
92
|
+
# print_red_alert writes straight to $stderr (print_helper.rb) - capture it.
|
|
93
|
+
def capture_stderr
|
|
94
|
+
original = $stderr
|
|
95
|
+
$stderr = StringIO.new
|
|
96
|
+
yield
|
|
97
|
+
$stderr.string
|
|
98
|
+
ensure
|
|
99
|
+
$stderr = original
|
|
100
|
+
end
|
|
101
|
+
|
|
102
|
+
## find_resource_pool_cluster_by_id
|
|
103
|
+
|
|
104
|
+
def test_find_by_id_returns_the_pool_when_it_is_a_cluster_in_the_cloud
|
|
105
|
+
fake = FakeResourcePoolsInterface.new(get_result: {
|
|
106
|
+
'resourcePool' => {'id' => 501, 'name' => 'QA', 'type' => 'Cluster', 'zone' => {'id' => 59, 'name' => 'vCenter Cloud'}}
|
|
107
|
+
})
|
|
108
|
+
helper = HelperHost.new(fake)
|
|
109
|
+
pool = helper.find_resource_pool_cluster_by_id(cloud, 501)
|
|
110
|
+
assert_not_nil pool
|
|
111
|
+
assert_equal 501, pool['id']
|
|
112
|
+
assert_equal 'QA', pool['name']
|
|
113
|
+
# Scoped to the cloud -- the server itself enforces ownership.
|
|
114
|
+
assert_equal [[59, 501, {}]], fake.get_calls
|
|
115
|
+
end
|
|
116
|
+
|
|
117
|
+
# ZoneResourcePoolsController#show 404s when the pool's zone does not match
|
|
118
|
+
# the requested cloud -- this is the server-side cloud-ownership check.
|
|
119
|
+
def test_find_by_id_reports_not_found_on_404_without_raising
|
|
120
|
+
fake = FakeResourcePoolsInterface.new(get_error: fake_not_found_error)
|
|
121
|
+
helper = HelperHost.new(fake)
|
|
122
|
+
pool = nil
|
|
123
|
+
output = capture_stderr { pool = helper.find_resource_pool_cluster_by_id(cloud, 999) }
|
|
124
|
+
assert_nil pool
|
|
125
|
+
assert_match(/not found by id 999/i, output)
|
|
126
|
+
assert_match(/vCenter Cloud/, output)
|
|
127
|
+
end
|
|
128
|
+
|
|
129
|
+
# A non-404 failure (auth, server error, etc.) must not be swallowed as a
|
|
130
|
+
# not-found -- that would hide a real problem behind a wrong error message.
|
|
131
|
+
def test_find_by_id_reraises_non_404_errors
|
|
132
|
+
fake = FakeResourcePoolsInterface.new(get_error: fake_server_error)
|
|
133
|
+
helper = HelperHost.new(fake)
|
|
134
|
+
assert_raise(RestClient::Exception) { helper.find_resource_pool_cluster_by_id(cloud, 501) }
|
|
135
|
+
end
|
|
136
|
+
|
|
137
|
+
def test_find_by_id_rejects_a_non_cluster_resource_pool
|
|
138
|
+
fake = FakeResourcePoolsInterface.new(get_result: {
|
|
139
|
+
'resourcePool' => {'id' => 501, 'name' => 'Folder A', 'type' => 'ResourcePool', 'zone' => {'id' => 59, 'name' => 'vCenter Cloud'}}
|
|
140
|
+
})
|
|
141
|
+
helper = HelperHost.new(fake)
|
|
142
|
+
pool = nil
|
|
143
|
+
output = capture_stderr { pool = helper.find_resource_pool_cluster_by_id(cloud, 501) }
|
|
144
|
+
assert_nil pool
|
|
145
|
+
assert_match(/not a Cluster/i, output)
|
|
146
|
+
assert_match(/ResourcePool/, output)
|
|
147
|
+
end
|
|
148
|
+
|
|
149
|
+
## find_resource_pool_cluster_by_name
|
|
150
|
+
|
|
151
|
+
def test_find_by_name_returns_the_single_match
|
|
152
|
+
fake = FakeResourcePoolsInterface.new(list_result: {
|
|
153
|
+
'resourcePools' => [
|
|
154
|
+
{'id' => 501, 'name' => 'QA', 'type' => 'Cluster'},
|
|
155
|
+
]
|
|
156
|
+
})
|
|
157
|
+
helper = HelperHost.new(fake)
|
|
158
|
+
pool = helper.find_resource_pool_cluster_by_name(cloud, 'QA')
|
|
159
|
+
assert_not_nil pool
|
|
160
|
+
assert_equal 501, pool['id']
|
|
161
|
+
assert_equal [[59, {name: 'QA', type: 'Cluster'}]], fake.list_calls
|
|
162
|
+
end
|
|
163
|
+
|
|
164
|
+
def test_find_by_name_matches_on_display_name
|
|
165
|
+
fake = FakeResourcePoolsInterface.new(list_result: {
|
|
166
|
+
'resourcePools' => [
|
|
167
|
+
{'id' => 501, 'name' => 'internal-qa-01', 'displayName' => 'QA', 'type' => 'Cluster'},
|
|
168
|
+
]
|
|
169
|
+
})
|
|
170
|
+
helper = HelperHost.new(fake)
|
|
171
|
+
pool = helper.find_resource_pool_cluster_by_name(cloud, 'QA')
|
|
172
|
+
assert_not_nil pool
|
|
173
|
+
assert_equal 501, pool['id']
|
|
174
|
+
end
|
|
175
|
+
|
|
176
|
+
def test_find_by_name_reports_not_found_with_a_managed_cluster_hint
|
|
177
|
+
fake = FakeResourcePoolsInterface.new(list_result: {'resourcePools' => []})
|
|
178
|
+
helper = HelperHost.new(fake)
|
|
179
|
+
pool = nil
|
|
180
|
+
output = capture_stderr { pool = helper.find_resource_pool_cluster_by_name(cloud, 'QA') }
|
|
181
|
+
assert_nil pool
|
|
182
|
+
assert_match(/not found by name 'QA'/i, output)
|
|
183
|
+
assert_match(/vCenter Cloud/, output)
|
|
184
|
+
assert_match(/--cluster 'QA' without --cloud/, output)
|
|
185
|
+
end
|
|
186
|
+
|
|
187
|
+
# The cloud-scoped resource-pools endpoint returns a pool *tree*: when the
|
|
188
|
+
# matched pool has a parent folder, ancestor entries are backfilled into the
|
|
189
|
+
# result so the hierarchy renders, even though they do not match the
|
|
190
|
+
# name/type filter. The resolver must not misreport this as ambiguity.
|
|
191
|
+
def test_find_by_name_ignores_ancestor_tree_padding
|
|
192
|
+
fake = FakeResourcePoolsInterface.new(list_result: {
|
|
193
|
+
'resourcePools' => [
|
|
194
|
+
{'id' => 10, 'name' => 'Datacenter Folder', 'type' => 'Folder', 'depth' => 0},
|
|
195
|
+
{'id' => 501, 'name' => 'QA', 'type' => 'Cluster', 'depth' => 1},
|
|
196
|
+
]
|
|
197
|
+
})
|
|
198
|
+
helper = HelperHost.new(fake)
|
|
199
|
+
pool = helper.find_resource_pool_cluster_by_name(cloud, 'QA')
|
|
200
|
+
assert_not_nil pool, "the ancestor folder must not be counted as a second match"
|
|
201
|
+
assert_equal 501, pool['id']
|
|
202
|
+
end
|
|
203
|
+
|
|
204
|
+
def test_find_by_name_reports_ambiguity_with_candidates_and_requires_numeric_id
|
|
205
|
+
fake = FakeResourcePoolsInterface.new(list_result: {
|
|
206
|
+
'resourcePools' => [
|
|
207
|
+
{'id' => 501, 'name' => 'QA', 'type' => 'Cluster'},
|
|
208
|
+
{'id' => 502, 'name' => 'QA', 'type' => 'Cluster'},
|
|
209
|
+
]
|
|
210
|
+
})
|
|
211
|
+
helper = HelperHost.new(fake)
|
|
212
|
+
pool = nil
|
|
213
|
+
output = capture_stderr { pool = helper.find_resource_pool_cluster_by_name(cloud, 'QA') }
|
|
214
|
+
assert_nil pool
|
|
215
|
+
assert_match(/2 clusters found by name 'QA'/i, output)
|
|
216
|
+
assert_match(/numeric cluster id/i, output)
|
|
217
|
+
end
|
|
218
|
+
|
|
219
|
+
## find_resource_pool_cluster_by_name_or_id dispatch
|
|
220
|
+
|
|
221
|
+
def test_find_by_name_or_id_dispatches_numeric_strings_to_by_id
|
|
222
|
+
fake = FakeResourcePoolsInterface.new(get_result: {
|
|
223
|
+
'resourcePool' => {'id' => 501, 'name' => 'QA', 'type' => 'Cluster', 'zone' => {'id' => 59}}
|
|
224
|
+
})
|
|
225
|
+
helper = HelperHost.new(fake)
|
|
226
|
+
pool = helper.find_resource_pool_cluster_by_name_or_id(cloud, '501')
|
|
227
|
+
assert_not_nil pool
|
|
228
|
+
assert_equal 1, fake.get_calls.size
|
|
229
|
+
assert_equal 0, fake.list_calls.size
|
|
230
|
+
end
|
|
231
|
+
|
|
232
|
+
def test_find_by_name_or_id_dispatches_non_numeric_strings_to_by_name
|
|
233
|
+
fake = FakeResourcePoolsInterface.new(list_result: {
|
|
234
|
+
'resourcePools' => [{'id' => 501, 'name' => 'QA', 'type' => 'Cluster'}]
|
|
235
|
+
})
|
|
236
|
+
helper = HelperHost.new(fake)
|
|
237
|
+
pool = helper.find_resource_pool_cluster_by_name_or_id(cloud, 'QA')
|
|
238
|
+
assert_not_nil pool
|
|
239
|
+
assert_equal 0, fake.get_calls.size
|
|
240
|
+
assert_equal 1, fake.list_calls.size
|
|
241
|
+
end
|
|
242
|
+
|
|
243
|
+
def test_managed_cluster_lookup_reraises_non_404_errors
|
|
244
|
+
pools = FakeResourcePoolsInterface.new
|
|
245
|
+
clusters = FakeClustersInterface.new(get_error: fake_server_error)
|
|
246
|
+
helper = HelperHost.new(pools, clusters)
|
|
247
|
+
assert_raise(RestClient::Exception) { helper.find_managed_cluster_by_name_or_id('8') }
|
|
248
|
+
end
|
|
249
|
+
|
|
250
|
+
end
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
require 'mtncloud_test'
|
|
2
|
+
|
|
3
|
+
# Tests for MtnCloud::Cli::Instances
|
|
4
|
+
class MtnCloudTest::InstancesTest < MtnCloudTest::TestCase
|
|
5
|
+
|
|
6
|
+
def test_instances_list
|
|
7
|
+
assert_execute %(instances list)
|
|
8
|
+
end
|
|
9
|
+
|
|
10
|
+
def test_instances_get
|
|
11
|
+
instance = client.instances.list({})['instances'][0]
|
|
12
|
+
if instance
|
|
13
|
+
assert_execute %(instances get "#{instance['id']}")
|
|
14
|
+
name_arg = instance['displayName'] || instance['name']
|
|
15
|
+
assert_execute %(instances get "#{escape_arg name_arg}")
|
|
16
|
+
else
|
|
17
|
+
puts "No instance found, unable to execute test `#{__method__}`"
|
|
18
|
+
end
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
# def test_instances_add
|
|
22
|
+
# warn "Skipped test test_instances_add() because it is not implemented"
|
|
23
|
+
# end
|
|
24
|
+
|
|
25
|
+
# def test_instances_update
|
|
26
|
+
# warn "Skipped test test_instances_update() because it is not implemented"
|
|
27
|
+
# end
|
|
28
|
+
|
|
29
|
+
# def test_instances_delete
|
|
30
|
+
# warn "Skipped test test_instances_remove() because it is not implemented"
|
|
31
|
+
# end
|
|
32
|
+
|
|
33
|
+
# todo: many more instance commands to add
|
|
34
|
+
|
|
35
|
+
protected
|
|
36
|
+
|
|
37
|
+
end
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
require 'mtncloud_test'
|
|
2
|
+
|
|
3
|
+
class MtnCloudTest::ManTest < MtnCloudTest::TestCase
|
|
4
|
+
|
|
5
|
+
def test_man
|
|
6
|
+
# need to use -q to avoid interactive right now...
|
|
7
|
+
assert_execute("man -q")
|
|
8
|
+
assert_execute("man -g -q")
|
|
9
|
+
assert_execute("man -q")
|
|
10
|
+
man_file_path = MtnCloud::Cli::ManCommand.man_file_path
|
|
11
|
+
assert(File.exist?(man_file_path), "File #{man_file_path} should have been created.")
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
end
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
require 'mtncloud_test'
|
|
2
|
+
|
|
3
|
+
class MtnCloudTest::MigrationsTest < MtnCloudTest::TestCase
|
|
4
|
+
|
|
5
|
+
def test_migrations_list
|
|
6
|
+
assert_execute %(migrations list)
|
|
7
|
+
assert_execute %(migrations list "apitest")
|
|
8
|
+
end
|
|
9
|
+
|
|
10
|
+
def test_migrations_get
|
|
11
|
+
# migration = client.migrations.list({})['migrations'][0]
|
|
12
|
+
migration = client.migrations.list({})['migrations'].find {|r| r['authority'] !~ /\A\d+\Z/}
|
|
13
|
+
if migration
|
|
14
|
+
assert_execute %(migrations get "#{migration['id']}")
|
|
15
|
+
# beware that duplicates may exist
|
|
16
|
+
name_arg = migration['name']
|
|
17
|
+
assert_execute %(migrations get "#{escape_arg name_arg}")
|
|
18
|
+
else
|
|
19
|
+
puts "No migration found, unable to execute test `#{__method__}`"
|
|
20
|
+
end
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
|
|
24
|
+
# todo: test all the other commands
|
|
25
|
+
|
|
26
|
+
# def test_migrations_add
|
|
27
|
+
# assert_execute %(migrations add "test_migration_#{random_id}" -N)
|
|
28
|
+
# end
|
|
29
|
+
|
|
30
|
+
# def test_migrations_update
|
|
31
|
+
# #skip "Test needs to be added"
|
|
32
|
+
# assert_execute %(migrations update "test_migration_#{random_id}" --description "neat")
|
|
33
|
+
# end
|
|
34
|
+
|
|
35
|
+
# def test_migrations_remove
|
|
36
|
+
# assert_execute %(migrations remove "test_migration_#{random_id}" -y")
|
|
37
|
+
# end
|
|
38
|
+
|
|
39
|
+
end
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
require 'mtncloud_test'
|
|
2
|
+
|
|
3
|
+
# Tests for MtnCloud::Cli::NetworkRouters
|
|
4
|
+
class MtnCloudTest::NetworkRoutersTest < MtnCloudTest::TestCase
|
|
5
|
+
|
|
6
|
+
def test_network_routers_list
|
|
7
|
+
assert_execute %(network-routers list)
|
|
8
|
+
end
|
|
9
|
+
|
|
10
|
+
def test_network_routers_get
|
|
11
|
+
# find one that does not have a duplicate name..so we can get it by name
|
|
12
|
+
#network_router = client.network_routers.list({})['networkRouters'][0]
|
|
13
|
+
network_routers = client.network_routers.list({})['networkRouters']
|
|
14
|
+
network_router = network_routers.find {|it| !(network_routers.find {|other| other['name'] == it['name'] }) }
|
|
15
|
+
if network_router
|
|
16
|
+
assert_execute %(network-routers get "#{network_router['id']}")
|
|
17
|
+
assert_execute %(network-routers get "#{escape_arg network_router['name']}")
|
|
18
|
+
else
|
|
19
|
+
puts "No network routers found, unable to execute test `#{__method__}`"
|
|
20
|
+
end
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
def test_network_routers_firewall_rules
|
|
24
|
+
network_router = client.network_routers.list({})['networkRouters'].find {|it| it['firewall'] }
|
|
25
|
+
if network_router
|
|
26
|
+
assert_execute %(network-routers firewall-rules "#{network_router['id']}")
|
|
27
|
+
else
|
|
28
|
+
puts "No network routers found with a firewall, unable to execute test `#{__method__}`"
|
|
29
|
+
end
|
|
30
|
+
end
|
|
31
|
+
|
|
32
|
+
def test_network_routers_firewall_rules_get
|
|
33
|
+
network_router = client.network_routers.list({})['networkRouters'].find {|it| it['firewall'] }
|
|
34
|
+
if network_router
|
|
35
|
+
# need to get by id to get the firewall rules
|
|
36
|
+
network_router = client.network_routers.get(network_router['id'])['networkRouter']
|
|
37
|
+
rules = network_router['type']['hasFirewallGroups'] ? (network_router['firewall']['ruleGroups'] || []).collect {|it| it['rules']}.flatten : network_router['firewall']['rules']
|
|
38
|
+
rule = rules[0]
|
|
39
|
+
if rule
|
|
40
|
+
assert_execute %(network-routers firewall-rule "#{network_router['id']}" "#{rule['id']}")
|
|
41
|
+
else
|
|
42
|
+
puts "No network router firewall rules found, unable to execute test `#{__method__}`"
|
|
43
|
+
end
|
|
44
|
+
else
|
|
45
|
+
puts "No network routers found with a firewall, unable to execute test `#{__method__}`"
|
|
46
|
+
end
|
|
47
|
+
end
|
|
48
|
+
|
|
49
|
+
# def test_network_routers_add
|
|
50
|
+
# warn "Skipped test test_network_routers_add() because it is not implemented"
|
|
51
|
+
# end
|
|
52
|
+
|
|
53
|
+
# def test_network_routers_update
|
|
54
|
+
# warn "Skipped test test_network_routers_update() because it is not implemented"
|
|
55
|
+
# end
|
|
56
|
+
|
|
57
|
+
# def test_network_routers_delete
|
|
58
|
+
# warn "Skipped test test_network_routers_remove() because it is not implemented"
|
|
59
|
+
# end
|
|
60
|
+
|
|
61
|
+
# todo: many more network-routers commands to add
|
|
62
|
+
|
|
63
|
+
protected
|
|
64
|
+
|
|
65
|
+
end
|
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
require 'mtncloud_test'
|
|
2
|
+
|
|
3
|
+
# Tests for MtnCloud::Cli::Remote
|
|
4
|
+
class MtnCloudTest::RemoteTest < MtnCloudTest::TestCase
|
|
5
|
+
|
|
6
|
+
def requires_remote
|
|
7
|
+
false
|
|
8
|
+
end
|
|
9
|
+
|
|
10
|
+
def requires_authentication
|
|
11
|
+
false
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
def setup
|
|
15
|
+
super()
|
|
16
|
+
@@test_remote_name ||= "test_remote_#{SecureRandom.hex(10)}"
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
def teardown
|
|
20
|
+
# switch back aftwards
|
|
21
|
+
assert_execute %(remote use "#{escape_arg @config.remote_name}")
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
def test_remote_add
|
|
25
|
+
assert_execute %(remote add "#{@@test_remote_name}" "#{escape_arg @config.url}" --insecure --use -N)
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
def test_remote_list
|
|
29
|
+
assert_execute %(remote list)
|
|
30
|
+
assert_execute %(remote list "#{@@test_remote_name}")
|
|
31
|
+
end
|
|
32
|
+
|
|
33
|
+
def test_remote_get
|
|
34
|
+
assert_execute %(remote get)
|
|
35
|
+
assert_execute %(remote get current)
|
|
36
|
+
assert_execute %(remote get "#{@@test_remote_name}")
|
|
37
|
+
assert_execute %(remote get "#{@@test_remote_name}" --offline)
|
|
38
|
+
end
|
|
39
|
+
|
|
40
|
+
def test_remote_current
|
|
41
|
+
assert_execute %(remote current)
|
|
42
|
+
end
|
|
43
|
+
|
|
44
|
+
def test_remote_version
|
|
45
|
+
assert_execute %(remote version)
|
|
46
|
+
#assert_execute %(remote version "#{@@test_remote_name}")
|
|
47
|
+
end
|
|
48
|
+
|
|
49
|
+
def test_remote_check
|
|
50
|
+
assert_execute %(remote check)
|
|
51
|
+
assert_execute %(remote check "#{@@test_remote_name}")
|
|
52
|
+
end
|
|
53
|
+
|
|
54
|
+
def test_remote_check_all
|
|
55
|
+
assert_execute %(remote check-all)
|
|
56
|
+
end
|
|
57
|
+
|
|
58
|
+
def test_remote_update
|
|
59
|
+
assert_execute %(remote update "#{@@test_remote_name}" --url "#{escape_arg @config.url}" --insecure)
|
|
60
|
+
#assert_execute %(remote update "#{@@test_remote_name}" --name "#{@@test_remote_name}_updated")
|
|
61
|
+
#assert_execute %(remote update "#{@@test_remote_name}_updated" --name "#{@@test_remote_name}")
|
|
62
|
+
end
|
|
63
|
+
|
|
64
|
+
def test_remote_rename
|
|
65
|
+
assert_execute %(remote rename "#{@@test_remote_name}" "#{@@test_remote_name}_renamed" -y)
|
|
66
|
+
assert_execute %(remote rename "#{@@test_remote_name}_renamed" "#{@@test_remote_name}" -y)
|
|
67
|
+
end
|
|
68
|
+
|
|
69
|
+
def test_remote_use
|
|
70
|
+
assert_error %(remote use)
|
|
71
|
+
assert_error %(remote use unknown_remote)
|
|
72
|
+
assert_execute %(remote use "#{@@test_remote_name}")
|
|
73
|
+
assert_execute %(remote use "#{@@test_remote_name}")
|
|
74
|
+
assert_execute %(remote get current)
|
|
75
|
+
assert_execute %(remote unuse)
|
|
76
|
+
assert_error %(remote get current)
|
|
77
|
+
assert_execute %(remote use "#{@@test_remote_name}" -q)
|
|
78
|
+
end
|
|
79
|
+
|
|
80
|
+
def test_remote_remove
|
|
81
|
+
# test remove confirmation reploy of n or no
|
|
82
|
+
with_input(["n", "No"]) do
|
|
83
|
+
assert_error %(remote remove "#{@@test_remote_name}")
|
|
84
|
+
assert_error %(remote remove "#{@@test_remote_name}")
|
|
85
|
+
end
|
|
86
|
+
assert_execute %(remote remove "#{@@test_remote_name}" -y)
|
|
87
|
+
end
|
|
88
|
+
|
|
89
|
+
end
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
require 'mtncloud_test'
|
|
2
|
+
|
|
3
|
+
class MtnCloudTest::RolesTest < MtnCloudTest::TestCase
|
|
4
|
+
|
|
5
|
+
def test_roles_list
|
|
6
|
+
assert_execute %(roles list)
|
|
7
|
+
assert_execute %(roles list "System Admin")
|
|
8
|
+
end
|
|
9
|
+
|
|
10
|
+
# def test_roles_get_system_admin
|
|
11
|
+
# assert_execute %(roles get "System Admin")
|
|
12
|
+
# assert_execute %(roles get "System Admin" --permissions)
|
|
13
|
+
# end
|
|
14
|
+
|
|
15
|
+
def test_roles_get
|
|
16
|
+
# role = client.roles.list({})['roles'][0]
|
|
17
|
+
role = client.roles.list({})['roles'].find {|r| r['authority'] !~ /\A\d+\Z/}
|
|
18
|
+
if role
|
|
19
|
+
assert_execute %(roles get "#{role['id']}")
|
|
20
|
+
name_arg = role['authority']
|
|
21
|
+
assert_execute %(roles get "#{escape_arg name_arg}")
|
|
22
|
+
assert_execute %(roles get "#{escape_arg name_arg}" --permissions)
|
|
23
|
+
else
|
|
24
|
+
puts "No role found, unable to execute test `#{__method__}`"
|
|
25
|
+
end
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
def test_roles_list_permissions
|
|
29
|
+
assert_execute %(roles list-permissions "System Admin")
|
|
30
|
+
end
|
|
31
|
+
|
|
32
|
+
# todo: test all the other commands
|
|
33
|
+
|
|
34
|
+
# def test_roles_add
|
|
35
|
+
# assert_execute %(roles add "test_role_#{random_id}" -N)
|
|
36
|
+
# end
|
|
37
|
+
|
|
38
|
+
# def test_roles_update
|
|
39
|
+
# #skip "Test needs to be added"
|
|
40
|
+
# assert_execute %(roles update "test_role_#{random_id}" --description "neat")
|
|
41
|
+
# end
|
|
42
|
+
|
|
43
|
+
# def test_roles_remove
|
|
44
|
+
# assert_execute %(roles remove "test_role_#{random_id}" -y")
|
|
45
|
+
# end
|
|
46
|
+
|
|
47
|
+
end
|
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
require 'mtncloud_test'
|
|
2
|
+
|
|
3
|
+
class MtnCloudTest::ShellTest < MtnCloudTest::TestCase
|
|
4
|
+
|
|
5
|
+
def requires_remote
|
|
6
|
+
false
|
|
7
|
+
end
|
|
8
|
+
|
|
9
|
+
def requires_authentication
|
|
10
|
+
false
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
# class << self
|
|
14
|
+
# def startup
|
|
15
|
+
# # one time use remote and login at beginning of testsuite, not each method
|
|
16
|
+
# use_remote()
|
|
17
|
+
# login()
|
|
18
|
+
# end
|
|
19
|
+
# end
|
|
20
|
+
|
|
21
|
+
# def test_remote_use
|
|
22
|
+
# # use remote needed for all except test_shell_clean() , todo: exclude paradigm that yet..
|
|
23
|
+
# use_remote()
|
|
24
|
+
# end
|
|
25
|
+
|
|
26
|
+
def test_shell
|
|
27
|
+
with_input "exit" do
|
|
28
|
+
assert_execute "shell"
|
|
29
|
+
end
|
|
30
|
+
end
|
|
31
|
+
|
|
32
|
+
def test_shell_verbose
|
|
33
|
+
login_if_needed()
|
|
34
|
+
with_input "whoami", "exit" do
|
|
35
|
+
assert_execute "shell -V"
|
|
36
|
+
end
|
|
37
|
+
end
|
|
38
|
+
|
|
39
|
+
def test_shell_history
|
|
40
|
+
with_input "history", "exit" do
|
|
41
|
+
assert_execute "shell"
|
|
42
|
+
end
|
|
43
|
+
end
|
|
44
|
+
|
|
45
|
+
def test_shell_sleep
|
|
46
|
+
with_input "echo \"It is time for a rest.\"", "sleep 0.5", "echo \"OK, let's keep testing\"", "exit" do
|
|
47
|
+
assert_execute "shell -V"
|
|
48
|
+
end
|
|
49
|
+
end
|
|
50
|
+
|
|
51
|
+
def test_shell_temporary
|
|
52
|
+
with_input "remote list", "remote current", "echo this is a temporary shell with no history", "history", "exit" do
|
|
53
|
+
assert_execute "shell -Z -V"
|
|
54
|
+
end
|
|
55
|
+
end
|
|
56
|
+
|
|
57
|
+
def test_shell_confirmation
|
|
58
|
+
with_input "access-token refresh", "I'm not sure...", "no", "exit" do
|
|
59
|
+
assert_execute "shell -Z -V"
|
|
60
|
+
end
|
|
61
|
+
end
|
|
62
|
+
|
|
63
|
+
# todo: fix bug where appliances are not restored after clean shell.. so remote use #{@config.remote_name}" starts failing here..
|
|
64
|
+
=begin
|
|
65
|
+
def test_shell_clean
|
|
66
|
+
with_input "echo this is a clean shell with no remotes or history", "remote list", "remote current", "history", "exit" do
|
|
67
|
+
assert_execute "shell -z"
|
|
68
|
+
end
|
|
69
|
+
with_input "echo this is another clean shell", "exit" do
|
|
70
|
+
assert_execute "shell --clean"
|
|
71
|
+
end
|
|
72
|
+
end
|
|
73
|
+
|
|
74
|
+
def test_shell_history_again
|
|
75
|
+
with_input "echo back in test shell again with our remote and history", "remote get #{@config.remote_name}", "history", "exit" do
|
|
76
|
+
assert_execute "shell"
|
|
77
|
+
end
|
|
78
|
+
end
|
|
79
|
+
=end
|
|
80
|
+
|
|
81
|
+
end
|