Skip to content

Commit

Permalink
Merge pull request fog#2494 from maestrodev/gce-v1
Browse files Browse the repository at this point in the history
[google|compute] Update to Google Compute Engine API v1
  • Loading branch information
icco committed Dec 22, 2013
2 parents 71d42d8 + dd72a93 commit e3d283e
Show file tree
Hide file tree
Showing 21 changed files with 253 additions and 107 deletions.
64 changes: 50 additions & 14 deletions lib/fog/google/compute.rb
Expand Up @@ -76,15 +76,19 @@ module Shared

def shared_initialize(options = {})
@project = options[:google_project]
@api_version = 'v1beta16'
@api_version = 'v1'
end

def build_excon_response(body, status=200)
response = Excon::Response.new
response.body = body
if response.body and response.body["error"]
response.status = response.body["error"]["code"]
msg = response.body["error"]["errors"].map{|error| error["message"]}.join(", ")
if response.body["error"]["errors"]
msg = response.body["error"]["errors"].map{|error| error["message"]}.join(", ")
else
msg = "Error [#{response.body["error"]["code"]}]: #{response.body["error"]["message"] || "GCE didn't return an error message"}"
end
case response.status
when 404
raise Fog::Errors::NotFound.new(msg)
Expand Down Expand Up @@ -144,7 +148,6 @@ def self.data(api_version)
"name" => "centos-6-2-v20120621",
"description" => "CentOS 6.2; Created Thu, 21 Jun 2012 14:22:21 +0000",
"sourceType" => "RAW",
"preferredKernel" => "https://www.googleapis.com/compute/#{api_version}/projects/google/global/kernels/gce-20120621",
"rawDisk" => {
"containerType" => "TAR",
"source" => ""
Expand All @@ -163,7 +166,6 @@ def self.data(api_version)
"name" => "centos-6-v20120912",
"description" => "CentOS 6; Created Wed, 12 Sep 2012 00:00:00 +0000",
"sourceType" => "RAW",
"preferredKernel" => "https://www.googleapis.com/compute/#{api_version}/projects/google/global/kernels/gce-v20120912",
"rawDisk" => {
"containerType" => "TAR",
"source" => ""
Expand All @@ -182,7 +184,6 @@ def self.data(api_version)
"name" => "centos-6-v20121106",
"description" => "SCSI-enabled CentOS 6; Created Tue, 06 Nov 2012 00:00:00 +0000",
"sourceType" => "RAW",
"preferredKernel" => "https://www.googleapis.com/compute/#{api_version}/projects/google/global/kernels/gce-v20121106",
"rawDisk" => {
"containerType" => "TAR",
"source" => ""
Expand All @@ -202,7 +203,6 @@ def self.data(api_version)
"name" => "debian-6-squeeze-v20130816",
"description" => "Debian GNU/Linux 6.0.7 (squeeze) built on 2013-08-16",
"sourceType" => "RAW",
"preferredKernel" => "https://www.googleapis.com/compute/#{api_version}/projects/google/global/kernels/gce-v20130813",
"rawDisk" => {
"containerType" => "TAR",
"source" => ""
Expand All @@ -217,7 +217,6 @@ def self.data(api_version)
"name" => "debian-7-wheezy-v20130816",
"description" => "Debian GNU/Linux 7.1 (wheezy) built on 2013-08-16",
"sourceType" => "RAW",
"preferredKernel" => "https://www.googleapis.com/compute/#{api_version}/projects/google/global/kernels/gce-v20130813",
"rawDisk" => {
"containerType" => "TAR",
"source" => ""
Expand All @@ -232,12 +231,26 @@ def self.data(api_version)
"name" => "debian-7-wheezy-v20131014",
"description" => "Debian GNU/Linux 7.1 (wheezy) built on 2013-10-14",
"sourceType" => "RAW",
"preferredKernel" => "https://www.googleapis.com/compute/#{api_version}/projects/google/global/kernels/gce-v20130813",
"rawDisk" => {
"containerType" => "TAR",
"source" => ""
},
"status" => "READY"
},
"debian-7-wheezy-v20131120" => {
"kind" => "compute#image",
"selfLink" => "https://www.googleapis.com/compute/#{api_version}/projects/debian-cloud/global/images/debian-7-wheezy-v20131120",
"id" => "17312518942796567788",
"creationTimestamp" => "2013-11-25T15:17:00.436-08:00",
"name" => "debian-7-wheezy-v20131120",
"description" => "Debian GNU/Linux 7.2 (wheezy) built on 2013-11-20",
"sourceType" => "RAW",
"rawDisk" => {
"containerType" => "TAR",
"source" => ""
},
"status" => "READY",
"archiveSizeBytes" => "341857472"
}
}
}
Expand All @@ -252,7 +265,6 @@ def self.data(api_version)
"name" => "centos-6-v20130813",
"description" => "SCSI-enabled CentOS 6; Created Tue, 13 Aug 2013 00:00:00 +0000",
"sourceType" => "RAW",
"preferredKernel" => "https://www.googleapis.com/compute/#{api_version}/projects/google/global/kernels/gce-v20130813",
"rawDisk" => {
"containerType" => "TAR",
"source" => ""
Expand All @@ -273,8 +285,6 @@ def self.data(api_version)
"name" => "fog-1380196541",
"tags" => { "fingerprint" => "42WmSpB8rSM=" },
"machineType" => "https://www.googleapis.com/compute/#{api_version}/projects/#{key}/zones/us-central1-a/machineTypes/n1-standard-1",
"image" => "https://www.googleapis.com/compute/#{api_version}/projects/centos-cloud/global/images/centos-6-v20130813",
"kernel" => "https://www.googleapis.com/compute/#{api_version}/projects/google/global/kernels/gce-v20130813",
"canIpForward" => false,
"networkInterfaces" => [
{
Expand All @@ -295,8 +305,11 @@ def self.data(api_version)
{
"kind" => "compute#attachedDisk",
"index" => 0,
"type" => "SCRATCH",
"mode" => "READ_WRITE"
"type" => "PERSISTENT",
"mode" => "READ_WRITE",
"source" => "https://www.googleapis.com/compute/#{api_version}/projects/#{key}/zones/us-central1-a/disks/fog-1",
"deviceName" => "persistent-disk-0",
"boot" => true
}
],
"metadata" => {
Expand Down Expand Up @@ -771,7 +784,30 @@ def self.data(api_version)
}
end,
:images => {},
:disks => {},
:disks => {
"fog-1" => {
"kind" => "compute#disk",
"id" => "3338131294770784461",
"creationTimestamp" => "2013-12-18T19:47:10.583-08:00",
"zone" => "https://www.googleapis.com/compute/#{api_version}/projects/#{key}/zones/us-central1-a",
"status" => "READY",
"name" => "fog-1",
"sizeGb" => "10",
"selfLink" => "https://www.googleapis.com/compute/#{api_version}/projects/#{key}/zones/us-central1-a/disks/fog-1",
"sourceImage" => "https://www.googleapis.com/compute/#{api_version}/projects/debian-cloud/global/images/debian-7-wheezy-v20131120",
"sourceImageId" => "17312518942796567788"
},
"fog-2" => {
"kind" => "compute#disk",
"id" => "3338131294770784462",
"creationTimestamp" => "2013-12-18T19:47:10.583-08:00",
"zone" => "https://www.googleapis.com/compute/#{api_version}/projects/#{key}/zones/us-central1-a",
"status" => "READY",
"name" => "fog-2",
"sizeGb" => "10",
"selfLink" => "https://www.googleapis.com/compute/#{api_version}/projects/#{key}/zones/us-central1-a/disks/fog-1"
}
},
:operations => {}
}
end
Expand Down
13 changes: 12 additions & 1 deletion lib/fog/google/examples/create.rb
@@ -1,9 +1,20 @@
def test
connection = Fog::Compute.new({ :provider => "Google" })

name = "fog-smoke-test-#{Time.now.to_i}"

disk = connection.disks.create({
:name => name,
:size_gb => 10,
:zone_name => 'us-central1-a',
:source_image => 'debian-7-wheezy-v20131120',
})

disk.wait_for { disk.ready? }

server = connection.servers.create(defaults = {
:name => "fog-smoke-test-#{Time.now.to_i}",
:image_name => "debian-7-wheezy-v20130522",
:disks => [disk],
:machine_type => "n1-standard-1",
:zone_name => "us-central1-a",
:private_key_path => File.expand_path("~/.ssh/id_rsa"),
Expand Down
15 changes: 13 additions & 2 deletions lib/fog/google/examples/eric-fail.rb
@@ -1,9 +1,20 @@
def test
connection = Fog::Compute.new({ :provider => "Google" })

name = "fog-smoke-test-#{Time.now.to_i}"

disk = connection.disks.create({
:name => name,
:size_gb => 10,
:zone_name => 'us-central1-a',
:source_image => 'debian-7-wheezy-v20131120',
})

disk.wait_for { disk.ready? }

server = connection.servers.create(defaults = {
:name => "fog-smoke-test-#{Time.now.to_i}",
:image_name => "debian-7-wheezy-v20130617",
:name => name,
:disks => [disk],
:machine_type => "n1-standard-1",
:zone_name => "us-central1-a",
:private_key_path => File.expand_path("~/.ssh/id_rsa"),
Expand Down
1 change: 0 additions & 1 deletion lib/fog/google/examples/image_create.rb
Expand Up @@ -10,7 +10,6 @@ def test
return if rawdisk[:source].nil?

img = connection.image.create(:name => 'test-image',
:preferred_kernel => 'gce-v20130603',
:description => 'Test image (via fog)',
:raw_disk => rawdisk)

Expand Down
3 changes: 1 addition & 2 deletions lib/fog/google/examples/launch_micro_instance.rb
Expand Up @@ -14,8 +14,7 @@ def test
:machine_type => "f1-micro",
:zone_name => "us-central1-a",
:disks => [ disk.get_as_boot_disk(true) ],
:user => ENV['USER'],
:kernel => 'gce-v20130522',
:user => ENV['USER']
}

server = connection.servers.bootstrap params
Expand Down
16 changes: 14 additions & 2 deletions lib/fog/google/examples/metadata.rb
@@ -1,8 +1,20 @@
def test
connection = Fog::Compute.new({ :provider => "Google" })

name = "fog-smoke-test-#{Time.now.to_i}"

disk = connection.disks.create({
:name => name,
:size_gb => 10,
:zone_name => 'us-central1-a',
:source_image => 'debian-7-wheezy-v20131120',
})

disk.wait_for { disk.ready? }

server = connection.servers.create(defaults = {
:name => "fog-#{Time.now.to_i}",
:image_name => "debian-7-wheezy-v20130522",
:name => name,
:disks => [disk],
:machine_type => "n1-standard-1",
:zone_name => "us-central1-a",
:private_key_path => File.expand_path("~/.ssh/id_rsa"),
Expand Down
15 changes: 13 additions & 2 deletions lib/fog/google/examples/network.rb
Expand Up @@ -4,9 +4,20 @@ def test
# we create a new private network
connection.insert_network('my-private-network', '10.240.0.0/16')

name = "fog-smoke-test-#{Time.now.to_i}"

disk = connection.disks.create({
:name => name,
:size_gb => 10,
:zone_name => 'us-central1-a',
:source_image => 'debian-7-wheezy-v20131120',
})

disk.wait_for { disk.ready? }

server = connection.servers.create({
:name => "fog-smoke-test-#{Time.now.to_i}",
:image_name => "debian-7-wheezy-v20130522",
:name => name,
:disks => [disk],
:machine_type => "n1-standard-1",
:zone_name => "us-central1-a",
:private_key_path => File.expand_path("~/.ssh/id_rsa"),
Expand Down
21 changes: 12 additions & 9 deletions lib/fog/google/models/compute/disk.rb
Expand Up @@ -25,7 +25,7 @@ def save
requires :zone_name

options = {}
if source_image.nil?
if source_image.nil? && !source_snapshot.nil?
options['sourceSnapshot'] = source_snapshot
end

Expand Down Expand Up @@ -57,20 +57,23 @@ def zone
end
end

def get_as_boot_disk(writable=true)
def get_object(writable=true, boot=false, device_name=nil)
mode = writable ? 'READ_WRITE' : 'READ_ONLY'
return {
'name' => name,
'type' => 'PERSISTENT',
'boot' => true,
'source' => self_link,
'mode' => mode
}
'boot' => boot,
'source' => self_link,
'mode' => mode,
'deviceName' => device_name,
'type' => 'PERSISTENT'
}.select { |k, v| !v.nil? }
end

def get_as_boot_disk(writable=true)
get_object(writable, true)
end

def ready?
data = service.get_disk(self.name, self.zone_name).body
data['zone_name'] = self.zone_name
self.merge_attributes(data)
self.status == RUNNING_STATE
end
Expand Down
1 change: 1 addition & 0 deletions lib/fog/google/models/compute/flavor.rb
Expand Up @@ -16,6 +16,7 @@ class Flavor < Fog::Model
:aliases => 'maximumPersistentDisks'
attribute :maximum_persistent_disks_size,
:aliases => 'maximumPersistentDisksSizeGb'
attribute :self_link, :aliases => 'selfLink'

end

Expand Down
13 changes: 10 additions & 3 deletions lib/fog/google/models/compute/image.rb
Expand Up @@ -8,10 +8,11 @@ class Image < Fog::Model

identity :name

attribute :id
attribute :kind
attribute :self_link, :aliases => 'selfLink'
attribute :creation_timestamp, :aliases => 'creationTimestamp'
attribute :description
attribute :preferred_kernel, :aliases => 'preferredKernel'

# This attribute is not available in the representation of an
# 'image' returned by the GCE servser (see GCE API). However,
Expand All @@ -30,6 +31,14 @@ class Image < Fog::Model

attribute :status

def preferred_kernel=(args)
Fog::Logger.deprecation("preferred_kernel= is no longer used [light_black](#{caller.first})[/]")
end
def preferred_kernel
Fog::Logger.deprecation("preferred_kernel is no longer used [light_black](#{caller.first})[/]")
nil
end

def reload
requires :name

Expand All @@ -41,11 +50,9 @@ def reload

def save
requires :name
requires :preferred_kernel
requires :raw_disk

options = {
'preferredKernel' => preferred_kernel,
'rawDisk' => raw_disk,
'description' => description,
}
Expand Down

0 comments on commit e3d283e

Please sign in to comment.