fog-google 1.7.1 → 1.8.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (76) hide show
  1. checksums.yaml +4 -4
  2. data/.rubocop.yml +3 -0
  3. data/.travis.yml +0 -3
  4. data/CHANGELOG.md +45 -1
  5. data/CONTRIBUTING.md +11 -5
  6. data/README.md +0 -2
  7. data/fog-google.gemspec +4 -5
  8. data/lib/fog/bin/google.rb +4 -0
  9. data/lib/fog/compute/google/models/addresses.rb +9 -3
  10. data/lib/fog/compute/google/models/backend_services.rb +3 -2
  11. data/lib/fog/compute/google/models/disk_types.rb +5 -6
  12. data/lib/fog/compute/google/models/disks.rb +10 -4
  13. data/lib/fog/compute/google/models/firewalls.rb +3 -2
  14. data/lib/fog/compute/google/models/forwarding_rules.rb +8 -12
  15. data/lib/fog/compute/google/models/global_addresses.rb +3 -2
  16. data/lib/fog/compute/google/models/global_forwarding_rules.rb +3 -2
  17. data/lib/fog/compute/google/models/http_health_checks.rb +4 -3
  18. data/lib/fog/compute/google/models/images.rb +23 -12
  19. data/lib/fog/compute/google/models/instance_group_managers.rb +10 -7
  20. data/lib/fog/compute/google/models/instance_groups.rb +21 -15
  21. data/lib/fog/compute/google/models/instance_templates.rb +3 -2
  22. data/lib/fog/compute/google/models/machine_types.rb +13 -4
  23. data/lib/fog/compute/google/models/networks.rb +3 -2
  24. data/lib/fog/compute/google/models/operations.rb +8 -8
  25. data/lib/fog/compute/google/models/projects.rb +3 -2
  26. data/lib/fog/compute/google/models/regions.rb +3 -2
  27. data/lib/fog/compute/google/models/routes.rb +3 -2
  28. data/lib/fog/compute/google/models/servers.rb +7 -7
  29. data/lib/fog/compute/google/models/snapshots.rb +5 -4
  30. data/lib/fog/compute/google/models/ssl_certificates.rb +4 -3
  31. data/lib/fog/compute/google/models/subnetworks.rb +13 -7
  32. data/lib/fog/compute/google/models/target_http_proxies.rb +3 -2
  33. data/lib/fog/compute/google/models/target_https_proxies.rb +3 -2
  34. data/lib/fog/compute/google/models/target_instances.rb +8 -8
  35. data/lib/fog/compute/google/models/target_pools.rb +7 -10
  36. data/lib/fog/compute/google/models/url_maps.rb +3 -2
  37. data/lib/fog/compute/google/models/zones.rb +4 -2
  38. data/lib/fog/compute/google/real.rb +2 -0
  39. data/lib/fog/compute/google/requests/list_aggregated_instance_groups.rb +1 -2
  40. data/lib/fog/dns/google/real.rb +1 -0
  41. data/lib/fog/google/models/sql/instances.rb +4 -1
  42. data/lib/fog/google/monitoring/real.rb +1 -0
  43. data/lib/fog/google/pubsub/real.rb +1 -0
  44. data/lib/fog/google/shared.rb +15 -1
  45. data/lib/fog/google/sql/real.rb +1 -0
  46. data/lib/fog/google/version.rb +1 -1
  47. data/lib/fog/storage/google_json/real.rb +2 -0
  48. data/test/helpers/integration_test_helper.rb +2 -0
  49. data/test/helpers/test_collection.rb +26 -3
  50. data/test/integration/compute/core_compute/test_client_options.rb +12 -0
  51. data/test/integration/compute/core_compute/test_disk_types.rb +9 -0
  52. data/test/integration/compute/core_compute/test_images.rb +21 -0
  53. data/test/integration/compute/core_compute/test_machine_types.rb +13 -0
  54. data/test/integration/compute/core_compute/test_operations.rb +19 -1
  55. data/test/integration/compute/instance_groups/test_instance_group_managers.rb +1 -1
  56. data/test/integration/factories/addresses_factory.rb +4 -0
  57. data/test/integration/factories/collection_factory.rb +1 -1
  58. data/test/integration/factories/disks_factory.rb +4 -0
  59. data/test/integration/factories/forwarding_rules_factory.rb +4 -0
  60. data/test/integration/factories/images_factory.rb +4 -0
  61. data/test/integration/factories/instance_group_manager_factory.rb +8 -0
  62. data/test/integration/factories/instance_groups_factory.rb +4 -0
  63. data/test/integration/factories/servers_factory.rb +8 -0
  64. data/test/integration/factories/subnetworks_factory.rb +4 -0
  65. data/test/integration/factories/target_instances_factory.rb +4 -0
  66. data/test/integration/factories/target_pools_factory.rb +4 -0
  67. data/test/unit/compute/test_common_collections.rb +19 -8
  68. data/test/unit/compute/test_common_models.rb +10 -11
  69. data/test/unit/compute/test_server.rb +2 -1
  70. data/test/unit/dns/test_common_collections.rb +43 -0
  71. data/test/unit/monitoring/test_comon_collections.rb +44 -0
  72. data/test/unit/pubsub/test_common_collections.rb +35 -0
  73. data/test/unit/sql/test_common_collections.rb +46 -0
  74. data/test/unit/storage/test_common_json_collections.rb +38 -0
  75. data/test/unit/storage/test_common_xml_collections.rb +39 -0
  76. metadata +33 -27
