fog-google 1.19.0 → 1.24.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (75) hide show
  1. checksums.yaml +4 -4
  2. data/.github/workflows/integration-compute-core.yml +54 -0
  3. data/.github/workflows/integration-compute-instance_groups.yml +55 -0
  4. data/.github/workflows/integration-compute-loadbalancing.yml +54 -0
  5. data/.github/workflows/integration-compute-networking.yml +53 -0
  6. data/.github/workflows/integration-monitoring.yml +54 -0
  7. data/.github/workflows/integration-pubsub.yml +54 -0
  8. data/.github/workflows/integration-sql.yml +54 -0
  9. data/.github/workflows/integration-storage.yml +55 -0
  10. data/.github/workflows/stale.yml +2 -2
  11. data/.github/workflows/unit.yml +7 -2
  12. data/.ruby-version +1 -0
  13. data/CHANGELOG.md +112 -0
  14. data/README.md +3 -3
  15. data/examples/create_instance.rb +1 -1
  16. data/examples/create_instance_and_attach_disk_later.rb +86 -0
  17. data/examples/create_instance_with_attached_disk.rb +1 -1
  18. data/examples/get_list_images.rb +1 -1
  19. data/examples/load-balance.rb +1 -1
  20. data/examples/metadata.rb +1 -1
  21. data/examples/network.rb +1 -1
  22. data/fog-google.gemspec +12 -10
  23. data/lib/fog/compute/google/models/addresses.rb +17 -8
  24. data/lib/fog/compute/google/models/disk_types.rb +17 -7
  25. data/lib/fog/compute/google/models/disks.rb +23 -8
  26. data/lib/fog/compute/google/models/firewalls.rb +11 -2
  27. data/lib/fog/compute/google/models/forwarding_rules.rb +16 -10
  28. data/lib/fog/compute/google/models/global_addresses.rb +11 -2
  29. data/lib/fog/compute/google/models/global_forwarding_rules.rb +11 -2
  30. data/lib/fog/compute/google/models/http_health_checks.rb +12 -3
  31. data/lib/fog/compute/google/models/images.rb +15 -8
  32. data/lib/fog/compute/google/models/instance_group_managers.rb +17 -9
  33. data/lib/fog/compute/google/models/instance_groups.rb +16 -8
  34. data/lib/fog/compute/google/models/instance_templates.rb +12 -3
  35. data/lib/fog/compute/google/models/machine_types.rb +17 -8
  36. data/lib/fog/compute/google/models/networks.rb +12 -3
  37. data/lib/fog/compute/google/models/operations.rb +22 -8
  38. data/lib/fog/compute/google/models/regions.rb +12 -3
  39. data/lib/fog/compute/google/models/routes.rb +12 -3
  40. data/lib/fog/compute/google/models/server.rb +4 -4
  41. data/lib/fog/compute/google/models/servers.rb +23 -9
  42. data/lib/fog/compute/google/models/ssl_certificates.rb +12 -3
  43. data/lib/fog/compute/google/models/subnetworks.rb +16 -8
  44. data/lib/fog/compute/google/models/target_http_proxies.rb +12 -3
  45. data/lib/fog/compute/google/models/target_https_proxies.rb +12 -3
  46. data/lib/fog/compute/google/models/target_instances.rb +16 -8
  47. data/lib/fog/compute/google/models/target_pools.rb +16 -8
  48. data/lib/fog/compute/google/models/url_maps.rb +12 -3
  49. data/lib/fog/compute/google/models/zones.rb +12 -3
  50. data/lib/fog/compute/google/requests/insert_server.rb +1 -1
  51. data/lib/fog/compute/google/requests/stop_server.rb +2 -2
  52. data/lib/fog/google/shared.rb +9 -8
  53. data/lib/fog/google/version.rb +1 -1
  54. data/lib/fog/storage/google_json/models/file.rb +7 -2
  55. data/lib/fog/storage/google_json/real.rb +16 -7
  56. data/lib/fog/storage/google_json/utils.rb +3 -4
  57. data/lib/fog/storage/google_json.rb +1 -1
  58. data/test/helpers/integration_test_helper.rb +3 -3
  59. data/test/integration/compute/core_compute/test_servers.rb +86 -0
  60. data/test/integration/monitoring/test_timeseries.rb +29 -14
  61. data/test/integration/storage/test_objects.rb +1 -0
  62. data/test/unit/compute/test_common_collections.rb +1 -1
  63. data/test/unit/compute/test_common_models.rb +1 -1
  64. data/test/unit/compute/test_disk.rb +26 -0
  65. data/test/unit/compute/test_server.rb +1 -1
  66. data/test/unit/dns/test_common_collections.rb +1 -1
  67. data/test/unit/monitoring/test_comon_collections.rb +1 -1
  68. data/test/unit/pubsub/test_common_collections.rb +1 -1
  69. data/test/unit/sql/test_common_collections.rb +1 -1
  70. data/test/unit/storage/test_common_json_collections.rb +1 -1
  71. data/test/unit/storage/test_common_xml_collections.rb +1 -1
  72. data/test/unit/storage/test_json_requests.rb +9 -1
  73. data/test/unit/storage/test_xml_requests.rb +1 -1
  74. metadata +63 -26
  75. data/.github/workflows/integration.yml +0 -225
