Skip to content

Commit 5470452

Browse files
committed
Refactor compute get methods
This should fix both fog#33 and fog#352 for compute
1 parent 2e25d1c commit 5470452

31 files changed

+159
-125
lines changed

lib/fog/compute/google/models/addresses.rb

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -23,9 +23,15 @@ def all(region: nil, filter: nil, max_results: nil, order_by: nil, page_token: n
2323
load(data.map(&:to_h))
2424
end
2525

26-
def get(identity, region)
27-
if address = service.get_address(identity, region).to_h
28-
new(address)
26+
def get(identity, region = nil)
27+
if region
28+
address = service.get_address(identity, region).to_h
29+
return new(address)
30+
elsif identity
31+
response = all(:filter => "name eq #{identity}",
32+
:max_results => 1)
33+
address = response.first unless response.empty?
34+
return address
2935
end
3036
rescue ::Google::Apis::ClientError => e
3137
raise e unless e.status_code == 404

lib/fog/compute/google/models/backend_services.rb

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,8 +10,9 @@ def all(_filters = {})
1010
end
1111

1212
def get(identity)
13-
if backend_service = service.get_backend_service(identity)
14-
new(backend_service.to_h)
13+
if identity
14+
backend_service = service.get_backend_service(identity).to_h
15+
return new(backend_service)
1516
end
1617
rescue ::Google::Apis::ClientError => e
1718
raise e unless e.status_code == 404

lib/fog/compute/google/models/disk_types.rb

Lines changed: 5 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -24,15 +24,14 @@ def all(zone: nil, filter: nil, max_results: nil,
2424
end
2525

2626
def get(identity, zone = nil)
27-
response = nil
2827
if zone
29-
response = service.get_disk_type(identity, zone).to_h
28+
disk_type = service.get_disk_type(identity, zone).to_h
29+
return new(disk_type)
3030
else
31-
disk_types = all(:filter => "name eq .*#{identity}")
32-
response = disk_types.first.attributes unless disk_types.empty?
31+
response = all(:filter => "name eq .*#{identity}")
32+
disk_type = response.first unless response.empty?
33+
return disk_type
3334
end
34-
return nil if response.nil?
35-
new(response)
3635
rescue ::Google::Apis::ClientError => e
3736
raise e unless e.status_code == 404
3837
nil

lib/fog/compute/google/models/disks.rb

Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -23,10 +23,16 @@ def all(zone: nil, filter: nil, max_results: nil, order_by: nil,
2323
load(data.map(&:to_h))
2424
end
2525

26-
def get(identity, zone)
27-
response = service.get_disk(identity, zone)
28-
return nil if response.nil?
29-
new(response.to_h)
26+
def get(identity, zone = nil)
27+
if zone
28+
disk = service.get_disk(identity, zone).to_h
29+
return new(disk)
30+
elsif identity
31+
response = all(:filter => "name eq #{identity}",
32+
:max_results => 1)
33+
disk = response.first unless response.empty?
34+
return disk
35+
end
3036
rescue ::Google::Apis::ClientError => e
3137
raise e unless e.status_code == 404
3238
nil

lib/fog/compute/google/models/firewalls.rb

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,8 +10,9 @@ def all(opts = {})
1010
end
1111

1212
def get(identity)
13-
if firewall = service.get_firewall(identity)
14-
new(firewall.to_h)
13+
if identity
14+
firewall = service.get_firewall(identity).to_h
15+
return new(firewall)
1516
end
1617
rescue ::Google::Apis::ClientError => e
1718
raise e unless e.status_code == 404

lib/fog/compute/google/models/forwarding_rules.rb

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -29,18 +29,16 @@ def all(region: nil, filter: nil, max_results: nil,
2929
end
3030

3131
def get(identity, region = nil)
32-
response = nil
3332
if region
34-
response = service.get_forwarding_rule(identity, region).to_h
33+
forwarding_rule = service.get_forwarding_rule(identity, region).to_h
34+
return new(forwarding_rule)
3535
elsif identity
3636
response = all(
3737
:filter => "name eq #{identity}", :max_results => 1
3838
).first
39-
response = response.attributes unless response.nil?
39+
forwarding_rule = response.first unless response.empty?
40+
return forwarding_rule
4041
end
41-
42-
return nil if response.nil?
43-
new(response)
4442
end
4543
end
4644
end

lib/fog/compute/google/models/global_addresses.rb

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,8 +10,9 @@ def all(options = {})
1010
end
1111

1212
def get(identity)
13-
if address = service.get_global_address(identity).to_h
14-
new(address)
13+
if identity
14+
address = service.get_global_address(identity).to_h
15+
return new(address)
1516
end
1617
rescue ::Google::Apis::ClientError => e
1718
raise e unless e.status_code == 404

lib/fog/compute/google/models/global_forwarding_rules.rb

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,8 +10,9 @@ def all(opts = {})
1010
end
1111

1212
def get(identity)
13-
if rule = service.get_global_forwarding_rule(identity).to_h
14-
new(rule)
13+
if identity
14+
rule = service.get_global_forwarding_rule(identity).to_h
15+
return new(rule)
1516
end
1617
rescue ::Google::Apis::ClientError => e
1718
raise e unless e.status_code == 404

lib/fog/compute/google/models/http_health_checks.rb

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -10,9 +10,10 @@ def all(_filters = {})
1010
end
1111

1212
def get(identity)
13-
response = service.get_http_health_check(identity)
14-
return nil if response.nil?
15-
new(response.to_h)
13+
if identity
14+
http_health_check = service.get_http_health_check(identity).to_h
15+
return new(http_health_check)
16+
end
1617
rescue ::Google::Apis::ClientError => e
1718
raise e unless e.status_code == 404
1819
nil

lib/fog/compute/google/models/images.rb

Lines changed: 14 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -47,21 +47,22 @@ def current
4747

4848
def get(identity, project = nil)
4949
project.nil? ? projects = all_projects : projects = [project]
50-
data = nil
51-
projects.each do |proj|
52-
begin
53-
data = service.get_image(identity, proj).to_h
54-
data[:project] = proj
55-
rescue ::Google::Apis::ClientError => e
56-
next if e.status_code == 404
57-
break
58-
else
59-
break
50+
if identity
51+
projects.each do |proj|
52+
begin
53+
response = service.get_image(identity, proj).to_h
54+
# TODO: Remove this - see #405
55+
response[:project] = proj
56+
image = response
57+
return new(image)
58+
rescue ::Google::Apis::ClientError => e
59+
next if e.status_code == 404
60+
break
61+
else
62+
break
63+
end
6064
end
6165
end
62-
63-
return nil if data.nil?
64-
new(data)
6566
end
6667

6768
def get_from_family(family, project = nil)

lib/fog/compute/google/models/instance_group_managers.rb

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -26,11 +26,13 @@ def all(zone: nil, filter: nil, max_results: nil,
2626

2727
def get(identity, zone = nil)
2828
if zone
29-
if instance_group_manager = service.get_instance_group_manager(identity, zone)
30-
new(instance_group_manager.to_h)
31-
end
32-
else
33-
all(:filter => "name eq .*#{identity}").first
29+
instance_group_manager = service.get_instance_group_manager(identity, zone).to_h
30+
return new(instance_group_manager)
31+
elsif identity
32+
response = all(:filter => "name eq .*#{identity}",
33+
:max_results => 1)
34+
instance_group_manager = response.first unless response.empty?
35+
return instance_group_manager
3436
end
3537
rescue ::Google::Apis::ClientError => e
3638
raise e unless e.status_code == 404

lib/fog/compute/google/models/instance_groups.rb

Lines changed: 8 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -18,16 +18,14 @@ def all(filters = {})
1818
end
1919

2020
def get(identity, zone = nil)
21-
if zone.nil?
22-
zones = service.list_aggregated_instance_groups(:filter => "name eq .*#{identity}").items
23-
instance_groups = zones.each_value.map(&:instance_groups).compact.first
24-
if instance_groups
25-
zone = instance_groups.first.zone.split("/")[-1]
26-
end
27-
end
28-
29-
if instance_group = service.get_instance_group(identity, zone)
30-
new(instance_group.to_h)
21+
if zone
22+
instance_group = service.get_instance_group(identity, zone).to_h
23+
new(instance_group)
24+
elsif identity
25+
response = all(:filter => "name eq #{identity}",
26+
:max_results => 1)
27+
instance_group = response.first unless response.empty?
28+
return instance_group
3129
end
3230
rescue ::Google::Apis::ClientError => e
3331
raise e unless e.status_code == 404

lib/fog/compute/google/models/instance_templates.rb

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,8 +10,9 @@ def all
1010
end
1111

1212
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)
1516
end
1617
rescue ::Google::Apis::ClientError => e
1718
raise e unless e.status_code == 404

lib/fog/compute/google/models/machine_types.rb

Lines changed: 13 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -23,10 +23,19 @@ def all(zone: nil, filter: nil, max_results: nil, order_by: nil, page_token: nil
2323
load(data.map(&:to_h) || [])
2424
end
2525

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
3039
rescue ::Google::Apis::ClientError => e
3140
raise e unless e.status_code == 404
3241
nil

lib/fog/compute/google/models/networks.rb

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,8 +10,9 @@ def all
1010
end
1111

1212
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)
1516
end
1617
rescue ::Google::Apis::ClientError => e
1718
raise e unless e.status_code == 404

lib/fog/compute/google/models/operations.rb

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -26,15 +26,15 @@ def all(zone: nil, region: nil, filter: nil, max_results: nil,
2626

2727
def get(identity, zone = nil, region = nil)
2828
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)
3031
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)
3437
end
35-
36-
return nil if response.nil?
37-
new(response.to_h)
3838
rescue ::Google::Apis::ClientError => e
3939
raise e unless e.status_code == 404
4040
nil

lib/fog/compute/google/models/projects.rb

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,8 +5,9 @@ class Projects < Fog::Collection
55
model Fog::Compute::Google::Project
66

77
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)
1011
end
1112
rescue ::Google::Apis::ClientError => e
1213
raise e unless e.status_code == 404

lib/fog/compute/google/models/regions.rb

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,8 +10,9 @@ def all
1010
end
1111

1212
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)
1516
end
1617
rescue ::Google::Apis::ClientError => e
1718
raise e unless e.status_code == 404

lib/fog/compute/google/models/routes.rb

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,8 +10,9 @@ def all
1010
end
1111

1212
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)
1516
end
1617
rescue ::Google::Apis::ClientError => e
1718
raise e unless e.status_code == 404

lib/fog/compute/google/models/servers.rb

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -28,15 +28,15 @@ def all(zone: nil, filter: nil, max_results: nil,
2828

2929
# TODO: This method needs to take self_links as well as names
3030
def get(identity, zone = nil)
31-
response = nil
3231
if zone
33-
response = service.get_server(identity, zone).to_h
34-
elseif identity
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
3739
end
38-
return nil if response.nil?
39-
new(response)
4040
rescue ::Google::Apis::ClientError => e
4141
raise e unless e.status_code == 404
4242
nil

lib/fog/compute/google/models/snapshots.rb

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -17,10 +17,11 @@ def all
1717
load(items)
1818
end
1919

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
2425
rescue ::Google::Apis::ClientError => e
2526
raise e unless e.status_code == 404
2627
nil

lib/fog/compute/google/models/ssl_certificates.rb

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4,9 +4,10 @@ class Google
44
class SslCertificates < Fog::Collection
55
model Fog::Compute::Google::SslCertificate
66

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(certificate_name).to_h
10+
return new(ssl_certificate)
1011
end
1112
rescue ::Google::Apis::ClientError => e
1213
raise e unless e.status_code == 404

0 commit comments

Comments
 (0)