@@ -10,8 +10,9 @@ module Fog
10
10
  end
11
11
 
12
12
  def get(identity)
13
- if instance_template = service.get_instance_template(identity)
14
- new(instance_template.to_h)
13
+ if identity
14
+ instance_template = service.get_instance_template(identity).to_h
15
+ return new(instance_template)
15
16
  end
16
17
  rescue ::Google::Apis::ClientError => e
17
18
  raise e unless e.status_code == 404
@@ -23,10 +23,19 @@ module Fog
23
23
  load(data.map(&:to_h) || [])
24
24
  end
25
25
 
26
- def get(identity, zone)
27
- machine_type = service.get_machine_type(identity, zone).to_h
28
- return nil if machine_type.nil?
29
- new(machine_type)
26
+ def get(identity, zone = nil)
27
+ if zone
28
+ machine_type = service.get_machine_type(identity, zone).to_h
29
+ return new(machine_type)
30
+ elsif identity
31
+ # This isn't very functional since it just shows the first available
32
+ # machine type globally, but needed due to overall compatibility
33
+ # See: https://github.com/fog/fog-google/issues/352
34
+ response = all(:filter => "name eq #{identity}",
35
+ :max_results => 1)
36
+ machine_type = response.first unless response.empty?
37
+ return machine_type
38
+ end
30
39
  rescue ::Google::Apis::ClientError => e
31
40
  raise e unless e.status_code == 404
32
41
  nil
@@ -10,8 +10,9 @@ module Fog
10
10
  end
11
11
 
12
12
  def get(identity)
13
- if network = service.get_network(identity).to_h
14
- new(network)
13
+ if identity
14
+ network = service.get_network(identity).to_h
15
+ return new(network)
15
16
  end
16
17
  rescue ::Google::Apis::ClientError => e
17
18
  raise e unless e.status_code == 404
@@ -16,7 +16,7 @@ module Fog
16
16
  if zone
17
17
  data = service.list_zone_operations(zone, opts).to_h[:items]
18
18
  elsif region
19
- data = service.list_region_operations(regions, opts).to_h[:items]
19
+ data = service.list_region_operations(region, opts).to_h[:items]
20
20
  else
21
21
  data = service.list_global_operations(opts).to_h[:items]
22
22
  end
@@ -26,15 +26,15 @@ module Fog
26
26
 
27
27
  def get(identity, zone = nil, region = nil)
28
28
  if !zone.nil?
29
- response = service.get_zone_operation(zone, identity)
29
+ operation = service.get_zone_operation(zone, identity).to_h
30
+ return new(operation)
30
31
  elsif !region.nil?