@@ -0,0 +1,86 @@
1
+ # All examples presume that you have a ~/.fog credentials file set up.
2
+ # More info on it can be found here: http://fog.io/about/getting_started.html
3
+
4
+ require "bundler"
5
+ Bundler.require(:default, :development)
6
+
7
+ ZONE = "us-central1-f"
8
+ PROJECT = Fog.credentials[:google_project]
9
+
10
+ def example
11
+ p "Connecting to Google API"
12
+ connection = Fog::Compute.new(:provider => "Google")
13
+
14
+ p "Creating disk"
15
+ disk = connection.disks.create(
16
+ :name => "fog-smoke-test-#{Time.now.to_i}",
17
+ :size_gb => 10,
18
+ :zone => ZONE,
19
+ :source_image => "debian-11-bullseye-v20220920"
20
+ )
21
+
22
+ p "Creating a second disk"
23
+ attached_disk = connection.disks.create(
24
+ :name => "fog-smoke-test-#{Time.now.to_i}",
25
+ :size_gb => 10,
26
+ :zone => ZONE
27
+ )
28
+
29
+ p "Waiting for disks to be ready"
30
+ disk.wait_for { ready? }
31
+ attached_disk.wait_for { ready? }
32
+
33
+ p "Creating a server"
34
+ server = connection.servers.create(
35
+ :name => "fog-smoke-test-#{Time.now.to_i}",
36
+ :disks => [disk.attached_disk_obj(boot: true, auto_delete: true)],
37
+ :machine_type => "n1-standard-1",
38
+ :private_key_path => File.expand_path("~/.ssh/id_rsa"),
39
+ :public_key_path => File.expand_path("~/.ssh/id_rsa.pub"),
40
+ :zone => ZONE,
41
+ # Will be simplified, see https://github.com/fog/fog-google/issues/360
42
+ :network_interfaces => [{ :network => "global/networks/default",
43
+ :access_configs => [{
44
+ :name => "External NAT",
45
+ :type => "ONE_TO_ONE_NAT"
46
+ }] }],
47
+ :username => ENV["USER"]
48
+ )
49
+
50
+ p "Attach second disk to the running server"
51
+ device_name = "fog-smoke-test-device-#{Time.now.to_i}"
52
+ # See https://github.com/fog/fog-google/blob/master/lib/fog/compute/google/models/disk.rb#L75-L107
53
+ # See https://github.com/fog/fog-google/blob/master/lib/fog/compute/google/models/server.rb#L35-L50
54
+ config_hash = {
55
+ :device_name => device_name,
56
+ :source => "https://www.googleapis.com/compute/v1/projects/#{PROJECT}/zones/#{ZONE}/disks/#{attached_disk.name}"
57
+ }
58
+ raise "Could not attach second disk" unless connection.attach_disk(server.name, ZONE, config_hash)
59
+
60
+ p "Waiting for disk to be attached"
61
+ attached_disk.wait_for { ! users.nil? && users != []}
62
+
63
+ p "Detach second disk"
64
+ raise "Could not detach second disk" unless connection.detach_disk(server.name, ZONE, device_name)
65
+
66
+ p "Waiting for second disk to be detached"
67
+ attached_disk.wait_for { users.nil? || users == []}
68
+
69
+ p "Deleting server"
70
+ raise "Could not delete server." unless server.destroy
71
+
72
+ p "Destroying second disk"
73
+ raise "Could not delete second disk." unless attached_disk.destroy
74
+
75
+ p "Waiting for second disk to be destroyed"
76
+ begin
77
+ rc = attached_disk.wait_for { status.nil? || status == 'DELETING' }
78
+
79
+ rescue => e
80
+ if e.message !~ /not found/ && e.message !~ /notFound/
81
+ raise e
82
+ end
83
+ end
84
+ end
85
+
86
+ example
@@ -13,7 +13,7 @@ def example
13
13
  :name => "fog-smoke-test-#{Time.now.to_i}",
