mirror of
https://github.com/fog/fog.git
synced 2022-11-09 13:51:43 -05:00
Merge pull request #2193 from maestrodev/google-mock
[google] Add mock data
This commit is contained in:
commit
1771c4910b
11 changed files with 932 additions and 62 deletions
|
@ -61,19 +61,702 @@ module Fog
|
|||
model :snapshot
|
||||
collection :snapshots
|
||||
|
||||
module Shared
|
||||
attr_reader :project
|
||||
|
||||
def build_excon_response(body)
|
||||
response = Excon::Response.new
|
||||
response.body = body
|
||||
if response.body["error"]
|
||||
response.status = response.body["error"]["code"]
|
||||
|
||||
response.body["error"]["errors"].each do |error|
|
||||
raise Fog::Errors::Error.new(error["message"])
|
||||
end
|
||||
else
|
||||
response.status = 200
|
||||
end
|
||||
response
|
||||
end
|
||||
|
||||
def backoff_if_unfound(&block)
|
||||
retries_remaining = 10
|
||||
begin
|
||||
result = block.call
|
||||
rescue Exception => msg
|
||||
if msg.to_s.include? 'was not found' and retries_remaining > 0
|
||||
retries_remaining -= 1
|
||||
sleep 0.1
|
||||
retry
|
||||
else
|
||||
raise msg
|
||||
end
|
||||
end
|
||||
result
|
||||
end
|
||||
end
|
||||
|
||||
class Mock
|
||||
include Collections
|
||||
include Shared
|
||||
|
||||
def initialize(options)
|
||||
Fog::Mock::not_implemented
|
||||
def initialize(options={})
|
||||
@project = options[:google_project]
|
||||
end
|
||||
|
||||
def build_response(params={})
|
||||
body = params[:body] || {}
|
||||
build_excon_response(body)
|
||||
end
|
||||
|
||||
def self.data
|
||||
@data ||= Hash.new do |hash, key|
|
||||
case key
|
||||
when 'google'
|
||||
hash[key] = {
|
||||
:images => {
|
||||
"centos-6-2-v20120621" => {
|
||||
"kind" => "compute#image",
|
||||
"selfLink" => "https://www.googleapis.com/compute/v1beta15/projects/google/global/images/centos-6-2-v20120621",
|
||||
"id" => "12920641029336858796",
|
||||
"creationTimestamp" => "2012-06-21T22:59:56.392-07:00",
|
||||
"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/v1beta15/projects/google/global/kernels/gce-20120621",
|
||||
"rawDisk" => {
|
||||
"containerType" => "TAR",
|
||||
"source" => ""
|
||||
},
|
||||
"deprecated" => {
|
||||
"state" => "DELETED",
|
||||
"replacement" => "https://www.googleapis.com/compute/v1beta15/projects/google/global/images/centos-6-v20130104"
|
||||
},
|
||||
"status" => "READY"
|
||||
},
|
||||
"centos-6-v20120912" => {
|
||||
"kind" => "compute#image",
|
||||
"selfLink" => "https://www.googleapis.com/compute/v1beta15/projects/google/global/images/centos-6-v20120912",
|
||||
"id" => "12994279803511049620",
|
||||
"creationTimestamp" => "2012-09-18T08:52:47.584-07:00",
|
||||
"name" => "centos-6-v20120912",
|
||||
"description" => "CentOS 6; Created Wed, 12 Sep 2012 00:00:00 +0000",
|
||||
"sourceType" => "RAW",
|
||||
"preferredKernel" => "https://www.googleapis.com/compute/v1beta15/projects/google/global/kernels/gce-v20120912",
|
||||
"rawDisk" => {
|
||||
"containerType" => "TAR",
|
||||
"source" => ""
|
||||
},
|
||||
"deprecated" => {
|
||||
"state" => "DEPRECATED",
|
||||
"replacement" => "https://www.googleapis.com/compute/v1beta15/projects/google/global/images/centos-6-v20130104"
|
||||
},
|
||||
"status" => "READY"
|
||||
},
|
||||
"centos-6-v20121106" => {
|
||||
"kind" => "compute#image",
|
||||
"selfLink" => "https://www.googleapis.com/compute/v1beta15/projects/google/global/images/centos-6-v20121106",
|
||||
"id" => "13037720516378381209",
|
||||
"creationTimestamp" => "2012-11-09T11:40:41.079-08:00",
|
||||
"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/v1beta15/projects/google/global/kernels/gce-v20121106",
|
||||
"rawDisk" => {
|
||||
"containerType" => "TAR",
|
||||
"source" => ""
|
||||
},
|
||||
"status" => "READY"
|
||||
}
|
||||
}
|
||||
}
|
||||
when 'debian-cloud'
|
||||
hash[key] = {
|
||||
:images => {
|
||||
"debian-6-squeeze-v20130816" => {
|
||||
"kind" => "compute#image",
|
||||
"selfLink" => "https://www.googleapis.com/compute/v1beta15/projects/debian-cloud/global/images/debian-6-squeeze-v20130816",
|
||||
"id" => "14841592146580482051",
|
||||
"creationTimestamp" => "2013-09-04T13:21:53.292-07:00",
|
||||
"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/v1beta15/projects/google/global/kernels/gce-v20130813",
|
||||
"rawDisk" => {
|
||||
"containerType" => "TAR",
|
||||
"source" => ""
|
||||
},
|
||||
"status" => "READY"
|
||||
},
|
||||
"debian-7-wheezy-v20130816" => {
|
||||
"kind" => "compute#image",
|
||||
"selfLink" => "https://www.googleapis.com/compute/v1beta15/projects/debian-cloud/global/images/debian-7-wheezy-v20130816",
|
||||
"id" => "4213305957435180899",
|
||||
"creationTimestamp" => "2013-09-04T13:24:30.479-07:00",
|
||||
"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/v1beta15/projects/google/global/kernels/gce-v20130813",
|
||||
"rawDisk" => {
|
||||
"containerType" => "TAR",
|
||||
"source" => ""
|
||||
},
|
||||
"status" => "READY"
|
||||
}
|
||||
}
|
||||
}
|
||||
when 'centos-cloud'
|
||||
hash[key] = {
|
||||
:images => {
|
||||
"centos-6-v20130813" => {
|
||||
"kind" => "compute#image",
|
||||
"selfLink" => "https://www.googleapis.com/compute/v1beta15/projects/centos-cloud/global/images/centos-6-v20130813",
|
||||
"id" => "4670523370938782739",
|
||||
"creationTimestamp" => "2013-08-19T11:56:47.004-07:00",
|
||||
"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/v1beta15/projects/google/global/kernels/gce-v20130813",
|
||||
"rawDisk" => {
|
||||
"containerType" => "TAR",
|
||||
"source" => ""
|
||||
},
|
||||
"status" => "READY"
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
hash[key] = {
|
||||
:servers => {
|
||||
"fog-1" => {
|
||||
"kind" => "compute#instance",
|
||||
"id" => "1361932147851415727",
|
||||
"creationTimestamp" => "2013-09-26T04:55:43.881-07:00",
|
||||
"zone" => "https://www.googleapis.com/compute/v1beta15/projects/#{key}/zones/us-central1-a",
|
||||
"status" => "RUNNING",
|
||||
"name" => "fog-1380196541",
|
||||
"tags" => { "fingerprint" => "42WmSpB8rSM=" },
|
||||
"machineType" => "https://www.googleapis.com/compute/v1beta15/projects/#{key}/zones/us-central1-a/machineTypes/n1-standard-1",
|
||||
"image" => "https://www.googleapis.com/compute/v1beta15/projects/centos-cloud/global/images/centos-6-v20130813",
|
||||
"kernel" => "https://www.googleapis.com/compute/v1beta15/projects/google/global/kernels/gce-v20130813",
|
||||
"canIpForward" => false,
|
||||
"networkInterfaces" => [
|
||||
{
|
||||
"network" => "https://www.googleapis.com/compute/v1beta15/projects/#{key}/global/networks/default",
|
||||
"networkIP" => "10.240.121.54",
|
||||
"name" => "nic0",
|
||||
"accessConfigs" => [
|
||||
{
|
||||
"kind" => "compute#accessConfig",
|
||||
"type" => "ONE_TO_ONE_NAT",
|
||||
"name" => "External NAT",
|
||||
"natIP" => "108.59.81.28"
|
||||
}
|
||||
]
|
||||
}
|
||||
],
|
||||
"disks" => [
|
||||
{
|
||||
"kind" => "compute#attachedDisk",
|
||||
"index" => 0,
|
||||
"type" => "SCRATCH",
|
||||
"mode" => "READ_WRITE"
|
||||
}
|
||||
],
|
||||
"metadata" => {
|
||||
"kind" => "compute#metadata",
|
||||
"fingerprint" => "5_hasd_gC3E=",
|
||||
"items" => [
|
||||
{
|
||||
"key" => "sshKeys",
|
||||
"value" => "sysadmin:ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAgEA1zc7mx+0H8Roywet/L0aVX6MUdkDfzd/17kZhprAbpUXYOILv9AG4lIzQk6xGxDIltghytjfVGme/4A42Sb0Z9LN0pxB4KnWTNoOSHPJtp6jbXpq6PdN9r3Z5NKQg0A/Tfw7gt2N0GDsj6vpK8VbHHdW78JAVUxql18ootJxjaksdocsiHNK8iA6/v9qiLRhX3fOgtK7KpxxdZxLRzFg9vkp8jcGISgpZt27kOgXWhR5YLhi8pRJookzphO5O4yhflgoHoAE65XkfrsRCe0HU5QTbY2jH88rBVkq0KVlZh/lEsuwfmG4d77kEqaCGGro+j1Wrvo2K3DSQ+rEcvPp2CYRUySjhaeLF18UzQLtxNeoN14QOYqlm9ITdkCnmq5w4Wn007MjSOFp8LEq2RekrnddGXjg1/vgmXtaVSGzJAlXwtVfZor3dTRmF0JCpr7DsiupBaDFtLUlGFFlSKmPDVMPOOB5wajexmcvSp2Vu4U3yP8Lai/9/ZxMdsGPhpdCsWVL83B5tF4oYj1HVIycbYIxIIfFqOxZcCru3CMfe9jmzKgKLv2UtkfOS8jpS/Os2gAiB3wPweH3agvtwYAYBVMDwt5cnrhgHYWoOz7ABD8KgmCrD7Y9HikiCqIUNkgUFd9YmjcYi5FkU5rFXIawN7efs341lsdf923lsdf923fs= johndoe@acme"
|
||||
}
|
||||
]
|
||||
},
|
||||
"selfLink" => "https://www.googleapis.com/compute/v1beta15/projects/#{key}/zones/us-central1-a/instances/fog-1380196541"
|
||||
}
|
||||
},
|
||||
:zones => {
|
||||
"europe-west1-a" => {
|
||||
"kind" => "compute#zone",
|
||||
"selfLink" => "https://www.googleapis.com/compute/v1beta15/projects/#{key}/zones/europe-west1-a",
|
||||
"id" => "10419676573632995924",
|
||||
"creationTimestamp" => "2013-09-26T02:56:13.115-07:00",
|
||||
"name" => "europe-west1-a",
|
||||
"description" => "europe-west1-a",
|
||||
"status" => "UP",
|
||||
"maintenanceWindows" => [
|
||||
{
|
||||
"name" => "2014-01-18-planned-outage",
|
||||
"description" => "maintenance zone",
|
||||
"beginTime" => "2014-01-18T12:00:00.000-08:00",
|
||||
"endTime" => "2014-02-02T12:00:00.000-08:00"
|
||||
}
|
||||
],
|
||||
"quotas" => [
|
||||
{"metric" => "INSTANCES", "limit" => 16.0, "usage" => 0.0},
|
||||
{"metric" => "CPUS", "limit" => 24.0, "usage" => 0.0},
|
||||
{"metric" => "DISKS", "limit" => 16.0, "usage" => 0.0},
|
||||
{"metric" => "DISKS_TOTAL_GB", "limit" => 2048.0, "usage" => 0.0}
|
||||
],
|
||||
"region" => "https://www.googleapis.com/compute/v1beta15/projects/#{key}/regions/europe-west1"
|
||||
},
|
||||
"us-central1-a" => {
|
||||
"kind" => "compute#zone",
|
||||
"selfLink" => "https://www.googleapis.com/compute/v1beta15/projects/#{key}/zones/us-central1-a",
|
||||
"id" => "6562457277909136262",
|
||||
"creationTimestamp" => "2013-09-26T02:56:13.116-07:00",
|
||||
"name" => "us-central1-a",
|
||||
"description" => "us-central1-a",
|
||||
"status" => "UP",
|
||||
"quotas" => [
|
||||
{"metric" => "INSTANCES", "limit" => 16.0, "usage" => 1.0},
|
||||
{"metric" => "CPUS", "limit" => 24.0, "usage" => 1.0},
|
||||
{"metric" => "DISKS", "limit" => 16.0, "usage" => 0.0},
|
||||
{"metric" => "DISKS_TOTAL_GB", "limit" => 2048.0, "usage" => 0.0}
|
||||
],
|
||||
"region" => "https://www.googleapis.com/compute/v1beta15/projects/#{key}/regions/us-central1"
|
||||
},
|
||||
"us-central1-b" => {
|
||||
"kind" => "compute#zone",
|
||||
"selfLink" => "https://www.googleapis.com/compute/v1beta15/projects/#{key}/zones/us-central1-b",
|
||||
"id" => "8701502109626061015",
|
||||
"creationTimestamp" => "2013-09-26T02:56:13.124-07:00",
|
||||
"name" => "us-central1-b",
|
||||
"description" => "us-central1-b",
|
||||
"status" => "UP",
|
||||
"maintenanceWindows" => [{"name" => "2013-10-26-planned-outage",
|
||||
"description" => "maintenance zone",
|
||||
"beginTime" => "2013-10-26T12:00:00.000-07:00",
|
||||
"endTime" => "2013-11-10T12:00:00.000-08:00"}],
|
||||
"quotas" => [
|
||||
{"metric" => "INSTANCES", "limit" => 16.0, "usage" => 0.0},
|
||||
{"metric" => "CPUS", "limit" => 24.0, "usage" => 0.0},
|
||||
{"metric" => "DISKS", "limit" => 16.0, "usage" => 0.0},
|
||||
{"metric" => "DISKS_TOTAL_GB", "limit" => 2048.0, "usage" => 0.0}
|
||||
],
|
||||
"region" => "https://www.googleapis.com/compute/v1beta15/projects/#{key}/regions/us-central1"
|
||||
},
|
||||
"us-central2-a" => {
|
||||
"kind" => "compute#zone",
|
||||
"selfLink" => "https://www.googleapis.com/compute/v1beta15/projects/#{key}/zones/us-central2-a",
|
||||
"id" => "13611654493253680292",
|
||||
"creationTimestamp" => "2013-09-26T02:56:13.125-07:00",
|
||||
"name" => "us-central2-a",
|
||||
"description" => "us-central2-a",
|
||||
"status" => "UP",
|
||||
"maintenanceWindows" => [
|
||||
{
|
||||
"name" => "2013-10-12-planned-outage",
|
||||
"description" => "maintenance zone",
|
||||
"beginTime" => "2013-10-12T12:00:00.000-07:00",
|
||||
"endTime" => "2013-10-27T12:00:00.000-07:00"
|
||||
}
|
||||
],
|
||||
"quotas" => [
|
||||
{"metric" => "INSTANCES", "limit" => 16.0, "usage" => 0.0},
|
||||
{"metric" => "CPUS", "limit" => 24.0, "usage" => 0.0},
|
||||
{"metric" => "DISKS", "limit" => 16.0, "usage" => 0.0},
|
||||
{"metric" => "DISKS_TOTAL_GB", "limit" => 2048.0, "usage" => 0.0}
|
||||
],
|
||||
"region" => "https://www.googleapis.com/compute/v1beta15/projects/#{key}/regions/us-central2"
|
||||
}
|
||||
},
|
||||
:machine_types => Hash.new do |machine_types_hash, zone|
|
||||
machine_types_hash[zone] = {
|
||||
"f1-micro" => {
|
||||
"kind" => "compute#machineType",
|
||||
"id" => "4618642685664990776",
|
||||
"creationTimestamp" => "2013-04-25T13:32:49.088-07:00",
|
||||
"name" => "f1-micro",
|
||||
"description" => "1 vCPU (shared physical core) and 0.6 GB RAM",
|
||||
"guestCpus" => 1,
|
||||
"memoryMb" => 614,
|
||||
"imageSpaceGb" => 0,
|
||||
"maximumPersistentDisks" => 4,
|
||||
"maximumPersistentDisksSizeGb" => "3072",
|
||||
"zone" => zone,
|
||||
"selfLink" => "https://www.googleapis.com/compute/v1beta15/projects/#{key}/zones/#{zone}/machineTypes/f1-micro"
|
||||
},
|
||||
"g1-small" => {
|
||||
"kind" => "compute#machineType",
|
||||
"id" => "7224129552184485774",
|
||||
"creationTimestamp" => "2013-04-25T13:32:45.550-07:00",
|
||||
"name" => "g1-small",
|
||||
"description" => "1 vCPU (shared physical core) and 1.7 GB RAM",
|
||||
"guestCpus" => 1,
|
||||
"memoryMb" => 1740,
|
||||
"imageSpaceGb" => 0,
|
||||
"maximumPersistentDisks" => 4,
|
||||
"maximumPersistentDisksSizeGb" => "3072",
|
||||
"zone" => zone,
|
||||
"selfLink" => "https://www.googleapis.com/compute/v1beta15/projects/#{key}/zones/#{zone}/machineTypes/g1-small"
|
||||
},
|
||||
"n1-highcpu-2" => {
|
||||
"kind" => "compute#machineType",
|
||||
"id" => "13043554592196512955",
|
||||
"creationTimestamp" => "2012-11-16T11:46:10.572-08:00",
|
||||
"name" => "n1-highcpu-2",
|
||||
"description" => "2 vCPUs, 1.8 GB RAM",
|
||||
"guestCpus" => 2,
|
||||
"memoryMb" => 1843,
|
||||
"imageSpaceGb" => 10,
|
||||
"maximumPersistentDisks" => 16,
|
||||
"maximumPersistentDisksSizeGb" => "10240",
|
||||
"zone" => zone,
|
||||
"selfLink" => "https://www.googleapis.com/compute/v1beta15/projects/#{key}/zones/#{zone}/machineTypes/n1-highcpu-2"
|
||||
},
|
||||
"n1-highcpu-2-d" => {
|
||||
"kind" => "compute#machineType",
|
||||
"id" => "13043555176034896271",
|
||||
"creationTimestamp" => "2012-11-16T11:47:07.825-08:00",
|
||||
"name" => "n1-highcpu-2-d",
|
||||
"description" => "2 vCPUs, 1.8 GB RAM, 1 scratch disk (870 GB)",
|
||||
"guestCpus" => 2,
|
||||
"memoryMb" => 1843,
|
||||
"imageSpaceGb" => 10,
|
||||
"scratchDisks" => [
|
||||
{
|
||||
"diskGb" => 870
|
||||
}
|
||||
],
|
||||
"maximumPersistentDisks" => 16,
|
||||
"maximumPersistentDisksSizeGb" => "10240",
|
||||
"zone" => zone,
|
||||
"selfLink" => "https://www.googleapis.com/compute/v1beta15/projects/#{key}/zones/#{zone}/machineTypes/n1-highcpu-2-d"
|
||||
},
|
||||
"n1-highcpu-4" => {
|
||||
"kind" => "compute#machineType",
|
||||
"id" => "13043555705736970382",
|
||||
"creationTimestamp" => "2012-11-16T11:48:06.087-08:00",
|
||||
"name" => "n1-highcpu-4",
|
||||
"description" => "4 vCPUs, 3.6 GB RAM",
|
||||
"guestCpus" => 4,
|
||||
"memoryMb" => 3686,
|
||||
"imageSpaceGb" => 10,
|
||||
"maximumPersistentDisks" => 16,
|
||||
"maximumPersistentDisksSizeGb" => "10240",
|
||||
"zone" => zone,
|
||||
"selfLink" => "https://www.googleapis.com/compute/v1beta15/projects/#{key}/zones/#{zone}/machineTypes/n1-highcpu-4"
|
||||
},
|
||||
"n1-highcpu-4-d" => {
|
||||
"kind" => "compute#machineType",
|
||||
"id" => "13043556330284250611",
|
||||
"creationTimestamp" => "2012-11-16T11:49:07.563-08:00",
|
||||
"name" => "n1-highcpu-4-d",
|
||||
"description" => "4 vCPUS, 3.6 GB RAM, 1 scratch disk (1770 GB)",
|
||||
"guestCpus" => 4,
|
||||
"memoryMb" => 3686,
|
||||
"imageSpaceGb" => 10,
|
||||
"scratchDisks" => [
|
||||
{
|
||||
"diskGb" => 1770
|
||||
}
|
||||
],
|
||||
"maximumPersistentDisks" => 16,
|
||||
"maximumPersistentDisksSizeGb" => "10240",
|
||||
"zone" => zone,
|
||||
"selfLink" => "https://www.googleapis.com/compute/v1beta15/projects/#{key}/zones/#{zone}/machineTypes/n1-highcpu-4-d"
|
||||
},
|
||||
"n1-highcpu-8" => {
|
||||
"kind" => "compute#machineType",
|
||||
"id" => "13043556949665240937",
|
||||
"creationTimestamp" => "2012-11-16T11:50:15.128-08:00",
|
||||
"name" => "n1-highcpu-8",
|
||||
"description" => "8 vCPUs, 7.2 GB RAM",
|
||||
"guestCpus" => 8,
|
||||
"memoryMb" => 7373,
|
||||
"imageSpaceGb" => 10,
|
||||
"maximumPersistentDisks" => 16,
|
||||
"maximumPersistentDisksSizeGb" => "10240",
|
||||
"zone" => zone,
|
||||
"selfLink" => "https://www.googleapis.com/compute/v1beta15/projects/#{key}/zones/#{zone}/machineTypes/n1-highcpu-8"
|
||||
},
|
||||
"n1-highcpu-8-d" => {
|
||||
"kind" => "compute#machineType",
|
||||
"id" => "13043557458004959701",
|
||||
"creationTimestamp" => "2012-11-16T11:51:04.549-08:00",
|
||||
"name" => "n1-highcpu-8-d",
|
||||
"description" => "8 vCPUS, 7.2 GB RAM, 2 scratch disks (1770 GB, 1770 GB)",
|
||||
"guestCpus" => 8,
|
||||
"memoryMb" => 7373,
|
||||
"imageSpaceGb" => 10,
|
||||
"scratchDisks" => [
|
||||
{
|
||||
"diskGb" => 1770
|
||||
},
|
||||
{
|
||||
"diskGb" => 1770
|
||||
}
|
||||
],
|
||||
"maximumPersistentDisks" => 16,
|
||||
"maximumPersistentDisksSizeGb" => "10240",
|
||||
"zone" => zone,
|
||||
"selfLink" => "https://www.googleapis.com/compute/v1beta15/projects/#{key}/zones/#{zone}/machineTypes/n1-highcpu-8-d"
|
||||
},
|
||||
"n1-highmem-2" => {
|
||||
"kind" => "compute#machineType",
|
||||
"id" => "13043551079318055993",
|
||||
"creationTimestamp" => "2012-11-16T11:40:06.129-08:00",
|
||||
"name" => "n1-highmem-2",
|
||||
"description" => "2 vCPUs, 13 GB RAM",
|
||||
"guestCpus" => 2,
|
||||
"memoryMb" => 13312,
|
||||
"imageSpaceGb" => 10,
|
||||
"maximumPersistentDisks" => 16,
|
||||
"maximumPersistentDisksSizeGb" => "10240",
|
||||
"zone" => zone,
|
||||
"selfLink" => "https://www.googleapis.com/compute/v1beta15/projects/#{key}/zones/#{zone}/machineTypes/n1-highmem-2"
|
||||
},
|
||||
"n1-highmem-2-d" => {
|
||||
"kind" => "compute#machineType",
|
||||
"id" => "13043551625558644085",
|
||||
"creationTimestamp" => "2012-11-16T11:40:59.630-08:00",
|
||||
"name" => "n1-highmem-2-d",
|
||||
"description" => "2 vCPUs, 13 GB RAM, 1 scratch disk (870 GB)",
|
||||
"guestCpus" => 2,
|
||||
"memoryMb" => 13312,
|
||||
"imageSpaceGb" => 10,
|
||||
"scratchDisks" => [
|
||||
{
|
||||
"diskGb" => 870
|
||||
}
|
||||
],
|
||||
"maximumPersistentDisks" => 16,
|
||||
"maximumPersistentDisksSizeGb" => "10240",
|
||||
"zone" => zone,
|
||||
"selfLink" => "https://www.googleapis.com/compute/v1beta15/projects/#{key}/zones/#{zone}/machineTypes/n1-highmem-2-d"
|
||||
},
|
||||
"n1-highmem-4" => {
|
||||
"kind" => "compute#machineType",
|
||||
"id" => "13043552263604939569",
|
||||
"creationTimestamp" => "2012-11-16T11:42:08.983-08:00",
|
||||
"name" => "n1-highmem-4",
|
||||
"description" => "4 vCPUs, 26 GB RAM",
|
||||
"guestCpus" => 4,
|
||||
"memoryMb" => 26624,
|
||||
"imageSpaceGb" => 10,
|
||||
"maximumPersistentDisks" => 16,
|
||||
"maximumPersistentDisksSizeGb" => "10240",
|
||||
"zone" => zone,
|
||||
"selfLink" => "https://www.googleapis.com/compute/v1beta15/projects/#{key}/zones/#{zone}/machineTypes/n1-highmem-4"
|
||||
},
|
||||
"n1-highmem-4-d" => {
|
||||
"kind" => "compute#machineType",
|
||||
"id" => "13043552953632709737",
|
||||
"creationTimestamp" => "2012-11-16T11:43:17.400-08:00",
|
||||
"name" => "n1-highmem-4-d",
|
||||
"description" => "4 vCPUs, 26 GB RAM, 1 scratch disk (1770 GB)",
|
||||
"guestCpus" => 4,
|
||||
"memoryMb" => 26624,
|
||||
"imageSpaceGb" => 10,
|
||||
"scratchDisks" => [
|
||||
{
|
||||
"diskGb" => 1770
|
||||
}
|
||||
],
|
||||
"maximumPersistentDisks" => 16,
|
||||
"maximumPersistentDisksSizeGb" => "10240",
|
||||
"zone" => zone,
|
||||
"selfLink" => "https://www.googleapis.com/compute/v1beta15/projects/#{key}/zones/#{zone}/machineTypes/n1-highmem-4-d"
|
||||
},
|
||||
"n1-highmem-8" => {
|
||||
"kind" => "compute#machineType",
|
||||
"id" => "13043553584275586275",
|
||||
"creationTimestamp" => "2012-11-16T11:44:25.985-08:00",
|
||||
"name" => "n1-highmem-8",
|
||||
"description" => "8 vCPUs, 52 GB RAM",
|
||||
"guestCpus" => 8,
|
||||
"memoryMb" => 53248,
|
||||
"imageSpaceGb" => 10,
|
||||
"maximumPersistentDisks" => 16,
|
||||
"maximumPersistentDisksSizeGb" => "10240",
|
||||
"zone" => zone,
|
||||
"selfLink" => "https://www.googleapis.com/compute/v1beta15/projects/#{key}/zones/#{zone}/machineTypes/n1-highmem-8"
|
||||
},
|
||||
"n1-highmem-8-d" => {
|
||||
"kind" => "compute#machineType",
|
||||
"id" => "13043554021673472746",
|
||||
"creationTimestamp" => "2012-11-16T11:45:08.195-08:00",
|
||||
"name" => "n1-highmem-8-d",
|
||||
"description" => "8 vCPUs, 52 GB RAM, 2 scratch disks (1770 GB, 1770 GB)",
|
||||
"guestCpus" => 8,
|
||||
"memoryMb" => 53248,
|
||||
"imageSpaceGb" => 10,
|
||||
"scratchDisks" => [
|
||||
{
|
||||
"diskGb" => 1770
|
||||
},
|
||||
{
|
||||
"diskGb" => 1770
|
||||
}
|
||||
],
|
||||
"maximumPersistentDisks" => 16,
|
||||
"maximumPersistentDisksSizeGb" => "10240",
|
||||
"zone" => zone,
|
||||
"selfLink" => "https://www.googleapis.com/compute/v1beta15/projects/#{key}/zones/#{zone}/machineTypes/n1-highmem-8-d"
|
||||
},
|
||||
"n1-standard-1" => {
|
||||
"kind" => "compute#machineType",
|
||||
"id" => "12907738072351752276",
|
||||
"creationTimestamp" => "2012-06-07T13:48:14.670-07:00",
|
||||
"name" => "n1-standard-1",
|
||||
"description" => "1 vCPU, 3.75 GB RAM",
|
||||
"guestCpus" => 1,
|
||||
"memoryMb" => 3840,
|
||||
"imageSpaceGb" => 10,
|
||||
"maximumPersistentDisks" => 16,
|
||||
"maximumPersistentDisksSizeGb" => "10240",
|
||||
"zone" => zone,
|
||||
"selfLink" => "https://www.googleapis.com/compute/v1beta15/projects/#{key}/zones/#{zone}/machineTypes/n1-standard-1"
|
||||
},
|
||||
"n1-standard-1-d" => {
|
||||
"kind" => "compute#machineType",
|
||||
"id" => "12908559201265214706",
|
||||
"creationTimestamp" => "2012-06-07T13:48:34.258-07:00",
|
||||
"name" => "n1-standard-1-d",
|
||||
"description" => "1 vCPU, 3.75 GB RAM, 1 scratch disk (420 GB)",
|
||||
"guestCpus" => 1,
|
||||
"memoryMb" => 3840,
|
||||
"imageSpaceGb" => 10,
|
||||
"scratchDisks" => [
|
||||
{
|
||||
"diskGb" => 420
|
||||
}
|
||||
],
|
||||
"maximumPersistentDisks" => 16,
|
||||
"maximumPersistentDisksSizeGb" => "10240",
|
||||
"zone" => zone,
|
||||
"selfLink" => "https://www.googleapis.com/compute/v1beta15/projects/#{key}/zones/#{zone}/machineTypes/n1-standard-1-d"
|
||||
},
|
||||
"n1-standard-2" => {
|
||||
"kind" => "compute#machineType",
|
||||
"id" => "12908559320241551184",
|
||||
"creationTimestamp" => "2012-06-07T13:48:56.867-07:00",
|
||||
"name" => "n1-standard-2",
|
||||
"description" => "2 vCPUs, 7.5 GB RAM",
|
||||
"guestCpus" => 2,
|
||||
"memoryMb" => 7680,
|
||||
"imageSpaceGb" => 10,
|
||||
"maximumPersistentDisks" => 16,
|
||||
"maximumPersistentDisksSizeGb" => "10240",
|
||||
"zone" => zone,
|
||||
"selfLink" => "https://www.googleapis.com/compute/v1beta15/projects/#{key}/zones/#{zone}/machineTypes/n1-standard-2"
|
||||
},
|
||||
"n1-standard-2-d" => {
|
||||
"kind" => "compute#machineType",
|
||||
"id" => "12908559582417967837",
|
||||
"creationTimestamp" => "2012-06-07T13:49:19.448-07:00",
|
||||
"name" => "n1-standard-2-d",
|
||||
"description" => "2 vCPUs, 7.5 GB RAM, 1 scratch disk (870 GB)",
|
||||
"guestCpus" => 2,
|
||||
"memoryMb" => 7680,
|
||||
"imageSpaceGb" => 10,
|
||||
"scratchDisks" => [
|
||||
{
|
||||
"diskGb" => 870
|
||||
}
|
||||
],
|
||||
"maximumPersistentDisks" => 16,
|
||||
"maximumPersistentDisksSizeGb" => "10240",
|
||||
"zone" => zone,
|
||||
"selfLink" => "https://www.googleapis.com/compute/v1beta15/projects/#{key}/zones/#{zone}/machineTypes/n1-standard-2-d"
|
||||
},
|
||||
"n1-standard-4" => {
|
||||
"kind" => "compute#machineType",
|
||||
"id" => "12908559692070444049",
|
||||
"creationTimestamp" => "2012-06-07T13:49:40.050-07:00",
|
||||
"name" => "n1-standard-4",
|
||||
"description" => "4 vCPUs, 15 GB RAM",
|
||||
"guestCpus" => 4,
|
||||
"memoryMb" => 15360,
|
||||
"imageSpaceGb" => 10,
|
||||
"maximumPersistentDisks" => 16,
|
||||
"maximumPersistentDisksSizeGb" => "10240",
|
||||
"zone" => zone,
|
||||
"selfLink" => "https://www.googleapis.com/compute/v1beta15/projects/#{key}/zones/#{zone}/machineTypes/n1-standard-4"
|
||||
},
|
||||
"n1-standard-4-d" => {
|
||||
"kind" => "compute#machineType",
|
||||
"id" => "12908559991903153608",
|
||||
"creationTimestamp" => "2012-06-07T13:50:05.677-07:00",
|
||||
"name" => "n1-standard-4-d",
|
||||
"description" => "4 vCPUs, 15 GB RAM, 1 scratch disk (1770 GB)",
|
||||
"guestCpus" => 4,
|
||||
"memoryMb" => 15360,
|
||||
"imageSpaceGb" => 10,
|
||||
"scratchDisks" => [
|
||||
{
|
||||
"diskGb" => 1770
|
||||
}
|
||||
],
|
||||
"maximumPersistentDisks" => 16,
|
||||
"maximumPersistentDisksSizeGb" => "10240",
|
||||
"zone" => zone,
|
||||
"selfLink" => "https://www.googleapis.com/compute/v1beta15/projects/#{key}/zones/#{zone}/machineTypes/n1-standard-4-d"
|
||||
},
|
||||
"n1-standard-8" => {
|
||||
"kind" => "compute#machineType",
|
||||
"id" => "12908560197989714867",
|
||||
"creationTimestamp" => "2012-06-07T13:50:42.334-07:00",
|
||||
"name" => "n1-standard-8",
|
||||
"description" => "8 vCPUs, 30 GB RAM",
|
||||
"guestCpus" => 8,
|
||||
"memoryMb" => 30720,
|
||||
"imageSpaceGb" => 10,
|
||||
"maximumPersistentDisks" => 16,
|
||||
"maximumPersistentDisksSizeGb" => "10240",
|
||||
"zone" => zone,
|
||||
"selfLink" => "https://www.googleapis.com/compute/v1beta15/projects/#{key}/zones/#{zone}/machineTypes/n1-standard-8"
|
||||
},
|
||||
"n1-standard-8-d" => {
|
||||
"kind" => "compute#machineType",
|
||||
"id" => "12908560709887590691",
|
||||
"creationTimestamp" => "2012-06-07T13:51:19.936-07:00",
|
||||
"name" => "n1-standard-8-d",
|
||||
"description" => "8 vCPUs, 30 GB RAM, 2 scratch disks (1770 GB, 1770 GB)",
|
||||
"guestCpus" => 8,
|
||||
"memoryMb" => 30720,
|
||||
"imageSpaceGb" => 10,
|
||||
"scratchDisks" => [
|
||||
{
|
||||
"diskGb" => 1770
|
||||
},
|
||||
{
|
||||
"diskGb" => 1770
|
||||
}
|
||||
],
|
||||
"maximumPersistentDisks" => 16,
|
||||
"maximumPersistentDisksSizeGb" => "10240",
|
||||
"zone" => zone,
|
||||
"selfLink" => "https://www.googleapis.com/compute/v1beta15/projects/#{key}/zones/#{zone}/machineTypes/n1-standard-8-d"
|
||||
}
|
||||
}
|
||||
end,
|
||||
:images => {}
|
||||
}
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
def self.reset
|
||||
@data = nil
|
||||
end
|
||||
|
||||
def data
|
||||
self.class.data[@project]
|
||||
end
|
||||
|
||||
def reset_data
|
||||
# not particularly useful because it deletes zones
|
||||
self.class.data.delete(@project)
|
||||
end
|
||||
|
||||
end
|
||||
|
||||
class Real
|
||||
include Collections
|
||||
|
||||
attr_reader :project
|
||||
include Shared
|
||||
|
||||
def initialize(options)
|
||||
base_url = 'https://www.googleapis.com/compute/'
|
||||
|
@ -124,6 +807,7 @@ module Fog
|
|||
return zones
|
||||
end
|
||||
|
||||
# returns Google::APIClient::Result
|
||||
def build_result(api_method, parameters, body_object=nil)
|
||||
if body_object
|
||||
result = @client.execute(
|
||||
|
@ -139,35 +823,10 @@ module Fog
|
|||
end
|
||||
end
|
||||
|
||||
# result = Google::APIClient::Result
|
||||
# returns Excon::Response
|
||||
def build_response(result)
|
||||
response = Excon::Response.new
|
||||
response.body = Fog::JSON.decode(result.body)
|
||||
if response.body["error"]
|
||||
response.status = response.body["error"]["code"]
|
||||
|
||||
response.body["error"]["errors"].each do |error|
|
||||
raise Fog::Errors::Error.new(error["message"])
|
||||
end
|
||||
else
|
||||
response.status = 200
|
||||
end
|
||||
response
|
||||
end
|
||||
|
||||
def backoff_if_unfound(&block)
|
||||
retries_remaining = 10
|
||||
begin
|
||||
result = block.call
|
||||
rescue Exception => msg
|
||||
if msg.to_s.include? 'was not found' and retries_remaining > 0
|
||||
retries_remaining -= 1
|
||||
sleep 0.1
|
||||
retry
|
||||
else
|
||||
raise msg
|
||||
end
|
||||
end
|
||||
result
|
||||
build_excon_response(Fog::JSON.decode(result.body))
|
||||
end
|
||||
|
||||
end
|
||||
|
|
|
@ -2,29 +2,56 @@ module Fog
|
|||
module Compute
|
||||
class Google
|
||||
|
||||
class Mock
|
||||
module Shared
|
||||
def find_zone(zone_name)
|
||||
if zone_name.nil?
|
||||
list_zones.body['items'].each do |zone|
|
||||
if get_server(server_name, zone['name']).status == 200
|
||||
return zone['name']
|
||||
end
|
||||
end
|
||||
else
|
||||
if zone_name.is_a? Excon::Response
|
||||
return zone_name.body["name"]
|
||||
end
|
||||
end
|
||||
return zone_name
|
||||
end
|
||||
end
|
||||
|
||||
def delete_server(server_name)
|
||||
Fog::Mock.not_implemented
|
||||
class Mock
|
||||
include Shared
|
||||
|
||||
def delete_server(server_name, zone_name=nil)
|
||||
zone_name = find_zone(zone_name)
|
||||
get_server(server_name, zone_name)
|
||||
server = self.data[:servers][server_name]
|
||||
server["status"] = "STOPPED"
|
||||
server["mock-deletionTimestamp"] = Time.now.iso8601
|
||||
build_response(:body => {
|
||||
"kind" => "compute#operation",
|
||||
"id" => "10035781241131638365",
|
||||
"name" => "operation-1380213292196-4e74bf2fbc3c1-ae707d47",
|
||||
"zone" => "https://www.googleapis.com/compute/v1beta15/projects/#{@project}/zones/#{zone_name}",
|
||||
"operationType" => "delete",
|
||||
"targetLink" => "https://www.googleapis.com/compute/v1beta15/projects/#{@project}/zones/#{zone_name}/instances/#{server_name}",
|
||||
"targetId" => "14544909043643897380",
|
||||
"status" => "PENDING",
|
||||
"user" => "123456789012-qwertyuiopasdfghjkl1234567890qwe@developer.gserviceaccount.com",
|
||||
"progress" => 0,
|
||||
"insertTime" => Time.now.iso8601,
|
||||
"startTime" => Time.now.iso8601,
|
||||
"selfLink" => "https://www.googleapis.com/compute/v1beta15/projects/#{@project}/zones/#{zone_name}/operations/operation-1380213292196-4e74bf2fbc3c1-ae707d47"
|
||||
})
|
||||
end
|
||||
|
||||
end
|
||||
|
||||
class Real
|
||||
include Shared
|
||||
|
||||
def delete_server(server_name, zone_name=nil)
|
||||
if zone_name.nil?
|
||||
list_zones.body['items'].each do |zone|
|
||||
if get_server(server_name, zone['name']).status == 200
|
||||
zone_name = zone['name']
|
||||
end
|
||||
end
|
||||
else
|
||||
if zone_name.is_a? Excon::Response
|
||||
zone_name = zone_name.body["name"]
|
||||
end
|
||||
end
|
||||
|
||||
zone_name = find_zone(zone_name)
|
||||
api_method = @compute.instances.delete
|
||||
parameters = {
|
||||
'project' => @project,
|
||||
|
|
|
@ -4,8 +4,21 @@ module Fog
|
|||
|
||||
class Mock
|
||||
|
||||
def get_image(image_name)
|
||||
Fog::Mock.not_implemented
|
||||
def get_image(image_name, project=@project)
|
||||
image = self.class.data[project][:images][image_name] || {
|
||||
"error" => {
|
||||
"errors" => [
|
||||
{
|
||||
"domain" => "global",
|
||||
"reason" => "invalid",
|
||||
"message" => "Invalid value for field 'resource.images': 'https://www.googleapis.com/compute/v1beta15/projects/#{project}/global/images/#{image_name}'. Resource was not found."
|
||||
}
|
||||
],
|
||||
"code" => 400,
|
||||
"message" => "Invalid value for field 'resource.images': 'https://www.googleapis.com/compute/v1beta15/projects/#{project}/global/images/#{image_name}'. Resource was not found."
|
||||
}
|
||||
}
|
||||
build_response(:body => image)
|
||||
end
|
||||
|
||||
end
|
||||
|
|
|
@ -5,7 +5,22 @@ module Fog
|
|||
class Mock
|
||||
|
||||
def get_machine_type(machine_type_name, zone_name = nil)
|
||||
Fog::Mock.not_implemented
|
||||
zone_name = self.data[:zones].keys.first if zone_name.nil?
|
||||
get_zone(zone_name)
|
||||
machine_type = self.data[:machine_types][zone_name][machine_type_name] || {
|
||||
"error" => {
|
||||
"errors" => [
|
||||
{
|
||||
"domain" => "global",
|
||||
"reason" => "notFound",
|
||||
"message" => "The resource 'projects/google/zones/#{zone_name}/machineTypes/#{machine_type_name}' was not found"
|
||||
}
|
||||
],
|
||||
"code" => 404,
|
||||
"message" => "The resource 'projects/google/zones/#{zone_name}/machineTypes/#{machine_type_name}' was not found"
|
||||
}
|
||||
}
|
||||
build_response(:body => machine_type)
|
||||
end
|
||||
|
||||
end
|
||||
|
|
|
@ -4,8 +4,52 @@ module Fog
|
|||
|
||||
class Mock
|
||||
|
||||
def get_server(server_name)
|
||||
Fog::Mock.not_implemented
|
||||
def get_server(server_name, zone_name)
|
||||
server = self.data[:servers][server_name]
|
||||
zone = self.data[:zones][zone_name]
|
||||
if server.nil? or server["zone"] != zone["selfLink"]
|
||||
return build_response(:body => {
|
||||
"error" => {
|
||||
"errors" => [
|
||||
{
|
||||
"domain" => "global",
|
||||
"reason" => "notFound",
|
||||
"message" => "The resource 'projects/#{@project}/zones/#{zone_name}/instances/#{server_name}' was not found"
|
||||
}
|
||||
],
|
||||
"code" => 404,
|
||||
"message" => "The resource 'projects/#{@project}/zones/#{zone_name}/instances/#{server_name}' was not found"
|
||||
}
|
||||
})
|
||||
end
|
||||
|
||||
# transition the server through the provisioning -> staging -> running states
|
||||
creation_time = Time.iso8601(server['creationTimestamp'])
|
||||
case server['status']
|
||||
when 'PROVISIONING'
|
||||
if Time.now - creation_time > Fog::Mock.delay/2
|
||||
server['status'] = 'STAGING'
|
||||
end
|
||||
when 'STAGING'
|
||||
if Time.now - creation_time > Fog::Mock.delay
|
||||
server['status'] = 'RUNNING'
|
||||
end
|
||||
when 'STOPPED'
|
||||
if server['mock-deletionTimestamp']
|
||||
# stopped -> terminated
|
||||
if Time.now - Time.iso8601(server['mock-deletionTimestamp']) > Fog::Mock.delay
|
||||
server['status'] = 'TERMINATED'
|
||||
end
|
||||
else
|
||||
# TODO stopped -> provisioning
|
||||
end
|
||||
when 'TERMINATED'
|
||||
if Time.now - Time.iso8601(server['mock-deletionTimestamp']) > Fog::Mock.delay
|
||||
self.data[:servers][server_name] = nil
|
||||
end
|
||||
end
|
||||
|
||||
build_response(:body => server)
|
||||
end
|
||||
|
||||
end
|
||||
|
|
|
@ -5,7 +5,20 @@ module Fog
|
|||
class Mock
|
||||
|
||||
def get_zone(zone_name)
|
||||
Fog::Mock.not_implemented
|
||||
zone = self.data[:zones][zone_name] || {
|
||||
"error" => {
|
||||
"errors" => [
|
||||
{
|
||||
"domain" => "global",
|
||||
"reason" => "notFound",
|
||||
"message" => "The resource 'projects/#{project}/zones/#{zone_name}' was not found"
|
||||
}
|
||||
],
|
||||
"code" => 404,
|
||||
"message" => "The resource 'projects/#{project}/zones/#{zone_name}' was not found"
|
||||
}
|
||||
}
|
||||
build_response(:body => zone)
|
||||
end
|
||||
|
||||
end
|
||||
|
|
|
@ -3,9 +3,81 @@ module Fog
|
|||
class Google
|
||||
|
||||
class Mock
|
||||
def insert_server(server_name, zone_name, options={}, *deprecated_args)
|
||||
|
||||
def insert_server(server_name)
|
||||
Fog::Mock.not_implemented
|
||||
# check that image and zone exist
|
||||
image_project = nil
|
||||
if options.has_key? 'image'
|
||||
([ @project ] + Fog::Compute::Google::Images::GLOBAL_PROJECTS).each do |project|
|
||||
image_project = project
|
||||
break if self.class.data[project][:images][options['image']]
|
||||
end
|
||||
get_image(options['image'], image_project) # ok if image exists, will fail otherwise
|
||||
end
|
||||
get_zone(zone_name)
|
||||
|
||||
self.data[:servers][server_name] = {
|
||||
"kind" => "compute#instance",
|
||||
"id" => Fog::Mock.random_numbers(19),
|
||||
"creationTimestamp" => Time.now.iso8601,
|
||||
"zone" => "https://www.googleapis.com/compute/v1beta15/projects/#{@project}/zones/#{zone_name}",
|
||||
"status" => "PROVISIONING",
|
||||
"name" => server_name,
|
||||
"tags" => { "fingerprint" => "42WmSpB8rSM=" },
|
||||
"machineType" => "https://www.googleapis.com/compute/v1beta15/projects/#{@project}/zones/#{zone_name}/machineTypes/#{options['machineType']}",
|
||||
"image" => "https://www.googleapis.com/compute/v1beta15/projects/centos-cloud/global/images/#{options['image']}",
|
||||
"kernel" => "https://www.googleapis.com/compute/v1beta15/projects/google/global/kernels/gce-v20130813",
|
||||
"canIpForward" => false,
|
||||
"networkInterfaces" => [
|
||||
{
|
||||
"network" => "https://www.googleapis.com/compute/v1beta15/projects/#{@project}/global/networks/default",
|
||||
"networkIP" => Fog::Mock.random_ip,
|
||||
"name" => "nic0",
|
||||
"accessConfigs" => [
|
||||
{
|
||||
"kind" => "compute#accessConfig",
|
||||
"type" => "ONE_TO_ONE_NAT",
|
||||
"name" => "External NAT",
|
||||
"natIP" => Fog::Mock.random_ip
|
||||
}
|
||||
]
|
||||
}
|
||||
],
|
||||
"disks" => [
|
||||
{
|
||||
"kind" => "compute#attachedDisk",
|
||||
"index" => 0,
|
||||
"type" => "SCRATCH",
|
||||
"mode" => "READ_WRITE"
|
||||
}
|
||||
],
|
||||
"metadata" => {
|
||||
"kind" => "compute#metadata",
|
||||
"fingerprint" => "5_hasd_gC3E=",
|
||||
"items" => [
|
||||
{
|
||||
"key" => "sshKeys",
|
||||
"value" => "sysadmin:ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAgEA1zc7mx+0H8Roywet/L0aVX6MUdkDfzd/17kZhprAbpUXYOILv9AG4lIzQk6xGxDIltghytjfVGme/4A42Sb0Z9LN0pxB4KnWTNoOSHPJtp6jbXpq6PdN9r3Z5NKQg0A/Tfw7gt2N0GDsj6vpK8VbHHdW78JAVUxql18ootJxjaksdocsiHNK8iA6/v9qiLRhX3fOgtK7KpxxdZxLRzFg9vkp8jcGISgpZt27kOgXWhR5YLhi8pRJookzphO5O4yhflgoHoAE65XkfrsRCe0HU5QTbY2jH88rBVkq0KVlZh/lEsuwfmG4d77kEqaCGGro+j1Wrvo2K3DSQ+rEcvPp2CYRUySjhaeLF18UzQLtxNeoN14QOYqlm9ITdkCnmq5w4Wn007MjSOFp8LEq2RekrnddGXjg1/vgmXtaVSGzJAlXwtVfZor3dTRmF0JCpr7DsiupBaDFtLUlGFFlSKmPDVMPOOB5wajexmcvSp2Vu4U3yP8Lai/9/ZxMdsGPhpdCsWVL83B5tF4oYj1HVIycbYIxIIfFqOxZcCru3CMfe9jmzKgKLv2UtkfOS8jpS/Os2gAiB3wPweH3agvtwYAYBVMDwt5cnrhgHYWoOz7ABD8KgmCrD7Y9HikiCqIUNkgUFd9YmjcYi5FkU5rFXIawN7efs341lsdf923lsdf923fs= johndoe@acme"
|
||||
}
|
||||
]
|
||||
},
|
||||
"selfLink" => "https://www.googleapis.com/compute/v1beta15/projects/#{@project}/zones/#{zone_name}/instances/#{server_name}"
|
||||
}
|
||||
|
||||
build_response(:body => {
|
||||
"kind" => "compute#operation",
|
||||
"id" => "4639689000254420481",
|
||||
"name" => "operation-1380213292196-4e74bf2fbc3c1-ae707d47",
|
||||
"zone" => "https://www.googleapis.com/compute/v1beta15/projects/#{@project}/zones/#{zone_name}",
|
||||
"operationType" => "insert",
|
||||
"targetLink" => "https://www.googleapis.com/compute/v1beta15/projects/#{@project}/zones/#{zone_name}/instances/#{server_name}",
|
||||
"status" => "PENDING",
|
||||
"user" => "123456789012-qwertyuiopasdfghjkl1234567890qwe@developer.gserviceaccount.com",
|
||||
"progress" => 0,
|
||||
"insertTime" => Time.now.iso8601,
|
||||
"startTime" => Time.now.iso8601,
|
||||
"selfLink" => "https://www.googleapis.com/compute/v1beta15/projects/#{@project}/zones/#{zone_name}/operations/operation-1380213292196-4e74bf2fbc3c1-ae707d47"
|
||||
})
|
||||
end
|
||||
|
||||
end
|
||||
|
|
|
@ -4,8 +4,14 @@ module Fog
|
|||
|
||||
class Mock
|
||||
|
||||
def list_images
|
||||
Fog::Mock.not_implemented
|
||||
def list_images(project=@project)
|
||||
images = self.class.data[project][:images].values
|
||||
build_response(:body => {
|
||||
"kind" => "compute#imageList",
|
||||
"selfLink" => "https://www.googleapis.com/compute/v1beta15/projects/#{project}/global/images",
|
||||
"id" => "projects/#{project}/global/images",
|
||||
"items" => images
|
||||
})
|
||||
end
|
||||
|
||||
end
|
||||
|
|
|
@ -4,8 +4,15 @@ module Fog
|
|||
|
||||
class Mock
|
||||
|
||||
def list_machine_types
|
||||
Fog::Mock.not_implemented
|
||||
def list_machine_types(zone_name)
|
||||
get_zone(zone_name)
|
||||
machine_types = self.class.data[project][:machine_types][zone_name].values
|
||||
build_response(:body => {
|
||||
"kind" => "compute#machineTypeList",
|
||||
"selfLink" => "https://www.googleapis.com/compute/v1beta15/projects/#{@project}/zones/#{zone_name}/machineTypes",
|
||||
"id" => "projects/high-cistern-340/zones/us-central1-a/machineTypes",
|
||||
"items" => machine_types
|
||||
})
|
||||
end
|
||||
|
||||
end
|
||||
|
|
|
@ -4,8 +4,16 @@ module Fog
|
|||
|
||||
class Mock
|
||||
|
||||
def list_servers
|
||||
Fog::Mock.not_implemented
|
||||
def list_servers(zone_name)
|
||||
zone = self.data[:zones][zone_name]
|
||||
raise Fog::Errors::Error.new("Invalid value for field 'zone': '#{zone_name}'. Unknown zone.") if zone.nil?
|
||||
servers = self.data[:servers].values.select{|s| s["zone"] == zone["selfLink"]}
|
||||
build_response(:body => {
|
||||
"kind" => "compute#instanceList",
|
||||
"selfLink" => "https://www.googleapis.com/compute/v1beta15/projects/#{@project}/zones/#{zone_name}/instances",
|
||||
"id" => "projects/#{@project}/zones/#{zone_name}/instances",
|
||||
"items" => servers
|
||||
})
|
||||
end
|
||||
|
||||
end
|
||||
|
|
|
@ -5,7 +5,13 @@ module Fog
|
|||
class Mock
|
||||
|
||||
def list_zones
|
||||
Fog::Mock.not_implemented
|
||||
zones = self.data[:zones].values
|
||||
build_response(:body => {
|
||||
"kind" => "compute#zoneList",
|
||||
"selfLink" => "https://www.googleapis.com/compute/v1beta15/projects/#{@project}/zones",
|
||||
"id" => "projects/#{@project}/zones",
|
||||
"items" => zones
|
||||
})
|
||||
end
|
||||
|
||||
end
|
||||
|
|
Loading…
Reference in a new issue