31
- response = service.get_region_operation(region, identity)
32
- else
33
- response = service.get_global_operation(identity)
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)
34
37
  end
35
-
36
- return nil if response.nil?
37
- new(response.to_h)
38
38
  rescue ::Google::Apis::ClientError => e
39
39
  raise e unless e.status_code == 404
40
40
  nil
@@ -5,8 +5,9 @@ module Fog
5
5
  model Fog::Compute::Google::Project
6
6
 
7
7
  def get(identity)
8
- if project = service.get_project(identity).to_h
9
- new(project)
8
+ if identity
9
+ project = service.get_project(identity).to_h
10
+ return new(project)
10
11
  end
11
12
  rescue ::Google::Apis::ClientError => e
12
13
  raise e unless e.status_code == 404
@@ -10,8 +10,9 @@ module Fog
10
10
  end
11
11
 
12
12
  def get(identity)
13
- if region = service.get_region(identity).to_h
14
- new(region)
13
+ if identity
14
+ region = service.get_region(identity).to_h
15
+ return new(region)
15
16
  end
16
17
  rescue ::Google::Apis::ClientError => e
17
18
  raise e unless e.status_code == 404
@@ -10,8 +10,9 @@ module Fog
10
10
  end
11
11
 
12
12
  def get(identity)
13
- if route = service.get_route(identity).to_h
14
- new(route)
13
+ if identity
14
+ route = service.get_route(identity).to_h
15
+ return new(route)
15
16
  end
16
17
  rescue ::Google::Apis::ClientError => e
17
18
  raise e unless e.status_code == 404
@@ -28,15 +28,15 @@ module Fog
28
28
 
29
29
  # TODO: This method needs to take self_links as well as names
30
30
  def get(identity, zone = nil)
31
- response = nil
32
31
  if zone
33
- response = service.get_server(identity, zone).to_h
34
- else
35
- server = all(:filter => "name eq .*#{identity}").first
36
- response = server.attributes if server
32
+ server = service.get_server(identity, zone).to_h
33
+ return new(server)
34
+ elsif identity
35
+ response = all(:filter => "name eq .*#{identity}",
36
+ :max_results => 1)
37
+ server = response.first unless response.empty?
38
+ return server
37
39
  end
38
- return nil if response.nil?
39
- new(response)
40
40
  rescue ::Google::Apis::ClientError => e
41
41
  raise e unless e.status_code == 404
42
42
  nil
@@ -17,10 +17,11 @@ module Fog
17
17
  load(items)
18
18
  end
19
19
 
20
- def get(snap_id)
21
- response = service.get_snapshot(snap_id)
22
- return nil if response.nil?
23
- new(response.to_h)
20
+ def get(identity)
21
+ if identity
22
+ snapshot = service.get_snapshot(identity).to_h
23
+ return new(snapshot)
24
+ end
24
25
  rescue ::Google::Apis::ClientError => e
25
26
  raise e unless e.status_code == 404
26
27
  nil
@@ -4,9 +4,10 @@ module Fog
4
4
  class SslCertificates < Fog::Collection
5
5
  model Fog::Compute::Google::SslCertificate
6
6
 
7
- def get(certificate_name)
8
- if certificate = service.get_ssl_certificate(certificate_name)
9
- new(certificate.to_h)
7
+ def get(identity)
8
+ if identity
9
+ ssl_certificate = service.get_ssl_certificate(identity).to_h
10
+ return new(ssl_certificate)
10
11
  end
11
12
  rescue ::Google::Apis::ClientError => e
12
13
  raise e unless e.status_code == 404
@@ -12,20 +12,26 @@ module Fog
12
12
  :page_token => page_token
13
13
  }
14
14
 
15
- if region.nil?
15
+ if region
16
+ data = service.list_subnetworks(region, filters).to_h[:items] || []
17
+ else
16
18
  data = []
17
19
  service.list_aggregated_subnetworks(filters).to_h[:items].each_value do |region_obj|
18
20
  data.concat(region_obj[:subnetworks]) if region_obj[:subnetworks]
19
21
  end