14
14
  :size_gb => 10,
15
15
  :zone => "us-central1-f",
16
- :source_image => "debian-9-stretch-v20180611"
16
+ :source_image => "debian-11-bullseye-v20220920"
17
17
  )
18
18
 
19
19
  p "Creating a second disk"
@@ -23,7 +23,7 @@ def test
23
23
 
24
24
  puts "Fetching a single image from a global project..."
25
25
  puts "------------------------------------------------"
26
- img = connection.images.get("debian-9-stretch-v20180611")
26
+ img = connection.images.get("debian-11-bullseye-v20220920")
27
27
  raise "Could not GET the image" unless img
28
28
  puts img.inspect
29
29
 
@@ -24,7 +24,7 @@ def test
24
24
  :name => "#{name}-#{i}",
25
25
  :size_gb => 10,
26
26
  :zone_name => zone,
27
- :source_image => "debian-9-stretch-v20180611"
27
+ :source_image => "debian-11-bullseye-v20220920"
28
28
  )
29
29
  disk.wait_for { disk.ready? }
30
30
  rescue
data/examples/metadata.rb CHANGED
@@ -15,7 +15,7 @@ def test
15
15
  :name => name,
16
16
  :size_gb => 10,
17
17
  :zone_name => "us-central1-f",
18
- :source_image => "debian-9-stretch-v20180611"
18
+ :source_image => "debian-11-bullseye-v20220920"
19
19
  )
20
20
 
21
21
  disk.wait_for { disk.ready? }
data/examples/network.rb CHANGED
@@ -24,7 +24,7 @@ def test
24
24
  :name => name,
25
25
  :size_gb => 10,
26
26
  :zone_name => "us-central1-a",
27
- :source_image => "debian-9-stretch-v20180611"
27
+ :source_image => "debian-11-bullseye-v20220920"
28
28
  )
29
29
 
30
30
  disk.wait_for { disk.ready? }
data/fog-google.gemspec CHANGED
@@ -20,24 +20,26 @@ Gem::Specification.new do |spec|
20
20
  # As of 0.1.1
21
21
  spec.required_ruby_version = ">= 2.0"
22
22
 
23
- spec.add_dependency "fog-core", "< 2.3"
23
+ spec.add_dependency "fog-core", "< 2.5"
24
24
  spec.add_dependency "fog-json", "~> 1.2"
25
25
  spec.add_dependency "fog-xml", "~> 0.1.0"
26
26
 
27
- spec.add_dependency "google-apis-storage_v1", "~> 0.6"
28
- spec.add_dependency "google-apis-iamcredentials_v1", "~> 0.6"
29
- spec.add_dependency "google-apis-compute_v1", "~> 0.14"
30
- spec.add_dependency "google-apis-monitoring_v3", "~> 0.12"
31
- spec.add_dependency "google-apis-dns_v1", "~> 0.12"
32
- spec.add_dependency "google-apis-pubsub_v1", "~> 0.7"
33
- spec.add_dependency "google-apis-sqladmin_v1beta4", "~> 0.13"
27
+ spec.add_dependency "google-apis-storage_v1", [">= 0.19", "< 1"]
28
+ spec.add_dependency "google-apis-iamcredentials_v1", "~> 0.15"
29
+ spec.add_dependency "google-apis-compute_v1", "~> 0.53"
30
+ spec.add_dependency "google-apis-monitoring_v3", "~> 0.37"
31
+ spec.add_dependency "google-apis-dns_v1", "~> 0.28"
32
+ spec.add_dependency "google-apis-pubsub_v1", "~> 0.30"
33
+ spec.add_dependency "google-apis-sqladmin_v1beta4", "~> 0.38"
34
34
 
