-
Notifications
You must be signed in to change notification settings - Fork 146
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Merge pull request #244 from cloud66/master
support for SSL certificates, https proxies and global IP addresses
- Loading branch information
Showing
20 changed files
with
593 additions
and
4 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,88 @@ | ||
module Fog | ||
module Compute | ||
class Google | ||
## | ||
# Represents an Address resource | ||
# | ||
# @see https://developers.google.com/compute/docs/reference/latest/addresses | ||
class GlobalAddress < Fog::Model | ||
identity :name | ||
|
||
attribute :kind | ||
attribute :id | ||
attribute :address | ||
attribute :creation_timestamp, :aliases => "creationTimestamp" | ||
attribute :description | ||
attribute :self_link, :aliases => "selfLink" | ||
attribute :status | ||
attribute :users | ||
|
||
IN_USE_STATE = "IN_USE".freeze | ||
RESERVED_STATE = "RESERVED".freeze | ||
|
||
def server | ||
return nil if !in_use? || users.nil? || users.empty? | ||
|
||
service.servers.get(users.first.split("/")[-1]) | ||
end | ||
|
||
def server=(server) | ||
requires :identity | ||
server ? associate(server) : disassociate | ||
end | ||
|
||
def save | ||
requires :identity | ||
|
||
data = service.insert_global_address(identity, attributes) | ||
operation = Fog::Compute::Google::Operations.new(:service => service).get(data.body["name"], nil) | ||
operation.wait_for { !pending? } | ||
reload | ||
end | ||
|
||
def destroy(async = true) | ||
requires :identity | ||
|
||
data = service.delete_global_address(identity) | ||
operation = Fog::Compute::Google::Operations.new(:service => service).get(data.body["name"], nil) | ||
operation.wait_for { ready? } unless async | ||
operation | ||
end | ||
|
||
def reload | ||
requires :identity | ||
|
||
data = collection.get(identity) | ||
merge_attributes(data.attributes) | ||
self | ||
end | ||
|
||
def in_use? | ||
status == IN_USE_STATE | ||
end | ||
|
||
private | ||
|
||
def associate(server) | ||
nic = server.network_interfaces.first["name"] | ||
data = service.add_server_access_config(server.name, server.zone_name, nic, :address => address) | ||
Fog::Compute::Google::Operations.new(:service => service).get(data.body["name"], data.body["zone"]) | ||
end | ||
|
||
def disassociate | ||
return nil if !in_use? || users.nil? || users.empty? | ||
|
||
# An address can only be associated with one server at a time | ||
server = service.servers.get(users.first.split("/")[-1]) | ||
nic = server.network_interfaces.first["name"] | ||
unless server.network_interfaces.first["accessConfigs"].nil? || server.network_interfaces.first["accessConfigs"].empty? | ||
access_config = server.network_interfaces.first["accessConfigs"].first["name"] | ||
data = service.delete_server_access_config(server.name, server.zone_name, nic, | ||
:access_config => access_config) | ||
Fog::Compute::Google::Operations.new(:service => service).get(data.body["name"], data.body["zone"]) | ||
end | ||
end | ||
end | ||
end | ||
end | ||
end |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,45 @@ | ||
module Fog | ||
module Compute | ||
class Google | ||
class GlobalAddresses < Fog::Collection | ||
model Fog::Compute::Google::GlobalAddress | ||
|
||
def all(_filters = {}) | ||
data = [] | ||
service.list_aggregated_addresses.body["items"].each_value do |region| | ||
data.concat(region["addresses"]) if region["addresses"] | ||
end | ||
load(data) | ||
end | ||
|
||
def get(identity) | ||
if address = service.get_global_address(identity).body | ||
new(address) | ||
end | ||
rescue Fog::Errors::NotFound | ||
nil | ||
end | ||
|
||
def get_by_ip_address(ip_address) | ||
addresses = service.list_aggregated_addresses(:filter => "address eq .*#{ip_address}").body["items"] | ||
address = addresses.each_value.select { |region| region.key?("addresses") } | ||
|
||
return nil if address.empty? | ||
new(address.first["addresses"].first) | ||
end | ||
|
||
def get_by_name(ip_name) | ||
names = service.list_aggregated_addresses(:filter => "name eq .*#{ip_name}").body["items"] | ||
name = names.each_value.select { |region| region.key?("addresses") } | ||
|
||
return nil if name.empty? | ||
new(name.first["addresses"].first) | ||
end | ||
|
||
def get_by_ip_address_or_name(ip_address_or_name) | ||
get_by_ip_address(ip_address_or_name) || get_by_name(ip_address_or_name) | ||
end | ||
end | ||
end | ||
end | ||
end |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,35 @@ | ||
module Fog | ||
module Compute | ||
class Google | ||
## | ||
# Represents a Subnetwork resource | ||
# | ||
# @see https://cloud.google.com/compute/docs/reference/latest/sslCertificates | ||
class SslCertificate < Fog::Model | ||
identity :name | ||
attribute :id | ||
attribute :creation_timestamp, :aliases => "creationTimestamp" | ||
attribute :description | ||
attribute :self_link, :aliases => "selfLink" | ||
attribute :certificate | ||
attribute :private_key, :aliases => "privateKey" | ||
|
||
def save | ||
requires :identity, :certificate, :private_key | ||
data = service.insert_ssl_certificate(identity, certificate, private_key, attributes) | ||
operation = Fog::Compute::Google::Operations.new(:service => service).get(data.body["name"], nil) | ||
operation.wait_for { !pending? } | ||
reload | ||
end | ||
|
||
def destroy(async = true) | ||
requires :identity | ||
data = service.delete_ssl_certificate(identity) | ||
operation = Fog::Compute::Google::Operations.new(:service => service).get(data.body["name"], nil) | ||
operation.wait_for { ready? } unless async | ||
operation | ||
end | ||
end | ||
end | ||
end | ||
end |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,22 @@ | ||
module Fog | ||
module Compute | ||
class Google | ||
class SslCertificates < Fog::Collection | ||
model Fog::Compute::Google::SslCertificate | ||
|
||
def get(certificate_name) | ||
if certificate = service.get_ssl_certificate(certificate_name).body | ||
new(certificate) | ||
end | ||
rescue Fog::Errors::NotFound | ||
nil | ||
end | ||
|
||
def all(_filters = {}) | ||
data = service.list_ssl_certificates.body["items"] || [] | ||
load(data) | ||
end | ||
end | ||
end | ||
end | ||
end |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,22 @@ | ||
module Fog | ||
module Compute | ||
class Google | ||
class TargetHttpsProxies < Fog::Collection | ||
model Fog::Compute::Google::TargetHttpsProxy | ||
|
||
def all(_filters = {}) | ||
data = service.list_target_https_proxies.body["items"] || [] | ||
load(data) | ||
end | ||
|
||
def get(identity) | ||
if target_https_proxy = service.get_target_https_proxy(identity).body | ||
new(target_https_proxy) | ||
end | ||
rescue Fog::Errors::NotFound | ||
nil | ||
end | ||
end | ||
end | ||
end | ||
end |
Oops, something went wrong.