20
- else
21
- data = service.list_subnetworks(region, filters).to_h[:items]
22
22
  end
23
- load(data || [])
23
+ load(data)
24
24
  end
25
25
 
26
- def get(identity, region)
27
- if subnetwork = service.get_subnetwork(identity, region).to_h
28
- new(subnetwork)
26
+ def get(identity, region = nil)
27
+ if region
28
+ subnetwork = service.get_subnetwork(identity, region).to_h
29
+ return new(subnetwork)
30
+ elsif identity
31
+ response = all(:filter => "name eq #{identity}",
32
+ :max_results => 1)
33
+ subnetwork = response.first unless response.empty?
34
+ return subnetwork
29
35
  end
30
36
  rescue ::Google::Apis::ClientError => e
31
37
  raise e unless e.status_code == 404
@@ -10,8 +10,9 @@ module Fog
10
10
  end
11
11
 
12
12
  def get(identity)
13
- if target_http_proxy = service.get_target_http_proxy(identity).to_h
14
- new(target_http_proxy)
13
+ if identity
14
+ target_http_proxy = service.get_target_http_proxy(identity).to_h
15
+ return new(target_http_proxy)
15
16
  end
16
17
  rescue ::Google::Apis::ClientError => e
17
18
  raise e unless e.status_code == 404
@@ -10,8 +10,9 @@ module Fog
10
10
  end
11
11
 
12
12
  def get(identity)
13
- if target_https_proxy = service.get_target_https_proxy(identity).to_h
14
- new(target_https_proxy)
13
+ if identity
14
+ target_https_proxy = service.get_target_https_proxy(identity).to_h
15
+ return new(target_https_proxy)
15
16
  end
16
17
  rescue ::Google::Apis::ClientError => e
17
18
  raise e unless e.status_code == 404
@@ -26,16 +26,16 @@ module Fog
26
26
  load(data)
27
27
  end
28
28
 
29
- def get(target_instance, zone = nil)
30
- response = nil
29
+ def get(identity, zone = nil)
31
30
  if zone
32
- response = service.get_target_instance(target_instance, zone).to_h
33
- else
34
- response = all(:filter => "name eq #{target_instance}").first
35
- response = response.attributes unless response.nil?
31
+ target_instance = service.get_target_instance(target_instance, zone).to_h
32
+ return new(target_instance)
33
+ elsif identity
34
+ response = all(:filter => "name eq #{identity}",
35
+ :max_results => 1)
36
+ target_instance = response.first unless response.empty?
37
+ return target_instance
36
38
  end
37
- return nil if response.nil?
38
- new(response)
39
39
  rescue ::Google::Apis::ClientError => e
40
40
  raise e unless e.status_code == 404
41
41
  nil
@@ -25,17 +25,14 @@ module Fog
25
25
  end
26
26
 
27
27
  def get(identity, region = nil)
28
- response = nil
29
- if region.nil?
30
- data = all(:filter => "name eq #{identity}").first
31
- unless data.nil?
32
- response = data.attributes
33
- end
34
- else
35
- response = service.get_target_pool(identity, region).to_h
28
+ if region
29
+ target_pool = service.get_target_pool(identity, region).to_h
30
+ return new(target_pool)
31
+ elsif identity
32
+ response = all(:filter => "name eq #{identity}")
33
+ target_pool = response.first unless response.empty?
34
+ return target_pool
36
35
  end
37
- return nil if response.nil?
38
- new(response)
39
36
  rescue ::Google::Apis::ClientError => e
40
37
  raise e unless e.status_code = 404
41
38
  nil
@@ -10,8 +10,9 @@ module Fog
10
10
  end
11
11
 
12
12
  def get(identity)
13
- if url_map = service.get_url_map(identity).to_h
14
- new(url_map)
13
+ if identity
14
+ url_map = service.get_url_map(identity).to_h
15
+ return new(url_map)
15
16
  end
16
17
  rescue ::Google::Apis::ClientError => e
17
18
  raise e unless e.status_code == 404
@@ -10,8 +10,10 @@ module Fog
10
10
  end