35
- spec.add_dependency "google-cloud-env", "~> 1.2"
35
+ spec.add_dependency "google-cloud-env", ">= 1.2", "< 3.0"
36
+
37
+ spec.add_dependency "addressable", ">= 2.7.0"
36
38
 
37
39
  # Debugger
38
40
  # Locked because pry-byebug is broken with 13+
39
41
  # see: https://github.com/deivid-rodriguez/pry-byebug/issues/343
40
- spec.add_development_dependency "pry", "= 0.13.0"
42
+ spec.add_development_dependency "pry", "= 0.14.2"
41
43
 
42
44
  # Testing gems
43
45
  spec.add_development_dependency "retriable"
@@ -11,16 +11,25 @@ module Fog
11
11
  :order_by => order_by,
12
12
  :page_token => page_token
13
13
  }
14
-
15
- if region
16
- data = service.list_addresses(region, **opts).items || []
17
- else
18
- data = []
19
- service.list_aggregated_addresses(**opts).items.each_value do |scoped_list|
20
- data.concat(scoped_list.addresses) if scoped_list && scoped_list.addresses
14
+ items = []
15
+ next_page_token = nil
16
+ loop do
17
+ if region
18
+ data = service.list_addresses(region, **opts)
19
+ next_items = data.items || []
20
+ items.concat(next_items)
21
+ next_page_token = data.next_page_token
22
+ else
23
+ data = service.list_aggregated_addresses(**opts)
24
+ data.items.each_value do |scoped_list|
25
+ items.concat(scoped_list.addresses) if scoped_list && scoped_list.addresses
26
+ end
27
+ next_page_token = data.next_page_token
21
28
  end
29
+ break if next_page_token.nil? || next_page_token.empty?
30
+ opts[:page_token] = next_page_token
22
31
  end
23
- load(data.map(&:to_h))
32
+ load(items.map(&:to_h))
24
33
  end
25
34
 
26
35
  def get(identity, region = nil)
@@ -12,15 +12,25 @@ module Fog
12
12
  :order_by => order_by,
13
13
  :page_token => page_token
14
14
  }
15
- if zone
16
- data = service.list_disk_types(zone, **opts).items
17
- else
18
- data = []
19
- service.list_aggregated_disk_types(**opts).items.each_value do |scoped_lst|
20
- data.concat(scoped_lst.disk_types) if scoped_lst && scoped_lst.disk_types
15
+ items = []
16
+ next_page_token = nil
17
+ loop do
18
+ if zone
19
+ data = service.list_disk_types(zone, **opts)
20
+ next_items = data.items || []
21
+ items.concat(next_items)
22
+ next_page_token = data.next_page_token
23
+ else
24
+ data = service.list_aggregated_disk_types(**opts)
25
+ data.items.each_value do |scoped_lst|
26
+ items.concat(scoped_lst.disk_types) if scoped_lst && scoped_lst.disk_types
27
+ end
28
+ next_page_token = data.next_page_token
21
29
  end
30
+ break if next_page_token.nil? || next_page_token.empty?
31
+ opts[:page_token] = next_page_token
22
32
  end
23
- load(data.map(&:to_h))
33
+ load(items.map(&:to_h))
24
34
  end
25
35
 
26
36
  def get(identity, zone = nil)
@@ -12,20 +12,34 @@ module Fog
12
12
  :order_by => order_by,
13
13
  :page_token => page_token
14
14
  }
15
- if zone
16
- data = service.list_disks(zone, **opts).items || []
17
- else
18
- data = []
19
- service.list_aggregated_disks(**opts).items.each_value do |scoped_list|
20
- data.concat(scoped_list.disks) if scoped_list.disks
15
+ items = []
16
+ next_page_token = nil
17
+ loop do
18
+ if zone
19
+ data = service.list_disks(zone, **opts)
20
+ next_items = data.items || []
21
+ items.concat(next_items)
22
+ next_page_token = data.next_page_token
23
+ else
24
+ data = service.list_aggregated_disks(**opts)
25
+ data.items.each_value do |scoped_list|
26
+ items.concat(scoped_list.disks) if scoped_list && scoped_list.disks
27
+ end
28
+ next_page_token = data.next_page_token
21
29
  end
30
+ break if next_page_token.nil? || next_page_token.empty?
31
+ opts[:page_token] = next_page_token
22
32
  end
23
- load(data.map(&:to_h))
33
+ load(items.map(&:to_h))
24
34
  end
25
35
 
