gitlab-fog-google 1.13.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/.codecov.yml +2 -0
- data/.editorconfig +11 -0
- data/.fog.example +25 -0
- data/.gitignore +20 -0
- data/.gitlab-ci.yml +13 -0
- data/.hound.yml +2 -0
- data/.rubocop.yml +255 -0
- data/.ruby-gemset +1 -0
- data/.travis.yml +33 -0
- data/CHANGELOG.md +464 -0
- data/CONTRIBUTING.md +175 -0
- data/CONTRIBUTORS.md +95 -0
- data/Gemfile +13 -0
- data/LICENSE.md +20 -0
- data/MIGRATING.md +1 -0
- data/README.md +177 -0
- data/Rakefile +19 -0
- data/SECURITY.md +16 -0
- data/ci/.gitignore +1 -0
- data/ci/README.md +65 -0
- data/ci/build-head-pipeline.yml +173 -0
- data/ci/credentials.yml.template +28 -0
- data/ci/docker-image/Dockerfile +18 -0
- data/ci/integration-pipeline.yml +226 -0
- data/ci/pipeline-dev.yml +58 -0
- data/ci/tasks/run-int.sh +53 -0
- data/ci/tasks/run-int.yml +18 -0
- data/ci/tasks/utils.sh +10 -0
- data/examples/backend_services.rb +23 -0
- data/examples/bootstrap.rb +27 -0
- data/examples/create_instance.rb +73 -0
- data/examples/create_instance_with_attached_disk.rb +53 -0
- data/examples/dns/project.rb +7 -0
- data/examples/dns/zones.rb +43 -0
- data/examples/get_list_images.rb +42 -0
- data/examples/get_list_snapshots.rb +28 -0
- data/examples/image_create.rb +17 -0
- data/examples/l7_load_balance.rb +79 -0
- data/examples/load-balance.rb +116 -0
- data/examples/metadata.rb +40 -0
- data/examples/monitoring/metric_descriptors.rb +24 -0
- data/examples/monitoring/monitored_resource_descriptors.rb +24 -0
- data/examples/monitoring/timeseries_collection.rb +32 -0
- data/examples/network.rb +55 -0
- data/examples/precreated_client.rb +24 -0
- data/examples/pubsub/subscriptions.rb +54 -0
- data/examples/pubsub/topics.rb +33 -0
- data/examples/sql/flags.rb +11 -0
- data/examples/sql/instances.rb +38 -0
- data/examples/sql/operations.rb +24 -0
- data/examples/sql/ssl_certs.rb +32 -0
- data/examples/sql/tiers.rb +11 -0
- data/examples/storage.rb +49 -0
- data/examples/storage_json.rb +37 -0
- data/gitlab-fog-google.gemspec +44 -0
- data/lib/fog/bin/google.rb +97 -0
- data/lib/fog/compute/google.rb +304 -0
- data/lib/fog/compute/google/mock.rb +845 -0
- data/lib/fog/compute/google/models/address.rb +133 -0
- data/lib/fog/compute/google/models/addresses.rb +63 -0
- data/lib/fog/compute/google/models/backend_service.rb +86 -0
- data/lib/fog/compute/google/models/backend_services.rb +24 -0
- data/lib/fog/compute/google/models/disk.rb +155 -0
- data/lib/fog/compute/google/models/disk_type.rb +27 -0
- data/lib/fog/compute/google/models/disk_types.rb +42 -0
- data/lib/fog/compute/google/models/disks.rb +88 -0
- data/lib/fog/compute/google/models/firewall.rb +94 -0
- data/lib/fog/compute/google/models/firewalls.rb +24 -0
- data/lib/fog/compute/google/models/forwarding_rule.rb +79 -0
- data/lib/fog/compute/google/models/forwarding_rules.rb +44 -0
- data/lib/fog/compute/google/models/global_address.rb +58 -0
- data/lib/fog/compute/google/models/global_addresses.rb +46 -0
- data/lib/fog/compute/google/models/global_forwarding_rule.rb +78 -0
- data/lib/fog/compute/google/models/global_forwarding_rules.rb +24 -0
- data/lib/fog/compute/google/models/http_health_check.rb +104 -0
- data/lib/fog/compute/google/models/http_health_checks.rb +24 -0
- data/lib/fog/compute/google/models/image.rb +81 -0
- data/lib/fog/compute/google/models/images.rb +109 -0
- data/lib/fog/compute/google/models/instance_group.rb +90 -0
- data/lib/fog/compute/google/models/instance_group_manager.rb +51 -0
- data/lib/fog/compute/google/models/instance_group_managers.rb +45 -0
- data/lib/fog/compute/google/models/instance_groups.rb +63 -0
- data/lib/fog/compute/google/models/instance_template.rb +47 -0
- data/lib/fog/compute/google/models/instance_templates.rb +24 -0
- data/lib/fog/compute/google/models/machine_type.rb +23 -0
- data/lib/fog/compute/google/models/machine_types.rb +46 -0
- data/lib/fog/compute/google/models/network.rb +60 -0
- data/lib/fog/compute/google/models/networks.rb +24 -0
- data/lib/fog/compute/google/models/operation.rb +73 -0
- data/lib/fog/compute/google/models/operations.rb +45 -0
- data/lib/fog/compute/google/models/project.rb +28 -0
- data/lib/fog/compute/google/models/projects.rb +19 -0
- data/lib/fog/compute/google/models/region.rb +30 -0
- data/lib/fog/compute/google/models/regions.rb +24 -0
- data/lib/fog/compute/google/models/route.rb +49 -0
- data/lib/fog/compute/google/models/routes.rb +24 -0
- data/lib/fog/compute/google/models/server.rb +604 -0
- data/lib/fog/compute/google/models/servers.rb +120 -0
- data/lib/fog/compute/google/models/snapshot.rb +62 -0
- data/lib/fog/compute/google/models/snapshots.rb +32 -0
- data/lib/fog/compute/google/models/ssl_certificate.rb +42 -0
- data/lib/fog/compute/google/models/ssl_certificates.rb +24 -0
- data/lib/fog/compute/google/models/subnetwork.rb +83 -0
- data/lib/fog/compute/google/models/subnetworks.rb +43 -0
- data/lib/fog/compute/google/models/target_http_proxies.rb +24 -0
- data/lib/fog/compute/google/models/target_http_proxy.rb +73 -0
- data/lib/fog/compute/google/models/target_https_proxies.rb +24 -0
- data/lib/fog/compute/google/models/target_https_proxy.rb +105 -0
- data/lib/fog/compute/google/models/target_instance.rb +67 -0
- data/lib/fog/compute/google/models/target_instances.rb +46 -0
- data/lib/fog/compute/google/models/target_pool.rb +171 -0
- data/lib/fog/compute/google/models/target_pools.rb +43 -0
- data/lib/fog/compute/google/models/url_map.rb +121 -0
- data/lib/fog/compute/google/models/url_maps.rb +24 -0
- data/lib/fog/compute/google/models/zone.rb +25 -0
- data/lib/fog/compute/google/models/zones.rb +24 -0
- data/lib/fog/compute/google/real.rb +24 -0
- data/lib/fog/compute/google/requests/abandon_instances.rb +28 -0
- data/lib/fog/compute/google/requests/add_backend_service_backends.rb +19 -0
- data/lib/fog/compute/google/requests/add_instance_group_instances.rb +37 -0
- data/lib/fog/compute/google/requests/add_server_access_config.rb +32 -0
- data/lib/fog/compute/google/requests/add_target_pool_health_checks.rb +32 -0
- data/lib/fog/compute/google/requests/add_target_pool_instances.rb +30 -0
- data/lib/fog/compute/google/requests/attach_disk.rb +22 -0
- data/lib/fog/compute/google/requests/create_disk_snapshot.rb +24 -0
- data/lib/fog/compute/google/requests/delete_address.rb +24 -0
- data/lib/fog/compute/google/requests/delete_backend_service.rb +19 -0
- data/lib/fog/compute/google/requests/delete_disk.rb +25 -0
- data/lib/fog/compute/google/requests/delete_firewall.rb +19 -0
- data/lib/fog/compute/google/requests/delete_forwarding_rule.rb +20 -0
- data/lib/fog/compute/google/requests/delete_global_address.rb +19 -0
- data/lib/fog/compute/google/requests/delete_global_forwarding_rule.rb +19 -0
- data/lib/fog/compute/google/requests/delete_global_operation.rb +20 -0
- data/lib/fog/compute/google/requests/delete_http_health_check.rb +19 -0
- data/lib/fog/compute/google/requests/delete_image.rb +19 -0
- data/lib/fog/compute/google/requests/delete_instance_group.rb +19 -0
- data/lib/fog/compute/google/requests/delete_instance_group_manager.rb +19 -0
- data/lib/fog/compute/google/requests/delete_instance_template.rb +19 -0
- data/lib/fog/compute/google/requests/delete_network.rb +19 -0
- data/lib/fog/compute/google/requests/delete_region_operation.rb +22 -0
- data/lib/fog/compute/google/requests/delete_route.rb +23 -0
- data/lib/fog/compute/google/requests/delete_server.rb +19 -0
- data/lib/fog/compute/google/requests/delete_server_access_config.rb +22 -0
- data/lib/fog/compute/google/requests/delete_snapshot.rb +19 -0
- data/lib/fog/compute/google/requests/delete_ssl_certificate.rb +19 -0
- data/lib/fog/compute/google/requests/delete_subnetwork.rb +31 -0
- data/lib/fog/compute/google/requests/delete_target_http_proxy.rb +19 -0
- data/lib/fog/compute/google/requests/delete_target_https_proxy.rb +19 -0
- data/lib/fog/compute/google/requests/delete_target_instance.rb +20 -0
- data/lib/fog/compute/google/requests/delete_target_pool.rb +20 -0
- data/lib/fog/compute/google/requests/delete_url_map.rb +19 -0
- data/lib/fog/compute/google/requests/delete_zone_operation.rb +22 -0
- data/lib/fog/compute/google/requests/deprecate_image.rb +22 -0
- data/lib/fog/compute/google/requests/detach_disk.rb +20 -0
- data/lib/fog/compute/google/requests/expand_subnetwork_ip_cidr_range.rb +38 -0
- data/lib/fog/compute/google/requests/get_address.rb +24 -0
- data/lib/fog/compute/google/requests/get_backend_service.rb +19 -0
- data/lib/fog/compute/google/requests/get_backend_service_health.rb +24 -0
- data/lib/fog/compute/google/requests/get_disk.rb +24 -0
- data/lib/fog/compute/google/requests/get_disk_type.rb +19 -0
- data/lib/fog/compute/google/requests/get_firewall.rb +19 -0
- data/lib/fog/compute/google/requests/get_forwarding_rule.rb +22 -0
- data/lib/fog/compute/google/requests/get_global_address.rb +19 -0
- data/lib/fog/compute/google/requests/get_global_forwarding_rule.rb +19 -0
- data/lib/fog/compute/google/requests/get_global_operation.rb +23 -0
- data/lib/fog/compute/google/requests/get_http_health_check.rb +19 -0
- data/lib/fog/compute/google/requests/get_image.rb +20 -0
- data/lib/fog/compute/google/requests/get_image_from_family.rb +26 -0
- data/lib/fog/compute/google/requests/get_instance_group.rb +19 -0
- data/lib/fog/compute/google/requests/get_instance_group_manager.rb +19 -0
- data/lib/fog/compute/google/requests/get_instance_template.rb +19 -0
- data/lib/fog/compute/google/requests/get_machine_type.rb +20 -0
- data/lib/fog/compute/google/requests/get_network.rb +19 -0
- data/lib/fog/compute/google/requests/get_project.rb +19 -0
- data/lib/fog/compute/google/requests/get_region.rb +19 -0
- data/lib/fog/compute/google/requests/get_region_operation.rb +20 -0
- data/lib/fog/compute/google/requests/get_route.rb +22 -0
- data/lib/fog/compute/google/requests/get_server.rb +19 -0
- data/lib/fog/compute/google/requests/get_server_serial_port_output.rb +38 -0
- data/lib/fog/compute/google/requests/get_snapshot.rb +20 -0
- data/lib/fog/compute/google/requests/get_ssl_certificate.rb +19 -0
- data/lib/fog/compute/google/requests/get_subnetwork.rb +29 -0
- data/lib/fog/compute/google/requests/get_target_http_proxy.rb +19 -0
- data/lib/fog/compute/google/requests/get_target_https_proxy.rb +19 -0
- data/lib/fog/compute/google/requests/get_target_instance.rb +20 -0
- data/lib/fog/compute/google/requests/get_target_pool.rb +20 -0
- data/lib/fog/compute/google/requests/get_target_pool_health.rb +24 -0
- data/lib/fog/compute/google/requests/get_url_map.rb +19 -0
- data/lib/fog/compute/google/requests/get_zone.rb +19 -0
- data/lib/fog/compute/google/requests/get_zone_operation.rb +25 -0
- data/lib/fog/compute/google/requests/insert_address.rb +30 -0
- data/lib/fog/compute/google/requests/insert_backend_service.rb +23 -0
- data/lib/fog/compute/google/requests/insert_disk.rb +48 -0
- data/lib/fog/compute/google/requests/insert_firewall.rb +65 -0
- data/lib/fog/compute/google/requests/insert_forwarding_rule.rb +29 -0
- data/lib/fog/compute/google/requests/insert_global_address.rb +25 -0
- data/lib/fog/compute/google/requests/insert_global_forwarding_rule.rb +26 -0
- data/lib/fog/compute/google/requests/insert_http_health_check.rb +24 -0
- data/lib/fog/compute/google/requests/insert_image.rb +23 -0
- data/lib/fog/compute/google/requests/insert_instance_group.rb +37 -0
- data/lib/fog/compute/google/requests/insert_instance_group_manager.rb +31 -0
- data/lib/fog/compute/google/requests/insert_instance_template.rb +38 -0
- data/lib/fog/compute/google/requests/insert_network.rb +34 -0
- data/lib/fog/compute/google/requests/insert_route.rb +35 -0
- data/lib/fog/compute/google/requests/insert_server.rb +122 -0
- data/lib/fog/compute/google/requests/insert_ssl_certificate.rb +27 -0
- data/lib/fog/compute/google/requests/insert_subnetwork.rb +61 -0
- data/lib/fog/compute/google/requests/insert_target_http_proxy.rb +26 -0
- data/lib/fog/compute/google/requests/insert_target_https_proxy.rb +29 -0
- data/lib/fog/compute/google/requests/insert_target_instance.rb +25 -0
- data/lib/fog/compute/google/requests/insert_target_pool.rb +22 -0
- data/lib/fog/compute/google/requests/insert_url_map.rb +37 -0
- data/lib/fog/compute/google/requests/invalidate_url_map_cache.rb +24 -0
- data/lib/fog/compute/google/requests/list_addresses.rb +28 -0
- data/lib/fog/compute/google/requests/list_aggregated_addresses.rb +23 -0
- data/lib/fog/compute/google/requests/list_aggregated_disk_types.rb +24 -0
- data/lib/fog/compute/google/requests/list_aggregated_disks.rb +32 -0
- data/lib/fog/compute/google/requests/list_aggregated_forwarding_rules.rb +24 -0
- data/lib/fog/compute/google/requests/list_aggregated_instance_group_managers.rb +26 -0
- data/lib/fog/compute/google/requests/list_aggregated_instance_groups.rb +19 -0
- data/lib/fog/compute/google/requests/list_aggregated_machine_types.rb +24 -0
- data/lib/fog/compute/google/requests/list_aggregated_servers.rb +24 -0
- data/lib/fog/compute/google/requests/list_aggregated_subnetworks.rb +36 -0
- data/lib/fog/compute/google/requests/list_aggregated_target_instances.rb +26 -0
- data/lib/fog/compute/google/requests/list_aggregated_target_pools.rb +26 -0
- data/lib/fog/compute/google/requests/list_backend_services.rb +22 -0
- data/lib/fog/compute/google/requests/list_disk_types.rb +24 -0
- data/lib/fog/compute/google/requests/list_disks.rb +28 -0
- data/lib/fog/compute/google/requests/list_firewalls.rb +24 -0
- data/lib/fog/compute/google/requests/list_forwarding_rules.rb +25 -0
- data/lib/fog/compute/google/requests/list_global_addresses.rb +26 -0
- data/lib/fog/compute/google/requests/list_global_forwarding_rules.rb +24 -0
- data/lib/fog/compute/google/requests/list_global_operations.rb +27 -0
- data/lib/fog/compute/google/requests/list_http_health_checks.rb +24 -0
- data/lib/fog/compute/google/requests/list_images.rb +25 -0
- data/lib/fog/compute/google/requests/list_instance_group_instances.rb +21 -0
- data/lib/fog/compute/google/requests/list_instance_group_managers.rb +22 -0
- data/lib/fog/compute/google/requests/list_instance_groups.rb +19 -0
- data/lib/fog/compute/google/requests/list_instance_templates.rb +26 -0
- data/lib/fog/compute/google/requests/list_machine_types.rb +25 -0
- data/lib/fog/compute/google/requests/list_networks.rb +24 -0
- data/lib/fog/compute/google/requests/list_region_operations.rb +29 -0
- data/lib/fog/compute/google/requests/list_regions.rb +23 -0
- data/lib/fog/compute/google/requests/list_routes.rb +28 -0
- data/lib/fog/compute/google/requests/list_servers.rb +24 -0
- data/lib/fog/compute/google/requests/list_snapshots.rb +22 -0
- data/lib/fog/compute/google/requests/list_ssl_certificates.rb +26 -0
- data/lib/fog/compute/google/requests/list_subnetworks.rb +39 -0
- data/lib/fog/compute/google/requests/list_target_http_proxies.rb +25 -0
- data/lib/fog/compute/google/requests/list_target_https_proxies.rb +24 -0
- data/lib/fog/compute/google/requests/list_target_instances.rb +27 -0
- data/lib/fog/compute/google/requests/list_target_pools.rb +26 -0
- data/lib/fog/compute/google/requests/list_url_maps.rb +25 -0
- data/lib/fog/compute/google/requests/list_zone_operations.rb +28 -0
- data/lib/fog/compute/google/requests/list_zones.rb +26 -0
- data/lib/fog/compute/google/requests/patch_firewall.rb +27 -0
- data/lib/fog/compute/google/requests/patch_url_map.rb +21 -0
- data/lib/fog/compute/google/requests/recreate_instances.rb +28 -0
- data/lib/fog/compute/google/requests/remove_instance_group_instances.rb +37 -0
- data/lib/fog/compute/google/requests/remove_target_pool_health_checks.rb +30 -0
- data/lib/fog/compute/google/requests/remove_target_pool_instance.rb +30 -0
- data/lib/fog/compute/google/requests/remove_target_pool_instances.rb +30 -0
- data/lib/fog/compute/google/requests/reset_server.rb +19 -0
- data/lib/fog/compute/google/requests/reset_windows_password.rb +154 -0
- data/lib/fog/compute/google/requests/set_common_instance_metadata.rb +23 -0
- data/lib/fog/compute/google/requests/set_forwarding_rule_target.rb +23 -0
- data/lib/fog/compute/google/requests/set_global_forwarding_rule_target.rb +22 -0
- data/lib/fog/compute/google/requests/set_instance_template.rb +28 -0
- data/lib/fog/compute/google/requests/set_server_disk_auto_delete.rb +26 -0
- data/lib/fog/compute/google/requests/set_server_machine_type.rb +23 -0
- data/lib/fog/compute/google/requests/set_server_metadata.rb +39 -0
- data/lib/fog/compute/google/requests/set_server_scheduling.rb +24 -0
- data/lib/fog/compute/google/requests/set_server_tags.rb +25 -0
- data/lib/fog/compute/google/requests/set_snapshot_labels.rb +25 -0
- data/lib/fog/compute/google/requests/set_subnetwork_private_ip_google_access.rb +42 -0
- data/lib/fog/compute/google/requests/set_target_http_proxy_url_map.rb +24 -0
- data/lib/fog/compute/google/requests/set_target_https_proxy_ssl_certificates.rb +24 -0
- data/lib/fog/compute/google/requests/set_target_https_proxy_url_map.rb +24 -0
- data/lib/fog/compute/google/requests/set_target_pool_backup.rb +31 -0
- data/lib/fog/compute/google/requests/start_server.rb +19 -0
- data/lib/fog/compute/google/requests/stop_server.rb +19 -0
- data/lib/fog/compute/google/requests/update_firewall.rb +49 -0
- data/lib/fog/compute/google/requests/update_http_health_check.rb +25 -0
- data/lib/fog/compute/google/requests/update_url_map.rb +28 -0
- data/lib/fog/compute/google/requests/validate_url_map.rb +24 -0
- data/lib/fog/dns/google.rb +67 -0
- data/lib/fog/dns/google/mock.rb +33 -0
- data/lib/fog/dns/google/models/change.rb +38 -0
- data/lib/fog/dns/google/models/changes.rb +50 -0
- data/lib/fog/dns/google/models/project.rb +73 -0
- data/lib/fog/dns/google/models/projects.rb +23 -0
- data/lib/fog/dns/google/models/record.rb +108 -0
- data/lib/fog/dns/google/models/records.rb +53 -0
- data/lib/fog/dns/google/models/zone.rb +72 -0
- data/lib/fog/dns/google/models/zones.rb +32 -0
- data/lib/fog/dns/google/real.rb +19 -0
- data/lib/fog/dns/google/requests/create_change.rb +29 -0
- data/lib/fog/dns/google/requests/create_managed_zone.rb +29 -0
- data/lib/fog/dns/google/requests/delete_managed_zone.rb +23 -0
- data/lib/fog/dns/google/requests/get_change.rb +23 -0
- data/lib/fog/dns/google/requests/get_managed_zone.rb +23 -0
- data/lib/fog/dns/google/requests/get_project.rb +24 -0
- data/lib/fog/dns/google/requests/list_changes.rb +30 -0
- data/lib/fog/dns/google/requests/list_managed_zones.rb +26 -0
- data/lib/fog/dns/google/requests/list_resource_record_sets.rb +30 -0
- data/lib/fog/google.rb +53 -0
- data/lib/fog/google/mock.rb +14 -0
- data/lib/fog/google/models/monitoring/metric_descriptor.rb +23 -0
- data/lib/fog/google/models/monitoring/metric_descriptors.rb +43 -0
- data/lib/fog/google/models/monitoring/monitored_resource_descriptor.rb +20 -0
- data/lib/fog/google/models/monitoring/monitored_resource_descriptors.rb +37 -0
- data/lib/fog/google/models/monitoring/timeseries.rb +19 -0
- data/lib/fog/google/models/monitoring/timeseries_collection.rb +48 -0
- data/lib/fog/google/models/pubsub/received_message.rb +40 -0
- data/lib/fog/google/models/pubsub/subscription.rb +86 -0
- data/lib/fog/google/models/pubsub/subscriptions.rb +33 -0
- data/lib/fog/google/models/pubsub/topic.rb +71 -0
- data/lib/fog/google/models/pubsub/topics.rb +32 -0
- data/lib/fog/google/models/sql/backup_run.rb +37 -0
- data/lib/fog/google/models/sql/backup_runs.rb +38 -0
- data/lib/fog/google/models/sql/flag.rb +23 -0
- data/lib/fog/google/models/sql/flags.rb +21 -0
- data/lib/fog/google/models/sql/instance.rb +339 -0
- data/lib/fog/google/models/sql/instances.rb +39 -0
- data/lib/fog/google/models/sql/operation.rb +67 -0
- data/lib/fog/google/models/sql/operations.rb +47 -0
- data/lib/fog/google/models/sql/ssl_cert.rb +77 -0
- data/lib/fog/google/models/sql/ssl_certs.rb +49 -0
- data/lib/fog/google/models/sql/tier.rb +20 -0
- data/lib/fog/google/models/sql/tiers.rb +21 -0
- data/lib/fog/google/models/sql/user.rb +52 -0
- data/lib/fog/google/models/sql/users.rb +21 -0
- data/lib/fog/google/monitoring.rb +60 -0
- data/lib/fog/google/monitoring/mock.rb +35 -0
- data/lib/fog/google/monitoring/real.rb +20 -0
- data/lib/fog/google/pubsub.rb +69 -0
- data/lib/fog/google/pubsub/mock.rb +34 -0
- data/lib/fog/google/pubsub/real.rb +21 -0
- data/lib/fog/google/requests/monitoring/create_metric_descriptor.rb +51 -0
- data/lib/fog/google/requests/monitoring/create_timeseries.rb +29 -0
- data/lib/fog/google/requests/monitoring/delete_metric_descriptor.rb +19 -0
- data/lib/fog/google/requests/monitoring/get_metric_descriptor.rb +19 -0
- data/lib/fog/google/requests/monitoring/get_monitored_resource_descriptor.rb +19 -0
- data/lib/fog/google/requests/monitoring/list_metric_descriptors.rb +26 -0
- data/lib/fog/google/requests/monitoring/list_monitored_resource_descriptors.rb +29 -0
- data/lib/fog/google/requests/monitoring/list_timeseries.rb +55 -0
- data/lib/fog/google/requests/pubsub/acknowledge_subscription.rb +29 -0
- data/lib/fog/google/requests/pubsub/create_subscription.rb +37 -0
- data/lib/fog/google/requests/pubsub/create_topic.rb +23 -0
- data/lib/fog/google/requests/pubsub/delete_subscription.rb +21 -0
- data/lib/fog/google/requests/pubsub/delete_topic.rb +21 -0
- data/lib/fog/google/requests/pubsub/get_subscription.rb +21 -0
- data/lib/fog/google/requests/pubsub/get_topic.rb +21 -0
- data/lib/fog/google/requests/pubsub/list_subscriptions.rb +29 -0
- data/lib/fog/google/requests/pubsub/list_topics.rb +29 -0
- data/lib/fog/google/requests/pubsub/publish_topic.rb +28 -0
- data/lib/fog/google/requests/pubsub/pull_subscription.rb +40 -0
- data/lib/fog/google/requests/sql/clone_instance.rb +42 -0
- data/lib/fog/google/requests/sql/delete_backup_run.rb +23 -0
- data/lib/fog/google/requests/sql/delete_instance.rb +24 -0
- data/lib/fog/google/requests/sql/delete_ssl_cert.rb +24 -0
- data/lib/fog/google/requests/sql/delete_user.rb +24 -0
- data/lib/fog/google/requests/sql/export_instance.rb +55 -0
- data/lib/fog/google/requests/sql/get_backup_run.rb +23 -0
- data/lib/fog/google/requests/sql/get_instance.rb +24 -0
- data/lib/fog/google/requests/sql/get_operation.rb +24 -0
- data/lib/fog/google/requests/sql/get_ssl_cert.rb +24 -0
- data/lib/fog/google/requests/sql/import_instance.rb +44 -0
- data/lib/fog/google/requests/sql/insert_backup_run.rb +28 -0
- data/lib/fog/google/requests/sql/insert_instance.rb +28 -0
- data/lib/fog/google/requests/sql/insert_ssl_cert.rb +30 -0
- data/lib/fog/google/requests/sql/insert_user.rb +25 -0
- data/lib/fog/google/requests/sql/list_backup_runs.rb +27 -0
- data/lib/fog/google/requests/sql/list_flags.rb +24 -0
- data/lib/fog/google/requests/sql/list_instances.rb +27 -0
- data/lib/fog/google/requests/sql/list_operations.rb +28 -0
- data/lib/fog/google/requests/sql/list_ssl_certs.rb +24 -0
- data/lib/fog/google/requests/sql/list_tiers.rb +24 -0
- data/lib/fog/google/requests/sql/list_users.rb +24 -0
- data/lib/fog/google/requests/sql/reset_instance_ssl_config.rb +26 -0
- data/lib/fog/google/requests/sql/restart_instance.rb +24 -0
- data/lib/fog/google/requests/sql/restore_instance_backup.rb +31 -0
- data/lib/fog/google/requests/sql/update_instance.rb +31 -0
- data/lib/fog/google/requests/sql/update_user.rb +27 -0
- data/lib/fog/google/shared.rb +253 -0
- data/lib/fog/google/sql.rb +104 -0
- data/lib/fog/google/sql/mock.rb +40 -0
- data/lib/fog/google/sql/real.rb +21 -0
- data/lib/fog/google/version.rb +5 -0
- data/lib/fog/parsers/storage/google.rb +15 -0
- data/lib/fog/parsers/storage/google/access_control_list.rb +44 -0
- data/lib/fog/parsers/storage/google/copy_object.rb +18 -0
- data/lib/fog/parsers/storage/google/get_bucket.rb +58 -0
- data/lib/fog/parsers/storage/google/get_bucket_logging.rb +36 -0
- data/lib/fog/parsers/storage/google/get_bucket_object_versions.rb +88 -0
- data/lib/fog/parsers/storage/google/get_bucket_versioning.rb +20 -0
- data/lib/fog/parsers/storage/google/get_request_payment.rb +16 -0
- data/lib/fog/parsers/storage/google/get_service.rb +28 -0
- data/lib/fog/storage/google.rb +20 -0
- data/lib/fog/storage/google_json.rb +74 -0
- data/lib/fog/storage/google_json/mock.rb +27 -0
- data/lib/fog/storage/google_json/models/directories.rb +41 -0
- data/lib/fog/storage/google_json/models/directory.rb +61 -0
- data/lib/fog/storage/google_json/models/file.rb +126 -0
- data/lib/fog/storage/google_json/models/files.rb +64 -0
- data/lib/fog/storage/google_json/real.rb +171 -0
- data/lib/fog/storage/google_json/requests/copy_object.rb +34 -0
- data/lib/fog/storage/google_json/requests/delete_bucket.rb +23 -0
- data/lib/fog/storage/google_json/requests/delete_object.rb +24 -0
- data/lib/fog/storage/google_json/requests/delete_object_url.rb +39 -0
- data/lib/fog/storage/google_json/requests/get_bucket.rb +43 -0
- data/lib/fog/storage/google_json/requests/get_bucket_acl.rb +32 -0
- data/lib/fog/storage/google_json/requests/get_object.rb +85 -0
- data/lib/fog/storage/google_json/requests/get_object_acl.rb +35 -0
- data/lib/fog/storage/google_json/requests/get_object_http_url.rb +32 -0
- data/lib/fog/storage/google_json/requests/get_object_https_url.rb +33 -0
- data/lib/fog/storage/google_json/requests/get_object_metadata.rb +32 -0
- data/lib/fog/storage/google_json/requests/get_object_url.rb +21 -0
- data/lib/fog/storage/google_json/requests/list_bucket_acl.rb +26 -0
- data/lib/fog/storage/google_json/requests/list_buckets.rb +30 -0
- data/lib/fog/storage/google_json/requests/list_object_acl.rb +29 -0
- data/lib/fog/storage/google_json/requests/list_objects.rb +48 -0
- data/lib/fog/storage/google_json/requests/put_bucket.rb +42 -0
- data/lib/fog/storage/google_json/requests/put_bucket_acl.rb +29 -0
- data/lib/fog/storage/google_json/requests/put_object.rb +102 -0
- data/lib/fog/storage/google_json/requests/put_object_acl.rb +35 -0
- data/lib/fog/storage/google_json/requests/put_object_url.rb +42 -0
- data/lib/fog/storage/google_json/utils.rb +40 -0
- data/lib/fog/storage/google_xml.rb +38 -0
- data/lib/fog/storage/google_xml/mock.rb +102 -0
- data/lib/fog/storage/google_xml/models/directories.rb +34 -0
- data/lib/fog/storage/google_xml/models/directory.rb +65 -0
- data/lib/fog/storage/google_xml/models/file.rb +130 -0
- data/lib/fog/storage/google_xml/models/files.rb +95 -0
- data/lib/fog/storage/google_xml/real.rb +108 -0
- data/lib/fog/storage/google_xml/requests/copy_object.rb +62 -0
- data/lib/fog/storage/google_xml/requests/delete_bucket.rb +39 -0
- data/lib/fog/storage/google_xml/requests/delete_object.rb +44 -0
- data/lib/fog/storage/google_xml/requests/delete_object_url.rb +42 -0
- data/lib/fog/storage/google_xml/requests/get_bucket.rb +95 -0
- data/lib/fog/storage/google_xml/requests/get_bucket_acl.rb +53 -0
- data/lib/fog/storage/google_xml/requests/get_object.rb +96 -0
- data/lib/fog/storage/google_xml/requests/get_object_acl.rb +62 -0
- data/lib/fog/storage/google_xml/requests/get_object_http_url.rb +37 -0
- data/lib/fog/storage/google_xml/requests/get_object_https_url.rb +37 -0
- data/lib/fog/storage/google_xml/requests/get_object_url.rb +31 -0
- data/lib/fog/storage/google_xml/requests/get_service.rb +44 -0
- data/lib/fog/storage/google_xml/requests/head_object.rb +55 -0
- data/lib/fog/storage/google_xml/requests/put_bucket.rb +71 -0
- data/lib/fog/storage/google_xml/requests/put_bucket_acl.rb +58 -0
- data/lib/fog/storage/google_xml/requests/put_object.rb +85 -0
- data/lib/fog/storage/google_xml/requests/put_object_acl.rb +58 -0
- data/lib/fog/storage/google_xml/requests/put_object_url.rb +42 -0
- data/lib/fog/storage/google_xml/utils.rb +83 -0
- data/tasks/bundler.rake +3 -0
- data/tasks/changelog.rake +39 -0
- data/tasks/console.rake +17 -0
- data/tasks/lint.rake +9 -0
- data/tasks/test.rake +115 -0
- data/test/helpers/client_helper.rb +63 -0
- data/test/helpers/integration_test_helper.rb +108 -0
- data/test/helpers/test_collection.rb +60 -0
- data/test/helpers/test_helper.rb +24 -0
- data/test/integration/compute/core_compute/test_client_options.rb +12 -0
- data/test/integration/compute/core_compute/test_coverage.rb +6 -0
- data/test/integration/compute/core_compute/test_disk_types.rb +43 -0
- data/test/integration/compute/core_compute/test_disks.rb +53 -0
- data/test/integration/compute/core_compute/test_images.rb +32 -0
- data/test/integration/compute/core_compute/test_machine_types.rb +55 -0
- data/test/integration/compute/core_compute/test_operations.rb +45 -0
- data/test/integration/compute/core_compute/test_projects.rb +19 -0
- data/test/integration/compute/core_compute/test_regions.rb +33 -0
- data/test/integration/compute/core_compute/test_servers.rb +149 -0
- data/test/integration/compute/core_compute/test_snapshots.rb +21 -0
- data/test/integration/compute/core_compute/test_zones.rb +35 -0
- data/test/integration/compute/core_networking/test_addresses.rb +107 -0
- data/test/integration/compute/core_networking/test_coverage.rb +6 -0
- data/test/integration/compute/core_networking/test_firewalls.rb +11 -0
- data/test/integration/compute/core_networking/test_networks.rb +41 -0
- data/test/integration/compute/core_networking/test_routes.rb +26 -0
- data/test/integration/compute/core_networking/test_subnetworks.rb +11 -0
- data/test/integration/compute/instance_groups/test_coverage.rb +6 -0
- data/test/integration/compute/instance_groups/test_instance_group_managers.rb +11 -0
- data/test/integration/compute/instance_groups/test_instance_groups.rb +11 -0
- data/test/integration/compute/instance_groups/test_instance_templates.rb +11 -0
- data/test/integration/compute/loadbalancing/test_backend_services.rb +11 -0
- data/test/integration/compute/loadbalancing/test_coverage.rb +6 -0
- data/test/integration/compute/loadbalancing/test_forwarding_rules.rb +11 -0
- data/test/integration/compute/loadbalancing/test_global_addresses.rb +11 -0
- data/test/integration/compute/loadbalancing/test_global_forwarding_rules.rb +11 -0
- data/test/integration/compute/loadbalancing/test_http_health_checks.rb +11 -0
- data/test/integration/compute/loadbalancing/test_ssl_certificates.rb +11 -0
- data/test/integration/compute/loadbalancing/test_target_http_proxies.rb +11 -0
- data/test/integration/compute/loadbalancing/test_target_https_proxies.rb +11 -0
- data/test/integration/compute/loadbalancing/test_target_instances.rb +11 -0
- data/test/integration/compute/loadbalancing/test_target_pools.rb +55 -0
- data/test/integration/compute/loadbalancing/test_url_maps.rb +11 -0
- data/test/integration/factories/addresses_factory.rb +20 -0
- data/test/integration/factories/backend_services_factory.rb +19 -0
- data/test/integration/factories/collection_factory.rb +52 -0
- data/test/integration/factories/disks_factory.rb +22 -0
- data/test/integration/factories/firewalls_factory.rb +13 -0
- data/test/integration/factories/forwarding_rules_factory.rb +25 -0
- data/test/integration/factories/global_addresses_factory.rb +15 -0
- data/test/integration/factories/global_forwarding_rules_factory.rb +20 -0
- data/test/integration/factories/http_health_checks_factory.rb +11 -0
- data/test/integration/factories/images_factory.rb +16 -0
- data/test/integration/factories/instance_group_manager_factory.rb +30 -0
- data/test/integration/factories/instance_groups_factory.rb +20 -0
- data/test/integration/factories/instance_template_factory.rb +24 -0
- data/test/integration/factories/networks_factory.rb +16 -0
- data/test/integration/factories/servers_factory.rb +30 -0
- data/test/integration/factories/sql_certs_factory.rb +20 -0
- data/test/integration/factories/sql_instances_factory.rb +19 -0
- data/test/integration/factories/sql_users_factory.rb +23 -0
- data/test/integration/factories/ssl_certificates_factory.rb +13 -0
- data/test/integration/factories/subnetworks_factory.rb +26 -0
- data/test/integration/factories/target_http_proxies_factory.rb +19 -0
- data/test/integration/factories/target_https_proxies_factory.rb +26 -0
- data/test/integration/factories/target_instances_factory.rb +24 -0
- data/test/integration/factories/target_pools_factory.rb +28 -0
- data/test/integration/factories/url_maps_factory.rb +19 -0
- data/test/integration/monitoring/test_coverage.rb +6 -0
- data/test/integration/monitoring/test_metric_descriptors.rb +131 -0
- data/test/integration/monitoring/test_monitored_resource_descriptors.rb +37 -0
- data/test/integration/monitoring/test_timeseries.rb +238 -0
- data/test/integration/pubsub/pubsub_shared.rb +75 -0
- data/test/integration/pubsub/test_coverage.rb +6 -0
- data/test/integration/pubsub/test_pubsub_models.rb +135 -0
- data/test/integration/pubsub/test_pubsub_requests.rb +105 -0
- data/test/integration/sql/test_certs.rb +50 -0
- data/test/integration/sql/test_common_flags.rb +31 -0
- data/test/integration/sql/test_common_tiers.rb +26 -0
- data/test/integration/sql/test_coverage.rb +6 -0
- data/test/integration/sql/test_instances.rb +101 -0
- data/test/integration/sql/test_users.rb +37 -0
- data/test/integration/storage/storage_shared.rb +96 -0
- data/test/integration/storage/test_buckets.rb +112 -0
- data/test/integration/storage/test_coverage.rb +6 -0
- data/test/integration/storage/test_directories.rb +67 -0
- data/test/integration/storage/test_files.rb +168 -0
- data/test/integration/storage/test_objects.rb +203 -0
- data/test/integration/test_authentication.rb +38 -0
- data/test/unit/compute/test_common_collections.rb +42 -0
- data/test/unit/compute/test_common_models.rb +35 -0
- data/test/unit/compute/test_server.rb +29 -0
- data/test/unit/dns/test_common_collections.rb +43 -0
- data/test/unit/monitoring/test_comon_collections.rb +44 -0
- data/test/unit/pubsub/test_common_collections.rb +35 -0
- data/test/unit/sql/test_common_collections.rb +46 -0
- data/test/unit/storage/test_common_json_collections.rb +38 -0
- data/test/unit/storage/test_common_xml_collections.rb +50 -0
- data/test/unit/storage/test_json_requests.rb +44 -0
- data/test/unit/storage/test_xml_requests.rb +60 -0
- metadata +897 -0
@@ -0,0 +1,24 @@
|
|
1
|
+
module Fog
|
2
|
+
module Compute
|
3
|
+
class Google
|
4
|
+
class Networks < Fog::Collection
|
5
|
+
model Fog::Compute::Google::Network
|
6
|
+
|
7
|
+
def all
|
8
|
+
data = service.list_networks.to_h[:items]
|
9
|
+
load(data || [])
|
10
|
+
end
|
11
|
+
|
12
|
+
def get(identity)
|
13
|
+
if identity
|
14
|
+
network = service.get_network(identity).to_h
|
15
|
+
return new(network)
|
16
|
+
end
|
17
|
+
rescue ::Google::Apis::ClientError => e
|
18
|
+
raise e unless e.status_code == 404
|
19
|
+
nil
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
@@ -0,0 +1,73 @@
|
|
1
|
+
module Fog
|
2
|
+
module Compute
|
3
|
+
class Google
|
4
|
+
class Operation < Fog::Model
|
5
|
+
identity :name
|
6
|
+
|
7
|
+
attribute :kind
|
8
|
+
attribute :id
|
9
|
+
attribute :client_operation_id, :aliases => "clientOperationId"
|
10
|
+
attribute :creation_timestamp, :aliases => "creationTimestamp"
|
11
|
+
attribute :end_time, :aliases => "endTime"
|
12
|
+
attribute :error
|
13
|
+
attribute :http_error_message, :aliases => "httpErrorMessage"
|
14
|
+
attribute :http_error_status_code, :aliases => "httpErrorStatusCode"
|
15
|
+
attribute :insert_time, :aliases => "insertTime"
|
16
|
+
attribute :operation_type, :aliases => "operationType"
|
17
|
+
attribute :progress
|
18
|
+
attribute :region
|
19
|
+
attribute :self_link, :aliases => "selfLink"
|
20
|
+
attribute :start_time, :aliases => "startTime"
|
21
|
+
attribute :status
|
22
|
+
attribute :status_message, :aliases => "statusMessage"
|
23
|
+
attribute :target_id, :aliases => "targetId"
|
24
|
+
attribute :target_link, :aliases => "targetLink"
|
25
|
+
attribute :user
|
26
|
+
attribute :warnings
|
27
|
+
attribute :zone
|
28
|
+
|
29
|
+
def ready?
|
30
|
+
status == DONE_STATE
|
31
|
+
end
|
32
|
+
|
33
|
+
def pending?
|
34
|
+
status == PENDING_STATE
|
35
|
+
end
|
36
|
+
|
37
|
+
def region_name
|
38
|
+
region.nil? ? nil : region.split("/")[-1]
|
39
|
+
end
|
40
|
+
|
41
|
+
def zone_name
|
42
|
+
zone.nil? ? nil : zone.split("/")[-1]
|
43
|
+
end
|
44
|
+
|
45
|
+
def destroy
|
46
|
+
requires :identity
|
47
|
+
|
48
|
+
if zone
|
49
|
+
service.delete_zone_operation(zone, identity)
|
50
|
+
elsif region
|
51
|
+
service.delete_region_operation(region, identity)
|
52
|
+
else
|
53
|
+
service.delete_global_operation(identity)
|
54
|
+
end
|
55
|
+
true
|
56
|
+
end
|
57
|
+
|
58
|
+
def reload
|
59
|
+
requires :identity
|
60
|
+
|
61
|
+
data = collection.get(identity, zone, region)
|
62
|
+
new_attributes = data.attributes
|
63
|
+
merge_attributes(new_attributes)
|
64
|
+
self
|
65
|
+
end
|
66
|
+
|
67
|
+
PENDING_STATE = "PENDING".freeze
|
68
|
+
RUNNING_STATE = "RUNNING".freeze
|
69
|
+
DONE_STATE = "DONE".freeze
|
70
|
+
end
|
71
|
+
end
|
72
|
+
end
|
73
|
+
end
|
@@ -0,0 +1,45 @@
|
|
1
|
+
module Fog
|
2
|
+
module Compute
|
3
|
+
class Google
|
4
|
+
class Operations < Fog::Collection
|
5
|
+
model Fog::Compute::Google::Operation
|
6
|
+
|
7
|
+
def all(zone: nil, region: nil, filter: nil, max_results: nil,
|
8
|
+
order_by: nil, page_token: nil)
|
9
|
+
opts = {
|
10
|
+
:filter => filter,
|
11
|
+
:max_results => max_results,
|
12
|
+
:order_by => order_by,
|
13
|
+
:page_token => page_token
|
14
|
+
}
|
15
|
+
|
16
|
+
if zone
|
17
|
+
data = service.list_zone_operations(zone, opts).to_h[:items]
|
18
|
+
elsif region
|
19
|
+
data = service.list_region_operations(region, opts).to_h[:items]
|
20
|
+
else
|
21
|
+
data = service.list_global_operations(opts).to_h[:items]
|
22
|
+
end
|
23
|
+
|
24
|
+
load(data || [])
|
25
|
+
end
|
26
|
+
|
27
|
+
def get(identity, zone = nil, region = nil)
|
28
|
+
if !zone.nil?
|
29
|
+
operation = service.get_zone_operation(zone, identity).to_h
|
30
|
+
return new(operation)
|
31
|
+
elsif !region.nil?
|
32
|
+
operation = service.get_region_operation(region, identity).to_h
|
33
|
+
return new(operation)
|
34
|
+
elsif identity
|
35
|
+
operation = service.get_global_operation(identity).to_h
|
36
|
+
return new(operation)
|
37
|
+
end
|
38
|
+
rescue ::Google::Apis::ClientError => e
|
39
|
+
raise e unless e.status_code == 404
|
40
|
+
nil
|
41
|
+
end
|
42
|
+
end
|
43
|
+
end
|
44
|
+
end
|
45
|
+
end
|
@@ -0,0 +1,28 @@
|
|
1
|
+
module Fog
|
2
|
+
module Compute
|
3
|
+
class Google
|
4
|
+
##
|
5
|
+
# Represents a Project resource
|
6
|
+
#
|
7
|
+
# @see https://developers.google.com/compute/docs/reference/latest/projects
|
8
|
+
class Project < Fog::Model
|
9
|
+
identity :name
|
10
|
+
|
11
|
+
attribute :kind
|
12
|
+
attribute :id
|
13
|
+
attribute :common_instance_metadata, :aliases => "commonInstanceMetadata"
|
14
|
+
attribute :creation_timestamp, :aliases => "creationTimestamp"
|
15
|
+
attribute :description
|
16
|
+
attribute :quotas
|
17
|
+
attribute :self_link, :aliases => "selfLink"
|
18
|
+
|
19
|
+
def set_metadata(metadata = {})
|
20
|
+
requires :identity
|
21
|
+
|
22
|
+
operation = service.set_common_instance_metadata(identity, common_instance_metadata["fingerprint"], metadata)
|
23
|
+
Fog::Compute::Google::Operations.new(:service => service).get(operation.id)
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
@@ -0,0 +1,19 @@
|
|
1
|
+
module Fog
|
2
|
+
module Compute
|
3
|
+
class Google
|
4
|
+
class Projects < Fog::Collection
|
5
|
+
model Fog::Compute::Google::Project
|
6
|
+
|
7
|
+
def get(identity)
|
8
|
+
if identity
|
9
|
+
project = service.get_project(identity).to_h
|
10
|
+
return new(project)
|
11
|
+
end
|
12
|
+
rescue ::Google::Apis::ClientError => e
|
13
|
+
raise e unless e.status_code == 404
|
14
|
+
nil
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
@@ -0,0 +1,30 @@
|
|
1
|
+
module Fog
|
2
|
+
module Compute
|
3
|
+
class Google
|
4
|
+
##
|
5
|
+
# Represents a Region resource
|
6
|
+
#
|
7
|
+
# @see https://developers.google.com/compute/docs/reference/latest/regions
|
8
|
+
class Region < Fog::Model
|
9
|
+
identity :name
|
10
|
+
|
11
|
+
attribute :kind
|
12
|
+
attribute :id
|
13
|
+
attribute :creation_timestamp, :aliases => "creationTimestamp"
|
14
|
+
attribute :deprecated
|
15
|
+
attribute :description
|
16
|
+
attribute :quotas
|
17
|
+
attribute :self_link, :aliases => "selfLink"
|
18
|
+
attribute :status
|
19
|
+
attribute :zones
|
20
|
+
|
21
|
+
DOWN_STATE = "DOWN".freeze
|
22
|
+
UP_STATE = "UP".freeze
|
23
|
+
|
24
|
+
def up?
|
25
|
+
status == UP_STATE
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
@@ -0,0 +1,24 @@
|
|
1
|
+
module Fog
|
2
|
+
module Compute
|
3
|
+
class Google
|
4
|
+
class Regions < Fog::Collection
|
5
|
+
model Fog::Compute::Google::Region
|
6
|
+
|
7
|
+
def all
|
8
|
+
data = service.list_regions.to_h
|
9
|
+
load(data[:items] || [])
|
10
|
+
end
|
11
|
+
|
12
|
+
def get(identity)
|
13
|
+
if identity
|
14
|
+
region = service.get_region(identity).to_h
|
15
|
+
return new(region)
|
16
|
+
end
|
17
|
+
rescue ::Google::Apis::ClientError => e
|
18
|
+
raise e unless e.status_code == 404
|
19
|
+
nil
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
@@ -0,0 +1,49 @@
|
|
1
|
+
module Fog
|
2
|
+
module Compute
|
3
|
+
class Google
|
4
|
+
##
|
5
|
+
# Represents a Route resource
|
6
|
+
#
|
7
|
+
# @see https://developers.google.com/compute/docs/reference/latest/routes
|
8
|
+
class Route < Fog::Model
|
9
|
+
identity :name
|
10
|
+
|
11
|
+
attribute :kind
|
12
|
+
attribute :id
|
13
|
+
attribute :creation_timestamp, :aliases => "creationTimestamp"
|
14
|
+
attribute :description
|
15
|
+
attribute :dest_range, :aliases => "destRange"
|
16
|
+
attribute :network
|
17
|
+
attribute :next_hop_gateway, :aliases => "nextHopGateway"
|
18
|
+
attribute :next_hop_instance, :aliases => "nextHopInstance"
|
19
|
+
attribute :next_hop_ip, :aliases => "nextHopIp"
|
20
|
+
attribute :next_hop_network, :aliases => "nextHopNetwork"
|
21
|
+
attribute :next_hop_vpn_tunnel, :aliases => "nextHopVpnTunnel"
|
22
|
+
attribute :priority
|
23
|
+
attribute :self_link, :aliases => "selfLink"
|
24
|
+
attribute :tags
|
25
|
+
attribute :warnings
|
26
|
+
|
27
|
+
def save
|
28
|
+
requires :identity, :network, :dest_range, :priority
|
29
|
+
|
30
|
+
data = service.insert_route(identity, network, dest_range, priority, attributes)
|
31
|
+
operation = Fog::Compute::Google::Operations.new(:service => service)
|
32
|
+
.get(data.name)
|
33
|
+
operation.wait_for { ready? }
|
34
|
+
reload
|
35
|
+
end
|
36
|
+
|
37
|
+
def destroy(async = true)
|
38
|
+
requires :identity
|
39
|
+
|
40
|
+
data = service.delete_route(identity)
|
41
|
+
operation = Fog::Compute::Google::Operations.new(:service => service)
|
42
|
+
.get(data.name)
|
43
|
+
operation.wait_for { ready? } unless async
|
44
|
+
operation
|
45
|
+
end
|
46
|
+
end
|
47
|
+
end
|
48
|
+
end
|
49
|
+
end
|
@@ -0,0 +1,24 @@
|
|
1
|
+
module Fog
|
2
|
+
module Compute
|
3
|
+
class Google
|
4
|
+
class Routes < Fog::Collection
|
5
|
+
model Fog::Compute::Google::Route
|
6
|
+
|
7
|
+
def all
|
8
|
+
data = service.list_routes.to_h
|
9
|
+
load(data[:items] || [])
|
10
|
+
end
|
11
|
+
|
12
|
+
def get(identity)
|
13
|
+
if identity
|
14
|
+
route = service.get_route(identity).to_h
|
15
|
+
return new(route)
|
16
|
+
end
|
17
|
+
rescue ::Google::Apis::ClientError => e
|
18
|
+
raise e unless e.status_code == 404
|
19
|
+
nil
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
@@ -0,0 +1,604 @@
|
|
1
|
+
require "fog/compute/models/server"
|
2
|
+
|
3
|
+
module Fog
|
4
|
+
module Compute
|
5
|
+
class Google
|
6
|
+
class Server < Fog::Compute::Server
|
7
|
+
identity :name
|
8
|
+
|
9
|
+
# @return [Boolean]
|
10
|
+
attribute :can_ip_forward, :aliases => "canIpForward"
|
11
|
+
|
12
|
+
# @return [String]
|
13
|
+
attribute :cpu_platform, :aliases => "cpuPlatform"
|
14
|
+
|
15
|
+
# @return [String]
|
16
|
+
attribute :creation_timestamp, :aliases => "creationTimestamp"
|
17
|
+
|
18
|
+
# @return [Boolean]
|
19
|
+
attribute :deletion_protection, :aliases => "deletionProtection"
|
20
|
+
|
21
|
+
# @return [String]
|
22
|
+
attribute :description
|
23
|
+
|
24
|
+
# New disks may include :initialize_params before save.
|
25
|
+
#
|
26
|
+
# @example Minimal disks pre-creation:
|
27
|
+
# [
|
28
|
+
# {
|
29
|
+
# :initialize_params => {
|
30
|
+
# :source_image => "projects/debian-cloud/global/images/family/debian-9"
|
31
|
+
# }
|
32
|
+
# }
|
33
|
+
# ]
|
34
|
+
#
|
35
|
+
# @example disks post-creation:
|
36
|
+
# [
|
37
|
+
# {
|
38
|
+
# :auto_delete => false,
|
39
|
+
# :boot => true,
|
40
|
+
# :device_name => "persistent-disk-0",
|
41
|
+
# :index => 0,
|
42
|
+
# :interface => "SCSI",
|
43
|
+
# :kind => "compute#attachedDisk",
|
44
|
+
# :licenses => ["https://www.googleapis.com/compute/v1/..."],
|
45
|
+
# :mode => "READ_WRITE",
|
46
|
+
# :source => "https://www.googleapis.com/compute/v1/.../mydisk",
|
47
|
+
# :type => "PERSISTENT"
|
48
|
+
# }
|
49
|
+
# ]
|
50
|
+
# @return [Array<Hash>]
|
51
|
+
attribute :disks
|
52
|
+
|
53
|
+
# @example Guest accelerators
|
54
|
+
# [
|
55
|
+
# {
|
56
|
+
# :accelerator_count => 1,
|
57
|
+
# :accelerator_type => "...my/accelerator/type"
|
58
|
+
# }
|
59
|
+
# ]
|
60
|
+
# @return [Array<Hash>]
|
61
|
+
attribute :guest_accelerators, :aliases => "guestAccelerators"
|
62
|
+
|
63
|
+
# @return [Fixnum]
|
64
|
+
attribute :id
|
65
|
+
|
66
|
+
# @return [String]
|
67
|
+
attribute :kind
|
68
|
+
|
69
|
+
# @return [String]
|
70
|
+
attribute :label_fingerprint, :aliases => "labelFingerprint"
|
71
|
+
|
72
|
+
# @return [Hash<String,String>]
|
73
|
+
attribute :labels
|
74
|
+
|
75
|
+
# @return [String]
|
76
|
+
attribute :machine_type, :aliases => "machineType"
|
77
|
+
|
78
|
+
# If set initially before save, the expected format
|
79
|
+
# is the API format as shown below.
|
80
|
+
#
|
81
|
+
# If you want to pass in a Hash, see {#set_metadata}.
|
82
|
+
# If you want to access the metadata items as a Hash, see
|
83
|
+
# {#metadata_as_h}.
|
84
|
+
#
|
85
|
+
# @example Metadata in API format
|
86
|
+
#
|
87
|
+
# {
|
88
|
+
# :fingerprint => "...",
|
89
|
+
# :items => [
|
90
|
+
# { :key => "foo", :value => "bar" },
|
91
|
+
# ]
|
92
|
+
# }
|
93
|
+
# @return [Hash]
|
94
|
+
attribute :metadata
|
95
|
+
|
96
|
+
# @return [String]
|
97
|
+
attribute :min_cpu_platform, :aliases => "minCpuPlatform"
|
98
|
+
|
99
|
+
# @example Network interfaces
|
100
|
+
# [
|
101
|
+
# {
|
102
|
+
# :kind => "compute#networkInterface",
|
103
|
+
# :name => "nic0",
|
104
|
+
# :network => "https://www.googleapis.com/compute/v1/.../my-network/"
|
105
|
+
# :network_ip => "0.0.0.0",
|
106
|
+
# :subnetwork => "https://www.googleapis.com/compute/v1/.../my-subnetwork"
|
107
|
+
# }
|
108
|
+
# ],
|
109
|
+
# @return [Array<Hash>]
|
110
|
+
attribute :network_interfaces, :aliases => "networkInterfaces"
|
111
|
+
|
112
|
+
# @example Scheduling object
|
113
|
+
# {
|
114
|
+
# :automatic_restart => true,
|
115
|
+
# :on_host_maintenance => "MIGRATE",
|
116
|
+
# :preemptible=>false
|
117
|
+
# }
|
118
|
+
# @return [Hash]
|
119
|
+
attribute :scheduling
|
120
|
+
|
121
|
+
# @return [String]
|
122
|
+
attribute :self_link, :aliases => "selfLink"
|
123
|
+
|
124
|
+
# @example Service accounts in API format
|
125
|
+
# [
|
126
|
+
# {
|
127
|
+
# :email => "my-service-account@developer.gserviceaccount.com",
|
128
|
+
# :scopes => [],
|
129
|
+
# }
|
130
|
+
# ]
|
131
|
+
# @return [Array<Hash>]
|
132
|
+
attribute :service_accounts, :aliases => "serviceAccounts"
|
133
|
+
|
134
|
+
# @return [Boolean]
|
135
|
+
attribute :start_restricted, :aliases => "startRestricted"
|
136
|
+
|
137
|
+
# @return [String]
|
138
|
+
attribute :status, :aliases => "status"
|
139
|
+
|
140
|
+
# @return [String]
|
141
|
+
attribute :status_message, :aliases => "statusMessage"
|
142
|
+
|
143
|
+
# @example Tags in API format
|
144
|
+
# @return [Hash]
|
145
|
+
attribute :tags
|
146
|
+
|
147
|
+
# @return [String]
|
148
|
+
attribute :zone, :aliases => :zone_name
|
149
|
+
|
150
|
+
GCE_SCOPE_ALIASES = {
|
151
|
+
"default" => %w(
|
152
|
+
https://www.googleapis.com/auth/cloud.useraccounts.readonly
|
153
|
+
https://www.googleapis.com/auth/devstorage.read_only
|
154
|
+
https://www.googleapis.com/auth/logging.write
|
155
|
+
https://www.googleapis.com/auth/monitoring.write
|
156
|
+
https://www.googleapis.com/auth/pubsub
|
157
|
+
https://www.googleapis.com/auth/service.management.readonly
|
158
|
+
https://www.googleapis.com/auth/servicecontrol
|
159
|
+
https://www.googleapis.com/auth/trace.append
|
160
|
+
),
|
161
|
+
"bigquery" => ["https://www.googleapis.com/auth/bigquery"],
|
162
|
+
"cloud-platform" => ["https://www.googleapis.com/auth/cloud-platform"],
|
163
|
+
"compute-ro" => ["https://www.googleapis.com/auth/compute.readonly"],
|
164
|
+
"compute-rw" => ["https://www.googleapis.com/auth/compute"],
|
165
|
+
"datastore" => ["https://www.googleapis.com/auth/datastore"],
|
166
|
+
"logging-write" => ["https://www.googleapis.com/auth/logging.write"],
|
167
|
+
"monitoring" => ["https://www.googleapis.com/auth/monitoring"],
|
168
|
+
"monitoring-write" => ["https://www.googleapis.com/auth/monitoring.write"],
|
169
|
+
"service-control" => ["https://www.googleapis.com/auth/servicecontrol"],
|
170
|
+
"service-management" => ["https://www.googleapis.com/auth/service.management.readonly"],
|
171
|
+
"sql" => ["https://www.googleapis.com/auth/sqlservice"],
|
172
|
+
"sql-admin" => ["https://www.googleapis.com/auth/sqlservice.admin"],
|
173
|
+
"storage-full" => ["https://www.googleapis.com/auth/devstorage.full_control"],
|
174
|
+
"storage-ro" => ["https://www.googleapis.com/auth/devstorage.read_only"],
|
175
|
+
"storage-rw" => ["https://www.googleapis.com/auth/devstorage.read_write"],
|
176
|
+
"taskqueue" => ["https://www.googleapis.com/auth/taskqueue"],
|
177
|
+
"useraccounts-ro" => ["https://www.googleapis.com/auth/cloud.useraccounts.readonly"],
|
178
|
+
"useraccounts-rw" => ["https://www.googleapis.com/auth/cloud.useraccounts"],
|
179
|
+
"userinfo-email" => ["https://www.googleapis.com/auth/userinfo.email"]
|
180
|
+
}.freeze
|
181
|
+
|
182
|
+
# Return the source image of the server's boot disk
|
183
|
+
#
|
184
|
+
# @return [String] image self link
|
185
|
+
def image_name
|
186
|
+
boot_disk = disks.first
|
187
|
+
unless boot_disk.is_a?(Disk)
|
188
|
+
source = boot_disk[:source]
|
189
|
+
match = source.match(%r{/zones/(.*)/disks/(.*)$})
|
190
|
+
boot_disk = service.disks.get(match[2], match[1])
|
191
|
+
end
|
192
|
+
boot_disk.source_image.nil? ? nil : boot_disk.source_image
|
193
|
+
end
|
194
|
+
|
195
|
+
# Destroy a server.
|
196
|
+
#
|
197
|
+
# @param async [TrueClass] execute the command asynchronously
|
198
|
+
# @return [Fog::Compute::Google::Operation]
|
199
|
+
def destroy(async = true)
|
200
|
+
requires :name, :zone
|
201
|
+
|
202
|
+
data = service.delete_server(name, zone_name)
|
203
|
+
operation = Fog::Compute::Google::Operations
|
204
|
+
.new(:service => service)
|
205
|
+
.get(data.name, data.zone)
|
206
|
+
operation.wait_for { ready? } unless async
|
207
|
+
operation
|
208
|
+
end
|
209
|
+
|
210
|
+
# Helper method that returns first public ip address needed for
|
211
|
+
# Fog::Compute::Server.ssh default behavior.
|
212
|
+
#
|
213
|
+
# @return [String]
|
214
|
+
def public_ip_address
|
215
|
+
public_ip_addresses.first
|
216
|
+
end
|
217
|
+
|
218
|
+
# Helper method that returns all of server's public ip addresses.
|
219
|
+
#
|
220
|
+
# @return [Array]
|
221
|
+
def public_ip_addresses
|
222
|
+
addresses = []
|
223
|
+
if network_interfaces.respond_to? :flat_map
|
224
|
+
addresses = network_interfaces.flat_map do |nic|
|
225
|
+
if nic[:access_configs].respond_to? :each
|
226
|
+
nic[:access_configs].select { |config| config[:name] == "External NAT" }
|
227
|
+
.map { |config| config[:nat_ip] }
|
228
|
+
else
|
229
|
+
[]
|
230
|
+
end
|
231
|
+
end
|
232
|
+
end
|
233
|
+
addresses
|
234
|
+
end
|
235
|
+
|
236
|
+
# Helper method that returns the first private ip address of the
|
237
|
+
# instance.
|
238
|
+
#
|
239
|
+
# @return [String]
|
240
|
+
def private_ip_address
|
241
|
+
private_ip_addresses.first
|
242
|
+
end
|
243
|
+
|
244
|
+
# Helper method that returns all of server's private ip addresses.
|
245
|
+
#
|
246
|
+
# @return [Array]
|
247
|
+
def private_ip_addresses
|
248
|
+
addresses = []
|
249
|
+
if network_interfaces.respond_to? :map
|
250
|
+
addresses = network_interfaces.map { |nic| nic[:network_ip] }
|
251
|
+
end
|
252
|
+
addresses
|
253
|
+
end
|
254
|
+
|
255
|
+
# Helper method that returns all of server's ip addresses,
|
256
|
+
# both private and public.
|
257
|
+
#
|
258
|
+
# @return [Array]
|
259
|
+
def addresses
|
260
|
+
private_ip_addresses + public_ip_addresses
|
261
|
+
end
|
262
|
+
|
263
|
+
# Attach a disk to a running server
|
264
|
+
#
|
265
|
+
# @param disk [Object, String] disk object or a self-link
|
266
|
+
# @param async [TrueClass] execute the api call asynchronously
|
267
|
+
# @param options [Hash]
|
268
|
+
# @return [Object]
|
269
|
+
def attach_disk(disk, async = true, attached_disk_options = {})
|
270
|
+
requires :identity, :zone
|
271
|
+
|
272
|
+
if disk.is_a? Disk
|
273
|
+
disk_obj = disk.get_attached_disk
|
274
|
+
elsif disk.is_a? String
|
275
|
+
disk_obj = service.disks.attached_disk_obj(disk, attached_disk_options)
|
276
|
+
end
|
277
|
+
|
278
|
+
data = service.attach_disk(identity, zone_name, disk_obj)
|
279
|
+
operation = Fog::Compute::Google::Operations
|
280
|
+
.new(:service => service)
|
281
|
+
.get(data.name, data.zone)
|
282
|
+
operation.wait_for { ready? } unless async
|
283
|
+
reload
|
284
|
+
end
|
285
|
+
|
286
|
+
# Detach disk from a running instance
|
287
|
+
#
|
288
|
+
# @param device_name [Object]
|
289
|
+
# @param async [TrueClass]
|
290
|
+
# @returns [Fog::Compute::Google::Server] server object
|
291
|
+
def detach_disk(device_name, async = true)
|
292
|
+
requires :identity, :zone
|
293
|
+
|
294
|
+
data = service.detach_disk(identity, zone, device_name)
|
295
|
+
operation = Fog::Compute::Google::Operations
|
296
|
+
.new(:service => service)
|
297
|
+
.get(data.name, data.zone)
|
298
|
+
operation.wait_for { ready? } unless async
|
299
|
+
reload
|
300
|
+
end
|
301
|
+
|
302
|
+
# Returns metadata items as a Hash.
|
303
|
+
#
|
304
|
+
# @return [Hash<String, String>] items
|
305
|
+
def metadata_as_h
|
306
|
+
if metadata.nil? || metadata[:items].nil? || metadata[:items].empty?
|
307
|
+
return {}
|
308
|
+
end
|
309
|
+
|
310
|
+
Hash[metadata[:items].map { |item| [item[:key], item[:value]] }]
|
311
|
+
end
|
312
|
+
|
313
|
+
def reboot(async = true)
|
314
|
+
requires :identity, :zone
|
315
|
+
|
316
|
+
data = service.reset_server(identity, zone_name)
|
317
|
+
operation = Fog::Compute::Google::Operations
|
318
|
+
.new(:service => service)
|
319
|
+
.get(data.name, data.zone)
|
320
|
+
operation.wait_for { ready? } unless async
|
321
|
+
operation
|
322
|
+
end
|
323
|
+
|
324
|
+
def start(async = true)
|
325
|
+
requires :identity, :zone
|
326
|
+
|
327
|
+
data = service.start_server(identity, zone_name)
|
328
|
+
operation = Fog::Compute::Google::Operations
|
329
|
+
.new(:service => service)
|
330
|
+
.get(data.name, data.zone)
|
331
|
+
operation.wait_for { ready? } unless async
|
332
|
+
operation
|
333
|
+
end
|
334
|
+
|
335
|
+
def stop(async = true)
|
336
|
+
requires :identity, :zone
|
337
|
+
|
338
|
+
data = service.stop_server(identity, zone_name)
|
339
|
+
operation = Fog::Compute::Google::Operations
|
340
|
+
.new(:service => service)
|
341
|
+
.get(data.name, data.zone)
|
342
|
+
operation.wait_for { ready? } unless async
|
343
|
+
operation
|
344
|
+
end
|
345
|
+
|
346
|
+
def serial_port_output(port: 1)
|
347
|
+
requires :identity, :zone
|
348
|
+
|
349
|
+
service.get_server_serial_port_output(identity, zone_name, :port => port).to_h[:contents]
|
350
|
+
end
|
351
|
+
|
352
|
+
def set_disk_auto_delete(auto_delete, device_name = nil, async = true)
|
353
|
+
requires :identity, :zone
|
354
|
+
|
355
|
+
if device_name.nil? && disks.count > 1
|
356
|
+
raise ArgumentError.new("Device name is required if multiple disks are attached")
|
357
|
+
end
|
358
|
+
|
359
|
+
device_name ||= disks.first[:device_name]
|
360
|
+
data = service.set_server_disk_auto_delete(
|
361
|
+
identity, zone_name, auto_delete, device_name
|
362
|
+
)
|
363
|
+
|
364
|
+
operation = Fog::Compute::Google::Operations
|
365
|
+
.new(:service => service)
|
366
|
+
.get(data.name, data.zone)
|
367
|
+
operation.wait_for { ready? } unless async
|
368
|
+
reload
|
369
|
+
end
|
370
|
+
|
371
|
+
def set_scheduling(async = true,
|
372
|
+
on_host_maintenance: nil,
|
373
|
+
automatic_restart: nil,
|
374
|
+
preemptible: nil)
|
375
|
+
requires :identity, :zone
|
376
|
+
data = service.set_server_scheduling(
|
377
|
+
identity, zone_name,
|
378
|
+
:on_host_maintenance => on_host_maintenance,
|
379
|
+
:automatic_restart => automatic_restart,
|
380
|
+
:preemptible => preemptible
|
381
|
+
)
|
382
|
+
|
383
|
+
operation = Fog::Compute::Google::Operations
|
384
|
+
.new(:service => service)
|
385
|
+
.get(data.name, data.zone)
|
386
|
+
operation.wait_for { ready? } unless async
|
387
|
+
reload
|
388
|
+
end
|
389
|
+
|
390
|
+
# Set an instance metadata
|
391
|
+
#
|
392
|
+
# @param [Bool] async Perform the operation asyncronously
|
393
|
+
# @param [Hash] new_metadata A new metadata object
|
394
|
+
# Format: {'foo' => 'bar', 'baz'=>'foo'}
|
395
|
+
#
|
396
|
+
# @returns [Fog::Compute::Google::Server] server object
|
397
|
+
def set_metadata(new_metadata = {}, async = true)
|
398
|
+
requires :identity, :zone
|
399
|
+
|
400
|
+
unless new_metadata.is_a?(Hash)
|
401
|
+
raise Fog::Errors::Error.new("Instance metadata should be a hash")
|
402
|
+
end
|
403
|
+
|
404
|
+
# If metadata is presented in {'foo' => 'bar', 'baz'=>'foo'}
|
405
|
+
new_metadata_items = new_metadata.each.map { |k, v| { :key => k.to_s, :value => v.to_s } }
|
406
|
+
|
407
|
+
data = service.set_server_metadata(
|
408
|
+
identity, zone_name, metadata[:fingerprint], new_metadata_items
|
409
|
+
)
|
410
|
+
operation = Fog::Compute::Google::Operations
|
411
|
+
.new(:service => service)
|
412
|
+
.get(data.name, data.zone)
|
413
|
+
operation.wait_for { ready? } unless async
|
414
|
+
reload
|
415
|
+
end
|
416
|
+
|
417
|
+
def set_machine_type(new_machine_type, async = true)
|
418
|
+
requires :identity, :zone
|
419
|
+
|
420
|
+
raise Fog::Errors::Error.new("Instance must be stopped to change machine type") unless stopped?
|
421
|
+
|
422
|
+
data = service.set_server_machine_type(
|
423
|
+
identity, zone_name, new_machine_type
|
424
|
+
)
|
425
|
+
operation = Fog::Compute::Google::Operations
|
426
|
+
.new(:service => service)
|
427
|
+
.get(data.name, data.zone)
|
428
|
+
operation.wait_for { ready? } unless async
|
429
|
+
reload
|
430
|
+
end
|
431
|
+
|
432
|
+
def set_tags(new_tags = [], async = true)
|
433
|
+
requires :identity, :zone
|
434
|
+
|
435
|
+
data = service.set_server_tags(
|
436
|
+
identity, zone_name, tags[:fingerprint], new_tags
|
437
|
+
)
|
438
|
+
operation = Fog::Compute::Google::Operations
|
439
|
+
.new(:service => service)
|
440
|
+
.get(data.name, data.zone)
|
441
|
+
operation.wait_for { ready? } unless async
|
442
|
+
reload
|
443
|
+
end
|
444
|
+
|
445
|
+
# Check if instance is provisioning. On staging vs. provisioning difference:
|
446
|
+
# https://cloud.google.com/compute/docs/instances/checking-instance-status
|
447
|
+
#
|
448
|
+
# @return [TrueClass or FalseClass]
|
449
|
+
def provisioning?
|
450
|
+
status == "PROVISIONING"
|
451
|
+
end
|
452
|
+
|
453
|
+
# Check if instance is staging. On staging vs. provisioning difference:
|
454
|
+
# https://cloud.google.com/compute/docs/instances/checking-instance-status
|
455
|
+
#
|
456
|
+
# @return [TrueClass or FalseClass]
|
457
|
+
def staging?
|
458
|
+
status == "STAGING"
|
459
|
+
end
|
460
|
+
|
461
|
+
# Check if instance is stopped.
|
462
|
+
#
|
463
|
+
# @return [TrueClass or FalseClass]
|
464
|
+
def stopped?
|
465
|
+
status == "TERMINATED"
|
466
|
+
end
|
467
|
+
|
468
|
+
# Check if instance is ready.
|
469
|
+
#
|
470
|
+
# @return [TrueClass or FalseClass]
|
471
|
+
def ready?
|
472
|
+
status == "RUNNING"
|
473
|
+
end
|
474
|
+
|
475
|
+
def zone_name
|
476
|
+
zone.nil? ? nil : zone.split("/")[-1]
|
477
|
+
end
|
478
|
+
|
479
|
+
def add_ssh_key(username, key, async = true)
|
480
|
+
metadata = generate_ssh_key_metadata(username, key)
|
481
|
+
|
482
|
+
data = service.set_server_metadata(
|
483
|
+
identity, zone_name, metadata[:fingerprint], metadata[:items]
|
484
|
+
)
|
485
|
+
|
486
|
+
operation = Fog::Compute::Google::Operations
|
487
|
+
.new(:service => service)
|
488
|
+
.get(data.name, data.zone)
|
489
|
+
operation.wait_for { ready? } unless async
|
490
|
+
reload
|
491
|
+
end
|
492
|
+
|
493
|
+
def reload
|
494
|
+
data = service.get_server(name, zone_name).to_h
|
495
|
+
merge_attributes(data)
|
496
|
+
end
|
497
|
+
|
498
|
+
def map_scopes(scopes)
|
499
|
+
return [] if scopes.nil?
|
500
|
+
scopes.flat_map do |scope|
|
501
|
+
if GCE_SCOPE_ALIASES.key? scope
|
502
|
+
# Expand scope alias to list of related scopes
|
503
|
+
GCE_SCOPE_ALIASES[scope]
|
504
|
+
else
|
505
|
+
[scope_url(scope)]
|
506
|
+
end
|
507
|
+
end
|
508
|
+
end
|
509
|
+
|
510
|
+
def save(username: nil, public_key: nil)
|
511
|
+
requires :name
|
512
|
+
requires :machine_type
|
513
|
+
requires :disks
|
514
|
+
requires :zone
|
515
|
+
|
516
|
+
generate_ssh_key_metadata(self.username, self.public_key) if self.public_key
|
517
|
+
|
518
|
+
# XXX HACK This is a relic of 1.0 change that for some reason added those arguments
|
519
|
+
# to `save` method. This is left in place to keep things backwards-compatible
|
520
|
+
# TODO(2.0): Remove arguments from save
|
521
|
+
generate_ssh_key_metadata(username, public_key) if public_key
|
522
|
+
|
523
|
+
options = attributes.reject { |_, v| v.nil? }
|
524
|
+
|
525
|
+
if service_accounts && service_accounts[0]
|
526
|
+
service_accounts[0][:scopes] = map_scopes(service_accounts[0][:scopes])
|
527
|
+
options[:service_accounts] = service_accounts
|
528
|
+
end
|
529
|
+
|
530
|
+
if attributes[:external_ip]
|
531
|
+
if options[:network_interfaces].nil? || options[:network_interfaces].empty?
|
532
|
+
options[:network_interfaces] = [
|
533
|
+
{
|
534
|
+
:network => "global/networks/#{GOOGLE_COMPUTE_DEFAULT_NETWORK}"
|
535
|
+
}
|
536
|
+
]
|
537
|
+
end
|
538
|
+
|
539
|
+
# Add external IP as default access config if given
|
540
|
+
options[:network_interfaces][0][:access_configs] = [
|
541
|
+
{
|
542
|
+
:name => "External NAT",
|
543
|
+
:type => "ONE_TO_ONE_NAT",
|
544
|
+
:nat_ip => attributes[:external_ip]
|
545
|
+
}
|
546
|
+
]
|
547
|
+
end
|
548
|
+
|
549
|
+
if attributes[:network_ip]
|
550
|
+
options[:network_interfaces][0][:network_ip] = attributes[:network_ip]
|
551
|
+
end
|
552
|
+
|
553
|
+
data = service.insert_server(name, zone_name, options)
|
554
|
+
|
555
|
+
operation = Fog::Compute::Google::Operations
|
556
|
+
.new(:service => service)
|
557
|
+
.get(data.name, data.zone)
|
558
|
+
operation.wait_for { ready? }
|
559
|
+
reload
|
560
|
+
end
|
561
|
+
|
562
|
+
def generate_ssh_key_metadata(username, key)
|
563
|
+
if metadata.nil?
|
564
|
+
self.metadata = Hash.new
|
565
|
+
end
|
566
|
+
metadata[:items] = [] if metadata[:items].nil?
|
567
|
+
metadata_map = Hash[metadata[:items].map { |item| [item[:key], item[:value]] }]
|
568
|
+
|
569
|
+
ssh_keys = metadata_map["ssh-keys"] || metadata_map["sshKeys"] || ""
|
570
|
+
ssh_keys += "\n" unless ssh_keys.empty?
|
571
|
+
ssh_keys += "#{username}:#{ensure_key_comment(key, username)}"
|
572
|
+
|
573
|
+
metadata_map["ssh-keys"] = ssh_keys
|
574
|
+
metadata[:items] = metadata_to_item_list(metadata_map)
|
575
|
+
metadata
|
576
|
+
end
|
577
|
+
|
578
|
+
def ensure_key_comment(key, default_comment = "fog-user")
|
579
|
+
parts = key.strip.split
|
580
|
+
parts << default_comment if parts.size < 3
|
581
|
+
parts.join(" ")
|
582
|
+
end
|
583
|
+
|
584
|
+
def reset_windows_password(user)
|
585
|
+
service.reset_windows_password(:server => self, :user => user)
|
586
|
+
end
|
587
|
+
|
588
|
+
private
|
589
|
+
|
590
|
+
def metadata_to_item_list(metadata)
|
591
|
+
metadata.map { |k, v| { :key => k, :value => v } }
|
592
|
+
end
|
593
|
+
|
594
|
+
def scope_url(scope)
|
595
|
+
if scope.start_with?("https://")
|
596
|
+
scope
|
597
|
+
else
|
598
|
+
"https://www.googleapis.com/auth/#{scope}"
|
599
|
+
end
|
600
|
+
end
|
601
|
+
end
|
602
|
+
end
|
603
|
+
end
|
604
|
+
end
|