11
11
 
12
12
  def get(identity)
13
- data = service.get_zone(identity).to_h
14
- new(data)
13
+ if identity
14
+ zone = service.get_zone(identity).to_h
15
+ new(zone)
16
+ end
15
17
  rescue ::Google::Apis::ClientError => e
16
18
  raise e unless e.status_code == 404
17
19
  nil
@@ -13,6 +13,8 @@ module Fog
13
13
 
14
14
  initialize_google_client(options)
15
15
  @compute = ::Google::Apis::ComputeV1::ComputeService.new
16
+ apply_client_options(@compute, options)
17
+
16
18
  @extra_global_projects = options[:google_extra_global_projects] || []
17
19
  end
18
20
  end
@@ -9,8 +9,7 @@ module Fog
9
9
 
10
10
  class Real
11
11
  def list_aggregated_instance_groups(options = {})
12
- @compute.list_aggregated_instance_groups(@project,
13
- :filter => options[:filter])
12
+ @compute.list_aggregated_instance_groups(@project, options)
14
13
  end
15
14
  end
16
15
  end
@@ -11,6 +11,7 @@ module Fog
11
11
  options[:google_api_scope_url] = GOOGLE_DNS_API_SCOPE_URLS.join(" ")
12
12
  initialize_google_client(options)
13
13
  @dns = ::Google::Apis::DnsV1::DnsService.new
14
+ apply_client_options(@dns, options)
14
15
  end
15
16
  end
16
17
  end
@@ -23,7 +23,10 @@ module Fog
23
23
  # @return [Fog::Google::SQL::Instance] Instance resource
24
24
  def get(instance_id)
25
25
  instance = service.get_instance(instance_id).to_h
26
- if instance
26
+ # XXX if we pass `nil` to get() it returns empty DB object with
27
+ # kind set to "sql#instancesList"
28
+ # see https://github.com/google/google-api-ruby-client/issues/699
29
+ if instance[:kind].eql?("sql#instance")
27
30
  new(instance)
28
31
  end
29
32
  rescue ::Google::Apis::ClientError => e
@@ -12,6 +12,7 @@ module Fog
12
12
 
13
13
  initialize_google_client(options)
14
14
  @monitoring = ::Google::Apis::MonitoringV3::MonitoringService.new
15
+ apply_client_options(@monitoring, options)
15
16
  end
16
17
  end
17
18
  end
@@ -13,6 +13,7 @@ module Fog
13
13
 
14
14
  @client = initialize_google_client(options)
15
15
  @pubsub = ::Google::Apis::PubsubV1::PubsubService.new
16
+ apply_client_options(@pubsub, options)
16
17
  end
17
18
  end
18
19
  end
@@ -30,7 +30,7 @@ module Fog
30
30
  # @option options [String] :app_name The app name to set in the user agent
31
31
  # @option options [String] :app_version The app version to set in the user agent
32
32
  # @option options [Google::APIClient] :google_client Existing Google API Client
33
- # @option options [Hash] :google_client_options A hash to send adition options to Google API Client
33
+ # @option options [Hash] :google_client_options A hash to send additional options to Google API Client
34
34
  # @return [Google::APIClient] Google API Client
35
35
  # @raises [ArgumentError] If there is any missing argument
36
36
  def initialize_google_client(options)
@@ -119,6 +119,20 @@ module Fog
119
119
  auth
120
120
  end
121
121
 
122
+ ##
123
+ # Applies given options to the client instance
124
+ #
125
+ # @param [Google::Apis::Core::BaseService] service API service client instance
126
+ # @param [Hash] google_client_options Service client options to apply
127
+ # @param [Hash] _ignored Rest of the options (for convenience, ignored)
128
+ # @return [void]
129
+ def apply_client_options(service, google_client_options: nil, **_ignored)
130
+ return if google_client_options.nil? || google_client_options.empty?
131
+ (service.client_options.members & google_client_options.keys).each do |option|
132
+ service.client_options[option] = google_client_options[option]
133
+ end
134
+ end
135
+
122
136
  ##