26
36
  def get(identity, zone = nil)
27
37
  if zone
28
38
  disk = service.get_disk(identity, zone).to_h
39
+
40
+ # Force the hash to contain a :users key so that it will override any :users key in the existing object
41
+ disk[:users] = nil unless disk.include?(:users)
42
+
29
43
  return new(disk)
30
44
  elsif identity
31
45
  response = all(:filter => "name eq #{identity}",
@@ -35,7 +49,8 @@ module Fog
35
49
  end
36
50
  rescue ::Google::Apis::ClientError => e
37
51
  raise e unless e.status_code == 404
38
- nil
52
+ # Return an empty object so that wait_for processes the block
53
+ return new({:status => nil})
39
54
  end
40
55
 
41
56
  # Returns an attached disk configuration hash.
@@ -5,8 +5,17 @@ module Fog
5
5
  model Fog::Compute::Google::Firewall
6
6
 
7
7
  def all(opts = {})
8
- data = service.list_firewalls(**opts).to_h[:items]
9
- load(data || [])
8
+ items = []
9
+ next_page_token = nil
10
+ loop do
11
+ data = service.list_firewalls(**opts)
12
+ next_items = data.to_h[:items] || []
13
+ items.concat(next_items)
14
+ next_page_token = data.next_page_token
15
+ break if next_page_token.nil? || next_page_token.empty?
16
+ opts[:page_token] = next_page_token
17
+ end
18
+ load(items)
10
19
  end
11
20
 
12
21
  def get(identity)
@@ -11,19 +11,25 @@ module Fog
11
11
  :order_by => order_by,
12
12
  :page_token => page_token
13
13
  }
14
-
15
- if region
16
- data = service.list_forwarding_rules(region, **opts).items || []
17
- else
18
- data = []
19
- service.list_aggregated_forwarding_rules(**opts).items
20
- .each_value do |scoped_list|
21
- if scoped_list && scoped_list.forwarding_rules
22
- data.concat(scoped_list.forwarding_rules)
14
+ items = []
15
+ next_page_token = nil
16
+ loop do
17
+ if region
18
+ data = service.list_forwarding_rules(region, **opts)
19
+ next_items = data.items || []
20
+ items.concat(next_items)
21
+ next_page_token = data.next_page_token
22
+ else
23
+ data = service.list_aggregated_forwarding_rules(**opts)
24
+ data.items.each_value do |scoped_list|
25
+ items.concat(scoped_list.forwarding_rules) if scoped_list && scoped_list.forwarding_rules
23
26
  end
27
+ next_page_token = data.next_page_token
24
28
  end
29
+ break if next_page_token.nil? || next_page_token.empty?
30
+ opts[:page_token] = next_page_token
25
31
  end
26
- load(data.map(&:to_h))
32
+ load(items.map(&:to_h))
27
33
  end
28
34
 
29
35
  def get(identity, region = nil)
@@ -5,8 +5,17 @@ module Fog
5
5
  model Fog::Compute::Google::GlobalAddress
6
6
 
7
7
  def all(options = {})
8
- data = service.list_global_addresses(**options).to_h[:items] || []
9
- load(data)
8
+ items = []
9
+ next_page_token = nil
10
+ loop do
11
+ data = service.list_global_addresses(**options)
12
+ next_items = data.to_h[:items] || []
13
+ items.concat(next_items)
14
+ next_page_token = data.next_page_token
15
+ break if next_page_token.nil? || next_page_token.empty?
16
+ options[:page_token] = next_page_token
17
+ end
18
+ load(items)
10
19
  end
11
20
 
12
21
  def get(identity)
@@ -5,8 +5,17 @@ module Fog
5
5
  model Fog::Compute::Google::GlobalForwardingRule
6
6
 
7
7
  def all(opts = {})
8
- data = service.list_global_forwarding_rules(**opts).to_h[:items] || []
9
- load(data)
8
+ items = []
9
+ next_page_token = nil
10
+ loop do
11
+ data = service.list_global_forwarding_rules(**opts)
12
+ next_items = data.to_h[:items] || []
13
+ items.concat(next_items)
14
+ next_page_token = data.next_page_token
15
+ break if next_page_token.nil? || next_page_token.empty?
16
+ opts[:page_token] = next_page_token
17
+ end
18
+ load(items)
10
19
  end
11
20
 
