fog-google 1.7.1 → 1.8.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (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