123
137
  # Executes a request and wraps it in a result object
124
138
  #
@@ -13,6 +13,7 @@ module Fog
13
13
 
14
14
  initialize_google_client(options)
15
15
  @sql = ::Google::Apis::SqladminV1beta4::SQLAdminService.new
16
+ apply_client_options(@sql, options)
16
17
  end
17
18
  end
18
19
  end
@@ -1,5 +1,5 @@
1
1
  module Fog
2
2
  module Google
3
- VERSION = "1.7.1".freeze
3
+ VERSION = "1.8.0".freeze
4
4
  end
5
5
  end
@@ -15,6 +15,8 @@ module Fog
15
15
 
16
16
  @client = initialize_google_client(options)
17
17
  @storage_json = ::Google::Apis::StorageV1::StorageService.new
18
+ apply_client_options(@storage_json, options)
19
+
18
20
  @storage_json.client_options.open_timeout_sec = options[:open_timeout_sec] if options[:open_timeout_sec]
19
21
  @storage_json.client_options.read_timeout_sec = options[:read_timeout_sec] if options[:read_timeout_sec]
20
22
  @storage_json.client_options.send_timeout_sec = options[:send_timeout_sec] if options[:send_timeout_sec]
@@ -17,6 +17,8 @@ TEST_REGION = "us-central1".freeze
17
17
  TEST_SIZE_GB = 10
18
18
  TEST_MACHINE_TYPE = "n1-standard-1".freeze
19
19
  TEST_IMAGE = "debian-9-stretch-v20180611".freeze
20
+ TEST_IMAGE_PROJECT = "debian-cloud".freeze
21
+ TEST_IMAGE_FAMILY = "debian-9".freeze
20
22
 
21
23
  # XXX This depends on a public image in gs://fog-test-bucket; there may be a better way to do this
22
24
  # The image was created like so: https://cloud.google.com/compute/docs/images#export_an_image_to_google_cloud_storage
@@ -13,8 +13,26 @@ module TestCollection
13
13
  assert_includes @subject.all.map(&:identity), one.identity
14
14
  assert_includes @subject.all.map(&:identity), two.identity
15
15
 
16
- assert_equal one.identity, @factory.get(one.identity).identity
17
- assert_equal two.identity, @factory.get(two.identity).identity
16
+ assert_equal one.identity, @subject.get(one.identity).identity
17
+ assert_equal two.identity, @subject.get(two.identity).identity
18
+
19
+ # Some factories that have scoped parameters (zone, region) have a special
20
+ # `get` method defined in the factory to pass the correct parameters in
21
+ if @factory.respond_to?(:get)
22
+ assert_equal one.identity, @factory.get(one.identity).identity
23
+ assert_equal two.identity, @factory.get(two.identity).identity
24
+ end
25
+
26
+ # Some factories that have scoped parameters (zone, region) have a special
27
+ # `all` method defined in the factory to pass the correct parameters in
28
+ if @factory.respond_to?(:all)
29
+ subject_list = @subject.all
30
+ scoped_subject_list = @factory.all
31
+
32
+ # Assert that whatever .all(scope) returns is a subset of .all
33
+ assert(scoped_subject_list.all? { |x| subject_list.include? x },
34
+ "Output of @factory.all must be a subset of @subject.all")
35
+ end
18
36
 
19
37
  one.destroy
20
38
  two.destroy
@@ -24,13 +42,18 @@ module TestCollection
24
42
  end
25
43
 
26
44
  def test_get_returns_nil_if_resource_does_not_exist
27
- assert_nil @factory.get("fog-test-fake-identity")
45
+ assert_nil @factory.get("fog-test-fake-identity") if @factory.respond_to?(:get)
46
+ assert_nil @subject.get("fog-test-fake-identity")
28
47
  end
29
48
 
30
49
  def test_enumerable
31
50
  assert_respond_to @subject, :each
32
51
  end
33
52
 
53
+ def test_nil_get
54
+ assert_nil @subject.get(nil)
55
+ end
56
+
34
57
  def teardown
35
58
  @factory.cleanup
36
59
  end