12
21
  def get(identity)
@@ -4,9 +4,18 @@ module Fog
4
4
  class HttpHealthChecks < Fog::Collection
5
5
  model Fog::Compute::Google::HttpHealthCheck
6
6
 
7
- def all(_filters = {})
8
- data = service.list_http_health_checks.to_h[:items] || []
9
- load(data)
7
+ def all(opts = {})
8
+ items = []
9
+ next_page_token = nil
10
+ loop do
11
+ data = service.list_http_health_checks(**opts)
12
+ next_items = data.to_h[:items] || []
13
+ items.concat(next_items)
14
+ next_page_token = data.next_page_token
15
+ break if next_page_token.nil? || next_page_token.empty?
16
+ opts[:page_token] = next_page_token
17
+ end
18
+ load(items)
10
19
  end
11
20
 
12
21
  def get(identity)
@@ -24,12 +24,21 @@ module Fog
24
24
  windows-sql-cloud
25
25
  ).freeze
26
26
 
27
- def all
28
- data = all_projects.map do |project|
27
+ def all(opts = {})
28
+ items = []
29
+ all_projects.each do |project|
29
30
  begin
30
- images = service.list_images(project).items || []
31
- # Keep track of the project in which we found the image(s)
32
- images.map { |img| img.to_h.merge(:project => project) }
31
+ next_page_token = nil
32
+ loop do
33
+ opts[:page_token] = next_page_token
34
+ data = service.list_images(project, **opts)
35
+ images = data.items&.map(&:to_h) || []
36
+ # Keep track of the project in which we found the image(s)
37
+ images.each { |img| img.merge!(:project => project) }
38
+ items.concat(images)
39
+ next_page_token = data.next_page_token
40
+ break if next_page_token.nil? || next_page_token.empty?
41
+ end
33
42
  rescue ::Google::Apis::ClientError => e
34
43
  raise e unless e.status_code == 404
35
44
  # Not everyone has access to every Global Project. Requests
@@ -37,9 +46,7 @@ module Fog
37
46
  next
38
47
  end
39
48
  end
40
- data = data.flatten
41
-
42
- load(data)
49
+ load(items)
43
50
  end
44
51
 
45
52
  # Only return the non-deprecated list of images
@@ -12,17 +12,25 @@ module Fog
12
12
  :order_by => order_by,
13
13
  :page_token => page_token
14
14
  }
15
-
16
- if zone
17
- data = service.list_instance_group_managers(zone, **opts).items || []
18
- else
19
- data = []
20
- service.list_aggregated_instance_group_managers(**opts).items.each_value do |group|
21
- data.concat(group.instance_group_managers) if group.instance_group_managers
15
+ items = []
16
+ next_page_token = nil
17
+ loop do
18
+ if zone
19
+ data = service.list_instance_group_managers(zone, **opts)
20
+ next_items = data.items || []
21
+ items.concat(next_items)
22
+ next_page_token = data.next_page_token
23
+ else
24
+ data = service.list_aggregated_instance_group_managers(**opts)
25
+ data.items.each_value do |group|
26
+ items.concat(group.instance_group_managers) if group && group.instance_group_managers
27
+ end
28
+ next_page_token = data.next_page_token
22
29
  end
30
+ break if next_page_token.nil? || next_page_token.empty?
31
+ opts[:page_token] = next_page_token
23
32
  end
24
-
25
- load(data.map(&:to_h))
33
+ load(items.map(&:to_h))
26
34
  end
27
35
 
28
36
  def get(identity, zone = nil)
@@ -11,17 +11,25 @@ module Fog
11
11
  :order_by => order_by,
12
12
  :page_token => page_token
13
13
  }
14
-
15
- if zone
16
- data = service.list_instance_groups(zone).items || []
17
- else
18
- data = []
19
- service.list_aggregated_instance_groups(opts).items.each_value do |group|
20
- data.concat(group.instance_groups) if group && group.instance_groups
14
+ items = []
15
+ next_page_token = nil
16
+ loop do
17
+ if zone
18
+ data = service.list_instance_groups(zone)
19
+ next_items = data.items || []
20
+ items.concat(next_items)
21
+ else
22
+ data = service.list_aggregated_instance_groups(opts)
23
+ data.items.each_value do |group|
24
+ items.concat(group.instance_groups) if group && group.instance_groups
25
+ end
26
+ next_page_token = data.next_page_token
21
27
  end
