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,482 @@
|
|
|
1
|
+
require 'fileutils'
|
|
2
|
+
require 'yaml'
|
|
3
|
+
require 'json'
|
|
4
|
+
require 'io/console'
|
|
5
|
+
require 'rest_client'
|
|
6
|
+
require 'mtncloud/logging'
|
|
7
|
+
require 'mtncloud/cli/mixins/print_helper'
|
|
8
|
+
|
|
9
|
+
module MtnCloud
|
|
10
|
+
module Cli
|
|
11
|
+
class Credentials
|
|
12
|
+
include MtnCloud::Cli::PrintHelper
|
|
13
|
+
|
|
14
|
+
@@appliance_credentials_map = nil
|
|
15
|
+
|
|
16
|
+
def initialize(appliance_name, appliance_url)
|
|
17
|
+
@appliance_name = appliance_name ? appliance_name.to_sym : nil
|
|
18
|
+
@appliance_url = appliance_url
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
# request_credentials will fetch a credentials wallet (access_token, refresh_token, etc)
|
|
22
|
+
# By default this uses the saved credentials for the current appliance.
|
|
23
|
+
# If not logged in, it will prompt for username and password to
|
|
24
|
+
# authenticate with the /oauth/token API to receive an access_token.
|
|
25
|
+
# If :username and :password are passed, then
|
|
26
|
+
# Pass :remote_token to skip prompting and the auth api request.
|
|
27
|
+
# @param options - Hash of optional settings.
|
|
28
|
+
# :username - Username for prompt.
|
|
29
|
+
# :password - Password for prompt.
|
|
30
|
+
# :remote_url - Use this url instead of the one from the current appliance. Credentials will not be saved.
|
|
31
|
+
# :remote_token - Use this access_token, skip prompting and API request.
|
|
32
|
+
# :remote_username - Username for authentication with --remote, skips saving credentials
|
|
33
|
+
# :remote_password - Password for authentication with --remote, skips saving credentials
|
|
34
|
+
# :test_only - Test only. Saved credentials will not be updated.
|
|
35
|
+
# @return Hash wallet like {"access_token":"ec68be138765...", "refresh_token":"ec68be138765..."}
|
|
36
|
+
# or nil if unable to find credentials.
|
|
37
|
+
def request_credentials(options = {}, do_save=true)
|
|
38
|
+
#puts "request_credentials(#{options})"
|
|
39
|
+
username = nil
|
|
40
|
+
password = nil
|
|
41
|
+
wallet = nil
|
|
42
|
+
|
|
43
|
+
# should not need this logic in here
|
|
44
|
+
if options[:remote_url]
|
|
45
|
+
# @appliance_name = options[:remote_url]
|
|
46
|
+
# name should change too though or printing may be misleading.
|
|
47
|
+
# @appliance_name = "remote-url"
|
|
48
|
+
# @appliance_url = options[:remote_url]
|
|
49
|
+
# do not save when using --remote-url
|
|
50
|
+
do_save = false
|
|
51
|
+
end
|
|
52
|
+
|
|
53
|
+
if options[:remote_token]
|
|
54
|
+
# user passed in a token to login with.
|
|
55
|
+
# this should get token info from /oauth/token
|
|
56
|
+
# OR whoami should return other wallet info like access token or maybe just the expiration date
|
|
57
|
+
# for now, it just stores the access token without other wallet info
|
|
58
|
+
begin
|
|
59
|
+
whoami_interface = MtnCloud::WhoamiInterface.new({url: @appliance_url, access_token: options[:remote_token], verify_ssl: !options[:insecure]})
|
|
60
|
+
whoami_interface.setopts(options)
|
|
61
|
+
if options[:dry_run]
|
|
62
|
+
print_dry_run whoami_interface.dry.get()
|
|
63
|
+
return nil
|
|
64
|
+
end
|
|
65
|
+
whoami_response = whoami_interface.get()
|
|
66
|
+
if options[:json]
|
|
67
|
+
puts as_json(whoami_response, options)
|
|
68
|
+
print reset, "\n"
|
|
69
|
+
end
|
|
70
|
+
# store mock /oauth/token auth_interface.login() result
|
|
71
|
+
json_response = {'access_token' => options[:remote_token], 'token_type' => 'bearer'}
|
|
72
|
+
username = whoami_response['user']['username']
|
|
73
|
+
login_date = Time.now
|
|
74
|
+
expire_date = nil
|
|
75
|
+
if json_response['expires_in']
|
|
76
|
+
expire_date = login_date.to_i + json_response['expires_in'].to_i
|
|
77
|
+
end
|
|
78
|
+
wallet = {
|
|
79
|
+
'username' => username,
|
|
80
|
+
'login_date' => login_date.to_i,
|
|
81
|
+
'expire_date' => expire_date ? expire_date.to_i : nil,
|
|
82
|
+
'access_token' => json_response['access_token'],
|
|
83
|
+
'refresh_token' => json_response['refresh_token'],
|
|
84
|
+
'token_type' => json_response['token_type']
|
|
85
|
+
}
|
|
86
|
+
rescue ::RestClient::Exception => e
|
|
87
|
+
#raise e
|
|
88
|
+
print_red_alert "Token not valid."
|
|
89
|
+
if options[:debug]
|
|
90
|
+
print_rest_exception(e, options)
|
|
91
|
+
end
|
|
92
|
+
wallet = nil
|
|
93
|
+
end
|
|
94
|
+
else
|
|
95
|
+
# ok prompt for creds..
|
|
96
|
+
username = options['username'] || options[:username] || nil
|
|
97
|
+
password = options['password'] || options[:password] || nil
|
|
98
|
+
|
|
99
|
+
# what are these for? just use :username and :password
|
|
100
|
+
if options[:remote_username]
|
|
101
|
+
username = options[:remote_username]
|
|
102
|
+
password = options[:remote_password]
|
|
103
|
+
end
|
|
104
|
+
if wallet.nil?
|
|
105
|
+
unless options[:quiet] || options[:no_prompt]
|
|
106
|
+
print "Enter MTN Cloud Credentials for #{display_appliance(@appliance_name, @appliance_url)}", "\n", reset
|
|
107
|
+
if options[:client_id].empty?
|
|
108
|
+
# print "Client ID: #{required_blue_prompt} #{options[:client_id]}", "\n", reset
|
|
109
|
+
else
|
|
110
|
+
if options[:client_id] != MtnCloud::APIClient::CLIENT_ID
|
|
111
|
+
print "Client ID: #{required_blue_prompt} #{options[:client_id]}", "\n", reset
|
|
112
|
+
end
|
|
113
|
+
end
|
|
114
|
+
if username.empty?
|
|
115
|
+
# print "Username: #{required_blue_prompt} "
|
|
116
|
+
# username = $stdin.gets.chomp!
|
|
117
|
+
Readline.completion_append_character = ""
|
|
118
|
+
Readline.basic_word_break_characters = ''
|
|
119
|
+
Readline.completer_word_break_characters = '' rescue nil
|
|
120
|
+
Readline.completion_proc = nil
|
|
121
|
+
username = Readline.readline("Username: #{required_blue_prompt} ", false).to_s.chomp
|
|
122
|
+
else
|
|
123
|
+
print "Username: #{required_blue_prompt} #{username}\n"
|
|
124
|
+
end
|
|
125
|
+
if password.empty?
|
|
126
|
+
# readline is still echoing secret with 'NUL:'' so just use $stdin on windows for now
|
|
127
|
+
# and some other environments? just use noecho unless running unit tests
|
|
128
|
+
if MtnCloud::Cli.windows? || !MtnCloud::Cli.testing?
|
|
129
|
+
print "Password: #{required_blue_prompt} "
|
|
130
|
+
# this should be my_terminal.stdin instead of STDIN and $stdin
|
|
131
|
+
password = $stdin.noecho(&:gets).chomp!
|
|
132
|
+
print "\n"
|
|
133
|
+
else
|
|
134
|
+
|
|
135
|
+
Readline.completion_append_character = ""
|
|
136
|
+
Readline.basic_word_break_characters = ''
|
|
137
|
+
Readline.completer_word_break_characters = '' rescue nil
|
|
138
|
+
Readline.completion_proc = nil
|
|
139
|
+
# needs to work like $stdin.noecho
|
|
140
|
+
Readline.pre_input_hook = lambda {
|
|
141
|
+
Readline.output = File.open('/dev/null', 'w')
|
|
142
|
+
#Readline.output = File.open(MtnCloud::Cli.windows? ? 'NUL:' : '/dev/null', 'w')
|
|
143
|
+
#$stdout = File.open(MtnCloud::Cli.windows? ? 'NUL:' : '/dev/null', 'w')
|
|
144
|
+
}
|
|
145
|
+
password = Readline.readline("Password: #{required_blue_prompt} ", false).to_s.chomp
|
|
146
|
+
Readline.pre_input_hook = nil
|
|
147
|
+
Readline.output = MtnCloud::Terminal.instance.stdout #my_terminal.stdout
|
|
148
|
+
print "\n"
|
|
149
|
+
end
|
|
150
|
+
else
|
|
151
|
+
print "Password: #{required_blue_prompt} \n"
|
|
152
|
+
end
|
|
153
|
+
end
|
|
154
|
+
if username.empty? || password.empty?
|
|
155
|
+
print_red_alert "Username and password are required to login."
|
|
156
|
+
return nil
|
|
157
|
+
end
|
|
158
|
+
begin
|
|
159
|
+
auth_interface = MtnCloud::AuthInterface.new({url:@appliance_url, client_id: options[:client_id], verify_ssl: !options[:insecure]})
|
|
160
|
+
auth_interface.setopts(options)
|
|
161
|
+
if options[:dry_run]
|
|
162
|
+
print_dry_run auth_interface.dry.login(username, password)
|
|
163
|
+
return nil
|
|
164
|
+
end
|
|
165
|
+
json_response = auth_interface.login(username, password)
|
|
166
|
+
if options[:json]
|
|
167
|
+
print JSON.pretty_generate(json_response)
|
|
168
|
+
print reset, "\n"
|
|
169
|
+
end
|
|
170
|
+
#wallet = json_response
|
|
171
|
+
login_date = Time.now
|
|
172
|
+
expire_date = nil
|
|
173
|
+
if json_response['expires_in']
|
|
174
|
+
expire_date = login_date.to_i + json_response['expires_in'].to_i
|
|
175
|
+
end
|
|
176
|
+
wallet = {
|
|
177
|
+
'username' => username,
|
|
178
|
+
'login_date' => login_date.to_i,
|
|
179
|
+
'expire_date' => expire_date ? expire_date.to_i : nil,
|
|
180
|
+
'access_token' => json_response['access_token'],
|
|
181
|
+
'refresh_token' => json_response['refresh_token'],
|
|
182
|
+
'token_type' => json_response['token_type']
|
|
183
|
+
}
|
|
184
|
+
|
|
185
|
+
rescue ::RestClient::Exception => e
|
|
186
|
+
#raise e
|
|
187
|
+
if (e.response && e.response.code == 400)
|
|
188
|
+
json_response = JSON.parse(e.response.to_s)
|
|
189
|
+
error_msg = json_response['error_description'] || "Credentials not verified."
|
|
190
|
+
print_red_alert error_msg
|
|
191
|
+
if options[:json]
|
|
192
|
+
json_response = JSON.parse(e.response.to_s)
|
|
193
|
+
print JSON.pretty_generate(json_response)
|
|
194
|
+
print reset, "\n"
|
|
195
|
+
end
|
|
196
|
+
else
|
|
197
|
+
print_rest_exception(e, options)
|
|
198
|
+
end
|
|
199
|
+
wallet = nil
|
|
200
|
+
end
|
|
201
|
+
|
|
202
|
+
end
|
|
203
|
+
end
|
|
204
|
+
|
|
205
|
+
if do_save && @appliance_name
|
|
206
|
+
begin
|
|
207
|
+
# save pertinent session info to the appliance
|
|
208
|
+
save_credentials(@appliance_name, wallet)
|
|
209
|
+
now = Time.now.to_i
|
|
210
|
+
appliance = ::MtnCloud::Cli::Remote.load_remote(@appliance_name)
|
|
211
|
+
if wallet && wallet['access_token']
|
|
212
|
+
save_credentials(@appliance_name, wallet)
|
|
213
|
+
else
|
|
214
|
+
clear_saved_credentials(@appliance_name)
|
|
215
|
+
end
|
|
216
|
+
if appliance
|
|
217
|
+
if wallet && wallet['access_token']
|
|
218
|
+
# save wallet to credentials file
|
|
219
|
+
save_credentials(@appliance_name, wallet)
|
|
220
|
+
# save appliances file
|
|
221
|
+
appliance = ::MtnCloud::Cli::Remote.load_remote(@appliance_name)
|
|
222
|
+
appliance[:authenticated] = true
|
|
223
|
+
appliance[:username] = username
|
|
224
|
+
appliance[:status] = "ready"
|
|
225
|
+
appliance[:last_login_at] = now
|
|
226
|
+
appliance[:last_success_at] = now
|
|
227
|
+
::MtnCloud::Cli::Remote.save_remote(@appliance_name, appliance)
|
|
228
|
+
else
|
|
229
|
+
# could be nice and not do this
|
|
230
|
+
#logout()
|
|
231
|
+
#save wallet to credentials file
|
|
232
|
+
clear_saved_credentials(@appliance_name)
|
|
233
|
+
now = Time.now.to_i
|
|
234
|
+
appliance = ::MtnCloud::Cli::Remote.load_remote(@appliance_name)
|
|
235
|
+
appliance[:authenticated] = false
|
|
236
|
+
old_username = appliance.delete(:username)
|
|
237
|
+
appliance[:last_logout_at] = Time.now.to_i
|
|
238
|
+
#appliance[:last_login_at] = now
|
|
239
|
+
#appliance[:error] = "Credentials not verified"
|
|
240
|
+
appliance.delete(:username)
|
|
241
|
+
::MtnCloud::Cli::Remote.save_remote(@appliance_name, appliance)
|
|
242
|
+
if old_username
|
|
243
|
+
print reset,"You have been automatically logged out. Goodbye #{old_username}!", reset, "\n"
|
|
244
|
+
end
|
|
245
|
+
end
|
|
246
|
+
|
|
247
|
+
end
|
|
248
|
+
rescue => e
|
|
249
|
+
MtnCloud::Logging::DarkPrinter.puts "failed to update remote appliance config: (#{e.class}) #{e.message}"
|
|
250
|
+
ensure
|
|
251
|
+
#::MtnCloud::Cli::Remote.recalculate_variable_map()
|
|
252
|
+
end
|
|
253
|
+
end
|
|
254
|
+
|
|
255
|
+
return wallet
|
|
256
|
+
end
|
|
257
|
+
|
|
258
|
+
def login(options = {}, do_save=true)
|
|
259
|
+
request_credentials(options, do_save)
|
|
260
|
+
end
|
|
261
|
+
|
|
262
|
+
def logout()
|
|
263
|
+
clear_saved_credentials(@appliance_name)
|
|
264
|
+
# save pertinent session info to the appliance
|
|
265
|
+
appliance = ::MtnCloud::Cli::Remote.load_remote(@appliance_name)
|
|
266
|
+
if appliance
|
|
267
|
+
appliance.delete(:username) # could leave this...
|
|
268
|
+
appliance[:authenticated] = false
|
|
269
|
+
appliance[:last_logout_at] = Time.now.to_i
|
|
270
|
+
::MtnCloud::Cli::Remote.save_remote(@appliance_name, appliance)
|
|
271
|
+
end
|
|
272
|
+
::MtnCloud::Cli::Remote.recalculate_variable_map()
|
|
273
|
+
true
|
|
274
|
+
end
|
|
275
|
+
|
|
276
|
+
def use_refresh_token(refresh_token_value, options = {})
|
|
277
|
+
|
|
278
|
+
wallet = load_saved_credentials
|
|
279
|
+
|
|
280
|
+
if wallet.nil?
|
|
281
|
+
print_red_alert yellow,"You are not currently logged in to #{display_appliance(@appliance_name, @appliance_url)}",reset,"\n"
|
|
282
|
+
return nil
|
|
283
|
+
end
|
|
284
|
+
|
|
285
|
+
if refresh_token_value.nil?
|
|
286
|
+
if wallet['refresh_token']
|
|
287
|
+
refresh_token_value = wallet['refresh_token']
|
|
288
|
+
else
|
|
289
|
+
print_red_alert yellow,"No refresh token found for #{display_appliance(@appliance_name, @appliance_url)}",reset,"\n"
|
|
290
|
+
return nil
|
|
291
|
+
end
|
|
292
|
+
end
|
|
293
|
+
|
|
294
|
+
username = wallet['username']
|
|
295
|
+
|
|
296
|
+
begin
|
|
297
|
+
auth_interface = MtnCloud::AuthInterface.new({url:@appliance_url, client_id: options[:client_id], verify_ssl: !options[:insecure]})
|
|
298
|
+
auth_interface.setopts(options)
|
|
299
|
+
if options[:dry_run]
|
|
300
|
+
print_dry_run auth_interface.dry.use_refresh_token(refresh_token_value)
|
|
301
|
+
return nil
|
|
302
|
+
end
|
|
303
|
+
json_response = auth_interface.use_refresh_token(refresh_token_value)
|
|
304
|
+
#wallet = json_response
|
|
305
|
+
login_date = Time.now
|
|
306
|
+
expire_date = nil
|
|
307
|
+
if json_response['expires_in']
|
|
308
|
+
expire_date = login_date.to_i + json_response['expires_in'].to_i
|
|
309
|
+
end
|
|
310
|
+
wallet = {
|
|
311
|
+
'username' => username,
|
|
312
|
+
'login_date' => login_date.to_i,
|
|
313
|
+
'expire_date' => expire_date ? expire_date.to_i : nil,
|
|
314
|
+
'access_token' => json_response['access_token'],
|
|
315
|
+
'refresh_token' => json_response['refresh_token'],
|
|
316
|
+
'token_type' => json_response['token_type']
|
|
317
|
+
}
|
|
318
|
+
|
|
319
|
+
rescue ::RestClient::Exception => e
|
|
320
|
+
#raise e
|
|
321
|
+
if (e.response && e.response.code == 400)
|
|
322
|
+
json_response = JSON.parse(e.response.to_s)
|
|
323
|
+
error_msg = json_response['error_description'] || "Refresh token not valid."
|
|
324
|
+
print_red_alert error_msg
|
|
325
|
+
if options[:json]
|
|
326
|
+
json_response = JSON.parse(e.response.to_s)
|
|
327
|
+
print JSON.pretty_generate(json_response)
|
|
328
|
+
print reset, "\n"
|
|
329
|
+
end
|
|
330
|
+
else
|
|
331
|
+
print_rest_exception(e, options)
|
|
332
|
+
end
|
|
333
|
+
wallet = nil
|
|
334
|
+
# return now or else it will log them out
|
|
335
|
+
return nil
|
|
336
|
+
end
|
|
337
|
+
|
|
338
|
+
# save wallet to credentials file
|
|
339
|
+
save_credentials(@appliance_name, wallet)
|
|
340
|
+
|
|
341
|
+
begin
|
|
342
|
+
# save pertinent session info to the appliance
|
|
343
|
+
now = Time.now.to_i
|
|
344
|
+
appliance = ::MtnCloud::Cli::Remote.load_remote(@appliance_name)
|
|
345
|
+
if appliance
|
|
346
|
+
if wallet && wallet['access_token']
|
|
347
|
+
appliance = ::MtnCloud::Cli::Remote.load_remote(@appliance_name)
|
|
348
|
+
appliance[:authenticated] = true
|
|
349
|
+
appliance[:username] = username
|
|
350
|
+
appliance[:status] = "ready"
|
|
351
|
+
appliance[:last_login_at] = now
|
|
352
|
+
appliance[:last_success_at] = now
|
|
353
|
+
::MtnCloud::Cli::Remote.save_remote(@appliance_name, appliance)
|
|
354
|
+
else
|
|
355
|
+
now = Time.now.to_i
|
|
356
|
+
appliance = ::MtnCloud::Cli::Remote.load_remote(@appliance_name)
|
|
357
|
+
appliance[:authenticated] = false
|
|
358
|
+
#appliance[:username] = username
|
|
359
|
+
#appliance[:last_login_at] = now
|
|
360
|
+
#appliance[:error] = "Credentials not verified"
|
|
361
|
+
::MtnCloud::Cli::Remote.save_remote(@appliance_name, appliance)
|
|
362
|
+
end
|
|
363
|
+
end
|
|
364
|
+
rescue => e
|
|
365
|
+
MtnCloud::Logging::DarkPrinter.puts "failed to update remote appliance config: (#{e.class}) #{e.message}"
|
|
366
|
+
end
|
|
367
|
+
|
|
368
|
+
|
|
369
|
+
return wallet
|
|
370
|
+
end
|
|
371
|
+
|
|
372
|
+
def clear_saved_credentials(appliance_name)
|
|
373
|
+
@@appliance_credentials_map = load_credentials_file || {}
|
|
374
|
+
@@appliance_credentials_map.delete(appliance_name.to_s)
|
|
375
|
+
@@appliance_credentials_map.delete(appliance_name.to_sym)
|
|
376
|
+
#MtnCloud::Logging::DarkPrinter.puts "clearing credentials for #{appliance_name} from file #{credentials_file_path}" if MtnCloud::Logging.debug?
|
|
377
|
+
File.open(credentials_file_path, 'w') {|f| f.write @@appliance_credentials_map.to_yaml } #Store
|
|
378
|
+
::MtnCloud::Cli::Remote.recalculate_variable_map()
|
|
379
|
+
true
|
|
380
|
+
end
|
|
381
|
+
|
|
382
|
+
def load_saved_credentials(reload=false)
|
|
383
|
+
if reload || !defined?(@@appliance_credentials_map) || @@appliance_credentials_map.nil?
|
|
384
|
+
@@appliance_credentials_map = load_credentials_file || {}
|
|
385
|
+
end
|
|
386
|
+
# ok, we switched symbols to strings, because symbols suck in yaml! need to support both
|
|
387
|
+
# also we switched from just a token (symbol) to a whole object of strings
|
|
388
|
+
wallet = @@appliance_credentials_map[@appliance_name.to_s] || @@appliance_credentials_map[@appliance_name.to_sym]
|
|
389
|
+
if wallet.is_a?(String)
|
|
390
|
+
wallet = {'access_token' => wallet}
|
|
391
|
+
end
|
|
392
|
+
return wallet
|
|
393
|
+
end
|
|
394
|
+
|
|
395
|
+
def load_credentials_file
|
|
396
|
+
fn = credentials_file_path
|
|
397
|
+
if File.exist? fn
|
|
398
|
+
#MtnCloud::Logging::DarkPrinter.puts "loading credentials file #{fn}" if MtnCloud::Logging.debug?
|
|
399
|
+
return YAML.load_file(fn)
|
|
400
|
+
else
|
|
401
|
+
return nil
|
|
402
|
+
end
|
|
403
|
+
end
|
|
404
|
+
|
|
405
|
+
def credentials_file_path
|
|
406
|
+
File.join(MtnCloud::Cli.home_directory, "credentials")
|
|
407
|
+
end
|
|
408
|
+
|
|
409
|
+
# credentials wallet is {'access_token': '...', 'refresh_token': '...' 'expiration': '2019-01-01...'}
|
|
410
|
+
def save_credentials(appliance_name, wallet)
|
|
411
|
+
# reloading file is better for now, otherwise you can lose credentials with multiple shells.
|
|
412
|
+
credential_map = load_credentials_file || {}
|
|
413
|
+
|
|
414
|
+
if wallet
|
|
415
|
+
credential_map[appliance_name.to_s] = wallet
|
|
416
|
+
else
|
|
417
|
+
# nil mean remove the damn thing
|
|
418
|
+
credential_map.delete(appliance_name.to_s)
|
|
419
|
+
end
|
|
420
|
+
# always remove symbol, which was used pre 3.6.9
|
|
421
|
+
credential_map.delete(appliance_name.to_sym)
|
|
422
|
+
begin
|
|
423
|
+
fn = credentials_file_path
|
|
424
|
+
if !Dir.exist?(File.dirname(fn))
|
|
425
|
+
FileUtils.mkdir_p(File.dirname(fn))
|
|
426
|
+
end
|
|
427
|
+
#MtnCloud::Logging::DarkPrinter.puts "adding credentials for #{appliance_name} to #{fn}" if MtnCloud::Logging.debug?
|
|
428
|
+
File.open(fn, 'w') {|f| f.write credential_map.to_yaml } #Store
|
|
429
|
+
FileUtils.chmod(0600, fn)
|
|
430
|
+
@@appliance_credentials_map = credential_map
|
|
431
|
+
rescue => e
|
|
432
|
+
puts "failed to save #{fn}. #{e}" if MtnCloud::Logging.debug?
|
|
433
|
+
ensure
|
|
434
|
+
# recalcuate echo vars
|
|
435
|
+
#puts "Recalculating variable maps for username change"
|
|
436
|
+
MtnCloud::Cli::Echo.recalculate_variable_map()
|
|
437
|
+
# recalculate shell prompt after this change
|
|
438
|
+
if MtnCloud::Cli::Shell.has_instance?
|
|
439
|
+
MtnCloud::Cli::Shell.instance.reinitialize()
|
|
440
|
+
end
|
|
441
|
+
end
|
|
442
|
+
end
|
|
443
|
+
|
|
444
|
+
def rename_credentials(appliance_name, new_appliance_name)
|
|
445
|
+
# reloading file is better for now, otherwise you can lose credentials with multiple shells.
|
|
446
|
+
credential_map = load_credentials_file || {}
|
|
447
|
+
|
|
448
|
+
if new_appliance_name.to_s.empty?
|
|
449
|
+
puts "Cannot rename credentials without specifying a new name"
|
|
450
|
+
return nil
|
|
451
|
+
elsif credential_map[new_appliance_name.to_s] || credential_map[new_appliance_name.to_sym]
|
|
452
|
+
# yes you can, maybe require --force?
|
|
453
|
+
puts "Cannot rename credentials to a name that already exists: #{new_appliance_name}"
|
|
454
|
+
return nil
|
|
455
|
+
end
|
|
456
|
+
|
|
457
|
+
# always remove symbol, which was used pre 3.6.9
|
|
458
|
+
credential_map.delete(appliance_name.to_sym)
|
|
459
|
+
begin
|
|
460
|
+
fn = credentials_file_path
|
|
461
|
+
if !Dir.exist?(File.dirname(fn))
|
|
462
|
+
FileUtils.mkdir_p(File.dirname(fn))
|
|
463
|
+
end
|
|
464
|
+
#MtnCloud::Logging::DarkPrinter.puts "renaming credentials from #{appliance_name} to #{new_appliance_name}" if MtnCloud::Logging.debug?
|
|
465
|
+
File.open(fn, 'w') {|f| f.write credential_map.to_yaml } #Store
|
|
466
|
+
FileUtils.chmod(0600, fn)
|
|
467
|
+
@@appliance_credentials_map = credential_map
|
|
468
|
+
rescue => e
|
|
469
|
+
puts "failed to save #{fn}. #{e}" if MtnCloud::Logging.debug?
|
|
470
|
+
ensure
|
|
471
|
+
# recalcuate echo vars
|
|
472
|
+
#puts "Recalculating variable maps for username change"
|
|
473
|
+
MtnCloud::Cli::Echo.recalculate_variable_map()
|
|
474
|
+
# recalculate shell prompt after this change
|
|
475
|
+
if MtnCloud::Cli::Shell.has_instance?
|
|
476
|
+
MtnCloud::Cli::Shell.instance.reinitialize()
|
|
477
|
+
end
|
|
478
|
+
end
|
|
479
|
+
end
|
|
480
|
+
end
|
|
481
|
+
end
|
|
482
|
+
end
|
|
@@ -0,0 +1,180 @@
|
|
|
1
|
+
require 'fileutils'
|
|
2
|
+
require 'time'
|
|
3
|
+
require 'mtncloud/cli/cli_registry'
|
|
4
|
+
require 'mtncloud/logging'
|
|
5
|
+
require 'term/ansicolor'
|
|
6
|
+
|
|
7
|
+
class MtnCloud::Cli::DotFile
|
|
8
|
+
include Term::ANSIColor
|
|
9
|
+
|
|
10
|
+
EXPORTED_ALIASES_HEADER = "# exported aliases"
|
|
11
|
+
|
|
12
|
+
# the path of the profile source file
|
|
13
|
+
# this is executed when `mtncloud` is run
|
|
14
|
+
def self.mtncloud_profile_filename
|
|
15
|
+
File.join(MtnCloud::Cli.home_directory, ".mtncloud_profile")
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
# the path of the shell source file
|
|
19
|
+
# this is executed when `mtncloud shell` is run
|
|
20
|
+
def self.mtncloudrc_filename
|
|
21
|
+
File.join(MtnCloud::Cli.home_directory, ".mtncloudrc")
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
attr_reader :filename
|
|
25
|
+
# attr_reader :file_contents
|
|
26
|
+
# attr_reader :commands
|
|
27
|
+
# attr_reader :cmd_results
|
|
28
|
+
|
|
29
|
+
def initialize(fn)
|
|
30
|
+
@filename = fn
|
|
31
|
+
#load_file()
|
|
32
|
+
end
|
|
33
|
+
|
|
34
|
+
# execute this file as a mtncloud shell script
|
|
35
|
+
# executes each line in the file as a mtncloud expression, ignores empty lines and comments '#'
|
|
36
|
+
# @return [Array] exit codes of all the commands that were run.
|
|
37
|
+
def execute()
|
|
38
|
+
if !File.exist?(@filename)
|
|
39
|
+
print "#{Term::ANSIColor.red}source file not found: #{@filename}#{Term::ANSIColor.reset}\n" # if MtnCloud::Logging.debug?
|
|
40
|
+
else
|
|
41
|
+
MtnCloud::Logging::DarkPrinter.puts "executing source file #{@filename}" if MtnCloud::Logging.debug?
|
|
42
|
+
end
|
|
43
|
+
file_contents = File.read(@filename)
|
|
44
|
+
lines = file_contents.split("\n")
|
|
45
|
+
cmd_results = []
|
|
46
|
+
line_num = 0
|
|
47
|
+
lines.each_with_index do |line, line_index|
|
|
48
|
+
line_num = line_index + 1
|
|
49
|
+
line = line.strip
|
|
50
|
+
next if line.empty?
|
|
51
|
+
next if line =~ /^\#/ # skip comments
|
|
52
|
+
|
|
53
|
+
cmd_exit_code = 0
|
|
54
|
+
cmd_err = nil
|
|
55
|
+
cmd_result = nil
|
|
56
|
+
begin
|
|
57
|
+
cmd_result = MtnCloud::Cli::CliRegistry.exec_expression(line)
|
|
58
|
+
rescue SystemExit => err
|
|
59
|
+
if err.success?
|
|
60
|
+
cmd_result = true
|
|
61
|
+
else
|
|
62
|
+
puts "#{red} source file: #{@filename}, line: #{line_num}, command: #{line}, error: #{err}#{reset}"
|
|
63
|
+
cmd_result = false
|
|
64
|
+
end
|
|
65
|
+
rescue => err
|
|
66
|
+
# raise err
|
|
67
|
+
puts "#{red} source file: #{@filename}, line: #{line_num}, command: #{line}, error: #{err}#{reset}"
|
|
68
|
+
cmd_result = false
|
|
69
|
+
end
|
|
70
|
+
cmd_results << cmd_result
|
|
71
|
+
end
|
|
72
|
+
return cmd_results
|
|
73
|
+
end
|
|
74
|
+
|
|
75
|
+
# this saves the source file, upserting alias definitions at the bottom
|
|
76
|
+
# todo: smarter logic to allow the user to put stuff AFTER this section too
|
|
77
|
+
# under the section titled '# exported aliases'
|
|
78
|
+
# @param alias_definitions [Map] Map of alias_name => command_string
|
|
79
|
+
# @return nil
|
|
80
|
+
def export_aliases(alias_definitions)
|
|
81
|
+
if !@filename
|
|
82
|
+
print "#{Term::ANSIColor.dark}Skipping source file save because filename has not been set#{Term::ANSIColor.reset}\n" if MtnCloud::Logging.debug?
|
|
83
|
+
return false
|
|
84
|
+
end
|
|
85
|
+
if !Dir.exist?(File.dirname(@filename))
|
|
86
|
+
FileUtils.mkdir_p(File.dirname(@filename))
|
|
87
|
+
end
|
|
88
|
+
if !File.exist?(@filename)
|
|
89
|
+
print "#{Term::ANSIColor.dark}Initializing source file #{@filename}#{Term::ANSIColor.reset}\n" if MtnCloud::Logging.debug?
|
|
90
|
+
FileUtils.touch(@filename)
|
|
91
|
+
else
|
|
92
|
+
print "#{dark} #=> Saving source file #{@filename}#{reset}\n" if MtnCloud::Logging.debug?
|
|
93
|
+
end
|
|
94
|
+
|
|
95
|
+
|
|
96
|
+
config_text = File.read(@filename)
|
|
97
|
+
config_lines = config_text.split(/\n/)
|
|
98
|
+
new_config_lines = []
|
|
99
|
+
existing_alias_definitions = {}
|
|
100
|
+
header_line_index = config_lines.index {|line| line.strip.include?(EXPORTED_ALIASES_HEADER) }
|
|
101
|
+
# JD: there's some bad bug here where it can clear all your aliases!
|
|
102
|
+
# it would be safer to export to another file at .mtncloud/aliases or something.
|
|
103
|
+
if header_line_index
|
|
104
|
+
# keep everything before the exported alias section
|
|
105
|
+
new_config_lines = config_lines[0..header_line_index-1]
|
|
106
|
+
existing_alias_lines = config_lines[header_line_index..config_lines.size-1]
|
|
107
|
+
# parse out the existing alias definitions
|
|
108
|
+
existing_alias_lines.each do |line|
|
|
109
|
+
if line =~ /^alias\s+/
|
|
110
|
+
alias_name, command_string = MtnCloud::Cli::CliRegistry.parse_alias_definition(line)
|
|
111
|
+
if alias_name.empty? || command_string.empty?
|
|
112
|
+
print "#{dark} #=> removing bad config line #{line_num} invalid alias definition: #{line}\n" if MtnCloud::Logging.debug?
|
|
113
|
+
else
|
|
114
|
+
existing_alias_definitions[alias_name] = command_string
|
|
115
|
+
end
|
|
116
|
+
end
|
|
117
|
+
end
|
|
118
|
+
else
|
|
119
|
+
new_config_lines = config_lines
|
|
120
|
+
new_config_lines << "" # blank line before alias header
|
|
121
|
+
end
|
|
122
|
+
|
|
123
|
+
# append header line
|
|
124
|
+
new_config_lines << EXPORTED_ALIASES_HEADER
|
|
125
|
+
new_config_lines << "# Do not put anything below here, or it will be lost when aliases are exported"
|
|
126
|
+
#new_config_lines << ""
|
|
127
|
+
|
|
128
|
+
# update aliases, sort them, and append the lines
|
|
129
|
+
new_alias_definitions = existing_alias_definitions.merge(alias_definitions)
|
|
130
|
+
new_alias_definitions.keys.sort.each do |alias_name|
|
|
131
|
+
new_config_lines << "alias #{alias_name}='#{new_alias_definitions[alias_name]}'"
|
|
132
|
+
end
|
|
133
|
+
|
|
134
|
+
# include a blank line after this section
|
|
135
|
+
new_config_lines << ""
|
|
136
|
+
new_config_lines << ""
|
|
137
|
+
|
|
138
|
+
new_config_text = new_config_lines.join("\n")
|
|
139
|
+
|
|
140
|
+
File.open(@filename, 'w') {|f| f.write(new_config_text) }
|
|
141
|
+
return true
|
|
142
|
+
end
|
|
143
|
+
|
|
144
|
+
# this saves the source file, removing alias definitions at the bottom
|
|
145
|
+
# todo: smarter logic to allow the user to put stuff AFTER this section too
|
|
146
|
+
# under the section titled '# exported aliases'
|
|
147
|
+
# @param alias_definitions [Map] Map of alias_name => command_string
|
|
148
|
+
# @return nil
|
|
149
|
+
def remove_aliases(alias_names)
|
|
150
|
+
if !@filename
|
|
151
|
+
print "#{Term::ANSIColor.dark}Skipping source file save because filename has not been set#{Term::ANSIColor.reset}\n" if MtnCloud::Logging.debug?
|
|
152
|
+
return false
|
|
153
|
+
end
|
|
154
|
+
if !Dir.exist?(File.dirname(@filename))
|
|
155
|
+
FileUtils.mkdir_p(File.dirname(@filename))
|
|
156
|
+
end
|
|
157
|
+
if !File.exist?(@filename)
|
|
158
|
+
print "#{Term::ANSIColor.dark}Initializing source file #{@filename}#{Term::ANSIColor.reset}\n" if MtnCloud::Logging.debug?
|
|
159
|
+
FileUtils.touch(@filename)
|
|
160
|
+
else
|
|
161
|
+
print "#{dark} #=> Saving source file #{@filename}#{reset}\n" if MtnCloud::Logging.debug?
|
|
162
|
+
end
|
|
163
|
+
|
|
164
|
+
|
|
165
|
+
config_text = File.read(@filename)
|
|
166
|
+
config_lines = config_text.split(/\n/)
|
|
167
|
+
|
|
168
|
+
new_config_lines = config_lines.reject {|line|
|
|
169
|
+
alias_names.find {|alias_name| /^alias\s+#{Regexp.escape(alias_name)}\s?\=/ }
|
|
170
|
+
}
|
|
171
|
+
|
|
172
|
+
new_config_text = new_config_lines.join("\n")
|
|
173
|
+
|
|
174
|
+
File.open(@filename, 'w') {|f| f.write(new_config_text) }
|
|
175
|
+
return true
|
|
176
|
+
end
|
|
177
|
+
|
|
178
|
+
|
|
179
|
+
|
|
180
|
+
end
|