28
+ break if next_page_token.nil? || next_page_token.empty?
29
+ opts[:page_token] = next_page_token
22
30
  end
23
31
 
24
- load(data.map(&:to_h))
32
+ load(items.map(&:to_h))
25
33
  end
26
34
 
27
35
  def get(identity, zone = nil)
@@ -4,9 +4,18 @@ module Fog
4
4
  class InstanceTemplates < Fog::Collection
5
5
  model Fog::Compute::Google::InstanceTemplate
6
6
 
7
- def all
8
- data = service.list_instance_templates.items || []
9
- load(data.map(&:to_h))
7
+ def all(opts = {})
8
+ items = []
9
+ next_page_token = nil
10
+ loop do
11
+ data = service.list_instance_templates(**opts)
12
+ next_items = data.items || []
13
+ items.concat(next_items)
14
+ next_page_token = data.next_page_token
15
+ break if next_page_token.nil? || next_page_token.empty?
16
+ opts[:page_token] = next_page_token
17
+ end
18
+ load(items.map(&:to_h))
10
19
  end
11
20
 
12
21
  def get(identity)
@@ -11,16 +11,25 @@ module Fog
11
11
  :order_by => order_by,
12
12
  :page_token => page_token
13
13
  }
14
-
15
- if zone
16
- data = service.list_machine_types(zone, **opts).items
17
- else
18
- data = []
19
- service.list_aggregated_machine_types(**opts).items.each_value do |scoped_list|
20
- data.concat(scoped_list.machine_types) if scoped_list && scoped_list.machine_types
14
+ items = []
15
+ next_page_token = nil
16
+ loop do
17
+ if zone
18
+ data = service.list_machine_types(zone, **opts)
19
+ next_items = data.items || []
20
+ items.concat(next_items)
21
+ next_page_token = data.next_page_token
22
+ else
23
+ data = service.list_aggregated_machine_types(**opts)
24
+ data.items.each_value do |scoped_list|
25
+ items.concat(scoped_list.machine_types) if scoped_list && scoped_list.machine_types
26
+ end
27
+ next_page_token = data.next_page_token
21
28
  end
29
+ break if next_page_token.nil? || next_page_token.empty?
30
+ opts[:page_token] = next_page_token
22
31
  end
23
- load(data.map(&:to_h) || [])
32
+ load(items.map(&:to_h) || [])
24
33
  end
25
34
 
26
35
  def get(identity, zone = nil)
@@ -4,9 +4,18 @@ module Fog
4
4
  class Networks < Fog::Collection
5
5
  model Fog::Compute::Google::Network
6
6
 
7
- def all
8
- data = service.list_networks.to_h[:items]
9
- load(data || [])
7
+ def all(opts = {})
8
+ items = []
9
+ next_page_token = nil
10
+ loop do
11
+ data = service.list_networks(**opts)
12
+ next_items = data.to_h[:items] || []
13
+ items.concat(next_items)
14
+ next_page_token = data.next_page_token
15
+ break if next_page_token.nil? || next_page_token.empty?
16
+ opts[:page_token] = next_page_token
17
+ end
18
+ load(items)
10
19
  end
11
20
 
12
21
  def get(identity)
@@ -12,16 +12,30 @@ module Fog
12
12
  :order_by => order_by,
13
13
  :page_token => page_token
14
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]
15
+ items = []
16
+ next_page_token = nil
17
+ loop do
18
+ if zone
19
+ data = service.list_zone_operations(zone, **opts)
20
+ next_items = data.to_h[:items] || []
21
+ items.concat(next_items)
22
+ next_page_token = data.next_page_token
23
+ elsif region
24
+ data = service.list_region_operations(region, **opts)
25
+ next_items = data.to_h[:items] || []
26
+ items.concat(next_items)
27
+ next_page_token = data.next_page_token
28
+ else
29
+ data = service.list_global_operations(**opts)
30
+ next_items = data.to_h[:items] || []
31
+ items.concat(next_items)
32
+ next_page_token = data.next_page_token
33
+ end
34
+ break if next_page_token.nil? || next_page_token.empty?
35
+ opts[:page_token] = next_page_token
22
36
  end
23
37
 
24
- load(data || [])
38
+ load(items)
25
39
  end
26
40
 
27
41
  def get(identity, zone = nil, region = nil)